ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKaW5kZXggOTVkODAyZS4uZGVhNTVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKQEAgLTY1LDUgKzY1LDcgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvYWdueC9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9vdHVzL0tjb25maWciCisKIGVuZGlmICMgIVNUQUdJTkdfRVhDTFVERV9CVUlMRAogZW5kaWYgIyBTVEFHSU5HCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKaW5kZXggNzA0MzA2Zi4uNDNmNjM4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQpAQCAtMTUsMyArMTUsNCBAQAogb2JqLSQoQ09ORklHX1VTQl9BVE1FTCkJCSs9IGF0NzZfdXNiLwogb2JqLSQoQ09ORklHX1BPQ0gpCQkrPSBwb2NoLwogb2JqLSQoQ09ORklHX0FHTlgpCQkrPSBhZ254Lworb2JqLSQoQ09ORklHX09UVVMpCQkrPSBvdHVzLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2Ftc2R1LmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvYW1zZHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTEyM2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2Ftc2R1LmMKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiY3ByZWNvbXAuaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZHZXRBbXNkdVN1YkZyYW1lICAgICAgICAgICovCisvKiAgICAgIEdldCBhIHN1YmZyYW1lIGZyb20gYS1NU0RVLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBidWYgOiBBLU1TRFUgZnJhbWUgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgb2Zmc2V0IDogb2Zmc2V0IG9mIHN1YmZyYW1lIGluIHRoZSBBLU1TRFUgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTlVMTCBvciBzdWJmcmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJTkMuICAgIDIwMDcuMiAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3pidWZfdCogemZHZXRBbXNkdVN1YkZyYW1lKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QqIG9mZnNldCkKK3sKKyAgICB1MTZfdCBzdWJmcmFtZUxlbjsKKyAgICB1MTZfdCBhbXNkdUxlbiA9IHpmd0J1ZkdldFNpemUoZGV2LCBidWYpOworICAgIHpidWZfdCogbmV3QnVmOworCisgICAgWk1fUEVSRk9STUFOQ0VfUlhfQU1TRFUoZGV2LCBidWYsIGFtc2R1TGVuKTsKKworICAgIC8qIFZlcmlmeSBBLU1TRFUgbGVuZ3RoICovCisgICAgaWYgKGFtc2R1TGVuIDwgKCpvZmZzZXQgKyAxNCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBMb2NhdGUgQS1NU0RVIHN1YmZyYW1lIGJ5IG9mZnNldCBhbmQgdmVyaWZ5IHN1YmZyYW1lIGxlbmd0aCAqLworICAgIHN1YmZyYW1lTGVuID0gKHptd19idWZfcmVhZGIoZGV2LCBidWYsICpvZmZzZXQgKyAxMikgPDwgOCkgKworICAgICAgICAgICAgICAgICAgem13X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgKm9mZnNldCArIDEzKTsKKyAgICBpZiAoc3ViZnJhbWVMZW4gPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIFZlcmlmeSBBLU1TRFUgc3ViZnJhbWUgbGVuZ3RoICovCisgICAgaWYgKCgqb2Zmc2V0KzE0K3N1YmZyYW1lTGVuKSA8PSBhbXNkdUxlbikKKyAgICB7CisgICAgICAgIC8qIEFsbG9jYXRlIGEgbmV3IGJ1ZmZlciAqLworICAgICAgICBpZiAoKG5ld0J1ZiA9IHpmd0J1ZkFsbG9jYXRlKGRldiwgMjQrMitzdWJmcmFtZUxlbikpICE9IE5VTEwpCisgICAgICAgIHsKKyNpZmRlZiBaTV9FTkFCTEVfTkFUSVZFX1dJRkkKKyAgICAgICAgICAgIC8qIENvcHkgYW5kIGNvbnZlcnQgc3ViZnJhbWUgdG8gd2xhbiBmcmFtZSBmb3JtYXQgKi8KKyAgICAgICAgICAgIC8qIFNIQUxMIE5PVCBJTkNMVURFIFFPUyBhbmQgQU1TRFUgaGVhZGVyLiBSYXkgMjAwNzA4MDcgRm9yIFZpc3RhICovCisgICAgICAgICAgICB6ZlJ4QnVmZmVyQ29weShkZXYsIG5ld0J1ZiwgYnVmLCAwLCAwLCAyNCk7CisgICAgICAgICAgICB6ZlJ4QnVmZmVyQ29weShkZXYsIG5ld0J1ZiwgYnVmLCAyNCwgKm9mZnNldCsxNCwgc3ViZnJhbWVMZW4pOworICAgICAgICAgICAgemZ3QnVmU2V0U2l6ZShkZXYsIG5ld0J1ZiwgMjQrc3ViZnJhbWVMZW4pOworI2Vsc2UKKyAgICAgICAgICAgIC8qIENvcHkgc3ViZnJhbWUgdG8gbmV3IGJ1ZmZlciAqLworICAgICAgICAgICAgemZSeEJ1ZmZlckNvcHkoZGV2LCBuZXdCdWYsIGJ1ZiwgMCwgKm9mZnNldCwgMTQrc3ViZnJhbWVMZW4pOworICAgICAgICAgICAgemZ3QnVmU2V0U2l6ZShkZXYsIG5ld0J1ZiwgMTQrc3ViZnJhbWVMZW4pOworI2VuZGlmCisgICAgICAgICAgICAvKiBVcGRhdGUgb2Zmc2V0ICovCisgICAgICAgICAgICAqb2Zmc2V0ICs9ICgoKDE0K3N1YmZyYW1lTGVuKSszKSAmIDB4ZmZmYyk7CisKKyAgICAgICAgICAgIC8qIFJldHVybiBidWZmZXIgcG9pbnRlciAqLworICAgICAgICAgICAgcmV0dXJuIG5ld0J1ZjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZEZUFtc2R1ICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIERlLUFNU0RVLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBidWYgOiBBLU1TRFUgZnJhbWUgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgdmFwIDogVkFQIHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJTkMuICAgIDIwMDcuMiAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgemZEZUFtc2R1KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgdmFwLCB1OF90IGVuY3J5TW9kZSkKK3sKKyAgICB1MTZfdCBvZmZzZXQgPSBaTV9TSVpFX09GX1dMQU5fREFUQV9IRUFERVIrWk1fU0laRV9PRl9RT1NfQ1RSTDsKKyAgICB6YnVmX3QqIHN1YmZyYW1lQnVmOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIFpNX0JVRkZFUl9UUkFDRShkZXYsIGJ1ZikKKworICAgIGlmIChlbmNyeU1vZGUgPT0gWk1fQUVTIHx8IGVuY3J5TW9kZSA9PSBaTV9US0lQKQorICAgIHsKKyAgICAgICAgb2Zmc2V0ICs9IChaTV9TSVpFX09GX0lWICsgWk1fU0laRV9PRl9FWFRfSVYpOworICAgIH0KKyAgICBlbHNlIGlmIChlbmNyeU1vZGUgPT0gWk1fV0VQNjQgfHwgZW5jcnlNb2RlID09IFpNX1dFUDEyOCkKKyAgICB7CisgICAgICAgIG9mZnNldCArPSBaTV9TSVpFX09GX0lWOworICAgIH0KKworICAgIC8qIFJlcGVhdGx5IGNhbGxpbmcgemZHZXRBbXNkdVN1YkZyYW1lKCkgdW50aWwgTlVMTCByZXR1cm5lZCAqLworICAgIHdoaWxlICgoc3ViZnJhbWVCdWYgPSB6ZkdldEFtc2R1U3ViRnJhbWUoZGV2LCBidWYsICZvZmZzZXQpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgd2QtPmNvbW1UYWxseS5Ob3RpZnlORElTUnhGcm1DbnQrKzsKKyAgICAgICAgaWYgKHdkLT56ZmNiUmVjdkV0aCAhPSBOVUxMKQorICAgIAl7CisgICAgICAgICAgICB3ZC0+emZjYlJlY3ZFdGgoZGV2LCBzdWJmcmFtZUJ1ZiwgKHU4X3QpdmFwKTsKKyAgICAgICAgICAgIFpNX1BFUkZPUk1BTkNFX1JYX01TRFUoZGV2LCB3ZC0+dGljayk7CisgICAgICAgIH0KKyAgICB9CisgICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CisKKyAgICByZXR1cm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY2FnZy5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NhZ2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2ZkMDFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NhZ2cuYwpAQCAtMCwwICsxLDM2MTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBNb2R1bGUgTmFtZSA6IGNhZ2cuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEFic3RyYWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgVGhpcyBtb2R1bGUgY29udGFpbnMgQS1NUERVIGFnZ3JlZ2F0aW9uIHJlbGF0ZWQgZnVuY3Rpb25zLiAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE5PVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImNwcmVjb21wLmgiCisKK2V4dGVybiB1OF90IHpjVXBUb0FjWzhdOworY29uc3QgdThfdCBwcmlbXSA9IHszLDMsMiwzLDIsMSwzLDIsMSwwfTsKKworCit1MTZfdCBhZ2dyX2NvdW50OwordTMyX3Qgc3VjY2Vzc19tcGR1OwordTMyX3QgdG90YWxfbXBkdTsKKwordm9pZCB6ZkFnZ0luaXQoemRldl90KiBkZXYpCit7CisgICAgdTE2X3QgaSxqOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKyAgICAvKgorICAgICAqIHJlc2V0IHN0YSBpbmZvcm1hdGlvbgorICAgICAqLworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICB3ZC0+YWdnSW5pdGlhdGVkID0gMDsKKyAgICB3ZC0+YWRkYmFDb21wbGV0ZSA9IDA7CisgICAgd2QtPmFkZGJhQ291bnQgPSAwOworICAgIHdkLT5yZW9yZGVyID0gMTsKKyAgICBmb3IgKGk9MDsgaTxaTV9NQVhfU1RBX1NVUFBPUlQ7IGkrKykKKyAgICB7CisgICAgICAgIGZvciAoaj0wOyBqPFpNX0FDOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vd2QtPmFnZ1N0YVtpXS5hZ2dRTnVtYmVyW2pdID0gWk1fQUdHX1BPT0xfU0laRTsKKyAgICAgICAgICAgIHdkLT5hZ2dTdGFbaV0uYWdnRmxhZ1tqXSA9IHdkLT5hZ2dTdGFbaV0uY291bnRbal0gPSAwOworICAgICAgICAgICAgd2QtPmFnZ1N0YVtpXS50aWRfdHhbal0gPSBOVUxMOworICAgICAgICAgICAgd2QtPmFnZ1N0YVtpXS50aWRfdHhbaisxXSA9IE5VTEw7CisKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogcmVzZXQgVHgvUnggYWdncmVnYXRpb24gcXVldWUgaW5mb3JtYXRpb24KKyAgICAgKi8KKyAgICB3ZC0+YWdnU3RhdGUgPSAwOworICAgIGZvciAoaT0wOyBpPFpNX0FHR19QT09MX1NJWkU7IGkrKykKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIHJlc2V0IHR4IGFnZ3JlZ2F0aW9uIHF1ZXVlCisgICAgICAgICAqLworICAgICAgICB3ZC0+YWdnUVBvb2xbaV0gPSB6ZndNZW1BbGxvY2F0ZShkZXYsIHNpemVvZihzdHJ1Y3QgYWdnUXVldWUpKTsKKyAgICAgICAgaWYoIXdkLT5hZ2dRUG9vbFtpXSkKKyAgICAgICAgeworICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB3ZC0+YWdnUVBvb2xbaV0tPmFnZ0hlYWQgPSB3ZC0+YWdnUVBvb2xbaV0tPmFnZ1RhaWwgPQorICAgICAgICB3ZC0+YWdnUVBvb2xbaV0tPmFnZ1FFbmFibGVkID0gd2QtPmFnZ1FQb29sW2ldLT5hZ2dSZWFkeSA9CisgICAgICAgIHdkLT5hZ2dRUG9vbFtpXS0+Y2xlYXJGbGFnID0gd2QtPmFnZ1FQb29sW2ldLT5kZWxldGVGbGFnID0gMDsKKyAgICAgICAgLy93ZC0+YWdnUVBvb2xbaV0tPmFnZ1NpemUgPSAxNjsKKworICAgICAgICAvKgorICAgICAgICAgKiByZXNldCByeCBhZ2dyZWdhdGlvbiBxdWV1ZQorICAgICAgICAgKi8KKyAgICAgICAgd2QtPnRpZF9yeFtpXSA9IHpmd01lbUFsbG9jYXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBhZ2dfdGlkX3J4KSk7CisgICAgICAgIGlmICghd2QtPnRpZF9yeFtpXSkKKyAgICAgICAgeworICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB3ZC0+dGlkX3J4W2ldLT5haWQgPSBaTV9NQVhfU1RBX1NVUFBPUlQ7CisgICAgICAgIHdkLT50aWRfcnhbaV0tPnNlcV9zdGFydCA9IHdkLT50aWRfcnhbaV0tPmJhd19oZWFkID0gXAorICAgICAgICB3ZC0+dGlkX3J4W2ldLT5iYXdfdGFpbCA9IDA7CisgICAgICAgIHdkLT50aWRfcnhbaV0tPnNxX2V4Y2VlZF9jb3VudCA9IHdkLT50aWRfcnhbaV0tPnNxX2JlaGluZF9jb3VudCA9IDA7CisgICAgICAgIGZvciAoaj0wOyBqPD1aTV9BR0dfQkFXX1NJWkU7IGorKykKKyAgICAgICAgICAgIHdkLT50aWRfcnhbaV0tPmZyYW1lW2pdLmJ1ZiA9IDA7CisgICAgICAgIC8qCisgICAgICAgICAqIHJlc2V0IEFEREJBIGV4Y2hhbmdlIHN0YXR1cyBjb2RlCisgICAgICAgICAqIDA6IE5VTEwKKyAgICAgICAgICogMTogQUREQkEgUmVxdWVzdCBzZW50L3JlY2VpdmVkCisgICAgICAgICAqIDI6IEFDSyBmb3IgQUREQkEgUmVxdWVzdCBzZW50L3JlY2VpdmVkCisgICAgICAgICAqIDM6IEFEREJBIFJlc3BvbnNlIHNlbnQvcmVjZWl2ZWQKKyAgICAgICAgICogNDogQUNLIGZvciBBRERCQSBSZXNwb25zZSBzZW50L3JlY2VpdmVkCisgICAgICAgICAqLworICAgICAgICB3ZC0+dGlkX3J4W2ldLT5hZGRCYUV4Y2hhbmdlU3RhdHVzQ29kZSA9IDA7CisKKyAgICB9CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICB6ZkFnZ1RhbGx5UmVzZXQoZGV2KTsKKyAgICBERVNUUS5pbml0ID0gemZBZ2dEZXN0SW5pdDsKKyAgICBERVNUUS5pbml0KGRldik7CisgICAgd2QtPmFnZ0luaXRpYXRlZCA9IDE7CisgICAgYWdncl9jb3VudCA9IDA7CisgICAgc3VjY2Vzc19tcGR1ID0gMDsKKyAgICB0b3RhbF9tcGR1ID0gMDsKKyNpZmRlZiBaTV9FTkFCTEVfQUdHUkVHQVRJT04KKyNpZm5kZWYgWk1fRU5BQkxFX0ZXX0JBX1JFVFJBTlNNSVNTSU9OIC8vZGlzYWJsZSBCQVcKKyAgICBCQVcgPSB6ZndNZW1BbGxvY2F0ZShkZXYsIHNpemVvZihzdHJ1Y3QgYmF3X2VuYWJsZXIpKTsKKyAgICBpZighQkFXKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBCQVctPmluaXQgPSB6ZkJhd0luaXQ7CisgICAgQkFXLT5pbml0KGRldik7CisjZW5kaWYgLy9kaXNhYmxlIEJBVworI2VuZGlmCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkFnZ0dldFN0YSAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgcmV0dXJuIFNUQSBBSUQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHRha2UgYnVmIGFzIGlucHV0LCB1c2UgdGhlIGRlc3QgYWRkcmVzcyBvZiBidWYgYXMgaW5kZXggdG8gICAgICAqLworLyogICAgICBzZWFyY2ggU1RBIEFJRC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmIDogYnVmZmVyIGZvciBvbmUgcGFydGljdWxhciBwYWNrZXQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgQUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgSG9uZGEgICAgICAgICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDYuMTEgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKK3UxNl90IHpmQWdnR2V0U3RhKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZikKK3sKKyAgICB1MTZfdCBpZDsKKyAgICB1MTZfdCBkc3RbM107CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgZHN0WzBdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMCk7CisgICAgZHN0WzFdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMik7CisgICAgZHN0WzJdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgNCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgaWYod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApIHsKKyAgICAgICAgaWQgPSB6ZkFwRmluZFN0YShkZXYsIGRzdCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZCA9IDA7CisgICAgfQorICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyNpZiBaTV9BR0dfRlBHQV9ERUJVRworICAgIGlkID0gMDsKKyNlbmRpZgorCisgICAgcmV0dXJuIGlkOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkFnZ1R4R2V0UXVldWUgICAgICAgICAgICAgKi8KKy8qICAgICAgcmV0dXJuIFF1ZXVlIFBvb2wgaW5kZXguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHRha2UgYWlkIGFzIGlucHV0LCBsb29rIGZvciB0aGUgcXVldWUgaW5kZXggYXNzb2NpYXRlZCAgICAgICAgICAqLworLyogICAgICB3aXRoIHRoaXMgYWlkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYWlkIDogYXNzb2NpYXRlZCBpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgUXVldWUgbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgSG9uZGEgICAgICAgICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDYuMTEgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK1RJRF9UWCB6ZkFnZ1R4R2V0UXVldWUoemRldl90KiBkZXYsIHUxNl90IGFpZCwgdTE2X3QgdGlkKQoreworICAgIC8vdTE2X3QgICBpOworICAgIFRJRF9UWCAgdGlkX3R4OworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8vem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIC8qCisgICAgICogbm90IGEgU1RBIGFpZAorICAgICAqLworICAgIGlmICgweGZmZmYgPT0gYWlkKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8vem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHRpZF90eCA9IHdkLT5hZ2dTdGFbYWlkXS50aWRfdHhbdGlkXTsKKyAgICBpZiAoIXRpZF90eCkgcmV0dXJuIE5VTEw7CisgICAgaWYgKDAgPT0gdGlkX3R4LT5hZ2dRRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvL3ptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICByZXR1cm4gdGlkX3R4OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZBZ2dUeE5ld1F1ZXVlICAgICAgICAgICAgICovCisvKiAgICAgIHJldHVybiBRdWV1ZSBQb29sIGluZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICB0YWtlIGFpZCBhcyBpbnB1dCwgZmluZCBhIG5ldyBxdWV1ZSBmb3IgdGhpcyBhaWQuICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYWlkIDogYXNzb2NpYXRlZCBpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgUXVldWUgbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgSG9uZGEgICAgICAgICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDYuMTIgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK1RJRF9UWCB6ZkFnZ1R4TmV3UXVldWUoemRldl90KiBkZXYsIHUxNl90IGFpZCwgdTE2X3QgdGlkLCB6YnVmX3QqIGJ1ZikKK3sKKyAgICB1MTZfdCAgIGk7CisgICAgVElEX1RYICB0aWRfdHg9TlVMTDsKKyAgICB1MTZfdCAgIGFjID0gemNVcFRvQWNbdGlkJjB4N10gJiAweDM7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIC8qCisgICAgICogbm90IGEgU1RBIGFpZAorICAgICAqLworICAgIGlmICgweGZmZmYgPT0gYWlkKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAvKgorICAgICAqIGZpbmQgb25lIG5ldyBxdWV1ZSBmb3Igc3RhCisgICAgICovCisgICAgZm9yIChpPTA7IGk8Wk1fQUdHX1BPT0xfU0laRTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKHdkLT5hZ2dRUG9vbFtpXS0+YWdnUUVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIHRoaXMgcSBpcyBlbmFibGVkCisgICAgICAgICAgICAgICAgICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB0aWRfdHggPSB3ZC0+YWdnUVBvb2xbaV07CisgICAgICAgICAgICB0aWRfdHgtPmFnZ1FFbmFibGVkID0gMTsKKyAgICAgICAgICAgIHRpZF90eC0+YWdnUVNUQSA9IGFpZDsKKyAgICAgICAgICAgIHRpZF90eC0+YWMgPSBhYzsKKyAgICAgICAgICAgIHRpZF90eC0+dGlkID0gdGlkOworICAgICAgICAgICAgdGlkX3R4LT5hZ2dIZWFkID0gdGlkX3R4LT5hZ2dUYWlsID0gdGlkX3R4LT5zaXplID0gMDsKKyAgICAgICAgICAgIHRpZF90eC0+YWdnUmVhZHkgPSAwOworICAgICAgICAgICAgd2QtPmFnZ1N0YVthaWRdLnRpZF90eFt0aWRdID0gdGlkX3R4OworICAgICAgICAgICAgdGlkX3R4LT5kc3RbMF0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAwKTsKKyAgICAgICAgICAgIHRpZF90eC0+ZHN0WzFdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMik7CisgICAgICAgICAgICB0aWRfdHgtPmRzdFsyXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgcmV0dXJuIHRpZF90eDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkFnZ1R4RW5xdWV1ZSAgICAgICAgICAgICAgKi8KKy8qICAgICAgcmV0dXJuIFN0YXR1cyBjb2RlIFpNX1NVQ0NFU1Mgb3IgZXJyb3IgY29kZSAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHRha2UgKGFpZCxhYyxxbnVtLGJ1ZikgYXMgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBhaWQgOiBhc3NvY2lhdGVkIGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYWMgIDogYWNjZXNzIGNhdGVnb3J5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHFudW06IHRoZSBxdWV1ZSBudW1iZXIgdG8gd2hpY2ggd2lsbCBiZSBlbnF1ZXVlZCAgICAgICAgICAgICAgICAqLworLyogICAgICBidWYgOiB0aGUgcGFja2V0IHRvIGJlIHF1ZXVlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBzdGF0dXMgY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBIb25kYSAgICAgICAgICAgICAgIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIElOQy4gICAgMjAwNi4xMiAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZBZ2dUeEVucXVldWUoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBhaWQsIFRJRF9UWCB0aWRfdHgpCit7CisgICAgLy91MTZfdCAgIHFsZW4sIGZyYW1lTGVuOworICAgIHUzMl90ICAgdGltZTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgdGlkX3R4LT5zaXplID0gem1fYWdnX3FsZW4oZGV2LCB0aWRfdHgtPmFnZ0hlYWQsIHRpZF90eC0+YWdnVGFpbCk7CisKKyAgICBpZiAodGlkX3R4LT5zaXplIDwgKFpNX0FHR1FfU0laRSAtIDIpKQorICAgIHsKKyAgICAgICAgLyogUXVldWUgbm90IGZ1bGwgKi8KKworCisgICAgICAgIC8qCisgICAgICAgICAqIGJ1ZmZlciBjb3B5CisgICAgICAgICAqIGluIHpmd0J1ZkZyZWUgd2lsbCByZXR1cm4gYSBuZGlzbXNlbmRjb21wbGV0ZQorICAgICAgICAgKiB0byByZXNvbHZlIHRoZSBzeW5jaHJvbml6ZSBwcm9ibGVtIGluIGFnZ3JlZ2F0ZQorICAgICAgICAgKi8KKworICAgICAgICB1OF90ICAgIHNlbmRDb21wbGV0ZSA9IDA7CisKKyAgICAgICAgdGlkX3R4LT5hZ2d2dHhxW3RpZF90eC0+YWdnSGVhZF0uYnVmID0gYnVmOworICAgICAgICB0aW1lID0gem1fYWdnX0dldFRpbWUoKTsKKyAgICAgICAgdGlkX3R4LT5hZ2d2dHhxW3RpZF90eC0+YWdnSGVhZF0uYXJyaXZhbFRpbWUgPSB0aW1lOworICAgICAgICB0aWRfdHgtPmFnZ3Z0eHFbdGlkX3R4LT5hZ2dIZWFkXS5iYXdfcmV0cmFuc21pdCA9IDA7CisKKyAgICAgICAgdGlkX3R4LT5hZ2dIZWFkID0gKCh0aWRfdHgtPmFnZ0hlYWQgKyAxKSAmIFpNX0FHR1FfU0laRV9NQVNLKTsKKyAgICAgICAgdGlkX3R4LT5sYXN0QXJyaXZhbCA9IHRpbWU7CisgICAgICAgIHRpZF90eC0+c2l6ZSsrOworICAgICAgICB0aWRfdHgtPnNpemUgPSB6bV9hZ2dfcWxlbihkZXYsIHRpZF90eC0+YWdnSGVhZCwgdGlkX3R4LT5hZ2dUYWlsKTsKKyAgICAgICAgaWYgKGJ1ZiAmJiAodGlkX3R4LT5zaXplIDwgKFpNX0FHR1FfU0laRSAtIDEwKSkpIHsKKyAgICAgICAgICAgIHRpZF90eC0+Y29tcGxldGUgPSB0aWRfdHgtPmFnZ0hlYWQ7CisgICAgICAgICAgICBzZW5kQ29tcGxldGUgPSAxOworICAgICAgICB9CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgaWYgKCFERVNUUS5leGlzdChkZXYsIDAsIHRpZF90eC0+YWMsIHRpZF90eCwgTlVMTCkpIHsKKyAgICAgICAgICAgIERFU1RRLmluc2VydChkZXYsIDAsIHRpZF90eC0+YWMsIHRpZF90eCwgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICB6bV9tc2cxX2FnZyhaTV9MVl8wLCAidGlkX3R4LT5zaXplPSIsIHRpZF90eC0+c2l6ZSk7CisgICAgICAgIC8vem1fZGVidWdfbXNnMSgidGlkX3R4LT5zaXplPSIsIHRpZF90eC0+c2l6ZSk7CisKKyAgICAgICAgaWYgKGJ1ZiAmJiBzZW5kQ29tcGxldGUgJiYgd2QtPnpmY2JTZW5kQ29tcGxldGVJbmRpY2F0aW9uKSB7CisgICAgICAgICAgICAvL3ptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICB3ZC0+emZjYlNlbmRDb21wbGV0ZUluZGljYXRpb24oZGV2LCBidWYpOworICAgICAgICB9CisKKyAgICAgICAgLyppZiAodGlkX3R4LT5zaXplID49IDE2ICYmIHpmSHBHZXRGcmVlVHhkQ291bnQoZGV2KSA+IDIwKQorICAgICAgICAgICAgemZBZ2dUeFNlbmQoZGV2LCB6ZkhwR2V0RnJlZVR4ZENvdW50KGRldiksIHRpZF90eCk7CisgICAgICAgICovCisgICAgICAgIHJldHVybiBaTV9TVUNDRVNTOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB6bV9tc2cxX2FnZyhaTV9MVl8wLCAiY2FuJ3QgZW5xdWV1ZSwgdGlkX3R4LT5zaXplPSIsIHRpZF90eC0+c2l6ZSk7CisgICAgICAgIC8qCisgICAgICAgICAqIFF1ZXVlIEZ1bGwKKyAgICAgICAgICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogem1fbXNnMV9hZ2coWk1fTFZfMCwgIlF1ZXVlIGZ1bGwsIHFudW0gPSAiLCBxbnVtKTsKKyAgICAgICAgICogd2QtPmNvbW1UYWxseS50eFFvc0Ryb3BDb3VudFthY10rKzsKKyAgICAgICAgICogemZ3QnVmRnJlZShkZXYsIGJ1ZiwgWk1fU1VDQ0VTUyk7CisgICAgICAgICAqIHptX21zZzFfYWdnKFpNX0xWXzEsICJQYWNrZXQgZGlzY2FyZGVkLCBWVFhRIGZ1bGwsIGFjPSIsIGFjKTsKKyAgICAgICAgICoKKyAgICAgICAgICogcmV0dXJuIFpNX0VSUl9FWENFRURfUFJJT1JJVFlfVEhSRVNIT0xEOworICAgICAgICAgKi8KKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgaWYgKCFERVNUUS5leGlzdChkZXYsIDAsIHRpZF90eC0+YWMsIHRpZF90eCwgTlVMTCkpIHsKKyAgICAgICAgICAgIERFU1RRLmluc2VydChkZXYsIDAsIHRpZF90eC0+YWMsIHRpZF90eCwgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIFpNX0VSUl9FWENFRURfUFJJT1JJVFlfVEhSRVNIT0xEOworfQorCit1MTZfdCAgICB6ZkFnZ0Rlc3RFeGlzdCh6ZGV2X3QqIGRldiwgdTE2X3QgUXR5cGUsIHUxNl90IGFjLCBUSURfVFggdGlkX3R4LCB2b2lkKiB2dHhxKSB7CisgICAgc3RydWN0IGRlc3QqIGRlc3Q7CisgICAgdTE2X3QgICBleGlzdCA9IDA7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgaWYgKCFERVNUUS5IZWFkW2FjXSkgeworICAgICAgICBleGlzdCA9IDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBkZXN0ID0gREVTVFEuSGVhZFthY107CisgICAgICAgIGlmIChkZXN0LT50aWRfdHggPT0gdGlkX3R4KSB7CisgICAgICAgICAgICBleGlzdCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB3aGlsZSAoZGVzdC0+bmV4dCAhPSBERVNUUS5IZWFkW2FjXSkgeworICAgICAgICAgICAgICAgIGRlc3QgPSBkZXN0LT5uZXh0OworICAgICAgICAgICAgICAgIGlmIChkZXN0LT50aWRfdHggPT0gdGlkX3R4KXsKKyAgICAgICAgICAgICAgICAgICAgZXhpc3QgPSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgcmV0dXJuIGV4aXN0OworfQorCit2b2lkICAgIHpmQWdnRGVzdEluc2VydCh6ZGV2X3QqIGRldiwgdTE2X3QgUXR5cGUsIHUxNl90IGFjLCBUSURfVFggdGlkX3R4LCB2b2lkKiB2dHhxKQoreworICAgIHN0cnVjdCBkZXN0KiBuZXdfZGVzdDsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgbmV3X2Rlc3QgPSB6ZndNZW1BbGxvY2F0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZGVzdCkpOworICAgIGlmKCFuZXdfZGVzdCkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbmV3X2Rlc3QtPlF0eXBlID0gUXR5cGU7CisgICAgbmV3X2Rlc3QtPnRpZF90eCA9IHRpZF90eDsKKyAgICBpZiAoMCA9PSBRdHlwZSkKKyAgICAgICAgbmV3X2Rlc3QtPnRpZF90eCA9IHRpZF90eDsKKyAgICBlbHNlCisgICAgICAgIG5ld19kZXN0LT52dHhxID0gdnR4cTsKKyAgICBpZiAoIURFU1RRLkhlYWRbYWNdKSB7CisKKyAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgbmV3X2Rlc3QtPm5leHQgPSBuZXdfZGVzdDsKKyAgICAgICAgREVTVFEuSGVhZFthY10gPSBERVNUUS5kZXN0W2FjXSA9IG5ld19kZXN0OworICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIH0KKyAgICBlbHNlIHsKKworICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICBuZXdfZGVzdC0+bmV4dCA9IERFU1RRLmRlc3RbYWNdLT5uZXh0OworICAgICAgICBERVNUUS5kZXN0W2FjXS0+bmV4dCA9IG5ld19kZXN0OworICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIH0KKworCisgICAgLy9ERVNUUS5zaXplW2FjXSsrOworICAgIHJldHVybjsKK30KKwordm9pZCAgICB6ZkFnZ0Rlc3REZWxldGUoemRldl90KiBkZXYsIHUxNl90IFF0eXBlLCBUSURfVFggdGlkX3R4LCB2b2lkKiB2dHhxKQoreworICAgIHN0cnVjdCBkZXN0KiBkZXN0LCAqdGVtcDsKKyAgICB1MTZfdCAgIGk7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICBpZiAod2QtPmRlc3RMb2NrKSB7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKworICAgIC8vem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKyAgICBmb3IgKGk9MDsgaTw0OyBpKyspIHsKKyAgICAgICAgaWYgKCFERVNUUS5IZWFkW2ldKSBjb250aW51ZTsKKyAgICAgICAgZGVzdCA9IERFU1RRLkhlYWRbaV07CisgICAgICAgIGlmICghZGVzdCkgY29udGludWU7CisKKworICAgICAgICB3aGlsZSAoZGVzdCAmJiAoZGVzdC0+bmV4dCAhPSBERVNUUS5IZWFkW2ldKSkgeworICAgICAgICAgICAgaWYgKFF0eXBlID09IDAgJiYgZGVzdC0+bmV4dC0+dGlkX3R4ID09IHRpZF90eCl7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoUXR5cGUgPT0gMSAmJiBkZXN0LT5uZXh0LT52dHhxID09IHZ0eHEpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlc3QgPSBkZXN0LT5uZXh0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKChRdHlwZSA9PSAwICYmIGRlc3QtPm5leHQtPnRpZF90eCA9PSB0aWRfdHgpIHx8IChRdHlwZSA9PSAxICYmIGRlc3QtPm5leHQtPnZ0eHEgPT0gdnR4cSkpIHsKKworICAgICAgICAgICAgdGlkX3R4LT5zaXplID0gem1fYWdnX3FsZW4oZGV2LCB0aWRfdHgtPmFnZ0hlYWQsIHRpZF90eC0+YWdnVGFpbCk7CisgICAgICAgICAgICBpZiAodGlkX3R4LT5zaXplKSB7CisgICAgICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIURFU1RRLkhlYWRbaV0pIHsKKyAgICAgICAgICAgICAgICB0ZW1wID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHRlbXAgPSBkZXN0LT5uZXh0OworICAgICAgICAgICAgICAgIGlmICh0ZW1wID09IGRlc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgREVTVFEuSGVhZFtpXSA9IERFU1RRLmRlc3RbaV0gPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAvL0RFU1RRLnNpemVbaV0gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdC0+bmV4dCA9IGRlc3QtPm5leHQtPm5leHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGVtcCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHsvKiBkbyBub3RoaW5nICovfSAvL3pmd01lbUZyZWUoZGV2LCB0ZW1wLCBzaXplb2Yoc3RydWN0IGRlc3QpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB6ZndNZW1GcmVlKGRldiwgdGVtcCwgc2l6ZW9mKHN0cnVjdCBkZXN0KSk7CisKKyAgICAgICAgICAgIC8qem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIGlmIChERVNUUS5zaXplW2ldID4gMCkKKyAgICAgICAgICAgICAgICBERVNUUS5zaXplW2ldLS07CisgICAgICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgKi8KKyAgICAgICAgfQorCisgICAgfQorICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgcmV0dXJuOworfQorCit2b2lkICAgIHpmQWdnRGVzdEluaXQoemRldl90KiBkZXYpCit7CisgICAgdTE2X3QgaTsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvL3ptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICBmb3IgKGk9MDsgaTw0OyBpKyspIHsKKyAgICAgICAgLy93ZC0+ZGVzdFEuSGVhZFtpXS5uZXh0ID0gd2QtPmRlc3RRLkhlYWRbaV07CisgICAgICAgIC8vd2QtPmRlc3RRLmRlc3RbaV0gPSB3ZC0+ZGVzdFEuSGVhZFtpXTsKKyAgICAgICAgLy9ERVNUUS5zaXplW2ldID0gMDsKKyAgICAgICAgREVTVFEuSGVhZFtpXSA9IE5VTEw7CisgICAgfQorICAgIERFU1RRLmluc2VydCAgPSB6ZkFnZ0Rlc3RJbnNlcnQ7CisgICAgREVTVFEuZGVsZXRlICA9IHpmQWdnRGVzdERlbGV0ZTsKKyAgICBERVNUUS5pbml0ICAgID0gemZBZ2dEZXN0SW5pdDsKKyAgICBERVNUUS5nZXROZXh0ID0gemZBZ2dEZXN0R2V0TmV4dDsKKyAgICBERVNUUS5leGlzdCAgID0gemZBZ2dEZXN0RXhpc3Q7CisgICAgREVTVFEucHByaSA9IDA7CisgICAgcmV0dXJuOworfQorCitzdHJ1Y3QgZGVzdCogemZBZ2dEZXN0R2V0TmV4dCh6ZGV2X3QqIGRldiwgdTE2X3QgYWMpCit7CisgICAgc3RydWN0IGRlc3QgKmRlc3QgPSBOVUxMOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIGlmIChERVNUUS5kZXN0W2FjXSkgeworICAgICAgICBkZXN0ID0gREVTVFEuZGVzdFthY107CisgICAgICAgIERFU1RRLmRlc3RbYWNdID0gREVTVFEuZGVzdFthY10tPm5leHQ7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBkZXN0ID0gTlVMTDsKKyAgICB9CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHJldHVybiBkZXN0OworfQorCisjaWZkZWYgWk1fRU5BQkxFX0FHR1JFR0FUSU9OCisjaWZuZGVmIFpNX0VOQUJMRV9GV19CQV9SRVRSQU5TTUlTU0lPTiAvL2Rpc2FibGUgQkFXCit1MTZfdCAgIHpmQWdnVGlkVHhJbnNlcnRIZWFkKHpkZXZfdCogZGV2LCBzdHJ1Y3QgYnVmSW5mbyAqYnVmX2luZm8sVElEX1RYIHRpZF90eCkKK3sKKyAgICB6YnVmX3QqIGJ1ZjsKKyAgICB1MzJfdCB0aW1lOworICAgIHN0cnVjdCBiYXdfaGVhZGVyICpiYXdfaGVhZGVyOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworCisgICAgYnVmID0gYnVmX2luZm8tPmJ1ZjsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgdGlkX3R4LT5zaXplID0gem1fYWdnX3FsZW4oZGV2LCB0aWRfdHgtPmFnZ0hlYWQsIHRpZF90eC0+YWdnVGFpbCk7CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlmICh0aWRfdHgtPnNpemUgPj0gKFpNX0FHR1FfU0laRSAtIDIpKSB7CisgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIFpNX1NVQ0NFU1MpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIHRpZF90eC0+YWdnVGFpbCA9ICh0aWRfdHgtPmFnZ1RhaWwgPT0gMCk/IFpNX0FHR1FfU0laRV9NQVNLOiB0aWRfdHgtPmFnZ1RhaWwgLSAxOworICAgIHRpZF90eC0+YWdndnR4cVt0aWRfdHgtPmFnZ1RhaWxdLmJ1ZiA9IGJ1ZjsKKyAgICAvL3RpbWUgPSB6bV9hZ2dfR2V0VGltZSgpOworICAgIHRpZF90eC0+YWdndnR4cVt0aWRfdHgtPmFnZ1RhaWxdLmFycml2YWxUaW1lID0gYnVmX2luZm8tPnRpbWVzdGFtcDsKKyAgICB0aWRfdHgtPmFnZ3Z0eHFbdGlkX3R4LT5hZ2dUYWlsXS5iYXdfcmV0cmFuc21pdCA9IGJ1Zl9pbmZvLT5iYXdfcmV0cmFuc21pdDsKKworICAgIGJhd19oZWFkZXIgPSAmdGlkX3R4LT5hZ2d2dHhxW3RpZF90eC0+YWdnVGFpbF0uYmF3X2hlYWRlcjsKKyAgICBiYXdfaGVhZGVyLT5oZWFkZXJMZW4gICA9IGJ1Zl9pbmZvLT5iYXdfaGVhZGVyLT5oZWFkZXJMZW47CisgICAgYmF3X2hlYWRlci0+bWljTGVuICAgICAgPSBidWZfaW5mby0+YmF3X2hlYWRlci0+bWljTGVuOworICAgIGJhd19oZWFkZXItPnNuYXBMZW4gICAgID0gYnVmX2luZm8tPmJhd19oZWFkZXItPnNuYXBMZW47CisgICAgYmF3X2hlYWRlci0+cmVtb3ZlTGVuICAgPSBidWZfaW5mby0+YmF3X2hlYWRlci0+cmVtb3ZlTGVuOworICAgIGJhd19oZWFkZXItPmtleUlkeCAgICAgID0gYnVmX2luZm8tPmJhd19oZWFkZXItPmtleUlkeDsKKyAgICB6ZndNZW1vcnlDb3B5KCh1OF90ICopYmF3X2hlYWRlci0+aGVhZGVyLCAodThfdCAqKWJ1Zl9pbmZvLT5iYXdfaGVhZGVyLT5oZWFkZXIsIDU4KTsKKyAgICB6ZndNZW1vcnlDb3B5KCh1OF90ICopYmF3X2hlYWRlci0+bWljICAgLCAodThfdCAqKWJ1Zl9pbmZvLT5iYXdfaGVhZGVyLT5taWMgICAsIDgpOworICAgIHpmd01lbW9yeUNvcHkoKHU4X3QgKiliYXdfaGVhZGVyLT5zbmFwICAsICh1OF90ICopYnVmX2luZm8tPmJhd19oZWFkZXItPnNuYXAgICwgOCk7CisKKyAgICB0aWRfdHgtPnNpemUrKzsKKyAgICB0aWRfdHgtPnNpemUgPSB6bV9hZ2dfcWxlbihkZXYsIHRpZF90eC0+YWdnSGVhZCwgdGlkX3R4LT5hZ2dUYWlsKTsKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgLy90aWRfdHgtPmxhc3RBcnJpdmFsID0gdGltZTsKKyAgICBpZiAoMSA9PSB0aWRfdHgtPnNpemUpIHsKKyAgICAgICAgREVTVFEuaW5zZXJ0KGRldiwgMCwgdGlkX3R4LT5hYywgdGlkX3R4LCBOVUxMKTsKKyAgICB9CisKKworICAgIHptX21zZzFfYWdnKFpNX0xWXzAsICIweEMyOmluc2VydEhlYWQsIHRpZF90eC0+c2l6ZT0iLCB0aWRfdHgtPnNpemUpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisjZW5kaWYgLy9kaXNhYmxlIEJBVworI2VuZGlmCisKK3ZvaWQgICAgemZpVHhDb21wbGV0ZSh6ZGV2X3QqIGRldikKK3sKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8vem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIGlmKCAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApIHx8CisgICAgICAgICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSAmJiB3ZC0+c3RhLkVuYWJsZUhUKSB8fAorICAgICAgICAod2QtPndsYW5Nb2RlID09IFpNX01PREVfUFNFVURPKSApIHsKKyAgICAgICAgemZBZ2dUeFNjaGVkdWxlcihkZXYsIDApOworICAgIH0KKworICAgIHJldHVybjsKK30KKworVElEX1RYICB6ZkFnZ1R4UmVhZHkoemRldl90KiBkZXYpIHsKKyAgICAvL3N0cnVjdCBkZXN0KiBkZXN0OworICAgIHUxNl90ICAgaTsKKyAgICBUSURfVFggIHRpZF90eCA9IE5VTEw7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgZm9yIChpPTA7IGk8Wk1fQUdHX1BPT0xfU0laRTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKHdkLT5hZ2dRUG9vbFtpXS0+YWdnUUVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3ZC0+YWdnUVBvb2xbaV0tPnNpemUgPj0gMTYpIHsKKyAgICAgICAgICAgICAgICB0aWRfdHggPSB3ZC0+YWdnUVBvb2xbaV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgIH0KKyAgICB9CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICByZXR1cm4gdGlkX3R4OworfQorCit1MTZfdCAgIHpmQWdnVmFsaWRUaWRUeCh6ZGV2X3QqIGRldiwgVElEX1RYIHRpZF90eCkgeworICAgIHUxNl90ICAgaSwgdmFsaWQgPSAwOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIGZvciAoaT0wOyBpPFpNX0FHR19QT09MX1NJWkU7IGkrKykKKyAgICB7CisgICAgICAgIGlmICh3ZC0+YWdnUVBvb2xbaV0gPT0gdGlkX3R4KQorICAgICAgICB7CisgICAgICAgICAgICB2YWxpZCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgfQorICAgIH0KKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgcmV0dXJuIHZhbGlkOworfQorCit2b2lkICAgIHpmQWdnVHhTY2hlZHVsZXIoemRldl90KiBkZXYsIHU4X3QgU2NhbkFuZENsZWFyKQoreworICAgIFRJRF9UWCAgdGlkX3R4ID0gTlVMTDsKKyAgICB2b2lkKiAgIHZ0eHE7CisgICAgc3RydWN0IGRlc3QqIGRlc3Q7CisgICAgemJ1Zl90KiAgYnVmOworICAgIHUzMl90IHR4cWwsIG1pbl90eHFsOworICAgIC8vdTE2X3QgYWdncl9zaXplID0gMTsKKyAgICB1MTZfdCB0eHFfdGhyZXNob2xkOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICBpZiAoIXdkLT5hZ2dJbml0aWF0ZWQpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogZGVidWcgKi8KKyAgICB0eHFsID0gVFhRTDsKKyAgICBtaW5fdHhxbCA9IEFHR19NSU5fVFhRTDsKKworICAgIGlmKHdkLT50eHFfdGhyZXNob2xkKQorICAgICAgICB0eHFfdGhyZXNob2xkID0gd2QtPnR4cV90aHJlc2hvbGQ7CisgICAgZWxzZQorICAgICAgICB0eHFfdGhyZXNob2xkID0gQUdHX01JTl9UWFFMOworCisgICAgdGlkX3R4ID0gemZBZ2dUeFJlYWR5KGRldik7CisgICAgaWYgKHRpZF90eCkgU2NhbkFuZENsZWFyID0gMDsKKyAgICB3aGlsZSAoemZIcEdldEZyZWVUeGRDb3VudChkZXYpID4gMjAgJiYgKFRYUUwgPCB0eHFfdGhyZXNob2xkIHx8IHRpZF90eCkpIHsKKyAgICAvL3doaWxlICh6ZkhwR2V0RnJlZVR4ZENvdW50KGRldikgPiAyMCAmJiAoU2NhbkFuZENsZWFyIHx8IHRpZF90eCkpIHsKKyAgICAvL3doaWxlIChUWFFMIDwgdHhxX3RocmVzaG9sZCkgeworICAgICAgICB1MTZfdCBpOworICAgICAgICB1OF90IGFjOworICAgICAgICBzOF90IGRlc3RRX2NvdW50ID0gMDsKKyAgICAvL3doaWxlICgoemZIcEdldEZyZWVUeGRDb3VudChkZXYpKSA+IDMyKSB7CisKKyAgICAgICAgLy9EYmdQcmludCgiemZBZ2dUeFNjaGVkdWxlcjogaW4gd2hpbGUgbG9vcCIpOworICAgICAgICBmb3IgKGk9MDsgaTw0OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChERVNUUS5IZWFkW2ldKSBkZXN0UV9jb3VudCsrOworICAgICAgICB9CisgICAgICAgIGlmICgwID49IGRlc3RRX2NvdW50KSBicmVhazsKKworICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICBhYyA9IHByaVtERVNUUS5wcHJpXTsgREVTVFEucHByaSA9IChERVNUUS5wcHJpICsgMSkgJSAxMDsKKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICBmb3IgKGk9MDsgaTwxMDsgaSsrKXsKKyAgICAgICAgICAgIGlmKERFU1RRLkhlYWRbYWNdKSBicmVhazsKKworICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIGFjID0gcHJpW0RFU1RRLnBwcmldOyBERVNUUS5wcHJpID0gKERFU1RRLnBwcmkgKyAxKSAlIDEwOworICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSA9PSAxMCkgYnJlYWs7CisgICAgICAgIC8vRGJnUHJpbnQoInpmQWdnVHhTY2hlZHVsZXI6IGhhdmUgZGVzdCBRIik7CisgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHdkLT5kZXN0TG9jayA9IDE7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgZGVzdCA9IERFU1RRLmdldE5leHQoZGV2LCBhYyk7CisgICAgICAgIGlmICghZGVzdCkgeworICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIHdkLT5kZXN0TG9jayA9IDA7CisgICAgICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgICAgICBEYmdQcmludCgiYnVnIHJlcG9ydCEgREVTVFEuZ2V0TmV4dCBnb3Qgbm90aGluZyEiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChkZXN0LT5RdHlwZSA9PSAwKSB7CisgICAgICAgICAgICB0aWRfdHggPSBkZXN0LT50aWRfdHg7CisKKyAgICAgICAgICAgIC8vRGJnUHJpbnQoInpmQWdnVHhTY2hlZHVsZXI6IGhhdmUgdGlkX3R4IFEiKTsKKworICAgICAgICAgICAgaWYodGlkX3R4ICYmIHpmQWdnVmFsaWRUaWRUeChkZXYsIHRpZF90eCkpCisgICAgICAgICAgICAgICAgdGlkX3R4LT5zaXplID0gem1fYWdnX3FsZW4oZGV2LCB0aWRfdHgtPmFnZ0hlYWQsIHRpZF90eC0+YWdnVGFpbCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgICAgIHdkLT5kZXN0TG9jayA9IDA7CisgICAgICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICAgICAgICAgIHRpZF90eCA9IHpmQWdnVHhSZWFkeShkZXYpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgd2QtPmRlc3RMb2NrID0gMDsKKyAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICAvL3ptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICBpZiAodGlkX3R4ICYmICF0aWRfdHgtPnNpemUpIHsKKworICAgICAgICAgICAgICAgIC8vem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgICAgICAvL0RFU1RRLmRlbGV0ZShkZXYsIDAsIHRpZF90eCwgTlVMTCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKHdkLT5hZ2dTdGF0ZSA9PSAwKXsKKyAgICAgICAgICAgICAgICAvL3dkLT5hZ2dTdGF0ZSA9IDE7CisgICAgICAgICAgICAgICAgLy96bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgICAgIHpmQWdnVHhTZW5kKGRldiwgemZIcEdldEZyZWVUeGRDb3VudChkZXYpLCB0aWRfdHgpOworICAgICAgICAgICAgICAgIC8vd2QtPmFnZ1N0YXRlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZ0eHEgPSBkZXN0LT52dHhxOworICAgICAgICAgICAgYnVmID0gemZHZXRWdHhxKGRldiwgYWMpOworICAgICAgICAgICAgem1fYXNzZXJ0KCBidWYgIT0gMCApOworCisgICAgICAgICAgICB6ZlR4U2VuZEV0aChkZXYsIGJ1ZiwgMCwgWk1fRVhURVJOQUxfQUxMT0NfQlVGLCAwKTsKKworICAgICAgICB9CisgICAgICAgIC8qZmx1c2ggYWxsIGJ1dCA8IDE2IGZyYW1lcyBpbiB0aWRfdHggdG8gVFhRKi8KKyAgICAgICAgdGlkX3R4ID0gemZBZ2dUeFJlYWR5KGRldik7CisgICAgfQorCisgICAgLyp3aGlsZSAoKHpmSHBHZXRGcmVlVHhkQ291bnQoZGV2KSkgPiAzMikgeworICAgIC8vd2hpbGUgKCh6ZkhwR2V0RnJlZVR4ZENvdW50KGRldikpID4gMzIpIHsKKworICAgICAgICBkZXN0UV9jb3VudCA9IDA7CisgICAgICAgIGZvciAoaT0wOyBpPDQ7IGkrKykgZGVzdFFfY291bnQgKz0gd2QtPmRlc3RRLnNpemVbaV07CisgICAgICAgIGlmICgwID49IGRlc3RRX2NvdW50KSBicmVhazsKKworICAgICAgICBhYyA9IHByaVt3ZC0+ZGVzdFEucHByaV07IHdkLT5kZXN0US5wcHJpID0gKHdkLT5kZXN0US5wcHJpICsgMSkgJSAxMDsKKyAgICAgICAgZm9yIChpPTA7IGk8MTA7IGkrKyl7CisgICAgICAgICAgICBpZih3ZC0+ZGVzdFEuc2l6ZVthY10hPTApIGJyZWFrOworICAgICAgICAgICAgYWMgPSBwcmlbd2QtPmRlc3RRLnBwcmldOyB3ZC0+ZGVzdFEucHByaSA9ICh3ZC0+ZGVzdFEucHByaSArIDEpICUgMTA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPT0gMTApIGJyZWFrOworICAgICAgICBkZXN0ID0gd2QtPmRlc3RRLmdldE5leHQoZGV2LCBhYyk7CisgICAgICAgIGlmIChkZXN0LT5RdHlwZSA9PSAwKSB7CisgICAgICAgICAgICB0aWRfdHggPSBkZXN0LT50aWRfdHg7CisgICAgICAgICAgICB0aWRfdHgtPnNpemUgPSB6bV9hZ2dfcWxlbihkZXYsIHRpZF90eC0+YWdnSGVhZCwgdGlkX3R4LT5hZ2dUYWlsKTsKKyAgICAgICAgICAgIGlmICghdGlkX3R4LT5zaXplKSB7CisgICAgICAgICAgICAgICAgd2QtPmRlc3RRLmRlbGV0ZShkZXYsIDAsIHRpZF90eCwgTlVMTCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCh3ZC0+YWdnU3RhdGUgPT0gMCkgJiYgKHRpZF90eC0+c2l6ZSA+PSAxNikpeworICAgICAgICAgICAgICAgIHpmQWdnVHhTZW5kKGRldiwgemZIcEdldEZyZWVUeGRDb3VudChkZXYpLCB0aWRfdHgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0KKyAgICAqLworICAgIHJldHVybjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmQWdnVHggICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICByZXR1cm4gU3RhdHVzIGNvZGUgWk1fU1VDQ0VTUyBvciBlcnJvciBjb2RlICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgbWFuYWdlbWVudCBBLU1QRFUgYWdncmVnYXRpb24gZnVuY3Rpb24sICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG1hbmFnZW1lbnQgYWdncmVnYXRpb24gcXVldWUsIGNhbGN1bGF0ZSBhcnJpdmFscmF0ZSwgICAgICAgICAgICAqLworLyogICAgICBhZGQvZGVsZXRlIGFuIGFnZ3JlZ2F0aW9uIHF1ZXVlIG9mIGEgc3RyZWFtLCAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZW5xdWV1ZSBwYWNrZXRzIGludG8gcmVzcG9uc2libGUgYWdncmVnYXRlIHF1ZXVlLiAgICAgICAgICAgICAgICovCisvKiAgICAgIHRha2UgKGRldiwgYnVmLCBhYykgYXMgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBidWYgOiBwYWNrZXQgYnVmZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYWMgIDogYWNjZXNzIGNhdGVnb3J5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgc3RhdHVzIGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgSG9uZGEgICAgICAgICAgICAgICBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJTkMuICAgIDIwMDYuMTIgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90IHpmQWdnVHgoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCB0aWQpCit7CisgICAgdTE2X3QgYWlkOworICAgIC8vdTE2X3QgcW51bTsKKyAgICAvL3UxNl90IGFnZ2ZsYWcgPSAwOworICAgIC8vdTE2X3QgYXJyaXZhbHJhdGUgPSAwOworICAgIFRJRF9UWCB0aWRfdHg7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgaWYoIXdkLT5hZ2dJbml0aWF0ZWQpCisgICAgeworICAgICAgICByZXR1cm4gWk1fRVJSX1RYX0JVRkZFUl9VTkFWQUlMQUJMRTsKKyAgICB9CisKKyAgICBhaWQgPSB6ZkFnZ0dldFN0YShkZXYsIGJ1Zik7CisKKyAgICAvL2Fycml2YWxyYXRlID0gemZBZ2dUeEFycml2YWxSYXRlKGRldiwgYWlkLCB0aWQpOworCisgICAgaWYgKDB4ZmZmZiA9PSBhaWQpCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBTVEEgbm90IGFzc29jaWF0ZWQsIHRoaXMgaXMgYSBCQy9NQyBvciBTVEEtPkFQIHBhY2tldAorICAgICAgICAgKi8KKworICAgICAgICByZXR1cm4gWk1fRVJSX1RYX0JVRkZFUl9VTkFWQUlMQUJMRTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNUQSBhc3NvY2lhdGVkLCBhIHVuaWNhc3QgcGFja2V0CisgICAgICovCisKKyAgICB0aWRfdHggPSB6ZkFnZ1R4R2V0UXVldWUoZGV2LCBhaWQsIHRpZCk7CisKKyAgICAvKnRpZF9xLnRpZF90eCA9IHRpZF90eDsKKyAgICB3ZC0+ZGVzdFEuaW5zZXJ0ID0gemZBZ2dEZXN0SW5zZXJ0OworICAgIHdkLT5kZXN0US5pbnNlcnQoZGV2LCAwLCB0aWRfcSk7CisgICAgKi8KKyAgICBpZiAodGlkX3R4ICE9IE5VTEwpCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiB0aGlzIChhaWQsIGFjKSBpcyBhZ2dyZWdhdGVkCisgICAgICAgICAqLworCisgICAgICAgIC8vaWYgKGFycml2YWxyYXRlIDwgWk1fQUdHX0xPV19USFJFU0hPTEQpCisgICAgICAgIGlmICgwKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogYXJyaXZhbCByYXRlIHRvbyBsb3cKKyAgICAgICAgICAgICAqIGRlbGV0ZSB0aGlzIGFnZ3JlZ2F0ZSBxdWV1ZQorICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgICAgIC8vd2QtPmFnZ1FQb29sW3FudW1dLT5jbGVhckZsYWcgPSB3ZC0+YWdnUVBvb2xbcW51bV0tPmRlbGV0ZUZsYWcgPTE7CisKKyAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB6ZkFnZ1R4RW5xdWV1ZShkZXYsIGJ1ZiwgYWlkLCB0aWRfdHgpOworCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIHRoaXMgKGFpZCwgYWMpIG5vdCB5ZXQgYWdncmVnYXRlZAorICAgICAgICAgKiBxdWV1ZSBub3QgZm91bmQKKyAgICAgICAgICovCisKKyAgICAgICAgLy9pZiAoYXJyaXZhbHJhdGUgPiBaTV9BR0dfSElHSF9USFJFU0hPTEQpCisgICAgICAgIGlmICgxKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogYXJyaXZhbHJhdGUgaGlnaCBlbm91Z2ggdG8gZ2V0IGEgbmV3IGFnZyBxdWV1ZQorICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgIHRpZF90eCA9IHpmQWdnVHhOZXdRdWV1ZShkZXYsIGFpZCwgdGlkLCBidWYpOworCisgICAgICAgICAgICAvL3ptX21zZzFfYWdnKFpNX0xWXzAsICJnZXQgbmV3IEFnZ1F1ZXVlIHFudW0gPSAiLCB0aWRfdHgtPik7CisKKyAgICAgICAgICAgIGlmICh0aWRfdHgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBnb3QgYSBuZXcgYWdncmVnYXRlIHF1ZXVlCisgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgICAgICAvL3ptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgICAgICAgICAvL3dkLT5hZ2dTdGFbYWlkXS5hZ2dGbGFnW2FjXSA9IDE7CisKKyAgICAgICAgICAgICAgICAvL3ptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIGFkZCBBRERCQSBmdW5jdGlvbnMgaGVyZQorICAgICAgICAgICAgICAgICAqIHJldHVybiBaTV9FUlJfVFhfQlVGRkVSX1VOQVZBSUxBQkxFOworICAgICAgICAgICAgICAgICAqLworCisKKyAgICAgICAgICAgICAgICAvL3pmQWdnU2VuZEFkZGJhUmVxdWVzdChkZXYsIHRpZF90eC0+ZHN0LCB0aWRfdHgtPmFjLCB0aWRfdHgtPnRpZCk7CisgICAgICAgICAgICAgICAgLy96bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgICAgICAgICAgLy93ZC0+YWdnU3RhW2FpZF0uYWdnRmxhZ1thY10gPSAwOworCisgICAgICAgICAgICAgICAgLy96bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHpmQWdnVHhFbnF1ZXVlKGRldiwgYnVmLCBhaWQsIHRpZF90eCk7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIGp1c3QgY2FuJ3QgZ2V0IGEgbmV3IGFnZ3JlZ2F0ZSBxdWV1ZQorICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgcmV0dXJuIFpNX0VSUl9UWF9CVUZGRVJfVU5BVkFJTEFCTEU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogYXJyaXZhbCByYXRlIGlzIG5vdCBoaWdoIGVub3VnaCB0byBnZXQgYSBuZXcgYWdnIHF1ZXVlCisgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgcmV0dXJuIFpNX0VSUl9UWF9CVUZGRVJfVU5BVkFJTEFCTEU7CisgICAgICAgIH0KKyAgICB9CisKKworCit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmQWdnVHhSZWFkeUNvdW50ICAgICAgICAgICAqLworLyogICAgICByZXR1cm4gY291bnRlciBvZiByZWFkeSB0byBhZ2dyZWdhdGUgcXVldWVzLiAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgdGFrZSAoZGV2LCBhYykgYXMgaW5wdXQsIG9ubHkgY2FsY3VsYXRlIHRoZSByZWFkeSB0byBhZ2dyZWdhdGUgICovCisvKiAgICAgIHF1ZXVlcyBvZiBvbmUgcGFydGljdWxhciBhYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBhYyAgOiBhY2Nlc3MgY2F0ZWdvcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBjb3VudGVyIG9mIHJlYWR5IHRvIGFnZ3JlZ2F0ZSBxdWV1ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBIb25kYSAgICAgICAgICAgICAgIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIElOQy4gICAgMjAwNi4xMiAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZBZ2dUeFJlYWR5Q291bnQoemRldl90KiBkZXYsIHUxNl90IGFjKQoreworICAgIHUxNl90IGk7CisgICAgdTE2X3QgcmVhZHljb3VudCA9IDA7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGZvciAoaT0wIDsgaTxaTV9BR0dfUE9PTF9TSVpFOyBpKyspCisgICAgeworICAgICAgICBpZiAod2QtPmFnZ1FQb29sW2ldLT5hZ2dRRW5hYmxlZCAmJiAod2QtPmFnZ1FQb29sW2ldLT5hZ2dSZWFkeSB8fCBcCisgICAgICAgICAgICAgICAgd2QtPmFnZ1FQb29sW2ldLT5jbGVhckZsYWcpICYmIGFjID09IHdkLT5hZ2dRUG9vbFtpXS0+YWMpCisgICAgICAgICAgICByZWFkeWNvdW50Kys7CisgICAgfQorCisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHJldHVybiByZWFkeWNvdW50OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZBZ2dUeFBhcnRpYWwgICAgICAgICAgICAgICovCisvKiAgICAgIHJldHVybiB0aGUgbnVtYmVyIHRoYXQgVnR4cSBoYXMgdG8gc2VuZC4gICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICB0YWtlIChkZXYsIGFjLCByZWFkeWNvdW50KSBhcyBpbnB1dCwgY2FsY3VsYXRlIHRoZSByYXRpbyBvZiAgICAgKi8KKy8qICAgICAgVnR4cSBsZW5ndGggdG8gKFZ0eHEgbGVuZ3RoICsgcmVhZHljb3VudCkgb2YgYSBwYXJ0aWN1bGFyIGFjLCAgICovCisvKiAgICAgIGFuZCByZXR1cm5zIHRoZSBWdHhxIGxlbmd0aCAqIHRoZSByYXRpbyAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBhYyAgOiBhY2Nlc3MgY2F0ZWdvcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgcmVhZHljb3VudDogdGhlIG51bWJlciBvZiByZWFkeSB0byBhZ2dyZWdhdGUgcXVldWVzIG9mIHRoaXMgYWMgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgVnR4cSBsZW5ndGggKiByYXRpbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgSG9uZGEgICAgICAgICAgICAgICBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJTkMuICAgIDIwMDYuMTIgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90IHpmQWdnVHhQYXJ0aWFsKHpkZXZfdCogZGV2LCB1MTZfdCBhYywgdTE2X3QgcmVhZHljb3VudCkKK3sKKyAgICB1MTZfdCBxbGVuOworICAgIHUxNl90IHBhcnRpYWw7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHFsZW4gPSB6bV9hZ2dfcWxlbihkZXYsIHdkLT52dHhxSGVhZFthY10sIHdkLT52dHhxVGFpbFthY10pOworCisgICAgaWYgKChxbGVuICsgcmVhZHljb3VudCkgPiAwKQorICAgIHsKKyAgICAgICAgcGFydGlhbCA9ICh1MTZfdCkoIHptX2FnZ193ZWlnaHQoYWMpICogKCh1MTZfdClxbGVuLyhxbGVuICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHljb3VudCkpICk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBhcnRpYWwgPSAwOworICAgIH0KKworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBpZiAocGFydGlhbCA+IHFsZW4pCisgICAgICAgIHBhcnRpYWwgPSBxbGVuOworCisgICAgcmV0dXJuIHBhcnRpYWw7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmQWdnVHhTZW5kICAgICAgICAgICAgICAgICAqLworLyogICAgICByZXR1cm4gc2VudGNvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgdGFrZSAoZGV2LCBhYywgbikgYXMgaW5wdXQsIG4gaXMgdGhlIG51bWJlciBvZiBzY2hlZHVsZWQgYWdnICAgICovCisvKiAgICAgIHF1ZXVlcyB0byBiZSBzZW50IG9mIHRoZSBwYXJ0aWN1bGFyIGFjLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBhYyAgOiBhY2Nlc3MgY2F0ZWdvcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgbiAgIDogdGhlIG51bWJlciBvZiBzY2hlZHVsZWQgYWdncmVnYXRpb24gcXVldWVzIHRvIGJlIHNlbnQgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgc2VudGNvdW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgSG9uZGEgICAgICAgICAgICAgICBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJTkMuICAgIDIwMDYuMTIgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90IHpmQWdnVHhTZW5kKHpkZXZfdCogZGV2LCB1MzJfdCBmcmVlVHhkLCBUSURfVFggdGlkX3R4KQoreworICAgIC8vdTE2X3QgICBxbnVtOworICAgIC8vdTE2X3QgICBxbGVuOworICAgIHUxNl90ICAgajsKKyAgICAvL3UxNl90ICAgc2VudGNvdW50ID0gMDsKKyAgICB6YnVmX3QqIGJ1ZjsKKyAgICBzdHJ1Y3QgIGFnZ0NvbnRyb2wgYWdnQ29udHJvbDsKKyAgICB1MTZfdCAgIGFnZ0xlbjsKKyAgICAvL3pidWZfdCogIG5ld0J1ZjsKKyAgICAvL3UxNl90ICAgYnVmTGVuOworICAgIC8vVElEX0JBVyB0aWRfYmF3ID0gTlVMTDsKKyAgICAvL3N0cnVjdCBidWZJbmZvICpidWZfaW5mbzsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICAvL3doaWxlICh0aWRfdHgtPnNpemUgPiAwKQorCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICB0aWRfdHgtPnNpemUgPSB6bV9hZ2dfcWxlbihkZXYsIHRpZF90eC0+YWdnSGVhZCwgdGlkX3R4LT5hZ2dUYWlsKTsKKyAgICBhZ2dMZW4gPSB6bV9hZ2dfbWluKDE2LCB6bV9hZ2dfbWluKHRpZF90eC0+c2l6ZSwgKHUxNl90KShmcmVlVHhkIC0gMikpKTsKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogd2h5IHRoZXJlIGhhdmUgdG8gYmUgMiBmcmVlIFR4ZD8KKyAgICAgICAgICAgICAqLworICAgIGlmIChhZ2dMZW4gPD0wICkKKyAgICAgICAgcmV0dXJuIDA7CisKKworICAgIGlmIChhZ2dMZW4gPT0gMSkgeworICAgICAgICBidWYgPSB6ZkFnZ1R4R2V0VnR4cShkZXYsIHRpZF90eCk7CisgICAgICAgIGlmIChidWYpCisgICAgICAgICAgICB6ZlR4U2VuZEV0aChkZXYsIGJ1ZiwgMCwgWk1fRVhURVJOQUxfQUxMT0NfQlVGLCAwKTsKKyAgICAgICAgaWYgKHRpZF90eC0+c2l6ZSA9PSAwKSB7CisgICAgICAgICAgICAvL0RFU1RRLmRlbGV0ZShkZXYsIDAsIHRpZF90eCwgTlVMTCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBGcmVlIFR4ZCBxdWV1ZSBpcyBiaWcgZW5vdWdoIHRvIHB1dCBhZ2dyZWdhdGlvbgorICAgICAgICAgICAgICAgICAqLworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgaWYgKHdkLT5hZ2dTdGF0ZSA9PSAxKSB7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB3ZC0+YWdnU3RhdGUgPSAxOworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKworICAgIHptX21zZzFfYWdnKFpNX0xWXzAsICJhZ2dMZW49IiwgYWdnTGVuKTsKKyAgICB0aWRfdHgtPmFnZ0ZyYW1lU2l6ZSA9IDA7CisgICAgZm9yIChqPTA7IGogPCBhZ2dMZW47IGorKykgeworICAgICAgICBidWYgPSB6ZkFnZ1R4R2V0VnR4cShkZXYsIHRpZF90eCk7CisKKyAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgdGlkX3R4LT5zaXplID0gem1fYWdnX3FsZW4oZGV2LCB0aWRfdHgtPmFnZ0hlYWQsIHRpZF90eC0+YWdnVGFpbCk7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgaWYgKCBidWYgKSB7CisgICAgICAgICAgICAvL3N0cnVjdCBhZ2dUYWxseSAqYWdnX3RhbDsKKyAgICAgICAgICAgIHUxNl90IGNvbXBsZXRlSW5kZXg7CisKKyAgICAgICAgICAgIGlmICgwID09IGopIHsKKyAgICAgICAgICAgICAgICBhZ2dDb250cm9sLmFtcGR1SW5kaWNhdGlvbiA9IFpNX0FHR19GSVJTVF9NUERVOworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICgoaiA9PSAoYWdnTGVuIC0gMSkpIHx8IHRpZF90eC0+c2l6ZSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFnZ0NvbnRyb2wuYW1wZHVJbmRpY2F0aW9uID0gWk1fQUdHX0xBU1RfTVBEVTsKKyAgICAgICAgICAgICAgICAvL3dkLT5hZ2dTdGF0ZSA9IDA7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhZ2dDb250cm9sLmFtcGR1SW5kaWNhdGlvbiA9IFpNX0FHR19NSURETEVfTVBEVTsKKyAgICAgICAgICAgICAgICAvKiB0aGUgcGFja2V0IGlzIGRlbGF5ZWQgbW9yZSB0aGFuIDUwMCBtcywgZHJvcCBpdCAqLworCisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aWRfdHgtPmFnZ0ZyYW1lU2l6ZSArPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsKKyAgICAgICAgICAgIGFnZ0NvbnRyb2wuYWRkYmFJbmRpY2F0aW9uID0gMDsKKyAgICAgICAgICAgIGFnZ0NvbnRyb2wuYWdnRW5hYmxlZCA9IDE7CisKKyNpZmRlZiBaTV9BR0dfVEFMTFkKKyAgICAgICAgICAgIGFnZ190YWwgPSAmd2QtPmFnZ190YWw7CisgICAgICAgICAgICBhZ2dfdGFsLT5zZW50X3BhY2tldHNfc3VtKys7CisKKyNlbmRpZgorCisgICAgICAgICAgICB6ZkFnZ1R4U2VuZEV0aChkZXYsIGJ1ZiwgMCwgWk1fRVhURVJOQUxfQUxMT0NfQlVGLCAwLCAmYWdnQ29udHJvbCwgdGlkX3R4KTsKKworICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIGNvbXBsZXRlSW5kZXggPSB0aWRfdHgtPmNvbXBsZXRlOworICAgICAgICAgICAgaWYoem1fYWdnX2luUSh0aWRfdHgsIHRpZF90eC0+Y29tcGxldGUpKQorICAgICAgICAgICAgICAgIHptX2FnZ19wbHVzKHRpZF90eC0+Y29tcGxldGUpOworICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICAgICAgaWYoem1fYWdnX2luUSh0aWRfdHgsIGNvbXBsZXRlSW5kZXgpICYmIHdkLT56ZmNiU2VuZENvbXBsZXRlSW5kaWNhdGlvbgorICAgICAgICAgICAgICAgICAgICAmJiB0aWRfdHgtPmFnZ3Z0eHFbY29tcGxldGVJbmRleF0uYnVmKSB7CisgICAgICAgICAgICAgICAgd2QtPnpmY2JTZW5kQ29tcGxldGVJbmRpY2F0aW9uKGRldiwgdGlkX3R4LT5hZ2d2dHhxW2NvbXBsZXRlSW5kZXhdLmJ1Zik7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiaW4gcXVldWUgY29tcGxldGUgd29ya2VkISIpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogdGhpcyBhZ2dyZWdhdGlvbiBxdWV1ZSBpcyBlbXB0eQorICAgICAgICAgICAgICovCisgICAgICAgICAgICB6bV9tc2cxX2FnZyhaTV9MVl8wLCAiYWdnTGVuIG5vdCByZWFjaGVkLCBidXQgbm8gbW9yZSBmcmFtZSwgaj0iLCBqKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICB3ZC0+YWdnU3RhdGUgPSAwOworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAvL3ptX2FjcXVpcmVfYWdnX3NwaW5fbG9jayhBZGFwdGVyKTsKKyAgICB0aWRfdHgtPnNpemUgPSB6bV9hZ2dfcWxlbihkZXYsIHRpZF90eC0+YWdnSGVhZCwgdGlkX3R4LT5hZ2dUYWlsKTsKKyAgICAvL3ptX3JlbGVhc2VfYWdnX3NwaW5fbG9jayhBZGFwdGVyKTsKKworICAgIGlmICh0aWRfdHgtPnNpemUgPT0gMCkgeworICAgICAgICAvL0RFU1RRLmRlbGV0ZShkZXYsIDAsIHRpZF90eCwgTlVMTCk7CisgICAgfQorCisKKworICAgIC8vemZBZ2dJbnZva2VCYXIoZGV2LCB0aWRfdHgpOworICAgIGlmKGo+MCkgeworICAgICAgICBhZ2dyX2NvdW50Kys7CisgICAgICAgIHptX21zZzFfYWdnKFpNX0xWXzAsICIweEMyOnNlbnQgMSBhZ2dyLCBhZ2dyX2NvdW50PSIsIGFnZ3JfY291bnQpOworICAgICAgICB6bV9tc2cxX2FnZyhaTV9MVl8wLCAiMHhDMjpzZW50IDEgYWdnciwgYWdncl9zaXplPSIsIGopOworICAgIH0KKyAgICByZXR1cm4gajsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZBZ2dUeEdldFJlYWR5UXVldWUgICAgICAgICovCisvKiAgICAgIHJldHVybiB0aGUgbnVtYmVyIG9mIHRoZSBhZ2dyZWdhdGlvbiBxdWV1ZSAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICB0YWtlIChkZXYsIGFjKSBhcyBpbnB1dCwgZmluZCB0aGUgYWdnIHF1ZXVlIHdpdGggc21hbGxlc3QgICAgICAgKi8KKy8qICAgICAgYXJyaXZhbCB0aW1lICh3YWl0ZWQgbG9uZ2VzdCkgYW1vbmcgdGhvc2UgcmVhZHkgb3IgY2xlYXJGbGFnICAgICovCisvKiAgICAgIHNldCBxdWV1ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBhYyAgOiBhY2Nlc3MgY2F0ZWdvcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBhZ2dyZWdhdGlvbiBxdWV1ZSBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBIb25kYSAgICAgICAgICAgICAgIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIElOQy4gICAgMjAwNi4xMiAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworVElEX1RYIHpmQWdnVHhHZXRSZWFkeVF1ZXVlKHpkZXZfdCogZGV2LCB1MTZfdCBhYykKK3sKKyAgICAvL3UxNl90ICAgICAgIHFudW0gPSBaTV9BR0dfUE9PTF9TSVpFOworICAgIHUxNl90ICAgICAgIGk7CisgICAgdTMyX3QgICAgICAgdGltZSA9IDA7CisgICAgVElEX1RYICAgICAgdGlkX3R4ID0gTlVMTDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgZm9yIChpPTAgO2k8Wk1fQUdHX1BPT0xfU0laRTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKDEgPT0gd2QtPmFnZ1FQb29sW2ldLT5hZ2dRRW5hYmxlZCAmJiBhYyA9PSB3ZC0+YWdnUVBvb2xbaV0tPmFjICYmCisgICAgICAgICAgICAgICAgKHdkLT5hZ2dRUG9vbFtpXS0+c2l6ZSA+IDApKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoMCA9PSB0aW1lIHx8IHRpbWUgPiB3ZC0+YWdnUVBvb2xbaV0tPmFnZ3Z0eHFbIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+YWdnUVBvb2xbaV0tPmFnZ0hlYWQgXS5hcnJpdmFsVGltZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aWRfdHggPSB3ZC0+YWdnUVBvb2xbaV07CisgICAgICAgICAgICAgICAgdGltZSA9IHRpZF90eC0+YWdndnR4cVsgdGlkX3R4LT5hZ2dIZWFkIF0uYXJyaXZhbFRpbWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgcmV0dXJuIHRpZF90eDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkFnZ1R4R2V0VnR4cSAgICAgICAgICAgICAgKi8KKy8qICAgICAgcmV0dXJuIGFuIE1TRFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHRha2UgKGRldiwgcW51bSkgYXMgaW5wdXQsIHJldHVybiBhbiBNU0RVIG91dCBvZiB0aGUgYWdnIHF1ZXVlLiAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBxbnVtOiBxdWV1ZSBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBhIE1TRFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBIb25kYSAgICAgICAgICAgICAgIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIElOQy4gICAgMjAwNi4xMiAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworemJ1Zl90KiB6ZkFnZ1R4R2V0VnR4cSh6ZGV2X3QqIGRldiwgVElEX1RYIHRpZF90eCkKK3sKKyAgICB6YnVmX3QqIGJ1ZiA9IE5VTEw7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgaWYgKHRpZF90eC0+YWdnSGVhZCAhPSB0aWRfdHgtPmFnZ1RhaWwpCisgICAgeworICAgICAgICBidWYgPSB0aWRfdHgtPmFnZ3Z0eHFbIHRpZF90eC0+YWdnVGFpbCBdLmJ1ZjsKKworICAgICAgICB0aWRfdHgtPmFnZ3Z0eHFbdGlkX3R4LT5hZ2dUYWlsXS5idWYgPSBOVUxMOworCisgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHRpZF90eC0+YWdnVGFpbCA9ICgodGlkX3R4LT5hZ2dUYWlsICsgMSkgJiBaTV9BR0dRX1NJWkVfTUFTSyk7CisgICAgICAgIGlmKHRpZF90eC0+c2l6ZSA+IDApIHRpZF90eC0+c2l6ZS0tOworICAgICAgICB0aWRfdHgtPnNpemUgPSB6bV9hZ2dfcWxlbihkZXYsIHRpZF90eC0+YWdnSGVhZCwgdGlkX3R4LT5hZ2dUYWlsKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gYnVmKSB7CisgICAgICAgICAgICAvL3RpZF90eC0+YWdnVGFpbCA9IHRpZF90eC0+YWdnSGVhZCA9IHRpZF90eC0+c2l6ZSA9IDA7CisgICAgICAgICAgICAvL3ptX21zZzFfYWdnKFpNX0xWXzAsICJHZXRWdHhxIGJ1ZiA9PSBOVUxMLCB0aWRfdHgtPnNpemU9IiwgdGlkX3R4LT5zaXplKTsKKyAgICAgICAgfQorICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBxdWV1ZSBpcyBlbXB0eQorICAgICAgICAgKi8KKyAgICAgICAgem1fbXNnMV9hZ2coWk1fTFZfMCwgInRpZF90eC0+YWdnSGVhZCA9PSB0aWRfdHgtPmFnZ1RhaWwsIHRpZF90eC0+c2l6ZT0iLCB0aWRfdHgtPnNpemUpOworCisgICAgfQorCisgICAgaWYgKHptX2FnZ19xbGVuKGRldiwgdGlkX3R4LT5hZ2dIZWFkLCB0aWRfdHgtPmFnZ1RhaWwpICE9IHRpZF90eC0+c2l6ZSkKKyAgICAgICAgem1fbXNnMV9hZ2coWk1fTFZfMCwgInFsZW4hPXRpZF90eC0+c2l6ZSEgdGlkX3R4LT5zaXplPSIsIHRpZF90eC0+c2l6ZSk7CisgICAgcmV0dXJuIGJ1ZjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZBZ2dUeERlbGV0ZVF1ZXVlICAgICAgICAgICovCisvKiAgICAgIHJldHVybiBaTV9TVUNDRVNTIChjYW4ndCBmYWlsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICB0YWtlIChkZXYsIHFudW0pIGFzIGlucHV0LCByZXNldCAoZGVsZXRlKSB0aGlzIGFnZ3JlZ2F0ZSBxdWV1ZSwgKi8KKy8qICAgICAgdGhpcyBxdWV1ZSBpcyB2aXJ0dWFsbHkgcmV0dXJuZWQgdG8gdGhlIGFnZ3JlZ2F0ZSBxdWV1ZSBwb29sLiAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHFudW06IHF1ZXVlIG51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFpNX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIEhvbmRhICAgICAgICAgICAgICAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSU5DLiAgICAyMDA2LjEyICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MTZfdCB6ZkFnZ1R4RGVsZXRlUXVldWUoemRldl90KiBkZXYsIHUxNl90IHFudW0pCit7CisgICAgdTE2X3QgYWMsIHRpZDsKKyAgICBzdHJ1Y3QgYWdnUXVldWUgKnR4X3RpZDsKKyAgICBzdHJ1Y3QgYWdnU3RhICAgKmFnZ19zdGE7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgdHhfdGlkID0gd2QtPmFnZ1FQb29sW3FudW1dOworICAgIGFnZ19zdGEgPSAmd2QtPmFnZ1N0YVt0eF90aWQtPmFnZ1FTVEFdOworICAgIGFjID0gdHhfdGlkLT5hYzsKKyAgICB0aWQgPSB0eF90aWQtPnRpZDsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICB0eF90aWQtPmFnZ1FFbmFibGVkID0gMDsKKyAgICB0eF90aWQtPmFnZ0hlYWQgPSB0eF90aWQtPmFnZ1RhaWwgPSAwOworICAgIHR4X3RpZC0+YWdnUmVhZHkgPSAwOworICAgIHR4X3RpZC0+Y2xlYXJGbGFnID0gdHhfdGlkLT5kZWxldGVGbGFnID0gMDsKKyAgICB0eF90aWQtPnNpemUgPSAwOworICAgIGFnZ19zdGEtPmNvdW50W2FjXSA9IDA7CisKKyAgICBhZ2dfc3RhLT50aWRfdHhbdGlkXSA9IE5VTEw7CisgICAgYWdnX3N0YS0+YWdnRmxhZ1thY10gPSAwOworCisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHptX21zZzFfYWdnKFpNX0xWXzAsICJxdWV1ZSBkZWxldGVkISBxbnVtPSIsIHFudW0pOworCisgICAgcmV0dXJuIFpNX1NVQ0NFU1M7Cit9CisKKyNpZmRlZiBaTV9FTkFCTEVfQUdHUkVHQVRJT04KKyNpZm5kZWYgWk1fRU5BQkxFX0ZXX0JBX1JFVFJBTlNNSVNTSU9OIC8vZGlzYWJsZSBCQVcKK3ZvaWQgemZCYXdDb3JlKHpkZXZfdCogZGV2LCB1MTZfdCBiYXdfc2VxLCB1MzJfdCBiaXRtYXAsIHUxNl90IGFnZ0xlbikgeworICAgIFRJRF9CQVcgdGlkX2JhdzsKKyAgICBzMTZfdCBpOworICAgIHpidWZfdCogYnVmOworICAgIHN0cnVjdCBidWZJbmZvICpidWZfaW5mbzsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICAvL3ptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisgICAgdGlkX2JhdyA9IEJBVy0+Z2V0UShkZXYsIGJhd19zZXEpOworICAgIC8vdGlkX2JhdyA9IE5VTEw7CisgICAgaWYgKE5VTEwgPT0gdGlkX2JhdykKKyAgICAgICAgcmV0dXJuOworCisgICAgdG90YWxfbXBkdSArPSBhZ2dMZW47CisgICAgZm9yIChpID0gYWdnTGVuIC0gMTsgaT49MDsgaS0tKSB7CisgICAgICAgIGlmICgoKGJpdG1hcCA+PiBpKSAmIDB4MSkgPT0gMCkgeworICAgICAgICAgICAgYnVmX2luZm8gPSBCQVctPnBvcChkZXYsIGksIHRpZF9iYXcpOworICAgICAgICAgICAgYnVmID0gYnVmX2luZm8tPmJ1ZjsKKyAgICAgICAgICAgIGlmIChidWYpIHsKKyAgICAgICAgICAgICAgICAvL3dkLT56ZmNiU2V0QmF3UShkZXYsIGJ1ZiwgMCk7CisgICAgICAgICAgICAgICAgemZBZ2dUaWRUeEluc2VydEhlYWQoZGV2LCBidWZfaW5mbywgdGlkX2Jhdy0+dGlkX3R4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN1Y2Nlc3NfbXBkdSsrOworICAgICAgICB9CisgICAgfQorICAgIEJBVy0+ZGlzYWJsZShkZXYsIHRpZF9iYXcpOworICAgIHpmQWdnVHhTY2hlZHVsZXIoZGV2KTsKKyAgICB6bV9kZWJ1Z19tc2cxKCJzdWNjZXNzX21wZHUgPSAiLCBzdWNjZXNzX21wZHUpOworICAgIHptX2RlYnVnX21zZzEoIiAgdG90YWxfbXBkdSA9ICIsIHRvdGFsX21wZHUpOworfQorCit2b2lkICAgIHpmQmF3SW5pdCh6ZGV2X3QqIGRldikgeworICAgIFRJRF9CQVcgdGlkX2JhdzsKKyAgICB1MTZfdCBpLGo7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIC8vem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIGZvciAoaT0wOyBpPFpNX0JBV19QT09MX1NJWkU7IGkrKyl7CisgICAgICAgIHRpZF9iYXcgPSAmQkFXLT50aWRfYmF3W2ldOworICAgICAgICBmb3IgKGo9MDsgajxaTV9WVFhRX1NJWkU7IGorKykgeworICAgICAgICAgICAgdGlkX2Jhdy0+ZnJhbWVbal0uYnVmID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICB0aWRfYmF3LT5lbmFibGVkID0gdGlkX2Jhdy0+aGVhZCA9IHRpZF9iYXctPnRhaWwgPSB0aWRfYmF3LT5zaXplID0gMDsKKyAgICAgICAgdGlkX2Jhdy0+c3RhcnRfc2VxID0gMDsKKyAgICB9CisgICAgQkFXLT5kZWxQb2ludCA9IDA7CisgICAgQkFXLT5jb3JlID0gemZCYXdDb3JlOworICAgIEJBVy0+Z2V0TmV3USA9IHpmQmF3R2V0TmV3UTsKKyAgICBCQVctPmluc2VydCA9IHpmQmF3SW5zZXJ0OworICAgIEJBVy0+cG9wID0gemZCYXdQb3A7CisgICAgQkFXLT5lbmFibGUgPSB6ZkJhd0VuYWJsZTsKKyAgICBCQVctPmRpc2FibGUgPSB6ZkJhd0Rpc2FibGU7CisgICAgQkFXLT5nZXRRID0gemZCYXdHZXRROworfQorCisKKworVElEX0JBVyB6ZkJhd0dldE5ld1EoemRldl90KiBkZXYsIHUxNl90IHN0YXJ0X3NlcSwgVElEX1RYIHRpZF90eCkgeworICAgIFRJRF9CQVcgdGlkX2Jhdz1OVUxMOworICAgIFRJRF9CQVcgbmV4dF9iYXc9TlVMTDsKKyAgICB1MTZfdCBpOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICAvL3ptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICAvKgorICAgIGZvciAoaT0wOyBpPFpNX0JBV19QT09MX1NJWkU7IGkrKyl7CisgICAgICAgIHRpZF9iYXcgPSAmQkFXLT50aWRfYmF3W2ldOworICAgICAgICBpZiAoRkFMU0UgPT0gdGlkX2Jhdy0+ZW5hYmxlZCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAqLworCisgICAgdGlkX2JhdyA9ICZCQVctPnRpZF9iYXdbQkFXLT5kZWxQb2ludF07CisgICAgaSA9IEJBVy0+ZGVsUG9pbnQ7CisgICAgLy9pZiAoWk1fQkFXX1BPT0xfU0laRSA9PSBpKSB7CisgICAgICAgIC8vcmV0dXJuIE5VTEw7CisgICAgLy8gICAgdThfdCB0ZW1wID0gQkFXLT5kZWxQb2ludDsKKyAgICAvLyAgICB0aWRfYmF3ID0gJkJBVy0+dGlkX2Jhd1tCQVctPmRlbFBvaW50XTsKKyAgICAvLyAgICBCQVctPmRpc2FibGUoZGV2LCB0aWRfYmF3KTsKKyAgICAvLyAgICBCQVctPmRlbFBvaW50ID0gKEJBVy0+ZGVsUG9pbnQgPCAoWk1fQkFXX1BPT0xfU0laRSAtIDEpKT8gKEJBVy0+ZGVsUG9pbnQgKyAxKTogMDsKKyAgICAvLyAgICB0ZW1wID0gQkFXLT5kZWxQb2ludDsKKyAgICAvL30KKworICAgIHptX21zZzFfYWdnKFpNX0xWXzAsICJnZXQgbmV3IHRpZF9iYXcsIGluZGV4PSIsIGkpOworICAgIEJBVy0+ZGVsUG9pbnQgPSAoaSA8IChaTV9CQVdfUE9PTF9TSVpFIC0xKSk/IChpICsgMSk6IDA7CisgICAgbmV4dF9iYXcgPSAmQkFXLT50aWRfYmF3W0JBVy0+ZGVsUG9pbnRdOworICAgIGlmICgxID09IG5leHRfYmF3LT5lbmFibGVkKSBCQVctPmRpc2FibGUoZGV2LCBuZXh0X2Jhdyk7CisKKyAgICBCQVctPmVuYWJsZShkZXYsIHRpZF9iYXcsIHN0YXJ0X3NlcSk7CisgICAgdGlkX2Jhdy0+dGlkX3R4ID0gdGlkX3R4OworCisgICAgcmV0dXJuIHRpZF9iYXc7Cit9CisKK3UxNl90ICAgemZCYXdJbnNlcnQoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBiYXdfc2VxLCBUSURfQkFXIHRpZF9iYXcsIHU4X3QgYmF3X3JldHJhbnNtaXQsIHN0cnVjdCBiYXdfaGVhZGVyX3IgKmhlYWRlcl9yKSB7CisgICAgLy9USURfQkFXIHRpZF9iYXc7CisgICAgLy91MTZfdCAgIGJ1ZkxlbjsKKworICAgIC8vem13X2dldF93bGFuX2RldihkZXYpOworICAgIC8vem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIGlmKHRpZF9iYXctPnNpemUgPCAoWk1fVlRYUV9TSVpFIC0gMSkpIHsKKyAgICAgICAgc3RydWN0IGJhd19oZWFkZXIgKmJhd19oZWFkZXIgPSAmdGlkX2Jhdy0+ZnJhbWVbdGlkX2Jhdy0+aGVhZF0uYmF3X2hlYWRlcjsKKworICAgICAgICBiYXdfaGVhZGVyLT5oZWFkZXJMZW4gICA9IGhlYWRlcl9yLT5oZWFkZXJMZW47CisgICAgICAgIGJhd19oZWFkZXItPm1pY0xlbiAgICAgID0gaGVhZGVyX3ItPm1pY0xlbjsKKyAgICAgICAgYmF3X2hlYWRlci0+c25hcExlbiAgICAgPSBoZWFkZXJfci0+c25hcExlbjsKKyAgICAgICAgYmF3X2hlYWRlci0+cmVtb3ZlTGVuICAgPSBoZWFkZXJfci0+cmVtb3ZlTGVuOworICAgICAgICBiYXdfaGVhZGVyLT5rZXlJZHggICAgICA9IGhlYWRlcl9yLT5rZXlJZHg7CisgICAgICAgIHpmd01lbW9yeUNvcHkoKHU4X3QgKiliYXdfaGVhZGVyLT5oZWFkZXIsICh1OF90ICopaGVhZGVyX3ItPmhlYWRlciwgNTgpOworICAgICAgICB6ZndNZW1vcnlDb3B5KCh1OF90ICopYmF3X2hlYWRlci0+bWljICAgLCAodThfdCAqKWhlYWRlcl9yLT5taWMgICAsIDgpOworICAgICAgICB6ZndNZW1vcnlDb3B5KCh1OF90ICopYmF3X2hlYWRlci0+c25hcCAgLCAodThfdCAqKWhlYWRlcl9yLT5zbmFwICAsIDgpOworICAgICAgICAvL3dkLT56ZmNiU2V0QmF3UShkZXYsIGJ1ZiwgMSk7CisgICAgICAgIHRpZF9iYXctPmZyYW1lW3RpZF9iYXctPmhlYWRdLmJ1ZiA9IGJ1ZjsKKyAgICAgICAgdGlkX2Jhdy0+ZnJhbWVbdGlkX2Jhdy0+aGVhZF0uYmF3X3NlcSA9IGJhd19zZXE7CisgICAgICAgIHRpZF9iYXctPmZyYW1lW3RpZF9iYXctPmhlYWRdLmJhd19yZXRyYW5zbWl0ID0gYmF3X3JldHJhbnNtaXQgKyAxOworCisgICAgICAgIC8vdGlkX2Jhdy0+ZnJhbWVbdGlkX2Jhdy0+aGVhZF0uZGF0YSA9IHBCdWYtPmRhdGE7CisgICAgICAgIHRpZF9iYXctPmhlYWQrKzsKKyAgICAgICAgdGlkX2Jhdy0+c2l6ZSsrOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLy93ZC0+emZjYlNldEJhd1EoZGV2LCBidWYsIDApOworICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCBaTV9TVUNDRVNTKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RydWN0IGJ1ZkluZm8qIHpmQmF3UG9wKHpkZXZfdCogZGV2LCB1MTZfdCBpbmRleCwgVElEX0JBVyB0aWRfYmF3KSB7CisgICAgLy9USURfQkFXIHRpZF9iYXc7CisgICAgLy96YnVmX3QqIGJ1ZjsKKyAgICBzdHJ1Y3QgYnVmSW5mbyAqYnVmX2luZm87CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgYnVmX2luZm8gPSAmd2QtPmJ1Zl9pbmZvOworICAgIGJ1Zl9pbmZvLT5iYXdfaGVhZGVyID0gTlVMTDsKKworICAgIGlmIChOVUxMID09IChidWZfaW5mby0+YnVmID0gdGlkX2Jhdy0+ZnJhbWVbaW5kZXhdLmJ1ZikpCisgICAgICAgIHJldHVybiBidWZfaW5mbzsKKworICAgIGJ1Zl9pbmZvLT5iYXdfcmV0cmFuc21pdCA9IHRpZF9iYXctPmZyYW1lW2luZGV4XS5iYXdfcmV0cmFuc21pdDsKKyAgICBidWZfaW5mby0+YmF3X2hlYWRlciA9ICZ0aWRfYmF3LT5mcmFtZVtpbmRleF0uYmF3X2hlYWRlcjsKKyAgICBidWZfaW5mby0+dGltZXN0YW1wID0gdGlkX2Jhdy0+ZnJhbWVbaW5kZXhdLnRpbWVzdGFtcDsKKyAgICAvL3BCdWYtPmRhdGEgPSBwQnVmLT5idWZmZXI7CisgICAgLy93ZC0+emZjYlJlc3RvcmVCdWZEYXRhKGRldiwgYnVmKTsKKyAgICB0aWRfYmF3LT5mcmFtZVtpbmRleF0uYnVmID0gTlVMTDsKKworICAgIHJldHVybiBidWZfaW5mbzsKK30KKwordm9pZCAgICB6ZkJhd0VuYWJsZSh6ZGV2X3QqIGRldiwgVElEX0JBVyB0aWRfYmF3LCB1MTZfdCBzdGFydF9zZXEpIHsKKyAgICAvL1RJRF9CQVcgdGlkX2JhdzsKKworICAgIC8vem13X2dldF93bGFuX2RldihkZXYpOworICAgIC8vem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHRpZF9iYXctPmVuYWJsZWQgPSBUUlVFOworICAgIHRpZF9iYXctPmhlYWQgPSB0aWRfYmF3LT50YWlsID0gdGlkX2Jhdy0+c2l6ZSA9IDA7CisgICAgdGlkX2Jhdy0+c3RhcnRfc2VxID0gc3RhcnRfc2VxOworfQorCit2b2lkICAgIHpmQmF3RGlzYWJsZSh6ZGV2X3QqIGRldiwgVElEX0JBVyB0aWRfYmF3KSB7CisgICAgLy9USURfQkFXIHRpZF9iYXc7CisgICAgdTE2X3QgaTsKKworICAgIC8vem13X2dldF93bGFuX2RldihkZXYpOworICAgIC8vem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKyAgICBmb3IgKGk9MDsgaTxaTV9WVFhRX1NJWkU7IGkrKykgeworICAgICAgICBpZiAodGlkX2Jhdy0+ZnJhbWVbaV0uYnVmKSB7CisKKyAgICAgICAgICAgIC8vd2QtPnpmY2JTZXRCYXdRKGRldiwgdGlkX2Jhdy0+ZnJhbWVbaV0uYnVmLCAwKTsKKyAgICAgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCB0aWRfYmF3LT5mcmFtZVtpXS5idWYsIFpNX1NVQ0NFU1MpOworICAgICAgICAgICAgdGlkX2Jhdy0+ZnJhbWVbaV0uYnVmID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRpZF9iYXctPmVuYWJsZWQgPSBGQUxTRTsKK30KKworVElEX0JBVyB6ZkJhd0dldFEoemRldl90KiBkZXYsIHUxNl90IGJhd19zZXEpIHsKKyAgICBUSURfQkFXIHRpZF9iYXc9TlVMTDsKKyAgICB1MTZfdCBpOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIC8vem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKyAgICBmb3IgKGk9MDsgaTxaTV9CQVdfUE9PTF9TSVpFOyBpKyspeworICAgICAgICB0aWRfYmF3ID0gJkJBVy0+dGlkX2Jhd1tpXTsKKyAgICAgICAgaWYgKFRSVUUgPT0gdGlkX2Jhdy0+ZW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICAgICAgem1fbXNnMV9hZ2coWk1fTFZfMCwgImdldCBhbiBvbGQgdGlkX2JhdywgYmF3X3NlcT0iLCBiYXdfc2VxKTsKKyAgICAgICAgICAgIHptX21zZzFfYWdnKFpNX0xWXzAsICJjaGVjayBhICB0aWRfYmF3LT5zdGFydF9zZXE9IiwgdGlkX2Jhdy0+c3RhcnRfc2VxKTsKKyAgICAgICAgICAgIGlmKGJhd19zZXEgPT0gdGlkX2Jhdy0+c3RhcnRfc2VxKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9CisgICAgaWYgKFpNX0JBV19QT09MX1NJWkUgPT0gaSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHRpZF9iYXc7Cit9CisjZW5kaWYgLy9kaXNhYmxlIEJBVworI2VuZGlmCisKK3UxNl90IHpmQWdnVGFsbHlSZXNldCh6ZGV2X3QqIGRldikKK3sKKyAgICBzdHJ1Y3QgYWdnVGFsbHkqIGFnZ190YWw7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvL3ptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICBhZ2dfdGFsID0gJndkLT5hZ2dfdGFsOworICAgIGFnZ190YWwtPmdvdF9wYWNrZXRzX3N1bSA9IDA7CisgICAgYWdnX3RhbC0+Z290X2J5dGVzX3N1bSA9IDA7CisgICAgYWdnX3RhbC0+c2VudF9ieXRlc19zdW0gPSAwOworICAgIGFnZ190YWwtPnNlbnRfcGFja2V0c19zdW0gPSAwOworICAgIGFnZ190YWwtPmF2Z19nb3RfcGFja2V0cyA9IDA7CisgICAgYWdnX3RhbC0+YXZnX2dvdF9ieXRlcyA9IDA7CisgICAgYWdnX3RhbC0+YXZnX3NlbnRfcGFja2V0cyA9IDA7CisgICAgYWdnX3RhbC0+YXZnX3NlbnRfYnl0ZXMgPSAwOworICAgIGFnZ190YWwtPnRpbWUgPSAwOworICAgIHJldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkFnZ1NjYW5BbmRDbGVhciAgICAgICAgICAgKi8KKy8qICAgICAgSWYgdGhlIHBhY2tldHMgaW4gYSBxdWV1ZSBoYXZlIHdhaXRlZCBmb3IgdG9vIGxvbmcsIGNsZWFyIGFuZCAgICovCisvKiAgICAgIGRlbGV0ZSB0aGlzIGFnZ3JlZ2F0aW9uIHF1ZXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiAgICAgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICB0aW1lICAgIDogY3VycmVudCB0aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBaTV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBIb25kYSAgICAgICAgICAgICAgIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIElOQy4gICAgMjAwNi4xMiAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgICB6ZkFnZ1NjYW5BbmRDbGVhcih6ZGV2X3QqIGRldiwgdTMyX3QgdGltZSkKK3sKKyAgICB1MTZfdCBpOworICAgIHUxNl90IGhlYWQ7CisgICAgdTE2X3QgdGFpbDsKKyAgICB1MzJfdCB0aWNrOworICAgIHUzMl90IGFycml2YWxUaW1lOworICAgIC8vdTE2X3QgYWlkLCBhYzsKKyAgICBUSURfVFggdGlkX3R4OworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIGlmKCEod2QtPnN0YXRlID09IFpNX1dMQU5fU1RBVEVfRU5BQkxFRCkpIHJldHVybiAwOworICAgIHpmQWdnVHhTY2hlZHVsZXIoZGV2LCAxKTsKKyAgICB0aWNrID0gem1fYWdnX0dldFRpbWUoKTsKKyAgICBmb3IgKGk9MDsgaTxaTV9BR0dfUE9PTF9TSVpFOyBpKyspCisgICAgeworICAgICAgICBpZiAoIXdkLT5hZ2dRUG9vbFtpXSkgcmV0dXJuIDA7CisgICAgICAgIGlmICgxID09IHdkLT5hZ2dRUG9vbFtpXS0+YWdnUUVuYWJsZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRpZF90eCA9IHdkLT5hZ2dRUG9vbFtpXTsKKyAgICAgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgICAgIGhlYWQgPSB0aWRfdHgtPmFnZ0hlYWQ7CisgICAgICAgICAgICB0YWlsID0gdGlkX3R4LT5hZ2dUYWlsOworCisgICAgICAgICAgICBhcnJpdmFsVGltZSA9ICh1MzJfdCl0aWRfdHgtPmFnZ3Z0eHFbdGlkX3R4LT5hZ2dUYWlsXS5hcnJpdmFsVGltZTsKKworCisgICAgICAgICAgICBpZigodGljayAtIGFycml2YWxUaW1lKSA8PSBaTV9BR0dfQ0xFQVJfVElNRSkKKyAgICAgICAgICAgIHsKKworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZigodGlkX3R4LT5zaXplID0gem1fYWdnX3FsZW4oZGV2LCB0aWRfdHgtPmFnZ0hlYWQsIHRpZF90eC0+YWdnVGFpbCkpID4gMCkKKyAgICAgICAgICAgIHsKKworICAgICAgICAgICAgICAgIHRpZF90eC0+Y2xlYXJGbGFnID0gMTsKKworICAgICAgICAgICAgICAgIC8vem1fbXNnMV9hZ2coWk1fTFZfMCwgImNsZWFyIHF1ZXVlICAgIHRpY2sgPSIsIHRpY2spOworICAgICAgICAgICAgICAgIC8vem1fbXNnMV9hZ2coWk1fTFZfMCwgImNsZWFyIHF1ZXVlIGFycml2YWwgPSIsIGFycml2YWxUaW1lKTsKKworCisgICAgICAgICAgICAgICAgLy96bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgICAgIC8vemZBZ2dUeFNjaGVkdWxlcihkZXYpOworICAgICAgICAgICAgICAgIC8vem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGlkX3R4LT5zaXplID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBxdWV1ZSBlbXB0eQorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmICh0aWNrIC0gdGlkX3R4LT5sYXN0QXJyaXZhbCA+IFpNX0FHR19ERUxFVEVfVElNRSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHptX21zZzFfYWdnKFpNX0xWXzAsICJkZWxldGUgcXVldWUsIGlkbGUgZm9yIG4gc2VjLiBuID0gIiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpNX0FHR19ERUxFVEVfVElNRS8xMCk7CisKKyAgICAgICAgICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgICAgICAgICAgemZBZ2dUeERlbGV0ZVF1ZXVlKGRldiwgaSk7CisgICAgICAgICAgICAgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICB9CisgICAgfQorCisgICAgICAgIHpmQWdnUnhDbGVhcihkZXYsIHRpbWUpOworCisjaWZkZWYgWk1fQUdHX1RBTExZCisgICAgaWYoKHdkLT50aWNrICUgMTAwKSA9PSAwKSB7CisgICAgICAgIHpmQWdnUHJpbnRUYWxseShkZXYpOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIFpNX1NVQ0NFU1M7Cit9CisKK3UxNl90ICAgemZBZ2dQcmludFRhbGx5KHpkZXZfdCogZGV2KQoreworICAgIHN0cnVjdCBhZ2dUYWxseSogYWdnX3RhbDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8vem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIGFnZ190YWwgPSAmd2QtPmFnZ190YWw7CisKKyAgICBpZihhZ2dfdGFsLT5nb3RfcGFja2V0c19zdW0gPCAxMCkKKyAgICB7CisgICAgICAgIHpmQWdnVGFsbHlSZXNldChkZXYpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBhZ2dfdGFsLT50aW1lKys7CisgICAgYWdnX3RhbC0+YXZnX2dvdF9wYWNrZXRzID0gKGFnZ190YWwtPmF2Z19nb3RfcGFja2V0cyAqIChhZ2dfdGFsLT50aW1lIC0gMSkgKworICAgICAgICAgICAgYWdnX3RhbC0+Z290X3BhY2tldHNfc3VtKSAvIGFnZ190YWwtPnRpbWU7CisgICAgYWdnX3RhbC0+YXZnX2dvdF9ieXRlcyA9IChhZ2dfdGFsLT5hdmdfZ290X2J5dGVzICogKGFnZ190YWwtPnRpbWUgLSAxKSArCisgICAgICAgICAgICBhZ2dfdGFsLT5nb3RfYnl0ZXNfc3VtKSAvIGFnZ190YWwtPnRpbWU7CisgICAgYWdnX3RhbC0+YXZnX3NlbnRfcGFja2V0cyA9IChhZ2dfdGFsLT5hdmdfc2VudF9wYWNrZXRzICogKGFnZ190YWwtPnRpbWUgLSAxKQorICAgICAgICAgICAgKyBhZ2dfdGFsLT5zZW50X3BhY2tldHNfc3VtKSAvIGFnZ190YWwtPnRpbWU7CisgICAgYWdnX3RhbC0+YXZnX3NlbnRfYnl0ZXMgPSAoYWdnX3RhbC0+YXZnX3NlbnRfYnl0ZXMgKiAoYWdnX3RhbC0+dGltZSAtIDEpICsKKyAgICAgICAgICAgIGFnZ190YWwtPnNlbnRfYnl0ZXNfc3VtKSAvIGFnZ190YWwtPnRpbWU7CisgICAgem1fbXNnMV9hZ2coWk1fTFZfMCwgImdvdF9wYWNrZXRzX3N1bSA9IiwgYWdnX3RhbC0+Z290X3BhY2tldHNfc3VtKTsKKyAgICB6bV9tc2cxX2FnZyhaTV9MVl8wLCAiICBnb3RfYnl0ZXNfc3VtID0iLCBhZ2dfdGFsLT5nb3RfYnl0ZXNfc3VtKTsKKyAgICB6bV9tc2cxX2FnZyhaTV9MVl8wLCAic2VudF9wYWNrZXRzX3N1bT0iLCBhZ2dfdGFsLT5zZW50X3BhY2tldHNfc3VtKTsKKyAgICB6bV9tc2cxX2FnZyhaTV9MVl8wLCAiIHNlbnRfYnl0ZXNfc3VtID0iLCBhZ2dfdGFsLT5zZW50X2J5dGVzX3N1bSk7CisgICAgYWdnX3RhbC0+Z290X3BhY2tldHNfc3VtID0gYWdnX3RhbC0+Z290X2J5dGVzX3N1bSA9YWdnX3RhbC0+c2VudF9wYWNrZXRzX3N1bQorICAgICAgICAgICAgICAgID0gYWdnX3RhbC0+c2VudF9ieXRlc19zdW0gPSAwOworICAgIHptX21zZzFfYWdnKFpNX0xWXzAsICJhdmdfZ290X3BhY2tldHMgPSIsIGFnZ190YWwtPmF2Z19nb3RfcGFja2V0cyk7CisgICAgem1fbXNnMV9hZ2coWk1fTFZfMCwgIiAgYXZnX2dvdF9ieXRlcyA9IiwgYWdnX3RhbC0+YXZnX2dvdF9ieXRlcyk7CisgICAgem1fbXNnMV9hZ2coWk1fTFZfMCwgImF2Z19zZW50X3BhY2tldHM9IiwgYWdnX3RhbC0+YXZnX3NlbnRfcGFja2V0cyk7CisgICAgem1fbXNnMV9hZ2coWk1fTFZfMCwgIiBhdmdfc2VudF9ieXRlcyA9IiwgYWdnX3RhbC0+YXZnX3NlbnRfYnl0ZXMpOworICAgIGlmICgod2QtPmNvbW1UYWxseS5CQV9GYWlsID09IDApIHx8ICh3ZC0+Y29tbVRhbGx5Lkh3X1R4X01QRFUgPT0gMCkpCisgICAgeworICAgICAgICB6bV9tc2cxX2FnZyhaTV9MVl8wLCAiSGFyZHdhcmUgVHggTVBEVT0iLCB3ZC0+Y29tbVRhbGx5Lkh3X1R4X01QRFUpOworICAgICAgICB6bV9tc2cxX2FnZyhaTV9MVl8wLCAiICBCQSBGYWlsIG51bWJlcj0iLCB3ZC0+Y29tbVRhbGx5LkJBX0ZhaWwpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHptX21zZzFfYWdnKFpNX0xWXzAsICIxLyhCQSBmYWlsIHJhdGUpPSIsIHdkLT5jb21tVGFsbHkuSHdfVHhfTVBEVS93ZC0+Y29tbVRhbGx5LkJBX0ZhaWwpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3UxNl90IHpmQWdnUnhDbGVhcih6ZGV2X3QqIGRldiwgdTMyX3QgdGltZSkKK3sKKyAgICB1MTZfdCAgIGk7CisgICAgc3RydWN0IGFnZ190aWRfcnggKnRpZF9yeDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICBmb3IgKGk9MDsgaTxaTV9BR0dfUE9PTF9TSVpFOyBpKyspCisgICAgeworICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICB0aWRfcnggPSB3ZC0+dGlkX3J4W2ldOworICAgICAgICBpZiAodGlkX3J4LT5iYXdfaGVhZCAhPSB0aWRfcngtPmJhd190YWlsKQorICAgICAgICB7CisgICAgICAgICAgICB1MTZfdCBqID0gdGlkX3J4LT5iYXdfdGFpbDsKKyAgICAgICAgICAgIHdoaWxlICgoaiAhPSB0aWRfcngtPmJhd19oZWFkKSAmJiAhdGlkX3J4LT5mcmFtZVtqXS5idWYpIHsKKyAgICAgICAgICAgIAlqID0gKGogKyAxKSAmIFpNX0FHR19CQVdfTUFTSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoaiAhPSB0aWRfcngtPmJhd19oZWFkKSAmJiAodGltZSAtIHRpZF9yeC0+ZnJhbWVbal0uYXJyaXZhbFRpbWUpID4KKyAgICAgICAgICAgICAgICAgICAgKFpNX0FHR19DTEVBUl9USU1FIC0gNSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgICAgICB6bV9tc2cwX2FnZyhaTV9MVl8xLCAicXVldWUgUnhGbHVzaCBieSBSeENsZWFyIik7CisgICAgICAgICAgICAgICAgemZBZ2dSeEZsdXNoKGRldiwgMCwgdGlkX3J4KTsKKyAgICAgICAgICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgfQorCisgICAgcmV0dXJuIFpNX1NVQ0NFU1M7Cit9CisKK3N0cnVjdCBhZ2dfdGlkX3J4KiB6ZkFnZ1J4RW5hYmxlZCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgdTE2X3QgICBkc3QwLCBzcmNbM10sIGFjLCBhaWQsIGZyYWdPZmY7CisgICAgdThfdCAgICB1cDsKKyAgICB1MTZfdCAgIG9mZnNldCA9IDA7CisgICAgdTE2X3QgICBzZXFfbm87CisgICAgdTE2X3QgZnJhbWVUeXBlOworICAgIHUxNl90IGZyYW1lQ3RybDsKKyAgICB1MTZfdCBmcmFtZVN1YnR5cGU7CisgICAgdTMyX3QgdGNwX3NlcTsKKyAgICAvL3N0cnVjdCBhZ2dTdGEgKmFnZ19zdGE7CisjaWYgWk1fQUdHX0ZQR0FfUkVPUkRFUklORworICAgIHN0cnVjdCBhZ2dfdGlkX3J4ICp0aWRfcng7CisjZW5kaWYKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvL3ptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisgICAgc2VxX25vID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMjIpID4+IDQ7CisgICAgLy9EYmdQcmludCgiUnggc2VxPSVkXG4iLCBzZXFfbm8pOworICAgIGlmICh3ZC0+c3RhLkVuYWJsZUhUID09IDApCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBmcmFtZUN0cmwgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAwKTsKKyAgICBmcmFtZVR5cGUgPSBmcmFtZUN0cmwgJiAweGY7CisgICAgZnJhbWVTdWJ0eXBlID0gZnJhbWVDdHJsICYgMHhmMDsKKworCisgICAgaWYgKGZyYW1lVHlwZSAhPSBaTV9XTEFOX0RBVEFfRlJBTUUpIC8vbm9uLVFvcyBEYXRhPyAoZnJhbWVTdWJ0eXBlJjB4ODApCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjaWZkZWYgWk1fRU5BQkxFX1BFUkZPUk1BTkNFX0VWQUxVQVRJT04KKyAgICB0Y3Bfc2VxID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMjIrMzYpIDw8IDI0OworICAgIHRjcF9zZXEgKz0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMjIrMzcpIDw8IDE2OworICAgIHRjcF9zZXEgKz0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMjIrMzgpIDw8IDg7CisgICAgdGNwX3NlcSArPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAyMiszOSk7CisjZW5kaWYKKworICAgIFpNX1NFUV9ERUJVRygiSW4gICAgICAgICAgICAgICAgICAgJTVkLCAlMTJ1XG4iLCBzZXFfbm8sIHRjcF9zZXEpOworICAgIGRzdDAgPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBvZmZzZXQrNCk7CisKKyAgICBzcmNbMF0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBvZmZzZXQrMTApOworICAgIHNyY1sxXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIG9mZnNldCsxMik7CisgICAgc3JjWzJdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1Ziwgb2Zmc2V0KzE0KTsKKworI2lmIFpNX0FHR19GUEdBX0RFQlVHCisgICAgYWlkID0gMDsKKyNlbHNlCisgICAgYWlkID0gemZBcEZpbmRTdGEoZGV2LCBzcmMpOworI2VuZGlmCisKKyAgICAvL2FnZ19zdGEgPSAmd2QtPmFnZ1N0YVthaWRdOworICAgIC8vemZUeEdldElwVG9zQW5kRnJhZyhkZXYsIGJ1ZiwgJnVwLCAmZnJhZ09mZik7CisgICAgLy9hYyA9IHpjVXBUb0FjW3VwJjB4N10gJiAweDM7CisKKyAgICAvKgorICAgICAqIEZpbHRlciB1bmljYXN0IGZyYW1lIG9ubHksIGFpZCA9PSAwIGlzIGZvciBkZWJ1ZyBvbmx5CisgICAgICovCisgICAgaWYgKChkc3QwICYgMHgxKSA9PSAwICYmIGFpZCA9PSAwKQorICAgIHsKKyNpZiBaTV9BR0dfRlBHQV9SRU9SREVSSU5HCisgICAgICAgIHRpZF9yeCA9IHpmQWdnUnhHZXRRdWV1ZShkZXYsIGJ1ZikgOworICAgICAgICBpZighdGlkX3J4KQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy9pZiAodGlkX3J4LT5hZGRCYUV4Y2hhbmdlU3RhdHVzQ29kZSA9PSBaTV9BR0dfQUREQkFfUkVTUE9OU0UpCisgICAgICAgICAgICByZXR1cm4gdGlkX3J4OworICAgICAgICB9CisjZWxzZQorICAgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCit1MTZfdCB6ZkFnZ1J4KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Ziwgc3RydWN0IHpzQWRkaXRpb25JbmZvICphZGRJbmZvLCBzdHJ1Y3QgYWdnX3RpZF9yeCAqdGlkX3J4KQoreworICAgIHUxNl90ICAgc2VxX25vOworICAgIHMxNl90ICAgaW5kZXg7CisgICAgdTE2X3QgICBvZmZzZXQgPSAwOworICAgIHpidWZfdCogcGJ1ZjsKKyAgICB1OF90ICAgIGZyYW1lU3ViVHlwZTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICBaTV9CVUZGRVJfVFJBQ0UoZGV2LCBidWYpCisKKyAgICBaTV9QRVJGT1JNQU5DRV9SWF9SRU9SREVSKGRldik7CisKKyAgICBzZXFfbm8gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBvZmZzZXQrMjIpID4+IDQ7CisKKyAgICBpbmRleCA9IHNlcV9ubyAtIHRpZF9yeC0+c2VxX3N0YXJ0OworICAgIC8qCisgICAgICogZm9yIGRlYnVnCisgICAgICovCisKKyAgICAvKiB6bV9tc2cyX2FnZyhaTV9MVl8wLCAicXVldWUgc2VxID0gIiwgc2VxX25vKTsKKyAgICAgKiBEYmdQcmludCgiJXM6JXMlbHhoICVzJWx4aFxuIiwgX19GVU5DVElPTl9fLCAicXVldWUgc2VxPSIsIHNlcV9ubywKKyAgICAgKiAgICI7IHNlcV9zdGFydD0iLCB0aWRfcngtPnNlcV9zdGFydCk7CisgICAgICovCisKKyAgICAvL0RiZ1ByaW50KCJzZXFfbm89JWQsIHNlcV9zdGFydD0lZFxuIiwgc2VxX25vLCB0aWRfcngtPnNlcV9zdGFydCk7CisKKyAgICAvKiBJbiBzb21lIEFQcywgd2UgZm91bmQgdGhhdCBpdCBtaWdodCB0cmFuc21pdCBOVUxMIGRhdGEgd2hvc2Ugc2VxdWVuY2UgbnVtYmVyCisgICAgICAgaXMgb3V0IG9yIG9yZGVyLiBJbiBvcmRlciB0byBhdm9pZCB0aGlzIHByb2JsZW0sIHdlIGlnbm9yZSB0aGVzZSBOVUxMIGRhdGEuCisgICAgICovCisKKyAgICBmcmFtZVN1YlR5cGUgPSAoem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMCkgJiAweEYwKSA+PiA0OworCisgICAgLyogSWYgdGhpcyBpcyBhIE5VTEwgZGF0YSBpbnN0ZWFkIG9mIFFvcyBOVUxMIGRhdGEgKi8KKyAgICBpZiAoKGZyYW1lU3ViVHlwZSAmIDB4MEMpID09IDB4MDQpCisgICAgeworICAgICAgICBzMTZfdCBzZXFfZGlmZjsKKworICAgICAgICBzZXFfZGlmZiA9IChzZXFfbm8gPiB0aWRfcngtPnNlcV9zdGFydCkgPworICAgICAgICAgICAgICAgICAgICAgICBzZXFfbm8gLSB0aWRfcngtPnNlcV9zdGFydCA6IHRpZF9yeC0+c2VxX3N0YXJ0IC0gc2VxX25vOworCisgICAgICAgIGlmIChzZXFfZGlmZiA+IFpNX0FHR19CQVdfU0laRSkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiRnJlZSBSeCBOVUxMIGRhdGEgaW4gemZBZ2dSeCIpOworCisgICAgICAgICAgICAvKiBGcmVlIFJ4IGJ1ZmZlciAqLworICAgICAgICAgICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CisgICAgICAgICAgICByZXR1cm4gWk1fRVJSX09VVF9PRl9PUkRFUl9OVUxMX0RBVEE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIHNlcXVlbmNlIG51bWJlciB3cmFwIGF0IDRrCisgICAgICovCisgICAgaWYgKHRpZF9yeC0+c2VxX3N0YXJ0ID4gc2VxX25vKQorICAgIHsKKyAgICAgICAgLy9pbmRleCArPSA0MDk2OworCisgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIGlmICh0aWRfcngtPnNlcV9zdGFydCA+PSA0MDk2KSB7CisgICAgICAgICAgICB0aWRfcngtPnNlcV9zdGFydCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIH0KKworICAgIGlmICh0aWRfcngtPnNlcV9zdGFydCA9PSBzZXFfbm8pIHsKKyAgICAJem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAJaWYgKCgodGlkX3J4LT5iYXdfaGVhZCAtIHRpZF9yeC0+YmF3X3RhaWwpICYgWk1fQUdHX0JBV19NQVNLKSA+IDApIHsKKyAgICAJICAgIC8vRGJnUHJpbnQoImhlYWQ9JWQsIHRhaWw9JWQiLCB0aWRfcngtPmJhd19oZWFkLCB0aWRfcngtPmJhd190YWlsKTsKKyAgICAgICAgICAgIHRpZF9yeC0+YmF3X3RhaWwgPSAodGlkX3J4LT5iYXdfdGFpbCArIDEpICYgWk1fQUdHX0JBV19NQVNLOworICAgICAgICB9CisgICAgICAgIHRpZF9yeC0+c2VxX3N0YXJ0ID0gKHRpZF9yeC0+c2VxX3N0YXJ0ICsgMSkgJiAoNDA5NiAtIDEpOworICAgIAl6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgIFpNX1BFUkZPUk1BTkNFX1JYX1NFUShkZXYsIGJ1Zik7CisKKyAgICAJaWYgKHdkLT56ZmNiUmVjdjgwMjExICE9IE5VTEwpIHsKKyAgICAgICAgICAgIC8vc2VxX25vID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1Ziwgb2Zmc2V0KzIyKSA+PiA0OworICAgICAgICAgICAgLy9EYmdQcmludCgiUmVjdiBpbmRpY2F0ZSBzZXE9JWRcbiIsIHNlcV9ubyk7CisgICAgICAgICAgICAvL0RiZ1ByaW50KCIxLiBzZXE9JWRcbiIsIHNlcV9ubyk7CisKKyAgICAgICAgICAgIHdkLT56ZmNiUmVjdjgwMjExKGRldiwgYnVmLCBhZGRJbmZvKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHpmaVJlY3Y4MDIxMShkZXYsIGJ1ZiwgYWRkSW5mbyk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIXpmQWdnUnhFbnF1ZXVlKGRldiwgYnVmLCB0aWRfcngsIGFkZEluZm8pKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogZHVwbGljYXRlZCBwYWNrZXQKKyAgICAgICAgICovCisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHdoaWxlICh0aWRfcngtPmJhd19oZWFkICE9IHRpZF9yeC0+YmF3X3RhaWwpIHsvLyAmJiB0aWRfcngtPmZyYW1lW3RpZF9yeC0+YmF3X3RhaWxdLmJ1ZikKKyAgICAgICAgdTE2X3QgdGFpbEluZGV4OworCisgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgdGFpbEluZGV4ID0gdGlkX3J4LT5iYXdfdGFpbDsKKyAgICAgICAgcGJ1ZiA9IHRpZF9yeC0+ZnJhbWVbdGFpbEluZGV4XS5idWY7CisgICAgICAgIHRpZF9yeC0+ZnJhbWVbdGFpbEluZGV4XS5idWYgPSAwOworICAgICAgICBpZiAoIXBidWYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHRpZF9yeC0+YmF3X3RhaWwgPSAodGlkX3J4LT5iYXdfdGFpbCArIDEpICYgWk1fQUdHX0JBV19NQVNLOworICAgICAgICB0aWRfcngtPnNlcV9zdGFydCA9ICh0aWRfcngtPnNlcV9zdGFydCArIDEpICYgKDQwOTYgLSAxKTsKKworCisgICAgICAgIC8vaWYocGJ1ZiAmJiB0aWRfcngtPmJhd19zaXplID4gMCkKKyAgICAgICAgLy8gICAgdGlkX3J4LT5iYXdfc2l6ZS0tOworCisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgWk1fUEVSRk9STUFOQ0VfUlhfU0VRKGRldiwgcGJ1Zik7CisKKyAgICAgICAgaWYgKHdkLT56ZmNiUmVjdjgwMjExICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vc2VxX25vID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIHBidWYsIG9mZnNldCsyMikgPj4gNDsKKyAgICAgICAgICAgIC8vRGJnUHJpbnQoIlJlY3YgaW5kaWNhdGUgc2VxPSVkXG4iLCBzZXFfbm8pOworICAgICAgICAgICAgLy9EYmdQcmludCgiMS4gc2VxPSVkXG4iLCBzZXFfbm8pOworICAgICAgICAgICAgd2QtPnpmY2JSZWN2ODAyMTEoZGV2LCBwYnVmLCBhZGRJbmZvKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vc2VxX25vID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIHBidWYsIG9mZnNldCsyMikgPj4gNDsKKyAgICAgICAgICAgIC8vRGJnUHJpbnQoIlJlY3YgaW5kaWNhdGUgc2VxPSVkXG4iLCBzZXFfbm8pOworICAgICAgICAgICAgemZpUmVjdjgwMjExKGRldiwgcGJ1ZiwgYWRkSW5mbyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMTsKK30KKworc3RydWN0IGFnZ190aWRfcnggKnpmQWdnUnhHZXRRdWV1ZSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgdTE2X3QgICBzcmNbM107CisgICAgdTE2X3QgICBhaWQsIGFjLCBpOworICAgIHUxNl90ICAgb2Zmc2V0ID0gMDsKKyAgICBzdHJ1Y3QgYWdnX3RpZF9yeCAqdGlkX3J4ID0gTlVMTDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8vem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHNyY1swXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIG9mZnNldCsxMCk7CisgICAgc3JjWzFdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1Ziwgb2Zmc2V0KzEyKTsKKyAgICBzcmNbMl0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBvZmZzZXQrMTQpOworICAgIGFpZCA9IHpmQXBGaW5kU3RhKGRldiwgc3JjKTsKKworICAgIGFjID0gKHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDI0KSAmIDB4Rik7CisKKyAgICAvLyBtYXJrIGJ5IHNwaW4gbG9jayBkZWJ1ZworICAgIC8vem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGZvciAoaT0wOyBpPFpNX0FHR19QT09MX1NJWkUgOyBpKyspCisgICAgeworICAgICAgICBpZigod2QtPnRpZF9yeFtpXS0+YWlkID09IGFpZCkgJiYgKHdkLT50aWRfcnhbaV0tPmFjID09IGFjKSkKKyAgICAgICAgeworICAgICAgICAgICAgdGlkX3J4ID0gd2QtPnRpZF9yeFtpXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gbWFyayBieSBzcGluIGxvY2sgZGVidWcKKyAgICAvL3ptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgcmV0dXJuIHRpZF9yeDsKK30KKworCit1MTZfdCAgIHpmQWdnUnhFbnF1ZXVlKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Ziwgc3RydWN0IGFnZ190aWRfcnggKnRpZF9yeCwgc3RydWN0IHpzQWRkaXRpb25JbmZvICphZGRJbmZvKQoreworICAgIHUxNl90IHNlcV9ubywgb2Zmc2V0ID0gMDsKKyAgICB1MTZfdCBxX2luZGV4OworICAgIHMxNl90IGluZGV4OworICAgIHU4X3QgIGJkcm9wZnJhbWUgPSAwOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIFpNX0JVRkZFUl9UUkFDRShkZXYsIGJ1ZikKKworICAgIHNlcV9ubyA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIG9mZnNldCsyMikgPj4gNDsKKyAgICBpbmRleCAgPSBzZXFfbm8gLSB0aWRfcngtPnNlcV9zdGFydDsKKworICAgIC8qCisgICAgICogc2VxdWVuY2UgbnVtYmVyIHdyYXAgYXQgNGsKKyAgICAgKiAtMTAwMDogY2hlY2sgZm9yIGR1cGxpY2F0ZSBwYXN0IHBhY2tldAorICAgICAqLworICAgIGJkcm9wZnJhbWUgPSAwOworICAgIGlmICh0aWRfcngtPnNlcV9zdGFydCA+IHNlcV9ubykgeworICAgICAgICBpZiAoKHRpZF9yeC0+c2VxX3N0YXJ0ID4gMzk2NykgJiYgKHNlcV9ubyA8IDEyOCkpIHsKKyAgICAgICAgICAgIGluZGV4ICs9IDQwOTY7CisgICAgICAgIH0gZWxzZSBpZiAodGlkX3J4LT5zZXFfc3RhcnQgLSBzZXFfbm8gPiA3MCkgeworICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIHRpZF9yeC0+c3FfYmVoaW5kX2NvdW50Kys7CisgICAgICAgICAgICBpZiAodGlkX3J4LT5zcV9iZWhpbmRfY291bnQgPiAzKSB7CisgICAgICAgICAgICAgICAgdGlkX3J4LT5zcV9iZWhpbmRfY291bnQgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBiZHJvcGZyYW1lID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiZHJvcGZyYW1lID0gMTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzZXFfbm8gLSB0aWRfcngtPnNlcV9zdGFydCA+IDcwKSB7CisgICAgICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgdGlkX3J4LT5zcV9leGNlZWRfY291bnQrKzsKKyAgICAgICAgICAgIGlmICh0aWRfcngtPnNxX2V4Y2VlZF9jb3VudCA+IDMpIHsKKyAgICAgICAgICAgICAgICB0aWRfcngtPnNxX2V4Y2VlZF9jb3VudCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJkcm9wZnJhbWUgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChiZHJvcGZyYW1lID09IDEpIHsKKyAgICAgICAgLyppZiAod2QtPnpmY2JSZWN2ODAyMTEgIT0gTlVMTCkgeworICAgICAgICAgICAgd2QtPnpmY2JSZWN2ODAyMTEoZGV2LCBidWYsIGFkZEluZm8pOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgemZpUmVjdjgwMjExKGRldiwgYnVmLCBhZGRJbmZvKTsKKyAgICAgICAgfSovCisKKyAgICAgICAgWk1fUEVSRk9STUFOQ0VfRlJFRShkZXYsIGJ1Zik7CisKKyAgICAgICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CisgICAgICAgIC8qemZBZ2dSeEZsdXNoKGRldiwgc2VxX25vLCB0aWRfcngpOworICAgICAgICB0aWRfcngtPnNlcV9zdGFydCA9IHNlcV9ubzsKKyAgICAgICAgaW5kZXggPSBzZXFfbm8gLSB0aWRfcngtPnNlcV9zdGFydDsKKyAgICAgICAgKi8KKworICAgICAgICAvL0RiZ1ByaW50KCJGcmVlIGFuIG9sZCBwYWNrZXQsIHNlcV9zdGFydD0lZCwgc2VxX25vPSVkXG4iLCB0aWRfcngtPnNlcV9zdGFydCwgc2VxX25vKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBkdXBsaWNhdGUgcGFzdCBwYWNrZXQKKyAgICAgICAgICogaGFwcGVucyBvbmx5IGluIHNpbXVsYXRlZCBhZ2dyZWdhdGlvbiBlbnZpcm9ubWVudAorICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgaWYgKHRpZF9yeC0+c3FfZXhjZWVkX2NvdW50ID4gMCl7CisgICAgICAgICAgICB0aWRfcngtPnNxX2V4Y2VlZF9jb3VudC0tOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRpZF9yeC0+c3FfYmVoaW5kX2NvdW50ID4gMCkgeworICAgICAgICAgICAgdGlkX3J4LT5zcV9iZWhpbmRfY291bnQtLTsKKyAgICAgICAgfQorICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIH0KKworICAgIGlmIChpbmRleCA8IDApIHsKKyAgICAgICAgemZBZ2dSeEZsdXNoKGRldiwgc2VxX25vLCB0aWRfcngpOworICAgICAgICB0aWRfcngtPnNlcV9zdGFydCA9IHNlcV9ubzsKKyAgICAgICAgaW5kZXggPSAwOworICAgIH0KKworICAgIC8vaWYgKGluZGV4ID49IChaTV9BR0dfQkFXX1NJWkUgLSAxKSkKKyAgICBpZiAoaW5kZXggPj0gKFpNX0FHR19CQVdfTUFTSykpCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBxdWV1ZSBmdWxsCisgICAgICAgICAqLworICAgICAgICAvL0RiZ1ByaW50KCJpbmRleCA+PSA2NCwgc2VxX3N0YXJ0PSVkLCBzZXFfbm89JWRcbiIsIHRpZF9yeC0+c2VxX3N0YXJ0LCBzZXFfbm8pOworICAgICAgICB6ZkFnZ1J4Rmx1c2goZGV2LCBzZXFfbm8sIHRpZF9yeCk7CisgICAgICAgIC8vdGlkX3J4LT5zZXFfc3RhcnQgPSBzZXFfbm87CisgICAgICAgIGluZGV4ID0gc2VxX25vIC0gdGlkX3J4LT5zZXFfc3RhcnQ7CisgICAgICAgIGlmICgodGlkX3J4LT5zZXFfc3RhcnQgPiBzZXFfbm8pICYmICh0aWRfcngtPnNlcV9zdGFydCA+IDEwMDApICYmICh0aWRfcngtPnNlcV9zdGFydCAtIDEwMDApID4gc2VxX25vKQorICAgICAgICB7CisgICAgICAgIC8vaW5kZXggPSBzZXFfbm8gLSB0aWRfcngtPnNlcV9zdGFydDsKKyAgICAgICAgICAgIGluZGV4ICs9IDQwOTY7CisgICAgICAgIH0KKyAgICAgICAgLy9pbmRleCA9IHNlcV9ubyAtIHRpZF9yeC0+c2VxX3N0YXJ0OworICAgICAgICB3aGlsZSAoaW5kZXggPj0gKFpNX0FHR19CQVdfTUFTSykpIHsKKyAgICAgICAgICAgIC8vRGJnUHJpbnQoImluZGV4ID49IDY0LCBzZXFfc3RhcnQ9JWQsIHNlcV9ubz0lZFxuIiwgdGlkX3J4LT5zZXFfc3RhcnQsIHNlcV9ubyk7CisgICAgICAgICAgICB0aWRfcngtPnNlcV9zdGFydCA9ICh0aWRfcngtPnNlcV9zdGFydCArIFpNX0FHR19CQVdfTUFTSykgJiAoNDA5NiAtIDEpOworICAgICAgICAgICAgaW5kZXggPSBzZXFfbm8gLSB0aWRfcngtPnNlcV9zdGFydDsKKyAgICAgICAgICAgIGlmICgodGlkX3J4LT5zZXFfc3RhcnQgPiBzZXFfbm8pICYmICh0aWRfcngtPnNlcV9zdGFydCA+IDEwMDApICYmICh0aWRfcngtPnNlcV9zdGFydCAtIDEwMDApID4gc2VxX25vKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluZGV4ICs9IDQwOTY7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKworICAgIHFfaW5kZXggPSAodGlkX3J4LT5iYXdfdGFpbCArIGluZGV4KSAmIFpNX0FHR19CQVdfTUFTSzsKKyAgICBpZiAodGlkX3J4LT5mcmFtZVtxX2luZGV4XS5idWYgJiYgKCgodGlkX3J4LT5iYXdfaGVhZCAtIHRpZF9yeC0+YmF3X3RhaWwpICYgWk1fQUdHX0JBV19NQVNLKSA+CisgICAgICAgICAgICAgICAgKCgocV9pbmRleCkgLSB0aWRfcngtPmJhd190YWlsKSAmIFpNX0FHR19CQVdfTUFTSykpKQorICAgIHsKKworICAgICAgICBaTV9QRVJGT1JNQU5DRV9EVVAoZGV2LCB0aWRfcngtPmZyYW1lW3FfaW5kZXhdLmJ1ZiwgYnVmKTsKKyAgICAgICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CisgICAgICAgIC8vRGJnUHJpbnQoIkZyZWUgYSBkdXBsaWNhdGUgcGFja2V0LCBzZXFfc3RhcnQ9JWQsIHNlcV9ubz0lZFxuIiwgdGlkX3J4LT5zZXFfc3RhcnQsIHNlcV9ubyk7CisgICAgICAgIC8vRGJnUHJpbnQoImhlYWQ9JWQsIHRhaWw9JWQiLCB0aWRfcngtPmJhd19oZWFkLCB0aWRfcngtPmJhd190YWlsKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogZHVwbGljYXRlIHBhY2tldAorICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICBpZih0aWRfcngtPmZyYW1lW3FfaW5kZXhdLmJ1ZikgeworICAgICAgICB6ZndCdWZGcmVlKGRldiwgdGlkX3J4LT5mcmFtZVtxX2luZGV4XS5idWYsIDApOworICAgICAgICB0aWRfcngtPmZyYW1lW3FfaW5kZXhdLmJ1ZiA9IDA7CisgICAgfQorCisgICAgdGlkX3J4LT5mcmFtZVtxX2luZGV4XS5idWYgPSBidWY7CisgICAgdGlkX3J4LT5mcmFtZVtxX2luZGV4XS5hcnJpdmFsVGltZSA9IHptX2FnZ19HZXRUaW1lKCk7CisgICAgemZ3TWVtb3J5Q29weSgodm9pZCopJnRpZF9yeC0+ZnJhbWVbcV9pbmRleF0uYWRkSW5mbywgKHZvaWQqKWFkZEluZm8sIHNpemVvZihzdHJ1Y3QgenNBZGRpdGlvbkluZm8pKTsKKworICAgIC8qCisgICAgICogZm9yIGRlYnVnIHNpbXVsYXRlZCBhZ2dyZWdhdGlvbiBvbmx5LAorICAgICAqIHNob3VsZCBiZSBkb25lIGluIHJ4IG9mIEFEREJBIFJlcXVlc3QKKyAgICAgKi8KKyAgICAvL3RpZF9yeC0+YWRkSW5mbyA9IGFkZEluZm87CisKKworICAgIGlmICgoKHRpZF9yeC0+YmF3X2hlYWQgLSB0aWRfcngtPmJhd190YWlsKSAmIFpNX0FHR19CQVdfTUFTSykgPD0gaW5kZXgpCisgICAgeworICAgICAgICAvL3RpZF9yeC0+YmF3X3NpemUgPSBpbmRleCArIDE7CisgICAgICAgIGlmICgoKHRpZF9yeC0+YmF3X2hlYWQgLSB0aWRfcngtPmJhd190YWlsKSAmIFpNX0FHR19CQVdfTUFTSykgPD0KKyAgICAgICAgICAgICAgICAvLygocV9pbmRleCArIDEpICYgWk1fQUdHX0JBV19NQVNLKSkKKyAgICAgICAgICAgICAgICAoKChxX2luZGV4KSAtIHRpZF9yeC0+YmF3X3RhaWwpICYgWk1fQUdHX0JBV19NQVNLKSkvL3RpZF9yeC0+YmF3X3NpemUgKQorICAgICAgICAgICAgdGlkX3J4LT5iYXdfaGVhZCA9IChxX2luZGV4ICsgMSkgJiBaTV9BR0dfQkFXX01BU0s7CisgICAgfQorICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAvKgorICAgICAqIHN1Y2Nlc3MKKyAgICAgKi8KKyAgICAvL0RiZ1ByaW50KCJoZWFkPSVkLCB0YWlsPSVkLCBzdGFydD0lZCIsIHRpZF9yeC0+YmF3X2hlYWQsIHRpZF9yeC0+YmF3X3RhaWwsIHRpZF9yeC0+c2VxX3N0YXJ0KTsKKyAgICByZXR1cm4gMTsKK30KKwordTE2X3QgemZBZ2dSeEZsdXNoKHpkZXZfdCogZGV2LCB1MTZfdCBzZXFfbm8sIHN0cnVjdCBhZ2dfdGlkX3J4ICp0aWRfcngpCit7CisgICAgemJ1Zl90KiBwYnVmOworICAgIHUxNl90ICAgc2VxOworICAgIHN0cnVjdCB6c0FkZGl0aW9uSW5mbyBhZGRJbmZvOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgWk1fUEVSRk9STUFOQ0VfUlhfRkxVU0goZGV2KTsKKworICAgIHdoaWxlICgxKQorICAgIHsKKyAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgaWYgKHRpZF9yeC0+YmF3X3RhaWwgPT0gdGlkX3J4LT5iYXdfaGVhZCkgeworICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcGJ1ZiA9IHRpZF9yeC0+ZnJhbWVbdGlkX3J4LT5iYXdfdGFpbF0uYnVmOworICAgICAgICB6ZndNZW1vcnlDb3B5KCh2b2lkKikmYWRkSW5mbywgKHZvaWQqKSZ0aWRfcngtPmZyYW1lW3RpZF9yeC0+YmF3X3RhaWxdLmFkZEluZm8sIHNpemVvZihzdHJ1Y3QgenNBZGRpdGlvbkluZm8pKTsKKyAgICAgICAgdGlkX3J4LT5mcmFtZVt0aWRfcngtPmJhd190YWlsXS5idWYgPSAwOworICAgICAgICAvL2lmKHBidWYgJiYgdGlkX3J4LT5iYXdfc2l6ZSA+IDApIHRpZF9yeC0+YmF3X3NpemUtLTsKKyAgICAgICAgdGlkX3J4LT5iYXdfdGFpbCA9ICh0aWRfcngtPmJhd190YWlsICsgMSkgJiBaTV9BR0dfQkFXX01BU0s7CisgICAgICAgIHRpZF9yeC0+c2VxX3N0YXJ0ID0gKHRpZF9yeC0+c2VxX3N0YXJ0ICsgMSkgJiAoNDA5NiAtIDEpOworCSAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgIGlmIChwYnVmKQorICAgICAgICB7CisKKyAgICAgICAgICAgIFpNX1BFUkZPUk1BTkNFX1JYX1NFUShkZXYsIHBidWYpOworCisgICAgICAgICAgICBpZiAod2QtPnpmY2JSZWN2ODAyMTEgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzZXEgPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgcGJ1ZiwgMjIpID4+IDQ7CisgICAgICAgICAgICAgICAgLy9EYmdQcmludCgiUmVjdiBpbmRpY2F0ZSBzZXE9JWRcbiIsIHNlcSk7CisgICAgICAgICAgICAgICAgLy9EYmdQcmludCgiMi4gc2VxPSVkXG4iLCBzZXEpOworICAgICAgICAgICAgICAgIHdkLT56ZmNiUmVjdjgwMjExKGRldiwgcGJ1ZiwgJmFkZEluZm8pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNlcSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBwYnVmLCAyMikgPj4gNDsKKyAgICAgICAgICAgICAgICAvL0RiZ1ByaW50KCJSZWN2IGluZGljYXRlIHNlcT0lZFxuIiwgc2VxKTsKKyAgICAgICAgICAgICAgICB6ZmlSZWN2ODAyMTEoZGV2LCBwYnVmLCAmYWRkSW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIHRpZF9yeC0+YmF3X2hlYWQgPSB0aWRfcngtPmJhd190YWlsID0gMDsKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIHJldHVybiAxOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmQWdnUnhGcmVlQnVmICAgICAgICAgICAgICAqLworLyogICAgICBGcmVlcyBhbGwgcXVldWVkIHBhY2tldHMgaW4gYnVmZmVyIHdoZW4gdGhlIGRyaXZlciBpcyBkb3duLiAgICAgKi8KKy8qICAgICAgVGhlIHpmRnJlZVJlc291cmNlKCkgd2lsbCBjaGVjayBpZiB0aGUgYnVmZmVyIGlzIGFsbCBmcmVlZC4gICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2ICAgICA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgWk1fU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgSG9uZGEgICAgICAgICAgICAgICBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJTkMuICAgIDIwMDYuMTIgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90ICAgemZBZ2dSeEZyZWVCdWYoemRldl90KiBkZXYsIHUxNl90IGRlc3Ryb3kpCit7CisgICAgdTE2X3QgICBpOworICAgIHpidWZfdCogYnVmOworICAgIHN0cnVjdCBhZ2dfdGlkX3J4ICp0aWRfcng7CisKKyAgICBUSURfVFggIHRpZF90eDsKKyAgICAvL3N0cnVjdCBidWZJbmZvICpidWZfaW5mbzsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgZm9yIChpPTA7IGk8Wk1fQUdHX1BPT0xfU0laRTsgaSsrKQorICAgIHsKKyAgICAgICAgdTE2X3QgajsKKworICAgICAgICB0aWRfcnggPSB3ZC0+dGlkX3J4W2ldOworCisgICAgICAgIGZvcihqPTA7IGogPD0gWk1fQUdHX0JBV19TSVpFOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICBidWYgPSB0aWRfcngtPmZyYW1lW2pdLmJ1ZjsKKyAgICAgICAgICAgIHRpZF9yeC0+ZnJhbWVbal0uYnVmID0gMDsKKyAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgICAgIGlmIChidWYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAjaWYgMAorICAgICAgICBpZiAoIHRpZF9yeC0+YmF3X2hlYWQgIT0gdGlkX3J4LT5iYXdfdGFpbCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlICh0aWRfcngtPmJhd19oZWFkICE9IHRpZF9yeC0+YmF3X3RhaWwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnVmID0gdGlkX3J4LT5mcmFtZVt0aWRfcngtPmJhd190YWlsXS5idWY7CisgICAgICAgICAgICAgICAgdGlkX3J4LT5mcmFtZVt0aWRfcngtPmJhd190YWlsXS5idWYgPSAwOworICAgICAgICAgICAgICAgIGlmIChidWYpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKworICAgICAgICAgICAgICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgICAgICAgICB0aWRfcngtPmZyYW1lW3RpZF9yeC0+YmF3X3RhaWxdLmJ1ZiA9IDA7CisgICAgICAgICAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICAgICAgLy9pZiAodGlkX3J4LT5iYXdfc2l6ZSA+IDApdGlkX3J4LT5iYXdfc2l6ZS0tOworICAgICAgICAgICAgICAgIHRpZF9yeC0+YmF3X3RhaWwgPSAodGlkX3J4LT5iYXdfdGFpbCArIDEpICYgWk1fQUdHX0JBV19NQVNLOworICAgICAgICAgICAgICAgIHRpZF9yeC0+c2VxX3N0YXJ0Kys7CisgICAgICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAjZW5kaWYKKworICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICB0aWRfcngtPnNlcV9zdGFydCA9IDA7CisgICAgICAgIHRpZF9yeC0+YmF3X2hlYWQgPSB0aWRfcngtPmJhd190YWlsID0gMDsKKyAgICAgICAgdGlkX3J4LT5haWQgPSBaTV9NQVhfU1RBX1NVUFBPUlQ7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgI2lmZGVmIFpNX0VOQUJMRV9BR0dSRUdBVElPTgorICAgICAgICAjaWZuZGVmIFpNX0VOQUJMRV9GV19CQV9SRVRSQU5TTUlTU0lPTiAvL2Rpc2FibGUgQkFXCisgICAgICAgIGlmICh0aWRfYmF3LT5lbmFibGVkKSB7CisgICAgICAgICAgICB6bV9tc2cxX2FnZyhaTV9MVl8wLCAiRGV2aWNlIGRvd24sIGNsZWFyIEJBVyBxdWV1ZToiLCBpKTsKKyAgICAgICAgICAgIEJBVy0+ZGlzYWJsZShkZXYsIHRpZF9iYXcpOworICAgICAgICB9CisgICAgICAgICNlbmRpZgorICAgICAgICAjZW5kaWYKKyAgICAgICAgaWYgKDEgPT0gd2QtPmFnZ1FQb29sW2ldLT5hZ2dRRW5hYmxlZCkgeworICAgICAgICAgICAgdGlkX3R4ID0gd2QtPmFnZ1FQb29sW2ldOworICAgICAgICAgICAgYnVmID0gemZBZ2dUeEdldFZ0eHEoZGV2LCB0aWRfdHgpOworICAgICAgICAgICAgd2hpbGUgKGJ1ZikgeworICAgICAgICAgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIDApOworICAgICAgICAgICAgICAgIGJ1ZiA9IHpmQWdnVHhHZXRWdHhxKGRldiwgdGlkX3R4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKGRlc3Ryb3kpIHsKKyAgICAgICAgICAgIHpmd01lbUZyZWUoZGV2LCB3ZC0+YWdnUVBvb2xbaV0sIHNpemVvZihzdHJ1Y3QgYWdnUXVldWUpKTsKKyAgICAgICAgICAgIHpmd01lbUZyZWUoZGV2LCB3ZC0+dGlkX3J4W2ldLCBzaXplb2Yoc3RydWN0IGFnZ190aWRfcngpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAjaWZkZWYgWk1fRU5BQkxFX0FHR1JFR0FUSU9OCisgICAgI2lmbmRlZiBaTV9FTkFCTEVfRldfQkFfUkVUUkFOU01JU1NJT04gLy9kaXNhYmxlIEJBVworICAgIGlmKGRlc3Ryb3kpIHpmd01lbUZyZWUoZGV2LCBCQVcsIHNpemVvZihzdHJ1Y3QgYmF3X2VuYWJsZXIpKTsKKyAgICAjZW5kaWYKKyAgICAjZW5kaWYKKyAgICByZXR1cm4gWk1fU1VDQ0VTUzsKK30KKworCit2b2lkIHpmQWdnUmVjdkJBUih6ZGV2X3QqIGRldiwgemJ1Zl90ICpidWYpIHsKKyAgICB1MTZfdCBzdGFydF9zZXEsIGxlbjsKKyAgICB1OF90IGksIGJpdG1hcFs4XTsKKyAgICBsZW4gPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsKKyAgICBzdGFydF9zZXEgPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBsZW4tMik7CisgICAgRGJnUHJpbnQoIlJlY2VpdmVkIGEgQkFSIENvbnRyb2wgZnJhbWUsIHN0YXJ0X3NlcT0lZCIsIHN0YXJ0X3NlcT4+NCk7CisgICAgLyogdG9kbzogc2V0IHRoZSBiaXRtYXAgYnkgcmVvcmRlcmluZyBidWZmZXIhICovCisgICAgZm9yIChpPTA7IGk8ODsgaSsrKSBiaXRtYXBbaV09MDsKKyAgICB6ZlNlbmRCQShkZXYsIHN0YXJ0X3NlcSwgYml0bWFwKTsKK30KKworI2lmZGVmIFpNX0VOQUJMRV9BR0dSRUdBVElPTgorI2lmbmRlZiBaTV9FTkFCTEVfRldfQkFfUkVUUkFOU01JU1NJT04gLy9kaXNhYmxlIEJBVwordm9pZCB6ZkFnZ1R4UmV0cmFuc21pdCh6ZGV2X3QqIGRldiwgc3RydWN0IGJ1ZkluZm8gKmJ1Zl9pbmZvLCBzdHJ1Y3QgYWdnQ29udHJvbCAqYWdnQ29udHJvbCwgVElEX1RYIHRpZF90eCkgeworICAgIHUxNl90IHJlbW92ZUxlbjsKKyAgICB1MTZfdCBlcnI7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgaWYgKGFnZ0NvbnRyb2wgJiYgKFpNX0FHR19GSVJTVF9NUERVID09IGFnZ0NvbnRyb2wtPmFtcGR1SW5kaWNhdGlvbikgKSB7CisgICAgICAgIHRpZF90eC0+YmFyX3NzbiA9IGJ1Zl9pbmZvLT5iYXdfaGVhZGVyLT5oZWFkZXJbMTVdOworICAgICAgICBhZ2dDb250cm9sLT50aWRfYmF3LT5zdGFydF9zZXEgPSB0aWRfdHgtPmJhcl9zc24gPj4gNDsKKyAgICAgICAgem1fbXNnMV9hZ2coWk1fTFZfMCwgInN0YXJ0IHNlcT0iLCB0aWRfdHgtPmJhcl9zc24gPj4gNCk7CisgICAgfQorICAgIGJ1Zl9pbmZvLT5iYXdfaGVhZGVyLT5oZWFkZXJbNF0gfD0gKDEgPDwgMTEpOworICAgIGlmIChhZ2dDb250cm9sICYmIGFnZ0NvbnRyb2wtPmFnZ0VuYWJsZWQpIHsKKyAgICAgICAgLy9pZiAod2QtPmVuYWJsZUFnZ3JlZ2F0aW9uPT0wICYmICEoYnVmX2luZm8tPmJhd19oZWFkZXItPmhlYWRlcls2XSYweDEpKQorICAgICAgICAvL3sKKyAgICAgICAgICAgIC8vaWYgKCgoYnVmX2luZm8tPmJhd19oZWFkZXItPmhlYWRlclsyXSAmIDB4MykgPT0gMikpCisgICAgICAgICAgICAvL3sKKyAgICAgICAgICAgICAgICAvKiBFbmFibGUgYWdncmVnYXRpb24gKi8KKyAgICAgICAgICAgICAgICBidWZfaW5mby0+YmF3X2hlYWRlci0+aGVhZGVyWzFdIHw9IDB4MjA7CisgICAgICAgICAgICAgICAgaWYgKFpNX0FHR19MQVNUX01QRFUgPT0gYWdnQ29udHJvbC0+YW1wZHVJbmRpY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1Zl9pbmZvLT5iYXdfaGVhZGVyLT5oZWFkZXJbMV0gfD0gMHg0MDAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmX2luZm8tPmJhd19oZWFkZXItPmhlYWRlclsxXSAmPSB+MHg0MDAwOworICAgICAgICAgICAgICAgICAgICAvL3ptX2RlYnVnX21zZzAoIlpNX0FHR19MQVNUX01QRFUiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAvL30KKyAgICAgICAgICAgIC8vZWxzZSB7CisgICAgICAgICAgICAvLyAgICB6bV9kZWJ1Z19tc2cxKCJubyBhZ2dyLCBoZWFkZXJbMl0mMHgzID0gIixidWZfaW5mby0+YmF3X2hlYWRlci0+aGVhZGVyWzJdICYgMHgzKQorICAgICAgICAgICAgLy8gICAgYWdnQ29udHJvbC0+YWdnRW5hYmxlZCA9IDA7CisgICAgICAgICAgICAvL30KKyAgICAgICAgLy99CisgICAgICAgIC8vZWxzZSB7CisgICAgICAgIC8vICAgIHptX2RlYnVnX21zZzEoIm5vIGFnZ3IsIHdkLT5lbmFibGVBZ2dyZWdhdGlvbiA9ICIsIHdkLT5lbmFibGVBZ2dyZWdhdGlvbik7CisgICAgICAgIC8vICAgIHptX2RlYnVnX21zZzEoIm5vIGFnZ3IsICFoZWFkZXJbNl0mMHgxID0gIiwhKGJ1Zl9pbmZvLT5iYXdfaGVhZGVyLT5oZWFkZXJbNl0mMHgxKSk7CisgICAgICAgIC8vICAgIGFnZ0NvbnRyb2wtPmFnZ0VuYWJsZWQgPSAwOworICAgICAgICAvL30KKyAgICB9CisKKyAgICAvKmlmIChhZ2dDb250cm9sLT50aWRfYmF3KSB7CisgICAgICAgIHN0cnVjdCBiYXdfaGVhZGVyX3IgaGVhZGVyX3I7CisKKyAgICAgICAgaGVhZGVyX3IuaGVhZGVyICAgICAgPSBidWZfaW5mby0+YmF3X2hlYWRlci0+aGVhZGVyOworICAgICAgICBoZWFkZXJfci5taWMgICAgICAgICA9IGJ1Zl9pbmZvLT5iYXdfaGVhZGVyLT5taWM7CisgICAgICAgIGhlYWRlcl9yLnNuYXAgICAgICAgID0gYnVmX2luZm8tPmJhd19oZWFkZXItPnNuYXA7CisgICAgICAgIGhlYWRlcl9yLmhlYWRlckxlbiAgID0gYnVmX2luZm8tPmJhd19oZWFkZXItPmhlYWRlckxlbjsKKyAgICAgICAgaGVhZGVyX3IubWljTGVuICAgICAgPSBidWZfaW5mby0+YmF3X2hlYWRlci0+bWljTGVuOworICAgICAgICBoZWFkZXJfci5zbmFwTGVuICAgICA9IGJ1Zl9pbmZvLT5iYXdfaGVhZGVyLT5zbmFwTGVuOworICAgICAgICBoZWFkZXJfci5yZW1vdmVMZW4gICA9IGJ1Zl9pbmZvLT5iYXdfaGVhZGVyLT5yZW1vdmVMZW47CisgICAgICAgIGhlYWRlcl9yLmtleUlkeCAgICAgID0gYnVmX2luZm8tPmJhd19oZWFkZXItPmtleUlkeDsKKworICAgICAgICBCQVctPmluc2VydChkZXYsIGJ1Zl9pbmZvLT5idWYsIHRpZF90eC0+YmFyX3NzbiA+PiA0LCBhZ2dDb250cm9sLT50aWRfYmF3LCBidWZfaW5mby0+YmF3X3JldHJhbnNtaXQsICZoZWFkZXJfcik7CisgICAgfSovCisKKyAgICBpZiAoKGVyciA9IHpmSHBTZW5kKGRldiwKKyAgICAgICAgICAgICAgICAgICAgYnVmX2luZm8tPmJhd19oZWFkZXItPmhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgYnVmX2luZm8tPmJhd19oZWFkZXItPmhlYWRlckxlbiwKKyAgICAgICAgICAgICAgICAgICAgYnVmX2luZm8tPmJhd19oZWFkZXItPnNuYXAsCisgICAgICAgICAgICAgICAgICAgIGJ1Zl9pbmZvLT5iYXdfaGVhZGVyLT5zbmFwTGVuLAorICAgICAgICAgICAgICAgICAgICBidWZfaW5mby0+YmF3X2hlYWRlci0+bWljLAorICAgICAgICAgICAgICAgICAgICBidWZfaW5mby0+YmF3X2hlYWRlci0+bWljTGVuLAorICAgICAgICAgICAgICAgICAgICBidWZfaW5mby0+YnVmLAorICAgICAgICAgICAgICAgICAgICBidWZfaW5mby0+YmF3X2hlYWRlci0+cmVtb3ZlTGVuLAorICAgICAgICAgICAgICAgICAgICBaTV9FWFRFUk5BTF9BTExPQ19CVUYsCisgICAgICAgICAgICAgICAgICAgICh1OF90KXRpZF90eC0+YWMsCisgICAgICAgICAgICAgICAgICAgIGJ1Zl9pbmZvLT5iYXdfaGVhZGVyLT5rZXlJZHgpKSAhPSBaTV9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgZ290byB6bEVycm9yOworICAgIH0KKworICAgIHJldHVybjsKKworemxFcnJvcjoKKyAgICB6ZndCdWZGcmVlKGRldiwgYnVmX2luZm8tPmJ1ZiwgMCk7CisgICAgcmV0dXJuOworCit9CisjZW5kaWYgLy9kaXNhYmxlIEJBVworI2VuZGlmCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZBZ2dUeFNlbmRFdGggICAgICAgICAgICAgICovCisvKiAgICAgIENhbGxlZCB0byB0cmFuc21pdCBFdGhlcm5ldCBmcmFtZSBmcm9tIHVwcGVyIGVsYXllci4gICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBidWYgOiBidWZmZXIgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgcG9ydCA6IFdMQU4gcG9ydCwgMD0+c3RhbmRhcmQsIDB4MTAtMHgxNz0+VkFQLCAweDIwLTB4MjU9PldEUyAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZXJyb3IgY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiwgSG9uZGEgICAgICBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuICAgIDIwMDYuMTIgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90IHpmQWdnVHhTZW5kRXRoKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgcG9ydCwgdTE2X3QgYnVmVHlwZSwgdThfdCBmbGFnLCBzdHJ1Y3QgYWdnQ29udHJvbCAqYWdnQ29udHJvbCwgVElEX1RYIHRpZF90eCkKK3sKKyAgICB1MTZfdCBlcnI7CisgICAgLy91MTZfdCBhZGRyVGJsU2l6ZTsKKyAgICAvL3N0cnVjdCB6c0FkZHJUYmwgYWRkclRibDsKKyAgICB1MTZfdCByZW1vdmVMZW47CisgICAgdTE2X3QgaGVhZGVyWyg4KzMwKzIrMTgpLzJdOyAgICAvKiBjdHIrKDQrYTErYTIrYTMrMithNCkrcW9zK2l2ICovCisgICAgdTE2X3QgaGVhZGVyTGVuOworICAgIHUxNl90IG1pY1s4LzJdOworICAgIHUxNl90IG1pY0xlbjsKKyAgICB1MTZfdCBzbmFwWzgvMl07CisgICAgdTE2X3Qgc25hcExlbjsKKyAgICB1MTZfdCBmcmFnTGVuOworICAgIHUxNl90IGZyYW1lTGVuOworICAgIHUxNl90IGZyYWdOdW07CisgICAgc3RydWN0IHpzRnJhZyBmcmFnOworICAgIHUxNl90IGksIGlkOworICAgIHUxNl90IGRhWzNdOworICAgIHUxNl90IHNhWzNdOworICAgIHU4X3QgdXA7CisgICAgdThfdCBxb3NUeXBlLCBrZXlJZHggPSAwOworICAgIHUxNl90IGZyYWdPZmY7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem1fbXNnMV90eChaTV9MVl8yLCAiemZUeFNlbmRFdGgoKSwgcG9ydD0iLCBwb3J0KTsKKworICAgIC8qIEdldCBJUCBUT1MgZm9yIFFvUyBBQyBhbmQgSVAgZnJhZyBvZmZzZXQgKi8KKyAgICB6ZlR4R2V0SXBUb3NBbmRGcmFnKGRldiwgYnVmLCAmdXAsICZmcmFnT2ZmKTsKKworI2lmZGVmIFpNX0VOQUJMRV9OQVRJVkVfV0lGSQorICAgIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUgKQorICAgIHsKKyAgICAgICAgLyogREEgKi8KKyAgICAgICAgZGFbMF0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCAxNik7CisgICAgICAgIGRhWzFdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMTgpOworICAgICAgICBkYVsyXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDIwKTsKKyAgICAgICAgLyogU0EgKi8KKyAgICAgICAgc2FbMF0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCAxMCk7CisgICAgICAgIHNhWzFdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMTIpOworICAgICAgICBzYVsyXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDE0KTsKKyAgICB9CisgICAgZWxzZSBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lCU1MgKQorICAgIHsKKyAgICAgICAgLyogREEgKi8KKyAgICAgICAgZGFbMF0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCA0KTsKKyAgICAgICAgZGFbMV0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCA2KTsKKyAgICAgICAgZGFbMl0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCA4KTsKKyAgICAgICAgLyogU0EgKi8KKyAgICAgICAgc2FbMF0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCAxMCk7CisgICAgICAgIHNhWzFdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMTIpOworICAgICAgICBzYVsyXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDE0KTsKKyAgICB9CisgICAgZWxzZSBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQICkKKyAgICB7CisgICAgICAgIC8qIERBICovCisgICAgICAgIGRhWzBdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgNCk7CisgICAgICAgIGRhWzFdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgNik7CisgICAgICAgIGRhWzJdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgOCk7CisgICAgICAgIC8qIFNBICovCisgICAgICAgIHNhWzBdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMTYpOworICAgICAgICBzYVsxXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDE4KTsKKyAgICAgICAgc2FbMl0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCAyMCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vCisgICAgfQorI2Vsc2UKKyAgICAvKiBEQSAqLworICAgIGRhWzBdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMCk7CisgICAgZGFbMV0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCAyKTsKKyAgICBkYVsyXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDQpOworICAgIC8qIFNBICovCisgICAgc2FbMF0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCA2KTsKKyAgICBzYVsxXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDgpOworICAgIHNhWzJdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMTApOworI2VuZGlmCisgICAgLy9EZWNpZGUgS2V5IEluZGV4IGluIEFUT00sIE5vIG1lYW5pbmcgaW4gT1RVUy0tQ1dZYW5nKG0pCisgICAgaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKQorICAgIHsKKyAgICAgICAga2V5SWR4ID0gd2QtPmFwLmJjSGFsS2V5SWR4W3BvcnRdOworICAgICAgICBpZCA9IHpmQXBGaW5kU3RhKGRldiwgZGEpOworICAgICAgICBpZiAoaWQgIT0gMHhmZmZmKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHdkLT5hcC5zdGFUYWJsZVtpZF0uZW5jcnlNb2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBaTV9BRVM6CisgICAgICAgICAgICBjYXNlIFpNX1RLSVA6CisjaWZkZWYgWk1fRU5BQkxFX0NFTkMKKyAgICAgICAgICAgIGNhc2UgWk1fQ0VOQzoKKyNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCisgICAgICAgICAgICAgICAga2V5SWR4ID0gd2QtPmFwLnN0YVRhYmxlW2lkXS5rZXlJZHg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3dpdGNoICh3ZC0+c3RhLmVuY3J5TW9kZSkKKyAgICAgICAgeworICAgICAgICBjYXNlIFpNX1dFUDY0OgorICAgICAgICBjYXNlIFpNX1dFUDEyODoKKyAgICAgICAgY2FzZSBaTV9XRVAyNTY6CisgICAgICAgICAgICBrZXlJZHggPSB3ZC0+c3RhLmtleUlkOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWk1fQUVTOgorICAgICAgICBjYXNlIFpNX1RLSVA6CisgICAgICAgICAgICBpZiAoKGRhWzBdJiAweDEpKQorICAgICAgICAgICAgICAgIGtleUlkeCA9IDU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAga2V5SWR4ID0gNDsKKyAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisgICAgICAgIGNhc2UgWk1fQ0VOQzoKKyAgICAgICAgICAgIGtleUlkeCA9IHdkLT5zdGEuY2VuY0tleUlkOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworICAgICAgICB9CisgICAgfQorCisgICAgLyogQ3JlYXRlIFNOQVAgKi8KKyAgICByZW1vdmVMZW4gPSB6ZlR4R2VuV2xhblNuYXAoZGV2LCBidWYsIHNuYXAsICZzbmFwTGVuKTsKKyAgICAvL3ptX21zZzFfdHgoWk1fTFZfMCwgImZyYWdPZmY9IiwgZnJhZ09mZik7CisKKyAgICBmcmFnTGVuID0gd2QtPmZyYWdUaHJlc2hvbGQ7CisgICAgZnJhbWVMZW4gPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsKKyAgICBmcmFtZUxlbiAtPSByZW1vdmVMZW47CisKKyNpZiAwCisgICAgLyogQ3JlYXRlIE1JQyAqLworICAgIGlmICggKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFKSYmCisgICAgICAgICAod2QtPnN0YS5lbmNyeU1vZGUgPT0gWk1fVEtJUCkgKQorICAgIHsKKyAgICAgICAgaWYgKCBmcmFtZUxlbiA+IGZyYWdMZW4gKQorICAgICAgICB7CisgICAgICAgICAgICBtaWNMZW4gPSB6ZlR4R2VuV2xhblRhaWwoZGV2LCBidWYsIHNuYXAsIHNuYXBMZW4sIG1pYyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBhcHBlbmQgTUlDIGJ5IEhNQUMgKi8KKyAgICAgICAgICAgIG1pY0xlbiA9IDg7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbWljTGVuID0gMDsKKyAgICB9CisjZWxzZQorICAgIGlmICggZnJhbWVMZW4gPiBmcmFnTGVuICkKKyAgICB7CisgICAgICAgIG1pY0xlbiA9IHpmVHhHZW5XbGFuVGFpbChkZXYsIGJ1Ziwgc25hcCwgc25hcExlbiwgbWljKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogYXBwZW5kIE1JQyBieSBITUFDICovCisgICAgICAgIG1pY0xlbiA9IDA7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBBY2Nlc3MgQ2F0ZWdvcnkgKi8KKyAgICBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApCisgICAgeworICAgICAgICB6ZkFwR2V0U3RhUW9zVHlwZShkZXYsIGRhLCAmcW9zVHlwZSk7CisgICAgICAgIGlmIChxb3NUeXBlID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVwID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSkKKyAgICB7CisgICAgICAgIGlmICh3ZC0+c3RhLndtZUNvbm5lY3RlZCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB1cCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogVE9ETyA6IFNUQSBRb1MgY29udHJvbCBmaWVsZCAqLworICAgICAgICB1cCA9IDA7CisgICAgfQorCisgICAgLyogQXNzaWduIHNlcXVlbmNlIG51bWJlciAqLworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgZnJhZy5zZXFbMF0gPSAoKHdkLT5zZXFbemNVcFRvQWNbdXAmMHg3XV0rKykgPDwgNCk7CisgICAgaWYgKGFnZ0NvbnRyb2wgJiYgKFpNX0FHR19GSVJTVF9NUERVID09IGFnZ0NvbnRyb2wtPmFtcGR1SW5kaWNhdGlvbikgKSB7CisgICAgICAgIHRpZF90eC0+YmFyX3NzbiA9IGZyYWcuc2VxWzBdOworCisgICAgICAgIHptX21zZzFfYWdnKFpNX0xWXzAsICJzdGFydCBzZXE9IiwgdGlkX3R4LT5iYXJfc3NuID4+IDQpOworICAgIH0KKyAgICAvL3RpZF90eC0+YmF3X2J1Zlt0aWRfdHgtPmJhd19oZWFkLTFdLmJhd19zZXE9ZnJhZy5zZXFbMF07CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworCisgICAgICAgIGZyYWcuYnVmWzBdID0gYnVmOworICAgICAgICBmcmFnLmJ1ZlR5cGVbMF0gPSBidWZUeXBlOworICAgICAgICBmcmFnLmZsYWdbMF0gPSBmbGFnOworICAgICAgICBmcmFnTnVtID0gMTsKKworICAgIGZvciAoaT0wOyBpPGZyYWdOdW07IGkrKykKKyAgICB7CisgICAgICAgIC8qIENyZWF0ZSBXTEFOIGhlYWRlcihDb250cm9sIFNldHRpbmcgKyA4MDIuMTEgaGVhZGVyICsgSVYpICovCisgICAgICAgIGlmICh1cCAhPTAgKSB6bV9kZWJ1Z19tc2cxKCJ1cCBub3QgMCwgdXA9Iix1cCk7CisgICAgICAgIGhlYWRlckxlbiA9IHpmVHhHZW5XbGFuSGVhZGVyKGRldiwgZnJhZy5idWZbaV0sIGhlYWRlciwgZnJhZy5zZXFbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWcuZmxhZ1tpXSwgc25hcExlbittaWNMZW4sIHJlbW92ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCwgZGEsIHNhLCB1cCwgJm1pY0xlbiwgc25hcCwgc25hcExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdnQ29udHJvbCk7CisKKyAgICAgICAgLyogR2V0IGJ1ZmZlciBETUEgYWRkcmVzcyAqLworICAgICAgICAvL2lmICgoYWRkclRibFNpemUgPSB6ZndCdWZNYXBEbWEoZGV2LCBmcmFnLmJ1ZltpXSwgJmFkZHJUYmwpKSA9PSAwKQorICAgICAgICAvL2lmICgoYWRkclRibFNpemUgPSB6ZndNYXBUeERtYShkZXYsIGZyYWcuYnVmW2ldLCAmYWRkclRibCkpID09IDApCisgICAgICAgIC8veworICAgICAgICAvLyAgICBlcnIgPSBaTV9FUlJfQlVGRkVSX0RNQV9BRERSOworICAgICAgICAvLyAgICBnb3RvIHpsRXJyb3I7CisgICAgICAgIC8vfQorCisgICAgICAgIC8qIEZsdXNoIGJ1ZmZlciBvbiBjYWNoZSAqLworICAgICAgICAvL3pmd0J1ZkZsdXNoKGRldiwgZnJhZy5idWZbaV0pOworCisjaWYgMAorICAgICAgICB6bV9tc2cxX3R4KFpNX0xWXzAsICJoZWFkZXJMZW49IiwgaGVhZGVyTGVuKTsKKyAgICAgICAgem1fbXNnMV90eChaTV9MVl8wLCAic25hcExlbj0iLCBzbmFwTGVuKTsKKyAgICAgICAgem1fbXNnMV90eChaTV9MVl8wLCAibWljTGVuPSIsIG1pY0xlbik7CisgICAgICAgIHptX21zZzFfdHgoWk1fTFZfMCwgInJlbW92ZUxlbj0iLCByZW1vdmVMZW4pOworICAgICAgICB6bV9tc2cxX3R4KFpNX0xWXzAsICJhZGRyVGJsU2l6ZT0iLCBhZGRyVGJsU2l6ZSk7CisgICAgICAgIHptX21zZzFfdHgoWk1fTFZfMCwgImZyYWcuYnVmVHlwZVswXT0iLCBmcmFnLmJ1ZlR5cGVbMF0pOworI2VuZGlmCisKKyAgICAgICAgZnJhZ0xlbiA9IHpmd0J1ZkdldFNpemUoZGV2LCBmcmFnLmJ1ZltpXSk7CisgICAgICAgIGlmICgoZGFbMF0mMHgxKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+Y29tbVRhbGx5LnR4VW5pY2FzdEZybSsrOworICAgICAgICAgICAgd2QtPmNvbW1UYWxseS50eFVuaWNhc3RPY3RldHMgKz0gKGZyYWdMZW4rc25hcExlbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKGRhWzBdJiAweDEpKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+Y29tbVRhbGx5LnR4QnJvYWRjYXN0RnJtKys7CisgICAgICAgICAgICB3ZC0+Y29tbVRhbGx5LnR4QnJvYWRjYXN0T2N0ZXRzICs9IChmcmFnTGVuK3NuYXBMZW4pOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPmNvbW1UYWxseS50eE11bHRpY2FzdEZybSsrOworICAgICAgICAgICAgd2QtPmNvbW1UYWxseS50eE11bHRpY2FzdE9jdGV0cyArPSAoZnJhZ0xlbitzbmFwTGVuKTsKKyAgICAgICAgfQorICAgICAgICB3ZC0+bGVkU3RydWN0LnR4VHJhZmZpYysrOworCisjaWYgMCAvL1dobyBjYXJlIHRoaXM/CisgICAgICAgIGlmICggKGkpJiYoaSA9PSAoZnJhZ051bS0xKSkgKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+dHJhZlRhbGx5LnR4RGF0YUJ5dGVDb3VudCAtPSBtaWNMZW47CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIC8qaWYgKGFnZ0NvbnRyb2wtPnRpZF9iYXcgJiYgYWdnQ29udHJvbC0+YWdnRW5hYmxlZCkgeworICAgICAgICAgICAgc3RydWN0IGJhd19oZWFkZXJfciBoZWFkZXJfcjsKKworICAgICAgICAgICAgaGVhZGVyX3IuaGVhZGVyICAgICAgPSBoZWFkZXI7CisgICAgICAgICAgICBoZWFkZXJfci5taWMgICAgICAgICA9IG1pYzsKKyAgICAgICAgICAgIGhlYWRlcl9yLnNuYXAgICAgICAgID0gc25hcDsKKyAgICAgICAgICAgIGhlYWRlcl9yLmhlYWRlckxlbiAgID0gaGVhZGVyTGVuOworICAgICAgICAgICAgaGVhZGVyX3IubWljTGVuICAgICAgPSBtaWNMZW47CisgICAgICAgICAgICBoZWFkZXJfci5zbmFwTGVuICAgICA9IHNuYXBMZW47CisgICAgICAgICAgICBoZWFkZXJfci5yZW1vdmVMZW4gICA9IHJlbW92ZUxlbjsKKyAgICAgICAgICAgIGhlYWRlcl9yLmtleUlkeCAgICAgID0ga2V5SWR4OworCisgICAgICAgICAgICBCQVctPmluc2VydChkZXYsIGJ1ZiwgdGlkX3R4LT5iYXJfc3NuID4+IDQsIGFnZ0NvbnRyb2wtPnRpZF9iYXcsIDAsICZoZWFkZXJfcik7CisgICAgICAgIH0qLworCisgICAgICAgIGlmICgoZXJyID0gemZIcFNlbmQoZGV2LCBoZWFkZXIsIGhlYWRlckxlbiwgc25hcCwgc25hcExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWljLCBtaWNMZW4sIGZyYWcuYnVmW2ldLCByZW1vdmVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWcuYnVmVHlwZVtpXSwgemNVcFRvQWNbdXAmMHg3XSwga2V5SWR4KSkgIT0gWk1fU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgZ290byB6bEVycm9yOworICAgICAgICB9CisKKworICAgICAgICBjb250aW51ZTsKKworemxFcnJvcjoKKyAgICAgICAgaWYgKGZyYWcuYnVmVHlwZVtpXSA9PSBaTV9FWFRFUk5BTF9BTExPQ19CVUYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCBmcmFnLmJ1ZltpXSwgZXJyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChmcmFnLmJ1ZlR5cGVbaV0gPT0gWk1fSU5URVJOQUxfQUxMT0NfQlVGKQorICAgICAgICB7CisgICAgICAgICAgICB6ZndCdWZGcmVlKGRldiwgZnJhZy5idWZbaV0sIDApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgem1fYXNzZXJ0KDApOworICAgICAgICB9CisgICAgfSAvKiBmb3IgKGk9MDsgaTxmcmFnTnVtOyBpKyspICovCisKKyAgICByZXR1cm4gWk1fU1VDQ0VTUzsKK30KKworLyoKKyAqIHpmQWdnU2VuZEFEREJBKCkgcmVmZXJzIHpmU2VuZE1tRnJhbWUoKSBpbiBjbW0uYworICovCit1MTZfdCAgIHpmQWdnU2VuZEFkZGJhUmVxdWVzdCh6ZGV2X3QqIGRldiwgdTE2X3QgKmRzdCwgdTE2X3QgYWMsIHUxNl90IHVwKQoreworICAgIHpidWZfdCogYnVmOworICAgIC8vdTE2X3QgYWRkclRibFNpemU7CisgICAgLy9zdHJ1Y3QgenNBZGRyVGJsIGFkZHJUYmw7CisgICAgLy91MTZfdCBlcnI7CisgICAgdTE2X3Qgb2Zmc2V0ID0gMDsKKyAgICB1MTZfdCBobGVuID0gMzI7CisgICAgdTE2X3QgaGVhZGVyWygyNCsyNSsxKS8yXTsKKyAgICB1MTZfdCB2YXAgPSAwOworICAgIHUxNl90IGk7CisgICAgdThfdCBlbmNyeXB0ID0gMDsKKworICAgIC8vem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLy96bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisKKyAgICAvKgorICAgICAqIFRCRCA6IE1heGltdW0gc2l6ZSBvZiBtYW5hZ21lbnQgZnJhbWUKKyAgICAgKi8KKyAgICBpZiAoKGJ1ZiA9IHpmd0J1ZkFsbG9jYXRlKGRldiwgMTAyNCkpID09IE5VTEwpCisgICAgeworICAgICAgICB6bV9tc2cwX21tKFpNX0xWXzAsICJBbGxvYyBtbSBidWYgRmFpbCEiKTsKKyAgICAgICAgcmV0dXJuIFpNX1NVQ0NFU1M7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBSZXNlcnZlIHJvb20gZm9yIHdsYW4gaGVhZGVyCisgICAgICovCisgICAgb2Zmc2V0ID0gaGxlbjsKKworICAgIC8qCisgICAgICogYWRkIGFkZGJhIGZyYW1lIGJvZHkKKyAgICAgKi8KKyAgICBvZmZzZXQgPSB6ZkFnZ1NldEFkZGJhRnJhbWVCb2R5KGRldiwgYnVmLCBvZmZzZXQsIGFjLCB1cCk7CisKKworICAgIHpmd0J1ZlNldFNpemUoZGV2LCBidWYsIG9mZnNldCk7CisKKyAgICAvKgorICAgICAqIENvcHkgd2xhbiBoZWFkZXIKKyAgICAgKi8KKyAgICB6ZkFnZ0dlbkFkZGJhSGVhZGVyKGRldiwgZHN0LCBoZWFkZXIsIG9mZnNldC1obGVuLCBidWYsIHZhcCwgZW5jcnlwdCk7CisgICAgZm9yIChpPTA7IGk8KGhsZW4+PjEpOyBpKyspCisgICAgeworICAgICAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgaSoyLCBoZWFkZXJbaV0pOworICAgIH0KKworICAgIC8qIEdldCBidWZmZXIgRE1BIGFkZHJlc3MgKi8KKyAgICAvL2lmICgoYWRkclRibFNpemUgPSB6ZndCdWZNYXBEbWEoZGV2LCBidWYsICZhZGRyVGJsKSkgPT0gMCkKKyAgICAvL2lmICgoYWRkclRibFNpemUgPSB6ZndNYXBUeERtYShkZXYsIGJ1ZiwgJmFkZHJUYmwpKSA9PSAwKQorICAgIC8veworICAgIC8vICAgIGdvdG8gemxFcnJvcjsKKyAgICAvL30KKworICAgIC8vem1fbXNnMl9tbShaTV9MVl8yLCAib2Zmc2V0PSIsIG9mZnNldCk7CisgICAgLy96bV9tc2cyX21tKFpNX0xWXzIsICJobGVuPSIsIGhsZW4pOworICAgIC8vem1fbXNnMl9tbShaTV9MVl8yLCAiYWRkclRibFNpemU9IiwgYWRkclRibFNpemUpOworICAgIC8vem1fbXNnMl9tbShaTV9MVl8yLCAiYWRkclRibC5sZW5bMF09IiwgYWRkclRibC5sZW5bMF0pOworICAgIC8vem1fbXNnMl9tbShaTV9MVl8yLCAiYWRkclRibC5waHlzQWRkcmxbMF09IiwgYWRkclRibC5waHlzQWRkcmxbMF0pOworICAgIC8vem1fbXNnMl9tbShaTV9MVl8yLCAiYnVmLT5kYXRhPSIsIGJ1Zi0+ZGF0YSk7CisKKyAgICAjaWYgMAorICAgIGlmICgoZXJyID0gemZIcFNlbmQoZGV2LCBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMLCAwLCBidWYsIDAsCisgICAgICAgICAgICBaTV9JTlRFUk5BTF9BTExPQ19CVUYsIDAsIDB4ZmYpKSAhPSBaTV9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgZ290byB6bEVycm9yOworICAgIH0KKyAgICAjZWxzZQorICAgIHpmUHV0Vm1tcShkZXYsIGJ1Zik7CisgICAgemZQdXNoVnR4cShkZXYpOworICAgICNlbmRpZgorCisgICAgcmV0dXJuIFpNX1NVQ0NFU1M7CisKK30KKwordTE2X3QgICB6ZkFnZ1NldEFkZGJhRnJhbWVCb2R5KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3Qgb2Zmc2V0LCB1MTZfdCBhYywgdTE2X3QgdXApCit7CisgICAgdTE2X3QgYmFfcGFyYW1ldGVyLCBzdGFydF9zZXE7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvL3ptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisgICAgLyoKKyAgICAgKiBBRERCQSBSZXF1ZXN0IGZyYW1lIGJvZHkKKyAgICAgKi8KKworICAgIC8qCisgICAgICogQ2F0ZWdvcnkKKyAgICAgKi8KKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIDMpOworICAgIC8qCisgICAgICogQWN0aW9uIGRldGFpbHMgPSAwCisgICAgICovCisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCBaTV9XTEFOX0FEREJBX1JFUVVFU1RfRlJBTUUpOworICAgIC8qCisgICAgICogRGlhbG9nIFRva2VuID0gbm9uemVybworICAgICAqIFRCRDogZGVmaW5lIGhvdyB0byBnZXQgZGlhbG9nIHRva2VuPworICAgICAqLworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgMik7CisgICAgLyoKKyAgICAgKiBCbG9jayBBY2sgcGFyYW1ldGVyIHNldAorICAgICAqIEJBIHBvbGljeSA9IDEgZm9yIGltbWVkaWF0ZSBCQSwgMCBmb3IgZGVsYXllZCBCQQorICAgICAqIFRJRCg0Yml0cykgJiBidWZmZXIgc2l6ZSg0Yml0cykgKFRJRD11cCAmIGJ1ZmZlciBzaXplPTB4ODApCisgICAgICogVEJEOiBob3cgdG8gZ2V0IGJ1ZmZlciBzaXplPworICAgICAqIKJ6oneid6J3oneid6J3oneid6J3oneic6J3oneid6J3oneid6J3oneid6J3oneic6J3oneid6J3oneid6J3oneic6J3oneid6J3oneid6J3oneid6J3oneid6J3onsKKyAgICAgKiCieCAgICBCMCAgICCieCAgICBCMSAgICAgonggQjIgIEI1IKJ4IEI2ICAgICAgQjE1IKJ4CisgICAgICogonWid6J3oneid6J3oneid6J3oneid6Jxoneid6J3oneid6J3oneid6J3oneid6Jxoneid6J3oneid6J3oneid6Jxoneid6J3oneid6J3oneid6J3oneid6J3oneidAorICAgICAqIKJ4IFJlc2VydmVkIKJ4IEJBIHBvbGljeSCieCAgVElEICAgonggQnVmZmVyIHNpemUgongKKyAgICAgKiCifKJ3oneid6J3oneid6J3oneid6J3onKid6J3oneid6J3oneid6J3oneid6J3onKid6J3oneid6J3oneid6J3onKid6J3oneid6J3oneid6J3oneid6J3oneid6J9CisgICAgICovCisgICAgYmFfcGFyYW1ldGVyID0gMSA8PCAxMjsgICAgIC8vIGJ1ZmZlciBzaXplID0gMHg0MCg2NCkKKyAgICBiYV9wYXJhbWV0ZXIgfD0gdXAgPDwgMjsgICAgLy8gdGlkID0gdXAKKyAgICBiYV9wYXJhbWV0ZXIgfD0gMjsgICAgICAgICAgLy8gYmEgcG9saWN5ID0gMQorICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIGJhX3BhcmFtZXRlcik7CisgICAgb2Zmc2V0Kz0yOworICAgIC8qCisgICAgICogQkEgdGltZW91dCB2YWx1ZQorICAgICAqLworICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIDApOworICAgIG9mZnNldCs9MjsKKyAgICAvKgorICAgICAqIEJBIHN0YXJ0aW5nIHNlcXVlbmNlIG51bWJlcgorICAgICAqIKJ6oneid6J3oneid6J3oneid6J3oneid6J3oneic6J3oneid6J3oneid6J3oneid6J3oneid6J3oneid6J3oneid6J3oneid6J7CisgICAgICogonggQjAgICAgICAgQjMgonggQjQgICAgICAgICAgICAgIEIxNSCieAorICAgICAqIKJ1oneid6J3oneid6J3oneid6J3oneid6J3oneicaJ3oneid6J3oneid6J3oneid6J3oneid6J3oneid6J3oneid6J3oneid6J0CisgICAgICogonggRnJhZyBudW0oMCkgonggQkEgc3RhcnRpbmcgc2VxIG51bSCieAorICAgICAqIKJ8oneid6J3oneid6J3oneid6J3oneid6J3oneicqJ3oneid6J3oneid6J3oneid6J3oneid6J3oneid6J3oneid6J3oneid6J9CisgICAgICovCisgICAgc3RhcnRfc2VxID0gKCh3ZC0+c2VxW2FjXSkgPDwgNCkgJiAweEZGRjA7CisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgc3RhcnRfc2VxKTsKKyAgICBvZmZzZXQrPTI7CisKKyAgICByZXR1cm4gb2Zmc2V0OworfQorCit1MTZfdCB6ZkFnZ0dlbkFkZGJhSGVhZGVyKHpkZXZfdCogZGV2LCB1MTZfdCogZHN0LAorICAgICAgICB1MTZfdCogaGVhZGVyLCB1MTZfdCBsZW4sIHpidWZfdCogYnVmLCB1MTZfdCB2YXAsIHU4X3QgZW5jcnlwdCkKK3sKKyAgICB1OF90ICBobGVuID0gMzI7ICAgICAgICAvLyBNQUMgY3RybCArIFBIWSBjdHJsICsgODAyLjExIE1NIGhlYWRlcgorICAgIC8vdThfdCBmcmFtZVR5cGUgPSBaTV9XTEFOX0ZSQU1FX1RZUEVfQUNUSU9OOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIC8qCisgICAgICogR2VuZXJhdGUgY29udHJvbCBzZXR0aW5nCisgICAgICovCisgICAgLy9ib2R5TGVuID0gemZ3QnVmR2V0U2l6ZShkZXYsIGJ1Zik7CisgICAgaGVhZGVyWzBdID0gMjQrbGVuKzQ7ICAgLy9MZW5ndGgKKyAgICBoZWFkZXJbMV0gPSAweDg7ICAgICAgICAvL01BQyBjb250cm9sLCBiYWNrb2ZmICsgKGFjaykKKworI2lmIDAKKyAgICAvKiBDQ0sgMU0gKi8KKyAgICBoZWFkZXJbMl0gPSAweDBmMDA7ICAgICAgICAgIC8vUEhZIGNvbnRyb2wgTAorICAgIGhlYWRlclszXSA9IDB4MDAwMDsgICAgICAgICAgLy9QSFkgY29udHJvbCBICisjZWxzZQorICAgIC8qIE9GRE0gNk0gKi8KKyAgICBoZWFkZXJbMl0gPSAweDBmMDE7ICAgICAgICAgIC8vUEhZIGNvbnRyb2wgTAorICAgIGhlYWRlclszXSA9IDB4MDAwQjsgICAgICAgICAgLy9QSFkgY29udHJvbCBICisjZW5kaWYKKworICAgIC8qCisgICAgICogR2VuZXJhdGUgV0xBTiBoZWFkZXIKKyAgICAgKiBGcmFtZSBjb250cm9sIGZyYW1lIHR5cGUgYW5kIHN1YnR5cGUKKyAgICAgKi8KKyAgICBoZWFkZXJbNCswXSA9IFpNX1dMQU5fRlJBTUVfVFlQRV9BQ1RJT047CisgICAgLyoKKyAgICAgKiBEdXJhdGlvbgorICAgICAqLworICAgIGhlYWRlcls0KzFdID0gMDsKKworICAgIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSkKKyAgICB7CisgICAgICAgIGhlYWRlcls0KzhdID0gd2QtPnN0YS5ic3NpZFswXTsKKyAgICAgICAgaGVhZGVyWzQrOV0gPSB3ZC0+c3RhLmJzc2lkWzFdOworICAgICAgICBoZWFkZXJbNCsxMF0gPSB3ZC0+c3RhLmJzc2lkWzJdOworICAgIH0KKyAgICBlbHNlIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9QU0VVRE8pCisgICAgeworICAgICAgICAvKiBBZGRyZXNzIDMgPSAwMDowMDowMDowMDowMDowMCAqLworICAgICAgICBoZWFkZXJbNCs4XSA9IDA7CisgICAgICAgIGhlYWRlcls0KzldID0gMDsKKyAgICAgICAgaGVhZGVyWzQrMTBdID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfSUJTUykKKyAgICB7CisgICAgICAgIGhlYWRlcls0KzhdID0gd2QtPnN0YS5ic3NpZFswXTsKKyAgICAgICAgaGVhZGVyWzQrOV0gPSB3ZC0+c3RhLmJzc2lkWzFdOworICAgICAgICBoZWFkZXJbNCsxMF0gPSB3ZC0+c3RhLmJzc2lkWzJdOworICAgIH0KKyAgICBlbHNlIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCkKKyAgICB7CisgICAgICAgIC8qIEFkZHJlc3MgMyA9IEJTU0lEICovCisgICAgICAgIGhlYWRlcls0KzhdID0gd2QtPm1hY0FkZHJbMF07CisgICAgICAgIGhlYWRlcls0KzldID0gd2QtPm1hY0FkZHJbMV07CisgICAgICAgIGhlYWRlcls0KzEwXSA9IHdkLT5tYWNBZGRyWzJdICsgKHZhcDw8OCk7CisgICAgfQorCisgICAgLyogQWRkcmVzcyAxID0gREEgKi8KKyAgICBoZWFkZXJbNCsyXSA9IGRzdFswXTsKKyAgICBoZWFkZXJbNCszXSA9IGRzdFsxXTsKKyAgICBoZWFkZXJbNCs0XSA9IGRzdFsyXTsKKworICAgIC8qIEFkZHJlc3MgMiA9IFNBICovCisgICAgaGVhZGVyWzQrNV0gPSB3ZC0+bWFjQWRkclswXTsKKyAgICBoZWFkZXJbNCs2XSA9IHdkLT5tYWNBZGRyWzFdOworICAgIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCkKKyAgICB7CisgICAgICAgIGhlYWRlcls0KzddID0gd2QtPm1hY0FkZHJbMl0gKyAodmFwPDw4KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaGVhZGVyWzQrN10gPSB3ZC0+bWFjQWRkclsyXTsKKyAgICB9CisKKyAgICAvKiBTZXF1ZW5jZSBDb250cm9sICovCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICBoZWFkZXJbNCsxMV0gPSAoKHdkLT5tbXNlcSsrKTw8NCk7CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworCisgICAgcmV0dXJuIGhsZW47Cit9CisKKwordTE2X3QgICB6ZkFnZ1Byb2Nlc3NBY3Rpb24oemRldl90KiBkZXYsIHpidWZfdCogYnVmKQoreworICAgIHUxNl90IGNhdGVnb3J5OworCisgICAgLy96bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvL3ptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICBjYXRlZ29yeSA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDI0KTsKKworICAgIHN3aXRjaCAoY2F0ZWdvcnkpCisgICAgeworICAgIGNhc2UgWk1fV0xBTl9CTE9DS19BQ0tfQUNUSU9OX0ZSQU1FOgorICAgICAgICB6ZkFnZ0Jsb2NrQWNrQWN0aW9uRnJhbWUoZGV2LCBidWYpOworICAgICAgICBicmVhazsKKworICAgIH0KKworICAgIHJldHVybiBaTV9TVUNDRVNTOworfQorCisKK3UxNl90ICAgemZBZ2dCbG9ja0Fja0FjdGlvbkZyYW1lKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZikKK3sKKyAgICB1OF90IGFjdGlvbjsKKworICAgIC8vem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLy96bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgYWN0aW9uID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMjUpOworI2lmZGVmIFpNX0VOQUJMRV9BR0dSRUdBVElPTgorICAgIHN3aXRjaCAoYWN0aW9uKQorICAgIHsKKyAgICBjYXNlIFpNX1dMQU5fQUREQkFfUkVRVUVTVF9GUkFNRToKKyAgICAgICAgem1fbXNnMF9hZ2coWk1fTFZfMCwgIlJlY2VpdmVkIEJBIEFjdGlvbiBmcmFtZSBpcyBBRERCQSByZXF1ZXN0Iik7CisgICAgICAgIHpmQWdnUmVjdkFkZGJhUmVxdWVzdChkZXYsIGJ1Zik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWk1fV0xBTl9BRERCQV9SRVNQT05TRV9GUkFNRToKKyAgICAgICAgem1fbXNnMF9hZ2coWk1fTFZfMCwgIlJlY2VpdmVkIEJBIEFjdGlvbiBmcmFtZSBpcyBBRERCQSByZXNwb25zZSIpOworICAgICAgICB6ZkFnZ1JlY3ZBZGRiYVJlc3BvbnNlKGRldiwgYnVmKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBaTV9XTEFOX0RFTEJBX0ZSQU1FOgorICAgICAgICB6ZkFnZ1JlY3ZEZWxiYShkZXYsIGJ1Zik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBaTV9TVUNDRVNTOworfQorCit1MTZfdCAgIHpmQWdnUmVjdkFkZGJhUmVxdWVzdCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgLy91MTZfdCBkaWFsb2c7CisgICAgc3RydWN0IGFnZ0JhRnJhbWVQYXJhbWV0ZXIgYmY7CisgICAgdTE2X3QgaTsKKyAgICAvL3ptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8vem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIGJmLmJ1ZiA9IGJ1ZjsKKyAgICBiZi5kaWFsb2cgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAyNik7CisgICAgLyoKKyAgICAgKiBiYSBwYXJhbWV0ZXIgc2V0CisgICAgICovCisgICAgYmYuYmFfcGFyYW1ldGVyID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMjcpOworICAgIGJmLmJhX3BvbGljeSAgID0gKGJmLmJhX3BhcmFtZXRlciA+PiAxKSAmIDE7CisgICAgYmYudGlkICAgICAgICAgPSAoYmYuYmFfcGFyYW1ldGVyID4+IDIpICYgMHhGOworICAgIGJmLmJ1ZmZlcl9zaXplID0gKGJmLmJhX3BhcmFtZXRlciA+PiA2KTsKKyAgICAvKgorICAgICAqIEJBIHRpbWVvdXQgdmFsdWUKKyAgICAgKi8KKyAgICBiZi5iYV90aW1lb3V0ID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMjkpOworICAgIC8qCisgICAgICogQkEgc3RhcnRpbmcgc2VxdWVuY2UgbnVtYmVyCisgICAgICovCisgICAgYmYuYmFfc3RhcnRfc2VxID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMzEpID4+IDQ7CisKKyAgICBpPTI2OworICAgIHdoaWxlKGkgPCAzMikgeworICAgICAgICB6bV9kZWJ1Z19tc2cyKCJSZWN2IEFEREJBIFJlcToiLCB6bXdfcnhfYnVmX3JlYWRiKGRldixidWYsaSkpOworICAgICAgICBpKys7CisgICAgfQorCisgICAgemZBZ2dTZW5kQWRkYmFSZXNwb25zZShkZXYsICZiZik7CisKKyAgICB6ZkFnZ0FkZGJhU2V0VGlkUngoZGV2LCBidWYsICZiZik7CisKKyAgICByZXR1cm4gWk1fU1VDQ0VTUzsKK30KKwordTE2X3QgICB6ZkFnZ0FkZGJhU2V0VGlkUngoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCBzdHJ1Y3QgYWdnQmFGcmFtZVBhcmFtZXRlciAqYmYpCit7CisgICAgdTE2X3QgaSwgYWMsIGFpZCwgZnJhZ09mZjsKKyAgICB1MTZfdCBzcmNbM107CisgICAgdTE2X3Qgb2Zmc2V0ID0gMDsKKyAgICB1OF90ICB1cDsKKyAgICBzdHJ1Y3QgYWdnX3RpZF9yeCAqdGlkX3J4ID0gTlVMTDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICBzcmNbMF0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBvZmZzZXQrMTApOworICAgIHNyY1sxXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIG9mZnNldCsxMik7CisgICAgc3JjWzJdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1Ziwgb2Zmc2V0KzE0KTsKKyAgICBhaWQgPSB6ZkFwRmluZFN0YShkZXYsIHNyYyk7CisKKyAgICB6ZlR4R2V0SXBUb3NBbmRGcmFnKGRldiwgYnVmLCAmdXAsICZmcmFnT2ZmKTsKKyAgICBhYyA9IHpjVXBUb0FjW3VwJjB4N10gJiAweDM7CisKKyAgICBhYyA9IGJmLT50aWQ7CisKKyAgICBmb3IgKGk9MDsgaTxaTV9BR0dfUE9PTF9TSVpFIDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYoKHdkLT50aWRfcnhbaV0tPmFpZCA9PSBhaWQpICYmICh3ZC0+dGlkX3J4W2ldLT5hYyA9PSBhYykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRpZF9yeCA9IHdkLT50aWRfcnhbaV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghdGlkX3J4KQorICAgIHsKKyAgICAgICAgZm9yIChpPTA7IGk8Wk1fQUdHX1BPT0xfU0laRTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2QtPnRpZF9yeFtpXS0+YWlkID09IFpNX01BWF9TVEFfU1VQUE9SVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0aWRfcnggPSB3ZC0+dGlkX3J4W2ldOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghdGlkX3J4KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHRpZF9yeC0+YWlkID0gYWlkOworICAgIHRpZF9yeC0+YWMgPSBhYzsKKyAgICB0aWRfcngtPmFkZEJhRXhjaGFuZ2VTdGF0dXNDb2RlID0gWk1fQUdHX0FEREJBX1JFU1BPTlNFOworICAgIHRpZF9yeC0+c2VxX3N0YXJ0ID0gYmYtPmJhX3N0YXJ0X3NlcTsKKyAgICB0aWRfcngtPmJhd19oZWFkID0gdGlkX3J4LT5iYXdfdGFpbCA9IDA7CisgICAgdGlkX3J4LT5zcV9leGNlZWRfY291bnQgPSB0aWRfcngtPnNxX2JlaGluZF9jb3VudCA9IDA7CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHJldHVybiAwOworfQorCit1MTZfdCAgIHpmQWdnUmVjdkFkZGJhUmVzcG9uc2UoemRldl90KiBkZXYsIHpidWZfdCogYnVmKQoreworICAgIHUxNl90IGksYWMsIGFpZD0wOworICAgIHUxNl90IHNyY1szXTsKKyAgICBzdHJ1Y3QgYWdnQmFGcmFtZVBhcmFtZXRlciBiZjsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8vem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHNyY1swXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDEwKTsKKyAgICBzcmNbMV0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAxMik7CisgICAgc3JjWzJdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMTQpOworCisgICAgaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKQorICAgICAgICBhaWQgPSB6ZkFwRmluZFN0YShkZXYsIHNyYyk7CisKKworICAgIGJmLmJ1ZiA9IGJ1ZjsKKyAgICBiZi5kaWFsb2cgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAyNik7CisgICAgYmYuc3RhdHVzX2NvZGUgPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAyNyk7CisgICAgaWYgKCFiZi5zdGF0dXNfY29kZSkKKyAgICB7CisgICAgICAgIHdkLT5hZGRiYUNvbXBsZXRlPTE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBiYSBwYXJhbWV0ZXIgc2V0CisgICAgICovCisgICAgYmYuYmFfcGFyYW1ldGVyID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMjkpOworICAgIGJmLmJhX3BvbGljeSAgID0gKGJmLmJhX3BhcmFtZXRlciA+PiAxKSAmIDE7CisgICAgYmYudGlkICAgICAgICAgPSAoYmYuYmFfcGFyYW1ldGVyID4+IDIpICYgMHhGOworICAgIGJmLmJ1ZmZlcl9zaXplID0gKGJmLmJhX3BhcmFtZXRlciA+PiA2KTsKKyAgICAvKgorICAgICAqIEJBIHRpbWVvdXQgdmFsdWUKKyAgICAgKi8KKyAgICBiZi5iYV90aW1lb3V0ID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMzEpOworCisgICAgaT0yNjsKKyAgICB3aGlsZShpIDwgMzIpIHsKKyAgICAgICAgem1fZGVidWdfbXNnMigiUmVjdiBBRERCQSBSc3A6Iiwgem13X3J4X2J1Zl9yZWFkYihkZXYsYnVmLGkpKTsKKyAgICAgICAgaSsrOworICAgIH0KKworICAgIGFjID0gemNVcFRvQWNbYmYudGlkJjB4N10gJiAweDM7CisKKyAgICAvL3ptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAvL3dkLT5hZ2dTdGFbYWlkXS5hZ2dGbGFnW2FjXSA9IDA7CisKKyAgICAvL3ptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICByZXR1cm4gWk1fU1VDQ0VTUzsKK30KKwordTE2X3QgICB6ZkFnZ1JlY3ZEZWxiYSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgLy96bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvL3ptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisgICAgcmV0dXJuIFpNX1NVQ0NFU1M7Cit9CisKK3UxNl90ICAgemZBZ2dTZW5kQWRkYmFSZXNwb25zZSh6ZGV2X3QqIGRldiwgc3RydWN0IGFnZ0JhRnJhbWVQYXJhbWV0ZXIgKmJmKQoreworICAgIHpidWZfdCogYnVmOworICAgIC8vdTE2X3QgYWRkclRibFNpemU7CisgICAgLy9zdHJ1Y3QgenNBZGRyVGJsIGFkZHJUYmw7CisgICAgLy91MTZfdCBlcnI7CisgICAgdTE2X3Qgb2Zmc2V0ID0gMDsKKyAgICB1MTZfdCBobGVuID0gMzI7CisgICAgdTE2X3QgaGVhZGVyWygyNCsyNSsxKS8yXTsKKyAgICB1MTZfdCB2YXAgPSAwOworICAgIHUxNl90IGk7CisgICAgdThfdCBlbmNyeXB0ID0gMDsKKyAgICB1MTZfdCBkc3RbM107CisKKyAgICAvL3ptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8vem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworCisgICAgLyoKKyAgICAgKiBUQkQgOiBNYXhpbXVtIHNpemUgb2YgbWFuYWdtZW50IGZyYW1lCisgICAgICovCisgICAgaWYgKChidWYgPSB6ZndCdWZBbGxvY2F0ZShkZXYsIDEwMjQpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgem1fbXNnMF9tbShaTV9MVl8wLCAiQWxsb2MgbW0gYnVmIEZhaWwhIik7CisgICAgICAgIHJldHVybiBaTV9TVUNDRVNTOworICAgIH0KKworICAgIC8qCisgICAgICogUmVzZXJ2ZSByb29tIGZvciB3bGFuIGhlYWRlcgorICAgICAqLworICAgIG9mZnNldCA9IGhsZW47CisKKyAgICAvKgorICAgICAqIGFkZCBhZGRiYSBmcmFtZSBib2R5CisgICAgICovCisgICAgb2Zmc2V0ID0gemZBZ2dTZXRBZGRiYVJlc3BvbnNlRnJhbWVCb2R5KGRldiwgYnVmLCBiZiwgb2Zmc2V0KTsKKworCisgICAgemZ3QnVmU2V0U2l6ZShkZXYsIGJ1Ziwgb2Zmc2V0KTsKKworICAgIC8qCisgICAgICogQ29weSB3bGFuIGhlYWRlcgorICAgICAqLworCisgICAgZHN0WzBdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJmLT5idWYsIDEwKTsKKyAgICBkc3RbMV0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYmYtPmJ1ZiwgMTIpOworICAgIGRzdFsyXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBiZi0+YnVmLCAxNCk7CisgICAgemZBZ2dHZW5BZGRiYUhlYWRlcihkZXYsIGRzdCwgaGVhZGVyLCBvZmZzZXQtaGxlbiwgYnVmLCB2YXAsIGVuY3J5cHQpOworICAgIGZvciAoaT0wOyBpPChobGVuPj4xKTsgaSsrKQorICAgIHsKKyAgICAgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIGkqMiwgaGVhZGVyW2ldKTsKKyAgICB9CisKKyAgICAvKiBHZXQgYnVmZmVyIERNQSBhZGRyZXNzICovCisgICAgLy9pZiAoKGFkZHJUYmxTaXplID0gemZ3QnVmTWFwRG1hKGRldiwgYnVmLCAmYWRkclRibCkpID09IDApCisgICAgLy9pZiAoKGFkZHJUYmxTaXplID0gemZ3TWFwVHhEbWEoZGV2LCBidWYsICZhZGRyVGJsKSkgPT0gMCkKKyAgICAvL3sKKyAgICAvLyAgICBnb3RvIHpsRXJyb3I7CisgICAgLy99CisKKyAgICAvL3ptX21zZzJfbW0oWk1fTFZfMiwgIm9mZnNldD0iLCBvZmZzZXQpOworICAgIC8vem1fbXNnMl9tbShaTV9MVl8yLCAiaGxlbj0iLCBobGVuKTsKKyAgICAvL3ptX21zZzJfbW0oWk1fTFZfMiwgImFkZHJUYmxTaXplPSIsIGFkZHJUYmxTaXplKTsKKyAgICAvL3ptX21zZzJfbW0oWk1fTFZfMiwgImFkZHJUYmwubGVuWzBdPSIsIGFkZHJUYmwubGVuWzBdKTsKKyAgICAvL3ptX21zZzJfbW0oWk1fTFZfMiwgImFkZHJUYmwucGh5c0FkZHJsWzBdPSIsIGFkZHJUYmwucGh5c0FkZHJsWzBdKTsKKyAgICAvL3ptX21zZzJfbW0oWk1fTFZfMiwgImJ1Zi0+ZGF0YT0iLCBidWYtPmRhdGEpOworCisgICAgI2lmIDAKKyAgICBpZiAoKGVyciA9IHpmSHBTZW5kKGRldiwgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCwgMCwgYnVmLCAwLAorICAgICAgICAgICAgWk1fSU5URVJOQUxfQUxMT0NfQlVGLCAwLCAweGZmKSkgIT0gWk1fU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGdvdG8gemxFcnJvcjsKKyAgICB9CisgICAgI2Vsc2UKKyAgICB6ZlB1dFZtbXEoZGV2LCBidWYpOworICAgIHpmUHVzaFZ0eHEoZGV2KTsKKyAgICAjZW5kaWYKKworICAgIC8vemZBZ2dTZW5kQWRkYmFSZXF1ZXN0KGRldiwgZHN0LCB6Y1VwVG9BY1tiZi0+dGlkJjB4N10gJiAweDMsIGJmLT50aWQpOworICAgIHJldHVybiBaTV9TVUNDRVNTOworCit9CisKK3UxNl90ICAgemZBZ2dTZXRBZGRiYVJlc3BvbnNlRnJhbWVCb2R5KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgYWdnQmFGcmFtZVBhcmFtZXRlciAqYmYsIHUxNl90IG9mZnNldCkKK3sKKworICAgIC8vem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLy96bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworICAgIC8qCisgICAgICogQUREQkEgUmVxdWVzdCBmcmFtZSBib2R5CisgICAgICovCisKKyAgICAvKgorICAgICAqIENhdGVnb3J5CisgICAgICovCisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCAzKTsKKyAgICAvKgorICAgICAqIEFjdGlvbiBkZXRhaWxzID0gMAorICAgICAqLworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgWk1fV0xBTl9BRERCQV9SRVNQT05TRV9GUkFNRSk7CisgICAgLyoKKyAgICAgKiBEaWFsb2cgVG9rZW4gPSBub256ZXJvCisgICAgICovCisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCBiZi0+ZGlhbG9nKTsKKyAgICAvKgorICAgICAqIFN0YXR1cyBjb2RlCisgICAgICovCisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgMCk7CisgICAgb2Zmc2V0Kz0yOworICAgIC8qCisgICAgICogQmxvY2sgQWNrIHBhcmFtZXRlciBzZXQKKyAgICAgKiBCQSBwb2xpY3kgPSAxIGZvciBpbW1lZGlhdGUgQkEsIDAgZm9yIGRlbGF5ZWQgQkEKKyAgICAgKiBUSUQoNGJpdHMpICYgYnVmZmVyIHNpemUoNGJpdHMpIChUSUQ9MHgxICYgYnVmZmVyIHNpemU9MHg4MCkKKyAgICAgKiBUQkQ6IGhvdyB0byBnZXQgVElEIG51bWJlciBhbmQgYnVmZmVyIHNpemU/CisgICAgICogonqid6J3oneid6J3oneid6J3oneid6Jzoneid6J3oneid6J3oneid6J3oneid6Jzoneid6J3oneid6J3oneid6Jzoneid6J3oneid6J3oneid6J3oneid6J3oneieworICAgICAqIKJ4ICAgIEIwICAgIKJ4ICAgIEIxICAgICCieCBCMiAgQjUgonggQjYgICAgICBCMTUgongKKyAgICAgKiCidaJ3oneid6J3oneid6J3oneid6J3onGid6J3oneid6J3oneid6J3oneid6J3onGid6J3oneid6J3oneid6J3onGid6J3oneid6J3oneid6J3oneid6J3oneid6J0CisgICAgICogonggUmVzZXJ2ZWQgonggQkEgcG9saWN5IKJ4ICBUSUQgICCieCBCdWZmZXIgc2l6ZSCieAorICAgICAqIKJ8oneid6J3oneid6J3oneid6J3oneicqJ3oneid6J3oneid6J3oneid6J3oneicqJ3oneid6J3oneid6J3oneicqJ3oneid6J3oneid6J3oneid6J3oneid6J3on0KKyAgICAgKi8KKyAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0LCBiZi0+YmFfcGFyYW1ldGVyKTsKKyAgICBvZmZzZXQrPTI7CisgICAgLyoKKyAgICAgKiBCQSB0aW1lb3V0IHZhbHVlCisgICAgICovCisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgYmYtPmJhX3RpbWVvdXQpOworICAgIG9mZnNldCs9MjsKKworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKK3ZvaWQgICB6ZkFnZ0ludm9rZUJhcih6ZGV2X3QqIGRldiwgVElEX1RYIHRpZF90eCkKK3sKKyAgICBzdHJ1Y3QgYWdnQmFyQ29udHJvbCBhZ2dCYXJDb250cm9sOworICAgIC8vem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLy96bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworICAgIC8vYmFyX2NvbnRyb2wgPSBhZ2dCYXJDb250cm9sLT50aWRfaW5mbyA8PCAxMiB8IGFnZ0JhckNvbnRyb2wtPmNvbXByZXNzZWRfYml0bWFwIDw8IDIKKyAgICAvLyAgICAgICAgfCBhZ2dCYXJDb250cm9sLT5tdWx0aV90aWQgPDwgMSB8IGFnZ0JhckNvbnRyb2wtPmJhcl9hY2tfcG9saWN5OworICAgIGFnZ0JhckNvbnRyb2wuYmFyX2Fja19wb2xpY3kgPSAwOworICAgIGFnZ0JhckNvbnRyb2wubXVsdGlfdGlkID0gMDsKKyAgICBhZ2dCYXJDb250cm9sLmNvbXByZXNzZWRfYml0bWFwID0gMDsKKyAgICBhZ2dCYXJDb250cm9sLnRpZF9pbmZvID0gdGlkX3R4LT50aWQ7CisgICAgemZBZ2dTZW5kQmFyKGRldiwgdGlkX3R4LCAmYWdnQmFyQ29udHJvbCk7CisKKyAgICByZXR1cm47CisKK30KKy8qCisgKiB6ZkFnZ1NlbmRCYXIoKSByZWZlcnMgemZBZ2dTZW5kQWRkYmFSZXF1ZXN0KCkKKyAqLwordTE2X3QgICB6ZkFnZ1NlbmRCYXIoemRldl90KiBkZXYsIFRJRF9UWCB0aWRfdHgsIHN0cnVjdCBhZ2dCYXJDb250cm9sICphZ2dCYXJDb250cm9sKQoreworICAgIHpidWZfdCogYnVmOworICAgIC8vdTE2X3QgYWRkclRibFNpemU7CisgICAgLy9zdHJ1Y3QgenNBZGRyVGJsIGFkZHJUYmw7CisgICAgLy91MTZfdCBlcnI7CisgICAgdTE2X3Qgb2Zmc2V0ID0gMDsKKyAgICB1MTZfdCBobGVuID0gMTYrODsgIC8qIG1hYyBoZWFkZXIgKyBjb250cm9sIGhlYWRlcnMqLworICAgIHUxNl90IGhlYWRlclsoOCsyNCsxKS8yXTsKKyAgICB1MTZfdCB2YXAgPSAwOworICAgIHUxNl90IGk7CisgICAgdThfdCBlbmNyeXB0ID0gMDsKKworICAgIC8vem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLy96bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisKKyAgICAvKgorICAgICAqIFRCRCA6IE1heGltdW0gc2l6ZSBvZiBtYW5hZ21lbnQgZnJhbWUKKyAgICAgKi8KKyAgICBpZiAoKGJ1ZiA9IHpmd0J1ZkFsbG9jYXRlKGRldiwgMTAyNCkpID09IE5VTEwpCisgICAgeworICAgICAgICB6bV9tc2cwX21tKFpNX0xWXzAsICJBbGxvYyBtbSBidWYgRmFpbCEiKTsKKyAgICAgICAgcmV0dXJuIFpNX1NVQ0NFU1M7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBSZXNlcnZlIHJvb20gZm9yIHdsYW4gaGVhZGVyCisgICAgICovCisgICAgb2Zmc2V0ID0gaGxlbjsKKworICAgIC8qCisgICAgICogYWRkIGFkZGJhIGZyYW1lIGJvZHkKKyAgICAgKi8KKyAgICBvZmZzZXQgPSB6ZkFnZ1NldEJhckJvZHkoZGV2LCBidWYsIG9mZnNldCwgdGlkX3R4LCBhZ2dCYXJDb250cm9sKTsKKworCisgICAgemZ3QnVmU2V0U2l6ZShkZXYsIGJ1Ziwgb2Zmc2V0KTsKKworICAgIC8qCisgICAgICogQ29weSB3bGFuIGhlYWRlcgorICAgICAqLworICAgIHpmQWdnR2VuQmFySGVhZGVyKGRldiwgdGlkX3R4LT5kc3QsIGhlYWRlciwgb2Zmc2V0LWhsZW4sIGJ1ZiwgdmFwLCBlbmNyeXB0KTsKKyAgICBmb3IgKGk9MDsgaTwoaGxlbj4+MSk7IGkrKykKKyAgICB7CisgICAgICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBpKjIsIGhlYWRlcltpXSk7CisgICAgfQorCisgICAgLyogR2V0IGJ1ZmZlciBETUEgYWRkcmVzcyAqLworICAgIC8vaWYgKChhZGRyVGJsU2l6ZSA9IHpmd0J1Zk1hcERtYShkZXYsIGJ1ZiwgJmFkZHJUYmwpKSA9PSAwKQorICAgIC8vaWYgKChhZGRyVGJsU2l6ZSA9IHpmd01hcFR4RG1hKGRldiwgYnVmLCAmYWRkclRibCkpID09IDApCisgICAgLy97CisgICAgLy8gICAgZ290byB6bEVycm9yOworICAgIC8vfQorCisgICAgLy96bV9tc2cyX21tKFpNX0xWXzIsICJvZmZzZXQ9Iiwgb2Zmc2V0KTsKKyAgICAvL3ptX21zZzJfbW0oWk1fTFZfMiwgImhsZW49IiwgaGxlbik7CisgICAgLy96bV9tc2cyX21tKFpNX0xWXzIsICJhZGRyVGJsU2l6ZT0iLCBhZGRyVGJsU2l6ZSk7CisgICAgLy96bV9tc2cyX21tKFpNX0xWXzIsICJhZGRyVGJsLmxlblswXT0iLCBhZGRyVGJsLmxlblswXSk7CisgICAgLy96bV9tc2cyX21tKFpNX0xWXzIsICJhZGRyVGJsLnBoeXNBZGRybFswXT0iLCBhZGRyVGJsLnBoeXNBZGRybFswXSk7CisgICAgLy96bV9tc2cyX21tKFpNX0xWXzIsICJidWYtPmRhdGE9IiwgYnVmLT5kYXRhKTsKKworICAgICNpZiAwCisgICAgaWYgKChlcnIgPSB6ZkhwU2VuZChkZXYsIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwsIDAsIGJ1ZiwgMCwKKyAgICAgICAgICAgIFpNX0lOVEVSTkFMX0FMTE9DX0JVRiwgMCwgMHhmZikpICE9IFpNX1NVQ0NFU1MpCisgICAgeworICAgICAgICBnb3RvIHpsRXJyb3I7CisgICAgfQorICAgICNlbHNlCisgICAgemZQdXRWbW1xKGRldiwgYnVmKTsKKyAgICB6ZlB1c2hWdHhxKGRldik7CisgICAgI2VuZGlmCisKKyAgICByZXR1cm4gWk1fU1VDQ0VTUzsKKworfQorCit1MTZfdCAgIHpmQWdnU2V0QmFyQm9keSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCwgVElEX1RYIHRpZF90eCwgc3RydWN0IGFnZ0JhckNvbnRyb2wgKmFnZ0JhckNvbnRyb2wpCit7CisgICAgdTE2X3QgYmFyX2NvbnRyb2wsIHN0YXJ0X3NlcTsKKworICAgIC8vem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLy96bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworICAgIC8qCisgICAgICogQkFSIENvbnRyb2wgZnJhbWUgYm9keQorICAgICAqLworCisgICAgLyoKKyAgICAgKiBCQVIgQ29udHJvbCBGaWVsZAorICAgICAqIKJ6oneid6J3oneid6J3oneid6J3onOid6J3oneid6J3oneid6J3oneid6J3onOid6J3oneid6J3oneid6J3oneid6J3oneic6J3oneid6J3oneid6J3oneid6J3onOid6J3oneid6J3oneid6J3oneid6J7CisgICAgICogonggICAgQjAgICCieCAgICBCMSAgICAgonggICAgIEIyICAgICCieCBCMyAgIEIxMSCieCBCMTIgIEIxNSCieAorICAgICAqIKJ1oneid6J3oneid6J3oneid6J3onGid6J3oneid6J3oneid6J3oneid6J3onGid6J3oneid6J3oneid6J3oneid6J3oneicaJ3oneid6J3oneid6J3oneid6J3onGid6J3oneid6J3oneid6J3oneid6J0CisgICAgICogonggQkFSIEFjayCieCBNdWx0aS1USUQgonggQ29tcHJlc3NlZCCieCBSZXNlcnZlZCCieCBUSURfSU5GTyCieAorICAgICAqIKJ4ICBQb2xpY3kgonggICAgICAgICAgIKJ4ICAgQml0bWFwICAgonggICAgICAgICAgonggICAgICAgICAgongKKyAgICAgKiCifKJ3oneid6J3oneid6J3oneid6Jyoneid6J3oneid6J3oneid6J3oneid6Jyoneid6J3oneid6J3oneid6J3oneid6J3onKid6J3oneid6J3oneid6J3oneid6Jyoneid6J3oneid6J3oneid6J3oneifQorICAgICAqLworICAgIGJhcl9jb250cm9sID0gYWdnQmFyQ29udHJvbC0+dGlkX2luZm8gPDwgMTIgfCBhZ2dCYXJDb250cm9sLT5jb21wcmVzc2VkX2JpdG1hcCA8PCAyCisgICAgICAgICAgICB8IGFnZ0JhckNvbnRyb2wtPm11bHRpX3RpZCA8PCAxIHwgYWdnQmFyQ29udHJvbC0+YmFyX2Fja19wb2xpY3k7CisKKyAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0LCBiYXJfY29udHJvbCk7CisgICAgb2Zmc2V0Kz0yOworICAgIGlmICgwID09IGFnZ0JhckNvbnRyb2wtPm11bHRpX3RpZCkgeworICAgICAgICAvKgorICAgICAgICAgKiBCQSBzdGFydGluZyBzZXF1ZW5jZSBudW1iZXIKKyAgICAgICAgICogonqid6J3oneid6J3oneid6J3oneid6J3oneid6Jzoneid6J3oneid6J3oneid6J3oneid6J3oneid6J3oneid6J3oneid6J3onsKKyAgICAgICAgICogonggQjAgICAgICAgQjMgonggQjQgICAgICAgICAgICAgIEIxNSCieAorICAgICAgICAgKiCidaJ3oneid6J3oneid6J3oneid6J3oneid6J3onGid6J3oneid6J3oneid6J3oneid6J3oneid6J3oneid6J3oneid6J3oneidAorICAgICAgICAgKiCieCBGcmFnIG51bSgwKSCieCBCQSBzdGFydGluZyBzZXEgbnVtIKJ4CisgICAgICAgICAqIKJ8oneid6J3oneid6J3oneid6J3oneid6J3oneicqJ3oneid6J3oneid6J3oneid6J3oneid6J3oneid6J3oneid6J3oneid6J9CisgICAgICAgICAqLworICAgICAgICBzdGFydF9zZXEgPSAodGlkX3R4LT5iYXJfc3NuIDw8IDQpICYgMHhGRkYwOworICAgICAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0LCBzdGFydF9zZXEpOworICAgICAgICBvZmZzZXQrPTI7CisgICAgfQorICAgIGlmICgxID09IGFnZ0JhckNvbnRyb2wtPm11bHRpX3RpZCAmJiAxID09IGFnZ0JhckNvbnRyb2wtPmNvbXByZXNzZWRfYml0bWFwKSB7CisgICAgICAgIC8qIG11bHRpLXRpZCBCbG9ja0Fja1JlcSB2YXJpYW50LCBub3QgaW1wbGVtZW50ZWQqLworICAgIH0KKworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKK3UxNl90IHpmQWdnR2VuQmFySGVhZGVyKHpkZXZfdCogZGV2LCB1MTZfdCogZHN0LAorICAgICAgICB1MTZfdCogaGVhZGVyLCB1MTZfdCBsZW4sIHpidWZfdCogYnVmLCB1MTZfdCB2YXAsIHU4X3QgZW5jcnlwdCkKK3sKKyAgICB1OF90ICBobGVuID0gMTYrODsgICAgICAgIC8vIE1BQyBjdHJsICsgUEhZIGN0cmwgKyA4MDIuMTEgTU0gaGVhZGVyCisgICAgLy91OF90IGZyYW1lVHlwZSA9IFpNX1dMQU5fRlJBTUVfVFlQRV9BQ1RJT047CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgLyoKKyAgICAgKiBHZW5lcmF0ZSBjb250cm9sIHNldHRpbmcKKyAgICAgKi8KKyAgICAvL2JvZHlMZW4gPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsKKyAgICBoZWFkZXJbMF0gPSAxNitsZW4rNDsgICAvL0xlbmd0aAorICAgIGhlYWRlclsxXSA9IDB4ODsgICAgICAgIC8vTUFDIGNvbnRyb2wsIGJhY2tvZmYgKyAoYWNrKQorCisjaWYgMQorICAgIC8qIENDSyAxTSAqLworICAgIGhlYWRlclsyXSA9IDB4MGYwMDsgICAgICAgICAgLy9QSFkgY29udHJvbCBMCisgICAgaGVhZGVyWzNdID0gMHgwMDAwOyAgICAgICAgICAvL1BIWSBjb250cm9sIEgKKyNlbHNlCisgICAgLyogQ0NLIDZNICovCisgICAgaGVhZGVyWzJdID0gMHgwZjAxOyAgICAgICAgICAvL1BIWSBjb250cm9sIEwKKyAgICBoZWFkZXJbM10gPSAweDAwMEI7ICAgICAgICAgIC8vUEhZIGNvbnRyb2wgSAorCisjZW5kaWYKKyAgICAvKgorICAgICAqIEdlbmVyYXRlIFdMQU4gaGVhZGVyCisgICAgICogRnJhbWUgY29udHJvbCBmcmFtZSB0eXBlIGFuZCBzdWJ0eXBlCisgICAgICovCisgICAgaGVhZGVyWzQrMF0gPSBaTV9XTEFOX0ZSQU1FX1RZUEVfQkFSOworICAgIC8qCisgICAgICogRHVyYXRpb24KKyAgICAgKi8KKyAgICBoZWFkZXJbNCsxXSA9IDA7CisKKyAgICAvKiBBZGRyZXNzIDEgPSBEQSAqLworICAgIGhlYWRlcls0KzJdID0gZHN0WzBdOworICAgIGhlYWRlcls0KzNdID0gZHN0WzFdOworICAgIGhlYWRlcls0KzRdID0gZHN0WzJdOworCisgICAgLyogQWRkcmVzcyAyID0gU0EgKi8KKyAgICBoZWFkZXJbNCs1XSA9IHdkLT5tYWNBZGRyWzBdOworICAgIGhlYWRlcls0KzZdID0gd2QtPm1hY0FkZHJbMV07CisgICAgaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKQorICAgIHsKKyNpZmRlZiBaTV9WQVBNT0RFX01VTFRJTEVfU1NJRAorICAgICAgICBoZWFkZXJbNCs3XSA9IHdkLT5tYWNBZGRyWzJdOyAvL011bHRpcGxlIFNTSUQKKyNlbHNlCisgICAgICAgIGhlYWRlcls0KzddID0gd2QtPm1hY0FkZHJbMl0gKyAodmFwPDw4KTsgLy9WQVAKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBoZWFkZXJbNCs3XSA9IHdkLT5tYWNBZGRyWzJdOworICAgIH0KKworICAgIC8qIFNlcXVlbmNlIENvbnRyb2wgKi8KKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIGhlYWRlcls0KzExXSA9ICgod2QtPm1tc2VxKyspPDw0KTsKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisKKyAgICByZXR1cm4gaGxlbjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jYWdnLmggYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY2FnZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkODdhNTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY2FnZy5oCkBAIC0wLDAgKzEsNDM1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE1vZHVsZSBOYW1lIDogY2FnZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBBYnN0cmFjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBUaGlzIG1vZHVsZSBjb250YWlucyBBLU1QRFUgYWdncmVnYXRpb24gcmVsYXRpdmVkIGZ1bmN0aW9ucy4gICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBOT1RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLypSZXZpc2lvbiBIaXN0b3J5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBXaG8gICAgICAgICBXaGVuICAgICAgICBXaGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIC0tLS0tLS0tICAgIC0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBIb25kYSAgICAgICAxMi00LTA2ICAgICBjcmVhdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0NBR0dfSAorI2RlZmluZSBfQ0FHR19ICisKKworLyoKKyAqIHRoZSBhZ2dyZWdhdGlvbiBmdW5jdGlvbnMgZmxhZywgMCBpZiBkb24ndCBkbyBhZ2dyZWdhdGUKKyAqLworCisjZGVmaW5lIFpNX0FHR19GUEdBX0RFQlVHICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgWk1fQUdHX0ZQR0FfUkVPUkRFUklORyAgICAgICAgICAgICAgMQorCisjaWZuZGVmIFpNX0FHR19UQUxMWQorLy8jZGVmaW5lIFpNX0FHR19UQUxMWQorI2VuZGlmCisvKgorICogQWdncmVnYXRlIGNvbnRyb2wKKyAqLworCisKKyNkZWZpbmUgWk1fQUdHX1BPT0xfU0laRSAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgWk1fQkFXX1BPT0xfU0laRSAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgWk1fQUdHUV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgWk1fQUdHUV9TSVpFX01BU0sgICAgICAgICAgICAgICAgICAgKFpNX0FHR1FfU0laRS0xKQorI2RlZmluZSBaTV9BR0dfTE9XX1RIUkVTSE9MRCAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFpNX0FHR19ISUdIX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDUKKworLyoKKyAqIG51bWJlciBvZiBhY2Nlc3MgY2F0ZWdvcmllcyAoYWMpCisgKi8KKyNkZWZpbmUgWk1fQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAorLyoKKyAqIHRoZSB0aW1lciB0byBjbGVhciBhZ2dyZWdhdGlvbiBxdWV1ZSwgdW5pdDogMSB0aWNrCisgKiBpZiB0aGUgcGFja2V0IGlzIHRvbyBvbGQgKGN1cnJlbnQgdGltZSAtIGFycml2YWwgdGltZSkKKyAqIHRoZSBwYWNrZXQgYW5kIHRoZSBhZ2dyZWdhdGUgcXVldWUgd2lsbCBiZSBjbGVhcmVkCisgKi8KKyNkZWZpbmUgWk1fQUdHX0NMRUFSX1RJTUUgICAgICAgICAgICAgICAgICAgMTAKKy8qCisgKiBkZWxldGUgdGhlIHF1ZXVlIGlmIGlkbGUgZm9yIFpNX0RFTEVURV9USU1FCisgKiB1bml0OiAxMG1zCisgKi8KKyNkZWZpbmUgWk1fQUdHX0RFTEVURV9USU1FICAgICAgICAgICAgICAgICAgMTAwMDAKKworLyoKKyAqIGJsb2NrIGFjayB3aW5kb3cgc2l6ZQorICovCisjZGVmaW5lIFpNX0FHR19CQVdfU0laRSAgICAgICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIFpNX0FHR19CQVdfTUFTSyAgICAgICAgICAgICAgICAgICAgIChaTV9BR0dfQkFXX1NJWkUtMSkKKy8qCisgKiBvcmlnaW5hdG9yICAgICBBRERCQSBSZXNxdWVzdCAgICByZWNlaXZlcgorICogICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+fAorICogICAgIDF8ICAgICAgICAgIEFDSyAgICAgICAgICAgICAgICAgfDEKKyAqICAgICAgfDwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAqICAgICAyfCAgICAgICAgIEFEREJBIFJlc3BvbnNlICAgICAgIHwyCisgKiAgICAgIHw8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgKiAgICAgM3wgICAgICAgICAgQUNLICAgICAgICAgICAgICAgICB8MworICogICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+fAorICogICAgIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyAqLworI2RlZmluZSBaTV9BR0dfQUREQkFfUkVRVUVTVCAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFpNX0FHR19BRERCQV9SRVFVRVNUX0FDSyAgICAgICAgICAgIDIKKyNkZWZpbmUgWk1fQUdHX0FEREJBX1JFU1BPTlNFICAgICAgICAgICAgICAgMworI2RlZmluZSBaTV9BR0dfQUREQkFfUkVTUE9OU0VfQUNLICAgICAgICAgICA0CisKKyNkZWZpbmUgWk1fQUdHX1NJTkdMRV9NUERVICAgICAgICAgICAgICAgICAgMDAKKyNkZWZpbmUgWk1fQUdHX0ZJUlNUX01QRFUgICAgICAgICAgICAgICAgICAgMDEKKyNkZWZpbmUgWk1fQUdHX01JRERMRV9NUERVICAgICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgWk1fQUdHX0xBU1RfTVBEVSAgICAgICAgICAgICAgICAgICAgMTAKKy8qCisgKiBlbmQgb2YgQWdncmVnYXRlIGNvbnRyb2wKKyAqLworCisjZGVmaW5lIFRJRF9UWCAgc3RydWN0IGFnZ1F1ZXVlKgorI2RlZmluZSBUSURfQkFXIHN0cnVjdCBiYXdfcSoKKyNkZWZpbmUgQkFXIHdkLT5iYXdfZW5hYmxlcgorI2RlZmluZSBERVNUUSB3ZC0+ZGVzdFEKKworLyoKKyAqIFF1ZXVlIGFjY2VzcworICovCisjZGVmaW5lIHptX2FnZ19xbGVuKGRldiwgaGVhZCwgdGFpbCkgKChoZWFkIC0gdGFpbCkgJiBaTV9BR0dRX1NJWkVfTUFTSykKKyNkZWZpbmUgem1fYWdnX2luUSh0aWRfdHgsIHB0KSAoKCgocHQgLSB0aWRfdHgtPmFnZ1RhaWwpICYgWk1fQUdHUV9TSVpFX01BU0spIDwgXAorICAgICAgICAoKHRpZF90eC0+YWdnSGVhZCAtIHRpZF90eC0+YWdnVGFpbCkgJiBaTV9BR0dRX1NJWkVfTUFTSykpPyBUUlVFOkZBTFNFKQorI2RlZmluZSB6bV9hZ2dfcGx1cyhwdCkgcHQgPSAocHQgKyAxKSAmIFpNX0FHR1FfU0laRV9NQVNLCisjZGVmaW5lIHptX2FnZ19taW4oQSwgQikgKChBPkIpPyBCOkEpCisjZGVmaW5lIHptX2FnZ19HZXRUaW1lKCkgd2QtPnRpY2sKKyNkZWZpbmUgVFhRTCAoemZIcEdldE1heFR4ZENvdW50KGRldikgLSB6ZkhwR2V0RnJlZVR4ZENvdW50KGRldikpCisKKy8qIGRvbid0IGNoYW5nZSBBR0dfTUlOX1RYUUwgZWFzaWx5LCB0aGlzIG1pZ2h0IGNhdXNlIEJBVyBCU09EICovCisjZGVmaW5lIEFHR19NSU5fVFhRTCAgICAgICAgICAgICAgICAgICAgICAgIDIKKy8qCisgKiBjb25zaWRlciB0Y3AsdWRwLGFjKDEyMzQpCisgKi8KKyNkZWZpbmUgem1fYWdnX2R5bmFtaWNfdGhyZXNob2xkKGRldiwgYXIpICAgKChhciA+IDE2KT8gMTE6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhciA+IDEyKT8gODogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyID4gOCk/IDU6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhciA+IDQpPyAyOjEpCisjZGVmaW5lIHptX2FnZ193ZWlnaHQoYWMpICAgKCgzID09IGFjKT8gNDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiA9PSBhYyk/IDM6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgPT0gYWMpPyAyOjEpCisvKgorICogdGhlIHJlcXVpcmVkIGZyZWUgcXVldWUgcmF0aW8gcGVyIGFjCisgKi8KKworI2RlZmluZSB6bV9hZ2dfcmF0aW8oYWMpICAgICgoMyA9PSBhYyk/IDM6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIgPT0gYWMpPyAoemZIcEdldE1heFR4ZENvdW50KGRldikqMS80KTogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCA9PSBhYyk/ICh6ZkhwR2V0TWF4VHhkQ291bnQoZGV2KSoyLzQpOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHpmSHBHZXRNYXhUeGRDb3VudChkZXYpKjMvNCkpCisKKy8vI2RlZmluZSB6bV9hZ2dfcmF0aW8oYWMpICAgIDMKKy8qCisgKiBlbmQgb2YgUXVldWUgYWNjZXNzCisgKi8KKworI2RlZmluZSBaTV9BR0dNU0dfTEVWICAgIFpNX0xWXzMKKyNkZWZpbmUgem1fbXNnMF9hZ2cobHYsIG1zZykgaWYgKFpNX0FHR01TR19MRVYgPj0gbHYpIFwKKyAgICAgICAge3ptX2RlYnVnX21zZzAobXNnKTt9CisjZGVmaW5lIHptX21zZzFfYWdnKGx2LCBtc2csIHZhbCkgaWYgKFpNX0FHR01TR19MRVYgPj0gbHYpIFwKKyAgICAgICAge3ptX2RlYnVnX21zZzEobXNnLCB2YWwpO30KKyNkZWZpbmUgem1fbXNnMl9hZ2cobHYsIG1zZywgdmFsKSBpZiAoWk1fQUdHTVNHX0xFViA+PSBsdikgXAorICAgICAgICB7em1fZGVidWdfbXNnMihtc2csIHZhbCk7fQorCisjaWZuZGVmIFpNX0VOQUJMRV9GV19CQV9SRVRSQU5TTUlTU0lPTiAvL2Rpc2FibGUgQkFXCitzdHJ1Y3QgYmF3X2hlYWRlcl9yIHsKKyAgICB1MTZfdCAgICAgICAqaGVhZGVyOworICAgIHUxNl90ICAgICAgICptaWM7CisgICAgdTE2X3QgICAgICAgKnNuYXA7CisgICAgdTE2X3QgICAgICAgaGVhZGVyTGVuOworICAgIHUxNl90ICAgICAgIG1pY0xlbjsKKyAgICB1MTZfdCAgICAgICBzbmFwTGVuOworICAgIHUxNl90ICAgICAgIHJlbW92ZUxlbjsKKyAgICB1OF90ICAgICAgICBrZXlJZHg7Cit9OworCitzdHJ1Y3QgYmF3X2hlYWRlciB7CisgICAgdTE2X3QgICAgICAgaGVhZGVyWzI5XTsvL1soOCszMCsyKzE4KS8yXTsgIDU4IGJ5dGVzICAvKiBjdHIrKDQrYTErYTIrYTMrMithNCkrcW9zK2l2ICovCisgICAgdTE2X3QgICAgICAgaGVhZGVyTGVuOworICAgIHUxNl90ICAgICAgIG1pY1s0XTsgLy9bOC8yXTsgOCBieXRlcworICAgIHUxNl90ICAgICAgIG1pY0xlbjsKKyAgICB1MTZfdCAgICAgICBzbmFwWzRdOyAvL1s4LzJdOyA4IGJ5dGVzCisgICAgdTE2X3QgICAgICAgc25hcExlbjsKKyAgICB1MTZfdCAgICAgICByZW1vdmVMZW47CisgICAgdThfdCAgICAgICAga2V5SWR4OworfTsKKworc3RydWN0IGJ1ZkluZm8geworICAgIHpidWZfdCogICAgIGJ1ZjsKKyAgICB1OF90ICAgICAgICBiYXdfcmV0cmFuc21pdDsKKyAgICB1MzJfdCAgICAgICB0aW1lc3RhbXA7CisgICAgc3RydWN0IGJhd19oZWFkZXIgICAqYmF3X2hlYWRlcjsKK307CisjZW5kaWYKK3N0cnVjdCBhZ2dFbGVtZW50Cit7CisgICAgemJ1Zl90KiAgICAgYnVmOworICAgIHUzMl90ICAgICAgIGFycml2YWxUaW1lOworICAgIHU4X3QgICAgICAgIGJhd19yZXRyYW5zbWl0OworICAgIHN0cnVjdCB6c0FkZGl0aW9uSW5mbyBhZGRJbmZvOworICAgIC8vc3RydWN0IGJhd19oZWFkZXIgIGJhd19oZWFkZXI7Cit9OworCisKKyNpZm5kZWYgWk1fRU5BQkxFX0ZXX0JBX1JFVFJBTlNNSVNTSU9OIC8vZGlzYWJsZSBCQVcKK3N0cnVjdCBiYXdfYnVmCit7CisgICAgemJ1Zl90KiAgICAgYnVmOworICAgIHUxNl90ICAgICAgIGJhd19zZXE7CisgICAgdTMyX3QgICAgICAgdGltZXN0YW1wOworICAgIHU4X3QgICAgICAgIGJhd19yZXRyYW5zbWl0OworICAgIHN0cnVjdCBiYXdfaGVhZGVyIGJhd19oZWFkZXI7Cit9OworCitzdHJ1Y3QgYmF3X3EgeworICAgIHN0cnVjdCBiYXdfYnVmICBmcmFtZVtaTV9WVFhRX1NJWkVdOworICAgIHUxNl90ICAgICAgIGVuYWJsZWQ7CisgICAgdTE2X3QgICAgICAgc3RhcnRfc2VxOworICAgIHUxNl90ICAgICAgIGhlYWQ7CisgICAgdTE2X3QgICAgICAgdGFpbDsKKyAgICB1MTZfdCAgICAgICBzaXplOworICAgIFRJRF9UWCAgICAgIHRpZF90eDsKKworICAgIC8vc3RydWN0IGJhd19oZWFkZXIgKmJhd19oZWFkZXI7Cit9OworCitzdHJ1Y3QgYmF3X2VuYWJsZXIKK3sKKyAgICBzdHJ1Y3QgYmF3X3EgICAgdGlkX2Jhd1taTV9CQVdfUE9PTF9TSVpFXTsKKyAgICB1OF90ICAgIGRlbFBvaW50OworICAgIHZvaWQgICAgKCpjb3JlKSh6ZGV2X3QqIGRldiwgdTE2X3QgYmF3X3NlcSwgdTMyX3QgYml0bWFwLCB1MTZfdCBhZ2dMZW4pOworICAgIC8vdm9pZCAgICAoKmNvcmUpOworICAgIHZvaWQgICAgKCppbml0KSh6ZGV2X3QqIGRldik7CisgICAgVElEX0JBVyAoKmdldE5ld1EpKHpkZXZfdCogZGV2LCB1MTZfdCBzdGFydF9zZXEsIFRJRF9UWCB0aWRfdHgpOworICAgIFRJRF9CQVcgKCpnZXRRKSh6ZGV2X3QqIGRldiwgdTE2X3QgYmF3X3NlcSk7CisgICAgdTE2X3QgICAoKmluc2VydCkoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBiYXdfc2VxLCBUSURfQkFXIHRpZF9iYXcsIHU4X3QgYmF3X3JldHJhbnNtaXQsIHN0cnVjdCBiYXdfaGVhZGVyX3IgKmhlYWRlcl9yKTsKKyAgICBzdHJ1Y3QgYnVmSW5mbyogKCpwb3ApKHpkZXZfdCogZGV2LCB1MTZfdCBpbmRleCwgVElEX0JBVyB0aWRfYmF3KTsKKyAgICB2b2lkICAgICgqZW5hYmxlKSh6ZGV2X3QqIGRldiwgVElEX0JBVyB0aWRfYmF3LCB1MTZfdCBzdGFydF9zZXEpOworICAgIHZvaWQgICAgKCpkaXNhYmxlKSh6ZGV2X3QqIGRldiwgVElEX0JBVyB0aWRfYmF3KTsKKworfTsKKyNlbmRpZgorc3RydWN0IGFnZ1F1ZXVlCit7CisgICAgc3RydWN0ICAgICAgYWdnRWxlbWVudCAgYWdndnR4cVtaTV9BR0dRX1NJWkVdOworICAgIHUxNl90ICAgICAgIGFnZ0hlYWQ7CisgICAgdTE2X3QgICAgICAgYWdnVGFpbDsKKyAgICBzMTZfdCAgICAgICBzaXplOworICAgIHUxNl90ICAgICAgIGFnZ1FTVEE7CisgICAgdTE2X3QgICAgICAgYWdnUUVuYWJsZWQ7CisgICAgdTE2X3QgICAgICAgYWM7CisgICAgdTE2X3QgICAgICAgdGlkOworICAgIHUxNl90ICAgICAgIGFnZ1JlYWR5OworICAgIHUxNl90ICAgICAgIGNsZWFyRmxhZzsKKyAgICB1MTZfdCAgICAgICBkZWxldGVGbGFnOworICAgIHUzMl90ICAgICAgIGxhc3RBcnJpdmFsOworICAgIHUxNl90ICAgICAgIGFnZ0ZyYW1lU2l6ZTsKKyAgICB1MTZfdCAgICAgICBiYXJfc3NuOyAgICAvKiBzdGFydGluZyBzZXF1ZW5jZSBudW1iZXIgaW4gQkFSICovCisgICAgdTE2X3QgICAgICAgZHN0WzNdOworICAgIHUxNl90ICAgICAgIGNvbXBsZXRlOyAgICAgLyogY29tcGxldGUgaW5kaWNhdGlvbiBwb2ludGVyICovCit9OworCitzdHJ1Y3QgYWdnU3RhCit7CisgICAgdTE2X3QgICAgICAgY291bnRbWk1fQUNdOworICAgIFRJRF9UWCAgICAgIHRpZF90eFs4XTsKKyAgICB1MTZfdCAgICAgICBhZ2dGbGFnW1pNX0FDXTsKK307CisKK3N0cnVjdCBhZ2dfdGlkX3J4Cit7CisgICAgdTE2X3QgICAgICAgYWlkOworICAgIHUxNl90ICAgICAgIGFjOworICAgIHUxNl90ICAgICAgIGFkZEJhRXhjaGFuZ2VTdGF0dXNDb2RlOworICAgIC8vc3RydWN0IHpzQWRkaXRpb25JbmZvICphZGRJbmZvOworICAgIHUxNl90ICAgICAgIHNlcV9zdGFydDsJCS8qIGZpcnN0IHNlcSBleHBlY3RlZCBuZXh0ICovCisgICAgdTE2X3QgICAgICAgYmF3X2hlYWQ7CQkvKiBoZWFkIG9mIHZhbGlkIGJsb2NrIGFjayB3aW5kb3cgKi8KKyAgICB1MTZfdCAgICAgICBiYXdfdGFpbDsJCS8qIHRhaWwgb2YgdmFsaWQgYmxvY2sgYWNrIHdpbmRvdyAqLworICAgIC8vdTE2X3QgICAgICAgZnJlZV9jb3VudDsJCS8qIGJsb2NrIGFjayB3aW5kb3cgc2l6ZQkqLworICAgIHU4X3QgICAgICAgIHNxX2V4Y2VlZF9jb3VudDsKKyAgICB1OF90ICAgICAgICBzcV9iZWhpbmRfY291bnQ7CisgICAgc3RydWN0IGFnZ0VsZW1lbnQgZnJhbWVbWk1fQUdHX0JBV19TSVpFICsgMV07IC8qIG91dC1vZi1vcmRlciByeCBmcmFtZXMgKi8KK307CisKK3N0cnVjdCBhZ2dDb250cm9sCit7CisgICAgdTE2X3QgICAgICAgYWdnRW5hYmxlZDsKKyAgICB1MTZfdCAgICAgICBhbXBkdUluZGljYXRpb247CisgICAgdTE2X3QgICAgICAgYWRkYmFJbmRpY2F0aW9uOworICAgIC8vVElEX0JBVyAgICAgdGlkX2JhdzsKKyAgICB1MzJfdCAgICAgICB0aW1lc3RhbXA7Cit9OworCitzdHJ1Y3QgYWdnQmFGcmFtZVBhcmFtZXRlcgoreworICAgIHpidWZfdCogICAgIGJ1ZjsKKyAgICB1MTZfdCAgICAgICBiYV9wYXJhbWV0ZXI7CisgICAgdThfdCAgICAgICAgZGlhbG9nOworICAgIHUxNl90ICAgICAgIGJhX3BvbGljeTsKKyAgICB1MTZfdCAgICAgICB0aWQ7CisgICAgdTE2X3QgICAgICAgYnVmZmVyX3NpemU7CisgICAgdTE2X3QgICAgICAgYmFfdGltZW91dDsKKyAgICB1MTZfdCAgICAgICBiYV9zdGFydF9zZXE7CisgICAgdTE2X3QgICAgICAgc3RhdHVzX2NvZGU7Cit9OworCitzdHJ1Y3QgYWdnQmFyQ29udHJvbAoreworICAgIHUxNl90ICAgICAgIGJhcl9hY2tfcG9saWN5ICAgICAgOworICAgIHUxNl90ICAgICAgIG11bHRpX3RpZCAgICAgICAgICAgOworICAgIHUxNl90ICAgICAgIGNvbXByZXNzZWRfYml0bWFwICAgOworICAgIHUxNl90ICAgICAgIHRpZF9pbmZvICAgICAgICAgICAgOworfTsKKworc3RydWN0IGFnZ1RhbGx5Cit7CisgICAgdTMyX3QgICAgICAgZ290X3BhY2tldHNfc3VtOworICAgIHUzMl90ICAgICAgIGdvdF9ieXRlc19zdW07CisgICAgdTMyX3QgICAgICAgc2VudF9wYWNrZXRzX3N1bTsKKyAgICB1MzJfdCAgICAgICBzZW50X2J5dGVzX3N1bTsKKyAgICB1MzJfdCAgICAgICBhdmdfZ290X3BhY2tldHM7CisgICAgdTMyX3QgICAgICAgYXZnX2dvdF9ieXRlczsKKyAgICB1MzJfdCAgICAgICBhdmdfc2VudF9wYWNrZXRzOworICAgIHUzMl90ICAgICAgIGF2Z19zZW50X2J5dGVzOworICAgIHUxNl90ICAgICAgIHRpbWU7Cit9OworCisKK3N0cnVjdCBkZXN0USB7CisgICAgc3RydWN0IGRlc3R7CisgICAgICAgIHUxNl90ICAgUXR5cGUgOiAxOyAvKiAwIGFnZ3IsIDEgdnR4cSAqLworICAgICAgICBUSURfVFggIHRpZF90eDsKKyAgICAgICAgdm9pZCogICB2dHhxOworCisgICAgICAgIHN0cnVjdCBkZXN0KiBuZXh0OworICAgIH0gKmRlc3RbNF07CisgICAgc3RydWN0IGRlc3QqIEhlYWRbNF07CisgICAgLy9zMTZfdCAgIHNpemVbNF07CisgICAgdTE2X3QgICBwcHJpOworICAgIHZvaWQgICAgKCppbnNlcnQpKHpkZXZfdCogZGV2LCB1MTZfdCBRdHlwZSwgdTE2X3QgYWMsIFRJRF9UWCB0aWRfdHgsIHZvaWQqIHZ0eHEpOworICAgIHZvaWQgICAgKCpkZWxldGUpKHpkZXZfdCogZGV2LCB1MTZfdCBRdHlwZSwgVElEX1RYIHRpZF90eCwgdm9pZCogdnR4cSk7CisgICAgdm9pZCAgICAoKmluaXQpKHpkZXZfdCogZGV2KTsKKyAgICBzdHJ1Y3QgZGVzdCogKCpnZXROZXh0KSh6ZGV2X3QqIGRldiwgdTE2X3QgYWMpOworICAgIHUxNl90ICAgKCpleGlzdCkoemRldl90KiBkZXYsIHUxNl90IFF0eXBlLCB1MTZfdCBhYywgVElEX1RYIHRpZF90eCwgdm9pZCogdnR4cSk7CisgICAgLy92b2lkICAgICgqc2NhbikoemRldl90KiBkZXYpOworfTsKKy8qCisgKiBhZ2dyZWdhdGlvbiB0eAorICovCit2b2lkICAgIHpmQWdnSW5pdCh6ZGV2X3QqIGRldik7Cit1MTZfdCAgIHpmQXBGaW5kU3RhKHpkZXZfdCogZGV2LCB1MTZfdCogYWRkcik7Cit1MTZfdCAgIHpmQWdnR2V0U3RhKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Zik7CitUSURfVFggIHpmQWdnVHhHZXRRdWV1ZSh6ZGV2X3QqIGRldiwgdTE2X3QgYWlkLCB1MTZfdCB0aWQpOworVElEX1RYICB6ZkFnZ1R4TmV3UXVldWUoemRldl90KiBkZXYsIHUxNl90IGFpZCwgdTE2X3QgdGlkLCB6YnVmX3QqIGJ1Zik7Cit1MTZfdCAgIHpmQWdnVHhFbnF1ZXVlKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgYWlkLCBUSURfVFggdGlkX3R4KTsKK3UxNl90ICAgemZBZ2dUeCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IHRpZCk7Cit1MTZfdCAgIHpmQWdnVHhSZWFkeUNvdW50KHpkZXZfdCogZGV2LCB1MTZfdCBhYyk7Cit1MTZfdCAgIHpmQWdnVHhQYXJ0aWFsKHpkZXZfdCogZGV2LCB1MTZfdCBhYywgdTE2X3QgcmVhZHljb3VudCk7Cit1MTZfdCAgIHpmQWdnVHhTZW5kKHpkZXZfdCogZGV2LCB1MzJfdCBmcmVlVHhkLCBUSURfVFggdGlkX3R4KTsKK1RJRF9UWCAgemZBZ2dUeEdldFJlYWR5UXVldWUoemRldl90KiBkZXYsIHUxNl90IGFjKTsKK3pidWZfdCogemZBZ2dUeEdldFZ0eHEoemRldl90KiBkZXYsIFRJRF9UWCB0aWRfdHgpOwordTE2X3QgICB6ZkFnZ1R4RGVsZXRlUXVldWUoemRldl90KiBkZXYsIHUxNl90IHFudW0pOwordTE2X3QgICB6ZkFnZ1NjYW5BbmRDbGVhcih6ZGV2X3QqIGRldiwgdTMyX3QgdGltZSk7Cit1MTZfdCAgIHpmQWdnQ2xlYXJRdWV1ZSh6ZGV2X3QqIGRldik7Cit2b2lkICAgIHpmQWdnVHhTY2hlZHVsZXIoemRldl90KiBkZXYsIHU4X3QgU2NhbkFuZENsZWFyKTsKKworLyogdGlkX3R4IG1hbmlwdWxhdGlvbiAqLworI2lmbmRlZiBaTV9FTkFCTEVfRldfQkFfUkVUUkFOU01JU1NJT04gLy9kaXNhYmxlIEJBVwordTE2X3QgICB6ZkFnZ1RpZFR4SW5zZXJ0SGVhZCh6ZGV2X3QqIGRldiwgc3RydWN0IGJ1ZkluZm8qIGJ1Zl9pbmZvLCBUSURfVFggdGlkX3R4KTsKKyNlbmRpZgordm9pZCAgICB6ZkFnZ0Rlc3RJbnNlcnQoemRldl90KiBkZXYsIHUxNl90IFF0eXBlLCB1MTZfdCBhYywgVElEX1RYIHRpZF90eCwgdm9pZCogdnR4cSk7Cit2b2lkICAgIHpmQWdnRGVzdERlbGV0ZSh6ZGV2X3QqIGRldiwgdTE2X3QgUXR5cGUsIFRJRF9UWCB0aWRfdHgsIHZvaWQqIHZ0eHEpOwordm9pZCAgICB6ZkFnZ0Rlc3RJbml0KHpkZXZfdCogZGV2KTsKK3N0cnVjdCBkZXN0KiB6ZkFnZ0Rlc3RHZXROZXh0KHpkZXZfdCogZGV2LCB1MTZfdCBhYyk7Cit1MTZfdCAgIHpmQWdnRGVzdEV4aXN0KHpkZXZfdCogZGV2LCB1MTZfdCBRdHlwZSwgdTE2X3QgYWMsIFRJRF9UWCB0aWRfdHgsIHZvaWQqIHZ0eHEpOworLyoKKyAqIGFnZ3JlZ2F0aW9uIHJ4CisgKi8KK3N0cnVjdCBhZ2dfdGlkX3J4ICp6ZkFnZ1J4RW5hYmxlZCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOwordTE2X3QgICB6ZkFnZ1J4KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Ziwgc3RydWN0IHpzQWRkaXRpb25JbmZvICphZGRJbmZvLCBzdHJ1Y3QgYWdnX3RpZF9yeCAqdGlkX3J4KTsKK3N0cnVjdCBhZ2dfdGlkX3J4ICp6ZkFnZ1J4R2V0UXVldWUoemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKK3UxNl90ICAgemZBZ2dSeEVucXVldWUoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCBzdHJ1Y3QgYWdnX3RpZF9yeCAqdGlkX3J4LCBzdHJ1Y3QgenNBZGRpdGlvbkluZm8gKmFkZEluZm8pOwordTE2X3QgICB6ZkFnZ1J4Rmx1c2goemRldl90KiBkZXYsIHUxNl90IHNlcV9ubywgc3RydWN0IGFnZ190aWRfcnggKnRpZF9yeCk7Cit1MTZfdCAgIHpmQWdnUnhGcmVlQnVmKHpkZXZfdCogZGV2LCB1MTZfdCBkZXN0cm95KTsKK3UxNl90ICAgemZBZ2dSeENsZWFyKHpkZXZfdCogZGV2LCB1MzJfdCB0aW1lKTsKK3ZvaWQgICAgemZBZ2dSZWN2QkFSKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Zik7CisvKgorICogZW5kIG9mIGFnZ3JlZ2F0aW9uIHJ4CisgKi8KKworLyoKKyAqIEFEREJBCisgKi8KK3UxNl90ICAgemZBZ2dTZW5kQWRkYmFSZXF1ZXN0KHpkZXZfdCogZGV2LCB1MTZfdCAqZHN0LCB1MTZfdCBhYywgdTE2X3QgdXApOwordTE2X3QgICB6ZkFnZ1NldEFkZGJhRnJhbWVCb2R5KHpkZXZfdCogZGV2LHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQsIHUxNl90IGFjLCB1MTZfdCB1cCk7Cit1MTZfdCAgIHpmQWdnR2VuQWRkYmFIZWFkZXIoemRldl90KiBkZXYsIHUxNl90KiBkc3QsCisgICAgICAgICAgICAgICAgdTE2X3QqIGhlYWRlciwgdTE2X3QgbGVuLCB6YnVmX3QqIGJ1ZiwgdTE2X3QgdmFwLCB1OF90IGVuY3J5cHQpOwordTE2X3QgICB6ZkFnZ1Byb2Nlc3NBY3Rpb24oemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKK3UxNl90ICAgemZBZ2dCbG9ja0Fja0FjdGlvbkZyYW1lKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Zik7Cit1MTZfdCAgIHpmQWdnUmVjdkFkZGJhUmVxdWVzdCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOwordTE2X3QgICB6ZkFnZ1JlY3ZBZGRiYVJlc3BvbnNlKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Zik7Cit1MTZfdCAgIHpmQWdnUmVjdkRlbGJhKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Zik7Cit1MTZfdCAgIHpmQWdnU2VuZEFkZGJhUmVzcG9uc2UoemRldl90KiBkZXYsIHN0cnVjdCBhZ2dCYUZyYW1lUGFyYW1ldGVyICpiZik7Cit1MTZfdCAgIHpmQWdnU2V0QWRkYmFSZXNwb25zZUZyYW1lQm9keSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsCisgICAgICAgICAgICAgICAgc3RydWN0IGFnZ0JhRnJhbWVQYXJhbWV0ZXIgKmJmLCB1MTZfdCBvZmZzZXQpOwordTE2X3QgICB6ZkFnZ0FkZGJhU2V0VGlkUngoemRldl90KiBkZXYsIHpidWZfdCogYnVmLAorICAgICAgICAgICAgICAgIHN0cnVjdCBhZ2dCYUZyYW1lUGFyYW1ldGVyICpiZik7CisvKgorICogemZBZ2dUeFNlbmRFdGgKKyAqLwordTE2X3QgemZBZ2dUeFNlbmRFdGgoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBwb3J0LCB1MTZfdCBidWZUeXBlLCB1OF90IGZsYWcsIHN0cnVjdCBhZ2dDb250cm9sICphZ2dDb250cm9sLCBUSURfVFggdGlkX3R4KTsKKworLyoKKyAqIHN0YXRpc3RpY3MgZnVuY3Rpb25zCisgKi8KK3UxNl90IHpmQWdnVGFsbHlSZXNldCh6ZGV2X3QqIGRldik7CisKK3UxNl90ICAgemZBZ2dQcmludFRhbGx5KHpkZXZfdCogZGV2KTsKKworLyoKKyAqIEJBUgorICovCit2b2lkICAgIHpmQWdnSW52b2tlQmFyKHpkZXZfdCogZGV2LCBUSURfVFggdGlkX3R4KTsKK3UxNl90ICAgemZBZ2dTZW5kQmFyKHpkZXZfdCogZGV2LCBUSURfVFggdGlkX3R4LCBzdHJ1Y3QgYWdnQmFyQ29udHJvbCAqYWdnQmFyQ29udHJvbCk7Cit1MTZfdCAgIHpmQWdnU2V0QmFyQm9keSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCwgVElEX1RYIHRpZF90eCwgc3RydWN0IGFnZ0JhckNvbnRyb2wgKmFnZ0JhckNvbnRyb2wpOwordTE2X3QgICB6ZkFnZ0dlbkJhckhlYWRlcih6ZGV2X3QqIGRldiwgdTE2X3QqIGRzdCwKKyAgICAgICAgICAgICAgICB1MTZfdCogaGVhZGVyLCB1MTZfdCBsZW4sIHpidWZfdCogYnVmLCB1MTZfdCB2YXAsIHU4X3QgZW5jcnlwdCk7CisKKyNpZm5kZWYgWk1fRU5BQkxFX0ZXX0JBX1JFVFJBTlNNSVNTSU9OIC8vZGlzYWJsZSBCQVcKKy8qIEJBVyBCQSByZXRyYW5zbWlzc2lvbiAqLwordm9pZCAgICB6ZkJhd0NvcmUoemRldl90KiBkZXYsIHUxNl90IGJhd19zZXEsIHUzMl90IGJpdG1hcCwgdTE2X3QgYWdnTGVuKTsKK3ZvaWQgICAgemZCYXdJbml0KHpkZXZfdCogZGV2KTsKK1RJRF9CQVcgemZCYXdHZXROZXdRKHpkZXZfdCogZGV2LCB1MTZfdCBzdGFydF9zZXEsIFRJRF9UWCB0aWRfdHgpOwordTE2X3QgICB6ZkJhd0luc2VydCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IGJhd19zZXEsIFRJRF9CQVcgdGlkX2JhdywgdThfdCBiYXdfcmV0cmFuc21pdCwgc3RydWN0IGJhd19oZWFkZXJfciAqaGVhZGVyX3IpOworc3RydWN0IGJ1ZkluZm8qIHpmQmF3UG9wKHpkZXZfdCogZGV2LCB1MTZfdCBpbmRleCwgVElEX0JBVyB0aWRfYmF3KTsKK3ZvaWQgICAgemZCYXdFbmFibGUoemRldl90KiBkZXYsIFRJRF9CQVcgdGlkX2JhdywgdTE2X3Qgc3RhcnRfc2VxKTsKK3ZvaWQgICAgemZCYXdEaXNhYmxlKHpkZXZfdCogZGV2LCBUSURfQkFXIHRpZF9iYXcpOworVElEX0JBVyB6ZkJhd0dldFEoemRldl90KiBkZXYsIHUxNl90IGJhd19zZXEpOwordm9pZCB6ZkFnZ1R4UmV0cmFuc21pdCh6ZGV2X3QqIGRldiwgc3RydWN0IGJ1ZkluZm8gKmJ1Zl9pbmZvLCBzdHJ1Y3QgYWdnQ29udHJvbCAqYWdnQ29udHJvbCwgVElEX1RYIHRpZF90eCk7CisjZW5kaWYKKy8qIGV4dGVybiBmdW5jdGlvbnMgKi8KK2V4dGVybiB6YnVmX3QqIHpmR2V0VnR4cSh6ZGV2X3QqIGRldiwgdThfdCBhYyk7CisKKyNlbmRpZiAvKiAjaWZuZGVmIF9DQUdHX0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NjbWQuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jY21kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc5OTc3OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jY21kLmMKQEAgLTAsMCArMSwxODYxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTW9kdWxlIE5hbWUgOiBjbWQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBBYnN0cmFjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGNvbW1hbmQgaW50ZXJmYWNlIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBOT1RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiY3ByZWNvbXAuaCIKKyNpbmNsdWRlICIuLi9oYWwvaHByZWcuaCIKKworCit1MTZfdCB6ZldsYW5SZXNldCh6ZGV2X3QqIGRldik7Cit1MzJfdCB6ZlVwZGF0ZVJ4UmF0ZSh6ZGV2X3QqIGRldik7CisKKworZXh0ZXJuIHZvaWQgemZpVXNiUmVjdih6ZGV2X3QgKmRldiwgemJ1Zl90ICpidWYpOworZXh0ZXJuIHZvaWQgemZpVXNiUmVnSW4oemRldl90KiBkZXYsIHUzMl90KiByc3AsIHUxNl90IHJzcExlbik7CitleHRlcm4gdm9pZCB6ZmlVc2JPdXRDb21wbGV0ZSh6ZGV2X3QqIGRldiwgemJ1Zl90ICpidWYsIHU4X3Qgc3RhdHVzLCB1OF90ICpoZHIpOworZXh0ZXJuIHZvaWQgemZpVXNiUmVnT3V0Q29tcGxldGUoemRldl90KiBkZXYpOworZXh0ZXJuIHUxNl90IHpmSHBSZWluaXQoemRldl90KiBkZXYsIHUzMl90IGZyZXF1ZW5jeSk7CisKKy8qIEdldCBzaXplIChieXRlKSBvZiBkcml2ZXIgY29yZSBnbG9iYWwgZGF0YSBzdHJ1Y3R1cmUuICAgICovCisvKiBUaGlzIHNpemUgd2lsbCBiZSB1c2VkIGJ5IGRyaXZlciB3cmFwcGVyIHRvIGFsbG9jYXRlICAgICAqLworLyogYSBtZW1vcnkgc3BhY2UgZm9yIGRyaXZlciBjb3JlIHRvIHN0b3JlIGdsb2JhbCB2YXJpYWJsZXMgKi8KK3UxNl90IHpmaUdsb2JhbERhdGFTaXplKHpkZXZfdCogZGV2KQoreworICAgIHUzMl90IHJldDsKKyAgICByZXQgPSAoc2l6ZW9mKHN0cnVjdCB6c1dsYW5EZXYpKTsKKyAgICB6bV9hc3NlcnQoKHJldD4+MTYpID09IDApOworICAgIHJldHVybiAodTE2X3QpcmV0OworfQorCisKKy8qIEluaXRpYWxpemUgV0xBTiBoYXJkd2FyZSBhbmQgc29mdHdhcmUsIHJlc291cmNlIHdpbGwgYmUgYWxsb2NhdGVkICovCisvKiBmb3IgV0xBTiBvcGVyYXRpb24sIG11c3QgYmUgY2FsbGVkIGZpcnN0IGJlZm9yZSBvdGhlciBmdW5jdGlvbi4gICAqLworZXh0ZXJuIHUxNl90IHpmaVdsYW5PcGVuKHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNDYkZ1bmNUYmwqIGNiRnVuY1RibCkKK3sKKyAgICAvL3UxNl90IHJldDsKKyAgICAvL3UzMl90IGk7CisgICAgLy91OF90KiBjaDsKKyAgICAvL3U4X3QgIGJQYXNzaXZlOworICAgIHUzMl90IGRldlNpemU7CisgICAgc3RydWN0IHpmQ2JVc2JGdW5jVGJsIGNiVXNiRnVuY1RibDsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bV9kZWJ1Z19tc2cwKCJzdGFydCIpOworCisgICAgZGV2U2l6ZSA9IHNpemVvZihzdHJ1Y3QgenNXbGFuRGV2KTsKKyAgICAvKiBaZXJvaXplIHpzV2xhbkRldiBzdHJ1Y3QgKi8KKyAgICB6Zlplcm9NZW1vcnkoKHU4X3QqKXdkLCAodTE2X3QpZGV2U2l6ZSk7CisKKyNpZmRlZiBaTV9FTkFCTEVfQUdHUkVHQVRJT04KKyAgICB6ZkFnZ0luaXQoZGV2KTsKKyNlbmRpZgorCisgICAgemZDd21Jbml0KGRldik7CisKKyAgICB3ZC0+Y29tbVRhbGx5LlJhdGVDdHJsVHhNUERVID0gMDsKKyAgICB3ZC0+Y29tbVRhbGx5LlJhdGVDdHJsQkFGYWlsID0gMDsKKyAgICB3ZC0+cHJlYW1ibGVUeXBlSW5Vc2VkID0gWk1fUFJFQU1CTEVfVFlQRV9TSE9SVDsKKworICAgIGlmIChjYkZ1bmNUYmwgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIC8qIHpmY2JSZWN2RXRoKCkgaXMgbWFuZGF0b3J5ICovCisgICAgICAgIHptX2Fzc2VydCgwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGNiRnVuY1RibC0+emZjYlJlY3ZFdGggPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogemZjYlJlY3ZFdGgoKSBpcyBtYW5kYXRvcnkgKi8KKyAgICAgICAgICAgIHptX2Fzc2VydCgwKTsKKyAgICAgICAgfQorICAgICAgICB3ZC0+emZjYkF1dGhOb3RpZnkgPSBjYkZ1bmNUYmwtPnpmY2JBdXRoTm90aWZ5OworICAgICAgICB3ZC0+emZjYkF1dGhOb3RpZnkgPSBjYkZ1bmNUYmwtPnpmY2JBdXRoTm90aWZ5OworICAgICAgICB3ZC0+emZjYkFzb2NOb3RpZnkgPSBjYkZ1bmNUYmwtPnpmY2JBc29jTm90aWZ5OworICAgICAgICB3ZC0+emZjYkRpc0Fzb2NOb3RpZnkgPSBjYkZ1bmNUYmwtPnpmY2JEaXNBc29jTm90aWZ5OworICAgICAgICB3ZC0+emZjYkFwQ29ubmVjdE5vdGlmeSA9IGNiRnVuY1RibC0+emZjYkFwQ29ubmVjdE5vdGlmeTsKKyAgICAgICAgd2QtPnpmY2JDb25uZWN0Tm90aWZ5ID0gY2JGdW5jVGJsLT56ZmNiQ29ubmVjdE5vdGlmeTsKKyAgICAgICAgd2QtPnpmY2JTY2FuTm90aWZ5ID0gY2JGdW5jVGJsLT56ZmNiU2Nhbk5vdGlmeTsKKyAgICAgICAgd2QtPnpmY2JNaWNGYWlsdXJlTm90aWZ5ID0gY2JGdW5jVGJsLT56ZmNiTWljRmFpbHVyZU5vdGlmeTsKKyAgICAgICAgd2QtPnpmY2JBcE1pY0ZhaWx1cmVOb3RpZnkgPSBjYkZ1bmNUYmwtPnpmY2JBcE1pY0ZhaWx1cmVOb3RpZnk7CisgICAgICAgIHdkLT56ZmNiSWJzc1BhcnRuZXJOb3RpZnkgPSBjYkZ1bmNUYmwtPnpmY2JJYnNzUGFydG5lck5vdGlmeTsKKyAgICAgICAgd2QtPnpmY2JNYWNBZGRyZXNzTm90aWZ5ID0gY2JGdW5jVGJsLT56ZmNiTWFjQWRkcmVzc05vdGlmeTsKKyAgICAgICAgd2QtPnpmY2JTZW5kQ29tcGxldGVJbmRpY2F0aW9uID0gY2JGdW5jVGJsLT56ZmNiU2VuZENvbXBsZXRlSW5kaWNhdGlvbjsKKyAgICAgICAgd2QtPnpmY2JSZWN2RXRoID0gY2JGdW5jVGJsLT56ZmNiUmVjdkV0aDsKKyAgICAgICAgd2QtPnpmY2JSZXN0b3JlQnVmRGF0YSA9IGNiRnVuY1RibC0+emZjYlJlc3RvcmVCdWZEYXRhOworICAgICAgICB3ZC0+emZjYlJlY3Y4MDIxMSA9IGNiRnVuY1RibC0+emZjYlJlY3Y4MDIxMTsKKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQworICAgICAgICB3ZC0+emZjYkNlbmNBc29jTm90aWZ5ID0gY2JGdW5jVGJsLT56ZmNiQ2VuY0Fzb2NOb3RpZnk7CisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworICAgICAgICB3ZC0+emZjYkNsYXNzaWZ5VHhQYWNrZXQgPSBjYkZ1bmNUYmwtPnpmY2JDbGFzc2lmeVR4UGFja2V0OworICAgICAgICB3ZC0+emZjYkh3V2F0Y2hEb2dOb3RpZnkgPSBjYkZ1bmNUYmwtPnpmY2JId1dhdGNoRG9nTm90aWZ5OworICAgIH0KKworICAgIC8vYWRkIGJ5IGhvbmRhIDAzMzAKKyAgICBjYlVzYkZ1bmNUYmwuemZjYlVzYlJlY3YgPSB6ZmlVc2JSZWN2OworICAgIGNiVXNiRnVuY1RibC56ZmNiVXNiUmVnSW4gPSB6ZmlVc2JSZWdJbjsKKyAgICBjYlVzYkZ1bmNUYmwuemZjYlVzYk91dENvbXBsZXRlID0gemZpVXNiT3V0Q29tcGxldGU7CisgICAgY2JVc2JGdW5jVGJsLnpmY2JVc2JSZWdPdXRDb21wbGV0ZSA9IHpmaVVzYlJlZ091dENvbXBsZXRlOworICAgIHpmd1VzYlJlZ2lzdGVyQ2FsbEJhY2soZGV2LCAmY2JVc2JGdW5jVGJsKTsKKyAgICAvKiBJbml0IE9XTiBNQUMgYWRkcmVzcyAqLworICAgIHdkLT5tYWNBZGRyWzBdID0gMHg4MDAwOworICAgIHdkLT5tYWNBZGRyWzFdID0gMHgwMDAwOworICAgIHdkLT5tYWNBZGRyWzJdID0gMHgwMDAwOworCisgICAgd2QtPnJlZ3VsYXRpb25UYWJsZS5yZWdpb25Db2RlID0gMHhmZmZmOworCisgICAgemZIcEluaXQoZGV2LCB3ZC0+ZnJlcXVlbmN5KTsKKworICAgIC8qIGluaXQgcmVnaW9uIGNvZGUgKi8KKyAgICAvL3dkLT5yZWd1bGF0aW9uVGFibGUucmVnaW9uQ29kZSA9IE5VTEwxX1dPUkxEOyAvL09ubHkgMi40ZyBSZWdDb2RlCisgICAgLy96ZkhwR2V0UmVndWxhdGlvblRhYmxlZnJvbVJlZ2lvbkNvZGUoZGV2LCBOVUxMMV9XT1JMRCk7CisgICAgLy96ZmlXbGFuU2V0RG90MTFETW9kZShkZXYgLCAxKTsgLy8gRW5hYmxlIDgwMi4xMWQKKyAgICAvKiBHZXQgdGhlIGZpcnN0IGNoYW5uZWwgKi8KKyAgICAvL3dkLT5mcmVxdWVuY3kgPSB6ZkNoR2V0Rmlyc3RDaGFubmVsKGRldiwgJmJQYXNzaXZlKTsKKyNpZmRlZiBaTV9BUF9ERUJVRworICAgIC8vd2QtPmZyZXF1ZW5jeSA9IDI0Mzc7CisjZW5kaWYKKworICAgIC8vU1RBIG1vZGUKKyAgICB3ZC0+c3RhLm1UeFJhdGUgPSAweDA7CisgICAgd2QtPnN0YS51VHhSYXRlID0gMHgzOworICAgIHdkLT5zdGEubW1UeFJhdGUgPSAweDA7CisgICAgd2QtPnN0YS5hZGFwdGVyU3RhdGUgPSBaTV9TVEFfU1RBVEVfRElTQ09OTkVDVDsKKyAgICB3ZC0+c3RhLmNhcGFiaWxpdHlbMF0gPSAweDAxOworICAgIHdkLT5zdGEuY2FwYWJpbGl0eVsxXSA9IDB4MDA7CisKKyAgICB3ZC0+c3RhLnByZWFtYmxlVHlwZUhUID0gMDsKKyAgICB3ZC0+c3RhLmh0Q3RybEJhbmR3aWR0aCA9IDA7CisgICAgd2QtPnN0YS5odEN0cmxTVEJDID0gMDsKKyAgICB3ZC0+c3RhLmh0Q3RybFNHID0gMDsKKyAgICB3ZC0+c3RhLmRlZmF1bHRUQSA9IDA7CisgICAgLy93ZC0+c3RhLmFjdGl2ZXNjYW5UaWNrUGVyQ2hhbm5lbCA9IFpNX1RJTUVfQUNUSVZFX1NDQU4vWk1fTVNfUEVSX1RJQ0s7CisJeworCQl1OF90IER1ciA9IFpNX1RJTUVfQUNUSVZFX1NDQU47CisJCXpmd0dldEFjdGl2ZVNjYW5EdXIoZGV2LCAmRHVyKTsKKwkJd2QtPnN0YS5hY3RpdmVzY2FuVGlja1BlckNoYW5uZWwgPSBEdXIvWk1fTVNfUEVSX1RJQ0s7CisKKwl9CisgICAgd2QtPnN0YS5wYXNzaXZlU2NhblRpY2tQZXJDaGFubmVsID0gWk1fVElNRV9QQVNTSVZFX1NDQU4vWk1fTVNfUEVSX1RJQ0s7CisgICAgd2QtPnN0YS5iQXV0b1JlY29ubmVjdCA9IFRSVUU7CisgICAgd2QtPnN0YS5kcm9wVW5lbmNyeXB0ZWRQa3RzID0gRkFMU0U7CisKKyAgICAvKiBzZXQgZGVmYXVsdCB0byBieXBhc3MgYWxsIG11bHRpY2FzdCBwYWNrZXQgZm9yIGxpbnV4LCB3aW5kb3cgWFAgd291bGQgc2V0IDAgYnkgd3JhcHBlciBpbml0aWFsaXphdGlvbiAqLworCXdkLT5zdGEuYkFsbE11bHRpY2FzdCA9IDE7CisKKyAgICAvKiBJbml0aWFsIHRoZSBSSUZTIFN0YXR1cyAvIFJJRlMtbGlrZSBmcmFtZSBjb3VudCAvIFJJRlMgY291bnQgKi8KKyAgICB3ZC0+c3RhLnJpZnNTdGF0ZSA9IFpNX1JJRlNfU1RBVEVfREVURUNUSU5HOworICAgIHdkLT5zdGEucmlmc0xpa2VGcmFtZUNudCA9IDA7CisgICAgd2QtPnN0YS5yaWZzQ291bnQgPSAwOworCisgICAgd2QtPnN0YS5vc1J4RmlsdGVyID0gMDsKKyAgICB3ZC0+c3RhLmJTYWZlTW9kZSA9IDA7CisKKyAgICAvL0NvbW1vbgorICAgIHpmUmVzZXRTdXBwb3J0UmF0ZShkZXYsIFpNX0RFRkFVTFRfU1VQUE9SVF9SQVRFX0RJU0NPTk5FQ1QpOworICAgIHdkLT5iZWFjb25JbnRlcnZhbCA9IDEwMDsKKyAgICB3ZC0+cnRzVGhyZXNob2xkID0gMjM0NjsKKyAgICB3ZC0+ZnJhZ1RocmVzaG9sZCA9IDMyNzY3OworICAgIHdkLT53bGFuTW9kZSA9IFpNX01PREVfSU5GUkFTVFJVQ1RVUkU7CisgICAgd2QtPnR4TUNTID0gMHhmZjsgICAgLy9BVVRPCisgICAgd2QtPmR0aW0gPSAxOworICAgIC8vd2QtPnR4TVQgPSAxOyAgICAgICAvL09GRE0KKyAgICB3ZC0+dGljayA9IDE7CisgICAgd2QtPm1heFR4UG93ZXIyID0gMHhmZjsKKyAgICB3ZC0+bWF4VHhQb3dlcjUgPSAweGZmOworICAgIHdkLT5zdXBwb3J0TW9kZSA9IDB4ZmZmZmZmZmY7CisgICAgd2QtPndzLmFkaG9jTW9kZSA9IFpNX0FESE9DQkFORF9HOworICAgIHdkLT53cy5hdXRvU2V0RnJlcXVlbmN5ID0gMHhmZjsKKworICAgIC8vQVAgbW9kZQorICAgIC8vd2QtPmJnTW9kZSA9IHdkLT53cy5iZ01vZGU7CisgICAgd2QtPmFwLnNzaWRMZW5bMF0gPSA2OworICAgIHdkLT5hcC5zc2lkWzBdWzBdID0gJ1onOworICAgIHdkLT5hcC5zc2lkWzBdWzFdID0gJ0QnOworICAgIHdkLT5hcC5zc2lkWzBdWzJdID0gJzEnOworICAgIHdkLT5hcC5zc2lkWzBdWzNdID0gJzInOworICAgIHdkLT5hcC5zc2lkWzBdWzRdID0gJzInOworICAgIHdkLT5hcC5zc2lkWzBdWzVdID0gJzEnOworCisgICAgLy8gSW5pdCB0aGUgY291bnRyeSBpc28gbmFtZSBhcyBOQQorICAgIHdkLT53cy5jb3VudHJ5SXNvTmFtZVswXSA9IDA7CisgICAgd2QtPndzLmNvdW50cnlJc29OYW1lWzFdID0gMDsKKyAgICB3ZC0+d3MuY291bnRyeUlzb05hbWVbMl0gPSAnXDAnOworCisJLyogaW5pdCBmcmFnbWVudGF0aW9uIGlzIGRpc2FibGVkICovCisJLy96ZmlXbGFuU2V0RnJhZ1RocmVzaG9sZChkZXYsIDApOworCisJLyogYWlyb3BlZWsgOiBzd1NuaWZmZXIgMT0+b24gIDA9Pm9mZiAqLworCXdkLT5zd1NuaWZmZXIgPSAwOworICAgIHdkLT5YTGlua01vZGUgPSAwOworCisvLyBqaGxlZSBIVCAwCisjaWYgMQorICAgIC8qIEFQIE1vZGUqLworICAgIC8qIEluaXQgSFQgQ2FwYWJpbGl0eSBJbmZvICovCisgICAgd2QtPmFwLkhUQ2FwLkRhdGEuRWxlbWVudElEID0gWk1fV0xBTl9FSURfSFRfQ0FQQUJJTElUWTsKKyAgICB3ZC0+YXAuSFRDYXAuRGF0YS5MZW5ndGggPSAyNjsKKyAgICAvL3dkLT5hcC5IVENhcC5EYXRhLlN1cENoYW5uZWxXaWR0aFNldCA9IDA7CisgICAgLy93ZC0+YXAuSFRDYXAuRGF0YS5NSU1PUG93ZXJTYXZlID0gMzsKKyAgICAvL3dkLT5hcC5IVENhcC5EYXRhLlNob3J0R0lmb3I0ME1IeiA9IDA7CisgICAgLy93ZC0+YXAuSFRDYXAuRGF0YS5TaG9ydEdJZm9yMjBNSHogPSAwOworICAgIC8vd2QtPmFwLkhUQ2FwLkRhdGEuRFNTU2FuZENDS2luNDBNSHogPSAwOworICAgIHdkLT5hcC5IVENhcC5EYXRhLkFNUERVUGFyYW0gfD0gSFRDQVBfTWF4UnhBTVBEVTM7CisgICAgd2QtPmFwLkhUQ2FwLkRhdGEuTUNTU2V0WzBdID0gMHhGRjsgLy8gTUNTIDAgfiAgNworICAgIHdkLT5hcC5IVENhcC5EYXRhLk1DU1NldFsxXSA9IDB4RkY7IC8vIE1DUyA4IH4gMTUKKworICAgIC8qIEluaXQgRXh0ZW5kZWQgSFQgQ2FwYWJpbGl0eSBJbmZvICovCisgICAgd2QtPmFwLkV4dEhUQ2FwLkRhdGEuRWxlbWVudElEID0gWk1fV0xBTl9FSURfRVhURU5ERURfSFRfQ0FQQUJJTElUWTsKKyAgICB3ZC0+YXAuRXh0SFRDYXAuRGF0YS5MZW5ndGggPSAyMjsKKyAgICB3ZC0+YXAuRXh0SFRDYXAuRGF0YS5Db250cm9sQ2hhbm5lbCA9IDY7CisgICAgLy93ZC0+YXAuRXh0SFRDYXAuRGF0YS5FeHRDaGFubmVsT2Zmc2V0ID0gMzsKKyAgICB3ZC0+YXAuRXh0SFRDYXAuRGF0YS5DaGFubmVsSW5mbyB8PSBFeHRIdENhcF9SZWNvbVR4V2lkdGhTZXQ7CisgICAgLy93ZC0+YXAuRXh0SFRDYXAuRGF0YS5SSUZTTW9kZSA9IDE7CisgICAgd2QtPmFwLkV4dEhUQ2FwLkRhdGEuT3BlcmF0aW5nSW5mbyB8PSAxOworCisgICAgLyogU1RBIE1vZGUqLworICAgIC8qIEluaXQgSFQgQ2FwYWJpbGl0eSBJbmZvICovCisgICAgd2QtPnN0YS5IVENhcC5EYXRhLkVsZW1lbnRJRCA9IFpNX1dMQU5fRUlEX0hUX0NBUEFCSUxJVFk7CisgICAgd2QtPnN0YS5IVENhcC5EYXRhLkxlbmd0aCA9IDI2OworCisgICAgLyogVGVzdCB3aXRoIDVHLUFQIDogNzYwMyAqLworICAgIC8vd2QtPnN0YS5IVENhcC5EYXRhLlN1cENoYW5uZWxXaWR0aFNldCA9IDE7CisgICAgd2QtPnN0YS5IVENhcC5EYXRhLkh0Q2FwSW5mbyB8PSBIVENBUF9TTUVuYWJsZWQ7CisgICAgd2QtPnN0YS5IVENhcC5EYXRhLkh0Q2FwSW5mbyB8PSBIVENBUF9TdXBDaGFubmVsV2lkdGhTZXQ7CisgICAgd2QtPnN0YS5IVENhcC5EYXRhLkh0Q2FwSW5mbyB8PSBIVENBUF9TaG9ydEdJZm9yNDBNSHo7CisgICAgd2QtPnN0YS5IVENhcC5EYXRhLkh0Q2FwSW5mbyB8PSBIVENBUF9EU1NTYW5kQ0NLaW40ME1IejsKKyNpZm5kZWYgWk1fRElTQUJMRV9BTVNEVThLX1NVUFBPUlQKKyAgICB3ZC0+c3RhLkhUQ2FwLkRhdGEuSHRDYXBJbmZvIHw9IEhUQ0FQX01heEFNU0RVTGVuZ3RoOworI2VuZGlmCisgICAgLy93ZC0+c3RhLkhUQ2FwLkRhdGEuTUlNT1Bvd2VyU2F2ZSA9IDA7CisgICAgLy93ZC0+c3RhLkhUQ2FwLkRhdGEuU2hvcnRHSWZvcjQwTUh6ID0gMDsKKyAgICAvL3dkLT5zdGEuSFRDYXAuRGF0YS5TaG9ydEdJZm9yMjBNSHogPSAwOworICAgIC8vd2QtPnN0YS5IVENhcC5EYXRhLkRTU1NhbmRDQ0tpbjQwTUh6ID0gMDsKKyAgICB3ZC0+c3RhLkhUQ2FwLkRhdGEuQU1QRFVQYXJhbSB8PSBIVENBUF9NYXhSeEFNUERVMzsKKyAgICB3ZC0+c3RhLkhUQ2FwLkRhdGEuTUNTU2V0WzBdID0gMHhGRjsgLy8gTUNTIDAgfiAgNworICAgIHdkLT5zdGEuSFRDYXAuRGF0YS5NQ1NTZXRbMV0gPSAweEZGOyAvLyBNQ1MgOCB+IDE1CisgICAgd2QtPnN0YS5IVENhcC5EYXRhLlBDTyB8PSBIVENBUF9UcmFuc21pc3Npb25UaW1lMzsKKyAgICAvL3dkLT5zdGEuSFRDYXAuRGF0YS5UcmFuc21pc3Npb25UaW1lID0gMDsKKyAgICAvKiBJbml0IEV4dGVuZGVkIEhUIENhcGFiaWxpdHkgSW5mbyAqLworICAgIHdkLT5zdGEuRXh0SFRDYXAuRGF0YS5FbGVtZW50SUQgPSBaTV9XTEFOX0VJRF9FWFRFTkRFRF9IVF9DQVBBQklMSVRZOworICAgIHdkLT5zdGEuRXh0SFRDYXAuRGF0YS5MZW5ndGggPSAyMjsKKyAgICB3ZC0+c3RhLkV4dEhUQ2FwLkRhdGEuQ29udHJvbENoYW5uZWwgPSA2OworCisgICAgLy93ZC0+c3RhLkV4dEhUQ2FwLkRhdGEuRXh0Q2hhbm5lbE9mZnNldCB8PSAzOworICAgIHdkLT5zdGEuRXh0SFRDYXAuRGF0YS5DaGFubmVsSW5mbyB8PSBFeHRIdENhcF9FeHRDaGFubmVsT2Zmc2V0QmVsb3c7CisKKyAgICAvL3dkLT5zdGEuRXh0SFRDYXAuRGF0YS5SZWNvbVR4V2lkdGhTZXQgPSAxOworICAgIC8vd2QtPnN0YS5FeHRIVENhcC5EYXRhLlJJRlNNb2RlID0gMTsKKyAgICB3ZC0+c3RhLkV4dEhUQ2FwLkRhdGEuT3BlcmF0aW5nSW5mbyB8PSAxOworI2VuZGlmCisKKyNpZiAwCisgICAgLyogV01FIHRlc3QgY29kZSAqLworICAgIHdkLT5hcC5xb3NNb2RlWzBdID0gMTsKKyNlbmRpZgorCisgICAgd2QtPmxlZFN0cnVjdC5sZWRNb2RlWzBdID0gMHgyMjIxOworICAgIHdkLT5sZWRTdHJ1Y3QubGVkTW9kZVsxXSA9IDB4MjIyMTsKKworICAgIHpmVGltZXJJbml0KGRldik7CisKKyAgICBaTV9QRVJGT1JNQU5DRV9JTklUKGRldik7CisKKyAgICB6ZkJzc0luZm9DcmVhdGUoZGV2KTsKKyAgICB6ZlNjYW5NZ3JJbml0KGRldik7CisgICAgemZQb3dlclNhdmluZ01nckluaXQoZGV2KTsKKworI2lmIDAKKyAgICAvKiBUZXN0IGNvZGUgKi8KKyAgICB7CisgICAgICAgIHUzMl90IGtleVs0XSA9IHsweGZmZmZmZmZmLCAweGZmLCAwLCAwfTsKKyAgICAgICAgdTE2X3QgYWRkclszXSA9IHsweDgwMDAsIDB4MDFhYiwgMHgwMDAwfTsKKyAgICAgICAgLy96ZlNldEtleShkZXYsIDAsIDAsIFpNX1dFUDY0LCBhZGRyLCBrZXkpOworICAgICAgICAvL3pmU2V0S2V5KGRldiwgMCwgMCwgWk1fQUVTLCBhZGRyLCBrZXkpOworICAgICAgICAvL3pmU2V0S2V5KGRldiwgNjQsIDAsIDEsIHdkLT5tYWNBZGRyLCBrZXkpOworICAgIH0KKyNlbmRpZgorCisgICAgLy8gV01FIHNldHRpbmdzCisgICAgd2QtPndzLnN0YVdtZUVuYWJsZWQgPSAxOyAgICAgICAgICAgLy8gRW5hYmxlIFdNRSBieSBkZWZhdWx0CisgICAgI2RlZmluZSBaTV9VQVBTRF9RX1NJWkUgMzIgLy8yXk4KKyAgICB3ZC0+YXAudWFwc2RRID0gemZRdWV1ZUNyZWF0ZShkZXYsIFpNX1VBUFNEX1FfU0laRSk7CisgICAgem1fYXNzZXJ0KHdkLT5hcC51YXBzZFEgIT0gTlVMTCk7CisgICAgd2QtPnN0YS51YXBzZFEgPSB6ZlF1ZXVlQ3JlYXRlKGRldiwgWk1fVUFQU0RfUV9TSVpFKTsKKyAgICB6bV9hc3NlcnQod2QtPnN0YS51YXBzZFEgIT0gTlVMTCk7CisKKyAgICAvL3pmSHBJbml0KGRldiwgd2QtPmZyZXF1ZW5jeSk7CisKKyAgICAvKiBNQUMgYWRkcmVzcyAqLworICAgIC8vemZIcFNldE1hY0FkZHJlc3MoZGV2LCB3ZC0+bWFjQWRkciwgMCk7CisgICAgemZIcEdldE1hY0FkZHJlc3MoZGV2KTsKKworICAgIHpmQ29yZVNldEZyZXF1ZW5jeShkZXYsIHdkLT5mcmVxdWVuY3kpOworCisjaWYgWk1fUENJX0xPT1BfQkFDSyA9PSAxCisgICAgemZ3V3JpdGVSZWcoZGV2LCBaTV9SRUdfUENJX0NPTlRST0wsIDYpOworI2VuZGlmIC8qICNpZiBaTV9QQ0lfTE9PUF9CQUNLID09IDEgKi8KKworICAgIC8vemZpV2xhblNldERvdDExRE1vZGUoZGV2ICwgMSk7IC8vIEVuYWJsZSA4MDIuMTFkCisgICAgLy96ZmlXbGFuU2V0RG90MTFIREZTTW9kZShkZXYgLCAxKTsgLy8gRW5hYmxlIDgwMi4xMWggREZTCisgICAgd2QtPnN0YS5ERlNFbmFibGUgPSAxOworICAgIHdkLT5zdGEuY2FwYWJpbGl0eVsxXSB8PSBaTV9CSVRfMDsKKworICAgIC8vemZpV2xhblNldEZyZXF1ZW5jeShkZXYsIDUyNjAwMDAsIFRSVUUpOworICAgIC8vemZpV2xhblNldEFuaU1vZGUoZGV2ICwgMSk7IC8vIEVuYWJsZSBBTkkKKworICAgIC8qIFRyZ2dlciBSeCBETUEgKi8KKyAgICB6ZkhwU3RhcnRSZWN2KGRldik7CisKKyAgICB6bV9kZWJ1Z19tc2cwKCJlbmQiKTsKKworICAgIHJldHVybiAwOworfQorCisvKiBXTEFOIGhhcmR3YXJlIHdpbGwgYmUgc2h1dGRvd24gYW5kIGFsbCByZXNvdXJjZSB3aWxsIGJlIHJlbGVhc2UgKi8KK3UxNl90IHpmaVdsYW5DbG9zZSh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bV9tc2cwX2luaXQoWk1fTFZfMCwgImVudGVyIik7CisKKyAgICB3ZC0+c3RhdGUgPSBaTV9XTEFOX1NUQVRFX0NMT1NFREVEOworCisgICAgLy96ZmlXbGFuRGlzYWJsZShkZXYsIDEpOworICAgIHpmV2xhblJlc2V0KGRldik7CisKKyAgICB6ZkhwU3RvcFJlY3YoZGV2KTsKKworICAgIC8qIERpc2FibGUgTUFDICovCisgICAgLyogRGlzYWJsZSBQSFkgKi8KKyAgICAvKiBEaXNhYmxlIFJGICovCisKKyAgICB6ZkhwUmVsZWFzZShkZXYpOworCisgICAgemZRdWV1ZURlc3Ryb3koZGV2LCB3ZC0+YXAudWFwc2RRKTsKKyAgICB6ZlF1ZXVlRGVzdHJveShkZXYsIHdkLT5zdGEudWFwc2RRKTsKKworICAgIHpmQnNzSW5mb0Rlc3Ryb3koZGV2KTsKKworI2lmZGVmIFpNX0VOQUJMRV9BR0dSRUdBVElPTgorICAgIC8qIGFkZCBieSBob25kYSAqLworICAgIHpmQWdnUnhGcmVlQnVmKGRldiwgMSk7ICAvLzEgZm9yIHJlbGVhc2Ugc3RydWN0dXJlIG1lbW9yeQorICAgIC8qIGVuZCBvZiBhZGQgYnkgaG9uZGEgKi8KKyNlbmRpZgorCisgICAgem1fbXNnMF9pbml0KFpNX0xWXzAsICJleGl0Iik7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCB6ZkdldFdyYXBwZXJTZXR0aW5nKHpkZXZfdCogZGV2KQoreworICAgIHU4X3QgICBiUGFzc2l2ZTsKKyAgICB1MTZfdCB2YXBJZCA9IDA7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworI2lmIDAKKyAgICBpZiAoICh3ZC0+d3MuY291bnRyeUlzb05hbWVbMF0gIT0gMCkKKyAgICAgICAgIHx8ICh3ZC0+d3MuY291bnRyeUlzb05hbWVbMV0gIT0gMCkKKyAgICAgICAgIHx8ICh3ZC0+d3MuY291bnRyeUlzb05hbWVbMl0gIT0gJ1wwJykgKQorICAgIHsKKyAgICAgICAgemZIcEdldFJlZ3VsYXRpb25UYWJsZWZyb21SZWdpb25Db2RlKAorICAgICAgICAgICAgZGV2LAorICAgICAgICAgICAgemZIcEdldFJlZ2lvbkNvZGVGcm9tSXNvTmFtZShkZXYsIHdkLT53cy5jb3VudHJ5SXNvTmFtZSkgKTsKKyAgICB9CisjZW5kaWYKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgd2QtPndsYW5Nb2RlID0gd2QtPndzLndsYW5Nb2RlOworCisgICAgLyogc2V0IGNoYW5uZWwgKi8KKyAgICBpZiAoIHdkLT53cy5mcmVxdWVuY3kgKQorICAgIHsKKyAgICAgICAgd2QtPmZyZXF1ZW5jeSA9IHdkLT53cy5mcmVxdWVuY3k7CisgICAgICAgIHdkLT53cy5mcmVxdWVuY3kgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB3ZC0+ZnJlcXVlbmN5ID0gemZDaEdldEZpcnN0Q2hhbm5lbChkZXYsICZiUGFzc2l2ZSk7CisKKyAgICAgICAgaWYgKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JQlNTICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdkLT53cy5hZGhvY01vZGUgPT0gWk1fQURIT0NCQU5EX0EpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPmZyZXF1ZW5jeSA9IFpNX0NIX0FfMzY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICB3ZC0+ZnJlcXVlbmN5ID0gWk1fQ0hfR182OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2lmZGVmIFpNX0FQX0RFQlVHCisgICAgLyogaG9uZGEgYWRkIGZvciBkZWJ1ZywgMjQzNyBjaGFubmVsIDYsIDI0NTIgY2hhbm5lbCA5ICovCisgICAgd2QtPmZyZXF1ZW5jeSA9IDI0Mzc7CisgICAgLyogZW5kIG9mIGFkZCBieSBob25kYSAqLworI2VuZGlmCisKKyAgICAvKiBzZXQgcHJlYW1ibGUgdHlwZSAqLworICAgIHN3aXRjaCAod2QtPndzLnByZWFtYmxlVHlwZSkKKyAgICB7CisgICAgY2FzZSBaTV9QUkVBTUJMRV9UWVBFX0FVVE86CisgICAgY2FzZSBaTV9QUkVBTUJMRV9UWVBFX1NIT1JUOgorICAgIGNhc2UgWk1fUFJFQU1CTEVfVFlQRV9MT05HOgorICAgICAgICB3ZC0+cHJlYW1ibGVUeXBlID0gd2QtPndzLnByZWFtYmxlVHlwZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgd2QtPnByZWFtYmxlVHlwZSA9IFpNX1BSRUFNQkxFX1RZUEVfU0hPUlQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB3ZC0+d3MucHJlYW1ibGVUeXBlID0gMDsKKworICAgIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfQVAgKQorICAgIHsKKyAgICAgICAgdmFwSWQgPSB6ZndHZXRWYXBJZChkZXYpOworCisgICAgICAgIGlmICh2YXBJZCA9PSAweGZmZmYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdkLT5hcC5hdXRoQWxnb1swXSA9IHdkLT53cy5hdXRoTW9kZTsKKyAgICAgICAgICAgIHdkLT5hcC5lbmNyeU1vZGVbMF0gPSB3ZC0+d3MuZW5jcnlNb2RlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPmFwLmF1dGhBbGdvW3ZhcElkICsgMV0gPSB3ZC0+d3MuYXV0aE1vZGU7CisgICAgICAgICAgICB3ZC0+YXAuZW5jcnlNb2RlW3ZhcElkICsgMV0gPSB3ZC0+d3MuZW5jcnlNb2RlOworICAgICAgICB9CisgICAgICAgIHdkLT53cy5hdXRoTW9kZSA9IDA7CisgICAgICAgIHdkLT53cy5lbmNyeU1vZGUgPSBaTV9OT19XRVA7CisKKyAgICAgICAgLyogR2V0IGJlYWNvbkludGVydmFsIGZyb20gV3JhcHBlclNldHRpbmcgKi8KKyAgICAgICAgaWYgKCh3ZC0+d3MuYmVhY29uSW50ZXJ2YWwgPj0gMjApICYmICh3ZC0+d3MuYmVhY29uSW50ZXJ2YWwgPD0gMTAwMCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdkLT5iZWFjb25JbnRlcnZhbCA9IHdkLT53cy5iZWFjb25JbnRlcnZhbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHdkLT5iZWFjb25JbnRlcnZhbCA9IDEwMDsgLy8xMDBtcworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdkLT53cy5kdGltID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPmR0aW0gPSB3ZC0+d3MuZHRpbTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHdkLT5kdGltID0gMTsKKyAgICAgICAgfQorCisgICAgICAgIHdkLT5hcC5xb3NNb2RlID0gd2QtPndzLmFwV21lRW5hYmxlZCAmIDB4MTsKKyAgICAgICAgd2QtPmFwLnVhcHNkRW5hYmxlZCA9ICh3ZC0+d3MuYXBXbWVFbmFibGVkICYgMHgyKSA+PiAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB3ZC0+c3RhLmF1dGhNb2RlID0gd2QtPndzLmF1dGhNb2RlOworICAgICAgICB3ZC0+c3RhLmN1cnJlbnRBdXRoTW9kZSA9IHdkLT53cy5hdXRoTW9kZTsKKyAgICAgICAgd2QtPnN0YS53ZXBTdGF0dXMgPSB3ZC0+d3Mud2VwU3RhdHVzOworCisgICAgICAgIGlmICggd2QtPndzLmJlYWNvbkludGVydmFsICkKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPmJlYWNvbkludGVydmFsID0gd2QtPndzLmJlYWNvbkludGVydmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPmJlYWNvbkludGVydmFsID0gMHg2NDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfSUJTUyApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIDEuIFNldCBkZWZhdWx0IGNoYW5uZWwgNiAoMjQzN01IeikgKi8KKy8vICAgICAgICAgICAgd2QtPmZyZXF1ZW5jeSA9IDI0Mzc7CisKKyAgICAgICAgICAgIC8qIDIuIE90dXMgc3VwcG9ydCA4MDIuMTFnIE1vZGUgKi8KKyAgICAgICAgICAgIGlmICgod2QtPndzLmFkaG9jTW9kZSA9PSBaTV9BREhPQ0JBTkRfRykgfHwKKyAgICAgICAgICAgICAgICAod2QtPndzLmFkaG9jTW9kZSA9PSBaTV9BREhPQ0JBTkRfQkcpIHx8CisgICAgICAgICAgICAgICAgKHdkLT53cy5hZGhvY01vZGUgPT0gWk1fQURIT0NCQU5EX0FCRykgKSB7CisgICAgICAgICAgICAgICAgd2QtPndmYy5iSWJzc0dNb2RlID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd2QtPndmYy5iSWJzc0dNb2RlID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogMy4gc2V0IHNob3J0IHByZWFtYmxlICAqLworICAgICAgICAgICAgLy93ZC0+c3RhLnByZWFtYmxlVHlwZSA9IFpNX1BSRUFNQkxFX1RZUEVfU0hPUlQgOworICAgICAgICB9CisKKyAgICAgICAgLyogc2V0IEFUSU0gd2luZG93ICovCisgICAgICAgIGlmICggd2QtPndzLmF0aW1XaW5kb3cgKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+c3RhLmF0aW1XaW5kb3cgPSB3ZC0+d3MuYXRpbVdpbmRvdzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vd2QtPnN0YS5hdGltV2luZG93ID0gMHgwYTsKKyAgICAgICAgICAgIHdkLT5zdGEuYXRpbVdpbmRvdyA9IDA7CisgICAgICAgIH0KKworICAgICAgICAvL3dkLT5zdGEuY29ubmVjdGluZ0hpZGRlbkFQID0gMTsvL3dkLT53cy5jb25uZWN0aW5nSGlkZGVuQVA7CisgICAgICAgIHdkLT5zdGEuZHJvcFVuZW5jcnlwdGVkUGt0cyA9IHdkLT53cy5kcm9wVW5lbmNyeXB0ZWRQa3RzOworICAgICAgICB3ZC0+c3RhLmlic3NKb2luT25seSA9IHdkLT53cy5pYnNzSm9pbk9ubHk7CisKKyAgICAgICAgaWYgKCB3ZC0+d3MuYkRlc2lyZWRCc3NpZCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmTWVtb3J5Q29weSh3ZC0+c3RhLmRlc2lyZWRCc3NpZCwgd2QtPndzLmRlc2lyZWRCc3NpZCwgNik7CisgICAgICAgICAgICB3ZC0+c3RhLmJEZXNpcmVkQnNzaWQgPSBUUlVFOworICAgICAgICAgICAgd2QtPndzLmJEZXNpcmVkQnNzaWQgPSBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHdkLT5zdGEuYkRlc2lyZWRCc3NpZCA9IEZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgLyogY2hlY2sgc3NpZCAqLworICAgICAgICBpZiAoIHdkLT53cy5zc2lkTGVuICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoICghemZNZW1vcnlJc0VxdWFsKHdkLT53cy5zc2lkLCB3ZC0+c3RhLnNzaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuc3NpZExlbikpfHwKKyAgICAgICAgICAgICAgICAgKHdkLT53cy5zc2lkTGVuICE9IHdkLT5zdGEuc3NpZExlbil8fAorICAgICAgICAgICAgICAgICAod2QtPnN0YS5hdXRoTW9kZSA9PSBaTV9BVVRIX01PREVfV1BBKXx8CisgICAgICAgICAgICAgICAgICh3ZC0+c3RhLmF1dGhNb2RlID09IFpNX0FVVEhfTU9ERV9XUEFQU0spIHx8CisgICAgICAgICAgICAgICAgICh3ZC0+d3Muc3RhV21lUW9zSW5mbyE9IDApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKmlmIHUtQVBTRCB0ZXN0KHNldCBRb3NJbmZvKSwgY2xlYXIgY29ubmVjdEJ5UmVhc3NvIHRvIGRvIGFzc29jaWF0aW9uIChub3QgcmVhc3NvY2lhdGlvbikqLworICAgICAgICAgICAgICAgIHdkLT5zdGEuY29ubmVjdEJ5UmVhc3NvID0gRkFMU0U7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5mYWlsQ250T2ZSZWFzc28gPSAwOworICAgICAgICAgICAgICAgIHdkLT5zdGEucG1raWRJbmZvLmJzc2lkQ291bnQgPSAwOworCisgICAgICAgICAgICAgICAgd2QtPnN0YS5zc2lkTGVuID0gd2QtPndzLnNzaWRMZW47CisgICAgICAgICAgICAgICAgemZNZW1vcnlDb3B5KHdkLT5zdGEuc3NpZCwgd2QtPndzLnNzaWQsIHdkLT5zdGEuc3NpZExlbik7CisKKyAgICAgICAgICAgICAgICBpZiAoIHdkLT5zdGEuc3NpZExlbiA8IDMyICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuc3NpZFt3ZC0+c3RhLnNzaWRMZW5dID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7ICAgLyogQU5ZIEJTUyAqLworICAgICAgICAgICAgd2QtPnN0YS5zc2lkWzBdID0gMDsKKyAgICAgICAgICAgIHdkLT5zdGEuc3NpZExlbiA9IDA7CisgICAgICAgIH0KKworICAgICAgICB3ZC0+c3RhLndtZUVuYWJsZWQgPSB3ZC0+d3Muc3RhV21lRW5hYmxlZDsKKyAgICAgICAgd2QtPnN0YS53bWVRb3NJbmZvID0gd2QtPndzLnN0YVdtZVFvc0luZm87CisKKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworfQorCit1MTZfdCB6ZldsYW5FbmFibGUoemRldl90KiBkZXYpCit7CisgICAgdThfdCAgICAgYnNzaWRbNl0gPSB7MHgwLCAweDAsIDB4MCwgMHgwLCAweDAsIDB4MH07CisgICAgdTE2X3QgaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX1VOS05PV04gKQorICAgIHsKKyAgICAgICAgem1fZGVidWdfbXNnMCgiVW5rbm93biBNb2RlLi4uU2tpcC4uLiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApCisgICAgeworICAgICAgICB1MTZfdCB2YXBJZDsKKworICAgICAgICB2YXBJZCA9IHpmd0dldFZhcElkKGRldik7CisKKyAgICAgICAgaWYgKHZhcElkID09IDB4ZmZmZikKKyAgICAgICAgeworICAgICAgICAgICAgLyogQVAgbW9kZSAqLworICAgICAgICAgICAgemZBcEluaXRTdGFUYmwoZGV2KTsKKworICAgICAgICAgICAgLyogQVAgZGVmYXVsdCBwYXJhbWV0ZXJzICovCisgICAgICAgICAgICB3ZC0+YlJhdGUgPSAweGY7CisgICAgICAgICAgICB3ZC0+Z1JhdGUgPSAweGZmOworICAgICAgICAgICAgd2QtPmJSYXRlQmFzaWMgPSAweGY7CisgICAgICAgICAgICB3ZC0+Z1JhdGVCYXNpYyA9IDB4MDsKKyAgICAgICAgICAgIC8vd2QtPmJlYWNvbkludGVydmFsID0gMTAwOworICAgICAgICAgICAgd2QtPmFwLmFwQml0bWFwID0gMTsKKyAgICAgICAgICAgIHdkLT5hcC5iZWFjb25Db3VudGVyID0gMDsKKyAgICAgICAgICAgIC8vd2QtPmFwLnZhcE51bWJlciA9IDE7ICAgIC8vbWFyayBieSB5Z3dlaSBmb3IgVmFwCisKKyAgICAgICAgICAgIHdkLT5hcC5oaWRlU3NpZFswXSA9IDA7CisgICAgICAgICAgICB3ZC0+YXAuc3RhQWdpbmdUaW1lU2VjID0gMTAqNjA7CisgICAgICAgICAgICB3ZC0+YXAuc3RhUHJvYmluZ1RpbWVTZWMgPSA2MDsKKworICAgICAgICAgICAgZm9yIChpPTA7IGk8Wk1fTUFYX0FQX1NVUFBPUlQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+YXAuYmNtY0hlYWRbaV0gPSB3ZC0+YXAuYmNtY1RhaWxbaV0gPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvL3dkLT5hcC51bmlIZWFkID0gd2QtPmFwLnVuaVRhaWwgPSAwOworCisgICAgICAgICAgICAvKiBsb2FkIEFQIHBhcmFtZXRlcnMgKi8KKyAgICAgICAgICAgIHdkLT5iUmF0ZUJhc2ljID0gd2QtPndzLmJSYXRlQmFzaWM7CisgICAgICAgICAgICB3ZC0+Z1JhdGVCYXNpYyA9IHdkLT53cy5nUmF0ZUJhc2ljOworICAgICAgICAgICAgd2QtPmJnTW9kZSA9IHdkLT53cy5iZ01vZGU7CisgICAgICAgICAgICBpZiAoKHdkLT53cy5zc2lkTGVuIDw9IDMyKSAmJiAod2QtPndzLnNzaWRMZW4gIT0gMCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPmFwLnNzaWRMZW5bMF0gPSB3ZC0+d3Muc3NpZExlbjsKKyAgICAgICAgICAgICAgICBmb3IoaT0wOyBpPHdkLT53cy5zc2lkTGVuOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3ZC0+YXAuc3NpZFswXVtpXSA9IHdkLT53cy5zc2lkW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3ZC0+d3Muc3NpZExlbiA9IDA7IC8vIFJlc2V0IFdyYXBwZXIgVmFyaWFibGUKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdkLT5hcC5lbmNyeU1vZGVbMF0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+YXAuY2FwYWJbMF0gPSAweDAwMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+YXAuY2FwYWJbMF0gPSAweDAxMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIHNldCBTaG9ydCBTbG90IFRpbWUgYml0IGlmIG5vdCAxMWIgKi8KKyAgICAgICAgICAgIGlmICh3ZC0+YXAud2xhblR5cGVbMF0gIT0gWk1fV0xBTl9UWVBFX1BVUkVfQikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgd2QtPmFwLmNhcGFiWzBdIHw9IDB4NDAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB3ZC0+YXAudmFwTnVtYmVyID0gMTsgICAgLy8gbWFyayBieSB5Z3dlaSBmb3IgVmFwIFRlc3QKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyNpZiAwCisgICAgICAgICAgICAvKiBWQVAgVGVzdCBDb2RlICovCisgICAgICAgICAgICB3ZC0+YXAuYXBCaXRtYXAgPSAweDM7CisgICAgICAgICAgICB3ZC0+YXAuY2FwYWJbMV0gPSAweDQwMTsKKyAgICAgICAgICAgIHdkLT5hcC5zc2lkTGVuWzFdID0gNDsKKyAgICAgICAgICAgIHdkLT5hcC5zc2lkWzFdWzBdID0gJ3YnOworICAgICAgICAgICAgd2QtPmFwLnNzaWRbMV1bMV0gPSAnYSc7CisgICAgICAgICAgICB3ZC0+YXAuc3NpZFsxXVsyXSA9ICdwJzsKKyAgICAgICAgICAgIHdkLT5hcC5zc2lkWzFdWzNdID0gJzEnOworICAgICAgICAgICAgd2QtPmFwLmF1dGhBbGdvWzFdID0gd2QtPndzLmF1dGhNb2RlOworICAgICAgICAgICAgd2QtPmFwLmVuY3J5TW9kZVsxXSA9IHdkLT53cy5lbmNyeU1vZGU7CisgICAgICAgICAgICB3ZC0+YXAudmFwTnVtYmVyID0gMjsKKyNlbHNlCisgICAgICAgICAgICAvKiBWQVAgVGVzdCBDb2RlICovCisgICAgICAgICAgICB3ZC0+YXAuYXBCaXRtYXAgPSAweDEgfCAoMHgwMSA8PCAodmFwSWQrMSkpOworCisgICAgICAgICAgICBpZiAoKHdkLT53cy5zc2lkTGVuIDw9IDMyKSAmJiAod2QtPndzLnNzaWRMZW4gIT0gMCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPmFwLnNzaWRMZW5bdmFwSWQrMV0gPSB3ZC0+d3Muc3NpZExlbjsKKyAgICAgICAgICAgICAgICBmb3IoaT0wOyBpPHdkLT53cy5zc2lkTGVuOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3ZC0+YXAuc3NpZFt2YXBJZCsxXVtpXSA9IHdkLT53cy5zc2lkW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3ZC0+d3Muc3NpZExlbiA9IDA7IC8vIFJlc2V0IFdyYXBwZXIgVmFyaWFibGUKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdkLT5hcC5lbmNyeU1vZGVbdmFwSWQrMV0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+YXAuY2FwYWJbdmFwSWQrMV0gPSAweDQwMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+YXAuY2FwYWJbdmFwSWQrMV0gPSAweDQxMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2QtPmFwLmF1dGhBbGdvW3ZhcElkKzFdID0gd2QtPndzLmF1dGhNb2RlOworICAgICAgICAgICAgd2QtPmFwLmVuY3J5TW9kZVt2YXBJZCsxXSA9IHdkLT53cy5lbmNyeU1vZGU7CisKKyAgICAgICAgICAgIC8qIE5lZWQgdG8gYmUgbW9kaWZpZWQgd2hlbiBWQVAgaXMgdXNlZCAqLworICAgICAgICAgICAgLy93ZC0+YXAudmFwTnVtYmVyID0gMjsKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgd2QtPmFwLnZhcE51bWJlcisrOworCisgICAgICAgIHpmQ29yZVNldEZyZXF1ZW5jeShkZXYsIHdkLT5mcmVxdWVuY3kpOworCisgICAgICAgIHpmSW5pdE1hY0FwTW9kZShkZXYpOworCisgICAgICAgIC8qIERpc2FibGUgcHJvdGVjdGlvbiBtb2RlICovCisgICAgICAgIHpmQXBTZXRQcm90ZWN0aW9uTW9kZShkZXYsIDApOworCisgICAgICAgIHpmQXBTZW5kQmVhY29uKGRldik7CisgICAgfSAvKmlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCkgKi8KKyAgICBlbHNlCisgICAgeworICAgICAgICB6ZlNjYW5NZ3JTY2FuU3RvcChkZXYsIFpNX1NDQU5fTUdSX1NDQU5fSU5URVJOQUwpOworICAgICAgICB6ZlNjYW5NZ3JTY2FuU3RvcChkZXYsIFpNX1NDQU5fTUdSX1NDQU5fRVhURVJOQUwpOworCisgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHdkLT5zdGEub3Bwb3NpdGVDb3VudCA9IDA7ICAgIC8qIHJlc2V0IG9wcG9zaXRlIGNvdW50ICovCisgICAgICAgIC8vd2QtPnN0YS5iQXV0b1JlY29ubmVjdCA9IHdkLT5zdGEuYkF1dG9SZWNvbm5lY3RFbmFibGVkOworICAgICAgICAvL3dkLT5zdGEuc2NhbldpdGhTU0lEID0gMDsKKyAgICAgICAgemZTdGFJbml0T3Bwb3NpdGVJbmZvKGRldik7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgemZTdGFSZXNldFN0YXR1cyhkZXYsIDApOworCisgICAgICAgIGlmICggKHdkLT5zdGEuY21EaXNhbGxvd1NzaWRMZW5ndGggIT0gMCkmJgorICAgICAgICAgICAgICh3ZC0+c3RhLnNzaWRMZW4gPT0gd2QtPnN0YS5jbURpc2FsbG93U3NpZExlbmd0aCkmJgorICAgICAgICAgICAgICh6Zk1lbW9yeUlzRXF1YWwod2QtPnN0YS5zc2lkLCB3ZC0+c3RhLmNtRGlzYWxsb3dTc2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5zc2lkTGVuKSkgJiYKKyAgICAgICAgICAgICAod2QtPnN0YS53ZXBTdGF0dXMgPT0gWk1fRU5DUllQVElPTl9US0lQKSkKKyAgICAgICAgeyAgIC8qIGNvdW50ZXJtZWFzdXJlcyAqLworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiY291bnRlcm1lYXN1cmVzIGRpc2FsbG93IGFzc29jaWF0aW9uIik7CisKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCggd2QtPndsYW5Nb2RlICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFpNX01PREVfSUJTUzoKKyAgICAgICAgICAgICAgICAgICAgLyogc29tZSByZWdpc3RlcnMgbWF5IGJlIHNldCBoZXJlICovCisgICAgICAgICAgICAgICAgICAgIGlmICggd2QtPnN0YS5hdXRoTW9kZSA9PSBaTV9BVVRIX01PREVfV1BBMlBTSyApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHpmSHBTZXRBcFN0YU1vZGUoZGV2LCBaTV9IQUxfODAyMTFfTU9ERV9JQlNTX1dQQTJQU0spOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgemZIcFNldEFwU3RhTW9kZShkZXYsIFpNX0hBTF84MDIxMV9NT0RFX0lCU1NfR0VORVJBTCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB6bV9tc2cwX21tKFpNX0xWXzAsICJaTV9NT0RFX0lCU1MiKTsKKyAgICAgICAgICAgICAgICAgICAgemZJYnNzQ29ubmVjdE5ldHdvcmsoZGV2KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFpNX01PREVfSU5GUkFTVFJVQ1RVUkU6CisgICAgICAgICAgICAgICAgICAgIC8qIHNvbWUgcmVnaXN0ZXJzIG1heSBiZSBzZXQgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICB6ZkhwU2V0QXBTdGFNb2RlKGRldiwgWk1fSEFMXzgwMjExX01PREVfU1RBKTsKKworICAgICAgICAgICAgICAgICAgICB6ZkluZnJhQ29ubmVjdE5ldHdvcmsoZGV2KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFpNX01PREVfUFNFVURPOgorICAgICAgICAgICAgICAgICAgICAvKiBzb21lIHJlZ2lzdGVycyBtYXkgYmUgc2V0IGhlcmUgKi8KKyAgICAgICAgICAgICAgICAgICAgemZIcFNldEFwU3RhTW9kZShkZXYsIFpNX0hBTF84MDIxMV9NT0RFX1NUQSk7CisKKyAgICAgICAgICAgICAgICAgICAgemZVcGRhdGVCc3NpZChkZXYsIGJzc2lkKTsKKyAgICAgICAgICAgICAgICAgICAgemZDb3JlU2V0RnJlcXVlbmN5KGRldiwgd2QtPmZyZXF1ZW5jeSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0KKworCisgICAgLy9pZiAoICh3ZC0+d2xhbk1vZGUgIT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSkmJgorICAgIC8vICAgICAod2QtPndsYW5Nb2RlICE9IFpNX01PREVfQVApICkKKyAgICBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX1BTRVVETyApCisgICAgeworICAgICAgICAvKiBSZXNldCBXbGFuIHN0YXR1cyAqLworICAgICAgICB6ZldsYW5SZXNldChkZXYpOworCisgICAgICAgIGlmICh3ZC0+emZjYkNvbm5lY3ROb3RpZnkgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPnpmY2JDb25uZWN0Tm90aWZ5KGRldiwgWk1fU1RBVFVTX01FRElBX0NPTk5FQ1QsIHdkLT5zdGEuYnNzaWQpOworICAgICAgICB9CisgICAgICAgIHpmQ2hhbmdlQWRhcHRlclN0YXRlKGRldiwgWk1fU1RBX1NUQVRFX0NPTk5FQ1RFRCk7CisgICAgfQorCisKKyAgICBpZih3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCkKKyAgICB7CisgICAgICAgIGlmICh3ZC0+emZjYkNvbm5lY3ROb3RpZnkgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPnpmY2JDb25uZWN0Tm90aWZ5KGRldiwgWk1fU1RBVFVTX01FRElBX0NPTk5FQ1QsIHdkLT5zdGEuYnNzaWQpOworICAgICAgICB9CisgICAgICAgIC8vemZDaGFuZ2VBZGFwdGVyU3RhdGUoZGV2LCBaTV9TVEFfU1RBVEVfQ09OTkVDVEVEKTsKKyAgICB9CisKKyAgICAvLyBBc3NpZ24gZGVmYXVsdCBUeCBSYXRlCisgICAgaWYgKCB3ZC0+c3RhLkVuYWJsZUhUICkKKyAgICB7CisJCXUzMl90IG9uZVR4U3RyZWFtQ2FwOworCQlvbmVUeFN0cmVhbUNhcCA9ICh6ZkhwQ2FwYWJpbGl0eShkZXYpICYgWk1fSFBfQ0FQXzExTl9PTkVfVFhfU1RSRUFNKTsKKwkJaWYob25lVHhTdHJlYW1DYXApCisJCQl3ZC0+Q3VycmVudFR4UmF0ZUticHMgPSAxMzUwMDA7CisJCWVsc2UKKwkJCXdkLT5DdXJyZW50VHhSYXRlS2JwcyA9IDI3MDAwMDsKKyAgICAgICAgd2QtPkN1cnJlbnRSeFJhdGVLYnBzID0gMjcwMDAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB3ZC0+Q3VycmVudFR4UmF0ZUticHMgPSA1NDAwMDsKKyAgICAgICAgd2QtPkN1cnJlbnRSeFJhdGVLYnBzID0gNTQwMDA7CisgICAgfQorCisgICAgd2QtPnN0YXRlID0gWk1fV0xBTl9TVEFURV9FTkFCTEVEOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIEVuYWJsZS9kaXNhYmxlIFdsYW4gb3BlcmF0aW9uICovCit1MTZfdCB6ZmlXbGFuRW5hYmxlKHpkZXZfdCogZGV2KQoreworICAgIHUxNl90IHJldDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptX21zZzBfbW0oWk1fTFZfMSwgIkVuYWJsZSBXbGFuIik7CisKKyAgICB6ZkdldFdyYXBwZXJTZXR0aW5nKGRldik7CisKKyAgICB6Zlplcm9NZW1vcnkoKHU4X3QqKSAmd2QtPnRyYWZUYWxseSwgc2l6ZW9mKHN0cnVjdCB6c1RyYWZUYWxseSkpOworCisgICAgLy8gUmVzZXQgY21NaWNGYWlsdXJlQ291bnQgdG8gMCBmb3IgbmV3IGFzc29jaWF0aW9uIHJlcXVlc3QKKyAgICBpZiAoIHdkLT5zdGEuY21NaWNGYWlsdXJlQ291bnQgPT0gMSApCisgICAgeworICAgICAgICB6ZlRpbWVyQ2FuY2VsKGRldiwgWk1fRVZFTlRfQ01fVElNRVIpOworICAgICAgICB3ZC0+c3RhLmNtTWljRmFpbHVyZUNvdW50ID0gMDsKKyAgICB9CisKKyAgICB6ZkZsdXNoVnR4cShkZXYpOworICAgIGlmICgod2QtPnF1ZXVlRmx1c2hlZCAmIDB4MTApICE9IDApCisgICAgeworICAgICAgICB6ZkhwVXNiUmVzZXQoZGV2KTsKKyAgICB9CisgICAgcmV0ID0gemZXbGFuRW5hYmxlKGRldik7CisKKyAgICByZXR1cm4gcmV0OworfQorLyogQWRkIGEgZmxhZyBuYW1lZCBSZXNldEtleUNhY2hlIHRvIHNob3cgaWYgS2V5Q2FjaGUgc2hvdWxkIGJlIGNsZWFyZWQuCisgICBmb3IgaG9zdGFwZCBpbiBBUCBtb2RlLCBpZiBkcml2ZXIgcmVjZWl2ZXMgaXdjb25maWcgaW9jdGwKKyAgIGFmdGVyIHNldHRpbmcgZ3JvdXAga2V5LCBpdCBzaG91bGRuJ3QgY2xlYXIgS2V5Q2FjaGUuICAgICAgICAgICAgICAgICAqLwordTE2X3QgemZpV2xhbkRpc2FibGUoemRldl90KiBkZXYsIHU4X3QgUmVzZXRLZXlDYWNoZSkKK3sKKyAgICB1MTZfdCAgaTsKKyAgICB1OF90IGlzQ29ubmVjdGVkOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisjaWZkZWYgWk1fRU5BQkxFX0lCU1NfV1BBMlBTSworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisjZW5kaWYKKyAgICB3ZC0+c3RhdGUgPSBaTV9XTEFOX1NUQVRFX0RJU0FCTEVEOworCisgICAgem1fbXNnMF9tbShaTV9MVl8xLCAiRGlzYWJsZSBXbGFuIik7CisKKyAgICBpZiAoIHdkLT53bGFuTW9kZSAhPSBaTV9NT0RFX0FQICkKKyAgICB7CisgICAgICAgIGlzQ29ubmVjdGVkID0gemZTdGFJc0Nvbm5lY3RlZChkZXYpOworCisgICAgICAgIGlmICggKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFKSYmCisgICAgICAgICAgICAgKHdkLT5zdGEuY3VycmVudEF1dGhNb2RlICE9IFpNX0FVVEhfTU9ERV9XUEEyKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHNlbmQgZGVhdXRoZW50aWNhdGlvbiBmcmFtZSAqLworICAgICAgICAgICAgaWYgKGlzQ29ubmVjdGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vemZpV2xhbkRlYXV0aChkZXYsIE5VTEwsIDApOworICAgICAgICAgICAgICAgIHpmU2VuZE1tRnJhbWUoZGV2LCBaTV9XTEFOX0ZSQU1FX1RZUEVfREVBVVRILCB3ZC0+c3RhLmJzc2lkLCAzLCAwLCAwKTsKKyAgICAgICAgICAgICAgICAvL3ptd19kZWJ1Z19tc2cwKCJzZW5kIGEgRGVhdXRoIGZyYW1lISIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gUmVtb3ZlIGFsbCB0aGUgY29ubmVjdGVkIHBlZXIgc3RhdGlvbnMKKyAgICAgICAgaWYgKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JQlNTICkKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPnN0YS5pYnNzQnNzSXNDcmVhdG9yID0gMDsKKyAgICAgICAgICAgIHpmVGltZXJDYW5jZWwoZGV2LCBaTV9FVkVOVF9JQlNTX01PTklUT1IpOworICAgICAgICAgICAgemZTdGFJYnNzTW9uaXRvcmluZyhkZXYsIDEpOworICAgICAgICB9CisKKyNpZmRlZiBaTV9FTkFCTEVfSUJTU19XUEEyUFNLCisgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHdkLT5zdGEuaWJzc1dwYTJQc2sgPSAwOworICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworI2VuZGlmCisKKyAgICAgICAgd2QtPnN0YS53cGFTdGF0ZSA9IFpNX1NUQV9XUEFfU1RBVEVfSU5JVDsKKworICAgICAgICAvKiByZXNldCBjb25uZWN0IHRpbWVvdXQgY291bnRlciAqLworICAgICAgICB3ZC0+c3RhLmNvbm5lY3RUaW1lb3V0Q291bnQgPSAwOworCisgICAgICAgIC8qIHJlc2V0IGNvbm5lY3RTdGF0ZSB0byBOb25lICovCisgICAgICAgIHdkLT5zdGEuY29ubmVjdFN0YXRlID0gWk1fU1RBX0NPTk5fU1RBVEVfTk9ORTsKKworICAgICAgICAvKiByZXNldCBsZWFwIGVuYWJsZSB2YXJpYWJsZSAqLworICAgICAgICB3ZC0+c3RhLmxlYXBFbmFibGVkID0gMDsKKworICAgICAgICAvKiBEaXNhYmxlIHRoZSBSSUZTIFN0YXR1cyAvIFJJRlMtbGlrZSBmcmFtZSBjb3VudCAvIFJJRlMgY291bnQgKi8KKyAgICAgICAgaWYoIHdkLT5zdGEucmlmc1N0YXRlID09IFpNX1JJRlNfU1RBVEVfREVURUNURUQgKQorICAgICAgICAgICAgemZIcERpc2FibGVSaWZzKGRldik7CisgICAgICAgIHdkLT5zdGEucmlmc1N0YXRlID0gWk1fUklGU19TVEFURV9ERVRFQ1RJTkc7CisgICAgICAgIHdkLT5zdGEucmlmc0xpa2VGcmFtZUNudCA9IDA7CisgICAgICAgIHdkLT5zdGEucmlmc0NvdW50ID0gMDsKKworICAgICAgICB3ZC0+c3RhLm9zUnhGaWx0ZXIgPSAwOworICAgICAgICB3ZC0+c3RhLmJTYWZlTW9kZSA9IDA7CisKKyAgICAgICAgemZDaGFuZ2VBZGFwdGVyU3RhdGUoZGV2LCBaTV9TVEFfU1RBVEVfRElTQ09OTkVDVCk7CisgICAgICAgIGlmIChSZXNldEtleUNhY2hlKQorICAgICAgICAgICAgemZIcFJlc2V0S2V5Q2FjaGUoZGV2KTsKKworICAgICAgICBpZiAoaXNDb25uZWN0ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3ZC0+emZjYkNvbm5lY3ROb3RpZnkgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+emZjYkNvbm5lY3ROb3RpZnkoZGV2LCBaTV9TVEFUVVNfTUVESUFfQ09OTkVDVElPTl9ESVNBQkxFRCwgd2QtPnN0YS5ic3NpZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2QtPnpmY2JDb25uZWN0Tm90aWZ5ICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnpmY2JDb25uZWN0Tm90aWZ5KGRldiwgWk1fU1RBVFVTX01FRElBX0RJU0FCTEVELCB3ZC0+c3RhLmJzc2lkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIC8vaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKQorICAgIHsKKyAgICAgICAgZm9yIChpPTA7IGk8Wk1fTUFYX1NUQV9TVVBQT1JUOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHNlbmQgZGVhdXRoZW50aWNhdGlvbiBmcmFtZSAqLworICAgICAgICAgICAgaWYgKHdkLT5hcC5zdGFUYWJsZVtpXS52YWxpZCA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFJlYXNvbiA6IFNlbmRpbmcgc3RhdGlvbiBpcyBsZWF2aW5nICovCisgICAgICAgICAgICAgICAgemZTZW5kTW1GcmFtZShkZXYsIFpNX1dMQU5fRlJBTUVfVFlQRV9ERUFVVEgsCisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+YXAuc3RhVGFibGVbaV0uYWRkciwgMywgMCwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoUmVzZXRLZXlDYWNoZSkKKyAgICAgICAgICAgIHpmSHBSZXNldEtleUNhY2hlKGRldik7CisKKyAgICAgICAgd2QtPmFwLnZhcE51bWJlci0tOworICAgIH0KKworICAgIC8qIHN0b3AgYmVhY29uICovCisgICAgemZIcERpc2FibGVCZWFjb24oZGV2KTsKKworICAgIC8qIEZsdXNoIFZUeFEgYW5kIE1tUSAqLworICAgIHpmRmx1c2hWdHhxKGRldik7CisgICAgLyogRmx1c2ggQVAgUFMgcXVldWVzICovCisgICAgemZBcEZsdXNoQnVmZmVyZWRQc0ZyYW1lKGRldik7CisgICAgLyogRnJlZSBidWZmZXIgaW4gZGVmcmFnbWVudCBsaXN0Ki8KKyAgICB6ZkFnaW5nRGVmcmFnTGlzdChkZXYsIDEpOworCisgICAgI2lmZGVmIFpNX0VOQUJMRV9BR0dSRUdBVElPTgorICAgIC8qIGFkZCBieSBob25kYSAqLworICAgIHpmQWdnUnhGcmVlQnVmKGRldiwgMCk7ICAvLzEgZm9yIHJlbGVhc2Ugc3RydWN0dXJlIG1lbW9yeQorICAgIC8qIGVuZCBvZiBhZGQgYnkgaG9uZGEgKi8KKyAgICAjZW5kaWYKKworICAgIC8vIENsZWFyIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHBlZXIgc3RhdGlvbnMgb2YgSUJTUyBvciBBUCBvZiBTdGF0aW9uIG1vZGUKKyAgICB6Zlplcm9NZW1vcnkoKHU4X3QqKXdkLT5zdGEub3Bwb3NpdGVJbmZvLCBzaXplb2Yoc3RydWN0IHpzT3Bwb3NpdGVJbmZvKSAqIFpNX01BWF9PUFBPU0lURV9DT1VOVCk7CisKKyAgICAvKiBUdXJuIG9mZiBTb2Z0d2FyZSBXRVAvVEtJUCAqLworICAgIGlmICh3ZC0+c3RhLlNXRW5jcnlwdEVuYWJsZSAhPSAwKQorICAgIHsKKyAgICAgICAgem1fZGVidWdfbXNnMCgiRGlzYWJsZSBzb2Z0d2FyZSBlbmNyeXB0aW9uIik7CisgICAgICAgIHpmU3RhRGlzYWJsZVNXRW5jcnlwdGlvbihkZXYpOworICAgIH0KKworICAgIC8qIEltcHJvdmUgV0VQL1RLSVAgcGVyZm9ybWFjZSB3aXRoIEhUIEFQLCBkZXRhaWwgaW5mb3JtYXRpb24gcGxlYXNlIGxvb2sgYnVnIzMyNDk1ICovCisgICAgLy96ZkhwU2V0VFRTSUZTVGltZShkZXYsIDB4OCk7CisKKyAgICByZXR1cm4gMDsKK30KKwordTE2X3QgemZpV2xhblN1c3BlbmQoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICAvLyBDaGFuZ2UgdGhlIEhBTCBzdGF0ZSB0byBpbml0IHNvIHRoYXQgYW55IHBhY2tldCBjYW4ndCBiZSB0cmFuc21pdHRlZCBiZXR3ZWVuCisgICAgLy8gcmVzdW1lICYgSEFMIHJlaW5pdC4gVGhpcyB3b3VsZCBjYXVzZSB0aGUgY2hpcCBoYW5nIGlzc3VlIGluIE9UVVMuCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICB3ZC0+aGFsU3RhdGUgPSBaTV9IQUxfU1RBVEVfSU5JVDsKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3UxNl90IHpmaVdsYW5SZXN1bWUoemRldl90KiBkZXYsIHU4X3QgZG9SZWNvbm4pCit7CisgICAgdTE2X3QgcmV0OworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgLyogUmVkb3dubG9hZCBmaXJtd2FyZSwgUmVpbml0IE1BQyxQSFksUkYgKi8KKyAgICB6ZkhwUmVpbml0KGRldiwgd2QtPmZyZXF1ZW5jeSk7CisKKyAgICAvL1NldCBjaGFubmVsIGFjY29yZGluZyB0byBBUCdzIGNvbmZpZ3VyYXRpb24KKyAgICB6ZkNvcmVTZXRGcmVxdWVuY3lFeFYyKGRldiwgd2QtPmZyZXF1ZW5jeSwgd2QtPkJhbmRXaWR0aDQwLAorICAgICAgICAgICAgd2QtPkV4dE9mZnNldCwgTlVMTCwgMSk7CisKKyAgICB6ZkhwU2V0TWFjQWRkcmVzcyhkZXYsIHdkLT5tYWNBZGRyLCAwKTsKKworICAgIC8qIFN0YXJ0IFJ4ICovCisgICAgemZIcFN0YXJ0UmVjdihkZXYpOworCisgICAgemZGbHVzaFZ0eHEoZGV2KTsKKworICAgIGlmICggd2QtPndsYW5Nb2RlICE9IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUgJiYKKyAgICAgICAgIHdkLT53bGFuTW9kZSAhPSBaTV9NT0RFX0lCU1MgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgem1fbXNnMF9tbShaTV9MVl8xLCAiUmVzdW1lIFdsYW4iKTsKKyAgICBpZiAoICh6ZlN0YUlzQ29ubmVjdGVkKGRldikpIHx8ICh6ZlN0YUlzQ29ubmVjdGluZyhkZXYpKSApCisgICAgeworICAgICAgICBpZiAoZG9SZWNvbm4gPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgem1fbXNnMF9tbShaTV9MVl8xLCAiUmUtY29ubmVjdC4uLiIpOworICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIHdkLT5zdGEuY29ubmVjdEJ5UmVhc3NvID0gRkFMU0U7CisgICAgICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgICAgICB6ZldsYW5FbmFibGUoZGV2KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChkb1JlY29ubiA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB6ZkhwU2V0Um9sbENhbGxUYWJsZShkZXYpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0ID0gMDsKKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgIHpmaVdsYW5GbHVzaEFsbFF1ZXVlZEJ1ZmZlcnMgKi8KKy8qICAgICAgRmx1c2ggVmlydHVhbCBUeFEsIE1tUSwgUFMgZnJhbWVzIGFuZCBkZWZyYWdtZW50IGxpc3QgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJTkMuICAgIDIwMDcuMSAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgemZpV2xhbkZsdXNoQWxsUXVldWVkQnVmZmVycyh6ZGV2X3QqIGRldikKK3sKKyAgICAvKiBGbHVzaCBWVHhRIGFuZCBNbVEgKi8KKyAgICB6ZkZsdXNoVnR4cShkZXYpOworICAgIC8qIEZsdXNoIEFQIFBTIHF1ZXVlcyAqLworICAgIHpmQXBGbHVzaEJ1ZmZlcmVkUHNGcmFtZShkZXYpOworICAgIC8qIEZyZWUgYnVmZmVyIGluIGRlZnJhZ21lbnQgbGlzdCovCisgICAgemZBZ2luZ0RlZnJhZ0xpc3QoZGV2LCAxKTsKK30KKworLyogRG8gV0xBTiBzaXRlIHN1cnZleSAqLwordTE2X3QgemZpV2xhblNjYW4oemRldl90KiBkZXYpCit7CisgICAgdTE2X3QgcmV0ID0gMTsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bV9kZWJ1Z19tc2cwKCIiKTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKQorICAgIHsKKyAgICAgICAgd2QtPmhlYXJ0QmVhdE5vdGlmaWNhdGlvbiB8PSBaTV9CU1NJRF9MSVNUX1NDQU47CisgICAgICAgIHdkLT5zdGEuc2NhbkZyZXF1ZW5jeSA9IDA7CisgICAgICAgIC8vd2QtPnN0YS5wVXBkYXRlQnNzTGlzdC0+YnNzQ291bnQgPSAwOworICAgICAgICByZXQgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAjaWYgMAorICAgICAgICBpZiAoICF6ZlN0YUJsb2NrV2xhblNjYW4oZGV2KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzAoInNjYW4gcmVxdWVzdCIpOworICAgICAgICAgICAgLy96ZlRpbWVyU2NoZWR1bGUoZGV2LCBaTV9FVkVOVF9TQ0FOLCBaTV9USUNLX1pFUk8pOworICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgIGdvdG8gc3RhcnRfc2NhbjsKKyAgICAgICAgfQorICAgICAgICAjZWxzZQorICAgICAgICAgICAgZ290byBzdGFydF9zY2FuOworICAgICAgICAjZW5kaWYKKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgcmV0dXJuIHJldDsKKworc3RhcnRfc2NhbjoKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgaWYod2QtPmxlZFN0cnVjdC5MRURDdHJsRmxhZ0Zyb21SZWcgJiBaTV9MRURfQ1RSTF9GTEFHX0FMUEhBKSAgIC8vIGZsYWcgZm9yIEFscGhhCisgICAgICAgIHdkLT5sZWRTdHJ1Y3QuTEVEQ3RybEZsYWcgfD0gWk1fTEVEX0NUUkxfRkxBR19BTFBIQTsKKworICAgIHJldCA9IHpmU2Nhbk1nclNjYW5TdGFydChkZXYsIFpNX1NDQU5fTUdSX1NDQU5fRVhURVJOQUwpOworCisgICAgem1fZGVidWdfbXNnMSgicmV0ID0gIiwgcmV0KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKworLyogcmF0ZSAgICAgICAgICovCisvKiAgICAwIDogQVVUTyAgKi8KKy8qICAgIDEgOiBDQ0sgMU0gKi8KKy8qICAgIDIgOiBDQ0sgMk0gKi8KKy8qICAgIDMgOiBDQ0sgNS41TSAqLworLyogICAgNCA6IENDSyAxMU0gKi8KKy8qICAgIDUgOiBPRkRNIDZNICovCisvKiAgICA2IDogT0ZETSA5TSAqLworLyogICAgNyA6IE9GRE0gMTJNICovCisvKiAgICA4IDogT0ZETSAxOE0gKi8KKy8qICAgIDkgOiBPRkRNIDI0TSAqLworLyogICAgMTAgOiBPRkRNIDM2TSAqLworLyogICAgMTEgOiBPRkRNIDQ4TSAqLworLyogICAgMTIgOiBPRkRNIDU0TSAqLworLyogICAgMTMgOiBNQ1MgMCAqLworLyogICAgMjggOiBNQ1MgMTUgKi8KK3UxNl90IHpjUmF0ZVRvTUNTW10gPQorICAgIHsweGZmLCAwLCAxLCAyLCAzLCAweGIsIDB4ZiwgMHhhLCAweGUsIDB4OSwgMHhkLCAweDgsIDB4Y307Cit1MTZfdCB6Y1JhdGVUb01UW10gPSB7MCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMX07CisKK3UxNl90IHpmaVdsYW5TZXRUeFJhdGUoemRldl90KiBkZXYsIHUxNl90IHJhdGUpCit7ICAgLy8gamhsZWUgSFQgMAorICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGlmIChyYXRlIDw9MTIpCisgICAgeworICAgICAgICB3ZC0+dHhNQ1MgPSB6Y1JhdGVUb01DU1tyYXRlXTsKKyAgICAgICAgd2QtPnR4TVQgPSB6Y1JhdGVUb01UW3JhdGVdOworICAgICAgICByZXR1cm4gWk1fU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZSBpZiAoKHJhdGU8PTI4KXx8KHJhdGU9PTEzKzMyKSkKKyAgICB7CisgICAgICAgIHdkLT50eE1DUyA9IHJhdGUgLSAxMiAtIDE7CisgICAgICAgIHdkLT50eE1UID0gMjsKKyAgICAgICAgcmV0dXJuIFpNX1NVQ0NFU1M7CisgICAgfQorCisgICAgcmV0dXJuIFpNX0VSUl9JTlZBTElEX1RYX1JBVEU7Cit9CisKK2NvbnN0IHUzMl90IHpjUmF0ZUlkVG9LYnBzNDBNW10gPQorICAgIHsKKyAgICAgICAgMTAwMCwgMjAwMCwgNTUwMCwgMTEwMDAsICAgICAgICAgICAgICAgICAgLyogMU0sIDJNLCA1TSwgMTFNICAgICAgICAgICwgIDAgIDEgIDIgIDMqLworICAgICAgICA2MDAwLCA5MDAwLCAxMjAwMCwgMTgwMDAsICAgICAgICAgICAgICAgICAvKiA2TSAgOU0gIDEyTSAgMThNICAgICAgICAgLCAgNCAgNSAgNiAgNyovCisgICAgICAgIDI0MDAwLCAzNjAwMCwgNDgwMDAsIDU0MDAwLCAgICAgICAgICAgICAgIC8qIDI0TSAgMzZNICA0OE0gIDU0TSAgICAgICAsICA4ICA5IDEwIDExKi8KKyAgICAgICAgMTM1MDAsIDI3MDAwLCA0MDUwMCwgNTQwMDAsICAgICAgICAgICAgICAgLyogTUNTMCBNQ1MxIE1DUzIgTUNTMyAgICAgICwgMTIgMTMgMTQgMTUqLworICAgICAgICA4MTAwMCwgMTA4MDAwLCAxMjE1MDAsIDEzNTAwMCwgICAgICAgICAgICAvKiBNQ1M0IE1DUzUgTUNTNiBNQ1M3ICAgICAgLCAxNiAxNyAxOCAxOSovCisgICAgICAgIDI3MDAwLCA1NDAwMCwgODEwMDAsIDEwODAwMCwgICAgICAgICAgICAgIC8qIE1DUzggTUNTOSBNQ1MxMCBNQ1MxMSAgICAsIDIwIDIxIDIyIDIzKi8KKyAgICAgICAgMTYyMDAwLCAyMTYwMDAsIDI0MzAwMCwgMjcwMDAwLCAgICAgICAgICAgLyogTUNTMTIgTUNTMTMgTUNTMTQgTUNTMTUgICwgMjQgMjUgMjYgMjcqLworICAgICAgICAyNzAwMDAsIDMwMDAwMCwgMTUwMDAwICAgICAgICAgICAgICAgICAgICAvKiBNQ1MxNFNHLCBNQ1MxNVNHLCBNQ1M3U0cgLCAyOCAyOSAzMCovCisgICAgfTsKKworY29uc3QgdTMyX3QgemNSYXRlSWRUb0ticHMyME1bXSA9CisgICAgeworICAgICAgICAxMDAwLCAyMDAwLCA1NTAwLCAxMTAwMCwgICAgICAgICAgICAgICAgICAvKiAxTSwgMk0sIDVNLCAxMU0gICAgICAgICAgLCAgMCAgMSAgMiAgMyovCisgICAgICAgIDYwMDAsIDkwMDAsIDEyMDAwLCAxODAwMCwgICAgICAgICAgICAgICAgIC8qIDZNICA5TSAgMTJNICAxOE0gICAgICAgICAsICA0ICA1ICA2ICA3Ki8KKyAgICAgICAgMjQwMDAsIDM2MDAwLCA0ODAwMCwgNTQwMDAsICAgICAgICAgICAgICAgLyogMjRNICAzNk0gIDQ4TSAgNTRNICAgICAgICwgIDggIDkgMTAgMTEqLworICAgICAgICA2NTAwLCAxMzAwMCwgMTk1MDAsIDI2MDAwLCAgICAgICAgICAgICAgICAvKiBNQ1MwIE1DUzEgTUNTMiBNQ1MzICAgICAgLCAxMiAxMyAxNCAxNSovCisgICAgICAgIDM5MDAwLCA1MjAwMCwgNTg1MDAsIDY1MDAwLCAgICAgICAgICAgICAgIC8qIE1DUzQgTUNTNSBNQ1M2IE1DUzcgICAgICAsIDE2IDE3IDE4IDE5Ki8KKyAgICAgICAgMTMwMDAsIDI2MDAwLCAzOTAwMCwgNTIwMDAsICAgICAgICAgICAgICAgLyogTUNTOCBNQ1M5IE1DUzEwIE1DUzExICAgICwgMjAgMjEgMjIgMjMqLworICAgICAgICA3ODAwMCwgMTA0MDAwLCAxMTcwMDAsIDEzMDAwMCwgICAgICAgICAgICAvKiBNQ1MxMiBNQ1MxMyBNQ1MxNCBNQ1MxNSAgLCAyNCAyNSAyNiAyNyovCisgICAgICAgIDEzMDAwMCwgMTQ0NDAwLCA3MjIwMCAgICAgICAgICAgICAgICAgICAgIC8qIE1DUzE0U0csIE1DUzE1U0csIE1TRzdTRyAsIDI4IDI5IDMwKi8KKyAgICB9OworCit1MzJfdCB6ZmlXbGFuUXVlcnlUeFJhdGUoemRldl90KiBkZXYpCit7CisgICAgdThfdCByYXRlSWQgPSAweGZmOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgLyogSWYgVHggcmF0ZSBoYWQgbm90IGJlZW4gdHJhaW5lZCwgcmV0dXJuIG1heGltdW0gVHggcmF0ZSBpbnN0ZWFkICovCisgICAgaWYgKCh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSkgJiYgKHpmU3RhSXNDb25uZWN0ZWQoZGV2KSkpCisgICAgeworICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAvL05vdCBpbiBmaXhlZCByYXRlIG1vZGUKKyAgICAgICAgaWYgKHdkLT50eE1DUyA9PSAweGZmKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHdkLT5zdGEub3Bwb3NpdGVJbmZvWzBdLnJjQ2VsbC5mbGFnICYgWk1fUkNfVFJBSU5FRF9CSVQpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmF0ZUlkID0gd2QtPnN0YS5vcHBvc2l0ZUluZm9bMF0ucmNDZWxsLm9wZXJhdGlvblJhdGVTZXRbd2QtPnN0YS5vcHBvc2l0ZUluZm9bMF0ucmNDZWxsLm9wZXJhdGlvblJhdGVDb3VudC0xXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByYXRlSWQgPSB3ZC0+c3RhLm9wcG9zaXRlSW5mb1swXS5yY0NlbGwub3BlcmF0aW9uUmF0ZVNldFt3ZC0+c3RhLm9wcG9zaXRlSW5mb1swXS5yY0NlbGwuY3VycmVudFJhdGVJbmRleF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICB9CisgICAgaWYgKHJhdGVJZCAhPSAweGZmKQorICAgIHsKKyAgICAgICAgaWYgKHdkLT5zdGEuaHRDdHJsQmFuZHdpZHRoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gemNSYXRlSWRUb0ticHM0ME1bcmF0ZUlkXTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB6Y1JhdGVJZFRvS2JwczIwTVtyYXRlSWRdOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiB3ZC0+Q3VycmVudFR4UmF0ZUticHM7CisgICAgfQorfQorCit2b2lkIHpmV2xhblVwZGF0ZVJ4UmF0ZSh6ZGV2X3QqIGRldiwgc3RydWN0IHpzQWRkaXRpb25JbmZvKiBhZGRJbmZvKQoreworICAgIHUzMl90IHJ4UmF0ZUticHM7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIC8vem1fbXNnMV9tbShaTV9MVl8wLCAiYWRkSW5mby0+VGFpbC5EYXRhLlJ4TWFjU3RhdHVzID0iLCBhZGRJbmZvLT5UYWlsLkRhdGEuUnhNYWNTdGF0dXMgJiAweDAzKTsKKworICAgIC8qIGI1fmI0OiBNUERVIGluZGljYXRpb24uICAgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgIDAwOiBTaW5nbGUgTVBEVS4gICAgICAgICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgMTA6IEZpcnN0IE1QRFUgb2YgQS1NUERVLiAgICAgICAqLworICAgIC8qICAgICAgICAxMTogTWlkZGxlIE1QRFUgb2YgQS1NUERVLiAgICAgICovCisgICAgLyogICAgICAgIDAxOiBMYXN0IE1QRFUgb2YgQS1NUERVLiAgICAgICAgKi8KKyAgICAvKiBPbmx5IEZpcnN0IE1QRFUgYW5kIFNpbmdsZSBNUERVIGhhdmUgUExDUCBoZWFkZXIgKi8KKyAgICAvKiBGaXJzdCBNUERVICA6IChtcGR1SW5kICYgMHgzMCkgPT0gMHgwMCAqLworICAgIC8qIFNpbmdsZSBNUERVIDogKG1wZHVJbmQgJiAweDMwKSA9PSAweDIwICovCisgICAgaWYgKChhZGRJbmZvLT5UYWlsLkRhdGEuUnhNYWNTdGF0dXMgJiAweDEwKSA9PSAwKQorICAgIHsKKyAgICAgICAgLyogTW9kdWxhdGlvbiB0eXBlICovCisgICAgICAgIHdkLT5tb2R1bGF0aW9uVHlwZSA9IGFkZEluZm8tPlRhaWwuRGF0YS5SeE1hY1N0YXR1cyAmIDB4MDM7CisgICAgICAgIHN3aXRjaCh3ZC0+bW9kdWxhdGlvblR5cGUpCisgICAgICAgIHsKKyAgICAJCWNhc2UgMHgwOiB3ZC0+cmF0ZUZpZWxkID0gYWRkSW5mby0+UGxjcEhlYWRlclswXSAmIDB4ZmY7IC8vQ0NLIG1vZGUKKyAgICAgICAgICAgICAgICAgICAgICB3ZC0+cnhJbmZvID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAJCWNhc2UgMHgxOiB3ZC0+cmF0ZUZpZWxkID0gYWRkSW5mby0+UGxjcEhlYWRlclswXSAmIDB4MGY7IC8vTGVnYWN5LU9GRE0gbW9kZQorICAgICAgICAgICAgICAgICAgICAgIHdkLT5yeEluZm8gPSAwOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgIAkJY2FzZSAweDI6IHdkLT5yYXRlRmllbGQgPSBhZGRJbmZvLT5QbGNwSGVhZGVyWzNdOyAvL0hULU9GRE0gbW9kZQorICAgIAkJICAgICAgICAgIHdkLT5yeEluZm8gPSBhZGRJbmZvLT5QbGNwSGVhZGVyWzZdOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAgICB9CisKKyAgICAgICAgcnhSYXRlS2JwcyA9IHpmVXBkYXRlUnhSYXRlKGRldik7CisgICAgICAgIGlmICh3ZC0+Q3VycmVudFJ4UmF0ZVVwZGF0ZWQgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJ4UmF0ZUticHMgPiB3ZC0+Q3VycmVudFJ4UmF0ZUticHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPkN1cnJlbnRSeFJhdGVLYnBzID0gcnhSYXRlS2JwczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHdkLT5DdXJyZW50UnhSYXRlS2JwcyA9IHJ4UmF0ZUticHM7CisgICAgICAgICAgICB3ZC0+Q3VycmVudFJ4UmF0ZVVwZGF0ZWQgPSAxOworICAgICAgICB9CisgICAgfQorfQorI2lmIDAKK3UxNl90IHpjSW5kZXh0b1JhdGVCR1sxNl0gPSB7MTAwMCwgMjAwMCwgNTUwMCwgMTEwMDAsIDAsIDAsIDAsIDAsIDQ4MDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0MDAwLCAxMjAwMCwgNjAwMCwgNTQwMDAsIDM2MDAwLCAxODAwMCwgOTAwMH07Cit1MzJfdCB6Y0luZGV4dG9SYXRlTjIwTFsxNl0gPSB7NjUwMCwgMTMwMDAsIDE5NTAwLCAyNjAwMCwgMzkwMDAsIDUyMDAwLCA1ODUwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY1MDAwLCAxMzAwMCwgMjYwMDAsIDM5MDAwLCA1MjAwMCwgNzgwMDAsIDEwNDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNzAwMCwgMTMwMDAwfTsKK3UzMl90IHpjSW5kZXh0b1JhdGVOMjBTWzE2XSA9IHs3MjAwLCAxNDQwMCwgMjE3MDAsIDI4OTAwLCA0MzMwMCwgNTc4MDAsIDY1MDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzIyMDAsIDE0NDAwLCAyODkwMCwgNDMzMDAsIDU3ODAwLCA4NjcwMCwgMTE1NjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMwMDAwLCAxNDQ0MDB9OwordTMyX3QgemNJbmRleHRvUmF0ZU40MExbMTZdID0gezEzNTAwLCAyNzAwMCwgNDA1MDAsIDU0MDAwLCA4MTAwMCwgMTA4MDAwLCAxMjE1MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzUwMDAsIDI3MDAwLCA1NDAwMCwgODEwMDAsIDEwODAwMCwgMTYyMDAwLCAyMTYwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDMwMDAsIDI3MDAwMH07Cit1MzJfdCB6Y0luZGV4dG9SYXRlTjQwU1sxNl0gPSB7MTUwMDAsIDMwMDAwLCA0NTAwMCwgNjAwMDAsIDkwMDAwLCAxMjAwMDAsIDEzNTAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1MDAwMCwgMzAwMDAsIDYwMDAwLCA5MDAwMCwgMTIwMDAwLCAxODAwMDAsIDI0MDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI3MDAwMCwgMzAwMDAwfTsKKyNlbmRpZgorCitleHRlcm4gdTE2X3QgemNJbmRleHRvUmF0ZUJHWzE2XTsKK2V4dGVybiB1MzJfdCB6Y0luZGV4dG9SYXRlTjIwTFsxNl07CitleHRlcm4gdTMyX3QgemNJbmRleHRvUmF0ZU4yMFNbMTZdOworZXh0ZXJuIHUzMl90IHpjSW5kZXh0b1JhdGVONDBMWzE2XTsKK2V4dGVybiB1MzJfdCB6Y0luZGV4dG9SYXRlTjQwU1sxNl07CisKK3UzMl90IHpmaVdsYW5RdWVyeVJ4UmF0ZSh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB3ZC0+Q3VycmVudFJ4UmF0ZVVwZGF0ZWQgPSAwOworICAgIHJldHVybiB3ZC0+Q3VycmVudFJ4UmF0ZUticHM7Cit9CisKK3UzMl90IHpmVXBkYXRlUnhSYXRlKHpkZXZfdCogZGV2KQoreworICAgIHU4X3QgbWNzLCBiYW5kd2lkdGg7CisgICAgdTMyX3QgcnhSYXRlS2JwcyA9IDEzMDAwMDsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBzd2l0Y2ggKHdkLT5tb2R1bGF0aW9uVHlwZSkKKyAgICB7CisJCWNhc2UgMHgwOiAvL0NDSyBtb2RlCisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHdkLT5yYXRlRmllbGQpCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDBhOiByeFJhdGVLYnBzID0gMTAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MTQ6IHJ4UmF0ZUticHMgPSAyMDAwOworCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDM3OiByeFJhdGVLYnBzID0gNTUwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NmU6IHJ4UmF0ZUticHMgPSAxMTAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCWNhc2UgMHgxOiAvL0xlZ2FjeS1PRkRNIG1vZGUKKyAgICAgICAgICAgICAgICAgIGlmICh3ZC0+cmF0ZUZpZWxkIDw9IDE1KQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHJ4UmF0ZUticHMgPSB6Y0luZGV4dG9SYXRlQkdbd2QtPnJhdGVGaWVsZF07CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBicmVhazsKKwkJY2FzZSAweDI6IC8vSFQtT0ZETSBtb2RlCisJCSAgICAgICAgICBtY3MgPSB3ZC0+cmF0ZUZpZWxkICYgMHg3RjsKKwkJICAgICAgICAgIGJhbmR3aWR0aCA9IHdkLT5yYXRlRmllbGQgJiAweDgwOworICAgICAgICAgICAgICAgICAgaWYgKG1jcyA8PSAxNSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFuZHdpZHRoICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBpZigod2QtPnJ4SW5mbyAmIDB4ODApICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNob3J0IEdJIDQwIE1IeiBNSU1PIFJhdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4UmF0ZUticHMgPSB6Y0luZGV4dG9SYXRlTjQwU1ttY3NdOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9uZyBHSSA0MCBNSHogTUlNTyBSYXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeFJhdGVLYnBzID0gemNJbmRleHRvUmF0ZU40MExbbWNzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBpZigod2QtPnJ4SW5mbyAmIDB4ODApICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNob3J0IEdJIDIwIE1IeiBNSU1PIFJhdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4UmF0ZUticHMgPSB6Y0luZGV4dG9SYXRlTjIwU1ttY3NdOworICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9uZyBHSSAyMCBNSHogTUlNTyBSYXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeFJhdGVLYnBzID0gemNJbmRleHRvUmF0ZU4yMExbbWNzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vem1fbXNnMV9tbShaTV9MVl8wLCAid2QtPkN1cnJlbnRSeFJhdGVLYnBzPSIsIHdkLT5DdXJyZW50UnhSYXRlS2Jwcyk7CisKKyAgICAgLy8gVG9EbzogdXNlIGJhbmR3aXRoIGZpZWxkIHRvIGRlZmluZSA0ME1CCisgICAgcmV0dXJuIHJ4UmF0ZUticHM7Cit9CisKKy8qIEdldCBXTEFOIHN0YXN0aWNzICovCit1MTZfdCB6ZmlXbGFuR2V0U3RhdGlzdGljcyh6ZGV2X3QqIGRldikKK3sKKyAgICAvKiBSZXR1cm4gbGluayBzdGF0aXN0aWNzICovCisgICAgcmV0dXJuIDA7Cit9CisKK3UxNl90IHpmaVdsYW5SZXNldCh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB3ZC0+c3RhdGUgPSBaTV9XTEFOX1NUQVRFX0RJU0FCTEVEOworCisgICAgcmV0dXJuIHpmV2xhblJlc2V0KGRldik7Cit9CisKKy8qIFJlc2V0IFdMQU4gKi8KK3UxNl90IHpmV2xhblJlc2V0KHpkZXZfdCogZGV2KQoreworICAgIHU4X3QgaXNDb25uZWN0ZWQ7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptX2RlYnVnX21zZzAoInpmV2xhblJlc2V0Iik7CisKKyAgICBpc0Nvbm5lY3RlZCA9IHpmU3RhSXNDb25uZWN0ZWQoZGV2KTsKKworICAgIC8vaWYgKCB3ZC0+d2xhbk1vZGUgIT0gWk1fTU9ERV9BUCApCisgICAgeworICAgICAgICBpZiAoICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSkmJgorICAgICAgICAgICAgICh3ZC0+c3RhLmN1cnJlbnRBdXRoTW9kZSAhPSBaTV9BVVRIX01PREVfV1BBMikgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBzZW5kIGRlYXV0aGVudGljYXRpb24gZnJhbWUgKi8KKyAgICAgICAgICAgIGlmIChpc0Nvbm5lY3RlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvL3pmaVdsYW5EZWF1dGgoZGV2LCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICB6ZlNlbmRNbUZyYW1lKGRldiwgWk1fV0xBTl9GUkFNRV9UWVBFX0RFQVVUSCwgd2QtPnN0YS5ic3NpZCwgMywgMCwgMCk7CisgICAgICAgICAgICAgICAgLy96bXdfZGVidWdfbXNnMCgic2VuZCBhIERlYXV0aCBmcmFtZSEiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHpmQ2hhbmdlQWRhcHRlclN0YXRlKGRldiwgWk1fU1RBX1NUQVRFX0RJU0NPTk5FQ1QpOworICAgIHpmSHBSZXNldEtleUNhY2hlKGRldik7CisKKyAgICBpZiAoaXNDb25uZWN0ZWQpCisgICAgeworICAgICAgICAvL3pmaVdsYW5EaXNhYmxlKGRldik7CisgICAgICAgIGlmICh3ZC0+emZjYkNvbm5lY3ROb3RpZnkgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPnpmY2JDb25uZWN0Tm90aWZ5KGRldiwgWk1fU1RBVFVTX01FRElBX0NPTk5FQ1RJT05fUkVTRVQsIHdkLT5zdGEuYnNzaWQpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICh3ZC0+emZjYkNvbm5lY3ROb3RpZnkgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPnpmY2JDb25uZWN0Tm90aWZ5KGRldiwgWk1fU1RBVFVTX01FRElBX1JFU0VULCB3ZC0+c3RhLmJzc2lkKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIHN0b3AgYmVhY29uICovCisgICAgemZIcERpc2FibGVCZWFjb24oZGV2KTsKKworICAgIC8qIEZyZWUgYnVmZmVyIGluIGRlZnJhZ21lbnQgbGlzdCovCisgICAgemZBZ2luZ0RlZnJhZ0xpc3QoZGV2LCAxKTsKKworICAgIC8qIEZsdXNoIFZUeFEgYW5kIE1tUSAqLworICAgIHpmRmx1c2hWdHhxKGRldik7CisKKyAgICAjaWZkZWYgWk1fRU5BQkxFX0FHR1JFR0FUSU9OCisgICAgLyogYWRkIGJ5IGhvbmRhICovCisgICAgemZBZ2dSeEZyZWVCdWYoZGV2LCAwKTsgIC8vMSBmb3IgcmVsZWFzZSBzdHJ1Y3R1cmUgbWVtb3J5CisgICAgLyogZW5kIG9mIGFkZCBieSBob25kYSAqLworICAgICNlbmRpZgorCisgICAgemZTdGFSZWZyZXNoQmxvY2tMaXN0KGRldiwgMSk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgemZUaW1lckNhbmNlbChkZXYsIFpNX0VWRU5UX0lCU1NfTU9OSVRPUik7CisgICAgemZUaW1lckNhbmNlbChkZXYsIFpNX0VWRU5UX0NNX0JMT0NLX1RJTUVSKTsKKyAgICB6ZlRpbWVyQ2FuY2VsKGRldiwgWk1fRVZFTlRfQ01fRElTQ09OTkVDVCk7CisKKyAgICB3ZC0+c3RhLmNvbm5lY3RTdGF0ZSA9IFpNX1NUQV9DT05OX1NUQVRFX05PTkU7CisgICAgd2QtPnN0YS5jb25uZWN0QnlSZWFzc28gPSBGQUxTRTsKKyAgICB3ZC0+c3RhLmNtRGlzYWxsb3dTc2lkTGVuZ3RoID0gMDsKKyAgICB3ZC0+c3RhLmJBdXRvUmVjb25uZWN0ID0gMDsKKyAgICB3ZC0+c3RhLkludGVybmFsU2NhblJlcSA9IDA7CisgICAgd2QtPnN0YS5lbmNyeU1vZGUgPSBaTV9OT19XRVA7CisgICAgd2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1dFUF9ESVNBQkxFRDsKKyAgICB3ZC0+c3RhLndwYVN0YXRlID0gWk1fU1RBX1dQQV9TVEFURV9JTklUOworICAgIHdkLT5zdGEuY21NaWNGYWlsdXJlQ291bnQgPSAwOworICAgIHdkLT5zdGEuaWJzc0Jzc0lzQ3JlYXRvciA9IDA7CisjaWZkZWYgWk1fRU5BQkxFX0lCU1NfV1BBMlBTSworICAgIHdkLT5zdGEuaWJzc1dwYTJQc2sgPSAwOworI2VuZGlmCisgICAgLyogcmVzZXQgY29ubmVjdCB0aW1lb3V0IGNvdW50ZXIgKi8KKyAgICB3ZC0+c3RhLmNvbm5lY3RUaW1lb3V0Q291bnQgPSAwOworCisgICAgLyogcmVzZXQgbGVhcCBlbmFibGUgdmFyaWFibGUgKi8KKyAgICB3ZC0+c3RhLmxlYXBFbmFibGVkID0gMDsKKworICAgIC8qIFJlc2V0IHRoZSBSSUZTIFN0YXR1cyAvIFJJRlMtbGlrZSBmcmFtZSBjb3VudCAvIFJJRlMgY291bnQgKi8KKyAgICBpZiggd2QtPnN0YS5yaWZzU3RhdGUgPT0gWk1fUklGU19TVEFURV9ERVRFQ1RFRCApCisgICAgICAgIHpmSHBEaXNhYmxlUmlmcyhkZXYpOworICAgIHdkLT5zdGEucmlmc1N0YXRlID0gWk1fUklGU19TVEFURV9ERVRFQ1RJTkc7CisgICAgd2QtPnN0YS5yaWZzTGlrZUZyYW1lQ250ID0gMDsKKyAgICB3ZC0+c3RhLnJpZnNDb3VudCA9IDA7CisKKyAgICB3ZC0+c3RhLm9zUnhGaWx0ZXIgPSAwOworICAgIHdkLT5zdGEuYlNhZmVNb2RlID0gMDsKKworICAgIC8vIENsZWFyIHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHBlZXIgc3RhdGlvbnMgb2YgSUJTUyBvciBBUCBvZiBTdGF0aW9uIG1vZGUKKyAgICB6Zlplcm9NZW1vcnkoKHU4X3QqKXdkLT5zdGEub3Bwb3NpdGVJbmZvLCBzaXplb2Yoc3RydWN0IHpzT3Bwb3NpdGVJbmZvKSAqIFpNX01BWF9PUFBPU0lURV9DT1VOVCk7CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgemZTY2FuTWdyU2NhblN0b3AoZGV2LCBaTV9TQ0FOX01HUl9TQ0FOX0lOVEVSTkFMKTsKKyAgICB6ZlNjYW5NZ3JTY2FuU3RvcChkZXYsIFpNX1NDQU5fTUdSX1NDQU5fRVhURVJOQUwpOworCisgICAgLyogVHVybiBvZmYgU29mdHdhcmUgV0VQL1RLSVAgKi8KKyAgICBpZiAod2QtPnN0YS5TV0VuY3J5cHRFbmFibGUgIT0gMCkKKyAgICB7CisgICAgICAgIHptX2RlYnVnX21zZzAoIkRpc2FibGUgc29mdHdhcmUgZW5jcnlwdGlvbiIpOworICAgICAgICB6ZlN0YURpc2FibGVTV0VuY3J5cHRpb24oZGV2KTsKKyAgICB9CisKKyAgICAvKiBJbXByb3ZlIFdFUC9US0lQIHBlcmZvcm1hY2Ugd2l0aCBIVCBBUCwgZGV0YWlsIGluZm9ybWF0aW9uIHBsZWFzZSBsb29rIGJ1ZyMzMjQ5NSAqLworICAgIC8vemZIcFNldFRUU0lGU1RpbWUoZGV2LCAweDgpOworCisgICAgLyogS2VlcCBQc2V1ZG8gbW9kZSAqLworICAgIGlmICggd2QtPndsYW5Nb2RlICE9IFpNX01PREVfUFNFVURPICkKKyAgICB7CisgICAgICAgIHdkLT53bGFuTW9kZSA9IFpNX01PREVfSU5GUkFTVFJVQ1RVUkU7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKiBEZWF1dGhlbnRpY2F0ZSBhIFNUQSAqLwordTE2X3QgemZpV2xhbkRlYXV0aCh6ZGV2X3QqIGRldiwgdTE2X3QqIG1hY0FkZHIsIHUxNl90IHJlYXNvbikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQICkKKyAgICB7CisgICAgICAgIC8vdTE2X3QgaWQ7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogd2Ugd2lsbCByZXNldCBhbGwga2V5IGluIHpmSHBSZXNldEtleUNhY2hlKCkgd2hlbiBjYWxsCisgICAgICAgICAqIHpmaVdsYW5EaXNhYmxlKCksIGlmIHdlIHdhbnQgdG8gcmVzZXQgUGFpcndpc2VLZXkgZm9yIGVhY2ggc3RhLAorICAgICAgICAgKiBuZWVkIHRvIHVzZSBhIG51bGxBZGRyIHRvIGxldCBrZXlpbmRleCBub3QgbWF0Y2guCisgICAgICAgICAqIG90aGVyd2lzZSBoYXJkd2FyZSB3aWxsIHN0aWxsIGZpbmQgUGFpcndpc2VLZXkgd2hlbiBBUCBjaGFuZ2UKKyAgICAgICAgICogZW5jcnlwdGlvbiBtb2RlIGZyb20gV1BBIHRvIFdFUAorICAgICAgICAgKi8KKworICAgICAgICAvKgorICAgICAgICBpZiAoKGlkID0gemZBcEZpbmRTdGEoZGV2LCBtYWNBZGRyKSkgIT0gMHhmZmZmKQorICAgICAgICB7CisgICAgICAgICAgICB1MzJfdCBrZXlbOF07CisgICAgICAgICAgICB1MTZfdCBudWxsQWRkclszXSA9IHsgMHgwLCAweDAsIDB4MCB9OworCisgICAgICAgICAgICBpZiAod2QtPmFwLnN0YVRhYmxlW2ldLmVuY3J5TW9kZSAhPSBaTV9OT19XRVApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZIcFNldEFwUGFpcndpc2VLZXkoZGV2LCBudWxsQWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFpNX05PX1dFUCwgJmtleVswXSwgJmtleVs0XSwgaSsxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vemZIcFNldEFwUGFpcndpc2VLZXkoZGV2LCAodTE2X3QgKiltYWNBZGRyLAorICAgICAgICAgICAgLy8gICAgICAgIFpNX05PX1dFUCwgJmtleVswXSwgJmtleVs0XSwgaWQrMSk7CisgICAgICAgICAgICB3ZC0+YXAuc3RhVGFibGVbaWRdLmVuY3J5TW9kZSA9IFpNX05PX1dFUDsKKyAgICAgICAgICAgIHdkLT5hcC5zdGFUYWJsZVtpZF0ua2V5SWR4ID0gMHhmZjsKKyAgICAgICAgfQorICAgICAgICAqLworCisgICAgICAgIHpmU2VuZE1tRnJhbWUoZGV2LCBaTV9XTEFOX0ZSQU1FX1RZUEVfREVBVVRILCBtYWNBZGRyLCByZWFzb24sIDAsIDApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB6ZlNlbmRNbUZyYW1lKGRldiwgWk1fV0xBTl9GUkFNRV9UWVBFX0RFQVVUSCwgd2QtPnN0YS5ic3NpZCwgMywgMCwgMCk7CisgICAgfQorCisgICAgLyogSXNzdWUgREVBVVRIIGNvbW1hbmQgdG8gRlcgKi8KKyAgICByZXR1cm4gMDsKK30KKworCisvKiBYUCBwYWNrZXQgZmlsdGVyIGZlYXR1cmUgOiAqLworLyogMT0+ZW5hYmxlOiBBbGwgbXVsdGljYXN0IGFkZHJlc3MgcGFja2V0cywgbm90IGp1c3QgdGhlIG9uZXMgZW51bWVyYXRlZCBpbiB0aGUgbXVsdGljYXN0IGFkZHJlc3MgbGlzdC4gKi8KKy8qIDA9PmRpc2FibGUgKi8KK3ZvaWQgemZpV2xhblNldEFsbE11bHRpY2FzdCh6ZGV2X3QqIGRldiwgdTMyX3Qgc2V0dGluZykKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgem1fbXNnMV9tbShaTV9MVl8wLCAic3RhLmJBbGxNdWx0aWNhc3QgPSAiLCBzZXR0aW5nKTsKKyAgICB3ZC0+c3RhLmJBbGxNdWx0aWNhc3QgPSAodThfdClzZXR0aW5nOworfQorCisKKy8qIEhUIGNvbmZpZ3VyZSBBUEkgKi8KK3ZvaWQgemZpV2xhblNldEhUQ3RybCh6ZGV2X3QqIGRldiwgdTMyX3QgKnNldHRpbmcsIHUzMl90IGZvcmNlVHhUUEMpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgd2QtPnByZWFtYmxlVHlwZSAgICAgICAgPSAodThfdClzZXR0aW5nWzBdOworICAgIHdkLT5zdGEucHJlYW1ibGVUeXBlSFQgID0gKHU4X3Qpc2V0dGluZ1sxXTsKKyAgICB3ZC0+c3RhLmh0Q3RybEJhbmR3aWR0aCA9ICh1OF90KXNldHRpbmdbMl07CisgICAgd2QtPnN0YS5odEN0cmxTVEJDICAgICAgPSAodThfdClzZXR0aW5nWzNdOworICAgIHdkLT5zdGEuaHRDdHJsU0cgICAgICAgID0gKHU4X3Qpc2V0dGluZ1s0XTsKKyAgICB3ZC0+c3RhLmRlZmF1bHRUQSAgICAgICA9ICh1OF90KXNldHRpbmdbNV07CisgICAgd2QtPmVuYWJsZUFnZ3JlZ2F0aW9uICAgPSAodThfdClzZXR0aW5nWzZdOworICAgIHdkLT5lbmFibGVXRFMgICAgICAgICAgID0gKHU4X3Qpc2V0dGluZ1s3XTsKKworICAgIHdkLT5mb3JjZVR4VFBDICAgICAgICAgID0gZm9yY2VUeFRQQzsKK30KKworLyogRkI1MCBpbiBPUyBYUCwgUkQgcHJpdmF0ZSB0ZXN0IGNvZGUgKi8KK3ZvaWQgemZpV2xhblF1ZXJ5SFRDdHJsKHpkZXZfdCogZGV2LCB1MzJfdCAqc2V0dGluZywgdTMyX3QgKmZvcmNlVHhUUEMpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgc2V0dGluZ1swXSA9IHdkLT5wcmVhbWJsZVR5cGU7CisgICAgc2V0dGluZ1sxXSA9IHdkLT5zdGEucHJlYW1ibGVUeXBlSFQ7CisgICAgc2V0dGluZ1syXSA9IHdkLT5zdGEuaHRDdHJsQmFuZHdpZHRoOworICAgIHNldHRpbmdbM10gPSB3ZC0+c3RhLmh0Q3RybFNUQkM7CisgICAgc2V0dGluZ1s0XSA9IHdkLT5zdGEuaHRDdHJsU0c7CisgICAgc2V0dGluZ1s1XSA9IHdkLT5zdGEuZGVmYXVsdFRBOworICAgIHNldHRpbmdbNl0gPSB3ZC0+ZW5hYmxlQWdncmVnYXRpb247CisgICAgc2V0dGluZ1s3XSA9IHdkLT5lbmFibGVXRFM7CisKKyAgICAqZm9yY2VUeFRQQyA9IHdkLT5mb3JjZVR4VFBDOworfQorCit2b2lkIHpmaVdsYW5EYmcoemRldl90KiBkZXYsIHU4X3Qgc2V0dGluZykKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB3ZC0+ZW5hYmxlSEFMRGJnSW5mbyA9IHNldHRpbmc7Cit9CisKKy8qIEZCNTAgaW4gT1MgWFAsIFJEIHByaXZhdGUgdGVzdCBjb2RlICovCit2b2lkIHpmaVdsYW5TZXRSeFBhY2tldER1bXAoemRldl90KiBkZXYsIHUzMl90IHNldHRpbmcpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIGlmIChzZXR0aW5nKQorICAgIHsKKyAgICAgICAgd2QtPnJ4UGFja2V0RHVtcCA9IDE7ICAgLyogZW5hYmxlICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHdkLT5yeFBhY2tldER1bXAgPSAwOyAgIC8qIGRpc2FibGUgKi8KKyAgICB9Cit9CisKKworLyogRkI1MCBpbiBPUyBYUCwgUkQgcHJpdmF0ZSB0ZXN0IGNvZGUgKi8KKy8qIFRhbGx5ICovCit2b2lkIHpmaVdsYW5SZXNldFRhbGx5KHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisJICAgd2QtPmNvbW1UYWxseS50eFVuaWNhc3RGcm0gPSAwOwkJLy90eFVuaWNhc3RGcmFtZXMKKwkgICB3ZC0+Y29tbVRhbGx5LnR4TXVsdGljYXN0RnJtID0gMDsJCS8vdHhNdWx0aWNhc3RGcmFtZXMKKwkgICB3ZC0+Y29tbVRhbGx5LnR4VW5pY2FzdE9jdGV0cyA9IDA7CS8vdHhVbmlPY3RldHMgIGJ5dGUgc2l6ZQorCSAgIHdkLT5jb21tVGFsbHkudHhNdWx0aWNhc3RPY3RldHMgPSAwOwkvL3R4TXVsdGlPY3RldHMgIGJ5dGUgc2l6ZQorCSAgIHdkLT5jb21tVGFsbHkudHhGcm1VcHBlck5ESVMgPSAwOworCSAgIHdkLT5jb21tVGFsbHkudHhGcm1EcnZNZ3QgPSAwOworCSAgIHdkLT5jb21tVGFsbHkuUmV0cnlGYWlsQ250ID0gMDsKKwkgICB3ZC0+Y29tbVRhbGx5Lkh3X1RvdGFsVHhGcm0gPSAwOwkJLy9IYXJkd2FyZSB0b3RhbCBUeCBGcmFtZQorCSAgIHdkLT5jb21tVGFsbHkuSHdfUmV0cnlDbnQgPSAwOwkJLy90eE11bHRpcGxlUmV0cmllc0ZyYW1lcworCSAgIHdkLT5jb21tVGFsbHkuSHdfVW5kZXJydW5DbnQgPSAwOy8vCisJICAgd2QtPmNvbW1UYWxseS5Ecml2ZXJSeEZybUNudCA9IDA7Ly8KKwkgICB3ZC0+Y29tbVRhbGx5LnJ4VW5pY2FzdEZybSA9IDA7CQkvL3J4VW5pY2FzdEZyYW1lcworCSAgIHdkLT5jb21tVGFsbHkucnhNdWx0aWNhc3RGcm0gPSAwOwkvL3J4TXVsdGljYXN0RnJhbWVzCisJICAgd2QtPmNvbW1UYWxseS5Ob3RpZnlORElTUnhGcm1DbnQgPSAwOy8vCisJICAgd2QtPmNvbW1UYWxseS5yeFVuaWNhc3RPY3RldHMgPSAwOwkvL3J4VW5pT2N0ZXRzICBieXRlIHNpemUKKwkgICB3ZC0+Y29tbVRhbGx5LnJ4TXVsdGljYXN0T2N0ZXRzID0gMDsJLy9yeE11bHRpT2N0ZXRzICBieXRlIHNpemUKKwkgICB3ZC0+Y29tbVRhbGx5LkRyaXZlckRpc2NhcmRlZEZybSA9IDA7Ly8gRGlzY2FyZCBieSBWYWxpZGF0ZUZyYW1lCisJICAgd2QtPmNvbW1UYWxseS5MZXNzVGhhbkRhdGFNaW5MZW4gPSAwOy8vCisJICAgd2QtPmNvbW1UYWxseS5HcmVhdGVyVGhhbk1heExlbiA9IDA7Ly8KKwkgICB3ZC0+Y29tbVRhbGx5LkRyaXZlckRpc2NhcmRlZEZybUNhdXNlQnlNdWx0aWNhc3RMaXN0ID0gMDsKKwkgICB3ZC0+Y29tbVRhbGx5LkRyaXZlckRpc2NhcmRlZEZybUNhdXNlQnlGcm1DdHJsID0gMDsKKwkgICB3ZC0+Y29tbVRhbGx5LnJ4TmVlZEZyZ0ZybSA9IDA7CQkvLyBuZWVkIG1vcmUgZnJnIGZybQorCSAgIHdkLT5jb21tVGFsbHkuRHJpdmVyUnhNZ3RGcm1DbnQgPSAwOworCSAgIHdkLT5jb21tVGFsbHkucnhCcm9hZGNhc3RGcm0gPSAwOwkvL1JlY2VpdmUgYnJvYWRjYXN0IGZyYW1lIGNvdW50CisJICAgd2QtPmNvbW1UYWxseS5yeEJyb2FkY2FzdE9jdGV0cyA9IDA7CS8vUmVjZWl2ZSBicm9hZGNhc3QgZnJhbWUgYnl0ZSBzaXplCisJICAgd2QtPmNvbW1UYWxseS5Id19Ub3RhbFJ4RnJtID0gMDsvLworCSAgIHdkLT5jb21tVGFsbHkuSHdfQ1JDMTZDbnQgPSAwOwkJLy9yeFBMQ1BDUkNFcnJDbnQKKwkgICB3ZC0+Y29tbVRhbGx5Lkh3X0NSQzMyQ250ID0gMDsJCS8vcnhDUkMzMkVyckNudAorCSAgIHdkLT5jb21tVGFsbHkuSHdfRGVjcnlwRXJyX1VOSSA9IDA7Ly8KKwkgICB3ZC0+Y29tbVRhbGx5Lkh3X0RlY3J5cEVycl9NdWwgPSAwOy8vCisJICAgd2QtPmNvbW1UYWxseS5Id19SeEZJRk9PdmVycnVuID0gMDsvLworCSAgIHdkLT5jb21tVGFsbHkuSHdfUnhUaW1lT3V0ID0gMDsKKwkgICB3ZC0+Y29tbVRhbGx5Lkxvc3NBUCA9IDA7Ly8KKworCSAgIHdkLT5jb21tVGFsbHkuVHhfTVBEVSA9IDA7CisJICAgd2QtPmNvbW1UYWxseS5CQV9GYWlsID0gMDsKKwkgICB3ZC0+Y29tbVRhbGx5Lkh3X1R4X0FNUERVID0gMDsKKwkgICB3ZC0+Y29tbVRhbGx5Lkh3X1R4X01QRFUgPSAwOworCisgICAgd2QtPmNvbW1UYWxseS50eFFvc0Ryb3BDb3VudFswXSA9IDA7CisgICAgd2QtPmNvbW1UYWxseS50eFFvc0Ryb3BDb3VudFsxXSA9IDA7CisgICAgd2QtPmNvbW1UYWxseS50eFFvc0Ryb3BDb3VudFsyXSA9IDA7CisgICAgd2QtPmNvbW1UYWxseS50eFFvc0Ryb3BDb3VudFszXSA9IDA7CisgICAgd2QtPmNvbW1UYWxseS50eFFvc0Ryb3BDb3VudFs0XSA9IDA7CisKKyAgICB3ZC0+Y29tbVRhbGx5Lkh3X1J4TVBEVSA9IDA7CisgICAgd2QtPmNvbW1UYWxseS5Id19SeERyb3BNUERVID0gMDsKKyAgICB3ZC0+Y29tbVRhbGx5Lkh3X1J4RGVsTVBEVSA9IDA7CisKKyAgICB3ZC0+Y29tbVRhbGx5Lkh3X1J4UGh5TWlzY0Vycm9yID0gMDsKKyAgICB3ZC0+Y29tbVRhbGx5Lkh3X1J4UGh5WFJFcnJvciA9IDA7CisgICAgd2QtPmNvbW1UYWxseS5Id19SeFBoeU9GRE1FcnJvciA9IDA7CisgICAgd2QtPmNvbW1UYWxseS5Id19SeFBoeUNDS0Vycm9yID0gMDsKKyAgICB3ZC0+Y29tbVRhbGx5Lkh3X1J4UGh5SFRFcnJvciA9IDA7CisgICAgd2QtPmNvbW1UYWxseS5Id19SeFBoeVRvdGFsQ291bnQgPSAwOworCisjaWYJKGRlZmluZWQoR0NDSykgJiYgZGVmaW5lZChPRkRNKSkKKwkgICB3ZC0+Y29tbVRhbGx5LnJ4MTFiRGF0YUZyYW1lID0gMDsKKwkgICB3ZC0+Y29tbVRhbGx5LnJ4T0ZETURhdGFGcmFtZSA9IDA7CisjZW5kaWYKKworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7Cit9CisKKy8qIEZCNTAgaW4gT1MgWFAsIFJEIHByaXZhdGUgdGVzdCBjb2RlICovCit2b2lkIHpmaVdsYW5RdWVyeVRhbGx5KHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNDb21tVGFsbHkgKnRhbGx5KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIHpmTWVtb3J5Q29weSgodThfdCopdGFsbHksICh1OF90Kikmd2QtPmNvbW1UYWxseSwgc2l6ZW9mKHN0cnVjdCB6c0NvbW1UYWxseSkpOworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7Cit9Cit2b2lkIHpmaVdsYW5RdWVyeVRyYWZUYWxseSh6ZGV2X3QqIGRldiwgc3RydWN0IHpzVHJhZlRhbGx5ICp0YWxseSkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICB6Zk1lbW9yeUNvcHkoKHU4X3QqKXRhbGx5LCAodThfdCopJndkLT50cmFmVGFsbHksIHNpemVvZihzdHJ1Y3QgenNUcmFmVGFsbHkpKTsKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworfQorCit2b2lkIHpmaVdsYW5RdWVyeU1vbkhhbFJ4SW5mbyh6ZGV2X3QqIGRldiwgc3RydWN0IHpzTW9uSGFsUnhJbmZvICptb25IYWxSeEluZm8pCit7CisgICAgemZIcFF1ZXJ5TW9uSGFsUnhJbmZvKGRldiwgKHU4X3QgKiltb25IYWxSeEluZm8pOworfQorCisvKiBwYXJzZSB0aGUgbW9kZU1ES0VuYWJsZSB0byBEcnZDb3JlICovCit2b2lkIHpmaURLRW5hYmxlKHpkZXZfdCogZGV2LCB1MzJfdCBlbmFibGUpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgd2QtPm1vZGVNREtFbmFibGUgPSBlbmFibGU7CisgICAgem1fZGVidWdfbXNnMSgibW9kZU1ES0VuYWJsZSA9ICIsIHdkLT5tb2RlTURLRW5hYmxlKTsKK30KKworLyogYWlyb1BlZWsgKi8KK3UzMl90IHpmaVdsYW5RdWVyeVBhY2tldFR5cGVQcm9taXNjdW91cyh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICByZXR1cm4gd2QtPnN3U25pZmZlcjsKK30KKworLyogYWlyb1BlZWsgKi8KK3ZvaWQgemZpV2xhblNldFBhY2tldFR5cGVQcm9taXNjdW91cyh6ZGV2X3QqIGRldiwgdTMyX3Qgc2V0VmFsdWUpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisJICAgd2QtPnN3U25pZmZlciA9IHNldFZhbHVlOworCSAgIHptX21zZzFfbW0oWk1fTFZfMCwgIndkLT5zd1NuaWZmZXIgIiwgd2QtPnN3U25pZmZlcik7CisJICAgaWYgKHNldFZhbHVlKQorCSAgIHsKKwkgICAgICAgCS8qIHdyaXRlIHJlZ2lzdGVyIGZvciBzbmlmZmVyIG1vZGUgKi8KKyAgICAgICAgICAgIHpmSHBTZXRTbmlmZmVyTW9kZShkZXYsIDEpOworICAgICAgICAgICAgem1fbXNnMF9tbShaTV9MVl8xLCAiZW5hbGJlIHNuaWZmZXIgbW9kZSIpOworCSAgIH0KKwkgICBlbHNlCisJICAgeworICAgICAgICAgICAgemZIcFNldFNuaWZmZXJNb2RlKGRldiwgMCk7CisgICAgICAgICAgICB6bV9tc2cwX21tKFpNX0xWXzAsICJkaXNhbGJlIHNuaWZmZXIgbW9kZSIpOworCSAgIH0KK30KKwordm9pZCB6ZmlXbGFuU2V0WExpbmtNb2RlKHpkZXZfdCogZGV2LCB1MzJfdCBzZXRWYWx1ZSkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB3ZC0+WExpbmtNb2RlID0gc2V0VmFsdWU7CisgICAgaWYgKHNldFZhbHVlKQorICAgIHsKKyAgICAgICAgLyogd3JpdGUgcmVnaXN0ZXIgZm9yIHNuaWZmZXIgbW9kZSAqLworICAgICAgICB6ZkhwU2V0U25pZmZlck1vZGUoZGV2LCAxKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgemZIcFNldFNuaWZmZXJNb2RlKGRldiwgMCk7CisgICAgfQorfQorCitleHRlcm4gdm9pZCB6ZlN0YUNoYW5uZWxNYW5hZ2VtZW50KHpkZXZfdCogZGV2LCB1OF90IHNjYW4pOwordm9pZCB6ZmlTZXRDaGFubmVsTWFuYWdlbWVudCh6ZGV2X3QqIGRldiwgdTMyX3Qgc2V0dGluZykKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBzd2l0Y2ggKHNldHRpbmcpCisgICAgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICB3ZC0+c3RhLkVuYWJsZUhUID0gMTsKKyAgICAgICAgICAgIHdkLT5CYW5kV2lkdGg0MCA9IDE7CisgICAgICAgICAgICB3ZC0+RXh0T2Zmc2V0ICAgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHdkLT5zdGEuRW5hYmxlSFQgPSAxOworICAgICAgICAgICAgd2QtPkJhbmRXaWR0aDQwID0gMTsKKyAgICAgICAgICAgIHdkLT5FeHRPZmZzZXQgICA9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgd2QtPnN0YS5FbmFibGVIVCA9IDE7CisgICAgICAgICAgICB3ZC0+QmFuZFdpZHRoNDAgPSAwOworICAgICAgICAgICAgd2QtPkV4dE9mZnNldCAgID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgd2QtPkJhbmRXaWR0aDQwID0gMDsKKyAgICAgICAgICAgIHdkLT5FeHRPZmZzZXQgICA9IDA7CisgICAgICAgICAgICBicmVhazsKKworICAgIH0KKyAgICB6ZkNvcmVTZXRGcmVxdWVuY3lFeChkZXYsIHdkLT5mcmVxdWVuY3ksIHdkLT5CYW5kV2lkdGg0MCwKKyAgICAgICAgICAgICAgICAgICAgd2QtPkV4dE9mZnNldCwgTlVMTCk7Cit9CisKK3ZvaWQgemZpU2V0Umlmcyh6ZGV2X3QqIGRldiwgdTE2X3Qgc2V0dGluZykKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB3ZC0+c3RhLmllLkh0SW5mby5DaGFubmVsSW5mbyB8PSBFeHRIdENhcF9SSUZTTW9kZTsKKyAgICB3ZC0+c3RhLkVuYWJsZUhUID0gMTsKKyAgICBzd2l0Y2ggKHNldHRpbmcpCisgICAgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICB3ZC0+c3RhLkhUMjA0MCA9IDA7CisvLyAgICAgICAgICAgIHpmSHBTZXRSaWZzKGRldiwgMSwgMCwgKHdkLT5zdGEuY3VycmVudEZyZXF1ZW5jeSA8IDMwMDApPyAxOjApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHdkLT5zdGEuSFQyMDQwID0gMTsKKy8vICAgICAgICAgICAgemZIcFNldFJpZnMoZGV2LCAxLCAxLCAod2QtPnN0YS5jdXJyZW50RnJlcXVlbmN5IDwgMzAwMCk/IDE6MCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHdkLT5zdGEuSFQyMDQwID0gMDsKKy8vICAgICAgICAgICAgemZIcFNldFJpZnMoZGV2LCAxLCAwLCAod2QtPnN0YS5jdXJyZW50RnJlcXVlbmN5IDwgMzAwMCk/IDE6MCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgemZpQ2hlY2tSaWZzKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGlmKHdkLT5zdGEuaWUuSHRJbmZvLkNoYW5uZWxJbmZvICYgRXh0SHRDYXBfUklGU01vZGUpCisgICAgeworLy8gICAgICAgIHpmSHBTZXRSaWZzKGRldiwgd2QtPnN0YS5FbmFibGVIVCwgd2QtPnN0YS5IVDIwNDAsICh3ZC0+c3RhLmN1cnJlbnRGcmVxdWVuY3kgPCAzMDAwKT8gMTowKTsKKyAgICB9Cit9CisKK3ZvaWQgemZpU2V0UmVvcmRlcih6ZGV2X3QqIGRldiwgdTE2X3QgdmFsdWUpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgd2QtPnJlb3JkZXIgPSB2YWx1ZTsKK30KKwordm9pZCB6ZmlTZXRTZXFEZWJ1Zyh6ZGV2X3QqIGRldiwgdTE2X3QgdmFsdWUpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgd2QtPnNlcV9kZWJ1ZyA9IHZhbHVlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NmdW5jLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY2Z1bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2M0OWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NmdW5jLmMKQEAgLTAsMCArMSwxMjI3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImNwcmVjb21wLmgiCisKK3U4X3QgemZRdWVyeU9wcG9zaXRlUmF0ZSh6ZGV2X3QqIGRldiwgdThfdCBkc3RfbWFjWzZdLCB1OF90IGZyYW1lVHlwZSkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvKiBGb3IgQVAncyByYXRlIGFkYXB0aW9uICovCisgICAgaWYgKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCApCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBGb3IgU1RBJ3MgcmF0ZSBhZGFwdGlvbiAqLworICAgIGlmICggKGZyYW1lVHlwZSAmIDB4MGMpID09IFpNX1dMQU5fREFUQV9GUkFNRSApCisgICAgeworICAgICAgICBpZiAoIFpNX0lTX01VTFRJQ0FTVChkc3RfbWFjKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB3ZC0+c3RhLm1UeFJhdGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gd2QtPnN0YS51VHhSYXRlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHdkLT5zdGEubW1UeFJhdGU7Cit9CisKK3ZvaWQgemZDb3B5VG9JbnRUeEJ1ZmZlcih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHU4X3QqIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICB1MTZfdCBvZmZzZXQsIHUxNl90IGxlbmd0aCkKK3sKKyAgICB1MTZfdCBpOworCisgICAgZm9yKGk9MDsgaTxsZW5ndGg7aSsrKQorICAgIHsKKyAgICAgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCtpLCBzcmNbaV0pOworICAgIH0KK30KKwordm9pZCB6ZkNvcHlUb1J4QnVmZmVyKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdThfdCogc3JjLAorICAgICAgICAgICAgICAgICAgICAgIHUxNl90IG9mZnNldCwgdTE2X3QgbGVuZ3RoKQoreworICAgIHUxNl90IGk7CisKKyAgICBmb3IoaT0wOyBpPGxlbmd0aDtpKyspCisgICAgeworICAgICAgICB6bXdfcnhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0K2ksIHNyY1tpXSk7CisgICAgfQorfQorCit2b2lkIHpmQ29weUZyb21JbnRUeEJ1ZmZlcih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHU4X3QqIGRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNl90IG9mZnNldCwgdTE2X3QgbGVuZ3RoKQoreworICAgIHUxNl90IGk7CisKKyAgICBmb3IoaT0wOyBpPGxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgZHN0W2ldID0gem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0K2kpOworICAgIH0KK30KKwordm9pZCB6ZkNvcHlGcm9tUnhCdWZmZXIoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1OF90KiBkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICB1MTZfdCBvZmZzZXQsIHUxNl90IGxlbmd0aCkKK3sKKyAgICB1MTZfdCBpOworCisgICAgZm9yKGk9MDsgaTxsZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIGRzdFtpXSA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCtpKTsKKyAgICB9Cit9CisKKyNpZiAxCit2b2lkIHpmTWVtb3J5Q29weSh1OF90KiBkc3QsIHU4X3QqIHNyYywgdTE2X3QgbGVuZ3RoKQoreworICAgIHpmd01lbW9yeUNvcHkoZHN0LCBzcmMsIGxlbmd0aCk7Cit9CisKK3ZvaWQgemZNZW1vcnlNb3ZlKHU4X3QqIGRzdCwgdThfdCogc3JjLCB1MTZfdCBsZW5ndGgpCit7CisgICAgemZ3TWVtb3J5TW92ZShkc3QsIHNyYywgbGVuZ3RoKTsKK30KKwordm9pZCB6Zlplcm9NZW1vcnkodThfdCogdmEsIHUxNl90IGxlbmd0aCkKK3sKKyAgICB6ZndaZXJvTWVtb3J5KHZhLCBsZW5ndGgpOworfQorCit1OF90IHpmTWVtb3J5SXNFcXVhbCh1OF90KiBtMSwgdThfdCogbTIsIHUxNl90IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gemZ3TWVtb3J5SXNFcXVhbChtMSwgbTIsIGxlbmd0aCk7Cit9CisjZW5kaWYKKwordThfdCB6ZlJ4QnVmZmVyRXF1YWxUb1N0cih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHU4X3QqIHN0ciwgdTE2X3Qgb2Zmc2V0LCB1MTZfdCBsZW5ndGgpCit7CisgICAgdTE2X3QgaTsKKyAgICB1OF90IGNoOworCisgICAgZm9yKGk9MDsgaTxsZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIGNoID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0K2kpOworICAgICAgICBpZiAoIGNoICE9IHN0cltpXSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCit2b2lkIHpmVHhCdWZmZXJDb3B5KHpkZXZfdCpkZXYsIHpidWZfdCogZHN0LCB6YnVmX3QqIHNyYywKKyAgICAgICAgICAgICAgICAgICAgdTE2X3QgZHN0T2Zmc2V0LCB1MTZfdCBzcmNPZmZzZXQsIHUxNl90IGxlbmd0aCkKK3sKKyAgICB1MTZfdCBpOworCisgICAgZm9yKGk9MDsgaTxsZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIHptd190eF9idWZfd3JpdGViKGRldiwgZHN0LCBkc3RPZmZzZXQraSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgem13X3R4X2J1Zl9yZWFkYihkZXYsIHNyYywgc3JjT2Zmc2V0K2kpKTsKKyAgICB9Cit9CisKK3ZvaWQgemZSeEJ1ZmZlckNvcHkoemRldl90KmRldiwgemJ1Zl90KiBkc3QsIHpidWZfdCogc3JjLAorICAgICAgICAgICAgICAgICAgICB1MTZfdCBkc3RPZmZzZXQsIHUxNl90IHNyY09mZnNldCwgdTE2X3QgbGVuZ3RoKQoreworICAgIHUxNl90IGk7CisKKyAgICBmb3IoaT0wOyBpPGxlbmd0aDsgaSsrKQorICAgIHsKKyAgICAgICAgem13X3J4X2J1Zl93cml0ZWIoZGV2LCBkc3QsIGRzdE9mZnNldCtpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRiKGRldiwgc3JjLCBzcmNPZmZzZXQraSkpOworICAgIH0KK30KKworCit2b2lkIHpmQ29sbGVjdEhXVGFsbHkoemRldl90KmRldiwgdTMyX3QqIHJzcCwgdThfdCBpZCkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlmIChpZCA9PSAwKQorICAgIHsKKyAgICAgICAgd2QtPmNvbW1UYWxseS5Id19VbmRlcnJ1bkNudCArPSAoMHhGRkZGICYgcnNwWzFdKTsKKyAgICAgICAgd2QtPmNvbW1UYWxseS5Id19Ub3RhbFJ4RnJtICs9IHJzcFsyXTsKKyAgICAgICAgd2QtPmNvbW1UYWxseS5Id19DUkMzMkNudCArPSByc3BbM107CisgICAgICAgIHdkLT5jb21tVGFsbHkuSHdfQ1JDMTZDbnQgKz0gcnNwWzRdOworICAgICAgICAjaWZkZWYgWk1fRU5BQkxFX05BVElWRV9XSUZJCisgICAgICAgIC8qIFRoZXNlIGNvZGUgYXJlIGhlcmUgdG8gc2F0aXNmeSBWaXN0YSBEVE0gKi8KKyAgICAgICAgd2QtPmNvbW1UYWxseS5Id19EZWNyeXBFcnJfVU5JICs9ICgocnNwWzVdPjUwKSAmJiAocnNwWzVdPDYwKSk/NTA6cnNwWzVdOworICAgICAgICAjZWxzZQorICAgICAgICB3ZC0+Y29tbVRhbGx5Lkh3X0RlY3J5cEVycl9VTkkgKz0gcnNwWzVdOworICAgICAgICAjZW5kaWYKKyAgICAgICAgd2QtPmNvbW1UYWxseS5Id19SeEZJRk9PdmVycnVuICs9IHJzcFs2XTsKKyAgICAgICAgd2QtPmNvbW1UYWxseS5Id19EZWNyeXBFcnJfTXVsICs9IHJzcFs3XTsKKyAgICAgICAgd2QtPmNvbW1UYWxseS5Id19SZXRyeUNudCArPSByc3BbOF07CisgICAgICAgIHdkLT5jb21tVGFsbHkuSHdfVG90YWxUeEZybSArPSByc3BbOV07CisgICAgICAgIHdkLT5jb21tVGFsbHkuSHdfUnhUaW1lT3V0ICs9cnNwWzEwXTsKKworICAgICAgICB3ZC0+Y29tbVRhbGx5LlR4X01QRFUgKz0gcnNwWzExXTsKKyAgICAgICAgd2QtPmNvbW1UYWxseS5CQV9GYWlsICs9IHJzcFsxMl07CisgICAgICAgIHdkLT5jb21tVGFsbHkuSHdfVHhfQU1QRFUgKz0gcnNwWzEzXTsKKyAgICAgICAgd2QtPmNvbW1UYWxseS5Id19UeF9NUERVICs9IHJzcFsxNF07CisgICAgICAgIHdkLT5jb21tVGFsbHkuUmF0ZUN0cmxUeE1QRFUgKz0gcnNwWzExXTsKKyAgICAgICAgd2QtPmNvbW1UYWxseS5SYXRlQ3RybEJBRmFpbCArPSByc3BbMTJdOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB3ZC0+Y29tbVRhbGx5Lkh3X1J4TVBEVSArPSByc3BbMV07CisgICAgICAgIHdkLT5jb21tVGFsbHkuSHdfUnhEcm9wTVBEVSArPSByc3BbMl07CisgICAgICAgIHdkLT5jb21tVGFsbHkuSHdfUnhEZWxNUERVICs9IHJzcFszXTsKKworICAgICAgICB3ZC0+Y29tbVRhbGx5Lkh3X1J4UGh5TWlzY0Vycm9yICs9IHJzcFs0XTsKKyAgICAgICAgd2QtPmNvbW1UYWxseS5Id19SeFBoeVhSRXJyb3IgKz0gcnNwWzVdOworICAgICAgICB3ZC0+Y29tbVRhbGx5Lkh3X1J4UGh5T0ZETUVycm9yICs9IHJzcFs2XTsKKyAgICAgICAgd2QtPmNvbW1UYWxseS5Id19SeFBoeUNDS0Vycm9yICs9IHJzcFs3XTsKKyAgICAgICAgd2QtPmNvbW1UYWxseS5Id19SeFBoeUhURXJyb3IgKz0gcnNwWzhdOworICAgICAgICB3ZC0+Y29tbVRhbGx5Lkh3X1J4UGh5VG90YWxDb3VudCArPSByc3BbOV07CisgICAgfQorCisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlmIChpZCA9PSAwKQorICAgIHsKKyAgICAgICAgem1fbXNnMV9tbShaTV9MVl8xLCAicnNwbGVuID0iLCByc3BbMF0pOworICAgICAgICB6bV9tc2cxX21tKFpNX0xWXzEsICJId19VbmRlcnJ1bkNudCAgICA9ICIsICgweEZGRkYgJiByc3BbMV0pKTsKKyAgICAgICAgem1fbXNnMV9tbShaTV9MVl8xLCAiSHdfVG90YWxSeEZybSAgICAgPSAiLCByc3BbMl0pOworICAgICAgICB6bV9tc2cxX21tKFpNX0xWXzEsICJId19DUkMzMkNudCAgICAgICA9ICIsIHJzcFszXSk7CisgICAgICAgIHptX21zZzFfbW0oWk1fTFZfMSwgIkh3X0NSQzE2Q250ICAgICAgID0gIiwgcnNwWzRdKTsKKyAgICAgICAgem1fbXNnMV9tbShaTV9MVl8xLCAiSHdfRGVjcnlwRXJyX1VOSSAgPSAiLCByc3BbNV0pOworICAgICAgICB6bV9tc2cxX21tKFpNX0xWXzEsICJId19SeEZJRk9PdmVycnVuICA9ICIsIHJzcFs2XSk7CisgICAgICAgIHptX21zZzFfbW0oWk1fTFZfMSwgIkh3X0RlY3J5cEVycl9NdWwgID0gIiwgcnNwWzddKTsKKyAgICAgICAgem1fbXNnMV9tbShaTV9MVl8xLCAiSHdfUmV0cnlDbnQgICAgICAgPSAiLCByc3BbOF0pOworICAgICAgICB6bV9tc2cxX21tKFpNX0xWXzEsICJId19Ub3RhbFR4RnJtICAgICA9ICIsIHJzcFs5XSk7CisgICAgICAgIHptX21zZzFfbW0oWk1fTFZfMSwgIkh3X1J4VGltZU91dCAgICAgID0gIiwgcnNwWzEwXSk7CisgICAgICAgIHptX21zZzFfbW0oWk1fTFZfMSwgIlR4X01QRFUgICAgICAgICAgID0gIiwgcnNwWzExXSk7CisgICAgICAgIHptX21zZzFfbW0oWk1fTFZfMSwgIkJBX0ZhaWwgICAgICAgICAgID0gIiwgcnNwWzEyXSk7CisgICAgICAgIHptX21zZzFfbW0oWk1fTFZfMSwgIkh3X1R4X0FNUERVICAgICAgID0gIiwgcnNwWzEzXSk7CisgICAgICAgIHptX21zZzFfbW0oWk1fTFZfMSwgIkh3X1R4X01QRFUgICAgICAgID0gIiwgcnNwWzE0XSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHptX21zZzFfbW0oWk1fTFZfMSwgInJzcGxlbiAgICAgICAgICAgICA9ICIsIHJzcFswXSk7CisgICAgICAgIHptX21zZzFfbW0oWk1fTFZfMSwgIkh3X1J4TVBEVSAgICAgICAgICA9ICIsICgweEZGRkYgJiByc3BbMV0pKTsKKyAgICAgICAgem1fbXNnMV9tbShaTV9MVl8xLCAiSHdfUnhEcm9wTVBEVSAgICAgID0gIiwgcnNwWzJdKTsKKyAgICAgICAgem1fbXNnMV9tbShaTV9MVl8xLCAiSHdfUnhEZWxNUERVICAgICAgID0gIiwgcnNwWzNdKTsKKyAgICAgICAgem1fbXNnMV9tbShaTV9MVl8xLCAiSHdfUnhQaHlNaXNjRXJyb3IgID0gIiwgcnNwWzRdKTsKKyAgICAgICAgem1fbXNnMV9tbShaTV9MVl8xLCAiSHdfUnhQaHlYUkVycm9yICAgID0gIiwgcnNwWzVdKTsKKyAgICAgICAgem1fbXNnMV9tbShaTV9MVl8xLCAiSHdfUnhQaHlPRkRNRXJyb3IgID0gIiwgcnNwWzZdKTsKKyAgICAgICAgem1fbXNnMV9tbShaTV9MVl8xLCAiSHdfUnhQaHlDQ0tFcnJvciAgID0gIiwgcnNwWzddKTsKKyAgICAgICAgem1fbXNnMV9tbShaTV9MVl8xLCAiSHdfUnhQaHlIVEVycm9yICAgID0gIiwgcnNwWzhdKTsKKyAgICAgICAgem1fbXNnMV9tbShaTV9MVl8xLCAiSHdfUnhQaHlUb3RhbENvdW50ID0gIiwgcnNwWzldKTsKKyAgICB9CisKK30KKworLyogVGltZXIgcmVsYXRlZCBmdW5jdGlvbnMgKi8KK3ZvaWQgemZUaW1lckluaXQoemRldl90KiBkZXYpCit7CisgICAgdThfdCAgIGk7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bV9kZWJ1Z19tc2cwKCIiKTsKKworICAgIHdkLT50aW1lckxpc3QuZnJlZUNvdW50ID0gWk1fTUFYX1RJTUVSX0NPVU5UOworICAgIHdkLT50aW1lckxpc3QuaGVhZCA9ICYod2QtPnRpbWVyTGlzdC5saXN0WzBdKTsKKyAgICB3ZC0+dGltZXJMaXN0LnRhaWwgPSAmKHdkLT50aW1lckxpc3QubGlzdFtaTV9NQVhfVElNRVJfQ09VTlQtMV0pOworICAgIHdkLT50aW1lckxpc3QuaGVhZC0+cHJlID0gTlVMTDsKKyAgICB3ZC0+dGltZXJMaXN0LmhlYWQtPm5leHQgPSAmKHdkLT50aW1lckxpc3QubGlzdFsxXSk7CisgICAgd2QtPnRpbWVyTGlzdC50YWlsLT5wcmUgPSAmKHdkLT50aW1lckxpc3QubGlzdFtaTV9NQVhfVElNRVJfQ09VTlQtMl0pOworICAgIHdkLT50aW1lckxpc3QudGFpbC0+bmV4dCA9IE5VTEw7CisKKyAgICBmb3IoIGk9MTsgaTwoWk1fTUFYX1RJTUVSX0NPVU5ULTEpOyBpKysgKQorICAgIHsKKyAgICAgICAgd2QtPnRpbWVyTGlzdC5saXN0W2ldLnByZSA9ICYod2QtPnRpbWVyTGlzdC5saXN0W2ktMV0pOworICAgICAgICB3ZC0+dGltZXJMaXN0Lmxpc3RbaV0ubmV4dCA9ICYod2QtPnRpbWVyTGlzdC5saXN0W2krMV0pOworICAgIH0KKworICAgIHdkLT5iVGltZXJSZWFkeSA9IFRSVUU7Cit9CisKKwordTE2X3QgemZUaW1lclNjaGVkdWxlKHpkZXZfdCogZGV2LCB1MTZfdCBldmVudCwgdTMyX3QgdGljaykKK3sKKyAgICBzdHJ1Y3QgenNUaW1lckVudHJ5ICpwRnJlZUVudHJ5OworICAgIHN0cnVjdCB6c1RpbWVyRW50cnkgKnBFbnRyeTsKKyAgICB1OF90ICAgaSwgY291bnQ7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAoIHdkLT50aW1lckxpc3QuZnJlZUNvdW50ID09IDAgKQorICAgIHsKKyAgICAgICAgem1fZGVidWdfbXNnMCgibm8gbW9yZSB0aW1lciIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvL3ptX2RlYnVnX21zZzIoImV2ZW50ID0gIiwgZXZlbnQpOworICAgIC8vem1fZGVidWdfbXNnMSgidGFyZ2V0IHRpY2sgPSAiLCB3ZC0+dGljayArIHRpY2spOworCisgICAgY291bnQgPSBaTV9NQVhfVElNRVJfQ09VTlQgLSB3ZC0+dGltZXJMaXN0LmZyZWVDb3VudDsKKworICAgIGlmICggY291bnQgPT0gMCApCisgICAgeworICAgICAgICB3ZC0+dGltZXJMaXN0LmZyZWVDb3VudC0tOworICAgICAgICB3ZC0+dGltZXJMaXN0LmhlYWQtPmV2ZW50ID0gZXZlbnQ7CisgICAgICAgIHdkLT50aW1lckxpc3QuaGVhZC0+dGltZXIgPSB3ZC0+dGljayArIHRpY2s7CisgICAgICAgIC8vem1fZGVidWdfbXNnMSgiZnJlZSB0aW1lciBjb3VudCA9ICIsIHdkLT50aW1lckxpc3QuZnJlZUNvdW50KTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBwRnJlZUVudHJ5ID0gd2QtPnRpbWVyTGlzdC50YWlsOworICAgIHBGcmVlRW50cnktPnRpbWVyID0gd2QtPnRpY2sgKyB0aWNrOworICAgIHBGcmVlRW50cnktPmV2ZW50ID0gZXZlbnQ7CisgICAgd2QtPnRpbWVyTGlzdC50YWlsID0gcEZyZWVFbnRyeS0+cHJlOworICAgIHBFbnRyeSA9IHdkLT50aW1lckxpc3QuaGVhZDsKKworICAgIGZvciggaT0wOyBpPGNvdW50OyBpKysgKQorICAgIHsKKyAgICAgICAgLy8gcHJldmVudCBmcm9tIHRoZSBjYXNlIG9mIHRpY2sgb3ZlcmZsb3cKKyAgICAgICAgaWYgKCAoIHBFbnRyeS0+dGltZXIgPiBwRnJlZUVudHJ5LT50aW1lciApJiYKKyAgICAgICAgICAgICAoKHBFbnRyeS0+dGltZXIgLSBwRnJlZUVudHJ5LT50aW1lcikgPCAxMDAwMDAwMDAwKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggaSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwRnJlZUVudHJ5LT5wcmUgPSBwRW50cnktPnByZTsKKyAgICAgICAgICAgICAgICBwRnJlZUVudHJ5LT5wcmUtPm5leHQgPSBwRnJlZUVudHJ5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBGcmVlRW50cnktPnByZSA9IE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHBFbnRyeS0+cHJlID0gcEZyZWVFbnRyeTsKKyAgICAgICAgICAgIHBGcmVlRW50cnktPm5leHQgPSBwRW50cnk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHBFbnRyeSA9IHBFbnRyeS0+bmV4dDsKKyAgICB9CisKKyAgICBpZiAoIGkgPT0gMCApCisgICAgeworICAgICAgICB3ZC0+dGltZXJMaXN0LmhlYWQgPSBwRnJlZUVudHJ5OworICAgIH0KKworICAgIGlmICggaSA9PSBjb3VudCApCisgICAgeworICAgICAgICBwRnJlZUVudHJ5LT5wcmUgPSBwRW50cnktPnByZTsKKyAgICAgICAgcEZyZWVFbnRyeS0+cHJlLT5uZXh0ID0gcEZyZWVFbnRyeTsKKyAgICAgICAgcEVudHJ5LT5wcmUgPSBwRnJlZUVudHJ5OworICAgICAgICBwRnJlZUVudHJ5LT5uZXh0ID0gcEVudHJ5OworICAgIH0KKworICAgIHdkLT50aW1lckxpc3QuZnJlZUNvdW50LS07CisgICAgLy96bV9kZWJ1Z19tc2cxKCJmcmVlIHRpbWVyIGNvdW50ID0gIiwgd2QtPnRpbWVyTGlzdC5mcmVlQ291bnQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3UxNl90IHpmVGltZXJDYW5jZWwoemRldl90KiBkZXYsIHUxNl90IGV2ZW50KQoreworICAgIHN0cnVjdCB6c1RpbWVyRW50cnkgKnBFbnRyeTsKKyAgICB1OF90ICAgaSwgY291bnQ7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvL3ptX2RlYnVnX21zZzIoImV2ZW50ID0gIiwgZXZlbnQpOworICAgIC8vem1fZGVidWdfbXNnMSgiZnJlZSB0aW1lciBjb3VudChiKSA9ICIsIHdkLT50aW1lckxpc3QuZnJlZUNvdW50KTsKKworICAgIHBFbnRyeSA9IHdkLT50aW1lckxpc3QuaGVhZDsKKyAgICBjb3VudCA9IFpNX01BWF9USU1FUl9DT1VOVCAtIHdkLT50aW1lckxpc3QuZnJlZUNvdW50OworCisgICAgZm9yKCBpPTA7IGk8Y291bnQ7IGkrKyApCisgICAgeworICAgICAgICBpZiAoIHBFbnRyeS0+ZXZlbnQgPT0gZXZlbnQgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIHBFbnRyeSA9PSB3ZC0+dGltZXJMaXN0LmhlYWQgKQorICAgICAgICAgICAgeyAgIC8qIHJlbW92ZSBoZWFkIGVudHJ5ICovCisgICAgICAgICAgICAgICAgd2QtPnRpbWVyTGlzdC5oZWFkID0gcEVudHJ5LT5uZXh0OworICAgICAgICAgICAgICAgIHdkLT50aW1lckxpc3QudGFpbC0+bmV4dCA9IHBFbnRyeTsKKyAgICAgICAgICAgICAgICBwRW50cnktPnByZSA9IHdkLT50aW1lckxpc3QudGFpbDsKKyAgICAgICAgICAgICAgICB3ZC0+dGltZXJMaXN0LnRhaWwgPSBwRW50cnk7CisgICAgICAgICAgICAgICAgcEVudHJ5ID0gd2QtPnRpbWVyTGlzdC5oZWFkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeyAgIC8qIHJlbW92ZSBub24taGVhZCBlbnRyeSAqLworICAgICAgICAgICAgICAgIHBFbnRyeS0+cHJlLT5uZXh0ID0gcEVudHJ5LT5uZXh0OworICAgICAgICAgICAgICAgIHBFbnRyeS0+bmV4dC0+cHJlID0gcEVudHJ5LT5wcmU7CisgICAgICAgICAgICAgICAgd2QtPnRpbWVyTGlzdC50YWlsLT5uZXh0ID0gcEVudHJ5OworICAgICAgICAgICAgICAgIHBFbnRyeS0+cHJlID0gd2QtPnRpbWVyTGlzdC50YWlsOworICAgICAgICAgICAgICAgIHdkLT50aW1lckxpc3QudGFpbCA9IHBFbnRyeTsKKyAgICAgICAgICAgICAgICBwRW50cnkgPSBwRW50cnktPm5leHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdkLT50aW1lckxpc3QuZnJlZUNvdW50Kys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwRW50cnkgPSBwRW50cnktPm5leHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvL3ptX2RlYnVnX21zZzEoImZyZWUgdGltZXIgY291bnQoYSkgPSAiLCB3ZC0+dGltZXJMaXN0LmZyZWVDb3VudCk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCB6ZlRpbWVyQ2xlYXIoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgd2QtPnRpbWVyTGlzdC5mcmVlQ291bnQgPSBaTV9NQVhfVElNRVJfQ09VTlQ7Cit9CisKK3UxNl90IHpmVGltZXJDaGVja0FuZEhhbmRsZSh6ZGV2X3QqIGRldikKK3sKKyAgICBzdHJ1Y3QgenNUaW1lckVudHJ5ICpwRW50cnk7CisgICAgc3RydWN0IHpzVGltZXJFbnRyeSAqcFRoZUxhc3RFbnRyeSA9IE5VTEw7CisgICAgdTE2X3QgIGV2ZW50W1pNX01BWF9USU1FUl9DT1VOVF07CisgICAgdThfdCAgIGksIGo9MCwgY291bnQ7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgaWYgKCAhd2QtPmJUaW1lclJlYWR5ICkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBwRW50cnkgPSB3ZC0+dGltZXJMaXN0LmhlYWQ7CisgICAgY291bnQgPSBaTV9NQVhfVElNRVJfQ09VTlQgLSB3ZC0+dGltZXJMaXN0LmZyZWVDb3VudDsKKworICAgIGZvciggaT0wOyBpPGNvdW50OyBpKysgKQorICAgIHsKKyAgICAgICAgLy8gcHJldmVudCBmcm9tIHRoZSBjYXNlIG9mIHRpY2sgb3ZlcmZsb3cKKyAgICAgICAgaWYgKCAoIHBFbnRyeS0+dGltZXIgPiB3ZC0+dGljayApJiYKKyAgICAgICAgICAgICAoKHBFbnRyeS0+dGltZXIgLSB3ZC0+dGljaykgPCAxMDAwMDAwMDAwKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZXZlbnRbaisrXSA9IHBFbnRyeS0+ZXZlbnQ7CisgICAgICAgIHBUaGVMYXN0RW50cnkgPSBwRW50cnk7CisgICAgICAgIHBFbnRyeSA9IHBFbnRyeS0+bmV4dDsKKyAgICB9CisKKyAgICBpZiAoIGogPiAwICkKKyAgICB7CisgICAgICAgIHdkLT50aW1lckxpc3QudGFpbC0+bmV4dCA9IHdkLT50aW1lckxpc3QuaGVhZDsKKyAgICAgICAgd2QtPnRpbWVyTGlzdC5oZWFkLT5wcmUgPSB3ZC0+dGltZXJMaXN0LnRhaWw7CisgICAgICAgIHdkLT50aW1lckxpc3QuaGVhZCA9IHBFbnRyeTsKKyAgICAgICAgd2QtPnRpbWVyTGlzdC50YWlsID0gcFRoZUxhc3RFbnRyeTsKKyAgICAgICAgd2QtPnRpbWVyTGlzdC5mcmVlQ291bnQgKz0gajsKKyAgICAgICAgLy96bV9kZWJ1Z19tc2cxKCJmcmVlIHRpbWVyIGNvdW50ID0gIiwgd2QtPnRpbWVyTGlzdC5mcmVlQ291bnQpOworICAgIH0KKworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICB6ZlByb2Nlc3NFdmVudChkZXYsIGV2ZW50LCBqKTsKKworICAgIHJldHVybiAwOworfQorCit1MzJfdCB6ZkNvcmVTZXRLZXkoemRldl90KiBkZXYsIHU4X3QgdXNlciwgdThfdCBrZXlJZCwgdThfdCB0eXBlLAorICAgICAgICB1MTZfdCogbWFjLCB1MzJfdCoga2V5KQoreworICAgIHUzMl90IHJldDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICB3ZC0+c3RhLmZsYWdLZXlDaGFuZ2luZysrOworICAgIHptX2RlYnVnX21zZzEoIiAgIHpmQ29yZVNldEtleSsrKysgIiwgd2QtPnN0YS5mbGFnS2V5Q2hhbmdpbmcpOworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICByZXQgPSB6ZkhwU2V0S2V5KGRldiwgdXNlciwga2V5SWQsIHR5cGUsIG1hYywga2V5KTsKKyAgICByZXR1cm4gcmV0OworfQorCit2b2lkIHpmQ29yZVNldEtleUNvbXBsZXRlKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisjaWYgMAorICAgIHdkLT5zdGEuZmxhZ0tleUNoYW5naW5nID0gMDsKKyNlbHNlCisgICAgaWYod2QtPnN0YS5mbGFnS2V5Q2hhbmdpbmcpCisgICAgeworICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICB3ZC0+c3RhLmZsYWdLZXlDaGFuZ2luZy0tOworICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIH0KKyNlbmRpZgorICAgIHptX2RlYnVnX21zZzEoIiAgemZDb3JlU2V0S2V5Q29tcGxldGUtLS0gIiwgd2QtPnN0YS5mbGFnS2V5Q2hhbmdpbmcpOworCisgICAgemZQdXNoVnR4cShkZXYpOworfQorCit2b2lkIHpmQ29yZUhhbEluaXRDb21wbGV0ZSh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgd2QtPmhhbFN0YXRlID0gWk1fSEFMX1NUQVRFX1JVTk5JTkc7CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHpmUHVzaFZ0eHEoZGV2KTsKK30KKwordm9pZCB6ZkNvcmVNYWNBZGRyZXNzTm90aWZ5KHpkZXZfdCogZGV2LCB1OF90KiBhZGRyKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHdkLT5tYWNBZGRyWzBdID0gYWRkclswXSB8ICgodTE2X3QpYWRkclsxXTw8OCk7CisgICAgd2QtPm1hY0FkZHJbMV0gPSBhZGRyWzJdIHwgKCh1MTZfdClhZGRyWzNdPDw4KTsKKyAgICB3ZC0+bWFjQWRkclsyXSA9IGFkZHJbNF0gfCAoKHUxNl90KWFkZHJbNV08PDgpOworCisKKyAgICAvL3pmSHBTZXRNYWNBZGRyZXNzKGRldiwgd2QtPm1hY0FkZHIsIDApOworICAgIGlmICh3ZC0+emZjYk1hY0FkZHJlc3NOb3RpZnkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHdkLT56ZmNiTWFjQWRkcmVzc05vdGlmeShkZXYsIGFkZHIpOworICAgIH0KK30KKwordm9pZCB6ZkNvcmVTZXRJc29OYW1lKHpkZXZfdCogZGV2LCB1OF90KiBpc29OYW1lKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHdkLT53cy5jb3VudHJ5SXNvTmFtZVswXSA9IGlzb05hbWVbMF07CisgICAgd2QtPndzLmNvdW50cnlJc29OYW1lWzFdID0gaXNvTmFtZVsxXTsKKyAgICB3ZC0+d3MuY291bnRyeUlzb05hbWVbMl0gPSAnXDAnOworIH0KKworCitleHRlcm4gdm9pZCB6ZlNjYW5NZ3JTY2FuRXZlbnRTdGFydCh6ZGV2X3QqIGRldik7CitleHRlcm4gdThfdCB6ZlNjYW5NZ3JTY2FuRXZlbnRUaW1lb3V0KHpkZXZfdCogZGV2KTsKK2V4dGVybiB2b2lkIHpmU2Nhbk1nclNjYW5FdmVudFJldHJ5KHpkZXZfdCogZGV2KTsKKwordm9pZCB6ZlByb2Nlc3NFdmVudCh6ZGV2X3QqIGRldiwgdTE2X3QqIGV2ZW50QXJyYXksIHU4X3QgZXZlbnRDb3VudCkKK3sKKyAgICB1OF90IGksIGosIGJ5cGFzcyA9IEZBTFNFOworICAgIHUxNl90IGV2ZW50QnlwYXNzWzMyXTsKKyAgICB1OF90IGV2ZW50QnlwYXNzQ291bnQgPSAwOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHpmWmVyb01lbW9yeSgodThfdCopIGV2ZW50QnlwYXNzLCA2NCk7CisKKyAgICBmb3IoIGk9MDsgaTxldmVudENvdW50OyBpKysgKQorICAgIHsKKyAgICAgICAgZm9yKCBqPTA7IGo8ZXZlbnRCeXBhc3NDb3VudDsgaisrICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBldmVudEJ5cGFzc1tqXSA9PSBldmVudEFycmF5W2ldICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBieXBhc3MgPSBUUlVFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCBieXBhc3MgKQorICAgICAgICB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCggZXZlbnRBcnJheVtpXSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgWk1fRVZFTlRfU0NBTjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHpmU2Nhbk1nclNjYW5FdmVudFN0YXJ0KGRldik7CisgICAgICAgICAgICAgICAgICAgIGV2ZW50QnlwYXNzW2V2ZW50QnlwYXNzQ291bnQrK10gPSBaTV9FVkVOVF9JTl9TQ0FOOworICAgICAgICAgICAgICAgICAgICBldmVudEJ5cGFzc1tldmVudEJ5cGFzc0NvdW50KytdID0gWk1fRVZFTlRfVElNRU9VVF9TQ0FOOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBaTV9FVkVOVF9USU1FT1VUX1NDQU46CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1OF90IHJlczsKKworICAgICAgICAgICAgICAgICAgICByZXMgPSB6ZlNjYW5NZ3JTY2FuRXZlbnRUaW1lb3V0KGRldik7CisgICAgICAgICAgICAgICAgICAgIGlmICggcmVzID09IDAgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBldmVudEJ5cGFzc1tldmVudEJ5cGFzc0NvdW50KytdID0gWk1fRVZFTlRfVElNRU9VVF9TQ0FOOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCByZXMgPT0gMSApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50QnlwYXNzW2V2ZW50QnlwYXNzQ291bnQrK10gPSBaTV9FVkVOVF9JTl9TQ0FOOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFpNX0VWRU5UX0lCU1NfTU9OSVRPUjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHpmU3RhSWJzc01vbml0b3JpbmcoZGV2LCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgWk1fRVZFTlRfSU5fU0NBTjoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHpmU2Nhbk1nclNjYW5FdmVudFJldHJ5KGRldik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFpNX0VWRU5UX0NNX1RJTUVSOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgem1fbXNnMF9tbShaTV9MVl8wLCAiWk1fRVZFTlRfQ01fVElNRVIiKTsKKworICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLmNtTWljRmFpbHVyZUNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgWk1fRVZFTlRfQ01fRElTQ09OTkVDVDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHptX21zZzBfbW0oWk1fTFZfMCwgIlpNX0VWRU5UX0NNX0RJU0NPTk5FQ1QiKTsKKworICAgICAgICAgICAgICAgICAgICB6ZkNoYW5nZUFkYXB0ZXJTdGF0ZShkZXYsIFpNX1NUQV9TVEFURV9ESVNDT05ORUNUKTsKKworICAgICAgICAgICAgICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgICAgICAgICAvL3pmVGltZXJTY2hlZHVsZShkZXYsIFpNX0VWRU5UX0NNX0JMT0NLX1RJTUVSLAorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICBaTV9USUNLX0NNX0JMT0NLX1RJTUVPVVQpOworCisgICAgICAgICAgICAgICAgICAgIC8qIFRpbWVyIFJlc29sdXRpb24gb24gV2luWFAgaXMgMTUvMTYgbXMgICovCisgICAgICAgICAgICAgICAgICAgIC8qIERlY3JlYXNlIFRpbWUgb2Zmc2V0IGZvciA8WFA+IENvdW50ZXIgTWVhc3VyZSAqLworICAgICAgICAgICAgICAgICAgICB6ZlRpbWVyU2NoZWR1bGUoZGV2LCBaTV9FVkVOVF9DTV9CTE9DS19USU1FUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWk1fVElDS19DTV9CTE9DS19USU1FT1VUIC0gWk1fVElDS19DTV9CTE9DS19USU1FT1VUX09GRlNFVCk7CisKKyAgICAgICAgICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5jbU1pY0ZhaWx1cmVDb3VudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIC8vemZpV2xhbkRpc2FibGUoZGV2KTsKKyAgICAgICAgICAgICAgICAgICAgemZIcFJlc2V0S2V5Q2FjaGUoZGV2KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdkLT56ZmNiQ29ubmVjdE5vdGlmeSAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+emZjYkNvbm5lY3ROb3RpZnkoZGV2LCBaTV9TVEFUVVNfTUVESUFfRElTQ09OTkVDVF9NSUNfRkFJTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5ic3NpZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgWk1fRVZFTlRfQ01fQkxPQ0tfVElNRVI6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB6bV9tc2cwX21tKFpNX0xWXzAsICJaTV9FVkVOVF9DTV9CTE9DS19USU1FUiIpOworCisgICAgICAgICAgICAgICAgICAgIC8vem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5jbURpc2FsbG93U3NpZExlbmd0aCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmICggd2QtPnN0YS5iQXV0b1JlY29ubmVjdCApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHptX21zZzBfbW0oWk1fTFZfMCwgIlpNX0VWRU5UX0NNX0JMT0NLX1RJTUVSOmJBdXRvUmVjb25uZWN0IT0wIik7CisgICAgICAgICAgICAgICAgICAgICAgICB6ZlNjYW5NZ3JTY2FuU3RvcChkZXYsIFpNX1NDQU5fTUdSX1NDQU5fSU5URVJOQUwpOworICAgICAgICAgICAgICAgICAgICAgICAgemZTY2FuTWdyU2NhblN0YXJ0KGRldiwgWk1fU0NBTl9NR1JfU0NBTl9JTlRFUk5BTCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy96bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBaTV9FVkVOVF9USU1FT1VUX0FEREJBOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF3ZC0+YWRkYmFDb21wbGV0ZSAmJiAod2QtPmFkZGJhQ291bnQgPCA1KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgemZBZ2dTZW5kQWRkYmFSZXF1ZXN0KGRldiwgd2QtPnN0YS5ic3NpZCwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+YWRkYmFDb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgemZUaW1lclNjaGVkdWxlKGRldiwgWk1fRVZFTlRfVElNRU9VVF9BRERCQSwgMTAwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHpmVGltZXJDYW5jZWwoZGV2LCBaTV9FVkVOVF9USU1FT1VUX0FEREJBKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgI2lmZGVmIFpNX0VOQUJMRV9QRVJGT1JNQU5DRV9FVkFMVUFUSU9OCisgICAgICAgICAgICBjYXNlIFpNX0VWRU5UX1RJTUVPVVRfUEVSRk9STUFOQ0U6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB6ZmlQZXJmb3JtYW5jZVJlZnJlc2goZGV2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIGNhc2UgWk1fRVZFTlRfU0tJUF9DT1VOVEVSTUVBU1VSRToKKwkJCQkvL2VuYWJsZSB0aGUgQ291bnRlcm1lYXN1cmUKKwkJCQl7CisJCQkJCXptX2RlYnVnX21zZzAoIkNvdW50ZXJtZWFzdXJlIDogRW5hYmxlIE1JQyBDaGVjayAiKTsKKwkJCQkJd2QtPlRLSVBfR3JvdXBfS2V5Q2hhbmdpbmcgPSAweDA7CisJCQkJfQorCQkJCWJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHpmQnNzSW5mb0NyZWF0ZSh6ZGV2X3QqIGRldikKK3sKKyAgICB1OF90ICAgaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgd2QtPnN0YS5ic3NMaXN0LmJzc0NvdW50ID0gMDsKKyAgICB3ZC0+c3RhLmJzc0xpc3QuaGVhZCA9IE5VTEw7CisgICAgd2QtPnN0YS5ic3NMaXN0LnRhaWwgPSBOVUxMOworICAgIHdkLT5zdGEuYnNzSW5mb0FycmF5SGVhZCA9IDA7CisgICAgd2QtPnN0YS5ic3NJbmZvQXJyYXlUYWlsID0gMDsKKyAgICB3ZC0+c3RhLmJzc0luZm9GcmVlQ291bnQgPSBaTV9NQVhfQlNTOworCisgICAgZm9yKCBpPTA7IGk8IFpNX01BWF9CU1M7IGkrKyApCisgICAgeworICAgICAgICAvL3dkLT5zdGEuYnNzSW5mb0FycmF5W2ldID0gJih3ZC0+c3RhLmJzc0luZm9Qb29sW2ldKTsKKyAgICAgICAgd2QtPnN0YS5ic3NJbmZvQXJyYXlbaV0gPSB6ZndNZW1BbGxvY2F0ZShkZXYsIHNpemVvZihzdHJ1Y3QgenNCc3NJbmZvKSk7CisKKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworfQorCit2b2lkIHpmQnNzSW5mb0Rlc3Ryb3koemRldl90KiBkZXYpCit7CisgICAgdThfdCAgIGk7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgemZCc3NJbmZvUmVmcmVzaChkZXYsIDEpOworCisgICAgZm9yKCBpPTA7IGk8IFpNX01BWF9CU1M7IGkrKyApCisgICAgeworICAgICAgICBpZiAod2QtPnN0YS5ic3NJbmZvQXJyYXlbaV0gIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgemZ3TWVtRnJlZShkZXYsIHdkLT5zdGEuYnNzSW5mb0FycmF5W2ldLCBzaXplb2Yoc3RydWN0IHpzQnNzSW5mbykpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgem1fYXNzZXJ0KDApOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybjsKK30KKworc3RydWN0IHpzQnNzSW5mbyogemZCc3NJbmZvQWxsb2NhdGUoemRldl90KiBkZXYpCit7CisgICAgc3RydWN0IHpzQnNzSW5mbyogcEJzc0luZm87CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAod2QtPnN0YS5ic3NJbmZvRnJlZUNvdW50ID09IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcEJzc0luZm8gPSB3ZC0+c3RhLmJzc0luZm9BcnJheVt3ZC0+c3RhLmJzc0luZm9BcnJheUhlYWRdOworICAgIHdkLT5zdGEuYnNzSW5mb0FycmF5W3dkLT5zdGEuYnNzSW5mb0FycmF5SGVhZF0gPSBOVUxMOworICAgIHdkLT5zdGEuYnNzSW5mb0FycmF5SGVhZCA9ICh3ZC0+c3RhLmJzc0luZm9BcnJheUhlYWQgKyAxKSAmIChaTV9NQVhfQlNTIC0gMSk7CisgICAgd2QtPnN0YS5ic3NJbmZvRnJlZUNvdW50LS07CisKKyAgICB6Zlplcm9NZW1vcnkoKHU4X3QqKXBCc3NJbmZvLCBzaXplb2Yoc3RydWN0IHpzQnNzSW5mbykpOworCisgICAgcmV0dXJuIHBCc3NJbmZvOworfQorCit2b2lkIHpmQnNzSW5mb0ZyZWUoemRldl90KiBkZXYsIHN0cnVjdCB6c0Jzc0luZm8qIHBCc3NJbmZvKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptX2Fzc2VydCh3ZC0+c3RhLmJzc0luZm9BcnJheVt3ZC0+c3RhLmJzc0luZm9BcnJheVRhaWxdID09IE5VTEwpOworCisgICAgcEJzc0luZm8tPnNpZ25hbFN0cmVuZ3RoID0gcEJzc0luZm8tPnNpZ25hbFF1YWxpdHkgPSAwOworICAgIHBCc3NJbmZvLT5zb3J0VmFsdWUgPSAwOworCisgICAgd2QtPnN0YS5ic3NJbmZvQXJyYXlbd2QtPnN0YS5ic3NJbmZvQXJyYXlUYWlsXSA9IHBCc3NJbmZvOworICAgIHdkLT5zdGEuYnNzSW5mb0FycmF5VGFpbCA9ICh3ZC0+c3RhLmJzc0luZm9BcnJheVRhaWwgKyAxKSAmIChaTV9NQVhfQlNTIC0gMSk7CisgICAgd2QtPnN0YS5ic3NJbmZvRnJlZUNvdW50Kys7Cit9CisKK3ZvaWQgemZCc3NJbmZvUmVvcmRlckxpc3QoemRldl90KiBkZXYpCit7CisgICAgc3RydWN0IHpzQnNzSW5mbyogcEJzc0luZm8gPSBOVUxMOworICAgIHN0cnVjdCB6c0Jzc0luZm8qIHBJbnNCc3NJbmZvID0gTlVMTDsKKyAgICBzdHJ1Y3QgenNCc3NJbmZvKiBwTmV4dEJzc0luZm8gPSBOVUxMOworICAgIHN0cnVjdCB6c0Jzc0luZm8qIHBQcmVCc3NJbmZvID0gTlVMTDsKKyAgICB1OF90IGkgPSAwOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBpZiAod2QtPnN0YS5ic3NMaXN0LmJzc0NvdW50ID4gMSkKKyAgICB7CisgICAgICAgIHBJbnNCc3NJbmZvID0gd2QtPnN0YS5ic3NMaXN0LmhlYWQ7CisgICAgICAgIHdkLT5zdGEuYnNzTGlzdC50YWlsID0gcEluc0Jzc0luZm87CisgICAgICAgIHBCc3NJbmZvID0gcEluc0Jzc0luZm8tPm5leHQ7CisgICAgICAgIHBJbnNCc3NJbmZvLT5uZXh0ID0gTlVMTDsKKyAgICAgICAgd2hpbGUgKHBCc3NJbmZvICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgd2hpbGUgKDEpCisgICAgICAgICAgICB7CisvLyAgICAgICAgICAgICAgICBpZiAocEJzc0luZm8tPnNpZ25hbFN0cmVuZ3RoID49IHBJbnNCc3NJbmZvLT5zaWduYWxTdHJlbmd0aCkKKyAgICAgICAgICAgICAgICBpZiggcEJzc0luZm8tPnNvcnRWYWx1ZSA+PSBwSW5zQnNzSW5mby0+c29ydFZhbHVlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGk9PTApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vSW5zZXJ0IEJzc0luZm8gdG8gaGVhZAorICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5ic3NMaXN0LmhlYWQgPSBwQnNzSW5mbzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBOZXh0QnNzSW5mbyA9IHBCc3NJbmZvLT5uZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgcEJzc0luZm8tPm5leHQgPSBwSW5zQnNzSW5mbzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9JbnNlcnQgQnNzSW5mbyB0byBuZWl0aGVyIGhlYWQgbm9yIHRhaWwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBQcmVCc3NJbmZvLT5uZXh0ID0gcEJzc0luZm87CisgICAgICAgICAgICAgICAgICAgICAgICBwTmV4dEJzc0luZm8gPSBwQnNzSW5mby0+bmV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBCc3NJbmZvLT5uZXh0ID0gcEluc0Jzc0luZm87CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAocEluc0Jzc0luZm8tPm5leHQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9TaWduYWwgc3RyZW5ndGggc21hbGxlciB0aGFuIGN1cnJlbnQgQnNzSW5mbywgY2hlY2sgbmV4dAorICAgICAgICAgICAgICAgICAgICAgICAgcFByZUJzc0luZm8gPSBwSW5zQnNzSW5mbzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBJbnNCc3NJbmZvID0gcEluc0Jzc0luZm8tPm5leHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL0luc2VydCBCc3NJbmZvIHRvIHRhaWwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBJbnNCc3NJbmZvLT5uZXh0ID0gcEJzc0luZm87CisgICAgICAgICAgICAgICAgICAgICAgICBwTmV4dEJzc0luZm8gPSBwQnNzSW5mby0+bmV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuYnNzTGlzdC50YWlsID0gcEJzc0luZm87CisgICAgICAgICAgICAgICAgICAgICAgICBwQnNzSW5mby0+bmV4dCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwQnNzSW5mbyA9IHBOZXh0QnNzSW5mbzsKKyAgICAgICAgICAgIHBJbnNCc3NJbmZvID0gd2QtPnN0YS5ic3NMaXN0LmhlYWQ7CisgICAgICAgIH0KKyAgICB9IC8vaWYgKHdkLT5zdGEuYnNzTGlzdC5ic3NDb3VudCA+IDEpCisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworfQorCit2b2lkIHpmQnNzSW5mb0luc2VydFRvTGlzdCh6ZGV2X3QqIGRldiwgc3RydWN0IHpzQnNzSW5mbyogcEJzc0luZm8pCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem1fYXNzZXJ0KHBCc3NJbmZvKTsKKworICAgIC8vem1fZGVidWdfbXNnMigicEJzc0luZm8gPSAiLCBwQnNzSW5mbyk7CisKKyAgICBpZiAoIHdkLT5zdGEuYnNzTGlzdC5ic3NDb3VudCA9PSAwICkKKyAgICB7CisgICAgICAgIHdkLT5zdGEuYnNzTGlzdC5oZWFkID0gcEJzc0luZm87CisgICAgICAgIHdkLT5zdGEuYnNzTGlzdC50YWlsID0gcEJzc0luZm87CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHdkLT5zdGEuYnNzTGlzdC50YWlsLT5uZXh0ID0gcEJzc0luZm87CisgICAgICAgIHdkLT5zdGEuYnNzTGlzdC50YWlsID0gcEJzc0luZm87CisgICAgfQorCisgICAgcEJzc0luZm8tPm5leHQgPSBOVUxMOworICAgIHdkLT5zdGEuYnNzTGlzdC5ic3NDb3VudCsrOworCisgICAgLy96bV9kZWJ1Z19tc2cyKCJic3MgY291bnQgPSAiLCB3ZC0+c3RhLmJzc0xpc3QuYnNzQ291bnQpOworfQorCit2b2lkIHpmQnNzSW5mb1JlbW92ZUZyb21MaXN0KHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNCc3NJbmZvKiBwQnNzSW5mbykKK3sKKyAgICBzdHJ1Y3QgenNCc3NJbmZvKiBwTm93QnNzSW5mbzsKKyAgICBzdHJ1Y3QgenNCc3NJbmZvKiBwUHJlQnNzSW5mbyA9IE5VTEw7CisgICAgdThfdCAgIGk7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bV9hc3NlcnQocEJzc0luZm8pOworICAgIHptX2Fzc2VydCh3ZC0+c3RhLmJzc0xpc3QuYnNzQ291bnQpOworCisgICAgLy96bV9kZWJ1Z19tc2cyKCJwQnNzSW5mbyA9ICIsIHBCc3NJbmZvKTsKKworICAgIHBOb3dCc3NJbmZvID0gd2QtPnN0YS5ic3NMaXN0LmhlYWQ7CisKKyAgICBmb3IoIGk9MDsgaTx3ZC0+c3RhLmJzc0xpc3QuYnNzQ291bnQ7IGkrKyApCisgICAgeworICAgICAgICBpZiAoIHBOb3dCc3NJbmZvID09IHBCc3NJbmZvICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBpID09IDAgKQorICAgICAgICAgICAgeyAgIC8qIHJlbW92ZSBoZWFkICovCisgICAgICAgICAgICAgICAgd2QtPnN0YS5ic3NMaXN0LmhlYWQgPSBwQnNzSW5mby0+bmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwUHJlQnNzSW5mby0+bmV4dCA9IHBCc3NJbmZvLT5uZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGkgPT0gKHdkLT5zdGEuYnNzTGlzdC5ic3NDb3VudCAtIDEpICkKKyAgICAgICAgICAgIHsgICAvKiByZW1vdmUgdGFpbCAqLworICAgICAgICAgICAgICAgIHdkLT5zdGEuYnNzTGlzdC50YWlsID0gcFByZUJzc0luZm87CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcFByZUJzc0luZm8gPSBwTm93QnNzSW5mbzsKKyAgICAgICAgcE5vd0Jzc0luZm8gPSBwTm93QnNzSW5mby0+bmV4dDsKKyAgICB9CisKKyAgICB6bV9hc3NlcnQoaSAhPSB3ZC0+c3RhLmJzc0xpc3QuYnNzQ291bnQpOworICAgIHdkLT5zdGEuYnNzTGlzdC5ic3NDb3VudC0tOworCisgICAgLy96bV9kZWJ1Z19tc2cyKCJic3MgY291bnQgPSAiLCB3ZC0+c3RhLmJzc0xpc3QuYnNzQ291bnQpOworfQorCit2b2lkIHpmQnNzSW5mb1JlZnJlc2goemRldl90KiBkZXYsIHUxNl90IG1vZGUpCit7CisgICAgc3RydWN0IHpzQnNzSW5mbyogICBwQnNzSW5mbzsKKyAgICBzdHJ1Y3QgenNCc3NJbmZvKiAgIHBOZXh0QnNzSW5mbzsKKyAgICB1OF90ICAgaSwgYnNzQ291bnQ7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBwQnNzSW5mbyA9IHdkLT5zdGEuYnNzTGlzdC5oZWFkOworICAgIGJzc0NvdW50ID0gd2QtPnN0YS5ic3NMaXN0LmJzc0NvdW50OworCisgICAgZm9yKCBpPTA7IGk8YnNzQ291bnQ7IGkrKyApCisgICAgeworICAgICAgICBpZiAobW9kZSA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICBwTmV4dEJzc0luZm8gPSBwQnNzSW5mby0+bmV4dDsKKyAgICAgICAgICAgIHpmQnNzSW5mb1JlbW92ZUZyb21MaXN0KGRldiwgcEJzc0luZm8pOworICAgICAgICAgICAgemZCc3NJbmZvRnJlZShkZXYsIHBCc3NJbmZvKTsKKyAgICAgICAgICAgIHBCc3NJbmZvID0gcE5leHRCc3NJbmZvOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBwQnNzSW5mby0+ZmxhZyAmIFpNX0JTU19JTkZPX1ZBTElEX0JJVCApCisgICAgICAgICAgICB7ICAgLyogdGhpcyBvbmUgbXVzdCBiZSBrZXB0ICovCisgICAgICAgICAgICAgICAgcEJzc0luZm8tPmZsYWcgJj0gflpNX0JTU19JTkZPX1ZBTElEX0JJVDsKKyAgICAgICAgICAgICAgICBwQnNzSW5mbyA9IHBCc3NJbmZvLT5uZXh0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICNkZWZpbmUgWk1fQlNTX0NBQ0hFX1RJTUVfSU5fTVMgICAyMDAwMAorICAgICAgICAgICAgICAgIGlmICgod2QtPnRpY2sgLSBwQnNzSW5mby0+dGljaykgPiAoWk1fQlNTX0NBQ0hFX1RJTUVfSU5fTVMvWk1fTVNfUEVSX1RJQ0spKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcE5leHRCc3NJbmZvID0gcEJzc0luZm8tPm5leHQ7CisgICAgICAgICAgICAgICAgICAgIHpmQnNzSW5mb1JlbW92ZUZyb21MaXN0KGRldiwgcEJzc0luZm8pOworICAgICAgICAgICAgICAgICAgICB6ZkJzc0luZm9GcmVlKGRldiwgcEJzc0luZm8pOworICAgICAgICAgICAgICAgICAgICBwQnNzSW5mbyA9IHBOZXh0QnNzSW5mbzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcEJzc0luZm8gPSBwQnNzSW5mby0+bmV4dDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IC8vZm9yKCBpPTA7IGk8YnNzQ291bnQ7IGkrKyApCisgICAgcmV0dXJuOworfQorCit2b2lkIHpmRHVtcFNTSUQodThfdCBsZW5ndGgsIHU4X3QgKnZhbHVlKQoreworICAgIHU4X3QgYnVmWzUwXTsKKyAgICB1OF90IHRtcExlbmd0aCA9IGxlbmd0aDsKKworICAgIGlmICggdG1wTGVuZ3RoID4gNDkgKQorICAgIHsKKyAgICAgICAgdG1wTGVuZ3RoID0gNDk7CisgICAgfQorCisgICAgemZNZW1vcnlDb3B5KGJ1ZiwgdmFsdWUsIHRtcExlbmd0aCk7CisgICAgYnVmW3RtcExlbmd0aF0gPSAnXDAnOworICAgIC8vcHJpbnRrKCJTU0lEOiAlc1xuIiwgYnVmKTsKKyAgICAvL3ptX2RlYnVnX21zZ19zKCJzc2lkID0gIiwgdmFsdWUpOworfQorCit2b2lkIHpmQ29yZVJlaW5pdCh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB3ZC0+c3RhLmZsYWdLZXlDaGFuZ2luZyA9IDA7CisgICAgd2QtPnN0YS5mbGFnRnJlcUNoYW5naW5nID0gMDsKK30KKwordm9pZCB6ZkdlbmVyYXRlUmFuZG9tQlNTSUQoemRldl90KiBkZXYsIHU4X3QgKk1BQ0FkZHIsIHU4X3QgKkJTU0lEKQoreworICAgIC8vVUxPTkdMT05HICAgdGltZTsKKyAgICB1MzJfdCB0aW1lOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgdGltZSA9IHdkLT50aWNrOworCisgICAgLy8KKyAgICAvLyBJbml0aWFsaXplIHRoZSByYW5kb20gQlNTSUQgdG8gYmUgdGhlIHNhbWUgYXMgTUFDIGFkZHJlc3MuCisgICAgLy8KKworICAgIC8vIFJ0bENvcHlNZW1vcnkoQlNTSUQsIE1BQ0FkZHIsIHNpemVvZihET1QxMV9NQUNfQUREUkVTUykpOworICAgIHpmTWVtb3J5Q29weShCU1NJRCwgTUFDQWRkciwgNik7CisKKyAgICAvLworICAgIC8vIEdldCB0aGUgc3lzdGVtIHRpbWUgaW4gMTAgbWlsbGlzZWNvbmQuCisgICAgLy8KKworICAgIC8vIE5kaXNHZXRDdXJyZW50U3lzdGVtVGltZSgoUExBUkdFX0lOVEVHRVIpJnRpbWUpOworICAgIC8vIHRpbWUgLz0gMTAwMDAwOworCisgICAgLy8KKyAgICAvLyBSYW5kb21pemUgdGhlIGZpcnN0IDQgYnl0ZXMgb2YgQlNTSUQuCisgICAgLy8KKworICAgIEJTU0lEWzBdIF49ICh1OF90KSh0aW1lICYgMHhmZik7CisgICAgQlNTSURbMF0gJj0gfjB4MDE7ICAgICAgICAgICAgICAvLyBUdXJuIG9mZiBtdWx0aWNhc3QgYml0CisgICAgQlNTSURbMF0gfD0gMHgwMjsgICAgICAgICAgICAgICAvLyBUdXJuIG9uIGxvY2FsIGJpdAorCisgICAgdGltZSA+Pj0gODsKKyAgICBCU1NJRFsxXSBePSAodThfdCkodGltZSAmIDB4ZmYpOworCisgICAgdGltZSA+Pj0gODsKKyAgICBCU1NJRFsyXSBePSAodThfdCkodGltZSAmIDB4ZmYpOworCisgICAgdGltZSA+Pj0gODsKKyAgICBCU1NJRFszXSBePSAodThfdCkodGltZSAmIDB4ZmYpOworfQorCit1OF90IHpmaVdsYW5HZXREZXN0QWRkckZyb21CdWYoemRldl90ICpkZXYsIHpidWZfdCAqYnVmLCB1MTZfdCAqbWFjQWRkcikKK3sKKyNpZmRlZiBaTV9FTkFCTEVfTkFUSVZFX1dJRkkKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFICkKKyAgICB7CisgICAgICAgIC8qIERBICovCisgICAgICAgIG1hY0FkZHJbMF0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCAxNik7CisgICAgICAgIG1hY0FkZHJbMV0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCAxOCk7CisgICAgICAgIG1hY0FkZHJbMl0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCAyMCk7CisgICAgfQorICAgIGVsc2UgaWYgKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JQlNTICkKKyAgICB7CisgICAgICAgIC8qIERBICovCisgICAgICAgIG1hY0FkZHJbMF0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCA0KTsKKyAgICAgICAgbWFjQWRkclsxXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDYpOworICAgICAgICBtYWNBZGRyWzJdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgOCk7CisgICAgfQorICAgIGVsc2UgaWYgKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCApCisgICAgeworICAgICAgICAvKiBEQSAqLworICAgICAgICBtYWNBZGRyWzBdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgNCk7CisgICAgICAgIG1hY0FkZHJbMV0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCA2KTsKKyAgICAgICAgbWFjQWRkclsyXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisjZWxzZQorICAgIC8qIERBICovCisgICAgbWFjQWRkclswXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDApOworICAgIG1hY0FkZHJbMV0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCAyKTsKKyAgICBtYWNBZGRyWzJdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgNCk7CisjZW5kaWYKKworICAgIHJldHVybiAwOworfQorCisvKiBMZWF2ZSBhbiBlbXB0eSBsaW5lIGJlbG93IHRvIHJlbW92ZSB3YXJuaW5nIG1lc3NhZ2Ugb24gc29tZSBjb21waWxlciAqLworCit1MTZfdCB6ZkZpbmRDbGVhbkZyZXF1ZW5jeSh6ZGV2X3QqIGRldiwgdTMyX3QgYWRob2NNb2RlKQoreworICAgIHU4X3QgICBpLCBqOworICAgIHUxNl90ICByZXR1cm5DaGFubmVsOworICAgIHUxNl90ICBjb3VudF8yNEcgPSAwLCBtaW4yNEdJbmRleCA9IDA7CisgICAgdTE2X3QgIGNvdW50XzVHID0gMCwgIG1pbjVHSW5kZXggPSAwOworICAgIHUxNl90ICBDb21iaW5hdGlvbkJzc051bWJlckluMjRHWzE1XSA9IHswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMH07CisgICAgdTE2X3QgIEJzc051bWJlckluMjRHWzE3XSAgPSB7MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwfTsKKyAgICB1MTZfdCAgQXJyYXlfMjRHWzE1XSAgICAgICA9IHswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMH07CisgICAgdTE2X3QgIEJzc051bWJlckluNUdbMzFdICAgPSB7MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMH07CisgICAgdTE2X3QgIEFycmF5XzVHWzMxXSAgICAgICAgPSB7MCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMH07CisgICAgc3RydWN0IHpzQnNzSW5mbyogcEJzc0luZm87CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAoKHBCc3NJbmZvID0gd2QtPnN0YS5ic3NMaXN0LmhlYWQpID09IE5VTEwpCisgICAgeworICAgICAgICBpZiggYWRob2NNb2RlID09IFpNX0FESE9DQkFORF9CIHx8IGFkaG9jTW9kZSA9PSBaTV9BREhPQ0JBTkRfRyB8fAorICAgICAgICAgICAgYWRob2NNb2RlID09IFpNX0FESE9DQkFORF9CRyB8fCBhZGhvY01vZGUgPT0gWk1fQURIT0NCQU5EX0FCRyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybkNoYW5uZWwgPSB6ZkNoR2V0Rmlyc3QyR2h6Q2hhbm5lbChkZXYpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuQ2hhbm5lbCA9IHpmQ2hHZXRGaXJzdDVHaHpDaGFubmVsKGRldik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0dXJuQ2hhbm5lbDsKKyAgICB9CisKKyAgICAvKiAjMSBHZXQgQWxsb3dlZCBDaGFubmVsIGZvbGxvd2luZyBDb3VudHJ5IENvZGUgISAqLworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgd2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxDbnQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmICh3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5jaGFubmVsIDwgMzAwMCkKKyAgICAgICAgeyAvLyAyLjRHSHoKKyAgICAgICAgICAgIEFycmF5XzI0R1tjb3VudF8yNEddID0gd2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0uY2hhbm5lbDsKKyAgICAgICAgICAgIGNvdW50XzI0RysrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeyAvLyA1R0h6CisgICAgICAgICAgICBjb3VudF81RysrOworICAgICAgICAgICAgQXJyYXlfNUdbaV0gPSB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5jaGFubmVsOworICAgICAgICB9CisgICAgfQorICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICB3aGlsZSggcEJzc0luZm8gIT0gTlVMTCApCisgICAgeworICAgICAgICAvKiAjMl8xIENvdW50IEJTUyBudW1iZXIgaW4gc29tZSBzcGVjaWZpY2VkIGZyZXF1ZW5jeSBpbiAyLjRHSHogYmFuZCAhICovCisgICAgICAgIGlmKCBhZGhvY01vZGUgPT0gWk1fQURIT0NCQU5EX0IgfHwgYWRob2NNb2RlID09IFpNX0FESE9DQkFORF9HIHx8CisgICAgICAgICAgICBhZGhvY01vZGUgPT0gWk1fQURIT0NCQU5EX0JHIHx8IGFkaG9jTW9kZSA9PSBaTV9BREhPQ0JBTkRfQUJHICkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yKCBpPTA7IGk8PShjb3VudF8yNEcrMyk7IGkrKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIHBCc3NJbmZvLT5mcmVxdWVuY3kgPT0gQXJyYXlfMjRHW2ldICkKKyAgICAgICAgICAgICAgICB7IC8vIEFycmF5XzI0R1swXSBjb3JyZXNwb25kIHRvIEJzc051bWJlckluMjRHWzJdCisgICAgICAgICAgICAgICAgICAgIEJzc051bWJlckluMjRHW3BCc3NJbmZvLT5jaGFubmVsKzFdKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogIzJfMiBDb3VudCBCU1MgbnVtYmVyIGluIHNvbWUgc3BlY2lmaWNlZCBmcmVxdWVuY3kgaW4gNUdIeiBiYW5kICEgKi8KKyAgICAgICAgaWYoIGFkaG9jTW9kZSA9PSBaTV9BREhPQ0JBTkRfQSB8fCBhZGhvY01vZGUgPT0gWk1fQURIT0NCQU5EX0FCRyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciggaT0wOyBpPGNvdW50XzVHOyBpKysgKQorICAgICAgICAgICAgeyAvLyA1R0h6IGNoYW5uZWwgaXMgbm90IGVxdWFsIHRvIGFycmF5IGluZGV4CisgICAgICAgICAgICAgICAgaWYoIHBCc3NJbmZvLT5mcmVxdWVuY3kgPT0gQXJyYXlfNUdbaV0gKQorICAgICAgICAgICAgICAgIHsgLy8gQXJyYXlfNUdbMF0gY29ycmVzcG9uZCB0byBCc3NOdW1iZXJJbjVHWzBdCisgICAgICAgICAgICAgICAgICAgIEJzc051bWJlckluNUdbaV0rKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBwQnNzSW5mbyA9IHBCc3NJbmZvLT5uZXh0OworICAgIH0KKworI2lmIDAKKyAgICBmb3IoaT0wOyBpPD0oY291bnRfMjRHKzMpOyBpKyspCisgICAgeworICAgICAgICBwcmludGsoIjIuNEdIeiBCZWZvcmUgY29tYmluLCAlZCBCU1MgbmV0d29yayA6ICVkIiwgaSwgQnNzTnVtYmVySW4yNEdbaV0pOworICAgIH0KKworICAgIGZvcihpPTA7IGk8Y291bnRfNUc7IGkrKykKKyAgICB7CisgICAgICAgIHByaW50aygiNUdIeiBCZWZvcmUgY29tYmluLCAlZCBCU1MgbmV0d29yayA6ICVkIiwgaSwgQnNzTnVtYmVySW41R1tpXSk7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiggYWRob2NNb2RlID09IFpNX0FESE9DQkFORF9CIHx8IGFkaG9jTW9kZSA9PSBaTV9BREhPQ0JBTkRfRyB8fAorICAgICAgICBhZGhvY01vZGUgPT0gWk1fQURIT0NCQU5EX0JHIHx8IGFkaG9jTW9kZSA9PSBaTV9BREhPQ0JBTkRfQUJHICkKKyAgICB7CisgICAgICAgIC8qICMzXzEgQ291bnQgQlNTIG51bWJlciB0aGF0IGluZmx1ZW5jZSB0aGUgc3BlY2lmaWNlZCBmcmVxdWVuY3kgaW4gMi40R0h6ICEgKi8KKyAgICAgICAgZm9yKCBqPTA7IGo8Y291bnRfMjRHOyBqKysgKQorICAgICAgICB7CisgICAgICAgICAgICBDb21iaW5hdGlvbkJzc051bWJlckluMjRHW2pdID0gQnNzTnVtYmVySW4yNEdbal0gICArIEJzc051bWJlckluMjRHW2orMV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJzc051bWJlckluMjRHW2orMl0gKyBCc3NOdW1iZXJJbjI0R1tqKzNdICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCc3NOdW1iZXJJbjI0R1tqKzRdOworICAgICAgICAgICAgLy9wcmludGsoIkFmdGVyIGNvbWJpbmUsIHRoZSBudW1iZXIgb2YgQlNTIG5ldHdvcmsgY2hhbm5lbCAlZCBpcyAlZCIsCisgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiAsIENvbWJpbmF0aW9uQnNzTnVtYmVySW4yNEdbal0pOworICAgICAgICB9CisKKyAgICAgICAgLyogIzRfMSBGaW5kIHRoZSBsZXNzIHV0aWxpemVkIGZyZXF1ZW5jeSBpbiAyLjRHSHogYmFuZCAhICovCisgICAgICAgIG1pbjI0R0luZGV4ID0gemZGaW5kTWluaW11bVV0aWxpemF0aW9uQ2hhbm5lbEluZGV4KGRldiwgQ29tYmluYXRpb25Cc3NOdW1iZXJJbjI0RywgY291bnRfMjRHKTsKKyAgICB9CisKKyAgICAvKiAjNF8yIEZpbmQgdGhlIGxlc3MgdXRpbGl6ZWQgZnJlcXVlbmN5IGluIDVHSHogYmFuZCAhICovCisgICAgaWYoIGFkaG9jTW9kZSA9PSBaTV9BREhPQ0JBTkRfQSB8fCBhZGhvY01vZGUgPT0gWk1fQURIT0NCQU5EX0FCRyApCisgICAgeworICAgICAgICBtaW41R0luZGV4ID0gemZGaW5kTWluaW11bVV0aWxpemF0aW9uQ2hhbm5lbEluZGV4KGRldiwgQnNzTnVtYmVySW41RywgY291bnRfNUcpOworICAgIH0KKworICAgIGlmKCBhZGhvY01vZGUgPT0gWk1fQURIT0NCQU5EX0IgfHwgYWRob2NNb2RlID09IFpNX0FESE9DQkFORF9HIHx8IGFkaG9jTW9kZSA9PSBaTV9BREhPQ0JBTkRfQkcgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFycmF5XzI0R1ttaW4yNEdJbmRleF07CisgICAgfQorICAgIGVsc2UgaWYoIGFkaG9jTW9kZSA9PSBaTV9BREhPQ0JBTkRfQSApCisgICAgeworICAgICAgICByZXR1cm4gQXJyYXlfNUdbbWluNUdJbmRleF07CisgICAgfQorICAgIGVsc2UgaWYoIGFkaG9jTW9kZSA9PSBaTV9BREhPQ0JBTkRfQUJHICkKKyAgICB7CisgICAgICAgIGlmICggQ29tYmluYXRpb25Cc3NOdW1iZXJJbjI0R1ttaW4yNEdJbmRleF0gPD0gQnNzTnVtYmVySW41R1ttaW41R0luZGV4XSApCisgICAgICAgICAgICByZXR1cm4gQXJyYXlfMjRHW21pbjI0R0luZGV4XTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIEFycmF5XzVHW21pbjVHSW5kZXhdOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiAyNDEyOworfQorCit1MTZfdCB6ZkZpbmRNaW5pbXVtVXRpbGl6YXRpb25DaGFubmVsSW5kZXgoemRldl90KiBkZXYsIHUxNl90KiBhcnJheSwgdTE2X3QgY291bnQpCit7CisgICAgdThfdCAgIGk7CisgICAgdTE2X3QgIHRlbXBNaW5JbmRleCwgdGVtcE1pblZhbHVlOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaSA9IDE7CisgICAgdGVtcE1pbkluZGV4ID0gMDsKKyAgICB0ZW1wTWluVmFsdWUgPSBhcnJheVt0ZW1wTWluSW5kZXhdOworICAgIHdoaWxlKCBpPCBjb3VudCApCisgICAgeworICAgICAgICBpZiggYXJyYXlbaV0gPCB0ZW1wTWluVmFsdWUgKQorICAgICAgICB7CisgICAgICAgICAgICB0ZW1wTWluVmFsdWUgPSBhcnJheVtpXTsKKyAgICAgICAgICAgIHRlbXBNaW5JbmRleCA9IGk7CisgICAgICAgIH0KKyAgICAgICAgaSsrOworICAgIH0KKworICAgIHJldHVybiB0ZW1wTWluSW5kZXg7Cit9CisKK3U4X3QgemZDb21wYXJlV2l0aEJzc2lkKHpkZXZfdCogZGV2LCB1MTZfdCogYnNzaWQpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYgKCB6Zk1lbW9yeUlzRXF1YWwoKHU4X3QqKWJzc2lkLCAodThfdCopd2QtPnN0YS5ic3NpZCwgNikgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jZnVuYy5oIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NmdW5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM3NTQ4YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jZnVuYy5oCkBAIC0wLDAgKzEsNDQ5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTW9kdWxlIE5hbWUgOiBmdW5jX2V4dHIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBBYnN0cmFjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGZ1bmN0aW9uIHByb3RvdHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBOT1RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0NGVU5DX0gKKyNkZWZpbmUgX0NGVU5DX0gKKworI2luY2x1ZGUgInF1ZXVlLmgiCisKKy8qIGFtc2R1LmMgKi8KK3ZvaWQgemZEZUFtc2R1KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgdmFwLCB1OF90IGVuY3J5TW9kZSk7CisKKy8qIGNzY2FubWdyLmMgKi8KK3ZvaWQgemZTY2FuTWdySW5pdCh6ZGV2X3QqIGRldik7Cit1OF90IHpmU2Nhbk1nclNjYW5TdGFydCh6ZGV2X3QqIGRldiwgdThfdCBzY2FuVHlwZSk7Cit2b2lkIHpmU2Nhbk1nclNjYW5TdG9wKHpkZXZfdCogZGV2LCB1OF90IHNjYW5UeXBlKTsKK3ZvaWQgemZTY2FuTWdyU2NhbkFjayh6ZGV2X3QqIGRldik7CisKKy8qIGNwc21nci5jICovCit2b2lkIHpmUG93ZXJTYXZpbmdNZ3JJbml0KHpkZXZfdCogZGV2KTsKK3ZvaWQgemZQb3dlclNhdmluZ01nclNldE1vZGUoemRldl90KiBkZXYsIHU4X3QgbW9kZSk7Cit2b2lkIHpmUG93ZXJTYXZpbmdNZ3JNYWluKHpkZXZfdCogZGV2KTsKK3ZvaWQgemZQb3dlclNhdmluZ01ncldha2V1cCh6ZGV2X3QqIGRldik7Cit1OF90IHpmUG93ZXJTYXZpbmdNZ3JJc1NsZWVwaW5nKHpkZXZfdCAqZGV2KTsKK3ZvaWQgemZQb3dlclNhdmluZ01nclByb2Nlc3NCZWFjb24oemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKK3ZvaWQgemZQb3dlclNhdmluZ01nckF0aW1XaW5FeHBpcmVkKHpkZXZfdCogZGV2KTsKK3ZvaWQgemZQb3dlclNhdmluZ01nckNvbm5lY3ROb3RpZnkoemRldl90ICpkZXYpOwordm9pZCB6ZlBvd2VyU2F2aW5nTWdyUHJlVEJUVEludGVycnVwdCh6ZGV2X3QgKmRldik7CisKKy8qIGNjbWQuYyAqLwordTE2X3QgemZXbGFuRW5hYmxlKHpkZXZfdCogZGV2KTsKKworLyogY2Z1bmMuYyAqLwordThfdCB6ZlF1ZXJ5T3Bwb3NpdGVSYXRlKHpkZXZfdCogZGV2LCB1OF90IGRzdF9tYWNbNl0sIHU4X3QgZnJhbWVUeXBlKTsKK3ZvaWQgemZDb3B5VG9JbnRUeEJ1ZmZlcih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHU4X3QqIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICB1MTZfdCBvZmZzZXQsIHUxNl90IGxlbmd0aCk7Cit2b2lkIHpmQ29weVRvUnhCdWZmZXIoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1OF90KiBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgdTE2X3Qgb2Zmc2V0LCB1MTZfdCBsZW5ndGgpOwordm9pZCB6ZkNvcHlGcm9tSW50VHhCdWZmZXIoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1OF90KiBkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTZfdCBvZmZzZXQsIHUxNl90IGxlbmd0aCk7Cit2b2lkIHpmQ29weUZyb21SeEJ1ZmZlcih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHU4X3QqIGRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxNl90IG9mZnNldCwgdTE2X3QgbGVuZ3RoKTsKK3ZvaWQgemZNZW1vcnlDb3B5KHU4X3QqIGRzdCwgdThfdCogc3JjLCB1MTZfdCBsZW5ndGgpOwordm9pZCB6Zk1lbW9yeU1vdmUodThfdCogZHN0LCB1OF90KiBzcmMsIHUxNl90IGxlbmd0aCk7Cit2b2lkIHpmWmVyb01lbW9yeSh1OF90KiB2YSwgdTE2X3QgbGVuZ3RoKTsKK3U4X3QgemZNZW1vcnlJc0VxdWFsKHU4X3QqIG0xLCB1OF90KiBtMiwgdTE2X3QgbGVuZ3RoKTsKK3U4X3QgemZSeEJ1ZmZlckVxdWFsVG9TdHIoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCBjb25zdCB1OF90KiBzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNl90IG9mZnNldCwgdTE2X3QgbGVuZ3RoKTsKK3ZvaWQgemZUeEJ1ZmZlckNvcHkoemRldl90KmRldiwgemJ1Zl90KiBkc3QsIHpidWZfdCogc3JjLAorICAgICAgICAgICAgICAgICAgICB1MTZfdCBkc3RPZmZzZXQsIHUxNl90IHNyY09mZnNldCwgdTE2X3QgbGVuZ3RoKTsKK3ZvaWQgemZSeEJ1ZmZlckNvcHkoemRldl90KmRldiwgemJ1Zl90KiBkc3QsIHpidWZfdCogc3JjLAorICAgICAgICAgICAgICAgICAgICB1MTZfdCBkc3RPZmZzZXQsIHUxNl90IHNyY09mZnNldCwgdTE2X3QgbGVuZ3RoKTsKKwordm9pZCB6ZkNvbGxlY3RIV1RhbGx5KHpkZXZfdCpkZXYsIHUzMl90KiByc3AsIHU4X3QgaWQpOwordm9pZCB6ZlRpbWVySW5pdCh6ZGV2X3QqIGRldik7Cit1MTZfdCB6ZlRpbWVyU2NoZWR1bGUoemRldl90KiBkZXYsIHUxNl90IGV2ZW50LCB1MzJfdCB0aWNrKTsKK3UxNl90IHpmVGltZXJDYW5jZWwoemRldl90KiBkZXYsIHUxNl90IGV2ZW50KTsKK3ZvaWQgemZUaW1lckNsZWFyKHpkZXZfdCogZGV2KTsKK3UxNl90IHpmVGltZXJDaGVja0FuZEhhbmRsZSh6ZGV2X3QqIGRldik7Cit2b2lkIHpmUHJvY2Vzc0V2ZW50KHpkZXZfdCogZGV2LCB1MTZfdCogZXZlbnRBcnJheSwgdThfdCBldmVudENvdW50KTsKKwordm9pZCB6ZkJzc0luZm9DcmVhdGUoemRldl90KiBkZXYpOwordm9pZCB6ZkJzc0luZm9EZXN0cm95KHpkZXZfdCogZGV2KTsKKworc3RydWN0IHpzQnNzSW5mbyogemZCc3NJbmZvQWxsb2NhdGUoemRldl90KiBkZXYpOwordm9pZCB6ZkJzc0luZm9GcmVlKHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNCc3NJbmZvKiBwQnNzSW5mbyk7Cit2b2lkIHpmQnNzSW5mb1Jlb3JkZXJMaXN0KHpkZXZfdCogZGV2KTsKK3ZvaWQgemZCc3NJbmZvSW5zZXJ0VG9MaXN0KHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNCc3NJbmZvKiBwQnNzSW5mbyk7Cit2b2lkIHpmQnNzSW5mb1JlbW92ZUZyb21MaXN0KHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNCc3NJbmZvKiBwQnNzSW5mbyk7Cit2b2lkIHpmQnNzSW5mb1JlZnJlc2goemRldl90KiBkZXYsIHUxNl90IG1vZGUpOwordm9pZCB6ZkNvcmVTZXRGcmVxdWVuY3lDb21wbGV0ZSh6ZGV2X3QqIGRldik7Cit2b2lkIHpmQ29yZVNldEZyZXF1ZW5jeSh6ZGV2X3QqIGRldiwgdTE2X3QgZnJlcXVlbmN5KTsKK3ZvaWQgemZDb3JlU2V0RnJlcXVlbmN5VjIoemRldl90KiBkZXYsIHUxNl90IGZyZXF1ZW5jeSwKKyAgICAgICAgemZwRnJlcUNoYW5nZUNvbXBsZXRlQ2IgY2IpOwordm9pZCB6ZkNvcmVTZXRGcmVxdWVuY3lFeCh6ZGV2X3QqIGRldiwgdTE2X3QgZnJlcXVlbmN5LCB1OF90IGJ3NDAsCisgICAgICAgIHU4X3QgZXh0T2Zmc2V0LCB6ZnBGcmVxQ2hhbmdlQ29tcGxldGVDYiBjYik7Cit2b2lkIHpmQ29yZVNldEZyZXF1ZW5jeUV4VjIoemRldl90KiBkZXYsIHUxNl90IGZyZXF1ZW5jeSwgdThfdCBidzQwLAorICAgICAgICB1OF90IGV4dE9mZnNldCwgemZwRnJlcUNoYW5nZUNvbXBsZXRlQ2IgY2IsIHU4X3QgZm9yY2VTZXRGcmVxKTsKK3ZvaWQgemZSZVNldEN1cnJlbnRGcmVxdWVuY3koemRldl90KiBkZXYpOwordTMyX3QgemZDb3JlU2V0S2V5KHpkZXZfdCogZGV2LCB1OF90IHVzZXIsIHU4X3Qga2V5SWQsIHU4X3QgdHlwZSwKKyAgICAgICAgdTE2X3QqIG1hYywgdTMyX3QqIGtleSk7Cit2b2lkIHpmQ29yZVNldEtleUNvbXBsZXRlKHpkZXZfdCogZGV2KTsKK3ZvaWQgemZDb3JlUmVpbml0KHpkZXZfdCogZGV2KTsKK3ZvaWQgemZDb3JlTWFjQWRkcmVzc05vdGlmeSh6ZGV2X3QqIGRldiwgdThfdCAqYWRkcik7Cit2b2lkIHpmQ29yZVNldElzb05hbWUoemRldl90KiBkZXYsIHU4X3QqIGlzb05hbWUpOwordm9pZCB6ZkdlbmVyYXRlUmFuZG9tQlNTSUQoemRldl90KiBkZXYsIHU4X3QgKk1BQ0FkZHIsIHU4X3QgKkJTU0lEKTsKK3ZvaWQgemZDb3JlSGFsSW5pdENvbXBsZXRlKHpkZXZfdCogZGV2KTsKKwordTE2X3QgemZGaW5kQ2xlYW5GcmVxdWVuY3koemRldl90KiBkZXYsIHUzMl90IGFkaG9jTW9kZSk7Cit1MTZfdCB6ZkZpbmRNaW5pbXVtVXRpbGl6YXRpb25DaGFubmVsSW5kZXgoemRldl90KiBkZXYsIHUxNl90KiBhcnJheSwgdTE2X3QgY291bnQpOwordThfdCB6ZkNvbXBhcmVXaXRoQnNzaWQoemRldl90KiBkZXYsIHUxNl90KiBic3NpZCk7CisKKy8qIGNoYi5jICovCit2b2lkIHpmRHVtcEJzc0xpc3QoemRldl90KiBkZXYpOworCisKK3UxNl90IHpmSXNzdWVDbWQoemRldl90KiBkZXYsIHUzMl90KiBjbWQsIHUxNl90IGNtZExlbiwgdTE2X3Qgc3JjLCB1OF90KiBidWYpOworCisKKy8qIGNpYy5jICovCit2b2lkIHpmVXBkYXRlQnNzaWQoemRldl90KiBkZXYsIHU4X3QqIGJzc2lkKTsKK3ZvaWQgemZSZXNldFN1cHBvcnRSYXRlKHpkZXZfdCogZGV2LCB1OF90IHR5cGUpOwordm9pZCB6ZlVwZGF0ZVN1cHBvcnRSYXRlKHpkZXZfdCogZGV2LCB1OF90KiByYXRlQXJyYXkpOwordThfdCB6ZklzR09ubHlNb2RlKHpkZXZfdCogZGV2LCB1MTZfdCAgZnJlcXVlbmN5LCB1OF90KiByYXRlQXJyYXkpOwordm9pZCB6ZkdhdGhlckJNb2RlKHpkZXZfdCogZGV2LCB1OF90KiByYXRlQXJyYXksIHU4X3QqIGV4dHJhdGVBcnJheSk7Cit1OF90IHpmUFNEZXZpY2VTbGVlcCh6ZGV2X3QqIGRldik7Cit1MTZfdCB6ZkdldFJhbmRvbU51bWJlcih6ZGV2X3QqIGRldiwgdTE2X3QgaW5pdFZhbHVlKTsKK3ZvaWQgemZDb3JlRXZlbnQoemRldl90KiBkZXYsIHUxNl90IGV2ZW50LCB1OF90KiByc3ApOwordm9pZCB6ZkJlYWNvbkNmZ0ludGVycnVwdCh6ZGV2X3QqIGRldiwgdThfdCogcnNwKTsKK3ZvaWQgemZFbmRPZkF0aW1XaW5kb3dJbnRlcnJ1cHQoemRldl90KiBkZXYpOworCisvKiBjaW5pdC5jICovCit1MTZfdCB6ZlR4R2VuV2xhbkhlYWRlcih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90KiBoZWFkZXIsIHUxNl90IHNlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHU4X3QgZmxhZywgdTE2X3QgcGx1c0xlbiwgdTE2X3QgbWludXNMZW4sIHUxNl90IHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICB1MTZfdCogZGEsIHUxNl90KiBzYSwgdThfdCB1cCwgdTE2X3QgKm1pY0xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxNl90KiBzbmFwLCB1MTZfdCBzbmFwTGVuLCBzdHJ1Y3QgYWdnQ29udHJvbCAqYWdnQ29udHJvbCk7Cit1MTZfdCB6ZlR4R2VuTW1IZWFkZXIoemRldl90KiBkZXYsIHU4X3QgZnJhbWVUeXBlLCB1MTZfdCogZHN0LAorICAgICAgICB1MTZfdCogaGVhZGVyLCB1MTZfdCBsZW4sIHpidWZfdCogYnVmLCB1MTZfdCB2YXAsIHU4X3QgZW5jcnlwdCk7Cit2b2lkIHpmSW5pdE1hY0FwTW9kZSh6ZGV2X3QqIGRldik7Cit1MTZfdCB6ZkNoR2V0TmV4dENoYW5uZWwoemRldl90KiBkZXYsIHUxNl90IGZyZXF1ZW5jeSwgdThfdCogcGJQYXNzaXZlKTsKK3UxNl90IHpmQ2hHZXRGaXJzdENoYW5uZWwoemRldl90KiBkZXYsIHU4X3QqIHBiUGFzc2l2ZSk7Cit1MTZfdCB6ZkNoR2V0Rmlyc3QyR2h6Q2hhbm5lbCh6ZGV2X3QqIGRldik7Cit1MTZfdCB6ZkNoR2V0Rmlyc3Q1R2h6Q2hhbm5lbCh6ZGV2X3QqIGRldik7Cit1MTZfdCB6ZkNoR2V0TGFzdENoYW5uZWwoemRldl90KiBkZXYsIHU4X3QqIHBiUGFzc2l2ZSk7Cit1MTZfdCB6ZkNoR2V0TGFzdDVHaHpDaGFubmVsKHpkZXZfdCogZGV2KTsKK3UxNl90IHpmQ2hOdW1Ub0ZyZXEoemRldl90KiBkZXYsIHU4X3QgY2gsIHU4X3QgZnJlcUJhbmQpOwordThfdCB6ZkNoRnJlcVRvTnVtKHUxNl90IGZyZXEsIHU4X3QqIGJJczVHQmFuZCk7CisKKy8qIGNtbS5jICovCit2b2lkIHpmUHJvY2Vzc01hbmFnZW1lbnQoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCBzdHJ1Y3QgenNBZGRpdGlvbkluZm8qIEFkZEluZm8pOyAvL0NXWWFuZyhtKQordm9pZCB6ZlNlbmRNbUZyYW1lKHpkZXZfdCogZGV2LCB1OF90IGZyYW1lVHlwZSwgdTE2X3QqIGRzdCwKKyAgICAgICAgICAgICAgICAgICB1MzJfdCBwMSwgdTMyX3QgcDIsIHUzMl90IHAzKTsKK3UxNl90IHpmRmluZEVsZW1lbnQoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1OF90IGVpZCk7Cit1MTZfdCB6ZkZpbmRXaWZpRWxlbWVudCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHU4X3QgdHlwZSwgdThfdCBzdWJ0eXBlKTsKK3UxNl90IHpmRmluZFN1cGVyR0VsZW1lbnQoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1OF90IHR5cGUpOwordTE2X3QgemZGaW5kWFJFbGVtZW50KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdThfdCB0eXBlKTsKK3UxNl90IHpmUmVtb3ZlRWxlbWVudCh6ZGV2X3QqIGRldiwgdThfdCogYnVmLCB1MTZfdCBzaXplLCB1OF90IGVpZCk7Cit1MTZfdCB6ZlVwZGF0ZUVsZW1lbnQoemRldl90KiBkZXYsIHU4X3QqIGJ1ZiwgdTE2X3Qgc2l6ZSwgdThfdCogdXBkYXRlZWlkKTsKK3ZvaWQgemZQcm9jZXNzUHJvYmVSZXEoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCogc3JjKTsKK3ZvaWQgemZQcm9jZXNzUHJvYmVSc3AoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCBzdHJ1Y3QgenNBZGRpdGlvbkluZm8qIEFkZEluZm8pOwordTE2X3QgemZTZW5kUHJvYmVSZXEoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQsIHU4X3QgYldpdGhTU0lEKTsKK3UxNl90IHpmTW1BZGRJZVN1cHBvcnRSYXRlKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNl90IG9mZnNldCwgdThfdCBlaWQsIHU4X3QgcmF0ZVNldCk7Cit1MTZfdCB6Zk1tQWRkSWVEcyh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCk7Cit1MTZfdCB6Zk1tQWRkSWVFcnAoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQpOwordm9pZCB6ZlVwZGF0ZURlZmF1bHRRb3NQYXJhbWV0ZXIoemRldl90KiBkZXYsIHU4X3QgbW9kZSk7Cit1MTZfdCB6Zk1tQWRkSWVXcGEoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQsIHUxNl90IGFwSWQpOwordTE2X3QgemZNbUFkZEhUQ2FwYWJpbGl0eSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCk7IC8vQ1dZYW5nKCspCit1MTZfdCB6Zk1tQWRkUHJlTkhUQ2FwYWJpbGl0eSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCk7Cit1MTZfdCB6Zk1tQWRkRXh0ZW5kZWRIVENhcGFiaWxpdHkoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQpOyAvL0NXWWFuZygrKQordTE2X3QgemZGaW5kQVRIRXh0Q2FwKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdThfdCB0eXBlLCB1OF90IHN1YnR5cGUpOwordTE2X3QgemZGaW5kQnJkY21NcnZsUmxua0V4dENhcCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOwordTE2X3QgemZGaW5kTWFydmVsRXh0Q2FwKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Zik7Cit1MTZfdCB6ZkZpbmRCcm9hZGNvbUV4dENhcCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOwordTE2X3QgemZGaW5kUmxua0V4dENhcCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOworCisvKiBjbW1hcC5jICovCit2b2lkIHpmTW1BcFRpbWVUaWNrKHpkZXZfdCogZGV2KTsKK3ZvaWQgemZBcEFnaW5nU3RhKHpkZXZfdCogZGV2KTsKK3UxNl90IHpmQXBBZGRTdGEoemRldl90KiBkZXYsIHUxNl90KiBhZGRyLCB1MTZfdCBzdGF0ZSwgdTE2X3QgYXBJZCwgdThfdCB0eXBlLAorICAgICAgICAgICAgICAgICB1OF90IHFvc1R5cGUsIHU4X3QgcW9zSW5mbyk7Cit2b2lkIHpmQXBQcm90Y3Rpb25Nb25pdG9yKHpkZXZfdCogZGV2KTsKK3ZvaWQgemZBcFByb2Nlc3NCZWFjb24oemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKK3ZvaWQgemZBcFByb2Nlc3NBdXRoKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QqIHNyYywgdTE2X3QgYXBJZCk7Cit2b2lkIHpmQXBQcm9jZXNzQXNvY1JlcSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90KiBzcmMsIHUxNl90IGFwSWQpOwordm9pZCB6ZkFwUHJvY2Vzc0Fzb2NSc3AoemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKK3ZvaWQgemZBcFByb2Nlc3NEZWF1dGgoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCogc3JjLCB1MTZfdCBhcElkKTsKK3ZvaWQgemZBcFByb2Nlc3NEaXNhc29jKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QqIHNyYywgdTE2X3QgYXBJZCk7Cit2b2lkIHpmQXBQcm9jZXNzUHJvYmVSc3AoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCBzdHJ1Y3QgenNBZGRpdGlvbkluZm8qIEFkZEluZm8pOwordm9pZCB6ZkFwU3RvcmVBc29jUmVxSWUoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBhaWQpOwordTE2X3QgemZBcEFkZEllU3NpZCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCwgdTE2X3QgdmFwKTsKK3ZvaWQgemZBcFNlbmRCZWFjb24oemRldl90KiBkZXYpOwordTE2X3QgemZBcEdldFNUQUluZm8oemRldl90KiBkZXYsIHUxNl90KiBhZGRyLCB1MTZfdCogc3RhdGUsIHU4X3QqIHZhcCk7Cit1MTZfdCB6ZkludHJhYnNzRm9yd2FyZCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHU4X3Qgc3JjVmFwKTsKK3UxNl90IHpmQXBCdWZmZXJQc0ZyYW1lKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgcG9ydCk7Cit2b2lkIHpmQXBJbml0U3RhVGJsKHpkZXZfdCogZGV2KTsKK3ZvaWQgemZBcEdldFN0YVR4UmF0ZUFuZFFvc1R5cGUoemRldl90KiBkZXYsIHUxNl90KiBhZGRyLCB1MzJfdCogcGh5Q3RybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdThfdCogcW9zVHlwZSwgdTE2X3QqIHJjUHJvYmluZ0ZsYWcpOwordm9pZCB6ZkFwR2V0U3RhUW9zVHlwZSh6ZGV2X3QqIGRldiwgdTE2X3QqIGFkZHIsIHU4X3QqIHFvc1R5cGUpOwordm9pZCB6ZkFwU2V0U3RhVHhSYXRlKHpkZXZfdCogZGV2LCB1MTZfdCogYWRkciwgdTMyX3QgcGh5Q3RybCk7CitzdHJ1Y3QgenNNaWNWYXIqIHpmQXBHZXRSeE1pY0tleSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOworc3RydWN0IHpzTWljVmFyKiB6ZkFwR2V0VHhNaWNLZXkoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1OF90KiBxb3NUeXBlKTsKK3UxNl90IHpmQXBBZGRJZVdtZVBhcmEoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQsIHUxNl90IHZhcCk7Cit1MTZfdCB6ZkFwVXBkYXRlUHNCaXQoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1OF90KiB2YXAsIHU4X3QqIHVhcHNkVHJpZyk7Cit2b2lkIHpmQXBQcm9jZXNzUHNQb2xsKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Zik7Cit1MTZfdCB6ZkFwRmluZFN0YSh6ZGV2X3QqIGRldiwgdTE2X3QqIGFkZHIpOwordm9pZCB6ZkFwR2V0U3RhRW5jcnlUeXBlKHpkZXZfdCogZGV2LCB1MTZfdCogYWRkciwgdThfdCogZW5jcnlUeXBlKTsKK3ZvaWQgemZBcEdldFN0YVdwYUl2KHpkZXZfdCogZGV2LCB1MTZfdCogYWRkciwgdTE2X3QqIGl2MTYsIHUzMl90KiBpdjMyKTsKK3ZvaWQgemZBcFNldFN0YVdwYUl2KHpkZXZfdCogZGV2LCB1MTZfdCogYWRkciwgdTE2X3QgaXYxNiwgdTMyX3QgaXYzMik7Cit2b2lkIHpmQXBDbGVhclN0YUtleSh6ZGV2X3QqIGRldiwgdTE2X3QqIGFkZHIpOworI2lmZGVmIFpNX0VOQUJMRV9DRU5DCit2b2lkIHpmQXBHZXRTdGFDZW5jSXZBbmRLZXlJZHgoemRldl90KiBkZXYsIHUxNl90KiBhZGRyLCB1MzJfdCAqaXYsCisgICAgICAgIHU4X3QgKmtleUlkeCk7Cit2b2lkIHpmQXBTZXRTdGFDZW5jSXYoemRldl90KiBkZXYsIHUxNl90KiBhZGRyLCB1MzJfdCAqaXYpOworI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKK3ZvaWQgemZBcFNldFByb3RlY3Rpb25Nb2RlKHpkZXZfdCogZGV2LCB1MTZfdCBtb2RlKTsKK3ZvaWQgemZBcEZsdXNoQnVmZmVyZWRQc0ZyYW1lKHpkZXZfdCogZGV2KTsKK3ZvaWQgemZBcFNlbmRGYWlsdXJlKHpkZXZfdCogZGV2LCB1OF90KiBhZGRyKTsKK3U4X3QgemZBcFJlbW92ZUZyb21Qc1F1ZXVlKHpkZXZfdCogZGV2LCB1MTZfdCBpZCwgdTE2X3QqIHNyYyk7Cit2b2lkIHpmQXBQcm9jZXNzQWN0aW9uKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Zik7CisvKiBjbW1zdGEuYyAqLwordm9pZCB6Zk1tU3RhVGltZVRpY2soemRldl90KiBkZXYpOwordm9pZCB6ZlJlV3JpdGVCZWFjb25TdGFydEFkZHJlc3MoemRldl90KiBkZXYpOyAgLy8gTXh6ZW5nCit2b2lkIHpmU3RhUHJvY2Vzc0JlYWNvbih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHN0cnVjdCB6c0FkZGl0aW9uSW5mbyogQWRkSW5mbyk7IC8vQ1dZYW5nKG0pCit2b2lkIHpmU3RhUHJvY2Vzc0F1dGgoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCogc3JjLCB1MTZfdCBhcElkKTsKK3ZvaWQgemZTdGFQcm9jZXNzQXNvY1JlcSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90KiBzcmMsIHUxNl90IGFwSWQpOwordm9pZCB6ZlN0YVByb2Nlc3NBc29jUnNwKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Zik7Cit2b2lkIHpmU3RhUHJvY2Vzc0RlYXV0aCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOwordm9pZCB6ZlN0YVByb2Nlc3NEaXNhc29jKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Zik7Cit2b2lkIHpmU3RhUHJvY2Vzc1Byb2JlUnNwKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Ziwgc3RydWN0IHpzQWRkaXRpb25JbmZvKiBBZGRJbmZvKTsKK3ZvaWQgemZTdGFQcm9jZXNzQXRpbSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOwordm9pZCB6ZlN0YVN0b3JlQXNvY1JzcEllKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Zik7Cit2b2lkIHpmU3RhQ2hhbm5lbE1hbmFnZW1lbnQoemRldl90KiBkZXYsIHU4X3Qgc2Nhbik7Cit2b2lkIHpmSWJzc0Nvbm5lY3ROZXR3b3JrKHpkZXZfdCogZGV2KTsKK3ZvaWQgemZJbmZyYUNvbm5lY3ROZXR3b3JrKHpkZXZfdCogZGV2KTsKK3U4X3QgemZDaGVja0F1dGhlbnRpY2F0aW9uKHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNCc3NJbmZvKiBwQnNzSW5mbyk7Cit1OF90IHpmQ2hhbmdlQWRhcHRlclN0YXRlKHpkZXZfdCogZGV2LCB1OF90IG5ld1N0YXRlKTsKK3UxNl90IHpmU3RhQWRkSWVTc2lkKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3Qgb2Zmc2V0KTsKK3UxNl90IHpmU3RhQWRkSWVXcGFSc24oemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQsIHU4X3QgZnJhbWVUeXBlKTsKK3UxNl90IHpmU3RhQWRkSWVJYnNzKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3Qgb2Zmc2V0KTsKK3ZvaWQgemZTdGFTdGFydENvbm5lY3QoemRldl90KiBkZXYsIHU4X3QgYklzU2hhcmVkS2V5KTsKK3U4X3QgemZTdGFJc0Nvbm5lY3RlZCh6ZGV2X3QqIGRldik7Cit1OF90IHpmU3RhSXNDb25uZWN0aW5nKHpkZXZfdCogZGV2KTsKK3U4X3QgemZTdGFJc0Rpc2Nvbm5lY3QoemRldl90KiBkZXYpOwordm9pZCB6ZlN0YVNlbmRCZWFjb24oemRldl90KiBkZXYpOwordm9pZCB6ZlNlbmROdWxsRGF0YSh6ZGV2X3QqIGRldiwgdThfdCB0eXBlKTsKK3ZvaWQgemZTZW5kUFNQb2xsKHpkZXZfdCogZGV2KTsKK3ZvaWQgemZTZW5kQkEoemRldl90KiBkZXYsIHUxNl90IHN0YXJ0X3NlcSwgdThfdCAqYml0bWFwKTsKK3ZvaWQgemRSYXRlSW5mb0NvdW50VHgoemRldl90KiBkZXYsIHUxNl90KiBtYWNBZGRyKTsKK3N0cnVjdCB6c01pY1ZhciogemZTdGFHZXRSeE1pY0tleSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOworc3RydWN0IHpzTWljVmFyKiB6ZlN0YUdldFR4TWljS2V5KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Zik7Cit1MTZfdCB6ZlN0YVJ4VmFsaWRhdGVGcmFtZSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOwordm9pZCB6ZlN0YU1pY0ZhaWx1cmVIYW5kbGluZyh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOwordThfdCB6ZlN0YUJsb2NrV2xhblNjYW4oemRldl90KiBkZXYpOwordm9pZCB6ZlN0YUlic3NQU0NoZWNrU3RhdGUoemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKK3U4X3QgemZTdGFJYnNzUFNRdWV1ZURhdGEoemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKK3ZvaWQgemZTdGFJYnNzUFNTZW5kKHpkZXZfdCogZGV2KTsKK3ZvaWQgemZTdGFSZXNldFN0YXR1cyh6ZGV2X3QqIGRldiwgdThfdCBiSW5pdCk7Cit1MTZfdCB6ZlN0YUFkZEllV21lSW5mbyh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCwgdThfdCBxb3NJbmZvKTsKK3ZvaWQgemZJbml0UGFydG5lck5vdGlmeUV2ZW50KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Ziwgc3RydWN0IHpzUGFydG5lck5vdGlmeUV2ZW50ICpldmVudCk7Cit2b2lkIHpmU3RhSW5pdE9wcG9zaXRlSW5mbyh6ZGV2X3QqIGRldik7Cit2b2lkIHpmU3RhSWJzc01vbml0b3JpbmcoemRldl90KiBkZXYsIHU4X3QgcmVzZXQpOworc3RydWN0IHpzQnNzSW5mbyogemZTdGFGaW5kQnNzSW5mbyh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHN0cnVjdCB6c1dsYW5Qcm9iZVJzcEZyYW1lSGVhZGVyICpwUHJvYmVSc3BIZWFkZXIpOwordThfdCB6ZlN0YUluaXRCc3NJbmZvKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwKKyAgICAgICAgc3RydWN0IHpzV2xhblByb2JlUnNwRnJhbWVIZWFkZXIgKnBQcm9iZVJzcEhlYWRlciwKKyAgICAgICAgc3RydWN0IHpzQnNzSW5mbyogcEJzc0luZm8sIHN0cnVjdCB6c0FkZGl0aW9uSW5mbyogQWRkSW5mbywgdThfdCB0eXBlKTsKK3M4X3QgemZTdGFGaW5kRnJlZU9wcG9zaXRlKHpkZXZfdCogZGV2LCB1MTZfdCAqc2EsIGludCAqcEZvdW5kSWR4KTsKK3M4X3QgemZTdGFGaW5kT3Bwb3NpdGVCeU1BQ0FkZHIoemRldl90KiBkZXYsIHUxNl90ICpzYSwgdThfdCAqcEZvdW5kSWR4KTsKK3ZvaWQgemZTdGFSZWZyZXNoQmxvY2tMaXN0KHpkZXZfdCogZGV2LCB1MTZfdCBmbHVzaEZsYWcpOwordm9pZCB6ZlN0YUNvbm5lY3RGYWlsKHpkZXZfdCogZGV2LCB1MTZfdCByZWFzb24sIHUxNl90KiBic3NpZCwgdThfdCB3ZWlnaHQpOwordm9pZCB6ZlN0YUdldFR4UmF0ZSh6ZGV2X3QqIGRldiwgdTE2X3QqIG1hY0FkZHIsIHUzMl90KiBwaHlDdHJsLAorICAgICAgICB1MTZfdCogcmNQcm9iaW5nRmxhZyk7Cit1MTZfdCB6ZlN0YVByb2Nlc3NBY3Rpb24oemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKK3N0cnVjdCB6c1RraXBTZWVkKiB6ZlN0YUdldFJ4U2VlZCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOworI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisvKiBDRU5DICovCit1MTZfdCB6ZlN0YUFkZEllQ2VuYyh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCk7CisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQwordm9pZCB6ZlN0YUVuYWJsZVNXRW5jcnlwdGlvbih6ZGV2X3QgKmRldiwgdThfdCB2YWx1ZSk7Cit2b2lkIHpmU3RhRGlzYWJsZVNXRW5jcnlwdGlvbih6ZGV2X3QgKmRldik7Cit1MTZfdCB6ZkNvbXB1dGVCc3NJbmZvV2VpZ2h0VmFsdWUoemRldl90ICpkZXYsIHU4X3QgaXNCTW9kZSwgdThfdCBpc0hULCB1OF90IGlzSFQ0MCwgdThfdCBzaWduYWxTdHJlbmd0aCk7Cit1MTZfdCB6ZlN0YUFkZElic3NBZGRpdGlvbmFsSUUoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQpOworCisvKiBjdGtpcC5jICovCit2b2lkIHpmVGtpcEluaXQodThfdCoga2V5LCB1OF90KiB0YSwgc3RydWN0IHpzVGtpcFNlZWQqIHBTZWVkLCB1OF90KiBpbml0SXYpOwordm9pZCB6Zk1pY1NldEtleSh1OF90KiBrZXksIHN0cnVjdCB6c01pY1ZhciogcE1pYyk7Cit2b2lkIHpmTWljQXBwZW5kQnl0ZSh1OF90IGIsIHN0cnVjdCB6c01pY1ZhciogcE1pYyk7Cit2b2lkIHpmTWljQ2xlYXIoc3RydWN0IHpzTWljVmFyKiBwTWljKTsKK3ZvaWQgemZNaWNBcHBlbmRUeEJ1Zih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHU4X3QqIGRhLCB1OF90KiBzYSwKKyAgICAgICAgICAgICAgICAgICAgICB1MTZfdCByZW1vdmVMZW4sIHU4X3QqIG1pYyk7Cit1OF90IHpmTWljUnhWZXJpZnkoemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKK3ZvaWQgemZNaWNHZXRNaWModThfdCogZHN0LCBzdHJ1Y3QgenNNaWNWYXIqIHBNaWMpOwordm9pZCB6ZkNhbFR4TWljKHpkZXZfdCAqZGV2LCB6YnVmX3QgKmJ1ZiwgdThfdCAqc25hcCwgdTE2X3Qgc25hcExlbiwgdTE2X3Qgb2Zmc2V0LCB1MTZfdCAqZGEsIHUxNl90ICpzYSwgdThfdCB1cCwgdThfdCAqbWljKTsKK3ZvaWQgemZUS0lQRW5jcnlwdCh6ZGV2X3QgKmRldiwgemJ1Zl90ICpidWYsIHU4X3QgKnNuYXAsIHUxNl90IHNuYXBMZW4sIHUxNl90IG9mZnNldCwgdThfdCBrZXlMZW4sIHU4X3QqIGtleSwgdTMyX3QqIGljdik7Cit1MTZfdCB6ZlRLSVBEZWNyeXB0KHpkZXZfdCAqZGV2LCB6YnVmX3QgKmJ1ZiwgdTE2X3Qgb2Zmc2V0LCB1OF90IGtleUxlbiwgdThfdCoga2V5KTsKK3ZvaWQgemZUa2lwR2V0c2VlZHModTE2X3QgaXYxNiwgdThfdCAqUkM0S2V5LCBzdHJ1Y3QgenNUa2lwU2VlZCAqU2VlZCk7Cit1OF90IHpmVGtpcFBoYXNlMUtleU1peCh1MzJfdCBpdjMyLCBzdHJ1Y3QgenNUa2lwU2VlZCogcFNlZWQpOwordThfdCB6ZlRraXBQaGFzZTJLZXlNaXgodTE2X3QgaXYxNiwgc3RydWN0IHpzVGtpcFNlZWQqIHBTZWVkKTsKK3ZvaWQgemZXRVBFbmNyeXB0KHpkZXZfdCAqZGV2LCB6YnVmX3QgKmJ1ZiwgdThfdCAqc25hcCwgdTE2X3Qgc25hcExlbiwgdTE2X3Qgb2Zmc2V0LCB1OF90IGtleUxlbiwgdThfdCogV2VwS2V5LCB1OF90ICppdik7Cit1MTZfdCB6ZldFUERlY3J5cHQoemRldl90ICpkZXYsIHpidWZfdCAqYnVmLCB1MTZfdCBvZmZzZXQsIHU4X3Qga2V5TGVuLCB1OF90KiBXZXBLZXksIHU4X3QgKml2KTsKKworLyogY3R4cnguYyAqLwordTE2X3QgemZTZW5kODAyMTFGcmFtZSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOwordm9pZCB6ZklzclBjaVR4Q29tcCh6ZGV2X3QqIGRldik7Cit2b2lkIHpmVHhQY2lEbWFTdGFydCh6ZGV2X3QqIGRldik7Cit1MTZfdCB6ZlR4UG9ydENvbnRyb2woemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBwb3J0KTsKK3UxNl90IHpmVHhTZW5kRXRoKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgcG9ydCwKKyAgICAgICAgICAgICAgICAgIHUxNl90IGJ1ZlR5cGUsIHUxNl90IGZsYWcpOwordTE2X3QgemZUeEdlbldsYW5UYWlsKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QqIHNuYXAsIHUxNl90IHNuYXBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgdTE2X3QqIG1pYyk7Cit1MTZfdCB6ZlR4R2VuV2xhblNuYXAoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCogc25hcCwgdTE2X3QqIHNuYXBsZW4pOwordm9pZCB6ZlR4R2V0SXBUb3NBbmRGcmFnKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdThfdCogdXAsIHUxNl90KiBmcmFnT2ZmKTsKK3UxNl90IHpmUHV0VnR4cSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOwordm9pZCB6ZlB1c2hWdHhxKHpkZXZfdCogZGV2KTsKK3U4X3QgemZJc1Z0eHFFbXB0eSh6ZGV2X3QqIGRldik7Cit1MTZfdCB6ZkdldFNlcUN0cmwoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQpOwordThfdCB6ZkdldEZyYWdObyh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOwordm9pZCB6ZlNob3dSeEVBUE9MKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3Qgb2Zmc2V0KTsKK3ZvaWQgemZTaG93VHhFQVBPTCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCk7Cit2b2lkIHpmQ29yZVJlY3YoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCBzdHJ1Y3QgenNBZGRpdGlvbkluZm8qIGFkZEluZm8pOwordTE2X3QgemZQdXRWbW1xKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Zik7Cit2b2lkIHpmRmx1c2hWdHhxKHpkZXZfdCogZGV2KTsKK3ZvaWQgemZBZ2luZ0RlZnJhZ0xpc3QoemRldl90KiBkZXYsIHUxNl90IGZsdXNoRmxhZyk7CisKK3ZvaWQgemZMZWQxMDBtc0N0cmwoemRldl90KiBkZXYpOwordm9pZCB6ZjgwMjExRnJhbWVTZW5kKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QqIGhlYWRlciwgdTE2X3Qgc25hcExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNl90KiBkYSwgdTE2X3QqIHNhLCB1OF90IHVwLCB1MTZfdCBoZWFkZXJMZW4sIHUxNl90KiBzbmFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2X3QqIHRhaWwsIHUxNl90IHRhaWxMZW4sIHUxNl90IG9mZnNldCwgdTE2X3QgYnVmVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4X3QgYWMsIHU4X3Qga2V5SWR4KTsKK3ZvaWQgemZDaGVja0lzUklGU0ZyYW1lKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgZnJhbWVTdWJUeXBlKTsKKworLyogcXVldWUuYyAqLworc3RydWN0IHpzUXVldWUqIHpmUXVldWVDcmVhdGUoemRldl90KiBkZXYsIHUxNl90IHNpemUpOwordm9pZCB6ZlF1ZXVlRGVzdHJveSh6ZGV2X3QqIGRldiwgc3RydWN0IHpzUXVldWUqIHEpOwordTE2X3QgemZRdWV1ZVB1dE5jcyh6ZGV2X3QqIGRldiwgc3RydWN0IHpzUXVldWUqIHEsIHpidWZfdCogYnVmLCB1MzJfdCB0aWNrKTsKK3UxNl90IHpmUXVldWVQdXQoemRldl90KiBkZXYsIHN0cnVjdCB6c1F1ZXVlKiBxLCB6YnVmX3QqIGJ1ZiwgdTMyX3QgdGljayk7Cit6YnVmX3QqIHpmUXVldWVHZXQoemRldl90KiBkZXYsIHN0cnVjdCB6c1F1ZXVlKiBxKTsKK3pidWZfdCogemZRdWV1ZUdldFdpdGhNYWMoemRldl90KiBkZXYsIHN0cnVjdCB6c1F1ZXVlKiBxLCB1OF90KiBhZGRyLCB1OF90KiBtYik7Cit2b2lkIHpmUXVldWVGbHVzaCh6ZGV2X3QqIGRldiwgc3RydWN0IHpzUXVldWUqIHEpOwordm9pZCB6ZlF1ZXVlQWdlKHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNRdWV1ZSogcSwgdTMyX3QgdGljaywgdTMyX3QgbXNBZ2UpOwordm9pZCB6ZlF1ZXVlR2VuZXJhdGVVYXBzZFRpbSh6ZGV2X3QqIGRldiwgc3RydWN0IHpzUXVldWUqIHEsCisgICAgICAgIHU4X3QqIHVuaUJpdE1hcCwgdTE2X3QqIGhpZ2hlc3RCeXRlKTsKKworLyogaHBtYWluLmMgKi8KK3UxNl90IHpmSHBJbml0KHpkZXZfdCogZGV2LCB1MzJfdCBmcmVxdWVuY3kpOwordTE2X3QgemZIcFJlbGVhc2UoemRldl90KiBkZXYpOwordm9pZCB6ZkhwU2V0RnJlcXVlbmN5RXgoemRldl90KiBkZXYsIHUzMl90IGZyZXF1ZW5jeSwgdThfdCBidzQwLAorICAgICAgICB1OF90IGV4dE9mZnNldCwgdThfdCBpbml0UkYpOwordTE2X3QgemZIcFN0YXJ0UmVjdih6ZGV2X3QqIGRldik7Cit1MTZfdCB6ZkhwU3RvcFJlY3YoemRldl90KiBkZXYpOwordTE2X3QgemZIcFJlc2V0S2V5Q2FjaGUoemRldl90KiBkZXYpOwordTE2X3QgemZIcFNldEFwU3RhTW9kZSh6ZGV2X3QqIGRldiwgdThfdCBtb2RlKTsKK3UxNl90IHpmSHBTZXRCc3NpZCh6ZGV2X3QqIGRldiwgdThfdCogYnNzaWQpOwordTE2X3QgemZIcFNldFNuaWZmZXJNb2RlKHpkZXZfdCogZGV2LCB1MTZfdCBvbik7Cit1OF90IHpmSHBVcGRhdGVRb3NQYXJhbWV0ZXIoemRldl90KiBkZXYsIHUxNl90KiBjd21pblRibCwgdTE2X3QqIGN3bWF4VGJsLAorICAgICAgICB1MTZfdCogYWlmc1RibCwgdTE2X3QqIHR4b3BUYmwpOwordm9pZCB6ZkhwU2V0QXRpbVdpbmRvdyh6ZGV2X3QqIGRldiwgdTE2X3QgYXRpbVdpbik7Cit2b2lkIHpmSHBFbmFibGVCZWFjb24oemRldl90KiBkZXYsIHUxNl90IG1vZGUsIHUxNl90IGJjbkludGVydmFsLCB1MTZfdCBkdGltLCB1OF90IGVuYWJsZUF0aW0pOwordm9pZCB6ZkhwRGlzYWJsZUJlYWNvbih6ZGV2X3QqIGRldik7Cit2b2lkIHpmSHBTZXRCYXNpY1JhdGVTZXQoemRldl90KiBkZXYsIHUxNl90IGJSYXRlQmFzaWMsIHUxNl90IGdSYXRlQmFzaWMpOwordm9pZCB6ZkhwU2V0UlRTQ1RTUmF0ZSh6ZGV2X3QqIGRldiwgdTMyX3QgcmF0ZSk7Cit2b2lkIHpmSHBTZXRNYWNBZGRyZXNzKHpkZXZfdCogZGV2LCB1MTZfdCogbWFjQWRkciwgdTE2X3QgbWFjQWRkcklkKTsKK3UzMl90IHpmSHBHZXRNYWNBZGRyZXNzKHpkZXZfdCogZGV2KTsKK3UzMl90IHpmSHBHZXRUcmFuc21pdFBvd2VyKHpkZXZfdCogZGV2KTsKK3ZvaWQgemZIcFNldE11bHRpY2FzdExpc3QoemRldl90KiBkZXYsIHU4X3Qgc2l6ZSwgdThfdCogcExpc3QsIHU4X3QgYkFsbE11bHRpY2FzdCk7CisKK3UxNl90IHpmSHBSZW1vdmVLZXkoemRldl90KiBkZXYsIHUxNl90IHVzZXIpOwordTMyX3QgemZIcFNldEtleSh6ZGV2X3QqIGRldiwgdThfdCB1c2VyLCB1OF90IGtleUlkLCB1OF90IHR5cGUsCisgICAgICAgIHUxNl90KiBtYWMsIHUzMl90KiBrZXkpOworLy91MzJfdCB6ZkhwU2V0U3RhUGFpcndpc2VLZXkoemRldl90KiBkZXYsIHUxNl90KiBhcE1hY0FkZHIsIHU4X3QgdHlwZSwKKy8vICAgICAgICB1MzJfdCoga2V5LCB1MzJfdCogbWljS2V5KTsKKy8vdTMyX3QgemZIcFNldFN0YUdyb3VwS2V5KHpkZXZfdCogZGV2LCB1MTZfdCogYXBNYWNBZGRyLCB1OF90IHR5cGUsCisvLyAgICAgICAgdTMyX3QqIGtleSwgdTMyX3QqIG1pY0tleSk7Cit1MzJfdCB6ZkhwU2V0QXBQYWlyd2lzZUtleSh6ZGV2X3QqIGRldiwgdTE2X3QqIHN0YU1hY0FkZHIsIHU4X3QgdHlwZSwKKyAgICAgICAgdTMyX3QqIGtleSwgdTMyX3QqIG1pY0tleSwgdTE2X3Qgc3RhQWlkKTsKK3UzMl90IHpmSHBTZXRBcEdyb3VwS2V5KHpkZXZfdCogZGV2LCB1MTZfdCogYXBNYWNBZGRyLCB1OF90IHR5cGUsCisgICAgICAgIHUzMl90KiBrZXksIHUzMl90KiBtaWNLZXksIHUxNl90IHZhcElkKTsKK3UzMl90IHpmSHBTZXREZWZhdWx0S2V5KHpkZXZfdCogZGV2LCB1OF90IGtleUlkLCB1OF90IHR5cGUsIHUzMl90KiBrZXksIHUzMl90KiBtaWNLZXkpOwordTMyX3QgemZIcFNldFBlclVzZXJLZXkoemRldl90KiBkZXYsIHU4X3QgdXNlciwgdThfdCBrZXlJZCwgdThfdCogbWFjLCB1OF90IHR5cGUsIHUzMl90KiBrZXksIHUzMl90KiBtaWNLZXkpOworCit2b2lkIHpmSHBTZW5kQmVhY29uKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgbGVuKTsKK3UxNl90IHpmSHBHZXRQYXlsb2FkTGVuKHpkZXZfdCogZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgemJ1Zl90KiBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICB1MTZfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICB1MTZfdCBwbGNwSGRyTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgdTMyX3QgKnJ4TVQsCisgICAgICAgICAgICAgICAgICAgICAgICB1MzJfdCAqcnhNQ1MsCisgICAgICAgICAgICAgICAgICAgICAgICB1MzJfdCAqcnhCVywKKyAgICAgICAgICAgICAgICAgICAgICAgIHUzMl90ICpyeFNHCisgICAgICAgICAgICAgICAgICAgICAgICApOwordTMyX3QgemZIcEdldEZyZWVUeGRDb3VudCh6ZGV2X3QqIGRldik7Cit1MzJfdCB6ZkhwR2V0TWF4VHhkQ291bnQoemRldl90KiBkZXYpOwordTE2X3QgemZIcFNlbmQoemRldl90KiBkZXYsIHUxNl90KiBoZWFkZXIsIHUxNl90IGhlYWRlckxlbiwKKyAgICAgICAgdTE2X3QqIHNuYXAsIHUxNl90IHNuYXBMZW4sIHUxNl90KiB0YWlsLCB1MTZfdCB0YWlsTGVuLCB6YnVmX3QqIGJ1ZiwKKyAgICAgICAgdTE2X3Qgb2Zmc2V0LCB1MTZfdCBidWZUeXBlLCB1OF90IGFjLCB1OF90IGtleUlkeCk7Cit2b2lkIHpmSHBHZXRSZWd1bGF0aW9uVGFibGVmcm9tUmVnaW9uQ29kZSh6ZGV2X3QqIGRldiwgdTE2X3QgcmVnaW9uQ29kZSk7Cit2b2lkIHpmSHBHZXRSZWd1bGF0aW9uVGFibGVmcm9tQ291bnRyeSh6ZGV2X3QqIGRldiwgdTE2X3QgQ291bnRyeUNvZGUpOwordThfdCB6ZkhwR2V0UmVndWxhdGlvblRhYmxlZnJvbUlTTyh6ZGV2X3QqIGRldiwgdThfdCAqY291bnRyeUluZm8sIHU4X3QgbGVuZ3RoKTsKK2NvbnN0IGNoYXIqIHpmSHBHZXRpc29OYW1lZnJvbXJlZ2lvbkNvZGUoemRldl90KiBkZXYsIHUxNl90IHJlZ2lvbkNvZGUpOwordTE2X3QgemZIcEdldFJlZ2lvbkNvZGVGcm9tSXNvTmFtZSh6ZGV2X3QqIGRldiwgdThfdCAqY291bnRyeUlzb05hbWUpOwordThfdCB6ZkhwR2V0UmVndWxhdG9yeURvbWFpbih6ZGV2X3QqIGRldik7Cit2b2lkIHpmSHBMZWRDdHJsKHpkZXZfdCogZGV2LCB1MTZfdCBsZWRJZCwgdThfdCBtb2RlKTsKK3UxNl90IHpmSHBSZXNldFR4UngoemRldl90KiBkZXYpOwordTE2X3QgemZIcERlbGV0ZUFsbG93Q2hhbm5lbCh6ZGV2X3QqIGRldiwgdTE2X3QgZnJlcSk7Cit1MTZfdCB6ZkhwQWRkQWxsb3dDaGFubmVsKHpkZXZfdCogZGV2LCB1MTZfdCBmcmVxKTsKK3UzMl90IHpmSHBDd21VcGRhdGUoemRldl90KiBkZXYpOwordTMyX3QgemZIcEFuaVVwZGF0ZSh6ZGV2X3QqIGRldik7Cit1MzJfdCB6ZkhwQW5pVXBkYXRlUnNzaSh6ZGV2X3QqIGRldiwgdThfdCByc3NpKTsKK3ZvaWQgemZIcEFuaUF0dGFjaCh6ZGV2X3QqIGRldik7Cit2b2lkIHpmSHBBbmlBclBvbGwoemRldl90KiBkZXYsIHUzMl90IGxpc3RlblRpbWUsIHUzMl90IHBoeUNudDEsIHUzMl90IHBoeUNudDIpOwordm9pZCB6ZkhwSGVhcnRCZWF0KHpkZXZfdCogZGV2KTsKK3ZvaWQgemZIcFBvd2VyU2F2ZVNldFN0YXRlKHpkZXZfdCogZGV2LCB1OF90IHBzU3RhdGUpOwordm9pZCB6ZkhwUG93ZXJTYXZlU2V0TW9kZSh6ZGV2X3QqIGRldiwgdThfdCBzdGFNb2RlLCB1OF90IHBzTW9kZSwgdTE2X3QgYmNuSW50ZXJ2YWwpOwordTE2X3QgemZIcElzRGZzQ2hhbm5lbCh6ZGV2X3QqIGRldiwgdTE2X3QgZnJlcSk7Cit1MTZfdCB6ZkhwSXNEZnNDaGFubmVsTkNTKHpkZXZfdCogZGV2LCB1MTZfdCBmcmVxKTsKK3UxNl90IHpmSHBGaW5kRmlyc3ROb25EZnNDaGFubmVsKHpkZXZfdCogZGV2LCB1MTZfdCBhQmFuZCk7Cit1MTZfdCB6ZkhwSXNBbGxvd2VkQ2hhbm5lbCh6ZGV2X3QqIGRldiwgdTE2X3QgZnJlcSk7Cit2b2lkIHpmSHBEaXNhYmxlRGZzQ2hhbm5lbCh6ZGV2X3QqIGRldiwgdThfdCBkaXNhYmxlRmxhZyk7Cit2b2lkIHpmSHBTZXRUVFNJRlNUaW1lKHpkZXZfdCogZGV2LCB1OF90IHNpZnNfdGltZSk7CisKK3ZvaWQgemZIcFF1ZXJ5TW9uSGFsUnhJbmZvKHpkZXZfdCogZGV2LCB1OF90ICptb25IYWxSeEluZm8pOworCit2b2lkIHpmRHVtcFNTSUQodThfdCBsZW5ndGgsIHU4X3QgKnZhbHVlKTsKK3ZvaWQgemZIcFNldEFnZ1BrdE51bSh6ZGV2X3QqIGRldiwgdTMyX3QgbnVtKTsKK3ZvaWQgemZIcFNldE1QRFVEZW5zaXR5KHpkZXZfdCogZGV2LCB1OF90IGRlbnNpdHkpOwordm9pZCB6ZkhwU2V0U2xvdFRpbWUoemRldl90KiBkZXYsIHU4X3QgdHlwZSk7Cit2b2lkIHpmSHBTZXRTbG90VGltZVJlZ2lzdGVyKHpkZXZfdCogZGV2LCB1OF90IHR5cGUpOwordm9pZCB6ZkhwU2V0Umlmcyh6ZGV2X3QqIGRldiwgdThfdCBodF9lbmFibGUsIHU4X3QgaHQyMDQwLCB1OF90IGdfbW9kZSk7Cit2b2lkIHpmSHBCZWdpblNpdGVTdXJ2ZXkoemRldl90KiBkZXYsIHU4X3Qgc3RhdHVzKTsKK3ZvaWQgemZIcEZpbmlzaFNpdGVTdXJ2ZXkoemRldl90KiBkZXYsIHU4X3Qgc3RhdHVzKTsKK3UxNl90IHpmSHBFbmFibGVId1JldHJ5KHpkZXZfdCogZGV2KTsKK3UxNl90IHpmSHBEaXNhYmxlSHdSZXRyeSh6ZGV2X3QqIGRldik7Cit2b2lkIHpmSHBTV0RlY3J5cHQoemRldl90KiBkZXYsIHU4X3QgZW5hYmxlKTsKK3ZvaWQgemZIcFNXRW5jcnlwdCh6ZGV2X3QqIGRldiwgdThfdCBlbmFibGUpOwordTMyX3QgemZIcENhcGFiaWxpdHkoemRldl90KiBkZXYpOwordm9pZCB6ZkhwU2V0Um9sbENhbGxUYWJsZSh6ZGV2X3QqIGRldik7Cit1OF90IHpmSHByZWd1bGF0b3J5RG9tYWluKHpkZXZfdCogZGV2KTsKK3UxNl90IHpmU3RhQWRkSWVQb3dlckNhcCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCk7Cit1OF90IHpmSHBHZXRNYXhUeFBvd2VyKHpkZXZfdCogZGV2KTsKK3U4X3QgemZIcEdldE1pblR4UG93ZXIoemRldl90KiBkZXYpOwordTE2X3QgemZTdGFBZGRJZVN1cHBvcnRDaCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCk7Cit2b2lkIHpmSHBFbmFibGVSaWZzKHpkZXZfdCogZGV2LCB1OF90IG1vZGUyNGcsIHU4X3QgbW9kZUh0LCB1OF90IG1vZGVIdDIwNDApOwordm9pZCB6ZkhwRGlzYWJsZVJpZnMoemRldl90KiBkZXYpOwordTE2X3QgemZIcFVzYlJlc2V0KHpkZXZfdCogZGV2KTsKKworCisjZW5kaWYgLyogI2lmbmRlZiBfQ0ZVTkNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NoYi5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NoYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYWMxNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY2hiLmMKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBNb2R1bGUgTmFtZSA6IGhiLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEFic3RyYWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgVGhpcyBtb2R1bGUgY29udGFpbnMgaG91c2Uga2VlcGluZyBhbmQgdGltZXIgZnVuY3Rpb25zLiAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE5PVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJjcHJlY29tcC5oIgorCisvKiBDYWxsZWQgYnkgd3JhcHBlciBldmVyeSAxMCBtc2VjICovCit2b2lkIHpmaUhlYXJ0QmVhdCh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB3ZC0+dGljaysrOworCisjaWYgMAorICAgIC8qID0+IGV2ZXJ5IDEuMjggc2Vjb25kcyAqLworICAgIGlmICh3ZC0+Y3dtLmN3X2VuYWJsZSAmJiAoKHdkLT50aWNrICYgMHg3ZikgPT0gMHgzZikpCisgICAgeworICAgICAgICB6ZkhwQ3dtVXBkYXRlKGRldik7CisgICAgfQorI2VuZGlmCisgICAgLyogPT4gZXZlcnkgMi41NiBzZWNvbmRzICovCisgICAgaWYgKCh3ZC0+dGljayAmIDB4ZmYpID09IDApCisgICAgeworICAgICAgICB6ZkFnaW5nRGVmcmFnTGlzdChkZXYsIDEpOworICAgIH0KKworICAgIC8qIFdhdGNoIERvZyAqLworICAgIC8vemZXYXRjaERvZygpOworCisgICAgLyogTEVEIENvbnRyb2wgKHBlciAxMDBtcykgKi8KKyAgICBpZiAoKHdkLT50aWNrICUgMTApID09IDkpCisgICAgeworICAgICAgICB6ZkxlZDEwMG1zQ3RybChkZXYpOworI2lmZGVmIFpNX0VOQUJMRV9CQV9SQVRFQ1RSTAorICAgICAgICBpZiAoIXdkLT5tb2RlTURLRW5hYmxlKQorICAgICAgICB7CisgICAgICAgICAgICB6ZmlEYmdSZWFkVGFsbHkoZGV2KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisjaWZkZWYgWk1fRU5BQkxFX1JFV1JJVEVfQkVBQ09OX1NUQVJUX0FERFJFU1MKKyAgICBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lCU1MgKQorICAgIHsKKyAgICAgICAgaWYgKCB6ZlN0YUlzQ29ubmVjdGVkKGRldikgKQorICAgICAgICB7CisgICAgICAgICAgICB6ZlJlV3JpdGVCZWFjb25TdGFydEFkZHJlc3MoZGV2KTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgaWYgKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JQlNTICkKKyAgICB7CisgICAgICAgIGlmICggemZTdGFJc0Nvbm5lY3RlZChkZXYpICkKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPnRpY2tJYnNzUmVjZWl2ZUJlYWNvbisrOyAgLy8gYWRkIDEwbXMKKworICAgICAgICAgICAgaWYgKCAod2QtPnN0YS5pYnNzU2l0ZVN1cnZleVN0YXR1cyA9PSAyKSAmJgorICAgICAgICAgICAgICAgICAod2QtPnRpY2tJYnNzUmVjZWl2ZUJlYWNvbiA9PSAzMDApICYmCisgICAgICAgICAgICAgICAgICh3ZC0+c3RhLmlic3NSZWNlaXZlQmVhY29uQ291bnQgPCAzKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiSXQgaXMgaGFwcGVuISEhIE5vIGVycm9yIG1lc3NhZ2UiKTsKKyAgICAgICAgICAgICAgICB6ZlJlU2V0Q3VycmVudEZyZXF1ZW5jeShkZXYpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYod2QtPnN0YS5SZWNlaXZlZFBhY2tldFJhdGVDb3VudGVyIDw9IDApCisgICAgeworICAgICAgICB3ZC0+c3RhLlJlY2VpdmVkUGt0UmF0ZVBlclNlY29uZCA9IHdkLT5zdGEuVG90YWxOdW1iZXJPZlJlY2VpdmVQYWNrZXRzOworCS8vem1fZGVidWdfbXNnMSgiUmVjZWl2ZSBQYWNrZXQgUGVyIFNlY29uZCAgPSAiLCB3ZC0+c3RhLlJlY2VpdmVkUGt0UmF0ZVBlclNlY29uZCk7CisJICAgIGlmICh3ZC0+c3RhLlRvdGFsTnVtYmVyT2ZSZWNlaXZlUGFja2V0cyAhPSAwKQorCSAgICB7CisJICAgICAgICB3ZC0+c3RhLmF2Z1NpemVPZlJlY2VpdmVQYWNrZXRzID0gd2QtPnN0YS5Ub3RhbE51bWJlck9mUmVjZWl2ZUJ5dGVzL3dkLT5zdGEuVG90YWxOdW1iZXJPZlJlY2VpdmVQYWNrZXRzOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCSAgICAgICAgd2QtPnN0YS5hdmdTaXplT2ZSZWNlaXZlUGFja2V0cyA9IDY0MDsKKwkgICAgfQorICAgICAgICB3ZC0+c3RhLlRvdGFsTnVtYmVyT2ZSZWNlaXZlUGFja2V0cyA9IDA7CisgICAgICAgIHdkLT5zdGEuVG90YWxOdW1iZXJPZlJlY2VpdmVCeXRlcyA9IDA7CisgICAgICAgIHdkLT5zdGEuUmVjZWl2ZWRQYWNrZXRSYXRlQ291bnRlciA9IDEwMDsgLypmb3IgYW5vdGhlciAxcyovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHdkLT5zdGEuUmVjZWl2ZWRQYWNrZXRSYXRlQ291bnRlci0tOworICAgIH0KKworCS8qID0+IGV2ZXJ5IDEuMjggc2Vjb25kcyAqLworCWlmKCh3ZC0+dGljayAmIDB4N2YpID09IDB4M2YpCisJeworCQlpZiggd2QtPnN0YS5Ob25OQVBjb3VudCA+IDApCisJCXsKKwkJCXdkLT5zdGEuUlRTSW5BR0dNb2RlID0gVFJVRTsKKwkJCXdkLT5zdGEuTm9uTkFQY291bnQgPSAwOworCQl9CisJCWVsc2UKKwkJeworCQkJd2QtPnN0YS5SVFNJbkFHR01vZGUgPSBGQUxTRTsKKwkJfQorCX0KKworCisKKyAgICAvKiBNYWludGFpbiBtYW5hZ2VtZW50IHRpbWUgdGljayAqLworICAgIHpmTW1BcFRpbWVUaWNrKGRldik7CisgICAgemZNbVN0YVRpbWVUaWNrKGRldik7CisKKyAgICAvL3pmUGh5Q3JUdW5pbmcoZGV2KTsKKworICAgIC8vemZUeFBvd2VyQ29udHJvbChkZXYpOworICAgIHpmSHBIZWFydEJlYXQoZGV2KTsKKworfQorCisKK3ZvaWQgemZEdW1wQnNzTGlzdCh6ZGV2X3QqIGRldikKK3sKKyAgICBzdHJ1Y3QgenNCc3NJbmZvKiBwQnNzSW5mbzsKKyAgICB1OF90ICAgc3RyWzMzXTsKKyAgICB1OF90ICAgaSwgajsKKyAgICB1MzJfdCAgYWRkcjEsIGFkZHIyOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem1fZGVidWdfbXNnMCgiKioqKiogQnNzIHNjYW4gcmVzdWx0ICoqKioqIik7CisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHBCc3NJbmZvID0gd2QtPnN0YS5ic3NMaXN0LmhlYWQ7CisKKyAgICBmb3IoIGk9MDsgaTx3ZC0+c3RhLmJzc0xpc3QuYnNzQ291bnQ7IGkrKyApCisgICAgeworICAgICAgICBpZiAoIGkgKQorICAgICAgICB7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgfQorCisgICAgICAgIHptX2RlYnVnX21zZzEoIkJTUyAjIiwgaSk7CisgICAgICAgIGZvcihqPTA7IGo8cEJzc0luZm8tPnNzaWRbMV07IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgc3RyW2pdID0gcEJzc0luZm8tPnNzaWRbMitqXTsKKyAgICAgICAgfQorICAgICAgICBzdHJbcEJzc0luZm8tPnNzaWRbMV1dID0gMDsKKyAgICAgICAgem1fZGVidWdfbXNnMCgiU1NJRCA9ICIpOworICAgICAgICB6bV9kZWJ1Z19tc2cwKHN0cik7CisKKyAgICAgICAgYWRkcjEgPSAocEJzc0luZm8tPmJzc2lkWzBdIDw8IDE2KSArIChwQnNzSW5mby0+YnNzaWRbMV0gPDwgOCApCisgICAgICAgICAgICAgICAgKyBwQnNzSW5mby0+YnNzaWRbMl07CisgICAgICAgIGFkZHIyID0gKHBCc3NJbmZvLT5ic3NpZFszXSA8PCAxNikgKyAocEJzc0luZm8tPmJzc2lkWzRdIDw8IDggKQorICAgICAgICAgICAgICAgICsgcEJzc0luZm8tPmJzc2lkWzVdOworICAgICAgICB6bV9kZWJ1Z19tc2cyKCJCc3NpZCA9ICIsIGFkZHIxKTsKKyAgICAgICAgem1fZGVidWdfbXNnMigiICAgICAgICAiLCBhZGRyMik7CisgICAgICAgIHptX2RlYnVnX21zZzEoImZyZXF1ZW5jeSA9ICIsIHBCc3NJbmZvLT5mcmVxdWVuY3kpOworICAgICAgICB6bV9kZWJ1Z19tc2cxKCJzZWN1cml0eSB0eXBlID0gIiwgcEJzc0luZm8tPnNlY3VyaXR5VHlwZSk7CisgICAgICAgIHptX2RlYnVnX21zZzEoIldNRSA9ICIsIHBCc3NJbmZvLT53bWVTdXBwb3J0KTsKKyAgICAgICAgem1fZGVidWdfbXNnMSgiYmVhY29uIGludGVydmFsID0gIiwgcEJzc0luZm8tPmJlYWNvbkludGVydmFsWzBdCisgICAgICAgICAgICAgICAgICAgICAgKyAocEJzc0luZm8tPmJlYWNvbkludGVydmFsWzFdIDw8IDgpKTsKKyAgICAgICAgem1fZGVidWdfbXNnMSgiY2FwYWJpbGl0eSA9ICIsIHBCc3NJbmZvLT5jYXBhYmlsaXR5WzBdCisgICAgICAgICAgICAgICAgICAgICAgKyAocEJzc0luZm8tPmNhcGFiaWxpdHlbMV0gPDwgOCkpOworICAgICAgICBpZiAoIHBCc3NJbmZvLT5zdXBwb3J0ZWRSYXRlc1sxXSA+IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IoIGo9MDsgajxwQnNzSW5mby0+c3VwcG9ydGVkUmF0ZXNbMV07IGorKyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMigic3VwcG9ydGVkIHJhdGVzID0gIiwgcEJzc0luZm8tPnN1cHBvcnRlZFJhdGVzWzIral0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yKCBqPTA7IGo8cEJzc0luZm8tPmV4dFN1cHBvcnRlZFJhdGVzWzFdOyBqKysgKQorICAgICAgICB7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cyKCJleHQgc3VwcG9ydGVkIHJhdGVzID0gIiwgcEJzc0luZm8tPmV4dFN1cHBvcnRlZFJhdGVzWzIral0pOworICAgICAgICB9CisKKyAgICAgICAgcEJzc0luZm8gPSBwQnNzSW5mby0+bmV4dDsKKyAgICB9CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHptX2RlYnVnX21zZzAoIioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY2ljLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY2ljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg0ZjA3OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jaWMuYwpAQCAtMCwwICsxLDQ5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJjcHJlY29tcC5oIgorI2luY2x1ZGUgInJhdGVjdHJsLmgiCisKKwordm9pZCB6ZlVwZGF0ZUJzc2lkKHpkZXZfdCogZGV2LCB1OF90KiBic3NpZCkKK3sKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8vem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIC8vem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICB3ZC0+c3RhLmJzc2lkWzBdID0gYnNzaWRbMF0gKyAoKCh1MTZfdCkgYnNzaWRbMV0pIDw8IDgpOworICAgIHdkLT5zdGEuYnNzaWRbMV0gPSBic3NpZFsyXSArICgoKHUxNl90KSBic3NpZFszXSkgPDwgOCk7CisgICAgd2QtPnN0YS5ic3NpZFsyXSA9IGJzc2lkWzRdICsgKCgodTE2X3QpIGJzc2lkWzVdKSA8PCA4KTsKKyAgICAvL3ptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICB6ZkhwU2V0QnNzaWQoZGV2LCBic3NpZCk7CisKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmUmVzZXRTdXBwb3J0UmF0ZSAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBSZXNldCBzdXBwb3J0IHJhdGUgdG8gZGVmYXVsdCB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgdHlwZTogWk1fREVGQVVMVF9TVVBQT1JUX1JBVEVfWkVSTyAgICAgICA9PiByZXNldCB0byB6ZXJvICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgIFpNX0RFRkFVTFRfU1VQUE9SVF9SQVRFX0RJU0NPTk5FQ1QgPT4gcmVzZXQgdG8gZGlzY29ubmVjdCBzdGF0dXMgICAgICAqLworLyogICAgICAgICAgICBaTV9ERUZBVUxUX1NVUFBPUlRfUkFURV9JQlNTX0IgICAgID0+IHJlc2V0IHRvIElCU1MgY3JlYXRvcihiIG1vZGUpICAgKi8KKy8qICAgICAgICAgICAgWk1fREVGQVVMVF9TVVBQT1JUX1JBVEVfSUJTU19BRyAgICA9PiByZXNldCB0byBJQlNTIGNyZWF0b3IoYS9nIG1vZGUpICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgemZSZXNldFN1cHBvcnRSYXRlKHpkZXZfdCogZGV2LCB1OF90IHR5cGUpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgc3dpdGNoKHR5cGUpCisgICAgeworICAgIGNhc2UgWk1fREVGQVVMVF9TVVBQT1JUX1JBVEVfWkVSTzoKKyAgICAgICAgd2QtPmJSYXRlID0gMDsKKyAgICAgICAgd2QtPmJSYXRlQmFzaWMgPSAwOworICAgICAgICB3ZC0+Z1JhdGUgPSAwOworICAgICAgICB3ZC0+Z1JhdGVCYXNpYyA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWk1fREVGQVVMVF9TVVBQT1JUX1JBVEVfRElTQ09OTkVDVDoKKyAgICAgICAgd2QtPmJSYXRlID0gMHhmOworICAgICAgICB3ZC0+YlJhdGVCYXNpYyA9IDB4ZjsKKyAgICAgICAgd2QtPmdSYXRlID0gMHhmZjsKKyAgICAgICAgd2QtPmdSYXRlQmFzaWMgPSAweDE1OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFpNX0RFRkFVTFRfU1VQUE9SVF9SQVRFX0lCU1NfQjoKKyAgICAgICAgd2QtPmJSYXRlID0gMHhmOworICAgICAgICB3ZC0+YlJhdGVCYXNpYyA9IDB4ZjsKKyAgICAgICAgd2QtPmdSYXRlID0gMDsKKyAgICAgICAgd2QtPmdSYXRlQmFzaWMgPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFpNX0RFRkFVTFRfU1VQUE9SVF9SQVRFX0lCU1NfQUc6CisgICAgICAgIHdkLT5iUmF0ZSA9IDB4ZjsKKyAgICAgICAgd2QtPmJSYXRlQmFzaWMgPSAweGY7CisgICAgICAgIHdkLT5nUmF0ZSA9IDB4ZmY7CisgICAgICAgIHdkLT5nUmF0ZUJhc2ljID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIHpmVXBkYXRlU3VwcG9ydFJhdGUoemRldl90KiBkZXYsIHU4X3QqIHJhdGVBcnJheSkKK3sKKyAgICB1OF90IGJSYXRlPTAsIGJSYXRlQmFzaWM9MCwgZ1JhdGU9MCwgZ1JhdGVCYXNpYz0wOworICAgIHU4X3QgbGVuZ3RoID0gcmF0ZUFycmF5WzFdOworICAgIHU4X3QgaSwgajsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGZvcihpPTI7IGk8bGVuZ3RoKzI7IGkrKykKKyAgICB7CisgICAgICAgIGZvcihqPTA7IGo8NDsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIChyYXRlQXJyYXlbaV0gJiAweDdmKSA9PSB6ZzExYlJhdGVUYmxbal0gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJSYXRlIHw9ICgxIDw8IGopOworICAgICAgICAgICAgICAgIGlmICggcmF0ZUFycmF5W2ldICYgMHg4MCApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBiUmF0ZUJhc2ljIHw9ICgxIDw8IGopOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggaiA9PSA0ICkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yKGo9MDsgajw4OyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCAocmF0ZUFycmF5W2ldICYgMHg3ZikgPT0gemcxMWdSYXRlVGJsW2pdICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdSYXRlIHw9ICgxIDw8IGopOworICAgICAgICAgICAgICAgICAgICBpZiAoIHJhdGVBcnJheVtpXSAmIDB4ODAgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnUmF0ZUJhc2ljIHw9ICgxIDw8IGopOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisKKyAgICB3ZC0+YlJhdGUgfD0gYlJhdGU7CisgICAgd2QtPmJSYXRlQmFzaWMgfD0gYlJhdGVCYXNpYzsKKyAgICB3ZC0+Z1JhdGUgfD0gZ1JhdGU7CisgICAgd2QtPmdSYXRlQmFzaWMgfD0gZ1JhdGVCYXNpYzsKK30KKwordThfdCB6ZklzR09ubHlNb2RlKHpkZXZfdCogZGV2LCB1MTZfdCAgZnJlcXVlbmN5LCB1OF90KiByYXRlQXJyYXkpCit7CisgICAgdThfdCBsZW5ndGggPSByYXRlQXJyYXlbMV07CisgICAgdThfdCBpLCBqOworCisgICAgaWYgKGZyZXF1ZW5jeSA8IDMwMDApIHsKKyAgICAgICAgZm9yIChpID0gMjsgaSA8IGxlbmd0aCsyOyBpKyspIHsKKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoICgocmF0ZUFycmF5W2ldICYgMHg3ZikgPT0gemcxMWdSYXRlVGJsW2pdKQorICAgICAgICAgICAgICAgICAgICAgJiYgKHJhdGVBcnJheVtpXSAmIDB4ODApICkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCB6ZkdhdGhlckJNb2RlKHpkZXZfdCogZGV2LCB1OF90KiByYXRlQXJyYXksIHU4X3QqIGV4dHJhdGVBcnJheSkKK3sKKyAgICB1OF90IGdhdGhlckJNb2RlW1pNX01BWF9TVVBQX1JBVEVTX0lFX1NJWkUgKyAyXTsKKyAgICB1OF90IGksIGosIGsgPSAwOworICAgIHU4X3QgbGVuZ3RoOworCisgICAgZ2F0aGVyQk1vZGVbMF0gPSBaTV9XTEFOX0VJRF9TVVBQT1JUX1JBVEU7CisgICAgZ2F0aGVyQk1vZGVbMV0gPSAwOworCisgICAgbGVuZ3RoID0gcmF0ZUFycmF5WzFdOworICAgIGZvciAoaSA9IDI7IGkgPCBsZW5ndGgrMjsgaSsrKSB7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKKyAgICAgICAgICAgIGlmICggKHJhdGVBcnJheVtpXSAmIDB4N2YpID09IHpnMTFiUmF0ZVRibFtqXSApIHsKKyAgICAgICAgICAgICAgICBnYXRoZXJCTW9kZVsyK2tdID0gcmF0ZUFycmF5W2ldOworCisgICAgICAgICAgICAgICAgZ2F0aGVyQk1vZGVbMV0rKzsKKyAgICAgICAgICAgICAgICBrKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsZW5ndGggPSBleHRyYXRlQXJyYXlbMV07CisgICAgZm9yIChpID0gMjsgaSA8IGxlbmd0aCsyOyBpKyspIHsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IDQ7IGorKykgeworICAgICAgICAgICAgaWYgKCAoZXh0cmF0ZUFycmF5W2ldICYgMHg3ZikgPT0gemcxMWJSYXRlVGJsW2pdICkgeworICAgICAgICAgICAgICAgIGdhdGhlckJNb2RlWzIra10gPSBleHRyYXRlQXJyYXlbaV07CisKKyAgICAgICAgICAgICAgICBnYXRoZXJCTW9kZVsxXSsrOworICAgICAgICAgICAgICAgIGsrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGV4dHJhdGVBcnJheVswXSA9IGV4dHJhdGVBcnJheVsxXSA9IDA7CisgICAgemZNZW1vcnlDb3B5KHJhdGVBcnJheSwgZ2F0aGVyQk1vZGUsIGdhdGhlckJNb2RlWzFdKzIpOworfQorCit1MTZfdCB6ZkdldFJhbmRvbU51bWJlcih6ZGV2X3QqIGRldiwgdTE2X3QgaW5pdFZhbHVlKQoreworI2lmIDAKKyAgICAvKiBDb21waWxlci9MaW5rZXIgZXJyb3Igb24gTGludXggKi8KKyAgICBpZiAoIGluaXRWYWx1ZSApCisgICAgeworICAgICAgICBzcmFuZChpbml0VmFsdWUpOworICAgIH0KKworICAgIHJldHVybiAoKHUxNl90KXJhbmQoKSk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKwordThfdCB6ZlBTRGV2aWNlU2xlZXAoemRldl90KiBkZXYpCit7CisgICAgLy96bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvKiBlbnRlciBQUyBtb2RlICovCisKKyAgICByZXR1cm4gMDsKK30KKwordThfdCB6Y09mZG1QaHlDcnRsVG9SYXRlW10gPQoreworICAgIC8qIDB4OD00OE0sIDB4OT0yNE0sIDB4YT0xMk0sIDB4Yj02TSwgMHhjPTU0TSwgMHhkPTM2TSwgMHhlPTE4TSwgMHhmPTlNICovCisgICAgICAgICAgICAxMCwgICAgICAgOCwgICAgICAgNiwgICAgICA0LCAgICAgIDExLCAgICAgICA5LCAgICAgICA3LCAgICAgIDUKK307CisKK3U4X3QgemZQaHlDdHJsVG9SYXRlKHUzMl90IHBoeUN0cmwpCit7CisgICAgdTMyX3QgbXQsIG1jcywgc2c7CisgICAgdThfdCByYXRlID0gMDsKKworICAgIG10ID0gcGh5Q3RybCAmIDB4MzsKKyAgICBtY3MgPSAocGh5Q3RybD4+MTgpICYgMHgzZjsKKyAgICBzZyA9IChwaHlDdHJsPj4zMSkgJiAweDE7CisKKyAgICBpZiAoKG10ID09IDApICYmIChtY3MgPD0zKSkKKyAgICB7CisgICAgICAgIHJhdGUgPSAodThfdCltY3M7CisgICAgfQorICAgIGVsc2UgaWYgKChtdCA9PSAxKSAmJiAobWNzID49IDB4OCkgJiYgKG1jcyA8PSAweGYpKQorICAgIHsKKyAgICAgICAgcmF0ZSA9IHpjT2ZkbVBoeUNydGxUb1JhdGVbbWNzLThdOworICAgIH0KKyAgICBlbHNlIGlmICgobXQgPT0gMikgJiYgKG1jcyA8PSAxNSkpCisgICAgeworICAgICAgICByYXRlID0gKHU4X3QpbWNzICsgMTI7CisgICAgICAgIGlmKHNnKSB7CisgICAgICAgICAgICBpZiAobWNzICE9IDcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmF0ZSA9ICh1OF90KW1jcyArIDEyICsgMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgLy9NQ1M3LVNHCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmF0ZSA9ICh1OF90KTMwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJhdGU7Cit9CisKKwordm9pZCB6ZkNvcmVFdmVudCh6ZGV2X3QqIGRldiwgdTE2X3QgZXZlbnQsIHU4X3QqIHJzcCkKK3sKKyAgICB1MTZfdCBpOworICAgIHpidWZfdCogcHNCdWY7CisgICAgdThfdCBtb3JlRGF0YTsKKyAgICB1OF90IHZhcCA9IDA7CisgICAgdThfdCBwZWVySWR4OworICAgIHM4X3QgcmVzOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisKKyAgICBpZiAoZXZlbnQgPT0gMCkgLy9CZWFjb24gRXZlbnQKKyAgICB7CisgICAgICAgIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfQVAgKQorICAgICAgICB7CisgICAgICAgICAgICB6ZkFwU2VuZEJlYWNvbihkZXYpOworCisgICAgICAgICAgICBpZiAod2QtPkN1cnJlbnREdGltQ291bnQgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBUT0RPIDogU2VuZCBxdWV1ZWQgYnJvYWRjYXN0IGZyYW1lcyBhdCBCQy9NQyBldmVudCAqLworICAgICAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwc0J1ZiA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIG1vcmVEYXRhID0gMDsKKyAgICAgICAgICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdkLT5hcC5iY21jVGFpbFt2YXBdICE9IHdkLT5hcC5iY21jSGVhZFt2YXBdKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL3ptX21zZzBfbW0oWk1fTFZfMCwgIlNlbmQgQkNNQyBmcmFtZXMiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBzQnVmID0gd2QtPmFwLmJjbWNBcnJheVt2YXBdW3dkLT5hcC5iY21jSGVhZFt2YXBdXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5hcC5iY21jSGVhZFt2YXBdID0gKHdkLT5hcC5iY21jSGVhZFt2YXBdICsgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAoWk1fQkNNQ19BUlJBWV9TSVpFIC0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2QtPmFwLmJjbWNUYWlsW3ZhcF0gIT0gd2QtPmFwLmJjbWNIZWFkW3ZhcF0pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZURhdGEgPSAweDIwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICAgICAgICAgIGlmIChwc0J1ZiAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUT0RPIDogY29uZmlnIG1vcmVEYXRhIGJpdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgemZUeFNlbmRFdGgoZGV2LCBwc0J1ZiwgMCwgWk1fRVhURVJOQUxfQUxMT0NfQlVGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlRGF0YSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IHdoaWxlKHBzQnVmICE9IE5VTEwpOworCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBTVEEgbW9kZSAqLworICAgICAgICAgICAgaWYgKCB3ZC0+c3RhLnBvd2VyU2F2ZU1vZGUgPiBaTV9TVEFfUFNfTk9ORSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogc2VuZCBxdWV1ZWQgcGFja2V0cyAqLworICAgICAgICAgICAgICAgIGZvcihpPTA7IGk8d2QtPnN0YS5zdGFQU0RhdGFDb3VudDsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgemZUeFNlbmRFdGgoZGV2LCB3ZC0+c3RhLnN0YVBTRGF0YVF1ZXVlW2ldLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTV9FWFRFUk5BTF9BTExPQ19CVUYsIDApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHdkLT5zdGEuc3RhUFNEYXRhQ291bnQgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lCU1MgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmU3RhU2VuZEJlYWNvbihkZXYpOworICAgICAgICAgICAgICAgIHdkLT5zdGEuaWJzc0F0aW1UaW1lciA9IFpNX0JJVF8xNSB8IHdkLT5zdGEuYXRpbVdpbmRvdzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgemZQb3dlclNhdmluZ01nclByZVRCVFRJbnRlcnJ1cHQoZGV2KTsKKyAgICAgICAgfQorICAgIH0gLy9pZiAoZXZlbnQgPT0gMCkgLy9CZWFjb24gRXZlbnQKKyAgICBlbHNlIGlmIChldmVudCA9PSAxKSAvL1JldHJ5IGNvbXBsZXRlZCBldmVudAorICAgIHsKKyAgICAgICAgdTMyX3QgcmV0cnlSYXRlOworCisgICAgICAgIHJldHJ5UmF0ZSA9ICh1MzJfdCkocnNwWzZdKSArICgoKHUzMl90KShyc3BbN10pKTw8OCkKKyAgICAgICAgICAgICAgICArICgoKHUzMl90KShyc3BbOF0pKTw8MTYpICsgKCgodTMyX3QpKHJzcFs5XSkpPDwyNCk7CisgICAgICAgIC8qIERlZ3JhZGUgVHggUmF0ZSAqLworICAgICAgICBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApCisgICAgICAgIHsKKyAgICAgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICBpZiAoKGk9emZBcEZpbmRTdGEoZGV2LCAodTE2X3QqKXJzcCkpICE9IDB4ZmZmZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6ZlJhdGVDdHJsVHhGYWlsRXZlbnQoZGV2LCAmd2QtPmFwLnN0YVRhYmxlW2ldLnJjQ2VsbCwgMCwodTMyX3QpemZQaHlDdHJsVG9SYXRlKHJldHJ5UmF0ZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICByZXMgPSB6ZlN0YUZpbmRPcHBvc2l0ZUJ5TUFDQWRkcihkZXYsICh1MTZfdCopcnNwLCAmcGVlcklkeCk7CisgICAgICAgICAgICBpZiAoIHJlcyA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6ZlJhdGVDdHJsVHhGYWlsRXZlbnQoZGV2LCAmd2QtPnN0YS5vcHBvc2l0ZUluZm9bcGVlcklkeF0ucmNDZWxsLCAwLCh1MzJfdCl6ZlBoeUN0cmxUb1JhdGUocmV0cnlSYXRlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICB9CisgICAgfSAvL2Vsc2UgaWYgKGV2ZW50ID09IDEpIC8vUmV0cnkgY29tcGxldGVkIGV2ZW50CisgICAgZWxzZSBpZiAoZXZlbnQgPT0gMikgLy9UeCBGYWlsIGV2ZW50CisgICAgeworICAgICAgICB1MzJfdCByZXRyeVJhdGU7CisKKyAgICAgICAgcmV0cnlSYXRlID0gKHUzMl90KShyc3BbNl0pICsgKCgodTMyX3QpKHJzcFs3XSkpPDw4KQorICAgICAgICAgICAgICAgICsgKCgodTMyX3QpKHJzcFs4XSkpPDwxNikgKyAoKCh1MzJfdCkocnNwWzldKSk8PDI0KTsKKworICAgICAgICAvKiBEZWdyYWRlIFR4IFJhdGUgKi8KKyAgICAgICAgaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKQorICAgICAgICB7CisgICAgICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgaWYgKChpPXpmQXBGaW5kU3RhKGRldiwgKHUxNl90Kilyc3ApKSAhPSAweGZmZmYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZSYXRlQ3RybFR4RmFpbEV2ZW50KGRldiwgJndkLT5hcC5zdGFUYWJsZVtpXS5yY0NlbGwsIDAsKHUzMl90KXpmUGh5Q3RybFRvUmF0ZShyZXRyeVJhdGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgICAgIHpmQXBTZW5kRmFpbHVyZShkZXYsIHJzcCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgcmVzID0gemZTdGFGaW5kT3Bwb3NpdGVCeU1BQ0FkZHIoZGV2LCAodTE2X3QqKXJzcCwgJnBlZXJJZHgpOworICAgICAgICAgICAgaWYgKCByZXMgPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZSYXRlQ3RybFR4RmFpbEV2ZW50KGRldiwgJndkLT5zdGEub3Bwb3NpdGVJbmZvW3BlZXJJZHhdLnJjQ2VsbCwgMCwodTMyX3QpemZQaHlDdHJsVG9SYXRlKHJldHJ5UmF0ZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgfQorICAgIH0gLy9lbHNlIGlmIChldmVudCA9PSAyKSAvL1R4IEZhaWwgZXZlbnQKKyAgICBlbHNlIGlmIChldmVudCA9PSAzKSAvL1R4IENvbXAgZXZlbnQKKyAgICB7CisgICAgICAgIHUzMl90IHJldHJ5UmF0ZTsKKworICAgICAgICByZXRyeVJhdGUgPSAodTMyX3QpKHJzcFs2XSkgKyAoKCh1MzJfdCkocnNwWzddKSk8PDgpCisgICAgICAgICAgICAgICAgKyAoKCh1MzJfdCkocnNwWzhdKSk8PDE2KSArICgoKHUzMl90KShyc3BbOV0pKTw8MjQpOworCisgICAgICAgIC8qIFRPRE8gOiBUeCBjb21wbGV0ZWQsIHVzZWQgZm9yIHJhdGUgY29udHJvbCBwcm9iaW5nICovCisgICAgICAgIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCkKKyAgICAgICAgeworICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIGlmICgoaT16ZkFwRmluZFN0YShkZXYsICh1MTZfdCopcnNwKSkgIT0gMHhmZmZmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmUmF0ZUN0cmxUeFN1Y2Nlc3NFdmVudChkZXYsICZ3ZC0+YXAuc3RhVGFibGVbaV0ucmNDZWxsLCB6ZlBoeUN0cmxUb1JhdGUocmV0cnlSYXRlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIHJlcyA9IHpmU3RhRmluZE9wcG9zaXRlQnlNQUNBZGRyKGRldiwgKHUxNl90Kilyc3AsICZwZWVySWR4KTsKKyAgICAgICAgICAgIGlmICggcmVzID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmUmF0ZUN0cmxUeFN1Y2Nlc3NFdmVudChkZXYsICZ3ZC0+c3RhLm9wcG9zaXRlSW5mb1twZWVySWR4XS5yY0NlbGwsIHpmUGh5Q3RybFRvUmF0ZShyZXRyeVJhdGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIH0KKyAgICB9IC8vZWxzZSBpZiAoZXZlbnQgPT0gMykgLy9UeCBDb21wIGV2ZW50CisgICAgZWxzZSBpZiAoZXZlbnQgPT0gNCkgLy9CQSBmYWlsZWQgY291bnQKKyAgICB7CisgICAgICAgIHUzMl90IGZhaWw7CisgICAgICAgIHUzMl90IHJhdGU7CisgICAgICAgIHBlZXJJZHggPSAwOworCisgICAgICAgIGZhaWw9KCh1MzJfdCopcnNwKVswXSAmIDB4RkZGRjsKKyAgICAgICAgcmF0ZT0oKHUzMl90Kilyc3ApWzBdID4+IDE2OworCisgICAgICAgIGlmIChyYXRlID4gMTUpIHsKKyAgICAgICAgICAgIHJhdGUgPSAocmF0ZSAmIDB4RikgKyAxMiArIDI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByYXRlID0gcmF0ZSArIDEyOworICAgICAgICB9CisKKyAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgemZSYXRlQ3RybFR4RmFpbEV2ZW50KGRldiwgJndkLT5zdGEub3Bwb3NpdGVJbmZvW3BlZXJJZHhdLnJjQ2VsbCwgKHU4X3QpcmF0ZSwgZmFpbCk7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgfQorfQorCit2b2lkIHpmQmVhY29uQ2ZnSW50ZXJydXB0KHpkZXZfdCogZGV2LCB1OF90KiByc3ApCit7CisgICAgdTMyX3QgdHhCZWFjb25Db3VudGVyOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfSUJTUyApCisgICAgeworICAgICAgICB0eEJlYWNvbkNvdW50ZXIgPSAqKCh1MzJfdCAqKXJzcCk7CisgICAgICAgIGlmICggd2QtPnN0YS5iZWFjb25UeENudCAhPSB0eEJlYWNvbkNvdW50ZXIgKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+c3RhLnR4QmVhY29uSW5kID0gMTsKKworICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIHdkLT50aWNrSWJzc1NlbmRCZWFjb24gPSAwOworICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHdkLT5zdGEudHhCZWFjb25JbmQgPSAwOworICAgICAgICB9CisKKyNpZmRlZiBaTV9FTkFCTEVfSUJTU19ERUxBWUVEX0pPSU5fSU5ESUNBVElPTgorICAgICAgICBpZiAoIHdkLT5zdGEudHhCZWFjb25JbmQgJiYgd2QtPnN0YS5pYnNzRGVsYXllZEluZCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3ZC0+emZjYklic3NQYXJ0bmVyTm90aWZ5ICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnpmY2JJYnNzUGFydG5lck5vdGlmeShkZXYsIDEsICZ3ZC0+c3RhLmlic3NEZWxheWVkSW5kRXZlbnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3ZC0+c3RhLmlic3NEZWxheWVkSW5kID0gMDsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgd2QtPnN0YS5iZWFjb25UeENudCA9IHR4QmVhY29uQ291bnRlcjsKKworICAgICAgICAvLyBOZWVkIHRvIGNoZWNrIGlmIHRoZSB0aW1lIGlzIGV4cGlyZWQgYWZ0ZXIgQVRJTSB3aW5kb3c/PworCisgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYnVmZmVyZWQgYW55IGRhdGEgZm9yIHRob3NlIHN0YXRpb25zIHRoYXQgYXJlIHNsZWVwaW5nCisgICAgICAgIC8vIElmIGl0J3MgdHJ1ZSwgdGhlbiB0cmFuc21pdHRpbmcgQVRJTSBwa3QgdG8gbm90aWZ5IHRoZW0KKworI2lmZGVmIFpNX0VOQUJMRV9JQlNTX1BTCisgICAgICAgIC8vIFRPRE86IE5lZWQgdG8gY2hlY2sgaWYgdGhlIHN0YXRpb24gcmVjZWl2ZSBvdXIgQVRJTSBwa3Q/Pz8KKyAgICAgICAgemZTdGFJYnNzUFNTZW5kKGRldik7CisKKyAgICAgICAgaWYgKCB3ZC0+c3RhLmF0aW1XaW5kb3cgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIHdvbid0IHJlY2VpdmUgdGhlIGVuZCBvZiBBVElNIGlzciBzbyB3ZSBmYWtlIGl0CisgICAgICAgICAgICB6ZlBvd2VyU2F2aW5nTWdyQXRpbVdpbkV4cGlyZWQoZGV2KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorfQorCit2b2lkIHpmRW5kT2ZBdGltV2luZG93SW50ZXJydXB0KHpkZXZfdCogZGV2KQoreworI2lmZGVmIFpNX0VOQUJMRV9JQlNTX1BTCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYgKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JQlNTICkKKyAgICB7CisgICAgICAgIC8vIFRyYW5zbWl0IGFueSBxdWV1ZWQgcGt0IGZvciB0aGUgc3RhdGlvbnMhIQorICAgICAgICB6ZlBvd2VyU2F2aW5nTWdyQXRpbVdpbkV4cGlyZWQoZGV2KTsKKyAgICB9CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jaW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2Npbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY4NTNjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jaW5pdC5jCkBAIC0wLDAgKzEsMTkxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE1vZHVsZSBOYW1lIDogaW5pdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQWJzdHJhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBUaGlzIG1vZHVsZSBjb250YWlucyBpbml0IGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTk9URVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImNwcmVjb21wLmgiCisjaW5jbHVkZSAiLi4vaGFsL2hwcmVnLmgiCisKK2V4dGVybiBjb25zdCB1OF90IHpjVXBUb0FjWzhdOworCit1MTZfdCB6Y0luZGV4dG9SYXRlQkdbMTZdID0gezEwMDAsIDIwMDAsIDU1MDAsIDExMDAwLCAwLCAwLCAwLCAwLCA0ODAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDAwMCwgMTIwMDAsIDYwMDAsIDU0MDAwLCAzNjAwMCwgMTgwMDAsIDkwMDB9OwordTMyX3QgemNJbmRleHRvUmF0ZU4yMExbMTZdID0gezY1MDAsIDEzMDAwLCAxOTUwMCwgMjYwMDAsIDM5MDAwLCA1MjAwMCwgNTg1MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NTAwMCwgMTMwMDAsIDI2MDAwLCAzOTAwMCwgNTIwMDAsIDc4MDAwLCAxMDQwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTcwMDAsIDEzMDAwMH07Cit1MzJfdCB6Y0luZGV4dG9SYXRlTjIwU1sxNl0gPSB7NzIwMCwgMTQ0MDAsIDIxNzAwLCAyODkwMCwgNDMzMDAsIDU3ODAwLCA2NTAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcyMjAwLCAxNDQwMCwgMjg5MDAsIDQzMzAwLCA1NzgwMCwgODY3MDAsIDExNTYwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzMDAwMCwgMTQ0NDAwfTsKK3UzMl90IHpjSW5kZXh0b1JhdGVONDBMWzE2XSA9IHsxMzUwMCwgMjcwMDAsIDQwNTAwLCA1NDAwMCwgODEwMDAsIDEwODAwMCwgMTIxNTAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM1MDAwLCAyNzAwMCwgNTQwMDAsIDgxMDAwLCAxMDgwMDAsIDE2MjAwMCwgMjE2MDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQzMDAwLCAyNzAwMDB9OwordTMyX3QgemNJbmRleHRvUmF0ZU40MFNbMTZdID0gezE1MDAwLCAzMDAwMCwgNDUwMDAsIDYwMDAwLCA5MDAwMCwgMTIwMDAwLCAxMzUwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTAwMDAsIDMwMDAwLCA2MDAwMCwgOTAwMDAsIDEyMDAwMCwgMTgwMDAwLCAyNDAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNzAwMDAsIDMwMDAwMH07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZlR4R2VuV2xhbkhlYWRlciAgICAgICAgICAgKi8KKy8qICAgICAgR2VuZXJhdGUgV0xBTiBNQUMgaGVhZGVyIGFuZCBMTEMgaGVhZGVyLiAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZiA6IGJ1ZmZlciBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBpZCA6IEluZGV4IG9mIFR4RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgcG9ydCA6IFdMQU4gcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgbGVuZ3RoIG9mIHJlbW92ZWQgRXRoZXJuZXQgaGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiAgICAgICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDUuNSAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90IHpmVHhHZW5XbGFuSGVhZGVyKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QqIGhlYWRlciwgdTE2X3Qgc2VxLAorICAgICAgICAgICAgICAgICAgICAgICAgdThfdCBmbGFnLCB1MTZfdCBwbHVzTGVuLCB1MTZfdCBtaW51c0xlbiwgdTE2X3QgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxNl90KiBkYSwgdTE2X3QqIHNhLCB1OF90IHVwLCB1MTZfdCAqbWljTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgdTE2X3QqIHNuYXAsIHUxNl90IHNuYXBMZW4sIHN0cnVjdCBhZ2dDb250cm9sICphZ2dDb250cm9sKQoreworCisgICAgdTE2X3QgbGVuOworICAgIHUxNl90IG1hY0N0cmw7CisgICAgdTMyX3QgcGh5Q3RybDsKKyAgICB1MTZfdCBobGVuID0gMTY7CisgICAgdTE2X3QgaWN2TGVuID0gMDsKKyAgICB1MTZfdCB3ZHNQb3J0SWQ7CisgICAgdTE2X3QgdmFwID0gMDsKKyAgICB1MTZfdCBtY3MgPSAwOworICAgIHUxNl90IG10ID0gMDsKKyAgICB1OF90ICBxb3NUeXBlOworICAgIHU4X3QgIGIxLCBiMjsKKyAgICB1MTZfdCB3ZHNQb3J0OworICAgIHU4X3QgIGVuY0V4ZW1wdGlvbkFjdGlvblR5cGU7CisgICAgdTE2X3QgcmF0ZVByb2JpbmdGbGFnID0gMDsKKyAgICB1OF90ICB0a2lwRnJhbWVPZmZzZXQgPSAwOworCisjaWZkZWYgWk1fRU5BQkxFX0lCU1NfV1BBMlBTSworICAgIHU4X3QgICAgcmVzLCBwZWVySWR4OworICAgIHU4X3QgICAgdXNlcklkeD0wOworICAgIHUxNl90ICAgKml2MTY7CisgICAgdTMyX3QgICAqaXYzMjsKKyNlbmRpZgorCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAvKiBHZW5lcmF0ZSBXTEFOIGhlYWRlciAqLworICAgIC8qIEZyYW1lIGNvbnRyb2wgKi8KKyAgICBoZWFkZXJbNF0gPSAweDAwMDggfCAoZmxhZzw8OCk7CisgICAgLyogRHVyYXRpb24gKi8KKyAgICBoZWFkZXJbNV0gPSAweDAwMDA7CisKKyAgICBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUpCisgICAgeworICAgICAgICAvKiBUb0RTIGJpdCAqLworICAgICAgICBoZWFkZXJbNF0gfD0gMHgwMTAwOworCisgICAgICAgIC8qU29tZXRpbWVzIHdlIHdha2UgdXAgdG8gdHgvcnggYnV0IEFQIHN0aWxsIHRoaW5rIHdlIGFyZSBzbGVlcGluZywgc28gc3RpbGwgbmVlZCB0byBzZXQgdGhpcyBiaXQqLworICAgICAgICBpZiAoIHpmUG93ZXJTYXZpbmdNZ3JJc1NsZWVwaW5nKGRldikgfHwgd2QtPnN0YS5wc01nci50ZW1wV2FrZVVwID09IDEgKQorICAgICAgICB7CisgICAgICAgICAgICBoZWFkZXJbNF0gfD0gMHgxMDAwOworICAgICAgICB9CisKKyAgICAgICAgLyogQWRkcmVzcyAxID0gQlNTSUQgKi8KKyAgICAgICAgaGVhZGVyWzZdID0gd2QtPnN0YS5ic3NpZFswXTsKKyAgICAgICAgaGVhZGVyWzddID0gd2QtPnN0YS5ic3NpZFsxXTsKKyAgICAgICAgaGVhZGVyWzhdID0gd2QtPnN0YS5ic3NpZFsyXTsKKyAgICAgICAgLyogQWRkcmVzcyAzID0gREEgKi8KKyAgICAgICAgaGVhZGVyWzEyXSA9IGRhWzBdOworICAgICAgICBoZWFkZXJbMTNdID0gZGFbMV07CisgICAgICAgIGhlYWRlclsxNF0gPSBkYVsyXTsKKyAgICB9CisgICAgZWxzZSBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfUFNFVURPKQorICAgIHsKKyAgICAgICAgLyogQWRkcmVzcyAxID0gREEgKi8KKyAgICAgICAgaGVhZGVyWzZdID0gZGFbMF07CisgICAgICAgIGhlYWRlcls3XSA9IGRhWzFdOworICAgICAgICBoZWFkZXJbOF0gPSBkYVsyXTsKKyAgICAgICAgLyogQWRkcmVzcyAzID0gMDA6MDA6MDA6MDA6MDA6MDAgKi8KKyAgICAgICAgaGVhZGVyWzEyXSA9IDA7CisgICAgICAgIGhlYWRlclsxM10gPSAwOworICAgICAgICBoZWFkZXJbMTRdID0gMDsKKworICAgICAgICAvKiBQU0VVRE8gdGVzdCA6IFdEUyAqLworICAgICAgICBpZiAod2QtPmVuYWJsZVdEUykKKyAgICAgICAgeworICAgICAgICAgICAgLyogVG9EUyBhbmQgRnJvbURTIGJpdCAqLworICAgICAgICAgICAgaGVhZGVyWzRdIHw9IDB4MDMwMDsKKworICAgICAgICAgICAgLyogQWRkcmVzcyA0ID0gU0EgKi8KKyAgICAgICAgICAgIGhlYWRlclsxNl0gPSAwOworICAgICAgICAgICAgaGVhZGVyWzE3XSA9IDA7CisgICAgICAgICAgICBoZWFkZXJbMThdID0gMDsKKworICAgICAgICAgICAgaGxlbiA9IDE5OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lCU1MpCisgICAgeworICAgICAgICAvKiBBZGRyZXNzIDEgPSBEQSAqLworICAgICAgICBoZWFkZXJbNl0gPSBkYVswXTsKKyAgICAgICAgaGVhZGVyWzddID0gZGFbMV07CisgICAgICAgIGhlYWRlcls4XSA9IGRhWzJdOworICAgICAgICAvKiBBZGRyZXNzIDMgPSBCU1NJRCAqLworICAgICAgICBoZWFkZXJbMTJdID0gd2QtPnN0YS5ic3NpZFswXTsKKyAgICAgICAgaGVhZGVyWzEzXSA9IHdkLT5zdGEuYnNzaWRbMV07CisgICAgICAgIGhlYWRlclsxNF0gPSB3ZC0+c3RhLmJzc2lkWzJdOworCisjaWZkZWYgWk1fRU5BQkxFX0lCU1NfV1BBMlBTSworICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICByZXMgPSB6ZlN0YUZpbmRPcHBvc2l0ZUJ5TUFDQWRkcihkZXYsIGRhLCAmcGVlcklkeCk7CisgICAgICAgIGlmKHJlcyA9PSAwKSAvLyBGaW5kIG9wcG9zaXRlIGluIG91ciBPcHBvc2l0ZUluZm8gU3RydWN0dXJlICEKKyAgICAgICAgeworICAgICAgICAgICAgdXNlcklkeCA9IHBlZXJJZHg7CisgICAgICAgIH0KKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCkKKyAgICB7CisgICAgICAgIGlmIChwb3J0IDwgMHgyMCkKKyAgICAgICAgLyogQVAgbW9kZSAqLworICAgICAgICB7CisgICAgICAgICAgICAvKiBGcm9tRFMgYml0ICovCisgICAgICAgICAgICBoZWFkZXJbNF0gfD0gMHgwMjAwOworCisgICAgICAgICAgICAvKiBBZGRyZXNzIDEgPSBEQSAqLworICAgICAgICAgICAgaGVhZGVyWzZdID0gZGFbMF07CisgICAgICAgICAgICBoZWFkZXJbN10gPSBkYVsxXTsKKyAgICAgICAgICAgIGhlYWRlcls4XSA9IGRhWzJdOworICAgICAgICAgICAgLyogQWRkcmVzcyAzID0gU0EgKi8KKyAgICAgICAgICAgIGhlYWRlclsxMl0gPSBzYVswXTsKKyAgICAgICAgICAgIGhlYWRlclsxM10gPSBzYVsxXTsKKyAgICAgICAgICAgIGhlYWRlclsxNF0gPSBzYVsyXTsKKworICAgICAgICAgICAgaWYgKHBvcnQgPCBaTV9NQVhfQVBfU1VQUE9SVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXAgPSBwb3J0OworICAgICAgICAgICAgICAgIGhlYWRlclsxNF0gKz0gKHZhcDw8OCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAvKiBXRFMgcG9ydCAqLworICAgICAgICB7CisgICAgICAgICAgICAvKiBUb0RTIGFuZCBGcm9tRFMgYml0ICovCisgICAgICAgICAgICBoZWFkZXJbNF0gfD0gMHgwMzAwOworCisgICAgICAgICAgICB3ZHNQb3J0SWQgPSBwb3J0IC0gMHgyMDsKKworICAgICAgICAgICAgLyogQWRkcmVzcyAxID0gUkEgKi8KKyAgICAgICAgICAgIGhlYWRlcls2XSA9IHdkLT5hcC53ZHMubWFjQWRkclt3ZHNQb3J0SWRdWzBdOworICAgICAgICAgICAgaGVhZGVyWzddID0gd2QtPmFwLndkcy5tYWNBZGRyW3dkc1BvcnRJZF1bMV07CisgICAgICAgICAgICBoZWFkZXJbOF0gPSB3ZC0+YXAud2RzLm1hY0FkZHJbd2RzUG9ydElkXVsyXTsKKyAgICAgICAgICAgIC8qIEFkZHJlc3MgMyA9IERBICovCisgICAgICAgICAgICBoZWFkZXJbMTJdID0gZGFbMF07CisgICAgICAgICAgICBoZWFkZXJbMTNdID0gZGFbMV07CisgICAgICAgICAgICBoZWFkZXJbMTRdID0gZGFbMl07CisgICAgICAgICAgICAvKiBBZGRyZXNzIDQgPSBTQSAqLworICAgICAgICAgICAgaGVhZGVyWzE2XSA9IHNhWzBdOworICAgICAgICAgICAgaGVhZGVyWzE3XSA9IHNhWzFdOworICAgICAgICAgICAgaGVhZGVyWzE4XSA9IHNhWzJdOworCisgICAgICAgICAgICBobGVuID0gMTk7CisgICAgICAgIH0KKyAgICB9IC8qIGVsc2UgaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKSAqLworCisgICAgLyogQWRkcmVzcyAyID0gVEEgKi8KKyAgICBoZWFkZXJbOV0gPSB3ZC0+bWFjQWRkclswXTsKKyAgICBoZWFkZXJbMTBdID0gd2QtPm1hY0FkZHJbMV07CisjaWZkZWYgWk1fVkFQTU9ERV9NVUxUSUxFX1NTSUQKKyAgICBoZWFkZXJbMTFdID0gd2QtPm1hY0FkZHJbMl07IC8vTXVsdGlwbGUgU1NJRAorI2Vsc2UKKyAgICBoZWFkZXJbMTFdID0gd2QtPm1hY0FkZHJbMl0gKyAodmFwPDw4KTsgLy9WQVAKKyNlbmRpZgorCisgICAgaWYgKCAod2QtPndsYW5Nb2RlID09IFpNX01PREVfSUJTUykgJiYgKHdkLT5YTGlua01vZGUpICkKKyAgICB7CisgICAgICAgIGhlYWRlcls5XSAgPSBzYVswXTsKKyAgICAgICAgaGVhZGVyWzEwXSA9IHNhWzFdOworICAgICAgICBoZWFkZXJbMTFdID0gc2FbMl07CisgICAgfQorCisgICAgLyogU2VxdWVuY2UgQ29udHJvbCAqLworICAgIGhlYWRlclsxNV0gPSBzZXE7CisKKworICAgIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCkKKyAgICB7CisgICAgICAgIHpmQXBHZXRTdGFUeFJhdGVBbmRRb3NUeXBlKGRldiwgZGEsICZwaHlDdHJsLCAmcW9zVHlwZSwgJnJhdGVQcm9iaW5nRmxhZyk7CisgICAgICAgIG10ID0gKHUxNl90KShwaHlDdHJsICYgMHgzKTsKKyAgICAgICAgbWNzID0gKHUxNl90KSgocGh5Q3RybCA+PiAxNikgJiAweDNmKTsKKyNpZiAxCisgICAgICAgIC8vemZBcEdldFN0YVFvc1R5cGUoZGV2LCBkYSwgJnFvc1R5cGUpOworCisgICAgICAgIC8qIGlmIERBID09IFdNRSBTVEEgKi8KKyAgICAgICAgaWYgKHFvc1R5cGUgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogUW9TIGRhdGEgKi8KKyAgICAgICAgICAgIGhlYWRlcls0XSB8PSAweDAwODA7CisKKyAgICAgICAgICAgIC8qIFFvUyBDb250cm9sICovCisgICAgICAgICAgICBoZWFkZXJbaGxlbl0gPSB1cDsKKyAgICAgICAgICAgIGhsZW4gKz0gMTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisjaWYgMAorICAgIC8vQUdHIFRlc3QgQ29kZQorICAgIGlmIChoZWFkZXJbNl0gPT0gMHg4MDAwKQorICAgIHsKKyAgICAgICAgLyogUW9TIGRhdGEgKi8KKyAgICAgICAgaGVhZGVyWzRdIHw9IDB4MDA4MDsKKworICAgICAgICAvKiBRb1MgQ29udHJvbCAqLworICAgICAgICBoZWFkZXJbaGxlbl0gPSAwOworICAgICAgICBobGVuICs9IDE7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApIHsKKyAgICAgICAgLyogVG9kbzogcmF0ZSBjb250cm9sIGhlcmUgZm9yIHFvcyBmaWVsZCAqLworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogUmF0ZSBjb250cm9sICovCisgICAgICAgIHpmU3RhR2V0VHhSYXRlKGRldiwgZGEsICZwaHlDdHJsLCAmcmF0ZVByb2JpbmdGbGFnKTsKKyAgICAgICAgbXQgPSAodTE2X3QpKHBoeUN0cmwgJiAweDMpOworICAgICAgICBtY3MgPSAodTE2X3QpKChwaHlDdHJsID4+IDE2KSAmIDB4M2YpOworICAgIH0KKworICAgIGlmICh3ZC0+dHhNQ1MgIT0gMHhmZikKKyAgICB7CisgICAgICAgIC8qIGZpeGVkIHJhdGUgKi8KKwkgICAgcGh5Q3RybCA9ICgodTMyX3Qpd2QtPnR4TUNTPDwxNikgKyB3ZC0+dHhNVDsKKyAgICAgICAgbWNzID0gd2QtPnR4TUNTOworICAgICAgICBtdCA9IHdkLT50eE1UOworICAgIH0KKworICAgIGlmICh3ZC0+ZW5hYmxlQWdncmVnYXRpb24pCisgICAgeworICAgICAgICAvKiBmb3JjZSBlbmFibGUgYWdncmVnYXRpb24gKi8KKyAgICAgICAgaWYgKHdkLT5lbmFibGVBZ2dyZWdhdGlvbj09MiAmJiAhKGhlYWRlcls2XSYweDEpKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBRb1MgZGF0YSAqLworICAgICAgICAgICAgaGVhZGVyWzRdIHw9IDB4MDA4MDsKKworICAgICAgICAgICAgLyogUW9TIENvbnRyb2wgKi8KKyAgICAgICAgICAgIGhlYWRlcltobGVuXSA9IDA7CisgICAgICAgICAgICBobGVuICs9IDE7CisgICAgICAgIH0KKyAgICAgICAgLyogaWYgd2QtPmVuYWJsZUFnZ3JlZ2F0aW9uPTEgPT4gZm9yY2UgZGlzYWJsZSAqLworICAgICAgICAvKiBpZiB3ZC0+ZW5hYmxlQWdncmVnYXRpb249MCA9PiBhdXRvICovCisgICAgfQorCisjaWZkZWYgWk1fRU5BQkxFX0FHR1JFR0FUSU9OCisgICAgLyoKKyAgICAgKiBhZ2dyZWdhdGlvbiBjb250cm9sCisgICAgICovCisKKyAgICAvKgorICAgICAqIFFvUyBkYXRhCisgICAgICovCisgICAgaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKSB7CisgICAgICAgIGlmIChhZ2dDb250cm9sICYmIG10ID09IDIpIHsKKyAgICAgICAgICAgIGlmICh3ZC0+ZW5hYmxlQWdncmVnYXRpb249PTAgJiYgIShoZWFkZXJbNl0mMHgxKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBoZWFkZXJbNF0gfD0gMHgwMDgwOworCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBRb1MgQ29udHJvbAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGhlYWRlcltobGVuXSA9IDA7CisgICAgICAgICAgICAgICAgaGxlbiArPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICAvLyBNU0RVIExlbmd0aAorICAgIGxlbiA9IHpmd0J1ZkdldFNpemUoZGV2LCBidWYpOworCisgICAgLyogR2VuZXJhdGUgY29udHJvbCBzZXR0aW5nICovCisgICAgLyogQmFja29mZiwgTm9uLUJ1cnN0IGFuZCBoYXJkd2FyZSBkdXJhdGlvbiAqLworICAgIG1hY0N0cmwgPSAweDIwODsKKworICAgIC8qIEFDSyAqLworICAgIGlmICgoaGVhZGVyWzZdICYgMHgxKSA9PSAweDEpCisgICAgeworICAgICAgICAvKiBtdWx0aWNhc3QgZnJhbWUgOiBTZXQgTk8tQUNLIGJpdCAqLworICAgICAgICBtYWNDdHJsIHw9IDB4NDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogdW5pY2FzdCBmcmFtZSAqLworICAgICNpZiAwCisgICAgICAgIC8vIEVuYWJsZSBSVFMgYWNjb3JkaW5nIHRvIE1QRFUgTGVuZ3RocyAoIG5vdCBNU0RVIExlbmd0aHMgKQorICAgICAgICBpZiAobGVuID49IHdkLT5ydHNUaHJlc2hvbGQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEVuYWJsZSBSVFMgKi8KKyAgICAgICAgICAgIG1hY0N0cmwgfD0gMTsKKyAgICAgICAgfQorICAgICNlbmRpZgorICAgIH0KKyAgICAvKiBWQVAgdGVzdCBjb2RlICovCisgICAgLy9tYWNDdHJsIHw9IDB4NDsKKworICAgIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCkKKyAgICB7CisgICAgICAgIHU4X3QgZW5jcnlUeXBlOworICAgICAgICB1MTZfdCBpdjE2OworICAgICAgICB1MzJfdCBpdjMyOworCisgICAgICAgIC8qIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIG11bHRpY2FzdCBmcmFtZSAqLworICAgICAgICBpZiAoKGhlYWRlcls2XSAmIDB4MSkgPT0gMHgxKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBtdWx0aWNhc3QgZnJhbWUgKi8KKyAgICAgICAgICAgIGlmICh3ZC0+YXAuZW5jcnlNb2RlW3ZhcF0gPT0gWk1fVEtJUCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+YXAuaXYxNlt2YXBdKys7CisKKyAgICAgICAgICAgICAgICBpZih3ZC0+YXAuaXYxNlt2YXBdID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3ZC0+YXAuaXYzMlt2YXBdKys7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYjEgPSAodThfdCkgKHdkLT5hcC5pdjE2W3ZhcF0gPj4gOCk7CisgICAgICAgICAgICAgICAgYjIgPSAoYjEgfCAweDIwKSAmIDB4N2Y7CisgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW5dID0gKCh1MTZfdCliMiA8PCA4KSArIGIxOworICAgICAgICAgICAgICAgIGIxID0gKHU4X3QpIHdkLT5hcC5pdjE2W3ZhcF07CisgICAgICAgICAgICAgICAgYjIgPSAweDIwIHwgKHdkLT5hcC5iY0tleUluZGV4W3ZhcF0gPDwgNik7CisgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rMV0gPSAoKHUxNl90KWIyIDw8IDgpICsgYjE7CisgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rMl0gPSAodTE2X3QpIHdkLT5hcC5pdjMyW3ZhcF07CisgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rM10gPSAodTE2X3QpICh3ZC0+YXAuaXYzMlt2YXBdID4+IDE2KTsKKworICAgICAgICAgICAgICAgIC8vbWFjQ3RybCB8PSAweDgwOworICAgICAgICAgICAgICAgIG1hY0N0cmwgfD0gMHg0MDsKKyAgICAgICAgICAgICAgICBpY3ZMZW4gPSA0OworCisgICAgICAgICAgICAgICAgLyogc2V0IGhhcmR3YXJlIE1JQyAqLworICAgICAgICAgICAgICAgIGlmICggKCEoc2VxICYgMHhmKSkmJighKGZsYWcgJiAweDQpKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtYWNDdHJsIHw9IDB4MTAwOworICAgICAgICAgICAgICAgICAgICBwbHVzTGVuICs9IDg7CisgICAgICAgICAgICAgICAgICAgICptaWNMZW4gPSA4OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGhlYWRlcls0XSB8PSAweDQwMDA7CisgICAgICAgICAgICAgICAgaGxlbiArPSA0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAod2QtPmFwLmVuY3J5TW9kZVt2YXBdID09IFpNX0FFUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+YXAuaXYxNlt2YXBdKys7CisKKyAgICAgICAgICAgICAgICBpZih3ZC0+YXAuaXYxNlt2YXBdID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3ZC0+YXAuaXYzMlt2YXBdKys7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYjEgPSAodThfdCkgd2QtPmFwLml2MTZbdmFwXTsKKyAgICAgICAgICAgICAgICBiMiA9ICh1OF90KSAod2QtPmFwLml2MTZbdmFwXSA+PiA4KTsKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbl0gPSAoKHUxNl90KWIyIDw8IDgpICsgYjE7CisgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rMV0gPSAweDIwMDAgfCAod2QtPmFwLmJjS2V5SW5kZXhbdmFwXSA8PCAxNCk7CisgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rMl0gPSAodTE2X3QpICh3ZC0+YXAuaXYzMlt2YXBdKTsKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbiszXSA9ICh1MTZfdCkgKHdkLT5hcC5pdjMyW3ZhcF0gPj4gMTYpOworCisgICAgICAgICAgICAgICAgbWFjQ3RybCB8PSAweGMwOworICAgICAgICAgICAgICAgIGljdkxlbiA9IDg7ICAvKiBNSUMgKi8KKworICAgICAgICAgICAgICAgIGhlYWRlcls0XSB8PSAweDQwMDA7CisgICAgICAgICAgICAgICAgaGxlbiArPSA0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisgICAgICAgICAgICBlbHNlIGlmICh3ZC0+YXAuZW5jcnlNb2RlW3ZhcF0gPT0gWk1fQ0VOQykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvL3UzMl90IHR4aXZbNF07CisKKyAgICAgICAgICAgICAgICB3ZC0+YXAudHhpdlt2YXBdWzBdKys7CisKKyAgICAgICAgICAgICAgICBpZiAod2QtPmFwLnR4aXZbdmFwXVswXSA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2QtPmFwLnR4aXZbdmFwXVsxXSsrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh3ZC0+YXAudHhpdlt2YXBdWzFdID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3ZC0+YXAudHhpdlt2YXBdWzJdKys7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHdkLT5hcC50eGl2W3ZhcF1bMl0gPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdkLT5hcC50eGl2W3ZhcF1bM10rKzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAod2QtPmFwLnR4aXZbdmFwXVszXSA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2QtPmFwLnR4aXZbdmFwXVswXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIHdkLT5hcC50eGl2W3ZhcF1bMV0gPSAwOworICAgICAgICAgICAgICAgICAgICB3ZC0+YXAudHhpdlt2YXBdWzJdID0gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbl0gPSAod2QtPmFwLmJjS2V5SW5kZXhbdmFwXSAmIDB4MDAwMSk7ICAgIC8qIEZvciBLZXkgSWQgYW5kIHJlc2VydmVkIGZpZWxkICovCisgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rMV0gPSAodTE2X3Qpd2QtPmFwLnR4aXZbdmFwXVswXTsKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbisyXSA9ICh1MTZfdCkod2QtPmFwLnR4aXZbdmFwXVswXSA+PiAxNik7CisgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rM10gPSAodTE2X3Qpd2QtPmFwLnR4aXZbdmFwXVsxXTsKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbis0XSA9ICh1MTZfdCkod2QtPmFwLnR4aXZbdmFwXVsxXSA+PiAxNik7CisgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rNV0gPSAodTE2X3Qpd2QtPmFwLnR4aXZbdmFwXVsyXTsKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbis2XSA9ICh1MTZfdCkod2QtPmFwLnR4aXZbdmFwXVsyXSA+PiAxNik7CisgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rN10gPSAodTE2X3Qpd2QtPmFwLnR4aXZbdmFwXVszXTsKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbis4XSA9ICh1MTZfdCkod2QtPmFwLnR4aXZbdmFwXVszXSA+PiAxNik7CisKKyAgICAgICAgICAgICAgICBtYWNDdHJsIHw9IDB4ODA7CisgICAgICAgICAgICAgICAgaWN2TGVuID0gMTY7ICAvKiBNSUMgKi8KKworICAgICAgICAgICAgICAgIGhlYWRlcls0XSB8PSAweDQwMDA7CisgICAgICAgICAgICAgICAgaGxlbiArPSA5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEdldCBTVEEncyBlbmNyeXB0aW9uIHR5cGUgKi8KKyAgICAgICAgICAgIHpmQXBHZXRTdGFFbmNyeVR5cGUoZGV2LCBkYSwgJmVuY3J5VHlwZSk7CisKKyAgICAgICAgICAgIGlmIChlbmNyeVR5cGUgPT0gWk1fVEtJUCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBHZXQgaXYxNiBhbmQgaXYzMiAqLworICAgICAgICAgICAgICAgIHpmQXBHZXRTdGFXcGFJdihkZXYsIGRhLCAmaXYxNiwgJml2MzIpOworCisgICAgICAgICAgICAgICAgaXYxNisrOworICAgICAgICAgICAgICAgIGlmIChpdjE2ID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpdjMyKys7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYjEgPSAodThfdCkgKGl2MTYgPj4gOCk7CisgICAgICAgICAgICAgICAgYjIgPSAoYjEgfCAweDIwKSAmIDB4N2Y7CisgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW5dID0gKCh1MTZfdCliMiA8PCA4KSArIGIxOworICAgICAgICAgICAgICAgIGIxID0gKHU4X3QpIGl2MTY7CisgICAgICAgICAgICAgICAgYjIgPSAweDIwOworICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzFdID0gKCh1MTZfdCliMiA8PCA4KSArIGIxOworICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzJdID0gKHUxNl90KSBpdjMyOworICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzNdID0gKHUxNl90KSAoaXYzMiA+PiAxNik7CisKKyAgICAgICAgICAgICAgICAvL21hY0N0cmwgfD0gMHg4MDsKKyAgICAgICAgICAgICAgICBtYWNDdHJsIHw9IDB4NDA7CisgICAgICAgICAgICAgICAgaWN2TGVuID0gNDsKKworICAgICAgICAgICAgICAgIC8qIHNldCBoYXJkd2FyZSBNSUMgKi8KKyAgICAgICAgICAgICAgICBpZiAoICghKHNlcSAmIDB4ZikpJiYoIShmbGFnICYgMHg0KSkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbWFjQ3RybCB8PSAweDEwMDsKKyAgICAgICAgICAgICAgICAgICAgcGx1c0xlbiArPSA4OworICAgICAgICAgICAgICAgICAgICAqbWljTGVuID0gODsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBoZWFkZXJbNF0gfD0gMHg0MDAwOworICAgICAgICAgICAgICAgIGhsZW4gKz0gNDsKKworICAgICAgICAgICAgICAgIC8qIFNldCBpdjE2IGFuZCBpdjMyICovCisgICAgICAgICAgICAgICAgemZBcFNldFN0YVdwYUl2KGRldiwgZGEsIGl2MTYsIGl2MzIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZW5jcnlUeXBlID09IFpNX0FFUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBHZXQgaXYxNiBhbmQgaXYzMiAqLworICAgICAgICAgICAgICAgIHpmQXBHZXRTdGFXcGFJdihkZXYsIGRhLCAmaXYxNiwgJml2MzIpOworCisgICAgICAgICAgICAgICAgaXYxNisrOworICAgICAgICAgICAgICAgIGlmIChpdjE2ID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpdjMyKys7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYjEgPSAodThfdCkgaXYxNjsKKyAgICAgICAgICAgICAgICBiMiA9ICh1OF90KSAoaXYxNiA+PiA4KTsKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbl0gPSAoKHUxNl90KWIyIDw8IDgpICsgYjE7CisgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rMV0gPSAweDIwMDA7CisgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rMl0gPSAodTE2X3QpIChpdjMyKTsKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbiszXSA9ICh1MTZfdCkgKGl2MzIgPj4gMTYpOworCisgICAgICAgICAgICAgICAgbWFjQ3RybCB8PSAweGMwOworICAgICAgICAgICAgICAgIGljdkxlbiA9IDg7ICAvKiBNSUMgKi8KKworICAgICAgICAgICAgICAgIGhlYWRlcls0XSB8PSAweDQwMDA7CisgICAgICAgICAgICAgICAgaGxlbiArPSA0OworCisgICAgICAgICAgICAgICAgLyogU2V0IGl2MTYgYW5kIGl2MzIgKi8KKyAgICAgICAgICAgICAgICB6ZkFwU2V0U3RhV3BhSXYoZGV2LCBkYSwgaXYxNiwgaXYzMik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAjaWZkZWYgWk1fRU5BQkxFX0NFTkMKKyAgICAgICAgICAgIGVsc2UgaWYgKGVuY3J5VHlwZSA9PSBaTV9DRU5DKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUzMl90IHR4aXZbNF07CisgICAgICAgICAgICAgICAgdThfdCBrZXlJZHg7CisKKyAgICAgICAgICAgICAgICAvKiBHZXQgQ0VOQyBUeElWICovCisgICAgICAgICAgICAgICAgemZBcEdldFN0YUNlbmNJdkFuZEtleUlkeChkZXYsIGRhLCB0eGl2LCAma2V5SWR4KTsKKworICAgICAgICAgICAgICAgIHR4aXZbMF0gKz0gMjsKKworICAgICAgICAgICAgICAgIGlmICh0eGl2WzBdID09IDAgfHwgdHhpdlswXSA9PSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdHhpdlsxXSsrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh0eGl2WzFdID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0eGl2WzJdKys7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHR4aXZbMl0gPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHR4aXZbM10rKzsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAodHhpdlszXSA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdHhpdlswXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIHR4aXZbMV0gPSAwOworICAgICAgICAgICAgICAgICAgICB0eGl2WzJdID0gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbl0gPSAoa2V5SWR4ICYgMHgwMDAxKTsgICAgLyogRm9yIEtleSBJZCBhbmQgcmVzZXJ2ZWQgZmllbGQgKi8KKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbisxXSA9ICh1MTZfdCl0eGl2WzBdOworICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzJdID0gKHUxNl90KSh0eGl2WzBdID4+IDE2KTsKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbiszXSA9ICh1MTZfdCl0eGl2WzFdOworICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzRdID0gKHUxNl90KSh0eGl2WzFdID4+IDE2KTsKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbis1XSA9ICh1MTZfdCl0eGl2WzJdOworICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzZdID0gKHUxNl90KSh0eGl2WzJdID4+IDE2KTsKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbis3XSA9ICh1MTZfdCl0eGl2WzNdOworICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzhdID0gKHUxNl90KSh0eGl2WzNdID4+IDE2KTsKKworICAgICAgICAgICAgICAgIG1hY0N0cmwgfD0gMHg4MDsKKyAgICAgICAgICAgICAgICBpY3ZMZW4gPSAxNjsgIC8qIE1JQyAqLworCisgICAgICAgICAgICAgICAgaGVhZGVyWzRdIHw9IDB4NDAwMDsKKyAgICAgICAgICAgICAgICBobGVuICs9IDk7CisKKyAgICAgICAgICAgICAgICAvKiBTZXQgQ0VOQyBJViAqLworICAgICAgICAgICAgICAgIHpmQXBTZXRTdGFDZW5jSXYoZGV2LCBkYSwgdHhpdik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworICAgICAgICB9CisKKyAgICAgICAgLyogcHJvdGVjdGlvbiBtb2RlICovCisgICAgICAgIGlmICh3ZC0+YXAucHJvdGVjdGlvbk1vZGUgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogRW5hYmxlIFNlbGYtQ1RTICovCisgICAgICAgICAgICBtYWNDdHJsICY9IDB4RkZGQzsKKyAgICAgICAgICAgIG1hY0N0cmwgfD0gMjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFJhdGUgQ29udHJvbCAqLworICAgICAgICBpZiAocG9ydCA8IDB4MjApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEFQICovCisgICAgICAgICAgICAvKiBJViAqLworICAgICAgICAgICAgaWYgKCh3ZC0+YXAuZW5jcnlNb2RlW3ZhcF0gPT0gWk1fV0VQNjQpIHx8CisgICAgICAgICAgICAgICAgICAgICh3ZC0+YXAuZW5jcnlNb2RlW3ZhcF0gPT0gWk1fV0VQMTI4KSB8fAorICAgICAgICAgICAgICAgICAgICAod2QtPmFwLmVuY3J5TW9kZVt2YXBdID09IFpNX1dFUDI1NikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaGVhZGVyWzRdIHw9IDB4NDAwMDsKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbl0gPSAweDA7ICAgLy9JVgorICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzFdID0gd2QtPmFwLmJjS2V5SW5kZXhbdmFwXSA8PCAxNDsgLy9JViB3aXRoIEtleWlkLS1DV1lhbmcobSkKKyAgICAgICAgICAgICAgICBobGVuICs9IDI7CisgICAgICAgICAgICAgICAgaWN2TGVuID0gNDsKKyAgICAgICAgICAgICAgICBtYWNDdHJsIHw9IDB4NDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBXRFMgKi8KKworICAgICAgICAgICAgLyogVE9ETyA6IEZpeGVkIHJhdGUgdG8gNTRNICovCisgICAgICAgICAgICBwaHlDdHJsID0gMHhjMDAwMTsgICAvL1BIWSBjb250cm9sIEwKKworICAgICAgICAgICAgLyogV0RTIHBvcnQgY2hlY2tpbmcgKi8KKyAgICAgICAgICAgIGlmICgod2RzUG9ydCA9IChwb3J0IC0gMHgyMCkpID49IFpNX01BWF9XRFNfU1VQUE9SVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZHNQb3J0ID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgI2lmIDEKKyAgICAgICAgICAgIC8qIElWICovCisgICAgICAgICAgICBzd2l0Y2ggKHdkLT5hcC53ZHMuZW5jcnlNb2RlW3dkc1BvcnRdKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBaTV9XRVA2NDoKKyAgICAgICAgICAgIGNhc2UgWk1fV0VQMTI4OgorICAgICAgICAgICAgY2FzZSBaTV9XRVAyNTY6CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcls0XSB8PSAweDQwMDA7CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuXSA9IDB4MDsgICAvL0lWCisgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzFdID0gd2QtPmFwLmJjS2V5SW5kZXhbdmFwXSA8PCAxNDsgLy9JViB3aXRoIEtleWlkCisgICAgICAgICAgICAgICAgICAgIGhsZW4gKz0gMjsKKyAgICAgICAgICAgICAgICAgICAgaWN2TGVuID0gNDsKKyAgICAgICAgICAgICAgICAgICAgbWFjQ3RybCB8PSAweDQwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBaTV9US0lQOgorICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLml2MTYrKzsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIHdkLT5zdGEuaXYxNiA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5pdjMyKys7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBiMSA9ICh1OF90KSAod2QtPnN0YS5pdjE2ID4+IDgpOworICAgICAgICAgICAgICAgICAgICBiMiA9IChiMSB8IDB4MjApICYgMHg3ZjsKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW5dID0gKCh1MTZfdCliMiA8PCA4KSArIGIxOworICAgICAgICAgICAgICAgICAgICBiMSA9ICh1OF90KSB3ZC0+c3RhLml2MTY7CisgICAgICAgICAgICAgICAgICAgIGIyID0gMHgyMDsKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rMV0gPSAoKHUxNl90KWIyIDw8IDgpICsgYjE7CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzJdID0gKHUxNl90KSB3ZC0+c3RhLml2MzI7CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzNdID0gKHUxNl90KSAod2QtPnN0YS5pdjMyID4+IDE2KTsKKworICAgICAgICAgICAgICAgICAgICAvL21hY0N0cmwgfD0gMHg4MDsKKyAgICAgICAgICAgICAgICAgICAgbWFjQ3RybCB8PSAweDQwOworICAgICAgICAgICAgICAgICAgICBpY3ZMZW4gPSA0OworCisgICAgICAgICAgICAgICAgICAgIC8qIHNldCBoYXJkd2FyZSBNSUMgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCAoIShzZXEgJiAweGYpKSYmKCEoZmxhZyAmIDB4NCkpICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbWFjQ3RybCB8PSAweDEwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsdXNMZW4gKz0gODsKKyAgICAgICAgICAgICAgICAgICAgICAgICptaWNMZW4gPSA4OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyWzRdIHw9IDB4NDAwMDsKKyAgICAgICAgICAgICAgICAgICAgaGxlbiArPSA0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBaTV9BRVM6CisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuaXYxNisrOworICAgICAgICAgICAgICAgICAgICBpZiAoIHdkLT5zdGEuaXYxNiA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5pdjMyKys7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBiMSA9ICh1OF90KSB3ZC0+c3RhLml2MTY7CisgICAgICAgICAgICAgICAgICAgIGIyID0gKHU4X3QpICh3ZC0+c3RhLml2MTYgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuXSA9ICgodTE2X3QpYjIgPDwgOCkgKyBiMTsKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rMV0gPSAweDIwMDA7CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzJdID0gKHUxNl90KSAod2QtPnN0YS5pdjMyKTsKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rM10gPSAodTE2X3QpICh3ZC0+c3RhLml2MzIgPj4gMTYpOworCisgICAgICAgICAgICAgICAgICAgIG1hY0N0cmwgfD0gMHhjMDsgLyogU2V0IHRvIEFFUyBpbiBjb250cm9sIHNldHRpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgaWN2TGVuID0gODsgIC8qIE1JQyAqLworCisgICAgICAgICAgICAgICAgICAgIGhlYWRlcls0XSB8PSAweDQwMDA7IC8qIFNldCBXRVAgYml0IGluIHdsYW4gaGVhZGVyICovCisgICAgICAgICAgICAgICAgICAgIGhsZW4gKz0gNDsgLyogcGx1cyBJViBsZW5ndGggKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9LyogZW5kIG9mIHN3aXRjaCAqLworICAgICAgICAgICAgI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAgIC8qIHdkLT53bGFuTW9kZSAhPSBaTV9NT0RFX0FQICovCisgICAgeworICAgICAgICBlbmNFeGVtcHRpb25BY3Rpb25UeXBlID0gemZ3R2V0UGt0RW5jRXhlbXB0aW9uQWN0aW9uVHlwZShkZXYsIGJ1Zik7CisKKyAgICAgICAgaWYgKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSApCisgICAgICAgIHsKKyAgICAgICAgICAgICNpZiAxCisgICAgICAgICAgICAvKiBpZiBXTUUgQVAgKi8KKyAgICAgICAgICAgIGlmICh3ZC0+c3RhLndtZUNvbm5lY3RlZCAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFFvUyBkYXRhICovCisgICAgICAgICAgICAgICAgaGVhZGVyWzRdIHw9IDB4MDA4MDsKKworICAgICAgICAgICAgICAgIC8qIFFvUyBDb250cm9sICovCisgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW5dID0gdXA7CisgICAgICAgICAgICAgICAgaGxlbiArPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgI2VuZGlmCisKKyAgICAgICAgICAgIGlmICggZW5jRXhlbXB0aW9uQWN0aW9uVHlwZSA9PSBaTV9FTkNSWVBUSU9OX0VYRU1QVF9OT19FWEVNUFRJT04gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggd2QtPnN0YS5hdXRoTW9kZSA8IFpNX0FVVEhfTU9ERV9XUEEgKQorICAgICAgICAgICAgICAgIHsgICAvKiBub24tV1BBICovCisgICAgICAgICAgICAgICAgICAgIGlmICggd2QtPnN0YS53ZXBTdGF0dXMgPT0gWk1fRU5DUllQVElPTl9XRVBfRU5BQkxFRCApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKHdkLT5zdGEuZW5jcnlNb2RlID09IFpNX1dFUDY0KXx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3ZC0+c3RhLmVuY3J5TW9kZSA9PSBaTV9XRVAxMjgpfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdkLT5zdGEuZW5jcnlNb2RlID09IFpNX1dFUDI1NikgKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcls0XSB8PSAweDQwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW5dID0gMHgwOyAgIC8vSVYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbisxXSA9IDB4MDsgLy9JVgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzFdIHw9ICgoKHUxNl90KSB3ZC0+c3RhLmtleUlkKSA8PCAxNCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGxlbiArPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljdkxlbiA9IDQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgU29mdHdhcmUgV0VQICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh3ZC0+c3RhLlNXRW5jcnlwdEVuYWJsZSAmIFpNX1NXX1dFUF9FTkNSWV9FTikgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4X3Qga2V5TGVuID0gNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdThfdCBpdlszXTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdlswXSA9IDB4MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZbMV0gPSAweDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2WzJdID0gMHgwOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ZC0+c3RhLlNXRW5jcnlNb2RlW3dkLT5zdGEua2V5SWRdID09IFpNX1dFUDY0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlMZW4gPSA1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdkLT5zdGEuU1dFbmNyeU1vZGVbd2QtPnN0YS5rZXlJZF0gPT0gWk1fV0VQMTI4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlMZW4gPSAxMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh3ZC0+c3RhLlNXRW5jcnlNb2RlW3dkLT5zdGEua2V5SWRdID09IFpNX1dFUDI1NikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5TGVuID0gMjk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZldFUEVuY3J5cHQoZGV2LCBidWYsICh1OF90Kikgc25hcCwgc25hcExlbiwgbWludXNMZW4sIGtleUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLndlcEtleVt3ZC0+c3RhLmtleUlkXSwgaXYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNDdHJsIHw9IDB4NDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7ICAgLyogV1BBICovCisgICAgICAgICAgICAgICAgICAgIGlmICggd2QtPnN0YS53cGFTdGF0ZSA+PSBaTV9TVEFfV1BBX1NUQVRFX1BLX09LICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5pdjE2Kys7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHdkLT5zdGEuaXYxNiA9PSAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLml2MzIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0IGVuY3J5cHRpb24gbW9kZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB3ZC0+c3RhLmVuY3J5TW9kZSA9PSBaTV9US0lQICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMSA9ICh1OF90KSAod2QtPnN0YS5pdjE2ID4+IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIyID0gKGIxIHwgMHgyMCkgJiAweDdmOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuXSA9ICgodTE2X3QpYjIgPDwgOCkgKyBiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMSA9ICh1OF90KSB3ZC0+c3RhLml2MTY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjIgPSAweDIwOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGVhZGVyW2hsZW4rMV0gPSAoKCh1MTZfdCkgd2QtPnN0YS5rZXlJZCkgPDwgMTQpIHwgKCgodTE2X3QpYjIgPDwgOCkgKyBiMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU1RBIGluIGluZnJhc3RydWN0dXJlIG1vZGUgc2hvdWxkIHVzZSBrZXlJZCA9IDAgdG8gdHJhbnNtaXQgdW5pY2FzdCAhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rMV0gPSAoKCh1MTZfdCliMiA8PCA4KSArIGIxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbisyXSA9ICh1MTZfdCkgd2QtPnN0YS5pdjMyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzNdID0gKHUxNl90KSAod2QtPnN0YS5pdjMyID4+IDE2KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHNvZnR3YXJlIGVuY3J5cHRpb24gZW5hYmxlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh3ZC0+c3RhLlNXRW5jcnlwdEVuYWJsZSAmIFpNX1NXX1RLSVBfRU5DUllfRU4pID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL21hY0N0cmwgfD0gMHg4MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVEtJUCBzYW1lIHRvIFdFUCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNDdHJsIHw9IDB4NDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljdkxlbiA9IDQ7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2V0IGhhcmR3YXJlIE1JQyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICghKHNlcSAmIDB4ZikpJiYoIShmbGFnICYgMHg0KSkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNDdHJsIHw9IDB4MTAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1c0xlbiArPSA4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm1pY0xlbiA9IDg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdThfdCBtaWNbOF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNl90IG9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyX3QgaWN2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OF90IFJDNEtleVsxNl07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVE9ETzogUmVtb3ZlIHRoZSBjcml0aWNpYWwgc2VjdGlvbiBoZXJlLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENhbGN1bGF0ZSBNSUMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemZDYWxUeE1pYyhkZXYsIGJ1ZiwgKHU4X3QgKilzbmFwLCBzbmFwTGVuLCBtaW51c0xlbiwgZGEsIHNhLCB1cCwgbWljKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBcHBlbmQgTUlDIHRvIHRoZSBidWZmZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemZDb3B5VG9JbnRUeEJ1ZmZlcihkZXYsIGJ1ZiwgbWljLCBvZmZzZXQsIDgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZndCdWZTZXRTaXplKGRldiwgYnVmLCBvZmZzZXQrOCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVEtJUCBLZXkgTWl4aW5nICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmVGtpcFBoYXNlMUtleU1peCh3ZC0+c3RhLml2MzIsICZ3ZC0+c3RhLnR4U2VlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmVGtpcFBoYXNlMktleU1peCh3ZC0+c3RhLml2MTYsICZ3ZC0+c3RhLnR4U2VlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmVGtpcEdldHNlZWRzKHdkLT5zdGEuaXYxNiwgUkM0S2V5LCAmd2QtPnN0YS50eFNlZWQpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuY3J5cHQgRGF0YSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZlRLSVBFbmNyeXB0KGRldiwgYnVmLCAodThfdCAqKXNuYXAsIHNuYXBMZW4sIG1pbnVzTGVuLCAxNiwgUkM0S2V5LCAmaWN2KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3ZMZW4gPSA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gKz0gODsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbNF0gfD0gMHg0MDAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhsZW4gKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB3ZC0+c3RhLmVuY3J5TW9kZSA9PSBaTV9BRVMgKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIxID0gKHU4X3QpIHdkLT5zdGEuaXYxNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMiA9ICh1OF90KSAod2QtPnN0YS5pdjE2ID4+IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuXSA9ICgodTE2X3QpYjIgPDwgOCkgKyBiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoZWFkZXJbaGxlbisxXSA9ICgoKHUxNl90KSB3ZC0+c3RhLmtleUlkKSA8PCAxNCkgfCAoMHgyMDAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTVEEgaW4gaW5mcmFzdHJ1Y3R1cmUgbW9kZSBzaG91bGQgdXNlIGtleUlkID0gMCB0byB0cmFuc21pdCB1bmljYXN0ICEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbisxXSA9IDB4MjAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbisyXSA9ICh1MTZfdCkgKHdkLT5zdGEuaXYzMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rM10gPSAodTE2X3QpICh3ZC0+c3RhLml2MzIgPj4gMTYpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjQ3RybCB8PSAweGMwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljdkxlbiA9IDg7ICAvKiBNSUMgKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcls0XSB8PSAweDQwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGxlbiArPSA0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggd2QtPnN0YS5lbmNyeU1vZGUgPT0gWk1fQ0VOQyApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWNjdW1sYXRlIHRoZSBQTiBzZXF1ZW5jZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEudHhpdlswXSArPSAyOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdkLT5zdGEudHhpdlswXSA9PSAwIHx8IHdkLT5zdGEudHhpdlswXSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS50eGl2WzFdKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdkLT5zdGEudHhpdlsxXSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS50eGl2WzJdKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdkLT5zdGEudHhpdlsyXSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS50eGl2WzNdKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdkLT5zdGEudHhpdlszXSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS50eGl2WzBdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS50eGl2WzFdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS50eGl2WzJdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbl0gPSAod2QtPnN0YS5jZW5jS2V5SWQgJiAweDAwMDEpOyAgICAvKiBGb3IgS2V5IElkIGFuZCByZXNlcnZlZCBmaWVsZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzFdID0gKHUxNl90KSB3ZC0+c3RhLnR4aXZbMF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rMl0gPSAodTE2X3QpICh3ZC0+c3RhLnR4aXZbMF0gPj4gMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzNdID0gKHUxNl90KSB3ZC0+c3RhLnR4aXZbMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rNF0gPSAodTE2X3QpICh3ZC0+c3RhLnR4aXZbMV0gPj4gMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzVdID0gKHUxNl90KSB3ZC0+c3RhLnR4aXZbMl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rNl0gPSAodTE2X3QpICh3ZC0+c3RhLnR4aXZbMl0gPj4gMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzddID0gKHUxNl90KSB3ZC0+c3RhLnR4aXZbM107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rOF0gPSAodTE2X3QpICh3ZC0+c3RhLnR4aXZbM10gPj4gMTYpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjQ3RybCB8PSAweDgwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljdkxlbiA9IDE2OyAgLyogTUlDICovCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbNF0gfD0gMHg0MDAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhsZW4gKz0gOTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IC8vIGlmICggZW5jRXhlbXB0aW9uQWN0aW9uVHlwZSA9PSBaTV9FTkNSWVBUSU9OX0VYRU1QVF9OT19FWEVNUFRJT04gKQorICAgICAgICB9IC8qIGlmICggd2QtPndsYW5Nb2RlICE9IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUgKSAqLworCisgICAgICAgIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfSUJTUyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggZW5jRXhlbXB0aW9uQWN0aW9uVHlwZSA9PSBaTV9FTkNSWVBUSU9OX0VYRU1QVF9OT19FWEVNUFRJT04gKQorICAgICAgICAgICAgeworI2lmZGVmIFpNX0VOQUJMRV9JQlNTX1dQQTJQU0sKKyAgICAgICAgICAgICAgICBpZiggd2QtPnN0YS5vcHBvc2l0ZUluZm9bdXNlcklkeF0ud3BhU3RhdGUgPj0gWk1fU1RBX1dQQV9TVEFURV9QS19PSyB8fCB3ZC0+c3RhLndwYVN0YXRlID49IFpNX1NUQV9XUEFfU1RBVEVfUEtfT0spCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQgaXNVbmljYXN0ID0gMSA7CisKKyAgICAgICAgICAgICAgICAgICAgaWYoKGRhWzBdJiAweDEpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpc1VuaWNhc3QgPSAwIDsgLy8gTm90IHVuaWNhc3QgLCBpcyBicm9hZGNhc3QKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmKCB3ZC0+c3RhLmlic3NXcGEyUHNrID09IDEgKQorICAgICAgICAgICAgICAgICAgICB7IC8qIFRoZSBJViBvcmRlciBpcyBub3QgdGhlIHNhbWUgYmV0d2VlbiB1bmljYXN0IGFuZCBicm9hZGNhc3QgISAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBpc1VuaWNhc3QgKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2MTYgPSAmd2QtPnN0YS5vcHBvc2l0ZUluZm9bdXNlcklkeF0uaXYxNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdjMyID0gJndkLT5zdGEub3Bwb3NpdGVJbmZvW3VzZXJJZHhdLml2MzI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXYxNiA9ICZ3ZC0+c3RhLml2MTY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXYzMiA9ICZ3ZC0+c3RhLml2MzI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpdjE2ID0gJndkLT5zdGEuaXYxNjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGl2MzIgPSAmd2QtPnN0YS5pdjMyOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgKCppdjE2KSsrOworICAgICAgICAgICAgICAgICAgICBpZiAoICppdjE2ID09IDAgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAqaXYzMisrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB3ZC0+c3RhLm9wcG9zaXRlSW5mb1t1c2VySWR4XS5lbmNyeU1vZGUgPT0gWk1fQUVTIHx8IHdkLT5zdGEuZW5jcnlNb2RlID09IFpNX0FFUykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmludGsoIlN0YXRpb24gZW5jcnlwdGlvbiBtb2RlIGlzIEFFUy1DQ01QXG4iKSA7CisgICAgICAgICAgICAgICAgICAgICAgICBiMSA9ICh1OF90KSAoKml2MTYpOworICAgICAgICAgICAgICAgICAgICAgICAgYjIgPSAodThfdCkgKCgqaXYxNikgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbl0gPSAoKHUxNl90KWIyIDw8IDgpICsgYjE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNVbmljYXN0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbisxXSA9IDB4MjAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbisxXSA9IDB4MjAwMCB8ICgoKHUxNl90KSB3ZC0+c3RhLmtleUlkKSA8PCAxNCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzJdID0gKHUxNl90KSAoKml2MzIpOworICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rM10gPSAodTE2X3QpICgoKml2MzIpID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY0N0cmwgfD0gMHhjMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGljdkxlbiA9IDg7ICAvKiBNSUMgKi8KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGhlYWRlcls0XSB8PSAweDQwMDA7CisgICAgICAgICAgICAgICAgICAgIGhsZW4gKz0gNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHdkLT5zdGEud2VwU3RhdHVzID09IFpNX0VOQ1JZUFRJT05fV0VQX0VOQUJMRUQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoICh3ZC0+c3RhLmVuY3J5TW9kZSA9PSBaTV9XRVA2NCl8fAorICAgICAgICAgICAgICAgICAgICAgICAgKHdkLT5zdGEuZW5jcnlNb2RlID09IFpNX1dFUDEyOCl8fAorICAgICAgICAgICAgICAgICAgICAgICAgKHdkLT5zdGEuZW5jcnlNb2RlID09IFpNX1dFUDI1NikgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbNF0gfD0gMHg0MDAwOworICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW5dID0gMHgwOyAgIC8vSVYKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzFdID0gMHgwOyAvL0lWCisgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbisxXSB8PSAoKCh1MTZfdCkgd2QtPnN0YS5rZXlJZCkgPDwgMTQpOworICAgICAgICAgICAgICAgICAgICAgICAgaGxlbiArPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgaWN2TGVuID0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY0N0cmwgfD0gMHg0MDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICAgICAgLyogLS0tLS0gMjAwNzA0MDUgYWRkIGJ5IE14emVuZyAtLS0tLSAqLworICAgICAgICAgICAgICAgIGlmKCB3ZC0+c3RhLndwYVN0YXRlID49IFpNX1NUQV9XUEFfU1RBVEVfUEtfT0sgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGlzVW5pY2FzdCA9IDEgOworCisgICAgICAgICAgICAgICAgICAgIGlmKChkYVswXSYgMHgxKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaXNVbmljYXN0ID0gMCA7IC8vIE5vdCB1bmljYXN0ICwgaXMgYnJvYWRjYXN0CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLml2MTYrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB3ZC0+c3RhLml2MTYgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuaXYzMisrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB3ZC0+c3RhLmVuY3J5TW9kZSA9PSBaTV9BRVMgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50aygiU3RhdGlvbiBlbmNyeXB0aW9uIG1vZGUgaXMgQUVTLUNDTVBcbiIpIDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGIxID0gKHU4X3QpIHdkLT5zdGEuaXYxNjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGIyID0gKHU4X3QpICh3ZC0+c3RhLml2MTYgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbl0gPSAoKHUxNl90KWIyIDw8IDgpICsgYjE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggaXNVbmljYXN0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbisxXSA9IDB4MjAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbisxXSA9IDB4MjAwMCB8ICgoKHUxNl90KSB3ZC0+c3RhLmtleUlkKSA8PCAxNCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbisyXSA9ICh1MTZfdCkgKHdkLT5zdGEuaXYzMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rM10gPSAodTE2X3QpICh3ZC0+c3RhLml2MzIgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY0N0cmwgfD0gMHhjMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3ZMZW4gPSA4OyAgLyogTUlDICovCisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBoZWFkZXJbNF0gfD0gMHg0MDAwOworICAgICAgICAgICAgICAgICAgICBobGVuICs9IDQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB3ZC0+c3RhLndlcFN0YXR1cyA9PSBaTV9FTkNSWVBUSU9OX1dFUF9FTkFCTEVEKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAod2QtPnN0YS5lbmNyeU1vZGUgPT0gWk1fV0VQNjQpfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAod2QtPnN0YS5lbmNyeU1vZGUgPT0gWk1fV0VQMTI4KXx8CisgICAgICAgICAgICAgICAgICAgICAgICAgKHdkLT5zdGEuZW5jcnlNb2RlID09IFpNX1dFUDI1NikgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbNF0gfD0gMHg0MDAwOworICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW5dID0gMHgwOyAgIC8vSVYKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzFdID0gMHgwOyAvL0lWCisgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbisxXSB8PSAoKCh1MTZfdCkgd2QtPnN0YS5rZXlJZCkgPDwgMTQpOworICAgICAgICAgICAgICAgICAgICAgICAgaGxlbiArPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgaWN2TGVuID0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hY0N0cmwgfD0gMHg0MDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgfSAgIC8vIEVuZCBpZiAoIGVuY0V4ZW1wdGlvbkFjdGlvblR5cGUgPT0gWk1fRU5DUllQVElPTl9FWEVNUFRfTk9fRVhFTVBUSU9OICkKKyAgICAgICAgfSAgIC8vIEVuZCBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lCU1MgKQorICAgICAgICBlbHNlIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfUFNFVURPICkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh3ZC0+c3RhLmVuY3J5TW9kZSkKKwkgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgWk1fV0VQNjQ6CisgICAgICAgICAgICBjYXNlIFpNX1dFUDEyODoKKyAgICAgICAgICAgIGNhc2UgWk1fV0VQMjU2OgorICAgICAgICAgICAgICAgIGhlYWRlcls0XSB8PSAweDQwMDA7CisgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW5dID0gMHgwOyAgIC8vSVYKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbisxXSA9IDB4MDsgLy9JVgorICAgICAgICAgICAgICAgIGhsZW4gKz0gMjsKKyAgICAgICAgICAgICAgICBpY3ZMZW4gPSA0OworICAgICAgICAgICAgICAgIG1hY0N0cmwgfD0gMHg0MDsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBaTV9US0lQOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT5zdGEuaXYxNisrOworICAgICAgICAgICAgICAgIGlmICggd2QtPnN0YS5pdjE2ID09IDAgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5pdjMyKys7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYjEgPSAodThfdCkgKHdkLT5zdGEuaXYxNiA+PiA4KTsKKyAgICAgICAgICAgICAgICBiMiA9IChiMSB8IDB4MjApICYgMHg3ZjsKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbl0gPSAoKHUxNl90KWIyIDw8IDgpICsgYjE7CisgICAgICAgICAgICAgICAgYjEgPSAodThfdCkgd2QtPnN0YS5pdjE2OworICAgICAgICAgICAgICAgIGIyID0gMHgyMDsKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbisxXSA9ICgodTE2X3QpYjIgPDwgOCkgKyBiMTsKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbisyXSA9ICh1MTZfdCkgd2QtPnN0YS5pdjMyOworICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzNdID0gKHUxNl90KSAod2QtPnN0YS5pdjMyID4+IDE2KTsKKworICAgICAgICAgICAgICAgIC8vbWFjQ3RybCB8PSAweDgwOworICAgICAgICAgICAgICAgIG1hY0N0cmwgfD0gMHg0MDsKKyAgICAgICAgICAgICAgICBpY3ZMZW4gPSA0OworCisgICAgICAgICAgICAgICAgLyogc2V0IGhhcmR3YXJlIE1JQyAqLworICAgICAgICAgICAgICAgIGlmICggKCEoc2VxICYgMHhmKSkmJighKGZsYWcgJiAweDQpKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtYWNDdHJsIHw9IDB4MTAwOworICAgICAgICAgICAgICAgICAgICBwbHVzTGVuICs9IDg7CisgICAgICAgICAgICAgICAgICAgICptaWNMZW4gPSA4OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGhlYWRlcls0XSB8PSAweDQwMDA7CisgICAgICAgICAgICAgICAgaGxlbiArPSA0OworICAgICAgICAgICAgfS8qIGVuZCBvZiBQU0VVRE8gVEtJUCAqLworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFpNX0FFUzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+c3RhLml2MTYrKzsKKyAgICAgICAgICAgICAgICBpZiAoIHdkLT5zdGEuaXYxNiA9PSAwICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuaXYzMisrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGIxID0gKHU4X3QpIHdkLT5zdGEuaXYxNjsKKyAgICAgICAgICAgICAgICBiMiA9ICh1OF90KSAod2QtPnN0YS5pdjE2ID4+IDgpOworICAgICAgICAgICAgICAgIGhlYWRlcltobGVuXSA9ICgodTE2X3QpYjIgPDwgOCkgKyBiMTsKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbisxXSA9IDB4MjAwMDsKKyAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbisyXSA9ICh1MTZfdCkgKHdkLT5zdGEuaXYzMik7CisgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rM10gPSAodTE2X3QpICh3ZC0+c3RhLml2MzIgPj4gMTYpOworICAgICAgICAgICAgICAgIG1hY0N0cmwgfD0gMHhjMDsKKyAgICAgICAgICAgICAgICBpY3ZMZW4gPSA4OyAgLyogTUlDICovCisgICAgICAgICAgICAgICAgaGVhZGVyWzRdIHw9IDB4NDAwMDsKKyAgICAgICAgICAgICAgICBobGVuICs9IDQ7CisgICAgICAgICAgICB9LyogZW5kIG9mIFBTRVVETyBBRVMgKi8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisgICAgICAgICAgICAgIGNhc2UgWk1fQ0VOQzoKKyAgICAgICAgICAgICAgICAgICAgLyogQWNjdW1sYXRlIHRoZSBQTiBzZXF1ZW5jZSAqLworICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnR4aXZbMF0gKz0gMjsKKworICAgICAgICAgICAgICAgICAgICBpZiAod2QtPnN0YS50eGl2WzBdID09IDAgfHwgd2QtPnN0YS50eGl2WzBdID09IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEudHhpdlsxXSsrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdkLT5zdGEudHhpdlsxXSA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnR4aXZbMl0rKzsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICh3ZC0+c3RhLnR4aXZbMl0gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS50eGl2WzNdKys7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAod2QtPnN0YS50eGl2WzNdID09IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEudHhpdlswXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnR4aXZbMV0gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS50eGl2WzJdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzFdID0gKHUxNl90KSB3ZC0+c3RhLnR4aXZbMF07CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzJdID0gKHUxNl90KSAod2QtPnN0YS50eGl2WzBdID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rM10gPSAodTE2X3QpIHdkLT5zdGEudHhpdlsxXTsKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyW2hsZW4rNF0gPSAodTE2X3QpICh3ZC0+c3RhLnR4aXZbMV0gPj4gMTYpOworICAgICAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbis1XSA9ICh1MTZfdCkgd2QtPnN0YS50eGl2WzJdOworICAgICAgICAgICAgICAgICAgICBoZWFkZXJbaGxlbis2XSA9ICh1MTZfdCkgKHdkLT5zdGEudHhpdlsyXSA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzddID0gKHUxNl90KSB3ZC0+c3RhLnR4aXZbM107CisgICAgICAgICAgICAgICAgICAgIGhlYWRlcltobGVuKzhdID0gKHUxNl90KSAod2QtPnN0YS50eGl2WzNdID4+IDE2KTsKKworICAgICAgICAgICAgICAgICAgICBtYWNDdHJsIHw9IDB4ODA7CisgICAgICAgICAgICAgICAgICAgIGljdkxlbiA9IDE2OyAgLyogTUlDICovCisKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyWzRdIHw9IDB4NDAwMDsKKyAgICAgICAgICAgICAgICAgICAgaGxlbiArPSA5OworCQkJCWJyZWFrOworCQkgICAgI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKKwkJCX0vKiBlbmQgb2Ygc3dpdGNoICovCisJCX0KKworICAgICAgICAvKiBHZW5lcmF0ZSBjb250cm9sIHNldHRpbmcgKi8KKworICAgICAgICAvKiBwcm90ZWN0aW9uIG1vZGUgKi8KKyAgICAgICAgaWYgKHdkLT5lbmFibGVQcm90ZWN0aW9uTW9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdkLT5lbmFibGVQcm90ZWN0aW9uTW9kZT09MikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBGb3JjZSBlbmFibGUgcHJvdGVjdGlvbjogc2VsZiBjdHMgICovCisgICAgICAgICAgICAgICAgbWFjQ3RybCAmPSAweEZGRkM7CisgICAgICAgICAgICAgICAgbWFjQ3RybCB8PSAyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogaWYgd2QtPmVuYWJsZVByb3RlY3Rpb25Nb2RlPTEgPT4gZm9yY2UgZGlzYWJsZSAqLworICAgICAgICAgICAgLyogaWYgd2QtPmVuYWJsZVByb3RlY3Rpb25Nb2RlPTAgPT4gYXV0byAqLworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworCisgICAgICAgICAgICAvKiBwcm90ZWN0aW9uIG1vZGUgKi8KKyAgICAgICAgICAgIGlmICh3ZC0+c3RhLmJQcm90ZWN0aW9uTW9kZSA9PSBUUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIEVuYWJsZSBTZWxmLUNUUyAqLworICAgICAgICAgICAgICAgIG1hY0N0cmwgJj0gMHhGRkZDOworICAgICAgICAgICAgICAgIG1hY0N0cmwgfD0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfQorCisgICAgaWYgKHdkLT50eE1DUyAhPSAweGZmKQorICAgIHsKKyAgICAgICAgLyogZml4ZWQgcmF0ZSAqLworCSAgICBwaHlDdHJsID0gKCh1MzJfdCl3ZC0+dHhNQ1M8PDE2KSArIHdkLT50eE1UOworICAgICAgICBtY3MgPSB3ZC0+dHhNQ1M7CisgICAgICAgIG10ID0gd2QtPnR4TVQ7CisgICAgfQorCisgICAgaWYgKG10ID09IDIpCisgICAgeworI2lmIDAKKyAgICAgICAgLyogSFQgUFQ6IDAgTWl4ZWQgbW9kZSAgICAxIEdyZWVuIGZpZWxkICovCisJICAgIGlmICh3ZC0+c3RhLnByZWFtYmxlVHlwZUhUID09IFpNX1BSRUFNQkxFX1RZUEVfR1JFRU5fRklFTEQpCisJICAgIHsKKyAgICAgICAgICAgIHBoeUN0cmwgfD0gMHg0OyAgICAgLyogQml0IDIgKi8KKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIC8qIEJhbmR3aWR0aCAqLworICAgICAgICBpZiAod2QtPnN0YS5odEN0cmxCYW5kd2lkdGggPT0gWk1fQkFORFdJRFRIXzQwTUhaKQorICAgICAgICB7CisgICAgICAgICAgICBwaHlDdHJsIHw9ICgweDgwPDwxNik7ICAvKiBCSVQgMjMgKi8KKyAgICAgICAgfQorI2lmIDAKKyAgICAgICAgLyogU1RCQyAqLworICAgICAgICBpZiAod2QtPnN0YS5odEN0cmxTVEJDPD0weDMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBoeUN0cmwgfD0gKHdkLT5zdGEuaHRDdHJsU1RCQzw8MjgpOyAgIC8qIEJJVCAyMyAqLworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgLyogU2hvcnQgR0kgKi8KKyAgICAgICAgaWYod2QtPnN0YS5odEN0cmxTRykKKyAgICAgICAgeworICAgICAgICAgICAgcGh5Q3RybCB8PSAoMHg4MDAwPDwxNik7ICAgICAgICAgLyogQklUIDMxICovCisgICAgICAgIH0KKworICAgICAgICAvKiBUQSAqLworICAgICAgICBpZiAoICgobWNzID49MHg4KSAmJiAobWNzPD0weGYpKSAgfHwgKHdkLT5zdGEuaHRDdHJsU1RCQykgKQorICAgICAgICB7CisgICAgICAgCSAgICBwaHlDdHJsIHw9IDB4MTgwMDsgICAgICAgICAgICAgICAvKiBCSVQgMTEgMTIgKi8KKyAgICAJfQorICAgIH0KKyAgICBlbHNlIGlmKG10ID09IDEpCisgICAgeworICAgICAgICAjaWYgMAorICAgICAgICAvL2J1ZyB0aGF0IGNhdXNlIE9GRE0gcmF0ZSBiZWNvbWUgZHVwbGljYXRlIGxlZ2FjeSByYXRlCisgICAgICAgIC8qIEJhbmR3aWR0aCAqLworICAgICAgICBpZiAod2QtPnN0YS5odEN0cmxCYW5kd2lkdGggPT0gWk1fQkFORFdJRFRIXzQwTUhaKQorICAgICAgICB7CisgICAgICAgICAgICBwaHlDdHJsIHw9ICgweDgwPDwxNik7ICAvKiBCSVQgMjMgKi8KKyAgICAgICAgICAgIG10ID0gMzsgICAgICAgICAgICAgICAgIC8qIGR1cGxpY2F0ZSBsZWdhY3kgKi8KKyAgICAgICAgICAgIHBoeUN0cmwgfD0gbXQ7CisgICAgICAgIH0KKyAgICAgICAgI2VuZGlmCisgICAgfQorICAgIGVsc2UgaWYobXQgPT0gMCkKKyAgICB7CisJLyogQ0NLIFBUOiBMZWdjeSBQcmVhbWJsZTogMSBsb25nIHByZWFtYmxlICAgIDIgc2hvcnQgcHJlYW1ibGUgKi8KKyAgICAgICAgaWYgKHdkLT5wcmVhbWJsZVR5cGVJblVzZWQgPT0gWk1fUFJFQU1CTEVfVFlQRV9TSE9SVCkKKyAgICAgICAgeworICAgIAkgICAgICAgLy9waHlDdHJsIHw9IDB4NDsgICAgLyogQklUIDIgKi8KKyAgICAJfQorICAgIH0KKworICAgIC8qIFRBICovCisgICAgaWYgKHdkLT5zdGEuZGVmYXVsdFRBKQorICAgIHsKKyAgICAgICAgcGh5Q3RybCB8PSAweDEwMDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBoeUN0cmwgfD0gMHgwODAwOworICAgIH0KKworICAgIC8vR2V0IEN1cnJlbnRUeFJhdGUgLS0gQ1dZYW5nKCspCisgICAgaWYgKChtdCA9PSAwKSB8fCAobXQgPT0gMSkpIC8vQixHIFJhdGUKKyAgICB7CisgICAgICAgIGlmIChtY3MgPCAxNikKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPkN1cnJlbnRUeFJhdGVLYnBzID0gemNJbmRleHRvUmF0ZUJHW21jc107CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAobXQgPT0gMikKKyAgICB7CisgICAgICAgIGlmIChtY3MgPCAxNikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdkLT5zdGEuaHRDdHJsQmFuZHdpZHRoID09IFpNX0JBTkRXSURUSF80ME1IWikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZigocGh5Q3RybCAmIDB4ODAwMDAwMDApICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBTaG9ydCBHSSA0MCBNSHogTUlNTyBSYXRlICovCisgICAgICAgICAgICAgICAgICAgIHdkLT5DdXJyZW50VHhSYXRlS2JwcyA9IHpjSW5kZXh0b1JhdGVONDBTW21jc107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIExvbmcgR0kgNDAgTUh6IE1JTU8gUmF0ZSAqLworICAgICAgICAgICAgICAgICAgICB3ZC0+Q3VycmVudFR4UmF0ZUticHMgPSB6Y0luZGV4dG9SYXRlTjQwTFttY3NdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZigocGh5Q3RybCAmIDB4ODAwMDAwMDApICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBTaG9ydCBHSSAyMCBNSHogTUlNTyBSYXRlICovCisgICAgICAgICAgICAgICAgICAgIHdkLT5DdXJyZW50VHhSYXRlS2JwcyA9IHpjSW5kZXh0b1JhdGVOMjBTW21jc107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIExvbmcgR0kgMjAgTUh6IE1JTU8gUmF0ZSAqLworICAgICAgICAgICAgICAgICAgICB3ZC0+Q3VycmVudFR4UmF0ZUticHMgPSB6Y0luZGV4dG9SYXRlTjIwTFttY3NdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vODAyLjExIGhlYWRlcihpbmNsdWRlIElWKSA9IChobGVuPDwxKS04CisgICAgLy9ldGhlcm5ldCBmcmFtZSA9IGxlbgorICAgIC8vc25hcCArIG1pYyA9IHBsdXNMZW4KKyAgICAvL2V0aGVybmV0IGhlYWRlciA9IG1pbnVzTGVuCisgICAgLy9pY3YgPSBpY3ZMZW4KKyAgICAvL2NyYzMyID0gNAorICAgIC8vbGVuZ3RoPTgwMi4xMSBoZWFkZXIrc25hcCsoZXRoZXJuZXQgZnJhbWUtZXRoZXJuZXQgaGVhZGVyKSttaWMraWN2K2NyYzMyCisgICAgaGVhZGVyWzBdID0gKChobGVuPDwxKS04KStwbHVzTGVuKyhsZW4tbWludXNMZW4pK2ljdkxlbis0OyAgLy9MZW5ndGgKKworICAgIC8vIGhlYWRlclswXSA6IE1QRFUgTGVuZ3RocworICAgIGlmICgoaGVhZGVyWzZdICYgMHgxKSAhPSAweDEpIC8vIFVuaWNhc3QgRnJhbWUKKyAgICB7CisgICAgICAgIGlmIChoZWFkZXJbMF0gPj0gd2QtPnJ0c1RocmVzaG9sZCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogRW5hYmxlIFJUUyAqLworICAgICAgICAgICAgbWFjQ3RybCB8PSAxOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCB3ZC0+c3RhLmVuY3J5TW9kZSA9PSBaTV9US0lQICkKKyAgICAgICAgdGtpcEZyYW1lT2Zmc2V0ID0gODsKKworICAgIGlmKCB3ZC0+c3RhLkVuYWJsZUhUICE9IDEgKQorICAgIHsgLy8gQWdncmVnYXRpb24gc2hvdWxkIG5vdCBiZSBmcmFnbWVudGVkICEKKyAgICAgICAgaWYgKCBoZWFkZXJbMF0gPiAoIHdkLT5mcmFnVGhyZXNob2xkICsgdGtpcEZyYW1lT2Zmc2V0ICkgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMDsgLy8gTmVlZCB0byBiZSBmcmFnbWVudGVkICEgIQorICAgICAgICB9CisgICAgfQorCisgICAgLy9pZiAoIHdkLT5zdGEuZW5jcnlNb2RlID09IFpNX1RLSVAgKQorICAgIC8veworICAgIC8vICAgIHptX2RlYnVnX21zZzEoImN0cmwgbGVuZ3RoID0gIiwgaGVhZGVyWzBdKTsKKyAgICAvL30KKworICAgIC8vTUFDIGNvbnRyb2wKKyAgICBpZiAocmF0ZVByb2JpbmdGbGFnICE9IDApCisgICAgeworICAgICAgICBtYWNDdHJsIHw9IDB4ODAwMDsKKyAgICB9CisgICAgaGVhZGVyWzFdID0gbWFjQ3RybDsKKyAgICAvL1BIWSBjb250cm9sIEwKKyAgICBoZWFkZXJbMl0gPSAodTE2X3QpICgocGh5Q3RybCYweGZmZmYpIHwgMHg3MDAgfCAoemNVcFRvQWNbdXAmMHg3XTw8MTMpKTsKKyAgICAvL1BIWSBjb250cm9sIEgKKyAgICBoZWFkZXJbM10gPSAodTE2X3QpICgocGh5Q3RybD4+MTYpIHwgMHg3MDApOworCisgICAgaWYgKHdkLT5lbmFibGVBZ2dyZWdhdGlvbikKKyAgICB7CisgICAgICAgIC8qIGZvcmNlIGVuYWJsZSBhZ2dyZWdhdGlvbiAqLworICAgICAgICBpZiAod2QtPmVuYWJsZUFnZ3JlZ2F0aW9uPT0yICYmICEoaGVhZGVyWzZdJjB4MSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgoKGhlYWRlclsyXSAmIDB4MykgPT0gMikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRW5hYmxlIGFnZ3JlZ2F0aW9uICovCisgICAgICAgICAgICAgICAgaGVhZGVyWzFdIHw9IDB4MjA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogaWYgd2QtPmVuYWJsZUFnZ3JlZ2F0aW9uPTEgPT4gZm9yY2UgZGlzYWJsZSAqLworICAgICAgICAvKiBpZiB3ZC0+ZW5hYmxlQWdncmVnYXRpb249MCA9PiBhdXRvICovCisgICAgfQorCisjaWZkZWYgWk1fRU5BQkxFX0FHR1JFR0FUSU9OCisgICAgaWYgKHdkLT5hZGRiYUNvbXBsZXRlKSB7CisgICAgICAgICNpZmRlZiBaTV9CWVBBU1NfQUdHUl9TQ0hFRFVMSU5HCisgICAgICAgIGlmICghKGhlYWRlcls2XSYweDEpICYmICFyYXRlUHJvYmluZ0ZsYWcgJiYgKHdkLT5lbmFibGVBZ2dyZWdhdGlvbiAhPSAxKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCgoaGVhZGVyWzJdICYgMHgzKSA9PSAyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBVbmljYXN0IGZyYW1lIHdpdGggSFQgcmF0ZSA9PiBFbmFibGUgYWdncmVnYXRpb24gKi8KKyAgICAgICAgICAgICAgICAvKiBXZSBvbmx5IHN1cHBvcnQgc29mdHdhcmUgZW5jcnlwdGlvbiBpbiBzaW5nbGUgcGFja2V0IG1vZGUgKi8KKyAgICAgICAgICAgICAgICBpZiAoKHdkLT5zdGEuU1dFbmNyeXB0RW5hYmxlICYgWk1fU1dfVEtJUF9FTkNSWV9FTikgPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAod2QtPnN0YS5TV0VuY3J5cHRFbmFibGUgJiBaTV9TV19XRVBfRU5DUllfRU4pID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBTZXQgYWdncmVnYXRpb24gZ3JvdXAgYml0cyBwZXIgQUMgKi8KKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyWzFdIHw9ICgweDIwIHwgKHpjVXBUb0FjW3VwJjB4N108PDEwKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy9pZiAod2QtPnN0YS5jdXJyZW50RnJlcXVlbmN5IDwgMzAwMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogaXNzdWU6IC1QQjQyIEVuYWJsZSBSVFMvQ1RTIHRvIHByZXZlbnQgT1dMIFR4IGhhbmcgdXAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoaXMgaXMgT3dsIEFwLCBlbmFibGUgUlRTL0NUUyBwcm90ZWN0ICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICh3ZC0+c3RhLmF0aE93bEFwID09IDEpIHx8ICh3ZC0+c3RhLlJUU0luQUdHTW9kZSA9PSBUUlVFKSApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyWzFdICY9IDB4ZmZmYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbMV0gfD0gMHgxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgUklGUyA6IHdvcmthcm91bmQgODU0VCBSVFMvQ1RTICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBCaXQxMyA6IFRJIGVuYWJsZSBSSUZTICovCisgICAgICAgICAgICAgICAgICAgICAgICAvL2hlYWRlclsxXSB8PSAweDIwMDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgI2Vsc2UKKyAgICAgICAgLyoKKyAgICAgICAgICogYWdncmVnYXRpb24gYW1wZHVJbmRpY2F0aW9uIGNvbnRyb2wKKyAgICAgICAgICovCisgICAgICAgIGlmIChhZ2dDb250cm9sICYmIGFnZ0NvbnRyb2wtPmFnZ0VuYWJsZWQpIHsKKyAgICAgICAgICAgIGlmICh3ZC0+ZW5hYmxlQWdncmVnYXRpb249PTAgJiYgIShoZWFkZXJbNl0mMHgxKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKChoZWFkZXJbMl0gJiAweDMpID09IDIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogRW5hYmxlIGFnZ3JlZ2F0aW9uICovCisgICAgICAgICAgICAgICAgICAgIGhlYWRlclsxXSB8PSAweDIwOworICAgICAgICAgICAgICAgICAgICBpZiAoWk1fQUdHX0xBU1RfTVBEVSA9PSBhZ2dDb250cm9sLT5hbXBkdUluZGljYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbMV0gfD0gMHg0MDAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMSgibm8gYWdnciwgaGVhZGVyWzJdJjB4MyA9ICIsaGVhZGVyWzJdICYgMHgzKQorICAgICAgICAgICAgICAgICAgICBhZ2dDb250cm9sLT5hZ2dFbmFibGVkID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJubyBhZ2dyLCB3ZC0+ZW5hYmxlQWdncmVnYXRpb24gPSAiLCB3ZC0+ZW5hYmxlQWdncmVnYXRpb24pOworICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzEoIm5vIGFnZ3IsICFoZWFkZXJbNl0mMHgxID0gIiwhKGhlYWRlcls2XSYweDEpKTsKKyAgICAgICAgICAgICAgICBhZ2dDb250cm9sLT5hZ2dFbmFibGVkID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAjZW5kaWYKKworICAgICAgICAjaWZkZWYgWk1fQUdHUl9CSVRfT04KKyAgICAgICAgaWYgKCEoaGVhZGVyWzZdJjB4MSkgJiYgIXJhdGVQcm9iaW5nRmxhZykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCgoaGVhZGVyWzJdICYgMHgzKSA9PSAyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBVbmljYXN0IGZyYW1lIHdpdGggSFQgcmF0ZSA9PiBFbmFibGUgYWdncmVnYXRpb24gKi8KKyAgICAgICAgICAgICAgICAvKiBTZXQgYWdncmVnYXRpb24gZ3JvdXAgYml0cyBwZXIgQUMgKi8KKyAgICAgICAgICAgICAgICBoZWFkZXJbMV0gfD0gKDB4MjAgfCAoemNVcFRvQWNbdXAmMHg3XTw8MTApKTsKKworICAgICAgICAgICAgICAgIC8vaWYgKHdkLT5zdGEuY3VycmVudEZyZXF1ZW5jeSA8IDMwMDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgUlRTL0NUUyB0byBwcmV2ZW50IE9XTCBUeCBoYW5nIHVwICovCisgICAgICAgICAgICAgICAgICAgIGhlYWRlclsxXSAmPSAweGZmZmM7CisgICAgICAgICAgICAgICAgICAgIGhlYWRlclsxXSB8PSAweDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICNlbmRpZgorICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIChobGVuPDwxKTsKK30KKworCit1MTZfdCB6ZlR4R2VuTW1IZWFkZXIoemRldl90KiBkZXYsIHU4X3QgZnJhbWVUeXBlLCB1MTZfdCogZHN0LAorICAgICAgICB1MTZfdCogaGVhZGVyLCB1MTZfdCBsZW4sIHpidWZfdCogYnVmLCB1MTZfdCB2YXAsIHU4X3QgZW5jcnlwdCkKK3sKKyAgICAvL3UxNl90IGJvZHlMZW47CisgICAgdThfdCAgaGxlbiA9IDMyOyAgICAgICAgLy8gTUFDIGN0cmwgKyBQSFkgY3RybCArIDgwMi4xMSBNTSBoZWFkZXIKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICAvKiBHZW5lcmF0ZSBjb250cm9sIHNldHRpbmcgKi8KKyAgICAvL2JvZHlMZW4gPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsKKyAgICBoZWFkZXJbMF0gPSAyNCtsZW4rNDsgICAvL0xlbmd0aAorICAgIGlmICgoZHN0WzBdICYgMHgxKSAhPSAwKSAvL0Jyb2FkY2FzdCwgbXVsdGljYXN0IGZyYW1lcworICAgIHsKKyAgICAgICAgaGVhZGVyWzFdID0gMHhjOyAgICAgICAgICAgIC8vTUFDIGNvbnRyb2wsIGJhY2tvZmYgKyBub2FjaworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBoZWFkZXJbMV0gPSAweDg7ICAgICAgICAgICAgLy9NQUMgY29udHJvbCwgYmFja29mZiArIChhY2spCisgICAgfQorICAgIC8qIER1YWxiYW5kIE1hbmFnZW1lbnQgZnJhbWUgdHggUmF0ZSAqLworICAgIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCkKKyAgICB7CisgICAgICAgIGlmICh3ZC0+ZnJlcXVlbmN5IDwgMzAwMCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ0NLIDFNICovCisgICAgICAgICAgICBoZWFkZXJbMl0gPSAweDBmMDA7ICAgICAgICAgIC8vUEhZIGNvbnRyb2wgTAorICAgICAgICAgICAgaGVhZGVyWzNdID0gMHgwMDAwOyAgICAgICAgICAvL1BIWSBjb250cm9sIEgKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENDSyA2TSAqLworICAgICAgICAgICAgaGVhZGVyWzJdID0gMHgwZjAxOyAgICAgICAgICAvL1BIWSBjb250cm9sIEwKKyAgICAgICAgICAgIGhlYWRlclszXSA9IDB4MDAwQjsgICAgICAgICAgLy9QSFkgY29udHJvbCBICisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHdkLT5zdGEuY3VycmVudEZyZXF1ZW5jeSA8IDMwMDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENDSyAyTSAqLworICAgICAgICAgICAgaGVhZGVyWzJdID0gMHgwZjAwOyAgICAgICAgICAvL1BIWSBjb250cm9sIEwKKyAgICAgICAgICAgIGhlYWRlclszXSA9IDB4MDAwMTsgICAgICAgICAgLy9QSFkgY29udHJvbCBICisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBDQ0sgNk0gKi8KKyAgICAgICAgICAgIGhlYWRlclsyXSA9IDB4MGYwMTsgICAgICAgICAgLy9QSFkgY29udHJvbCBMCisgICAgICAgICAgICBoZWFkZXJbM10gPSAweDAwMEI7ICAgICAgICAgIC8vUEhZIGNvbnRyb2wgSAorICAgICAgICB9CisgICAgfQorICAgIC8qIEdlbmVyYXRlIFdMQU4gaGVhZGVyICovCisgICAgLyogRnJhbWUgY29udHJvbCAqLworICAgIGhlYWRlcls0KzBdID0gZnJhbWVUeXBlOworICAgIC8qIER1cmF0aW9uICovCisgICAgaGVhZGVyWzQrMV0gPSAwOworCisgICAgaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFKQorICAgIHsKKyAgICAgICAgaWYgKCBmcmFtZVR5cGUgPT0gWk1fV0xBTl9GUkFNRV9UWVBFX1BST0JFUkVRICkKKyAgICAgICAgeworICAgICAgICAgICAgaGVhZGVyWzQrOF0gPSAweEZGRkY7CisgICAgICAgICAgICBoZWFkZXJbNCs5XSA9IDB4RkZGRjsKKyAgICAgICAgICAgIGhlYWRlcls0KzEwXSA9IDB4RkZGRjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggZnJhbWVUeXBlID09IFpNX1dMQU5fRlJBTUVfVFlQRV9CQSApIHsKKyAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGhlYWRlcls0KzhdID0gd2QtPnN0YS5ic3NpZFswXTsKKyAgICAgICAgICAgIGhlYWRlcls0KzldID0gd2QtPnN0YS5ic3NpZFsxXTsKKyAgICAgICAgICAgIGhlYWRlcls0KzEwXSA9IHdkLT5zdGEuYnNzaWRbMl07CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfUFNFVURPKQorICAgIHsKKyAgICAgICAgLyogQWRkcmVzcyAzID0gMDA6MDA6MDA6MDA6MDA6MDAgKi8KKyAgICAgICAgaGVhZGVyWzQrOF0gPSAwOworICAgICAgICBoZWFkZXJbNCs5XSA9IDA7CisgICAgICAgIGhlYWRlcls0KzEwXSA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lCU1MpCisgICAgeworICAgICAgICBoZWFkZXJbNCs4XSA9IHdkLT5zdGEuYnNzaWRbMF07CisgICAgICAgIGhlYWRlcls0KzldID0gd2QtPnN0YS5ic3NpZFsxXTsKKyAgICAgICAgaGVhZGVyWzQrMTBdID0gd2QtPnN0YS5ic3NpZFsyXTsKKworICAgICAgICBpZiAoIGZyYW1lVHlwZSA9PSBaTV9XTEFOX0ZSQU1FX1RZUEVfQVRJTSApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHB1dCBBVElNIHRvIHF1ZXVlIDV0aCAqLworICAgICAgICAgICAgLy9oZWFkZXJbMl0gfD0gKFpNX0JJVF8xM3xaTV9CSVRfMTQpOworICAgICAgICAgICAgaGVhZGVyWzJdIHw9IFpNX0JJVF8xNTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCkKKyAgICB7CisgICAgICAgIC8qIEFkZHJlc3MgMyA9IEJTU0lEICovCisgICAgICAgIGhlYWRlcls0KzhdID0gd2QtPm1hY0FkZHJbMF07CisgICAgICAgIGhlYWRlcls0KzldID0gd2QtPm1hY0FkZHJbMV07CisjaWZkZWYgWk1fVkFQTU9ERV9NVUxUSUxFX1NTSUQKKyAgICAgICAgaGVhZGVyWzQrMTBdID0gd2QtPm1hY0FkZHJbMl07IC8vTXVsdGlwbGUgU1NJRAorI2Vsc2UKKyAgICAgICAgaGVhZGVyWzQrMTBdID0gd2QtPm1hY0FkZHJbMl0gKyAodmFwPDw4KTsgLy9WQVAKKyNlbmRpZgorICAgICAgICAvL2lmIGluIHNjYW4sIG11c3Qgc2V0IGFkZHJlc3MgMyB0byBicm9hZGNhc3QgYmVjYXVzZSBvZiBzb21lIGFwIHdvdWxkIGNhcmUgdGhpcworICAgICAgICAvL2lmICgod2QtPmhlYXJ0QmVhdE5vdGlmaWNhdGlvbiAmIFpNX0JTU0lEX0xJU1RfU0NBTikKKyAgICAgICAgLy8gICAgICAgID09IFpNX0JTU0lEX0xJU1RfU0NBTikKKyAgICAgICAgLy9pZiBGcmFtZVR5cGUgaXMgUHJvYmUgUmVxdWVzdCwgQWRkcmVzczMgc2hvdWxkIGJlIGJvcmFkY2FzdAorICAgICAgICBpZiAoZnJhbWVUeXBlID09IFpNX1dMQU5fRlJBTUVfVFlQRV9QUk9CRVJFUSkKKyAgICAgICAgeworICAgICAgICAgICAgaGVhZGVyWzQrOF0gPSAweEZGRkY7CisgICAgICAgICAgICBoZWFkZXJbNCs5XSA9IDB4RkZGRjsKKyAgICAgICAgICAgIGhlYWRlcls0KzEwXSA9IDB4RkZGRjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEFkZHJlc3MgMSA9IERBICovCisgICAgaGVhZGVyWzQrMl0gPSBkc3RbMF07CisgICAgaGVhZGVyWzQrM10gPSBkc3RbMV07CisgICAgaGVhZGVyWzQrNF0gPSBkc3RbMl07CisKKyAgICAvKiBBZGRyZXNzIDIgPSBTQSAqLworICAgIGhlYWRlcls0KzVdID0gd2QtPm1hY0FkZHJbMF07CisgICAgaGVhZGVyWzQrNl0gPSB3ZC0+bWFjQWRkclsxXTsKKyAgICBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApCisgICAgeworI2lmZGVmIFpNX1ZBUE1PREVfTVVMVElMRV9TU0lECisgICAgICAgIGhlYWRlcls0KzddID0gd2QtPm1hY0FkZHJbMl07IC8vTXVsdGlwbGUgU1NJRAorI2Vsc2UKKyAgICAgICAgaGVhZGVyWzQrN10gPSB3ZC0+bWFjQWRkclsyXSArICh2YXA8PDgpOyAvL1ZBUAorI2VuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGhlYWRlcls0KzddID0gd2QtPm1hY0FkZHJbMl07CisgICAgfQorCisgICAgLyogU2VxdWVuY2UgQ29udHJvbCAqLworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgaGVhZGVyWzQrMTFdID0gKCh3ZC0+bW1zZXErKyk8PDQpOworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBpZiggZnJhbWVUeXBlID09IFpNX1dMQU5fRlJBTUVfVFlQRV9RT1NfTlVMTCApCisgICAgeworICAgICAgICAvKlFvcyBDb250cm9sKi8KKyAgICAgICAgaGVhZGVyWzQrMTJdID0gMHgwOworICAgICAgICBobGVuKz0yOworICAgICAgICBoZWFkZXJbMF0rPTI7CisgICAgfQorCisgICAgaWYgKCBlbmNyeXB0ICkKKyAgICB7CisgICAgICAgIGlmICggd2QtPnN0YS53ZXBTdGF0dXMgPT0gWk1fRU5DUllQVElPTl9XRVBfRU5BQkxFRCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggKHdkLT5zdGEuZW5jcnlNb2RlID09IFpNX1dFUDY0KXx8CisgICAgICAgICAgICAgICAgICh3ZC0+c3RhLmVuY3J5TW9kZSA9PSBaTV9XRVAxMjgpfHwKKyAgICAgICAgICAgICAgICAgKHdkLT5zdGEuZW5jcnlNb2RlID09IFpNX1dFUDI1NikgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhlYWRlcls0XSB8PSAweDQwMDA7CisgICAgICAgICAgICAgICAgaGVhZGVyWzE2XSA9IDB4MDsgICAvL0lWCisgICAgICAgICAgICAgICAgaGVhZGVyWzE3XSA9IDB4MDsgLy9JVgorICAgICAgICAgICAgICAgIGhlYWRlclsxN10gfD0gKCgodTE2X3QpIHdkLT5zdGEua2V5SWQpIDw8IDE0KTsKKyAgICAgICAgICAgICAgICBobGVuICs9IDQ7CisKKyAgICAgICAgICAgICAgICBoZWFkZXJbMF0gKz0gODsgICAgICAgICAvLyBpY3ZMZW4gPSA0OworICAgICAgICAgICAgICAgIGhlYWRlclsxXSB8PSAweDQwOyAgICAgIC8vIGVuYWJsZSBlbmNyeXB0aW9uIG9uIG1hY0N0cmwKKyAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBFbmFibGUgSFcgZHVyYXRpb24KKyAgICBpZiAoIGZyYW1lVHlwZSAhPSBaTV9XTEFOX0ZSQU1FX1RZUEVfUFNQT0xMICkKKyAgICB7CisgICAgICAgIGhlYWRlclsxXSB8PSAweDIwMDsKKyAgICB9CisKKyAgICByZXR1cm4gaGxlbjsKK30KKwordm9pZCB6ZkluaXRNYWNBcE1vZGUoemRldl90KiBkZXYpCit7CisgICAgdTE2X3QgaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHpmSHBFbmFibGVCZWFjb24oZGV2LCBaTV9NT0RFX0FQLCAod2QtPmJlYWNvbkludGVydmFsL3dkLT5hcC52YXBOdW1iZXIpLCAxLCAwKTsKKworICAgIC8qIEFQIG1vZGUgKi8KKyAgICB6ZkhwU2V0QXBTdGFNb2RlKGRldiwgWk1fSEFMXzgwMjExX01PREVfQVApOworCisgICAgLyogVkFQIHRlc3QgY29kZSAqLworICAgIC8qIEFQICsgVkFQIG1vZGUgKi8KKyAgICBpZiAod2QtPmFwLnZhcE51bWJlciA+PSAyKQorICAgIHsKKyAgICAgICAgZm9yIChpPTE7IGk8Wk1fTUFYX0FQX1NVUFBPUlQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCgod2QtPmFwLmFwQml0bWFwID4+IGkpICYgMHgxKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUxNl90IG1hY1szXTsKKyAgICAgICAgICAgICAgICBtYWNbMF0gPSB3ZC0+bWFjQWRkclswXTsKKyAgICAgICAgICAgICAgICBtYWNbMV0gPSB3ZC0+bWFjQWRkclsxXTsKKyNpZmRlZiBaTV9WQVBNT0RFX01VTFRJTEVfU1NJRAorICAgICAgICAgICAgICAgIG1hY1syXSA9IHdkLT5tYWNBZGRyWzJdOyAvL011bHRpcGxlIFNTSUQKKyNlbHNlCisgICAgICAgICAgICAgICAgbWFjWzJdID0gd2QtPm1hY0FkZHJbMl0gKyAoaTw8OCk7IC8vVkFQCisjZW5kaWYKKyAgICAgICAgICAgICAgICB6ZkhwU2V0TWFjQWRkcmVzcyhkZXYsIG1hYywgaSk7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGJhc2ljIHJhdGUgc2V0dGluZyAqLworICAgIHpmSHBTZXRCYXNpY1JhdGVTZXQoZGV2LCB3ZC0+YlJhdGVCYXNpYywgd2QtPmdSYXRlQmFzaWMpOworCisgICAgLyogU2V0IFR4UXMgQ1dNSU4sIENXTUFYLCBBSUZTIGFuZCBUWE8gdG8gV01FIEFQIGRlZmF1bHQuICovCisgICAgemZVcGRhdGVEZWZhdWx0UW9zUGFyYW1ldGVyKGRldiwgMSk7CisKKyAgICByZXR1cm47Cit9CisKK3UxNl90IHpmQ2hHZXROZXh0Q2hhbm5lbCh6ZGV2X3QqIGRldiwgdTE2X3QgZnJlcXVlbmN5LCB1OF90KiBwYlBhc3NpdmUpCit7CisgICAgdThfdCAgIGk7CisgICAgdThfdCAgIGJQYXNzaXZlOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLyogQXZvaWQgTlVMTCB2YWx1ZSAqLworICAgIGlmICggcGJQYXNzaXZlID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcGJQYXNzaXZlID0gJmJQYXNzaXZlOworICAgIH0KKworICAgIGZvciggaT0wOyBpPHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250OyBpKysgKQorICAgIHsKKyAgICAgICAgaWYgKCB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5jaGFubmVsID09IGZyZXF1ZW5jeSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggaSA9PSAod2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxDbnQtMSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5jaGFubmVsRmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgJiBaTV9SRUdfRkxBR19DSEFOTkVMX1BBU1NJVkUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYlBhc3NpdmUgPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYlBhc3NpdmUgPSBGQUxTRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW2ldLmNoYW5uZWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMHhmZmZmOworfQorCit1MTZfdCB6ZkNoR2V0Rmlyc3RDaGFubmVsKHpkZXZfdCogZGV2LCB1OF90KiBwYlBhc3NpdmUpCit7CisgICAgdThfdCAgIGJQYXNzaXZlOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLyogQXZvaWQgTlVMTCB2YWx1ZSAqLworICAgIGlmICggcGJQYXNzaXZlID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcGJQYXNzaXZlID0gJmJQYXNzaXZlOworICAgIH0KKworICAgaWYgKCB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFswXS5jaGFubmVsRmxhZ3MgJiBaTV9SRUdfRkxBR19DSEFOTkVMX1BBU1NJVkUgKQorICAgIHsKKyAgICAgICAgKnBiUGFzc2l2ZSA9IFRSVUU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpwYlBhc3NpdmUgPSBGQUxTRTsKKyAgICB9CisKKyAgICByZXR1cm4gd2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbMF0uY2hhbm5lbDsKK30KKwordTE2X3QgemZDaEdldEZpcnN0MkdoekNoYW5uZWwoemRldl90KiBkZXYpCit7CisgICAgdThfdCAgICBpOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgZm9yKCBpPTA7IGk8d2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxDbnQ7IGkrKyApCisgICAgeworICAgICAgICBpZiAoIHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW2ldLmNoYW5uZWwgPCAzMDAwICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogZmluZCB0aGUgZmlyc3QgMkdoeiBjaGFubmVsICovCisgICAgICAgICAgICByZXR1cm4gd2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0uY2hhbm5lbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENhbiBub3QgZmluZCBhbnkgMkdoeiBjaGFubmVsICovCisgICAgcmV0dXJuIDA7Cit9CisKK3UxNl90IHpmQ2hHZXRGaXJzdDVHaHpDaGFubmVsKHpkZXZfdCogZGV2KQoreworICAgIHU4X3QgICAgaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGZvciggaT0wOyBpPHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250OyBpKysgKQorICAgIHsKKyAgICAgICAgaWYgKCB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5jaGFubmVsID4gMzAwMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIGZpbmQgdGhlIGZpcnN0IDVHaHogY2hhbm5lbCAqLworICAgICAgICAgICAgcmV0dXJuIHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW2ldLmNoYW5uZWw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDYW4gbm90IGZpbmQgYW55IDVHaHogY2hhbm5lbCAqLworICAgIHJldHVybiAwOworfQorCit1MTZfdCB6ZkNoR2V0TGFzdENoYW5uZWwoemRldl90KiBkZXYsIHU4X3QqIHBiUGFzc2l2ZSkKK3sKKyAgICB1OF90ICAgYlBhc3NpdmU7CisgICAgdThfdCAgIENoYW5uZWxJbmRleDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIENoYW5uZWxJbmRleCA9IHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250LTE7CisKKyAgICAvKiBBdm9pZCBOVUxMIHZhbHVlICovCisgICAgaWYgKCBwYlBhc3NpdmUgPT0gTlVMTCApCisgICAgeworICAgICAgICBwYlBhc3NpdmUgPSAmYlBhc3NpdmU7CisgICAgfQorCisgICAgaWYgKCB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtDaGFubmVsSW5kZXhdLmNoYW5uZWxGbGFncworICAgICAgICAgICAgJiBaTV9SRUdfRkxBR19DSEFOTkVMX1BBU1NJVkUgKQorICAgIHsKKyAgICAgICAgKnBiUGFzc2l2ZSA9IFRSVUU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpwYlBhc3NpdmUgPSBGQUxTRTsKKyAgICB9CisKKyAgICByZXR1cm4gd2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbQ2hhbm5lbEluZGV4XS5jaGFubmVsOworfQorCit1MTZfdCB6ZkNoR2V0TGFzdDVHaHpDaGFubmVsKHpkZXZfdCogZGV2KQoreworICAgIHU4X3QgICAgaTsKKyAgICB1MTZfdCAgIGxhc3Q1R2h6ZnJlcXVlbmN5OworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgbGFzdDVHaHpmcmVxdWVuY3kgPSAwOworICAgIGZvciggaT0wOyBpPHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250OyBpKysgKQorICAgIHsKKyAgICAgICAgaWYgKCB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5jaGFubmVsID4gMzAwMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGxhc3Q1R2h6ZnJlcXVlbmN5ID0gd2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0uY2hhbm5lbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBsYXN0NUdoemZyZXF1ZW5jeTsKK30KKworLyogZnJlcUJhbmQgPSAwID0+IGF1dG8gY2hlY2sgICAqLworLyogICAgICAgICAgPSAxID0+IDIuNCBHSHogYmFuZCAqLworLyogICAgICAgICAgPSAyID0+IDUgR0h6IGJhbmQgICAqLwordTE2X3QgemZDaE51bVRvRnJlcSh6ZGV2X3QqIGRldiwgdThfdCBjaCwgdThfdCBmcmVxQmFuZCkKK3sKKyAgICB1MTZfdCBmcmVxID0gMHhmZmZmOworCisgICAgaWYgKCBmcmVxQmFuZCA9PSAwICkKKyAgICB7CisgICAgICAgIGlmIChjaCA+IDE0KQorICAgICAgICB7ICAgLyogYWRhcHRlciBpcyBhdCA1IEdIeiBiYW5kICovCisgICAgICAgICAgICBmcmVxQmFuZCA9IDI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmcmVxQmFuZCA9IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIGZyZXFCYW5kID09IDIgKQorICAgIHsgICAvKiB0aGUgY2hhbm5lbCBiZWxvbmdzIHRvIDUgR0h6IGJhbmQgKi8KKyAgICAgICAgaWYgKCAoY2ggPj0gMTg0KSYmKGNoIDw9IDE5NikgKQorICAgICAgICB7CisgICAgICAgICAgICBmcmVxID0gNDAwMCArIGNoKjU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmcmVxID0gNTAwMCArIGNoKjU7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsgICAvKiB0aGUgY2hhbm5lbCBiZWxvbmdzIHRvIDIuNCBHSHogYmFuZCAqLworICAgICAgICBpZiAoIGNoID09IDE0ICkKKyAgICAgICAgeworICAgICAgICAgICAgZnJlcSA9IFpNX0NIX0dfMTQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmcmVxID0gWk1fQ0hfR18xICsgKGNoLTEpKjU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZnJlcTsKK30KKwordThfdCB6ZkNoRnJlcVRvTnVtKHUxNl90IGZyZXEsIHU4X3QqIHBiSXM1R0JhbmQpCit7CisgICAgdThfdCAgIGNoOworICAgIHU4X3QgICBJczVHQmFuZDsKKworICAgIC8qIHRvIGF2b2lkIE5VTEwgdmFsdWUgKi8KKyAgICBpZiAoIHBiSXM1R0JhbmQgPT0gTlVMTCApCisgICAgeworICAgICAgICBwYklzNUdCYW5kID0gJklzNUdCYW5kOworICAgIH0KKworICAgICpwYklzNUdCYW5kID0gRkFMU0U7CisKKyAgICBpZiAoIGZyZXEgPT0gWk1fQ0hfR18xNCApCisgICAgeworICAgICAgICBjaCA9IDE0OworICAgIH0KKyAgICBlbHNlIGlmICggZnJlcSA8IDQwMDAgKQorICAgIHsKKyAgICAgICAgY2ggPSAoZnJlcSAtIFpNX0NIX0dfMSkgLyA1ICsgMTsKKyAgICB9CisgICAgZWxzZSBpZiAoIGZyZXEgPCA1MDAwICkKKyAgICB7CisgICAgICAgIGNoID0gKGZyZXEgLSA0MDAwKSAvIDU7CisgICAgICAgICpwYklzNUdCYW5kID0gVFJVRTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY2ggPSAoZnJlcSAtIDUwMDApIC8gNTsKKyAgICAgICAgKnBiSXM1R0JhbmQgPSBUUlVFOworICAgIH0KKworICAgIHJldHVybiBjaDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jbW0uYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jbW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzQzNzlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NtbS5jCkBAIC0wLDAgKzEsMjE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE1vZHVsZSBOYW1lIDogbW0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQWJzdHJhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBUaGlzIG1vZHVsZSBjb250YWlucyBjb21tb24gZnVuY3Rpb25zIGZvciBoYW5kbGUgbWFuYWdlbWVudCAgICAgKi8KKy8qICAgICAgZnJhbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE5PVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJjcHJlY29tcC5oIgorI2luY2x1ZGUgIi4uL2hhbC9ocHJlZy5oIgorCisvKiBUT0RPIDogcHV0IGFsbCBjb25zdGFudCB0YWJsZXMgdG8gYSBmaWxlICovCitjb25zdCB1OF90IHpnMTFiUmF0ZVRibFs0XSA9IHsyLCA0LCAxMSwgMjJ9OworY29uc3QgdThfdCB6ZzExZ1JhdGVUYmxbOF0gPSB7MTIsIDE4LCAyNCwgMzYsIDQ4LCA3MiwgOTYsIDEwOH07CisKKy8qIDB4ZmYgPT4gZWxlbWVudCBkb2VzIG5vdCBleGlzdCAqLworY29uc3QgdThfdCB6Z0VsZW1lbnRPZmZzZXRUYWJsZVtdID0KK3sKKyAgICA0LCAgICAgIC8qICAwIDogYXNvYyByZXEgKi8KKyAgICA2LCAgICAgIC8qICAxIDogYXNvYyByc3AgKi8KKyAgICAxMCwgICAgIC8qICAyIDogcmVhc29jIHJlcSovCisgICAgNiwgICAgICAvKiAgMyA6IHJlYXNvYyByc3AgKi8KKyAgICAwLCAgICAgIC8qICA0IDogcHJvYmUgcmVxICovCisgICAgMTIsICAgICAvKiAgNSA6IHByb2JlIHJzcCAqLworICAgIDB4ZmYsICAgLyogIDYgOiByZXNlcnZlZCAqLworICAgIDB4ZmYsICAgLyogIDcgOiByZXNlcnZlZCAqLworICAgIDEyLCAgICAgLyogIDggOiBiZWFjb24gKi8KKyAgICA0LCAgICAgIC8qICA5IDogQVRJTSAqLworICAgIDB4ZmYsICAgLyogMTAgOiBkaXNhc29jICovCisgICAgNiwgICAgICAvKiAxMSA6IGF1dGggKi8KKyAgICAweGZmLCAgIC8qIDEyIDogZGVhdXRoICovCisgICAgNCwgICAgICAvKiAxMyA6IGFjdGlvbiAqLworICAgIDB4ZmYsICAgLyogMTQgOiByZXNlcnZlZCAqLworICAgIDB4ZmYsICAgLyogMTUgOiByZXNlcnZlZCAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmRmluZEVsZW1lbnQgICAgICAgICAgICAgICAqLworLyogICAgICBGaW5kIGEgc3BlY2lmaWMgZWxlbWVudCBpbiBtYW5hZ2VtZW50IGZyYW1lICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmIDogbWFuYWdlbWVudCBmcmFtZSBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGVpZCA6IHRhcmdldCBlbGVtZW50IGlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ5dGUgb2Zmc2V0IG9mIHRhcmdldCBlbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBvciAweGZmZmYgaWYgbm90IGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNS4xMCAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZGaW5kRWxlbWVudCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHU4X3QgZWlkKQoreworICAgIHU4X3Qgc3ViVHlwZTsKKyAgICB1MTZfdCBvZmZzZXQ7CisgICAgdTE2X3QgYnVmTGVuOworICAgIHUxNl90IGVsZW47CisgICAgdThfdCBpZCwgSFRFaWQ9MDsKKyAgICB1OF90IG91aVs0XSA9IHsweDAwLCAweDUwLCAweGYyLCAweDAxfTsKKyAgICB1OF90IG91aTExblszXSA9IHsweDAwLDB4OTAsMHg0Q307CisgICAgdThfdCBIVFR5cGUgPSAwOworCisgICAgLyogR2V0IG9mZnNldCBvZiBmaXJzdCBlbGVtZW50ICovCisgICAgc3ViVHlwZSA9ICh6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAwKSA+PiA0KTsKKyAgICBpZiAoKG9mZnNldCA9IHpnRWxlbWVudE9mZnNldFRhYmxlW3N1YlR5cGVdKSA9PSAweGZmKQorICAgIHsKKyAgICAgICAgem1fYXNzZXJ0KDApOworICAgIH0KKworICAgIC8qIFBsdXMgd2xhbiBoZWFkZXIgKi8KKyAgICBvZmZzZXQgKz0gMjQ7CisKKyAgICAvLyBqaGxlZSBIVCAwCisKKyAgICBpZiAoKGVpZCA9PSBaTV9XTEFOX0VJRF9IVF9DQVBBQklMSVRZKSB8fAorICAgICAgICAoZWlkID09IFpNX1dMQU5fRUlEX0VYVEVOREVEX0hUX0NBUEFCSUxJVFkpKQorICAgIHsKKyAgICAgICAgSFRFaWQgPSBlaWQ7CisgICAgICAgIGVpZCA9IFpNX1dMQU5fRUlEX1dQQV9JRTsKKyAgICAgICAgSFRUeXBlID0gMTsKKyAgICB9CisKKworICAgIGJ1ZkxlbiA9IHpmd0J1ZkdldFNpemUoZGV2LCBidWYpOworICAgIC8qIFNlYXJjaCBsb29wICovCisgICAgd2hpbGUgKChvZmZzZXQrMik8YnVmTGVuKSAgICAgICAgICAgICAgICAgICAvLyBpbmNsdWRpbmcgZWxlbWVudCBJRCBhbmQgbGVuZ3RoICgyYnl0ZXMpCisgICAgeworICAgICAgICAvKiBTZWFyY2ggdGFyZ2V0IGVsZW1lbnQgKi8KKyAgICAgICAgaWYgKChpZCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCkpID09IGVpZCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQmluZ28gKi8KKyAgICAgICAgICAgIGlmICgoZWxlbiA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKSk+KGJ1ZkxlbiAtIG9mZnNldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRWxlbWVudCBsZW5ndGggZXJyb3IgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gMHhmZmZmOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGVsZW4gPT0gMCAmJiBlaWQgIT0gWk1fV0xBTl9FSURfU1NJRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBFbGVtZW50IGxlbmd0aCBlcnJvciAqLworICAgICAgICAgICAgICAgIHJldHVybiAweGZmZmY7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggZWlkID09IFpNX1dMQU5fRUlEX1dQQV9JRSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogYXZvaWQgc3RhIHRvIGJlIHRob3VnaHQgdXNlIDExbiB3aGVuIGZpbmQgYSBXUEFfSUUgKi8KKyAgICAgICAgICAgICAgICBpZiAoIChIVFR5cGUgPT0gMCkgJiYgemZSeEJ1ZmZlckVxdWFsVG9TdHIoZGV2LCBidWYsIG91aSwgb2Zmc2V0KzIsIDQpICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gamhsZWUgSFQgMAorICAgICAgICAgICAgICAgIC8vIENXWWFuZygrKQorCisgICAgICAgICAgICAgICAgaWYgKChIVFR5cGUgPT0gMSkgJiYgKCB6ZlJ4QnVmZmVyRXF1YWxUb1N0cihkZXYsIGJ1Ziwgb3VpMTFuLCBvZmZzZXQrMiwgMykgKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICggem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzUpID09IEhURWlkICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldCArIDU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIEFkdmFuY2UgdG8gbmV4dCBlbGVtZW50ICovCisgICAgICAgICNpZiAxCisgICAgICAgIGVsZW4gPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMSk7CisgICAgICAgICNlbHNlCisgICAgICAgIGlmICgoZWxlbiA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDB4ZmZmZjsKKyAgICAgICAgfQorICAgICAgICAjZW5kaWYKKworICAgICAgICBvZmZzZXQgKz0gKGVsZW4rMik7CisgICAgfQorICAgIHJldHVybiAweGZmZmY7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmRmluZFdpZmlFbGVtZW50ICAgICAgICAgICAqLworLyogICAgICBGaW5kIGEgc3BlY2lmaWMgV2lmaSBlbGVtZW50IGluIG1hbmFnZW1lbnQgZnJhbWUgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmIDogbWFuYWdlbWVudCBmcmFtZSBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHR5cGUgOiBPVUkgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBzdWJUeXBlIDogT1VJIHN1YnR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBieXRlIG9mZnNldCBvZiB0YXJnZXQgZWxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgb3IgMHhmZmZmIGlmIG5vdCBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDYuMSAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90IHpmRmluZFdpZmlFbGVtZW50KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdThfdCB0eXBlLCB1OF90IHN1YnR5cGUpCit7CisgICAgdThfdCBzdWJUeXBlOworICAgIHUxNl90IG9mZnNldDsKKyAgICB1MTZfdCBidWZMZW47CisgICAgdTE2X3QgZWxlbjsKKyAgICB1OF90IGlkOworICAgIHU4X3QgdG1wOworCisgICAgLyogR2V0IG9mZnNldCBvZiBmaXJzdCBlbGVtZW50ICovCisgICAgc3ViVHlwZSA9ICh6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAwKSA+PiA0KTsKKworICAgIGlmICgob2Zmc2V0ID0gemdFbGVtZW50T2Zmc2V0VGFibGVbc3ViVHlwZV0pID09IDB4ZmYpCisgICAgeworICAgICAgICB6bV9hc3NlcnQoMCk7CisgICAgfQorCisgICAgLyogUGx1cyB3bGFuIGhlYWRlciAqLworICAgIG9mZnNldCArPSAyNDsKKworICAgIGJ1ZkxlbiA9IHpmd0J1ZkdldFNpemUoZGV2LCBidWYpOworICAgIC8qIFNlYXJjaCBsb29wICovCisgICAgd2hpbGUgKChvZmZzZXQrMik8YnVmTGVuKSAgICAgICAgICAgICAgICAgICAvLyBpbmNsdWRpbmcgZWxlbWVudCBJRCBhbmQgbGVuZ3RoICgyYnl0ZXMpCisgICAgeworICAgICAgICAvKiBTZWFyY2ggdGFyZ2V0IGVsZW1lbnQgKi8KKyAgICAgICAgaWYgKChpZCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCkpID09IFpNX1dMQU5fRUlEX1dJRklfSUUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEJpbmdvICovCisgICAgICAgICAgICBpZiAoKGVsZW4gPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMSkpPihidWZMZW4gLSBvZmZzZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIEVsZW1lbnQgbGVuZ3RoIGVycm9yICovCisgICAgICAgICAgICAgICAgcmV0dXJuIDB4ZmZmZjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBlbGVuID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAweGZmZmY7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgoKHRtcCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsyKSkgPT0gMHgwMCkKKyAgICAgICAgICAgICAgICAgICAgJiYgKCh0bXAgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMykpID09IDB4NTApCisgICAgICAgICAgICAgICAgICAgICYmICgodG1wID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzQpKSA9PSAweEYyKQorICAgICAgICAgICAgICAgICAgICAmJiAoKHRtcCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs1KSkgPT0gdHlwZSkpCisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIHN1YnR5cGUgIT0gMHhmZiApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoICh0bXAgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNikpID09IHN1YnR5cGUgICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKiBBZHZhbmNlIHRvIG5leHQgZWxlbWVudCAqLworICAgICAgICBpZiAoKGVsZW4gPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMSkpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAweGZmZmY7CisgICAgICAgIH0KKyAgICAgICAgb2Zmc2V0ICs9IChlbGVuKzIpOworICAgIH0KKyAgICByZXR1cm4gMHhmZmZmOworfQorCit1MTZfdCB6ZlJlbW92ZUVsZW1lbnQoemRldl90KiBkZXYsIHU4X3QqIGJ1ZiwgdTE2X3Qgc2l6ZSwgdThfdCBlaWQpCit7CisgICAgdTE2X3Qgb2Zmc2V0ID0gMDsKKyAgICB1MTZfdCBlbGVuOworICAgIHU4X3QgIEhURWlkID0gMDsKKyAgICB1OF90ICBvdWlbNF0gPSB7MHgwMCwgMHg1MCwgMHhmMiwgMHgwMX07CisgICAgdThfdCAgb3VpMTFuWzNdID0gezB4MDAsMHg5MCwweDRDfTsKKyAgICB1OF90ICBIVFR5cGUgPSAwOworCisgICAgaWYgKChlaWQgPT0gWk1fV0xBTl9FSURfSFRfQ0FQQUJJTElUWSkgfHwKKyAgICAgICAgKGVpZCA9PSBaTV9XTEFOX0VJRF9FWFRFTkRFRF9IVF9DQVBBQklMSVRZKSkKKyAgICB7CisgICAgICAgIEhURWlkID0gZWlkOworICAgICAgICBlaWQgPSBaTV9XTEFOX0VJRF9XUEFfSUU7CisgICAgICAgIEhUVHlwZSA9IDE7CisgICAgfQorCisgICAgd2hpbGUgKG9mZnNldCA8IHNpemUpCisgICAgeworICAgICAgICBlbGVuID0gKihidWYrb2Zmc2V0KzEpOworCisgICAgICAgIGlmICgqKGJ1ZitvZmZzZXQpID09IGVpZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBlaWQgPT0gWk1fV0xBTl9FSURfV1BBX0lFICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIChIVFR5cGUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICYmICgqKGJ1ZitvZmZzZXQrMikgPT0gb3VpWzBdKQorICAgICAgICAgICAgICAgICAgICAgJiYgKCooYnVmK29mZnNldCszKSA9PSBvdWlbMV0pCisgICAgICAgICAgICAgICAgICAgICAmJiAoKihidWYrb2Zmc2V0KzQpID09IG91aVsyXSkKKyAgICAgICAgICAgICAgICAgICAgICYmICgqKGJ1ZitvZmZzZXQrNSkgPT0gb3VpWzNdKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB6Zk1lbW9yeU1vdmUoYnVmK29mZnNldCwgYnVmK29mZnNldCtlbGVuKzIsIHNpemUtb2Zmc2V0LWVsZW4tMik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoc2l6ZS1lbGVuLTIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggKEhUVHlwZSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAmJiAoKihidWYrb2Zmc2V0KzIpID09IG91aTExblswXSkKKyAgICAgICAgICAgICAgICAgICAgJiYgKCooYnVmK29mZnNldCszKSA9PSBvdWkxMW5bMV0pCisgICAgICAgICAgICAgICAgICAgICYmICgqKGJ1ZitvZmZzZXQrNCkgPT0gb3VpMTFuWzJdKQorICAgICAgICAgICAgICAgICAgICAmJiAoKihidWYrb2Zmc2V0KzUpID09IEhURWlkKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB6Zk1lbW9yeU1vdmUoYnVmK29mZnNldCwgYnVmK29mZnNldCtlbGVuKzIsIHNpemUtb2Zmc2V0LWVsZW4tMik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoc2l6ZS1lbGVuLTIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6Zk1lbW9yeU1vdmUoYnVmK29mZnNldCwgYnVmK29mZnNldCtlbGVuKzIsIHNpemUtb2Zmc2V0LWVsZW4tMik7CisgICAgICAgICAgICAgICAgcmV0dXJuIChzaXplLWVsZW4tMik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvZmZzZXQgKz0gKGVsZW4rMik7CisgICAgfQorCisgICAgcmV0dXJuIHNpemU7Cit9CisKK3UxNl90IHpmVXBkYXRlRWxlbWVudCh6ZGV2X3QqIGRldiwgdThfdCogYnVmLCB1MTZfdCBzaXplLCB1OF90KiB1cGRhdGVlaWQpCit7CisgICAgdTE2X3Qgb2Zmc2V0ID0gMDsKKyAgICB1MTZfdCBlbGVuOworCisgICAgd2hpbGUgKG9mZnNldCA8IHNpemUpIHsKKyAgICAgICAgZWxlbiA9ICooYnVmK29mZnNldCsxKTsKKworICAgICAgICBpZiAoKihidWYrb2Zmc2V0KSA9PSB1cGRhdGVlaWRbMF0pIHsKKyAgICAgICAgICAgIGlmICh1cGRhdGVlaWRbMV0gPD0gZWxlbikgeworICAgICAgICAgICAgICAgIHpmTWVtb3J5TW92ZShidWYrb2Zmc2V0LCB1cGRhdGVlaWQsIHVwZGF0ZWVpZFsxXSsyKTsKKyAgICAgICAgICAgICAgICB6Zk1lbW9yeU1vdmUoYnVmK29mZnNldCt1cGRhdGVlaWRbMV0rMiwgYnVmK29mZnNldCtlbGVuKzIsIHNpemUtb2Zmc2V0LWVsZW4tMik7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZS0oZWxlbi11cGRhdGVlaWRbMV0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB6Zk1lbW9yeU1vdmUoYnVmK29mZnNldCt1cGRhdGVlaWRbMV0rMiwgYnVmK29mZnNldCtlbGVuKzIsIHNpemUtb2Zmc2V0LWVsZW4tMik7CisgICAgICAgICAgICAgICAgemZNZW1vcnlNb3ZlKGJ1ZitvZmZzZXQsIHVwZGF0ZWVpZCwgdXBkYXRlZWlkWzFdKzIpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHNpemUrKHVwZGF0ZWVpZFsxXS1lbGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldCArPSAoZWxlbisyKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2l6ZTsKK30KKwordTE2X3QgemZGaW5kU3VwZXJHRWxlbWVudCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHU4X3QgdHlwZSkKK3sKKyAgICB1OF90IHN1YlR5cGU7CisgICAgdTE2X3Qgb2Zmc2V0OworICAgIHUxNl90IGJ1ZkxlbjsKKyAgICB1MTZfdCBlbGVuOworICAgIHU4X3QgaWQ7CisgICAgdThfdCBzdXBlcl9mZWF0dXJlOworICAgIHU4X3Qgb3VpU3VwZXJHWzZdID0gezB4MDAsMHgwMywweDdmLDB4MDEsIDB4MDEsIDB4MDB9OworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLyogR2V0IG9mZnNldCBvZiBmaXJzdCBlbGVtZW50ICovCisgICAgc3ViVHlwZSA9ICh6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAwKSA+PiA0KTsKKyAgICBpZiAoKG9mZnNldCA9IHpnRWxlbWVudE9mZnNldFRhYmxlW3N1YlR5cGVdKSA9PSAweGZmKQorICAgIHsKKyAgICAgICAgem1fYXNzZXJ0KDApOworICAgIH0KKworICAgIC8qIFBsdXMgd2xhbiBoZWFkZXIgKi8KKyAgICBvZmZzZXQgKz0gMjQ7CisKKyAgICBidWZMZW4gPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsKKyAgICAvKiBTZWFyY2ggbG9vcCAqLworICAgIHdoaWxlICgob2Zmc2V0KzIpPGJ1ZkxlbikgICAgICAgICAgICAgICAgICAgLy8gaW5jbHVkaW5nIGVsZW1lbnQgSUQgYW5kIGxlbmd0aCAoMmJ5dGVzKQorICAgIHsKKyAgICAgICAgLyogU2VhcmNoIHRhcmdldCBlbGVtZW50ICovCisgICAgICAgIGlmICgoaWQgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQpKSA9PSBaTV9XTEFOX0VJRF9WRU5ET1JfUFJJVkFURSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQmluZ28gKi8KKyAgICAgICAgICAgIGlmICgoZWxlbiA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKSk+KGJ1ZkxlbiAtIG9mZnNldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRWxlbWVudCBsZW5ndGggZXJyb3IgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gMHhmZmZmOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGVsZW4gPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDB4ZmZmZjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHpmUnhCdWZmZXJFcXVhbFRvU3RyKGRldiwgYnVmLCBvdWlTdXBlckcsIG9mZnNldCsyLCA2KSAmJiAoIHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKSA+PSA2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBzdXBlcl9mZWF0dXJlIDA6dXNlRmFzdEZyYW1lLCAxOnVzZUNvbXByZXNzaW9uLCAyOnVzZVR1cmJvUHJpbWUgKi8KKyAgICAgICAgICAgICAgICBzdXBlcl9mZWF0dXJlPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrOCk7CisgICAgICAgICAgICAgICAgaWYgKChzdXBlcl9mZWF0dXJlICYgMHgwMSkgfHwgKHN1cGVyX2ZlYXR1cmUgJiAweDAyKSB8fCAoc3VwZXJfZmVhdHVyZSAmIDB4MDQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogQWR2YW5jZSB0byBuZXh0IGVsZW1lbnQgKi8KKyAgICAgICAgI2lmIDEKKyAgICAgICAgZWxlbiA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKTsKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgaWYgKChlbGVuID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzEpKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMHhmZmZmOworICAgICAgICB9CisgICAgICAgICNlbmRpZgorCisgICAgICAgIG9mZnNldCArPSAoZWxlbisyKTsKKyAgICB9CisgICAgcmV0dXJuIDB4ZmZmZjsKK30KKwordTE2X3QgemZGaW5kWFJFbGVtZW50KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdThfdCB0eXBlKQoreworICAgIHU4X3Qgc3ViVHlwZTsKKyAgICB1MTZfdCBvZmZzZXQ7CisgICAgdTE2X3QgYnVmTGVuOworICAgIHUxNl90IGVsZW47CisgICAgdThfdCBpZDsKKyAgICB1OF90IG91aXhyWzZdID0gezB4MDAsMHgwMywweDdmLDB4MDMsIDB4MDEsIDB4MDB9OworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLyogR2V0IG9mZnNldCBvZiBmaXJzdCBlbGVtZW50ICovCisgICAgc3ViVHlwZSA9ICh6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAwKSA+PiA0KTsKKyAgICBpZiAoKG9mZnNldCA9IHpnRWxlbWVudE9mZnNldFRhYmxlW3N1YlR5cGVdKSA9PSAweGZmKQorICAgIHsKKyAgICAgICAgem1fYXNzZXJ0KDApOworICAgIH0KKworICAgIC8qIFBsdXMgd2xhbiBoZWFkZXIgKi8KKyAgICBvZmZzZXQgKz0gMjQ7CisKKyAgICBidWZMZW4gPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsKKyAgICAvKiBTZWFyY2ggbG9vcCAqLworICAgIHdoaWxlICgob2Zmc2V0KzIpPGJ1ZkxlbikgICAgICAgICAgICAgICAgICAgLy8gaW5jbHVkaW5nIGVsZW1lbnQgSUQgYW5kIGxlbmd0aCAoMmJ5dGVzKQorICAgIHsKKyAgICAgICAgLyogU2VhcmNoIHRhcmdldCBlbGVtZW50ICovCisgICAgICAgIGlmICgoaWQgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQpKSA9PSBaTV9XTEFOX0VJRF9WRU5ET1JfUFJJVkFURSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQmluZ28gKi8KKyAgICAgICAgICAgIGlmICgoZWxlbiA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKSk+KGJ1ZkxlbiAtIG9mZnNldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRWxlbWVudCBsZW5ndGggZXJyb3IgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gMHhmZmZmOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGVsZW4gPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDB4ZmZmZjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHpmUnhCdWZmZXJFcXVhbFRvU3RyKGRldiwgYnVmLCBvdWl4ciwgb2Zmc2V0KzIsIDYpICYmICggem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzEpID49IDYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogQWR2YW5jZSB0byBuZXh0IGVsZW1lbnQgKi8KKyAgICAgICAgI2lmIDEKKyAgICAgICAgZWxlbiA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKTsKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgaWYgKChlbGVuID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzEpKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMHhmZmZmOworICAgICAgICB9CisgICAgICAgICNlbmRpZgorCisgICAgICAgIG9mZnNldCArPSAoZWxlbisyKTsKKyAgICB9CisgICAgcmV0dXJuIDB4ZmZmZjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmTW1BZGRJZVN1cHBvcnRSYXRlICAgICAgICAqLworLyogICAgICBBZGQgaW5mb3JtYXRpb24gZWxlbWVudCBTdXBwb3J0IFJhdGUgdG8gYnVmZmVyLiAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmIDogYnVmZmVyIHRvIGFkZCBpbmZvcm1hdGlvbiBlbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG9mZnNldCA6IGFkZCBpbmZvcm1hdGlvbiBlbGVtZW50IGZyb20gdGhpcyBvZmZzZXQgICAgICAgICAgICAgICAqLworLyogICAgICBlaWQgOiBlbGVtZW50IElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgcmF0ZVNldCA6ICBDQ0sgb3IgT0ZETSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmZmVyIG9mZnNldCBhZnRlciBhZGRpbmcgaW5mb3JtYXRpb24gZWxlbWVudCAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDUuMTAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90IHpmTW1BZGRJZVN1cHBvcnRSYXRlKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3Qgb2Zmc2V0LCB1OF90IGVpZCwgdThfdCByYXRlU2V0KQoreworICAgIHU4X3QgbGVuID0gMDsKKyAgICB1MTZfdCBpOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLy9pZiAoIChyYXRlU2V0ID09IFpNX1JBVEVfU0VUX09GRE0pJiYoKHdkLT5nUmF0ZSAmIDB4ZmYpID09IDApICkKKyAgICAvL3sKKyAgICAvLyAgICByZXR1cm4gb2Zmc2V0OworICAgIC8vfQorCisgICAgLyogSW5mb3JtYXRpb24gOiBTdXBwb3J0IFJhdGUgKi8KKyAgICBpZiAoIHJhdGVTZXQgPT0gWk1fUkFURV9TRVRfQ0NLICkKKyAgICB7CisgICAgICAgIGZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCh3ZC0+YlJhdGUgJiAoMHgxPDxpKSkgPT0gKDB4MTw8aSkpCisgICAgICAgICAgICAvL2lmICgoMHhmICYgKDB4MTw8aSkpID09ICgweDE8PGkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrbGVuKzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemcxMWJSYXRlVGJsW2ldKygod2QtPmJSYXRlQmFzaWMgJiAoMHgxPDxpKSk8PCg3LWkpKSk7CisgICAgICAgICAgICAgICAgbGVuKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIHJhdGVTZXQgPT0gWk1fUkFURV9TRVRfT0ZETSApCisgICAgeworICAgICAgICBmb3IgKGk9MDsgaTw4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgod2QtPmdSYXRlICYgKDB4MTw8aSkpID09ICgweDE8PGkpKQorICAgICAgICAgICAgLy9pZiAoKDB4ZmYgJiAoMHgxPDxpKSkgPT0gKDB4MTw8aSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCtsZW4rMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZzExZ1JhdGVUYmxbaV0rKCh3ZC0+Z1JhdGVCYXNpYyAmICgweDE8PGkpKTw8KDctaSkpKTsKKyAgICAgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChsZW4gPiAwKQorICAgIHsKKyAgICAgICAgLyogRWxlbWVudCBJRCAqLworICAgICAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0LCBlaWQpOworCisgICAgICAgIC8qIEVsZW1lbnQgTGVuZ3RoICovCisgICAgICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrMSwgbGVuKTsKKworICAgICAgICAvKiBSZXR1cm4gdmFsdWUgKi8KKyAgICAgICAgb2Zmc2V0ICs9ICgyK2xlbik7CisgICAgfQorCisgICAgcmV0dXJuIG9mZnNldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmTW1BZGRJZURzICAgICAgICAgICAgICAgICAqLworLyogICAgICBBZGQgaW5mb3JtYXRpb24gZWxlbWVudCBEUyB0byBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmIDogYnVmZmVyIHRvIGFkZCBpbmZvcm1hdGlvbiBlbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG9mZnNldCA6IGFkZCBpbmZvcm1hdGlvbiBlbGVtZW50IGZyb20gdGhpcyBvZmZzZXQgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZmZlciBvZmZzZXQgYWZ0ZXIgYWRkaW5nIGluZm9ybWF0aW9uIGVsZW1lbnQgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFN0ZXBoZW4gQ2hlbiAgICAgICAgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAgICAyMDA1LjEwICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MTZfdCB6Zk1tQWRkSWVEcyh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvKiBFbGVtZW50IElEICovCisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCBaTV9XTEFOX0VJRF9EUyk7CisKKyAgICAvKiBFbGVtZW50IExlbmd0aCAqLworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgMSk7CisKKyAgICAvKiBJbmZvcm1hdGlvbiA6IERTICovCisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLAorICAgICAgICAgICAgICAgICAgICAgICAgIHpmQ2hGcmVxVG9OdW0od2QtPmZyZXF1ZW5jeSwgTlVMTCkpOworCisgICAgcmV0dXJuIG9mZnNldDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZNbUFkZEllRXJwICAgICAgICAgICAgICAgICovCisvKiAgICAgIEFkZCBpbmZvcm1hdGlvbiBlbGVtZW50IEVSUCB0byBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBidWYgOiBidWZmZXIgdG8gYWRkIGluZm9ybWF0aW9uIGVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgb2Zmc2V0IDogYWRkIGluZm9ybWF0aW9uIGVsZW1lbnQgZnJvbSB0aGlzIG9mZnNldCAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmZmVyIG9mZnNldCBhZnRlciBhZGRpbmcgaW5mb3JtYXRpb24gZWxlbWVudCAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDUuMTAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90IHpmTW1BZGRJZUVycCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvKiBFbGVtZW50IElEICovCisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCBaTV9XTEFOX0VJRF9FUlApOworCisgICAgLyogRWxlbWVudCBMZW5ndGggKi8KKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIDEpOworCisgICAgLyogSW5mb3JtYXRpb24gOiBFUlAgKi8KKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIHdkLT5lcnBFbGVtZW50KTsKKworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmTW1BZGRJZVdwYSAgICAgICAgICAgICAgICAqLworLyogICAgICBBZGQgaW5mb3JtYXRpb24gZWxlbWVudCBXUEEgdG8gYnVmZmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmIDogYnVmZmVyIHRvIGFkZCBpbmZvcm1hdGlvbiBlbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG9mZnNldCA6IGFkZCBpbmZvcm1hdGlvbiBlbGVtZW50IGZyb20gdGhpcyBvZmZzZXQgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZmZlciBvZmZzZXQgYWZ0ZXIgYWRkaW5nIGluZm9ybWF0aW9uIGVsZW1lbnQgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFl1YW4tR3UgV2VpICAgICAgICAgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAgICAyMDA2LjIgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MTZfdCB6Zk1tQWRkSWVXcGEoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQsIHUxNl90IGFwSWQpCit7CisgICAgLy9zdHJ1Y3QgenNXbGFuRGV2KiB3ZCA9IChzdHJ1Y3QgenNXbGFuRGV2Kikgem13X3dsYW5fZGV2KGRldik7CisgICAgaW50IGk7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvKiBFbGVtZW50IElEICovCisgICAgLy96bXdfaW50dHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIFpNX1dMQU5fRUlEX1dQQV9JRSk7CisKKyAgICAvKiBFbGVtZW50IExlbmd0aCAqLworICAgIC8vem13X2ludHR4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCB3ZC0+YXAud3BhTGVuKTsKKyAgICBmb3IoaSA9IDA7IGkgPCB3ZC0+YXAud3BhTGVuW2FwSWRdOyBpKyspCisgICAgeworICAgICAgICAvKiBJbmZvcm1hdGlvbiA6IFdQQSAqLworICAgICAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIHdkLT5hcC53cGFJZVthcElkXVtpXSk7CisgICAgfQorCisgICAgcmV0dXJuIG9mZnNldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmTW1BZGRIVENhcGFiaWxpdHkgICAgICAgICAqLworLyogICAgICBBZGQgSFQgQ2FwYWJpbGl0eSBJbmZvbWF0aW9uIHRvIGJ1ZmZlci4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmIDogYnVmZmVyIHRvIGFkZCBpbmZvcm1hdGlvbiBlbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG9mZnNldCA6IGFkZCBpbmZvcm1hdGlvbiBlbGVtZW50IGZyb20gdGhpcyBvZmZzZXQgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZmZlciBvZmZzZXQgYWZ0ZXIgYWRkaW5nIGluZm9ybWF0aW9uIGVsZW1lbnQgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIENoYW8tV2VuIFlhbmcgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgICAgMjAwNi4wNiAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MTZfdCB6Zk1tQWRkSFRDYXBhYmlsaXR5KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3Qgb2Zmc2V0KQoreworICAgIHU4X3QgT1VJWzNdID0gezB4MCwweDkwLDB4NEN9OworICAgIHUxNl90IGk7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvKiBQcm9iIElEICovCisgICAgem13X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCBaTV9XTEFOX0VJRF9XUEFfSUUpOworCisgICAgaWYgKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCApCisgICAgeworICAgICAgICAvKiBFbGVtZW50IExlbmd0aCAqLworICAgICAgICB6bXdfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIHdkLT5hcC5IVENhcC5EYXRhLkxlbmd0aCArIDQpOworCisgICAgICAgIC8qIE9VSSBEYXRhICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHptd19idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgT1VJW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEVsZW1lbnQgVHlwZSBJRCAqLworICAgICAgICB6bXdfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIHdkLT5hcC5IVENhcC5EYXRhLkVsZW1lbnRJRCk7CisKKyAgICAgICAgLyogSFQgQ2FwYWJpbGl0eSBEYXRhICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNjsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB6bXdfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIHdkLT5hcC5IVENhcC5CeXRlW2krMl0pOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIEVsZW1lbnQgTGVuZ3RoICovCisgICAgICAgIHptd19idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgd2QtPnN0YS5IVENhcC5EYXRhLkxlbmd0aCArIDQpOworCisgICAgICAgIC8qIE9VSSBEYXRhICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHptd19idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgT1VJW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEVsZW1lbnQgVHlwZSBJRCAqLworICAgICAgICB6bXdfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIHdkLT5zdGEuSFRDYXAuRGF0YS5FbGVtZW50SUQpOworCisgICAgICAgIC8qIEhUIENhcGFiaWxpdHkgRGF0YSAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjY7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgem13X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCB3ZC0+c3RhLkhUQ2FwLkJ5dGVbaSsyXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gb2Zmc2V0OworfQorCisKK3UxNl90IHpmTW1BZGRQcmVOSFRDYXBhYmlsaXR5KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3Qgb2Zmc2V0KQoreworICAgIC8vdThfdCBPVUlbM10gPSB7MHgwLDB4OTAsMHg0Q307CisgICAgdTE2X3QgaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8qIFByb2IgSUQgKi8KKyAgICB6bXdfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIFpNX1dMQU5fUFJFTjJfRUlEX0hUQ0FQQUJJTElUWSk7CisKKyAgICBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQICkKKyAgICB7CisgICAgICAgIC8qIEVsZW1lbnQgTGVuZ3RoICovCisgICAgICAgIHptd19idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgd2QtPmFwLkhUQ2FwLkRhdGEuTGVuZ3RoKTsKKworICAgICAgICAvKiBIVCBDYXBhYmlsaXR5IERhdGEgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI2OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHptd19idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgd2QtPmFwLkhUQ2FwLkJ5dGVbaSsyXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogRWxlbWVudCBMZW5ndGggKi8KKyAgICAgICAgem13X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCB3ZC0+c3RhLkhUQ2FwLkRhdGEuTGVuZ3RoKTsKKworICAgICAgICAvKiBIVCBDYXBhYmlsaXR5IERhdGEgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI2OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHptd19idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgd2QtPnN0YS5IVENhcC5CeXRlW2krMl0pOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG9mZnNldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICB6Zk1tQWRkRXh0ZW5kZWRIVENhcGFiaWxpdHkgICAqLworLyogICAgICBBZGQgRXh0ZW5kZWQgSFQgQ2FwYWJpbGl0eSBJbmZvbWF0aW9uIHRvIGJ1ZmZlci4gICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmIDogYnVmZmVyIHRvIGFkZCBpbmZvcm1hdGlvbiBlbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG9mZnNldCA6IGFkZCBpbmZvcm1hdGlvbiBlbGVtZW50IGZyb20gdGhpcyBvZmZzZXQgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZmZlciBvZmZzZXQgYWZ0ZXIgYWRkaW5nIGluZm9ybWF0aW9uIGVsZW1lbnQgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIENoYW8tV2VuIFlhbmcgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgICAgMjAwNi4wNiAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MTZfdCB6Zk1tQWRkRXh0ZW5kZWRIVENhcGFiaWxpdHkoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQpCit7CisgICAgdThfdCBPVUlbM10gPSB7MHgwLDB4OTAsMHg0Q307CisgICAgdTE2X3QgaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8qIFByb2IgSUQgKi8KKyAgICB6bXdfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIFpNX1dMQU5fRUlEX1dQQV9JRSk7CisKKyAgICBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQICkKKyAgICB7CisgICAgICAgIC8qIEVsZW1lbnQgTGVuZ3RoICovCisgICAgICAgIHptd19idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgd2QtPmFwLkV4dEhUQ2FwLkRhdGEuTGVuZ3RoICsgNCk7CisKKyAgICAgICAgLyogT1VJIERhdGEgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgem13X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCBPVUlbaV0pOworICAgICAgICB9CisKKyAgICAgICAgLyogRWxlbWVudCBUeXBlIElEICovCisgICAgICAgIHptd19idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgd2QtPmFwLkV4dEhUQ2FwLkRhdGEuRWxlbWVudElEKTsKKworICAgICAgICAvKiBIVCBDYXBhYmlsaXR5IERhdGEgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDIyOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHptd19idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgd2QtPmFwLkV4dEhUQ2FwLkJ5dGVbaSsyXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogRWxlbWVudCBMZW5ndGggKi8KKyAgICAgICAgem13X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCB3ZC0+c3RhLkV4dEhUQ2FwLkRhdGEuTGVuZ3RoICsgNCk7CisKKyAgICAgICAgLyogT1VJIERhdGEgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgem13X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCBPVUlbaV0pOworICAgICAgICB9CisKKyAgICAgICAgLyogRWxlbWVudCBUeXBlIElEICovCisgICAgICAgIHptd19idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgd2QtPnN0YS5FeHRIVENhcC5EYXRhLkVsZW1lbnRJRCk7CisKKyAgICAgICAgLyogSFQgQ2FwYWJpbGl0eSBEYXRhICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyMjsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB6bXdfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIHdkLT5zdGEuRXh0SFRDYXAuQnl0ZVtpKzJdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZTZW5kTW1GcmFtZSAgICAgICAgICAgICAgICovCisvKiAgICAgIFNlbmQgbWFuYWdlbWVudCBmcmFtZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBmcmFtZVR5cGUgOiBtYW5hZ2VtZW50IGZyYW1lIHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZHN0IDogZGVzdGluYXRpb24gTUFDIGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHAxIDogcGFyYW1ldGVyIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBwMiA6IHBhcmFtZXRlciAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgcDMgOiBwYXJhbWV0ZXIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgbm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDUuMTAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIHByb2JlIHJlcSA6IHAxPT4gYldpdGhTU0lELCBwMj0+UiwgcDM9PlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBwcm9iZSByc3AgOiBwMT0+UiwgcDI9PlIsIHAzPT5WQVAgSUQoQVApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogZGVhdXRoIDogcDE9PlJlYXNvbiBDb2RlLCBwMj0+UiwgcDM9PlZBUCBJRChBUCkgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIERpc2Fzb2MgOiBwMT0+UmVhc29uIENvZGUsIHAyPT5SLCBwMz0+VkFQIElEKEFQKSAgICAgICAgICAgICAgICAgICAgICovCisvKiBBVElNIDogcDE9PlIsIHAyPT5SLCBwMz0+UiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogKHJlKWFzb2MgcnNwIDogcDE9PlN0YXR1cyBDb2RlLCBwMj0+QUlELCBwMz0+VkFQIElEKEFQKSAgICAgICAgICAgICAgKi8KKy8qIGFzb2MgcmVxIDogcDE9PlIsIHAyPT5SLCBwMz0+UiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiByZWFzb2MgcmVxIDogcDE9PkFQIE1BQ1swXSwgcDI9PkFQIE1BQ1sxXSwgcDM9PkFQIE1BQ1syXSAgICAgICAgICAgICAqLworLyogYXV0aCA6IHAxPT5sb3c9QWxnb3JpdGhtLCBoaWdoPVRyYW5zYWN0aW9uLCBwMj0+U3RhdHVzLCBwMz0+VkFQIElEICAgKi8KK3ZvaWQgemZTZW5kTW1GcmFtZSh6ZGV2X3QqIGRldiwgdThfdCBmcmFtZVR5cGUsIHUxNl90KiBkc3QsCisgICAgICAgICAgICAgICAgICAgdTMyX3QgcDEsIHUzMl90IHAyLCB1MzJfdCBwMykKK3sKKyAgICB6YnVmX3QqIGJ1ZjsKKyAgICAvL3UxNl90IGFkZHJUYmxTaXplOworICAgIC8vc3RydWN0IHpzQWRkclRibCBhZGRyVGJsOworICAgIHUxNl90IG9mZnNldCA9IDA7CisgICAgdTE2X3QgaGxlbiA9IDMyOworICAgIHUxNl90IGhlYWRlclsoMjQrMjUrMSkvMl07CisgICAgdTE2X3QgdmFwID0gMDsKKyAgICB1MTZfdCBpOworICAgIHU4X3QgZW5jcnlwdCA9IDA7CisgICAgdTE2X3QgYWlkOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bV9tc2cyX21tKFpNX0xWXzIsICJTZW5kIG1tIGZyYW1lLCB0eXBlPSIsIGZyYW1lVHlwZSk7CisgICAgLyogVEJEIDogTWF4aW11bSBzaXplIG9mIG1hbmFnbWVudCBmcmFtZSAqLworICAgIGlmICgoYnVmID0gemZ3QnVmQWxsb2NhdGUoZGV2LCAxMDI0KSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHptX21zZzBfbW0oWk1fTFZfMCwgIkFsbG9jIG1tIGJ1ZiBGYWlsISIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy9SZXNlcnZlIHJvb20gZm9yIHdsYW4gaGVhZGVyCisgICAgb2Zmc2V0ID0gaGxlbjsKKworICAgIHN3aXRjaCAoZnJhbWVUeXBlKQorICAgIHsKKyAgICAgICAgY2FzZSBaTV9XTEFOX0ZSQU1FX1RZUEVfUFJPQkVSRVEgOgorICAgICAgICAgICAgb2Zmc2V0ID0gemZTZW5kUHJvYmVSZXEoZGV2LCBidWYsIG9mZnNldCwgKHU4X3QpIHAxKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWk1fV0xBTl9GUkFNRV9UWVBFX1BST0JFUlNQIDoKKyAgICAgICAgICAgIHptX21zZzBfbW0oWk1fTFZfMywgInByb2JlIHJzcCIpOworICAgICAgICAgICAgLyogMjQtMzEgVGltZSBTdGFtcCA6IGhhcmR3YXJlIFdPTidUIGZpbGwgdGhpcyBmaWVsZCAqLworICAgICAgICAgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgMCk7CisgICAgICAgICAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0KzIsIDApOworICAgICAgICAgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCs0LCAwKTsKKyAgICAgICAgICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQrNiwgMCk7CisgICAgICAgICAgICBvZmZzZXQrPTg7CisKKyAgICAgICAgICAgIC8qIEJlYWNvbiBJbnRlcnZhbCAqLworICAgICAgICAgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgd2QtPmJlYWNvbkludGVydmFsKTsKKyAgICAgICAgICAgIG9mZnNldCs9MjsKKworICAgICAgICAgICAgaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhcCA9ICh1MTZfdCkgcDM7CisgICAgICAgICAgICAgICAgLyogQ2FwYWJpbGl0eSAqLworICAgICAgICAgICAgICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIHdkLT5hcC5jYXBhYlt2YXBdKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQrPTI7CisgICAgICAgICAgICAgICAgLyogU1NJRCAqLworICAgICAgICAgICAgICAgIG9mZnNldCA9IHpmQXBBZGRJZVNzaWQoZGV2LCBidWYsIG9mZnNldCwgdmFwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBDYXBhYmlsaXR5ICovCisgICAgICAgICAgICAgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCB3ZC0+c3RhLmNhcGFiaWxpdHlbMF0pOworICAgICAgICAgICAgICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgd2QtPnN0YS5jYXBhYmlsaXR5WzFdKTsKKyAgICAgICAgICAgICAgICAvKiBTU0lEICovCisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gemZTdGFBZGRJZVNzaWQoZGV2LCBidWYsIG9mZnNldCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFN1cHBvcnQgUmF0ZSAqLworICAgICAgICAgICAgaWYgKCB3ZC0+ZnJlcXVlbmN5IDwgMzAwMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICBvZmZzZXQgPSB6Zk1tQWRkSWVTdXBwb3J0UmF0ZShkZXYsIGJ1Ziwgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWk1fV0xBTl9FSURfU1VQUE9SVF9SQVRFLCBaTV9SQVRFX1NFVF9DQ0spOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9mZnNldCA9IHpmTW1BZGRJZVN1cHBvcnRSYXRlKGRldiwgYnVmLCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTV9XTEFOX0VJRF9TVVBQT1JUX1JBVEUsIFpNX1JBVEVfU0VUX09GRE0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBEUyBwYXJhbWV0ZXIgc2V0ICovCisgICAgICAgICAgICBvZmZzZXQgPSB6Zk1tQWRkSWVEcyhkZXYsIGJ1Ziwgb2Zmc2V0KTsKKworICAgICAgICAgICAgLyogVE9ETyChRyBJQlNTICovCisgICAgICAgICAgICBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lCU1MgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9mZnNldCA9IHpmU3RhQWRkSWVJYnNzKGRldiwgYnVmLCBvZmZzZXQpOworCisgICAgICAgICAgICAgICAgaWYgKHdkLT5mcmVxdWVuY3kgPCAzMDAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoIHdkLT53ZmMuYklic3NHTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHdkLT5zdXBwb3J0TW9kZSAmIChaTV9XSVJFTEVTU19NT0RFXzI0XzU0fFpNX1dJUkVMRVNTX01PREVfMjRfTikpICkgICAgLy8gT25seSBhY2NvbXBhbnkgd2l0aCBlbmFibGluZyBhIG1vZGUgLgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBFUlAgSW5mb3JtYXRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5lcnBFbGVtZW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHpmTW1BZGRJZUVycChkZXYsIGJ1Ziwgb2Zmc2V0KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5hYmxlIEcgTW9kZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgLyogRXh0ZW5kZWQgU3VwcG9ydGVkIFJhdGVzICovCisgICAgICAgICAgICAgICAgICAgCSAgICBvZmZzZXQgPSB6Zk1tQWRkSWVTdXBwb3J0UmF0ZShkZXYsIGJ1Ziwgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTV9XTEFOX0VJRF9FWFRFTkRFRF9SQVRFLCBaTV9SQVRFX1NFVF9PRkRNKTsKKyAgICAgICAgICAgIAkgICAgfQorICAgICAgICAJICAgIH0KKyAgICAgICAgICAgIH0KKworCisgICAgICAgICAgICBpZiAoKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKQorICAgICAgICAgICAgICAgICAmJiAod2QtPmFwLndsYW5UeXBlW3ZhcF0gIT0gWk1fV0xBTl9UWVBFX1BVUkVfQikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRVJQIEluZm9ybWF0aW9uICovCisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gemZNbUFkZEllRXJwKGRldiwgYnVmLCBvZmZzZXQpOworCisgICAgICAgICAgICAgICAgLyogRXh0ZW5kZWQgU3VwcG9ydGVkIFJhdGVzICovCisJCWlmICggd2QtPmZyZXF1ZW5jeSA8IDMwMDAgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSB6Zk1tQWRkSWVTdXBwb3J0UmF0ZShkZXYsIGJ1Ziwgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTV9XTEFOX0VJRF9FWFRFTkRFRF9SQVRFLCBaTV9SQVRFX1NFVF9PRkRNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogRVJQIEluZm9ybWF0aW9uICovCisgICAgICAgICAgICAvL29mZnNldCA9IHpmTW1BZGRJZUVycChkZXYsIGJ1Ziwgb2Zmc2V0KTsKKworICAgICAgICAgICAgLyogRXh0ZW5kZWQgU3VwcG9ydGVkIFJhdGVzICovCisgICAgICAgICAgICAvL29mZnNldCA9IHpmTW1BZGRJZVN1cHBvcnRSYXRlKGRldiwgYnVmLCBvZmZzZXQsCisgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpNX1dMQU5fRUlEX0VYVEVOREVEX1JBVEUsIFpNX1JBVEVfU0VUX09GRE0pOworCisgICAgICAgICAgICAvKiBUT0RPIDogUlNOICovCisgICAgICAgICAgICBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVAgJiYgd2QtPmFwLndwYVN1cHBvcnRbdmFwXSA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9mZnNldCA9IHpmTW1BZGRJZVdwYShkZXYsIGJ1Ziwgb2Zmc2V0LCB2YXApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lCU1MgJiYgd2QtPnN0YS5hdXRoTW9kZSA9PSBaTV9BVVRIX01PREVfV1BBMlBTSykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSB6ZndTdGFBZGRJZVdwYVJzbihkZXYsIGJ1Ziwgb2Zmc2V0LCBaTV9XTEFOX0ZSQU1FX1RZUEVfQVVUSCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFdNRSBQYXJhbWV0ZXJzICovCisgICAgICAgICAgICBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHdkLT5hcC5xb3NNb2RlID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSB6ZkFwQWRkSWVXbWVQYXJhKGRldiwgYnVmLCBvZmZzZXQsIHZhcCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHdkLT53bGFuTW9kZSAhPSBaTV9NT0RFX0lCU1MgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgLy8gamhsZWUgSFQgMAorICAgICAgICAgICAgLy9DV1lhbmcoKykKKyAgICAgICAgICAgICAgICAvKiBUT0RPIDogTmVlZCB0byBjaGVjayBpZiBpdCBpcyBvayAqLworICAgICAgICAgICAgLyogSFQgQ2FwYWJpbGl0aWVzIEluZm8gKi8KKyAgICAgICAgICAgIG9mZnNldCA9IHpmTW1BZGRIVENhcGFiaWxpdHkoZGV2LCBidWYsIG9mZnNldCk7CisgICAgICAgICAgICAvL0NXWWFuZygrKQorICAgICAgICAgICAgLyogRXh0ZW5kZWQgSFQgQ2FwYWJpbGl0aWVzIEluZm8gKi8KKyAgICAgICAgICAgIG9mZnNldCA9IHpmTW1BZGRFeHRlbmRlZEhUQ2FwYWJpbGl0eShkZXYsIGJ1Ziwgb2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCB3ZC0+c3RhLmlic3NBZGRpdGlvbmFsSUVTaXplICkKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSB6ZlN0YUFkZElic3NBZGRpdGlvbmFsSUUoZGV2LCBidWYsIG9mZnNldCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFpNX1dMQU5fRlJBTUVfVFlQRV9BVVRIIDoKKyAgICAgICAgICAgIGlmIChwMSA9PSAweDMwMDAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhsZW4gKz0gNDsKKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gNDsgICAgICAgIC8vIGZvciByZXNlcnZpbmcgd2VwIGhlYWRlcgorICAgICAgICAgICAgICAgIGVuY3J5cHQgPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBBbGdvdHJpdGhtIE51bWJlciAqLworICAgICAgICAgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgKHUxNl90KShwMSYweGZmZmYpKTsKKyAgICAgICAgICAgIG9mZnNldCs9MjsKKworICAgICAgICAgICAgLyogVHJhbnNhY3Rpb24gTnVtYmVyICovCisgICAgICAgICAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0LCAodTE2X3QpKHAxPj4xNikpOworICAgICAgICAgICAgb2Zmc2V0Kz0yOworCisgICAgICAgICAgICAvKiBTdGF0dXMgQ29kZSAqLworICAgICAgICAgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgKHUxNl90KXAyKTsKKyAgICAgICAgICAgIG9mZnNldCs9MjsKKworICAgICAgICAgICAgaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhcCA9ICh1MTZfdCkgcDM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIENoYWxsZW5nZSBUZXh0ID0+IHNoYXJlLTIgb3Igc2hhcmUtMyAqLworICAgICAgICAgICAgaWYgKHAxID09IDB4MjAwMDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHAyID09IDApIC8vU3RhdHVzID09IHN1Y2Nlc3MKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHptd19idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIDB4ODAxMCk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCs9MjsKKyAgICAgICAgICAgICAgICAgICAgLyogc2hhcmUtMiA6IEFQIGdlbmVyYXRlIGNoYWxsZW5nZSB0ZXh0ICovCisgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPDEyODsgaSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+YXAuY2hhbGxlbmdlVGV4dFtpXSA9ICh1OF90KXpmR2V0UmFuZG9tTnVtYmVyKGRldiwgMCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgemZDb3B5VG9JbnRUeEJ1ZmZlcihkZXYsIGJ1Ziwgd2QtPmFwLmNoYWxsZW5nZVRleHQsIG9mZnNldCwgMTI4KTsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDEyODsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwMSA9PSAweDMwMDAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIHNoYXJlLTMgOiBTVEEgcmV0dXJuIGNoYWxsZW5nZSBUZXh0ICovCisgICAgICAgICAgICAgICAgemZDb3B5VG9JbnRUeEJ1ZmZlcihkZXYsIGJ1Ziwgd2QtPnN0YS5jaGFsbGVuZ2VUZXh0LCBvZmZzZXQsIHdkLT5zdGEuY2hhbGxlbmdlVGV4dFsxXSsyKTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gKHdkLT5zdGEuY2hhbGxlbmdlVGV4dFsxXSsyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBaTV9XTEFOX0ZSQU1FX1RZUEVfQVNPQ1JFUSA6CisgICAgICAgIGNhc2UgWk1fV0xBTl9GUkFNRV9UWVBFX1JFQVNPQ1JFUSA6CisgICAgICAgICAgICAvKiBDYXBhYmlsaXR5ICovCisgICAgICAgICAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIHdkLT5zdGEuY2FwYWJpbGl0eVswXSk7CisgICAgICAgICAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIHdkLT5zdGEuY2FwYWJpbGl0eVsxXSk7CisKKyAgICAgICAgICAgIC8qIExpc3RlbiBJbnRlcnZhbCAqLworICAgICAgICAgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgMHgwMDA1KTsKKyAgICAgICAgICAgIG9mZnNldCs9MjsKKworICAgICAgICAgICAgLyogUmVhc3NvY2FpdGVkIFJlcXVlc3QgOiBDdXJyZW50IEFQIGFkZHJlc3MgKi8KKyAgICAgICAgICAgIGlmIChmcmFtZVR5cGUgPT0gWk1fV0xBTl9GUkFNRV9UWVBFX1JFQVNPQ1JFUSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIHdkLT5zdGEuYnNzaWRbMF0pOworICAgICAgICAgICAgICAgIG9mZnNldCs9MjsKKyAgICAgICAgICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIHdkLT5zdGEuYnNzaWRbMV0pOworICAgICAgICAgICAgICAgIG9mZnNldCs9MjsKKyAgICAgICAgICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIHdkLT5zdGEuYnNzaWRbMl0pOworICAgICAgICAgICAgICAgIG9mZnNldCs9MjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogU1NJRCAqLworICAgICAgICAgICAgb2Zmc2V0ID0gemZTdGFBZGRJZVNzaWQoZGV2LCBidWYsIG9mZnNldCk7CisKKworICAgICAgICAgICAgaWYgKCB3ZC0+c3RhLmN1cnJlbnRGcmVxdWVuY3kgPCAzMDAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBTdXBwb3J0IFJhdGUgKi8KKyAgICAgICAgICAgICAgICBvZmZzZXQgPSB6Zk1tQWRkSWVTdXBwb3J0UmF0ZShkZXYsIGJ1Ziwgb2Zmc2V0LCBaTV9XTEFOX0VJRF9TVVBQT1JUX1JBVEUsIFpNX1JBVEVfU0VUX0NDSyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU3VwcG9ydCBSYXRlICovCisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gemZNbUFkZEllU3VwcG9ydFJhdGUoZGV2LCBidWYsIG9mZnNldCwgWk1fV0xBTl9FSURfU1VQUE9SVF9SQVRFLCBaTV9SQVRFX1NFVF9PRkRNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCh3ZC0+c3RhLmNhcGFiaWxpdHlbMV0gJiBaTV9CSVRfMCkgPT0gMSkKKyAgICAgICAgICAgIHsgICAvL3NwZWN0cnVtIG1hbmFnbWVudCBmbGFnIGVuYWJsZQorICAgICAgICAgICAgICAgIG9mZnNldCA9IHpmU3RhQWRkSWVQb3dlckNhcChkZXYsIGJ1Ziwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSB6ZlN0YUFkZEllU3VwcG9ydENoKGRldiwgYnVmLCBvZmZzZXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2QtPnN0YS5jdXJyZW50RnJlcXVlbmN5IDwgMzAwMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBFeHRlbmRlZCBTdXBwb3J0ZWQgUmF0ZXMgKi8KKyAgICAgICAgICAgICAgICBpZiAod2QtPnN1cHBvcnRNb2RlICYgKFpNX1dJUkVMRVNTX01PREVfMjRfNTR8Wk1fV0lSRUxFU1NfTU9ERV8yNF9OKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHpmTW1BZGRJZVN1cHBvcnRSYXRlKGRldiwgYnVmLCBvZmZzZXQsIFpNX1dMQU5fRUlEX0VYVEVOREVEX1JBVEUsIFpNX1JBVEVfU0VUX09GRE0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworCisgICAgICAgICAgICAvL29mZnNldCA9IHpmU3RhQWRkSWVXcGFSc24oZGV2LCBidWYsIG9mZnNldCwgZnJhbWVUeXBlKTsKKyAgICAgICAgICAgIC8vTW92ZSB0byB3cmFwcGVyIGZ1bmN0aW9uLCBmb3IgT1MgZGlmZmVyZW5jZS0tQ1dZYW5nKG0pCisgICAgICAgICAgICAvL2ZvciB3aW5kb3dzIHdyYXBwZXIsIHpmd1N0YUFkZEllV3BhUnNuKCkgc2hvdWxkIGJlIGJlbG93OgorICAgICAgICAgICAgLy91MTZfdCB6ZndTdGFBZGRJZVdwYVJzbih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCwgdThfdCBmcmFtZVR5cGUpCisgICAgICAgICAgICAvL3sKKyAgICAgICAgICAgIC8vICAgIHJldHVybiB6ZlN0YUFkZEllV3BhUnNuKGRldiwgYnVmLCBvZmZzZXQsIGZyYW1lVHlwZSk7CisgICAgICAgICAgICAvL30KKyAgICAgICAgICAgIG9mZnNldCA9IHpmd1N0YUFkZEllV3BhUnNuKGRldiwgYnVmLCBvZmZzZXQsIGZyYW1lVHlwZSk7CisKKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQworICAgICAgICAgICAgLyogQ0VOQyAqLworICAgICAgICAgICAgLy9pZiAod2QtPnN0YS5lbmNyeU1vZGUgPT0gWk1fQ0VOQykKKyAgICAgICAgICAgIG9mZnNldCA9IHpmU3RhQWRkSWVDZW5jKGRldiwgYnVmLCBvZmZzZXQpOworI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKKyAgICAgICAgICAgIGlmICgoKHdkLT5zdGEud21lRW5hYmxlZCAmIFpNX1NUQV9XTUVfRU5BQkxFX0JJVCkgIT0gMCkgLy9XTUUgZW5hYmxlZAorICAgICAgICAgICAgICAmJiAoKHdkLT5zdGEuYXBXbWVDYXBhYmlsaXR5ICYgMHgxKSAhPSAwKSkgLy9XTUUgQVAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKCh3ZC0+c3RhLmFwV21lQ2FwYWJpbGl0eSAmIDB4ODApICE9IDApIC8vVUFQU0QgQVAKKyAgICAgICAgICAgICAgICAgJiYgKCh3ZC0+c3RhLndtZUVuYWJsZWQgJiBaTV9TVEFfVUFQU0RfRU5BQkxFX0JJVCkgIT0gMCkpIC8vVUFQU0QgZW5hYmxlZAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gemZTdGFBZGRJZVdtZUluZm8oZGV2LCBidWYsIG9mZnNldCwgd2QtPnN0YS53bWVRb3NJbmZvKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gemZTdGFBZGRJZVdtZUluZm8oZGV2LCBidWYsIG9mZnNldCwgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gamhsZWUgSFQgMAorICAgICAgICAgICAgLy9DV1lhbmcoKykKKyAgICAgICAgICAgIGlmICh3ZC0+c3RhLkVuYWJsZUhUICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgI2lmbmRlZiBaTV9ESVNBQkxFX0FNU0RVOEtfU1VQUE9SVAorICAgICAgICAgICAgICAgICAgICAvL1N1cHBvcnQgOEsgQS1NU0RVCisgICAgICAgICAgICAgICAgICAgIGlmICh3ZC0+c3RhLndlcFN0YXR1cyA9PSBaTV9FTkNSWVBUSU9OX1dFUF9ESVNBQkxFRCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5IVENhcC5EYXRhLkh0Q2FwSW5mbyB8PSBIVENBUF9NYXhBTVNEVUxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuSFRDYXAuRGF0YS5IdENhcEluZm8gJj0gKH5IVENBUF9NYXhBTVNEVUxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgICAgICAvL1N1cHBvcnQgNEsgQS1NU0RVCisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuSFRDYXAuRGF0YS5IdENhcEluZm8gJj0gKH5IVENBUF9NYXhBTVNEVUxlbmd0aCk7CisgICAgICAgICAgICAgICAgI2VuZGlmCisKKyAgICAgICAgICAgICAgICAvKiBIVCBDYXBhYmlsaXRpZXMgSW5mbyAqLworICAgICAgICAgICAgICAgIGlmICh3ZC0+QmFuZFdpZHRoNDAgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLkhUQ2FwLkRhdGEuSHRDYXBJbmZvIHw9IEhUQ0FQX1N1cENoYW5uZWxXaWR0aFNldDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuSFRDYXAuRGF0YS5IdENhcEluZm8gJj0gfkhUQ0FQX1N1cENoYW5uZWxXaWR0aFNldDsKKyAgICAgICAgICAgICAgICAgICAgLy93ZC0+c3RhLkhUQ2FwLkRhdGEuSHRDYXBJbmZvIHw9IEhUQ0FQX1N1cENoYW5uZWxXaWR0aFNldDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB3ZC0+c3RhLkhUQ2FwLkRhdGEuQU1QRFVQYXJhbSAmPSB+SFRDQVBfTWF4UnhBTVBEVTM7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5IVENhcC5EYXRhLkFNUERVUGFyYW0gfD0gSFRDQVBfTWF4UnhBTVBEVTM7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5IVENhcC5EYXRhLk1DU1NldFsxXSA9IDB4RkY7IC8vIE1DUyA4IH4gMTUKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSB6Zk1tQWRkSFRDYXBhYmlsaXR5KGRldiwgYnVmLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIG9mZnNldCA9IHpmTW1BZGRQcmVOSFRDYXBhYmlsaXR5KGRldiwgYnVmLCBvZmZzZXQpOworICAgICAgICAgICAgICAgIC8vQ1dZYW5nKCspCisgICAgICAgICAgICAgICAgLyogRXh0ZW5kZWQgSFQgQ2FwYWJpbGl0aWVzIEluZm8gKi8KKyAgICAgICAgICAgICAgICAvL29mZnNldCA9IHpmTW1BZGRFeHRlbmRlZEhUQ2FwYWJpbGl0eShkZXYsIGJ1Ziwgb2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKworCisgICAgICAgICAgICAvL1N0b3JlIGFzb2MgcmVxdWVzdCBmcmFtZSBib2R5LCBmb3IgVklTVEEgb25seQorICAgICAgICAgICAgd2QtPnN0YS5hc29jUmVxRnJhbWVCb2R5U2l6ZSA9ICgob2Zmc2V0IC0gaGxlbikgPgorICAgICAgICAgICAgICAgICAgICBaTV9DQUNIRURfRlJBTUVCT0RZX1NJWkUpPworICAgICAgICAgICAgICAgICAgICBaTV9DQUNIRURfRlJBTUVCT0RZX1NJWkU6KG9mZnNldCAtIGhsZW4pOworICAgICAgICAgICAgZm9yIChpPTA7IGk8d2QtPnN0YS5hc29jUmVxRnJhbWVCb2R5U2l6ZTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT5zdGEuYXNvY1JlcUZyYW1lQm9keVtpXSA9IHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIGkgKyBobGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWk1fV0xBTl9GUkFNRV9UWVBFX0FTT0NSU1AgOgorICAgICAgICBjYXNlIFpNX1dMQU5fRlJBTUVfVFlQRV9SRUFTT0NSU1AgOgorICAgICAgICAgICAgdmFwID0gKHUxNl90KSBwMzsKKworICAgICAgICAgICAgLyogQ2FwYWJpbGl0eSAqLworICAgICAgICAgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgd2QtPmFwLmNhcGFiW3ZhcF0pOworICAgICAgICAgICAgb2Zmc2V0Kz0yOworCisgICAgICAgICAgICAvKiBTdGF0dXMgQ29kZSAqLworICAgICAgICAgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgKHUxNl90KXAxKTsKKyAgICAgICAgICAgIG9mZnNldCs9MjsKKworICAgICAgICAgICAgLyogQUlEICovCisgICAgICAgICAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0LCAodTE2X3QpKHAyfDB4YzAwMCkpOworICAgICAgICAgICAgb2Zmc2V0Kz0yOworCisKKyAgICAgICAgICAgIGlmICggd2QtPmZyZXF1ZW5jeSA8IDMwMDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgLyogU3VwcG9ydCBSYXRlICovCisgICAgICAgICAgICBvZmZzZXQgPSB6Zk1tQWRkSWVTdXBwb3J0UmF0ZShkZXYsIGJ1Ziwgb2Zmc2V0LCBaTV9XTEFOX0VJRF9TVVBQT1JUX1JBVEUsIFpNX1JBVEVfU0VUX0NDSyk7CisKKyAgICAgICAgICAgIC8qIEV4dGVuZGVkIFN1cHBvcnRlZCBSYXRlcyAqLworICAgICAgICAgICAgb2Zmc2V0ID0gemZNbUFkZEllU3VwcG9ydFJhdGUoZGV2LCBidWYsIG9mZnNldCwgWk1fV0xBTl9FSURfRVhURU5ERURfUkFURSwgWk1fUkFURV9TRVRfT0ZETSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU3VwcG9ydCBSYXRlICovCisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gemZNbUFkZEllU3VwcG9ydFJhdGUoZGV2LCBidWYsIG9mZnNldCwgWk1fV0xBTl9FSURfU1VQUE9SVF9SQVRFLCBaTV9SQVRFX1NFVF9PRkRNKTsKKyAgICAgICAgICAgIH0KKworCisKKyAgICAgICAgICAgIC8qIFdNRSBQYXJhbWV0ZXJzICovCisgICAgICAgICAgICBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogVE9ETyA6IGlmIFdNRSBTVEEgdGhlbiBzZW5kIFdNRSBwYXJhbWV0ZXIgZWxlbWVudCAqLworICAgICAgICAgICAgICAgIGlmICh3ZC0+YXAucW9zTW9kZSA9PSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gemZBcEFkZEllV21lUGFyYShkZXYsIGJ1Ziwgb2Zmc2V0LCB2YXApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIGpobGVlIEhUIDAKKyAgICAgICAgICAgIC8vQ1dZYW5nKCspCisgICAgICAgICAgICAvKiBIVCBDYXBhYmlsaXRpZXMgSW5mbyAqLworICAgICAgICAgICAgb2Zmc2V0ID0gemZNbUFkZEhUQ2FwYWJpbGl0eShkZXYsIGJ1Ziwgb2Zmc2V0KTsKKyAgICAgICAgICAgIC8vQ1dZYW5nKCspCisgICAgICAgICAgICAvKiBFeHRlbmRlZCBIVCBDYXBhYmlsaXRpZXMgSW5mbyAqLworICAgICAgICAgICAgb2Zmc2V0ID0gemZNbUFkZEV4dGVuZGVkSFRDYXBhYmlsaXR5KGRldiwgYnVmLCBvZmZzZXQpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBaTV9XTEFOX0ZSQU1FX1RZUEVfQVRJTSA6CisgICAgICAgICAgICAvKiBOVUxMIGZyYW1lICovCisgICAgICAgICAgICAvKiBUT0RPIDogYWRkIHR3byBkdW1iIGJ5dGVzIHRlbXBvcmFyaWx5ICovCisgICAgICAgICAgICBvZmZzZXQgKz0gMjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWk1fV0xBTl9GUkFNRV9UWVBFX1FPU19OVUxMIDoKKyAgICAgICAgICAgIHptd19idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIDB4MDAxMCk7CisgICAgICAgICAgICBvZmZzZXQgKz0gMjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWk1fV0xBTl9EQVRBX0ZSQU1FIDoKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWk1fV0xBTl9GUkFNRV9UWVBFX0RJU0FTT0MgOgorICAgICAgICBjYXNlIFpNX1dMQU5fRlJBTUVfVFlQRV9ERUFVVEggOgorICAgICAgICAgICAgaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB2YXAgPSAodTE2X3QpIHAzOworCisgICAgICAgICAgICAgIGlmICgoYWlkID0gemZBcEZpbmRTdGEoZGV2LCBkc3QpKSAhPSAweGZmZmYpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICAgICAgICAvKiBDbGVhciBTVEEgdGFibGUgKi8KKyAgICAgICAgICAgICAgICAgIHdkLT5hcC5zdGFUYWJsZVthaWRdLnZhbGlkID0gMDsKKworICAgICAgICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICAgICAgICAgICAgaWYgKHdkLT56ZmNiRGlzQXNvY05vdGlmeSAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIHdkLT56ZmNiRGlzQXNvY05vdGlmeShkZXYsICh1OF90Kilkc3QsIHZhcCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIFJlYXNvbiBDb2RlICovCisgICAgICAgICAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0LCAodTE2X3QpcDEpOworICAgICAgICAgICAgb2Zmc2V0Kz0yOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgemZ3QnVmU2V0U2l6ZShkZXYsIGJ1Ziwgb2Zmc2V0KTsKKworICAgIHptX21zZzJfbW0oWk1fTFZfMiwgIm1hbmFnZW1lbnQgZnJhbWUgYm9keSBzaXplPSIsIG9mZnNldC1obGVuKTsKKworICAgIC8vQ29weSB3bGFuIGhlYWRlcgorICAgIHpmVHhHZW5NbUhlYWRlcihkZXYsIGZyYW1lVHlwZSwgZHN0LCBoZWFkZXIsIG9mZnNldC1obGVuLCBidWYsIHZhcCwgZW5jcnlwdCk7CisgICAgZm9yIChpPTA7IGk8KGhsZW4+PjEpOyBpKyspCisgICAgeworICAgICAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgaSoyLCBoZWFkZXJbaV0pOworICAgIH0KKworICAgIC8qIEdldCBidWZmZXIgRE1BIGFkZHJlc3MgKi8KKyAgICAvL2lmICgoYWRkclRibFNpemUgPSB6ZndCdWZNYXBEbWEoZGV2LCBidWYsICZhZGRyVGJsKSkgPT0gMCkKKyAgICAvL2lmICgoYWRkclRibFNpemUgPSB6ZndNYXBUeERtYShkZXYsIGJ1ZiwgJmFkZHJUYmwpKSA9PSAwKQorICAgIC8veworICAgIC8vICAgIGdvdG8gemxFcnJvcjsKKyAgICAvL30KKworICAgIHptX21zZzJfbW0oWk1fTFZfMiwgIm9mZnNldD0iLCBvZmZzZXQpOworICAgIHptX21zZzJfbW0oWk1fTFZfMiwgImhsZW49IiwgaGxlbik7CisgICAgLy96bV9tc2cyX21tKFpNX0xWXzIsICJhZGRyVGJsU2l6ZT0iLCBhZGRyVGJsU2l6ZSk7CisgICAgLy96bV9tc2cyX21tKFpNX0xWXzIsICJhZGRyVGJsLmxlblswXT0iLCBhZGRyVGJsLmxlblswXSk7CisgICAgLy96bV9tc2cyX21tKFpNX0xWXzIsICJhZGRyVGJsLnBoeXNBZGRybFswXT0iLCBhZGRyVGJsLnBoeXNBZGRybFswXSk7CisgICAgLy96bV9tc2cyX21tKFpNX0xWXzIsICJidWYtPmRhdGE9IiwgYnVmLT5kYXRhKTsKKworICAgICNpZiAwCisgICAgaWYgKChlcnIgPSB6ZkhwU2VuZChkZXYsIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwsIDAsIGJ1ZiwgMCwKKyAgICAgICAgICAgIFpNX0lOVEVSTkFMX0FMTE9DX0JVRiwgMCwgMHhmZikpICE9IFpNX1NVQ0NFU1MpCisgICAgeworICAgICAgICBnb3RvIHpsRXJyb3I7CisgICAgfQorICAgICNlbHNlCisgICAgemZQdXRWbW1xKGRldiwgYnVmKTsKKyAgICB6ZlB1c2hWdHhxKGRldik7CisgICAgI2VuZGlmCisKKyAgICByZXR1cm47CisjaWYgMAoremxFcnJvcjoKKworICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIDApOworICAgIHJldHVybjsKKyNlbmRpZgorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZlByb2Nlc3NNYW5hZ2VtZW50ICAgICAgICAgKi8KKy8qICAgICAgUHJvY2VzcyByZWNlaXZlZCBtYW5hZ2VtZW50IGZyYW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZiA6IHJlY2VpdmVkIG1hbmFnZW1lbnQgZnJhbWUgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBub25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNS4xMCAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB6ZlByb2Nlc3NNYW5hZ2VtZW50KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Ziwgc3RydWN0IHpzQWRkaXRpb25JbmZvKiBBZGRJbmZvKSAvL0NXWWFuZyhtKQoreworICAgIHU4X3QgZnJhbWVUeXBlOworICAgIHUxNl90IHRhWzNdOworICAgIHUxNl90IHJhWzNdOworICAgIHUxNl90IHZhcCA9IDAsIGluZGV4ID0gMDsKKyAgICAvL3UxNl90IGk7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICByYVswXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDQpOworICAgIHJhWzFdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgNik7CisgICAgcmFbMl0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCA4KTsKKworICAgIHRhWzBdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMTApOworICAgIHRhWzFdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMTIpOworICAgIHRhWzJdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMTQpOworCisgICAgZnJhbWVUeXBlID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMCk7CisKKyAgICBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApCisgICAgeworI2lmIDEKKyAgICAgICAgdmFwID0gMDsKKyAgICAgICAgaWYgKChyYVswXSAmIDB4MSkgIT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQVAgOiBGaW5kIHZpcnR1YWwgQVAgKi8KKyAgICAgICAgICAgIGlmICgoaW5kZXggPSB6ZkFwRmluZFN0YShkZXYsIHRhKSkgIT0gMHhmZmZmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhcCA9IHdkLT5hcC5zdGFUYWJsZVtpbmRleF0udmFwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHptX21zZzJfbW0oWk1fTFZfMiwgInZhcD0iLCB2YXApOworI2VuZGlmCisKKyAgICAgICAgLyogRGlzcGF0Y2ggYnkgZnJhbWUgdHlwZSAqLworICAgICAgICBzd2l0Y2ggKGZyYW1lVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIEJlYWNvbiAqLworICAgICAgICAgICAgY2FzZSBaTV9XTEFOX0ZSQU1FX1RZUEVfQkVBQ09OIDoKKyAgICAgICAgICAgICAgICB6ZkFwUHJvY2Vzc0JlYWNvbihkZXYsIGJ1Zik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLyogQXV0aGVudGljYXRpb24gKi8KKyAgICAgICAgICAgIGNhc2UgWk1fV0xBTl9GUkFNRV9UWVBFX0FVVEggOgorICAgICAgICAgICAgICAgIHpmQXBQcm9jZXNzQXV0aChkZXYsIGJ1ZiwgdGEsIHZhcCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLyogQXNzb2NpYXRpb24gcmVxdWVzdCAqLworICAgICAgICAgICAgY2FzZSBaTV9XTEFOX0ZSQU1FX1RZUEVfQVNPQ1JFUSA6CisgICAgICAgICAgICAgICAgLyogUmVhc3NvY2lhdGlvbiByZXF1ZXN0ICovCisgICAgICAgICAgICBjYXNlIFpNX1dMQU5fRlJBTUVfVFlQRV9SRUFTT0NSRVEgOgorICAgICAgICAgICAgICAgIHpmQXBQcm9jZXNzQXNvY1JlcShkZXYsIGJ1ZiwgdGEsIHZhcCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLyogQXNzb2NpYXRpb24gcmVzcG9uc2UgKi8KKyAgICAgICAgICAgIGNhc2UgWk1fV0xBTl9GUkFNRV9UWVBFX0FTT0NSU1AgOgorICAgICAgICAgICAgICAgIC8vemZBcFByb2Nlc3NBc29jUnNwKGRldiwgYnVmKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvKiBEZWF1dGhlbnRpY2F0aW9uICovCisgICAgICAgICAgICBjYXNlIFpNX1dMQU5fRlJBTUVfVFlQRV9ERUFVVEggOgorICAgICAgICAgICAgICAgIHpmQXBQcm9jZXNzRGVhdXRoKGRldiwgYnVmLCB0YSwgdmFwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvKiBEaXNhc3NvY2lhdGlvbiAqLworICAgICAgICAgICAgY2FzZSBaTV9XTEFOX0ZSQU1FX1RZUEVfRElTQVNPQyA6CisgICAgICAgICAgICAgICAgemZBcFByb2Nlc3NEaXNhc29jKGRldiwgYnVmLCB0YSwgdmFwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvKiBQcm9iZSByZXF1ZXN0ICovCisgICAgICAgICAgICBjYXNlIFpNX1dMQU5fRlJBTUVfVFlQRV9QUk9CRVJFUSA6CisgICAgICAgICAgICAgICAgemZQcm9jZXNzUHJvYmVSZXEoZGV2LCBidWYsIHRhKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvKiBQcm9iZSByZXNwb25zZSAqLworICAgICAgICAgICAgY2FzZSBaTV9XTEFOX0ZSQU1FX1RZUEVfUFJPQkVSU1AgOgorICAgICAgICAgICAgICAgIHpmQXBQcm9jZXNzUHJvYmVSc3AoZGV2LCBidWYsIEFkZEluZm8pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIC8qIEFjdGlvbiAqLworICAgICAgICAgICAgY2FzZSBaTV9XTEFOX0ZSQU1FX1RZUEVfQUNUSU9OIDoKKyAgICAgICAgICAgICAgICB6ZkFwUHJvY2Vzc0FjdGlvbihkZXYsIGJ1Zik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSAvL2lmICgod2QtPndsYW5Nb2RlID09IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUpIHx8ICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JQlNTKSkKKyAgICB7CisgICAgICAgIC8qIERpc3BhdGNoIGJ5IGZyYW1lIHR5cGUgKi8KKyAgICAgICAgc3dpdGNoIChmcmFtZVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBCZWFjb24gKi8KKyAgICAgICAgICAgIGNhc2UgWk1fV0xBTl9GUkFNRV9UWVBFX0JFQUNPTiA6CisgICAgICAgICAgICAgICAgLyogaWYgZW5hYmxlIDgwMi4xMWggYW5kIGN1cnJlbnQgY2hhbmVsIGlzIHNpbGVudCBidXQgcmVjZWl2ZSBiZWFjb24gZnJvbSBvdGhlciBBUCAqLworICAgICAgICAgICAgICAgIGlmICgoKHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW3dkLT5yZWd1bGF0aW9uVGFibGUuQ3VyQ2hJbmRleF0uY2hhbm5lbEZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICAmIFpNX1JFR19GTEFHX0NIQU5ORUxfQ1NBKSAhPSAwKSAmJiB3ZC0+c3RhLkRGU0VuYWJsZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW3dkLT5yZWd1bGF0aW9uVGFibGUuQ3VyQ2hJbmRleF0uY2hhbm5lbEZsYWdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJj0gfihaTV9SRUdfRkxBR19DSEFOTkVMX0NTQSAmIFpNX1JFR19GTEFHX0NIQU5ORUxfUEFTU0lWRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHpmU3RhUHJvY2Vzc0JlYWNvbihkZXYsIGJ1ZiwgQWRkSW5mbyk7IC8vQ1dZYW5nKG0pCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLyogQXV0aGVudGljYXRpb24gKi8KKyAgICAgICAgICAgIGNhc2UgWk1fV0xBTl9GUkFNRV9UWVBFX0FVVEggOgorICAgICAgICAgICAgICAgIC8qIFRPRE8gOiB2YXAgcGFyYW1ldGVyIGlzIHVzZWxlc3MgaW4gU1RBIG1vZGUsIGdldCByaWQgb2YgaXQgKi8KKyAgICAgICAgICAgICAgICB6ZlN0YVByb2Nlc3NBdXRoKGRldiwgYnVmLCB0YSwgMCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLyogQXNzb2NpYXRpb24gcmVxdWVzdCAqLworICAgICAgICAgICAgY2FzZSBaTV9XTEFOX0ZSQU1FX1RZUEVfQVNPQ1JFUSA6CisgICAgICAgICAgICAgICAgLyogVE9ETyA6IHZhcCBwYXJhbWV0ZXIgaXMgdXNlbGVzcyBpbiBTVEEgbW9kZSwgZ2V0IHJpZCBvZiBpdCAqLworICAgICAgICAgICAgICAgIHpmU3RhUHJvY2Vzc0Fzb2NSZXEoZGV2LCBidWYsIHRhLCAwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvKiBBc3NvY2lhdGlvbiByZXNwb25zZSAqLworICAgICAgICAgICAgY2FzZSBaTV9XTEFOX0ZSQU1FX1RZUEVfQVNPQ1JTUCA6CisgICAgICAgICAgICAgICAgLyogUmVhc3NvY2lhdGlvbiByZXF1ZXN0ICovCisgICAgICAgICAgICBjYXNlIFpNX1dMQU5fRlJBTUVfVFlQRV9SRUFTT0NSU1AgOgorICAgICAgICAgICAgICAgIHpmU3RhUHJvY2Vzc0Fzb2NSc3AoZGV2LCBidWYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIC8qIERlYXV0aGVudGljYXRpb24gKi8KKyAgICAgICAgICAgIGNhc2UgWk1fV0xBTl9GUkFNRV9UWVBFX0RFQVVUSCA6CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiRGVhdXRoZW50aWNhdGlvbiByZWNlaXZlZCIpOworICAgICAgICAgICAgICAgIHpmU3RhUHJvY2Vzc0RlYXV0aChkZXYsIGJ1Zik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLyogRGlzYXNzb2NpYXRpb24gKi8KKyAgICAgICAgICAgIGNhc2UgWk1fV0xBTl9GUkFNRV9UWVBFX0RJU0FTT0MgOgorICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIkRpc2Fzc29jaWF0aW9uIHJlY2VpdmVkIik7CisgICAgICAgICAgICAgICAgemZTdGFQcm9jZXNzRGlzYXNvYyhkZXYsIGJ1Zik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLyogUHJvYmUgcmVxdWVzdCAqLworICAgICAgICAgICAgY2FzZSBaTV9XTEFOX0ZSQU1FX1RZUEVfUFJPQkVSRVEgOgorICAgICAgICAgICAgICAgIHpmUHJvY2Vzc1Byb2JlUmVxKGRldiwgYnVmLCB0YSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLyogUHJvYmUgcmVzcG9uc2UgKi8KKyAgICAgICAgICAgIGNhc2UgWk1fV0xBTl9GUkFNRV9UWVBFX1BST0JFUlNQIDoKKyAgICAgICAgICAgICAgICAvKiBpZiBlbmFibGUgODAyLjExaCBhbmQgY3VycmVudCBjaGFuZWwgaXMgc2lsZW50IGJ1dCByZWNlaXZlIHByb2JlIHJlc3BvbnNlIGZyb20gb3RoZXIgQVAgKi8KKyAgICAgICAgICAgICAgICBpZiAoKCh3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFt3ZC0+cmVndWxhdGlvblRhYmxlLkN1ckNoSW5kZXhdLmNoYW5uZWxGbGFncworICAgICAgICAgICAgICAgICAgICAgICAgJiBaTV9SRUdfRkxBR19DSEFOTkVMX0NTQSkgIT0gMCkgJiYgd2QtPnN0YS5ERlNFbmFibGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFt3ZC0+cmVndWxhdGlvblRhYmxlLkN1ckNoSW5kZXhdLmNoYW5uZWxGbGFncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICY9IH4oWk1fUkVHX0ZMQUdfQ0hBTk5FTF9DU0EgJiBaTV9SRUdfRkxBR19DSEFOTkVMX1BBU1NJVkUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB6ZlN0YVByb2Nlc3NQcm9iZVJzcChkZXYsIGJ1ZiwgQWRkSW5mbyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgWk1fV0xBTl9GUkFNRV9UWVBFX0FUSU06CisgICAgICAgICAgICAgICAgemZTdGFQcm9jZXNzQXRpbShkZXYsIGJ1Zik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgLyogQWN0aW9uICovCisgICAgICAgICAgICBjYXNlIFpNX1dMQU5fRlJBTUVfVFlQRV9BQ1RJT04gOgorICAgICAgICAgICAgICAgIHptX21zZzBfbW0oWk1fTFZfMiwgIlByb2Nlc3NBY3Rpb25NZ3RGcmFtZSIpOworICAgICAgICAgICAgICAgIHpmU3RhUHJvY2Vzc0FjdGlvbihkZXYsIGJ1Zik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZlByb2Nlc3NQcm9iZVJlcSAgICAgICAgICAgKi8KKy8qICAgICAgUHJvY2VzcyBwcm9iZSByZXF1ZXN0IG1hbmFnZW1lbnQgZnJhbWUuICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZiA6IGF1dGggZnJhbWUgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFN0ZXBoZW4gQ2hlbiAgICAgICAgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAgICAyMDA1LjEwICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHpmUHJvY2Vzc1Byb2JlUmVxKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QqIHNyYykKK3sKKyAgICB1MTZfdCBvZmZzZXQ7CisgICAgdThfdCBsZW47CisgICAgdTE2X3QgaSwgajsKKyAgICB1OF90IGNoOworICAgIHUxNl90IHNlbmRGbGFnOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLyogY2hlY2sgbW9kZSA6IEFQL0lCU1MgKi8KKyAgICBpZiAoKHdkLT53bGFuTW9kZSAhPSBaTV9NT0RFX0FQKSAmJiAod2QtPndsYW5Nb2RlICE9IFpNX01PREVfSUJTUykpCisgICAgeworICAgICAgICB6bV9tc2cwX21tKFpNX0xWXzMsICJJZ25vcmUgcHJvYmUgcmVxIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoKHdkLT53bGFuTW9kZSAhPSBaTV9NT0RFX0FQKSAmJiAod2QtPnN0YS5hZGFwdGVyU3RhdGUgPT0gWk1fU1RBX1NUQVRFX0RJU0NPTk5FQ1QpKQorICAgIHsKKyAgICAgICAgem1fbXNnMF9tbShaTV9MVl8zLCAiUGFja2V0cyBkcm9wcGVkIGR1ZSB0byBkaXNjb25uZWN0IHN0YXRlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lCU1MgKQorICAgIHsKKyAgICAgICAgemZTZW5kTW1GcmFtZShkZXYsIFpNX1dMQU5fRlJBTUVfVFlQRV9QUk9CRVJTUCwgc3JjLCAwLCAwLCAwKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogY2hlY2sgU1NJRCAqLworICAgIGlmICgob2Zmc2V0ID0gemZGaW5kRWxlbWVudChkZXYsIGJ1ZiwgWk1fV0xBTl9FSURfU1NJRCkpID09IDB4ZmZmZikKKyAgICB7CisgICAgICAgIHptX21zZzBfbW0oWk1fTFZfMywgInByb2JlIHJlcSBTU0lEIG5vdCBmb3VuZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbGVuID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzEpOworCisgICAgZm9yIChpPTA7IGk8Wk1fTUFYX0FQX1NVUFBPUlQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmICgod2QtPmFwLmFwQml0bWFwICYgKDE8PGkpKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICB6bV9tc2cxX21tKFpNX0xWXzMsICJsZW49IiwgbGVuKTsKKyAgICAgICAgICAgIHNlbmRGbGFnID0gMDsKKyAgICAgICAgICAgIC8qIGJvYXJkY2FzdCBTU0lEICovCisgICAgICAgICAgICBpZiAobGVuID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHdkLT5hcC5oaWRlU3NpZFtpXSA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc2VuZEZsYWcgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIE5vdCBicm9hZGNhc3QgU1NJRCAqLworICAgICAgICAgICAgZWxzZSBpZiAod2QtPmFwLnNzaWRMZW5baV0gPT0gbGVuKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaj0wOyBqPGxlbjsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChjaCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsyK2opKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IHdkLT5hcC5zc2lkW2ldW2pdKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaiA9PSBsZW4pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzZW5kRmxhZyA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNlbmRGbGFnID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU2VuZCBwcm9iZSByZXNwb25zZSAqLworICAgICAgICAgICAgICAgIHpmU2VuZE1tRnJhbWUoZGV2LCBaTV9XTEFOX0ZSQU1FX1RZUEVfUFJPQkVSU1AsIHNyYywgaSwgMCwgaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZlByb2Nlc3NQcm9iZVJzcCAgICAgICAgICAgKi8KKy8qICAgICAgUHJvY2VzcyBwcm9iZSByZXNwb25zZSBtYW5hZ2VtZW50IGZyYW1lLiAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZiA6IGF1dGggZnJhbWUgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEFkZEluZm8gOiBSeCBIZWFkZXIgYW5kIFJ4IE1hYyBTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBub25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBBcmVzcyBZYW5nICAgICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNi4xMSAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB6ZlByb2Nlc3NQcm9iZVJzcCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHN0cnVjdCB6c0FkZGl0aW9uSW5mbyogQWRkSW5mbykKK3sKKyAgICAvKiBHYXRoZXIgc2NhbiByZXN1bHQgKi8KKyAgICAvKiBQYXJzZSBUSU0gYW5kIHNlbmQgUFMtUE9MTCBpbiBwb3dlciBzYXZpbmcgbW9kZSAqLworICAgIHN0cnVjdCB6c1dsYW5Qcm9iZVJzcEZyYW1lSGVhZGVyKiAgcFByb2JlUnNwSGVhZGVyOworICAgIHN0cnVjdCB6c0Jzc0luZm8qIHBCc3NJbmZvOworICAgIHU4X3QgICBwQnVmW3NpemVvZihzdHJ1Y3QgenNXbGFuUHJvYmVSc3BGcmFtZUhlYWRlcildOworICAgIGludCAgICByZXM7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgemZDb3B5RnJvbVJ4QnVmZmVyKGRldiwgYnVmLCBwQnVmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHpzV2xhblByb2JlUnNwRnJhbWVIZWFkZXIpKTsKKyAgICBwUHJvYmVSc3BIZWFkZXIgPSAoc3RydWN0IHpzV2xhblByb2JlUnNwRnJhbWVIZWFkZXIqKSBwQnVmOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIC8vem1fZGVidWdfbXNnMSgiYnNzIGNvdW50ID0gIiwgd2QtPnN0YS5ic3NMaXN0LmJzc0NvdW50KTsKKworICAgIHBCc3NJbmZvID0gemZTdGFGaW5kQnNzSW5mbyhkZXYsIGJ1ZiwgcFByb2JlUnNwSGVhZGVyKTsKKworICAgIC8vaWYgKCBpID09IHdkLT5zdGEuYnNzTGlzdC5ic3NDb3VudCApCisgICAgaWYgKCBwQnNzSW5mbyA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIC8qIEFsbG9jYXRlIGEgbmV3IGVudHJ5IGlmIEJTUyBub3QgaW4gdGhlIHNjYW4gbGlzdCAqLworICAgICAgICBwQnNzSW5mbyA9IHpmQnNzSW5mb0FsbG9jYXRlKGRldik7CisgICAgICAgIGlmIChwQnNzSW5mbyAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICByZXMgPSB6ZlN0YUluaXRCc3NJbmZvKGRldiwgYnVmLCBwUHJvYmVSc3BIZWFkZXIsIHBCc3NJbmZvLCBBZGRJbmZvLCAwKTsKKyAgICAgICAgICAgIC8vemZEdW1wU1NJRChwQnNzSW5mby0+c3NpZFsxXSwgJihwQnNzSW5mby0+c3NpZFsyXSkpOworICAgICAgICAgICAgaWYgKCByZXMgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZCc3NJbmZvRnJlZShkZXYsIHBCc3NJbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6ZkJzc0luZm9JbnNlcnRUb0xpc3QoZGV2LCBwQnNzSW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVzID0gemZTdGFJbml0QnNzSW5mbyhkZXYsIGJ1ZiwgcFByb2JlUnNwSGVhZGVyLCBwQnNzSW5mbywgQWRkSW5mbywgMSk7CisgICAgICAgIGlmIChyZXMgPT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgemZCc3NJbmZvUmVtb3ZlRnJvbUxpc3QoZGV2LCBwQnNzSW5mbyk7CisgICAgICAgICAgICB6ZkJzc0luZm9GcmVlKGRldiwgcEJzc0luZm8pOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JQlNTICkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGlkeDsKKworICAgICAgICAgICAgLy8gSXQgd291bGQgcmVzZXQgdGhlIGFsaXZlIGNvdW50ZXIgaWYgdGhlIHBlZXIgc3RhdGlvbiBpcyBmb3VuZCEKKyAgICAgICAgICAgIHpmU3RhRmluZEZyZWVPcHBvc2l0ZShkZXYsICh1MTZfdCAqKXBCc3NJbmZvLT5tYWNhZGRyLCAmaWR4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICByZXR1cm47Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZlNlbmRQcm9iZVJlcSAgICAgICAgICAgICAgKi8KKy8qICAgICAgU2VuZCBwcm9iZSByZXF1ZXN0IG1hbmFnZW1lbnQgZnJhbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIEppLUh1YW5nIExlZSAgICAgICAgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAgICAyMDA1LjExICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3UxNl90IHpmU2VuZFByb2JlUmVxKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3Qgb2Zmc2V0LCB1OF90IGJXaXRoU1NJRCkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworCisgICAgLyogU1NJRCAqLworICAgIGlmIChiV2l0aFNTSUQgPT0gMCkgIC8qIGJyb2FkY2FzdCBzc2lkICovCisgICAgeworICAgICAgICAvL3ptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgWk1fV0xBTl9FSURfU1NJRCk7CisgICAgICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgMCk7ICAgLyogbGVuZ3RoID0gMCAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICBpZiAod2QtPndzLnByb2JpbmdTc2lkTGlzdFtiV2l0aFNTSUQtMV0uc3NpZExlbiA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIFpNX1dMQU5fRUlEX1NTSUQpOworICAgICAgICAgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCAwKTsgICAvKiBsZW5ndGggPSAwICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIFpNX1dMQU5fRUlEX1NTSUQpOworICAgICAgICAgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLAorICAgICAgICAgICAgICAgICAgICB3ZC0+d3MucHJvYmluZ1NzaWRMaXN0W2JXaXRoU1NJRC0xXS5zc2lkTGVuKTsKKyAgICAgICAgICAgIHpmQ29weVRvSW50VHhCdWZmZXIoZGV2LCBidWYsCisgICAgICAgICAgICAgICAgICAgIHdkLT53cy5wcm9iaW5nU3NpZExpc3RbYldpdGhTU0lELTFdLnNzaWQsCisgICAgICAgICAgICAgICAgICAgIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgd2QtPndzLnByb2JpbmdTc2lkTGlzdFtiV2l0aFNTSUQtMV0uc3NpZExlbik7IC8qIHNzaWQgKi8KKyAgICAgICAgICAgIG9mZnNldCArPSB3ZC0+d3MucHJvYmluZ1NzaWRMaXN0W2JXaXRoU1NJRC0xXS5zc2lkTGVuOworICAgICAgICB9CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgfQorCisgICAgLyogU3VwcG9ydGVkIHJhdGVzICovCisgICAgaWYgKCB3ZC0+c3RhLmN1cnJlbnRGcmVxdWVuY3kgPCAzMDAwICkKKyAgICB7ICAgLyogODAyLjExYitnICovCisgICAgICAgIG9mZnNldCA9IHpmTW1BZGRJZVN1cHBvcnRSYXRlKGRldiwgYnVmLCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpNX1dMQU5fRUlEX1NVUFBPUlRfUkFURSwgWk1fUkFURV9TRVRfQ0NLKTsKKworICAgICAgICBpZiAod2QtPnN1cHBvcnRNb2RlICYgKFpNX1dJUkVMRVNTX01PREVfMjRfNTR8Wk1fV0lSRUxFU1NfTU9ERV8yNF9OKSkgeworICAgICAgICAgICAgaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lCU1MpIHsKKyAgICAgICAgICAgICAgICBpZiAod2QtPndmYy5iSWJzc0dNb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHpmTW1BZGRJZVN1cHBvcnRSYXRlKGRldiwgYnVmLCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpNX1dMQU5fRUlEX0VYVEVOREVEX1JBVEUsIFpNX1JBVEVfU0VUX09GRE0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gemZNbUFkZEllU3VwcG9ydFJhdGUoZGV2LCBidWYsIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWk1fV0xBTl9FSURfRVhURU5ERURfUkFURSwgWk1fUkFURV9TRVRfT0ZETSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsgIC8qIDgwMi4xMWEgKi8KKyAgICAgICAgb2Zmc2V0ID0gemZNbUFkZEllU3VwcG9ydFJhdGUoZGV2LCBidWYsIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWk1fV0xBTl9FSURfU1VQUE9SVF9SQVRFLCBaTV9SQVRFX1NFVF9PRkRNKTsKKyAgICB9CisKKyAgICByZXR1cm4gb2Zmc2V0OworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZlVwZGF0ZURlZmF1bHRRb3NQYXJhbWV0ZXIgKi8KKy8qICAgICAgVXBkYXRlIFR4UXMgQ1dNSU4sIENXTUFYLCBBSUZTIGFuZCBUWE8gdG8gV01FIGRlZmF1bHQgdmFsdWUuICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG1vZGUgOiAwPT5TVEEsIDE9PkFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFN0ZXBoZW4gICAgICAgICAgICAgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAgICAyMDA2LjYgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHpmVXBkYXRlRGVmYXVsdFFvc1BhcmFtZXRlcih6ZGV2X3QqIGRldiwgdThfdCBtb2RlKQoreworICAgIHUxNl90IGN3bWluWzVdOworICAgIHUxNl90IGN3bWF4WzVdOworICAgIHUxNl90IGFpZnNbNV07CisgICAgdTE2X3QgdHhvcFs1XTsKKworICAgIC8qIFdNTSBwYXJhbWV0ZXIgZm9yIFNUQSAqLworICAgIC8qIEJlc3QgRWZmb3IgKi8KKyAgICBjd21pblswXSA9IDE1OworICAgIGN3bWF4WzBdID0gMTAyMzsKKyAgICBhaWZzWzBdID0gMyAqIDkgKyAxMDsKKyAgICB0eG9wWzBdID0gMDsKKyAgICAvKiBCYWNrIEdyb3VuZCAqLworICAgIGN3bWluWzFdID0gMTU7CisgICAgY3dtYXhbMV0gPSAxMDIzOworICAgIGFpZnNbMV0gPSA3ICogOSArIDEwOworICAgIHR4b3BbMV0gPSAwOworICAgIC8qIFZJREVPICovCisgICAgY3dtaW5bMl0gPSA3OworICAgIGN3bWF4WzJdID0gMTU7CisgICAgYWlmc1syXSA9IDIgKiA5ICsgMTA7CisgICAgdHhvcFsyXSA9IDk0OworICAgIC8qIFZPSUNFICovCisgICAgY3dtaW5bM10gPSAzOworICAgIGN3bWF4WzNdID0gNzsKKyAgICBhaWZzWzNdID0gMiAqIDkgKyAxMDsKKyAgICB0eG9wWzNdID0gNDc7CisgICAgLyogU3BlY2lhbCBUeFEgKi8KKyAgICBjd21pbls0XSA9IDM7CisgICAgY3dtYXhbNF0gPSA3OworICAgIGFpZnNbNF0gPSAyICogOSArIDEwOworICAgIHR4b3BbNF0gPSAwOworCisgICAgLyogV01NIHBhcmFtZXRlciBmb3IgQVAgKi8KKyAgICBpZiAobW9kZSA9PSAxKQorICAgIHsKKyAgICAgICAgY3dtYXhbMF0gPSA2MzsKKyAgICAgICAgYWlmc1szXSA9IDEgKiA5ICsgMTA7CisgICAgICAgIGFpZnNbNF0gPSAxICogOSArIDEwOworICAgIH0KKyAgICB6ZkhwVXBkYXRlUW9zUGFyYW1ldGVyKGRldiwgY3dtaW4sIGN3bWF4LCBhaWZzLCB0eG9wKTsKK30KKwordTE2X3QgemZGaW5kQVRIRXh0Q2FwKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdThfdCB0eXBlLCB1OF90IHN1YnR5cGUpCit7CisgICAgdThfdCBzdWJUeXBlOworICAgIHUxNl90IG9mZnNldDsKKyAgICB1MTZfdCBidWZMZW47CisgICAgdTE2X3QgZWxlbjsKKyAgICB1OF90IGlkOworICAgIHU4X3QgdG1wOworCisgICAgLyogR2V0IG9mZnNldCBvZiBmaXJzdCBlbGVtZW50ICovCisgICAgc3ViVHlwZSA9ICh6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAwKSA+PiA0KTsKKworICAgIGlmICgob2Zmc2V0ID0gemdFbGVtZW50T2Zmc2V0VGFibGVbc3ViVHlwZV0pID09IDB4ZmYpCisgICAgeworICAgICAgICB6bV9hc3NlcnQoMCk7CisgICAgfQorCisgICAgLyogUGx1cyB3bGFuIGhlYWRlciAqLworICAgIG9mZnNldCArPSAyNDsKKworICAgIGJ1ZkxlbiA9IHpmd0J1ZkdldFNpemUoZGV2LCBidWYpOworCisgICAgLyogU2VhcmNoIGxvb3AgKi8KKyAgICB3aGlsZSAoKG9mZnNldCsyKTxidWZMZW4pICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGluZyBlbGVtZW50IElEIGFuZCBsZW5ndGggKDJieXRlcykKKyAgICB7CisgICAgICAgIC8qIFNlYXJjaCB0YXJnZXQgZWxlbWVudCAqLworICAgICAgICBpZiAoKGlkID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KSkgPT0gWk1fV0xBTl9FSURfV0lGSV9JRSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQmluZ28gKi8KKyAgICAgICAgICAgIGlmICgoZWxlbiA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKSk+KGJ1ZkxlbiAtIG9mZnNldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRWxlbWVudCBsZW5ndGggZXJyb3IgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gMHhmZmZmOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGVsZW4gPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDB4ZmZmZjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCgodG1wID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzIpKSA9PSAweDAwKQorICAgICAgICAgICAgICAgICAgICAmJiAoKHRtcCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCszKSkgPT0gMHgwMykKKyAgICAgICAgICAgICAgICAgICAgJiYgKCh0bXAgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNCkpID09IDB4N2YpCisgICAgICAgICAgICAgICAgICAgICYmICgodG1wID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzUpKSA9PSB0eXBlKSkKKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggc3VidHlwZSAhPSAweGZmICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICggKHRtcCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs2KSkgPT0gc3VidHlwZSAgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2Zmc2V0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogQWR2YW5jZSB0byBuZXh0IGVsZW1lbnQgKi8KKyAgICAgICAgaWYgKChlbGVuID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzEpKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMHhmZmZmOworICAgICAgICB9CisgICAgICAgIG9mZnNldCArPSAoZWxlbisyKTsKKyAgICB9CisgICAgcmV0dXJuIDB4ZmZmZjsKK30KKwordTE2X3QgemZGaW5kQnJkY21NcnZsUmxua0V4dENhcCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgdThfdCBzdWJUeXBlOworICAgIHUxNl90IG9mZnNldDsKKyAgICB1MTZfdCBidWZMZW47CisgICAgdTE2X3QgZWxlbjsKKyAgICB1OF90IGlkOworICAgIHU4X3QgdG1wOworCisgICAgLyogR2V0IG9mZnNldCBvZiBmaXJzdCBlbGVtZW50ICovCisgICAgc3ViVHlwZSA9ICh6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAwKSA+PiA0KTsKKworICAgIGlmICgob2Zmc2V0ID0gemdFbGVtZW50T2Zmc2V0VGFibGVbc3ViVHlwZV0pID09IDB4ZmYpCisgICAgeworICAgICAgICB6bV9hc3NlcnQoMCk7CisgICAgfQorCisgICAgLyogUGx1cyB3bGFuIGhlYWRlciAqLworICAgIG9mZnNldCArPSAyNDsKKworICAgIGJ1ZkxlbiA9IHpmd0J1ZkdldFNpemUoZGV2LCBidWYpOworCisgICAgLyogU2VhcmNoIGxvb3AgKi8KKyAgICB3aGlsZSAoKG9mZnNldCsyKTxidWZMZW4pICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGluZyBlbGVtZW50IElEIGFuZCBsZW5ndGggKDJieXRlcykKKyAgICB7CisgICAgICAgIC8qIFNlYXJjaCB0YXJnZXQgZWxlbWVudCAqLworICAgICAgICBpZiAoKGlkID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KSkgPT0gWk1fV0xBTl9FSURfV0lGSV9JRSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQmluZ28gKi8KKyAgICAgICAgICAgIGlmICgoZWxlbiA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKSk+KGJ1ZkxlbiAtIG9mZnNldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRWxlbWVudCBsZW5ndGggZXJyb3IgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gMHhmZmZmOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIGVsZW4gPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDB4ZmZmZjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCgodG1wID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzIpKSA9PSAweDAwKQorICAgICAgICAgICAgICAgICAgICAmJiAoKHRtcCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCszKSkgPT0gMHgxMCkKKyAgICAgICAgICAgICAgICAgICAgJiYgKCh0bXAgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNCkpID09IDB4MTgpKQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCgodG1wID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzIpKSA9PSAweDAwKQorICAgICAgICAgICAgICAgICAgICAmJiAoKHRtcCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCszKSkgPT0gMHg1MCkKKyAgICAgICAgICAgICAgICAgICAgJiYgKCh0bXAgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNCkpID09IDB4NDMpKQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgoaWQgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQpKSA9PSAweDdGKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBCaW5nbyAqLworICAgICAgICAgICAgaWYgKChlbGVuID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzEpKT4oYnVmTGVuIC0gb2Zmc2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBFbGVtZW50IGxlbmd0aCBlcnJvciAqLworICAgICAgICAgICAgICAgIHJldHVybiAweGZmZmY7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggZWxlbiA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMHhmZmZmOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKHRtcCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsyKSkgPT0gMHgwMSkKKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBBZHZhbmNlIHRvIG5leHQgZWxlbWVudCAqLworICAgICAgICBpZiAoKGVsZW4gPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMSkpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAweGZmZmY7CisgICAgICAgIH0KKyAgICAgICAgb2Zmc2V0ICs9IChlbGVuKzIpOworICAgIH0KKyAgICByZXR1cm4gMHhmZmZmOworfQorCit1MTZfdCB6ZkZpbmRNYXJ2ZWxFeHRDYXAoemRldl90KiBkZXYsIHpidWZfdCogYnVmKQoreworICAgIHU4X3Qgc3ViVHlwZTsKKyAgICB1MTZfdCBvZmZzZXQ7CisgICAgdTE2X3QgYnVmTGVuOworICAgIHUxNl90IGVsZW47CisgICAgdThfdCBpZDsKKyAgICB1OF90IHRtcDsKKworICAgIC8qIEdldCBvZmZzZXQgb2YgZmlyc3QgZWxlbWVudCAqLworICAgIHN1YlR5cGUgPSAoem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMCkgPj4gNCk7CisKKyAgICBpZiAoKG9mZnNldCA9IHpnRWxlbWVudE9mZnNldFRhYmxlW3N1YlR5cGVdKSA9PSAweGZmKQorICAgIHsKKyAgICAgICAgem1fYXNzZXJ0KDApOworICAgIH0KKworICAgIC8qIFBsdXMgd2xhbiBoZWFkZXIgKi8KKyAgICBvZmZzZXQgKz0gMjQ7CisKKyAgICBidWZMZW4gPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsKKworICAgIC8qIFNlYXJjaCBsb29wICovCisgICAgd2hpbGUgKChvZmZzZXQrMik8YnVmTGVuKSAgICAgICAgICAgICAgICAgICAvLyBpbmNsdWRpbmcgZWxlbWVudCBJRCBhbmQgbGVuZ3RoICgyYnl0ZXMpCisgICAgeworICAgICAgICAvKiBTZWFyY2ggdGFyZ2V0IGVsZW1lbnQgKi8KKyAgICAgICAgaWYgKChpZCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCkpID09IFpNX1dMQU5fRUlEX1dJRklfSUUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEJpbmdvICovCisgICAgICAgICAgICBpZiAoKGVsZW4gPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMSkpPihidWZMZW4gLSBvZmZzZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIEVsZW1lbnQgbGVuZ3RoIGVycm9yICovCisgICAgICAgICAgICAgICAgcmV0dXJuIDB4ZmZmZjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBlbGVuID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAweGZmZmY7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgoKHRtcCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsyKSkgPT0gMHgwMCkKKyAgICAgICAgICAgICAgICAgICYmICgodG1wID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzMpKSA9PSAweDUwKQorICAgICAgICAgICAgICAgICAgJiYgKCh0bXAgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNCkpID09IDB4NDMpKQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIEFkdmFuY2UgdG8gbmV4dCBlbGVtZW50ICovCisgICAgICAgIGlmICgoZWxlbiA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDB4ZmZmZjsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgKz0gKGVsZW4rMik7CisgICAgfQorICAgIHJldHVybiAweGZmZmY7Cit9CisKK3UxNl90IHpmRmluZEJyb2FkY29tRXh0Q2FwKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZikKK3sKKyAgICB1OF90IHN1YlR5cGU7CisgICAgdTE2X3Qgb2Zmc2V0OworICAgIHUxNl90IGJ1ZkxlbjsKKyAgICB1MTZfdCBlbGVuOworICAgIHU4X3QgaWQ7CisgICAgdThfdCB0bXA7CisKKyAgICAvKiBHZXQgb2Zmc2V0IG9mIGZpcnN0IGVsZW1lbnQgKi8KKyAgICBzdWJUeXBlID0gKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDApID4+IDQpOworCisgICAgaWYgKChvZmZzZXQgPSB6Z0VsZW1lbnRPZmZzZXRUYWJsZVtzdWJUeXBlXSkgPT0gMHhmZikKKyAgICB7CisgICAgICAgIHptX2Fzc2VydCgwKTsKKyAgICB9CisKKyAgICAvKiBQbHVzIHdsYW4gaGVhZGVyICovCisgICAgb2Zmc2V0ICs9IDI0OworCisgICAgYnVmTGVuID0gemZ3QnVmR2V0U2l6ZShkZXYsIGJ1Zik7CisKKyAgICAvKiBTZWFyY2ggbG9vcCAqLworICAgIHdoaWxlKChvZmZzZXQrMikgPCBidWZMZW4pICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGluZyBlbGVtZW50IElEIGFuZCBsZW5ndGggKDJieXRlcykKKyAgICB7CisgICAgICAgIC8qIFNlYXJjaCB0YXJnZXQgZWxlbWVudCAqLworICAgICAgICBpZiAoKGlkID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KSkgPT0gWk1fV0xBTl9FSURfV0lGSV9JRSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQmluZ28gKi8KKyAgICAgICAgICAgIGlmICgoZWxlbiA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKSkgPiAoYnVmTGVuIC0gb2Zmc2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBFbGVtZW50IGxlbmd0aCBlcnJvciAqLworICAgICAgICAgICAgICAgIHJldHVybiAweGZmZmY7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChlbGVuID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDB4ZmZmZjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCAoKHRtcCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsyKSkgPT0gMHgwMCkKKyAgICAgICAgICAgICAgICAgJiYgKCh0bXAgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMykpID09IDB4MTApCisgICAgICAgICAgICAgICAgICYmICgodG1wID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzQpKSA9PSAweDE4KSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIEFkdmFuY2UgdG8gbmV4dCBlbGVtZW50ICovCisgICAgICAgIGlmICgoZWxlbiA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDB4ZmZmZjsKKyAgICAgICAgfQorCisgICAgICAgIG9mZnNldCArPSAoZWxlbisyKTsKKyAgICB9CisKKyAgICByZXR1cm4gMHhmZmZmOworfQorCit1MTZfdCB6ZkZpbmRSbG5rRXh0Q2FwKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZikKK3sKKyAgICB1OF90IHN1YlR5cGU7CisgICAgdTE2X3Qgb2Zmc2V0OworICAgIHUxNl90IGJ1ZkxlbjsKKyAgICB1MTZfdCBlbGVuOworICAgIHU4X3QgaWQ7CisgICAgdThfdCB0bXA7CisKKyAgICAvKiBHZXQgb2Zmc2V0IG9mIGZpcnN0IGVsZW1lbnQgKi8KKyAgICBzdWJUeXBlID0gKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDApID4+IDQpOworCisgICAgaWYgKChvZmZzZXQgPSB6Z0VsZW1lbnRPZmZzZXRUYWJsZVtzdWJUeXBlXSkgPT0gMHhmZikKKyAgICB7CisgICAgICAgIHptX2Fzc2VydCgwKTsKKyAgICB9CisKKyAgICAvKiBQbHVzIHdsYW4gaGVhZGVyICovCisgICAgb2Zmc2V0ICs9IDI0OworCisgICAgYnVmTGVuID0gemZ3QnVmR2V0U2l6ZShkZXYsIGJ1Zik7CisKKyAgICAvKiBTZWFyY2ggbG9vcCAqLworICAgIHdoaWxlKChvZmZzZXQrMikgPCBidWZMZW4pICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGluZyBlbGVtZW50IElEIGFuZCBsZW5ndGggKDJieXRlcykKKyAgICB7CisgICAgICAgIC8qIFNlYXJjaCB0YXJnZXQgZWxlbWVudCAqLworICAgICAgICBpZiAoKGlkID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KSkgPT0gMHg3RikKKyAgICAgICAgeworICAgICAgICAgICAgLyogQmluZ28gKi8KKyAgICAgICAgICAgIGlmICgoZWxlbiA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKSkgPiAoYnVmTGVuIC0gb2Zmc2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBFbGVtZW50IGxlbmd0aCBlcnJvciAqLworICAgICAgICAgICAgICAgIHJldHVybiAweGZmZmY7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggZWxlbiA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMHhmZmZmOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKHRtcCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsyKSkgPT0gMHgwMSkKKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBBZHZhbmNlIHRvIG5leHQgZWxlbWVudCAqLworICAgICAgICBpZiAoKGVsZW4gPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMSkpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAweGZmZmY7CisgICAgICAgIH0KKworICAgICAgICBvZmZzZXQgKz0gKGVsZW4rMik7CisgICAgfQorCisgICAgcmV0dXJuIDB4ZmZmZjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jbW1hcC5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NtbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YwOWZkZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jbW1hcC5jCkBAIC0wLDAgKzEsMjQwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE1vZHVsZSBOYW1lIDogbW0uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQWJzdHJhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBUaGlzIG1vZHVsZSBjb250YWlucyBjb21tb24gZnVuY3Rpb25zIGZvciBoYW5kbGUgQVAgICAgICAgICAgICAgKi8KKy8qICAgICAgbWFuYWdlbWVudCBmcmFtZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE5PVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJjcHJlY29tcC5oIgorI2luY2x1ZGUgInJhdGVjdHJsLmgiCisKK2V4dGVybiBjb25zdCB1OF90IHpjVXBUb0FjW107CisKK3ZvaWQgemZNbUFwVGltZVRpY2soemRldl90KiBkZXYpCit7CisgICAgdTMyX3Qgbm93OworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8vem1fZGVidWdfbXNnMSgid2QtPndsYW5Nb2RlIDogIiwgd2QtPndsYW5Nb2RlKTsKKyAgICBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApCisgICAgeworICAgICAgICAvKiA9PiBldmVyeSAxLjI4IHNlY29uZHMgKi8KKyAgICAgICAgLyogQVAgOiBhZ2luZyBTVEEgdGhhdCBkb2VzIG5vdCBhY3RpdmUgZm9yIHdkLT5hcC5zdGFBZ2luZ1RpbWUgICAgKi8KKyAgICAgICAgbm93ID0gd2QtPnRpY2sgJiAweDdmOworICAgICAgICBpZiAobm93ID09IDB4MCkKKyAgICAgICAgeworICAgICAgICAgICAgemZBcEFnaW5nU3RhKGRldik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobm93ID09IDB4MWYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmUXVldWVBZ2UoZGV2LCB3ZC0+YXAudWFwc2RRLCB3ZC0+dGljaywgMTAwMDApOworICAgICAgICB9CisgICAgICAgIC8qIEFQIDogY2hlY2sgKHdkLT5hcC5wcm90ZWN0ZWRPYnNzKSBhbmQgKHdkLT5hcC5iU3RhQXNzb2NpYXRlZCkgICovCisgICAgICAgIC8qICAgICAgdG8gZW5hYmxlIE5vbkVycCBhbmQgUHJvdGVjdGlvbiBtb2RlICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgIGVsc2UgaWYgKG5vdyA9PSAweDNmKQorICAgICAgICB7CisgICAgICAgICAgICAvL3pmQXBQcm90Y3Rpb25Nb25pdG9yKGRldik7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkFwSW5pdFN0YVRibCAgICAgICAgICAgICAgKi8KKy8qICAgICAgSW5pdCBBUCdzIHN0YXRpb24gdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDUuMTAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgemZBcEluaXRTdGFUYmwoemRldl90KiBkZXYpCit7CisgICAgdTE2X3QgaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGZvciAoaT0wOyBpPFpNX01BWF9TVEFfU1VQUE9SVDsgaSsrKQorICAgIHsKKyAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2ldLnZhbGlkID0gMDsKKyAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2ldLnN0YXRlID0gMDsKKyAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2ldLmFkZHJbMF0gPSAwOworICAgICAgICB3ZC0+YXAuc3RhVGFibGVbaV0uYWRkclsxXSA9IDA7CisgICAgICAgIHdkLT5hcC5zdGFUYWJsZVtpXS5hZGRyWzJdID0gMDsKKyAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2ldLnRpbWUgPSAwOworICAgICAgICB3ZC0+YXAuc3RhVGFibGVbaV0udmFwID0gMDsKKyAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2ldLmVuY3J5TW9kZSA9IFpNX05PX1dFUDsKKyAgICB9CisgICAgcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkFwRmluZFN0YSAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgRmluZCBhIFNUQSBpbiBzdGF0aW9uIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGFkZHIgOiBUYXJnZXQgU1RBIGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIDB4ZmZmZiA6IGZhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBvdGhlciA6IFNUQSB0YWJsZSBpbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNS4xMCAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZBcEZpbmRTdGEoemRldl90KiBkZXYsIHUxNl90KiBhZGRyKQoreworICAgIHUxNl90IGk7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBmb3IgKGk9MDsgaTxaTV9NQVhfU1RBX1NVUFBPUlQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmICh3ZC0+YXAuc3RhVGFibGVbaV0udmFsaWQgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCh3ZC0+YXAuc3RhVGFibGVbaV0uYWRkclswXSA9PSBhZGRyWzBdKQorICAgICAgICAgICAgICAgICAgICAmJiAod2QtPmFwLnN0YVRhYmxlW2ldLmFkZHJbMV0gPT0gYWRkclsxXSkKKyAgICAgICAgICAgICAgICAgICAgJiYgKHdkLT5hcC5zdGFUYWJsZVtpXS5hZGRyWzJdID09IGFkZHJbMl0pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAweGZmZmY7Cit9CisKK3UxNl90IHpmQXBHZXRTVEFJbmZvKHpkZXZfdCogZGV2LCB1MTZfdCogYWRkciwgdTE2X3QqIHN0YXRlLCB1OF90KiB2YXApCit7CisgICAgdTE2X3QgaWQ7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlmICgoaWQgPSB6ZkFwRmluZFN0YShkZXYsIGFkZHIpKSAhPSAweGZmZmYpCisgICAgeworICAgICAgICAqdmFwID0gd2QtPmFwLnN0YVRhYmxlW2lkXS52YXA7CisgICAgICAgICpzdGF0ZSA9IHdkLT5hcC5zdGFUYWJsZVtpZCsrXS5zdGF0ZTsKKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgcmV0dXJuIGlkOworfQorCisKK3ZvaWQgemZBcEdldFN0YVFvc1R5cGUoemRldl90KiBkZXYsIHUxNl90KiBhZGRyLCB1OF90KiBxb3NUeXBlKQoreworICAgIHUxNl90IGlkOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBpZiAoKGlkID0gemZBcEZpbmRTdGEoZGV2LCBhZGRyKSkgIT0gMHhmZmZmKQorICAgIHsKKyAgICAgICAgKnFvc1R5cGUgPSB3ZC0+YXAuc3RhVGFibGVbaWRdLnFvc1R5cGU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpxb3NUeXBlID0gMDsKKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgcmV0dXJuOworfQorCit2b2lkIHpmQXBHZXRTdGFUeFJhdGVBbmRRb3NUeXBlKHpkZXZfdCogZGV2LCB1MTZfdCogYWRkciwgdTMyX3QqIHBoeUN0cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4X3QqIHFvc1R5cGUsIHUxNl90KiByY1Byb2JpbmdGbGFnKQoreworICAgIHUxNl90IGlkOworICAgIHU4X3QgcmF0ZTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgaWYgKChpZCA9IHpmQXBGaW5kU3RhKGRldiwgYWRkcikpICE9IDB4ZmZmZikKKyAgICB7CisgICAgICAgIHJhdGUgPSAodThfdCl6ZlJhdGVDdHJsR2V0VHhSYXRlKGRldiwgJndkLT5hcC5zdGFUYWJsZVtpZF0ucmNDZWxsLCByY1Byb2JpbmdGbGFnKTsKKyNpZmRlZiBaTV9BUF9ERUJVRworICAgICAgICAvL3JhdGUgPSAxNTsKKyNlbmRpZgorICAgICAgICAqcGh5Q3RybCA9IHpjUmF0ZVRvUGh5Q3RybFtyYXRlXTsKKyAgICAgICAgKnFvc1R5cGUgPSB3ZC0+YXAuc3RhVGFibGVbaWRdLnFvc1R5cGU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICh3ZC0+ZnJlcXVlbmN5IDwgMzAwMCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQ0NLIDFNICovCisgICAgICAgICAgICAvL2hlYWRlclsyXSA9IDB4MGYwMDsgICAgICAgICAgLy9QSFkgY29udHJvbCBMCisgICAgICAgICAgICAvL2hlYWRlclszXSA9IDB4MDAwMDsgICAgICAgICAgLy9QSFkgY29udHJvbCBICisgICAgICAgICAgICAqcGh5Q3RybCA9IDB4MDAwMDBGMDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBDQ0sgNk0gKi8KKyAgICAgICAgICAgIC8vaGVhZGVyWzJdID0gMHgwZjAxOyAgICAgICAgICAvL1BIWSBjb250cm9sIEwKKyAgICAgICAgICAgIC8vaGVhZGVyWzNdID0gMHgwMDBCOyAgICAgICAgICAvL1BIWSBjb250cm9sIEgKKyAgICAgICAgICAgICpwaHlDdHJsID0gMHgwMDBCMEYwMTsKKyAgICAgICAgfQorICAgICAgICAqcW9zVHlwZSA9IDA7CisgICAgfQorCisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHptX21zZzJfbW0oWk1fTFZfMywgIlBoeUN0cmw9IiwgKnBoeUN0cmwpOworICAgIHJldHVybjsKK30KKwordm9pZCB6ZkFwR2V0U3RhRW5jcnlUeXBlKHpkZXZfdCogZGV2LCB1MTZfdCogYWRkciwgdThfdCogZW5jcnlUeXBlKQoreworICAgIC8vc3RydWN0IHpzV2xhbkRldiogd2QgPSAoc3RydWN0IHpzV2xhbkRldiopIHptd193bGFuX2RldihkZXYpOworICAgIHUxNl90IGlkOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBpZiAoKGlkID0gemZBcEZpbmRTdGEoZGV2LCBhZGRyKSkgIT0gMHhmZmZmKQorICAgIHsKKyAgICAgICAgKmVuY3J5VHlwZSA9IHdkLT5hcC5zdGFUYWJsZVtpZF0uZW5jcnlNb2RlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqZW5jcnlUeXBlID0gWk1fTk9fV0VQOworICAgIH0KKworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICB6bV9tc2cyX21tKFpNX0xWXzMsICJlbmN5clR5cGU9IiwgKmVuY3J5VHlwZSk7CisgICAgcmV0dXJuOworfQorCit2b2lkIHpmQXBHZXRTdGFXcGFJdih6ZGV2X3QqIGRldiwgdTE2X3QqIGFkZHIsIHUxNl90KiBpdjE2LCB1MzJfdCogaXYzMikKK3sKKyAgICAvL3N0cnVjdCB6c1dsYW5EZXYqIHdkID0gKHN0cnVjdCB6c1dsYW5EZXYqKSB6bXdfd2xhbl9kZXYoZGV2KTsKKyAgICB1MTZfdCBpZDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgaWYgKChpZCA9IHpmQXBGaW5kU3RhKGRldiwgYWRkcikpICE9IDB4ZmZmZikKKyAgICB7CisgICAgICAgICppdjE2ID0gd2QtPmFwLnN0YVRhYmxlW2lkXS5pdjE2OworICAgICAgICAqaXYzMiA9IHdkLT5hcC5zdGFUYWJsZVtpZF0uaXYzMjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKml2MTYgPSAwOworICAgICAgICAqaXYzMiA9IDA7CisgICAgfQorCisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHptX21zZzJfbW0oWk1fTFZfMywgIml2MTY9IiwgKml2MTYpOworICAgIHptX21zZzJfbW0oWk1fTFZfMywgIml2MzI9IiwgKml2MzIpOworICAgIHJldHVybjsKK30KKwordm9pZCB6ZkFwU2V0U3RhV3BhSXYoemRldl90KiBkZXYsIHUxNl90KiBhZGRyLCB1MTZfdCBpdjE2LCB1MzJfdCBpdjMyKQoreworICAgIC8vc3RydWN0IHpzV2xhbkRldiogd2QgPSAoc3RydWN0IHpzV2xhbkRldiopIHptd193bGFuX2RldihkZXYpOworICAgIHUxNl90IGlkOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBpZiAoKGlkID0gemZBcEZpbmRTdGEoZGV2LCBhZGRyKSkgIT0gMHhmZmZmKQorICAgIHsKKyAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2lkXS5pdjE2ID0gaXYxNjsKKyAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2lkXS5pdjMyID0gaXYzMjsKKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgem1fbXNnMl9tbShaTV9MVl8zLCAiaXYxNj0iLCBpdjE2KTsKKyAgICB6bV9tc2cyX21tKFpNX0xWXzMsICJpdjMyPSIsIGl2MzIpOworICAgIHJldHVybjsKK30KKwordm9pZCB6ZkFwQ2xlYXJTdGFLZXkoemRldl90KiBkZXYsIHUxNl90KiBhZGRyKQoreworICAgIC8vc3RydWN0IHpzV2xhbkRldiogd2QgPSAoc3RydWN0IHpzV2xhbkRldiopIHptd193bGFuX2RldihkZXYpOworICAgIHUxNl90IGJjQWRkclszXSA9IHsgMHhmZmZmLCAweGZmZmYsIDB4ZmZmZiB9OworICAgIHUxNl90IGlkOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYgKHpmTWVtb3J5SXNFcXVhbCgodThfdCopYmNBZGRyLCAodThfdCopYWRkciwgc2l6ZW9mKGJjQWRkcikpID09IFRSVUUpCisgICAgeworICAgICAgICAvKiBUdXJuIG9mZiBncm91cCBrZXkgaW5mb3JtYXRpb24gKi8KKyAgICAvLyAgICB6ZkNsZWFyS2V5KGRldiwgMCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICBpZiAoKGlkID0gemZBcEZpbmRTdGEoZGV2LCBhZGRyKSkgIT0gMHhmZmZmKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBUdXJuIG9mZiBTVEEncyBrZXkgaW5mb3JtYXRpb24gKi8KKyAgICAgICAgICAgIHpmSHBSZW1vdmVLZXkoZGV2LCBpZCsxKTsKKworICAgICAgICAgICAgLyogVXBkYXRlIFNUQSdzIEVuY3J5cHRpb24gVHlwZSAqLworICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2lkXS5lbmNyeU1vZGUgPSBaTV9OT19XRVA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB6bV9tc2cwX21tKFpNX0xWXzMsICJDYW4ndCBmaW5kIFNUQSBhZGRyZXNzXG4iKTsKKyAgICAgICAgfQorICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIH0KK30KKworI2lmZGVmIFpNX0VOQUJMRV9DRU5DCit2b2lkIHpmQXBHZXRTdGFDZW5jSXZBbmRLZXlJZHgoemRldl90KiBkZXYsIHUxNl90KiBhZGRyLCB1MzJfdCAqaXYsIHU4X3QgKmtleUlkeCkKK3sKKyAgICAvL3N0cnVjdCB6c1dsYW5EZXYqIHdkID0gKHN0cnVjdCB6c1dsYW5EZXYqKSB6bXdfd2xhbl9kZXYoZGV2KTsKKyAgICB1MTZfdCBpZDsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlmICgoaWQgPSB6ZkFwRmluZFN0YShkZXYsIGFkZHIpKSAhPSAweGZmZmYpCisgICAgeworICAgICAgICAqaXYrKyA9IHdkLT5hcC5zdGFUYWJsZVtpZF0udHhpdlswXTsKKyAgICAgICAgKml2KysgPSB3ZC0+YXAuc3RhVGFibGVbaWRdLnR4aXZbMV07CisgICAgICAgICppdisrID0gd2QtPmFwLnN0YVRhYmxlW2lkXS50eGl2WzJdOworICAgICAgICAqaXYgPSB3ZC0+YXAuc3RhVGFibGVbaWRdLnR4aXZbM107CisgICAgICAgICprZXlJZHggPSB3ZC0+YXAuc3RhVGFibGVbaWRdLmNlbmNLZXlJZHg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICppdisrID0gMHg1YzM2NWMzNzsKKyAgICAgICAgKml2KysgPSAweDVjMzY1YzM2OworICAgICAgICAqaXYrKyA9IDB4NWMzNjVjMzY7CisgICAgICAgICppdiA9IDB4NWMzNjVjMzY7CisgICAgICAgICprZXlJZHggPSAwOworICAgIH0KKworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgcmV0dXJuOworfQorCit2b2lkIHpmQXBTZXRTdGFDZW5jSXYoemRldl90KiBkZXYsIHUxNl90KiBhZGRyLCB1MzJfdCAqaXYpCit7CisgICAgLy9zdHJ1Y3QgenNXbGFuRGV2KiB3ZCA9IChzdHJ1Y3QgenNXbGFuRGV2Kikgem13X3dsYW5fZGV2KGRldik7CisgICAgdTE2X3QgaWQ7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBpZiAoKGlkID0gemZBcEZpbmRTdGEoZGV2LCBhZGRyKSkgIT0gMHhmZmZmKQorICAgIHsKKyAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2lkXS50eGl2WzBdID0gKml2Kys7CisgICAgICAgIHdkLT5hcC5zdGFUYWJsZVtpZF0udHhpdlsxXSA9ICppdisrOworICAgICAgICB3ZC0+YXAuc3RhVGFibGVbaWRdLnR4aXZbMl0gPSAqaXYrKzsKKyAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2lkXS50eGl2WzNdID0gKml2OworICAgIH0KKworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICByZXR1cm47Cit9CisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkFwRmx1c2hCdWZmZXJlZFBzRnJhbWUgICAgKi8KKy8qICAgICAgRnJlZSBidWZmZXJlZCBQUyBmcmFtZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJTkMuICAgIDIwMDcuMSAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgemZBcEZsdXNoQnVmZmVyZWRQc0ZyYW1lKHpkZXZfdCogZGV2KQoreworICAgIHUxNl90IGVtcHR5RmxhZzsKKyAgICB1MTZfdCBmcmVlQ291bnQ7CisgICAgdTE2X3QgdmFwOworICAgIHpidWZfdCogcHNCdWYgPSBOVUxMOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgZnJlZUNvdW50ID0gMDsKKyAgICBlbXB0eUZsYWcgPSAwOworICAgIHdoaWxlICgxKQorICAgIHsKKyAgICAgICAgcHNCdWYgPSBOVUxMOworICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICBpZiAod2QtPmFwLnVuaUhlYWQgIT0gd2QtPmFwLnVuaVRhaWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBzQnVmID0gd2QtPmFwLnVuaUFycmF5W3dkLT5hcC51bmlIZWFkXTsKKyAgICAgICAgICAgIHdkLT5hcC51bmlIZWFkID0gKHdkLT5hcC51bmlIZWFkICsgMSkgJiAoWk1fVU5JX0FSUkFZX1NJWkUgLSAxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtcHR5RmxhZyA9IDE7CisgICAgICAgIH0KKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICBpZiAocHNCdWYgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgemZ3QnVmRnJlZShkZXYsIHBzQnVmLCBaTV9FUlJfRkxVU0hfUFNfUVVFVUUpOworICAgICAgICB9CisgICAgICAgIHptX2Fzc2VydChmcmVlQ291bnQrKyA8IChaTV9VTklfQVJSQVlfU0laRSoyKSk7CisKKyAgICAgICAgaWYgKGVtcHR5RmxhZyAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodmFwPTA7IHZhcDxaTV9NQVhfQVBfU1VQUE9SVDsgdmFwKyspCisgICAgeworICAgICAgICBmcmVlQ291bnQgPSAwOworICAgICAgICBlbXB0eUZsYWcgPSAwOworICAgICAgICB3aGlsZSAoMSkKKyAgICAgICAgeworICAgICAgICAgICAgcHNCdWYgPSBOVUxMOworICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIGlmICh3ZC0+YXAuYmNtY0hlYWRbdmFwXSAhPSB3ZC0+YXAuYmNtY1RhaWxbdmFwXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwc0J1ZiA9IHdkLT5hcC5iY21jQXJyYXlbdmFwXVt3ZC0+YXAuYmNtY0hlYWRbdmFwXV07CisgICAgICAgICAgICAgICAgd2QtPmFwLmJjbWNIZWFkW3ZhcF0gPSAod2QtPmFwLmJjbWNIZWFkW3ZhcF0gKyAxKQorICAgICAgICAgICAgICAgICAgICAgICAgJiAoWk1fQkNNQ19BUlJBWV9TSVpFIC0gMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZW1wdHlGbGFnID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgICAgIGlmIChwc0J1ZiAhPSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCBwc0J1ZiwgWk1fRVJSX0ZMVVNIX1BTX1FVRVVFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHptX2Fzc2VydChmcmVlQ291bnQrKyA8IChaTV9CQ01DX0FSUkFZX1NJWkUqMikpOworCisgICAgICAgICAgICBpZiAoZW1wdHlGbGFnICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuOworfQorCisKK3UxNl90IHpmQXBCdWZmZXJQc0ZyYW1lKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgcG9ydCkKK3sKKyAgICB1MTZfdCBpZDsKKyAgICB1MTZfdCBhZGRyWzNdOworICAgIHUxNl90IHZhcCA9IDA7CisgICAgdThfdCB1cDsKKyAgICB1MTZfdCBmcmFnT2ZmOworICAgIHU4X3QgYWM7CisgICAgdTE2X3QgcmV0OworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIGlmIChwb3J0IDwgWk1fTUFYX0FQX1NVUFBPUlQpCisgICAgeworICAgICAgICB2YXAgPSBwb3J0OworICAgIH0KKworICAgIGFkZHJbMF0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAwKTsKKyAgICBhZGRyWzFdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMik7CisgICAgYWRkclsyXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDQpOworCisgICAgaWYgKChhZGRyWzBdICYgMHgxKSA9PSAweDEpCisgICAgeworICAgICAgICBpZiAod2QtPmFwLnN0YVBvd2VyU2F2aW5nID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICAgICAgLyogQnVmZmVyIHRoaXMgQkMgb3IgTUMgZnJhbWUgKi8KKyAgICAgICAgICAgIGlmICgoKHdkLT5hcC5iY21jVGFpbFt2YXBdKzEpJihaTV9CQ01DX0FSUkFZX1NJWkUtMSkpCisgICAgICAgICAgICAgICAgICAgICE9IHdkLT5hcC5iY21jSGVhZFt2YXBdKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT5hcC5iY21jQXJyYXlbdmFwXVt3ZC0+YXAuYmNtY1RhaWxbdmFwXSsrXSA9IGJ1ZjsKKyAgICAgICAgICAgICAgICB3ZC0+YXAuYmNtY1RhaWxbdmFwXSAmPSAoWk1fQkNNQ19BUlJBWV9TSVpFLTEpOworICAgICAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgICAgICAgICB6bV9tc2cwX3R4KFpNX0xWXzAsICJCdWZmZXIgQkNNQyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIGJjbWNBcnJheSBmdWxsICovCisgICAgICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICAgICAgICAgIHptX21zZzBfdHgoWk1fTFZfMCwgIkJDTUMgYnVmZmVyIGZ1bGwiKTsKKworICAgICAgICAgICAgICAgIC8qIGZyZWUgYnVmZmVyIGFjY29yZGluZyB0byBidWZmZXIgdHlwZSAqLworICAgICAgICAgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIFpNX0VSUl9CQ01DX1BTX0JVRkZFUl9VTkFWQUlMQUJMRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgIGlmICgoaWQgPSB6ZkFwRmluZFN0YShkZXYsIGFkZHIpKSAhPSAweGZmZmYpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3ZC0+YXAuc3RhVGFibGVbaWRdLnBzTW9kZSA9PSAxKQorICAgICAgICAgICAgeworCisgICAgICAgICAgICAgICAgemZUeEdldElwVG9zQW5kRnJhZyhkZXYsIGJ1ZiwgJnVwLCAmZnJhZ09mZik7CisgICAgICAgICAgICAgICAgYWMgPSB6Y1VwVG9BY1t1cCYweDddICYgMHgzOworCisgICAgICAgICAgICAgICAgaWYgKCh3ZC0+YXAuc3RhVGFibGVbaWRdLnFvc1R5cGUgPT0gMSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICgod2QtPmFwLnN0YVRhYmxlW2lkXS5xb3NJbmZvICYgKDB4OD4+YWMpKSAhPSAwKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IHpmUXVldWVQdXROY3MoZGV2LCB3ZC0+YXAudWFwc2RRLCBidWYsIHdkLT50aWNrKTsKKyAgICAgICAgICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBaTV9TVUNDRVNTKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCBaTV9FUlJfQVBfVUFQU0RfUVVFVUVfRlVMTCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBCdWZmZXIgdGhpcyB1bmljYXN0IGZyYW1lICovCisgICAgICAgICAgICAgICAgaWYgKCgod2QtPmFwLnVuaVRhaWwrMSkmKFpNX1VOSV9BUlJBWV9TSVpFLTEpKQorICAgICAgICAgICAgICAgICAgICAgICAgIT0gd2QtPmFwLnVuaUhlYWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3ZC0+YXAudW5pQXJyYXlbd2QtPmFwLnVuaVRhaWwrK10gPSBidWY7CisgICAgICAgICAgICAgICAgICAgIHdkLT5hcC51bmlUYWlsICY9IChaTV9VTklfQVJSQVlfU0laRS0xKTsKKyAgICAgICAgICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgICAgICAgICAgem1fbXNnMF90eChaTV9MVl8wLCAiQnVmZmVyIFVOSSIpOworCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIHVuaUFycmF5IGZ1bGwgKi8KKyAgICAgICAgICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgICAgICAgICAgem1fbXNnMF90eChaTV9MVl8wLCAiVU5JIGJ1ZmZlciBmdWxsIik7CisgICAgICAgICAgICAgICAgICAgIC8qIGZyZWUgYnVmZmVyIGFjY29yZGluZyB0byBidWZmZXIgdHlwZSAqLworICAgICAgICAgICAgICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCBaTV9FUlJfVU5JX1BTX0JVRkZFUl9VTkFWQUlMQUJMRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0gLyogaWYgKHdkLT5hcC5zdGFUYWJsZVtpZCsrXS5wc01vZGUgPT0gMSkgKi8KKyAgICAgICAgfSAvKiBpZiAoKGlkID0gemZBcEZpbmRTdGEoZGV2LCBhZGRyKSkgIT0gMHhmZmZmKSAqLworICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit1MTZfdCB6ZkFwR2V0U1RBSW5mb0FuZFVwZGF0ZVBzKHpkZXZfdCogZGV2LCB1MTZfdCogYWRkciwgdTE2X3QqIHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OF90KiB2YXAsIHUxNl90IHBzTW9kZSwgdThfdCogdWFwc2RUcmlnKQoreworICAgIHUxNl90IGlkOworICAgIHU4X3QgdWFwc2RTdGFBd2FrZSA9IDA7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworI2lmZGVmIFpNX0FQX0RFQlVHCisgICAgLy9wc01vZGU9MDsKKyNlbmRpZgorCisgICAgaWYgKChpZCA9IHpmQXBGaW5kU3RhKGRldiwgYWRkcikpICE9IDB4ZmZmZikKKyAgICB7CisgICAgICAgIGlmIChwc01vZGUgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgem1fbXNnMF9tbShaTV9MVl8wLCAicHNNb2RlID0gMSIpOworICAgICAgICAgICAgaWYgKHdkLT5hcC5zdGFUYWJsZVtpZF0ucHNNb2RlID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPmFwLnN0YVBvd2VyU2F2aW5nKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHdkLT5hcC5zdGFUYWJsZVtpZF0ucW9zVHlwZSA9PSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgem1fbXNnMF9tbShaTV9MVl8wLCAiVUFQU0QgdHJpZ2dlciIpOworICAgICAgICAgICAgICAgICAgICAqdWFwc2RUcmlnID0gd2QtPmFwLnN0YVRhYmxlW2lkXS5xb3NJbmZvOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3ZC0+YXAuc3RhVGFibGVbaWRdLnBzTW9kZSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT5hcC5zdGFQb3dlclNhdmluZy0tOworICAgICAgICAgICAgICAgIGlmICgod2QtPmFwLnN0YVRhYmxlW2lkXS5xb3NUeXBlID09IDEpICYmICgod2QtPmFwLnN0YVRhYmxlW2lkXS5xb3NJbmZvJjB4ZikhPTApKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdWFwc2RTdGFBd2FrZSA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2lkXS5wc01vZGUgPSAodThfdCkgcHNNb2RlOworICAgICAgICB3ZC0+YXAuc3RhVGFibGVbaWRdLnRpbWUgPSB3ZC0+dGljazsKKyAgICAgICAgKnZhcCA9IHdkLT5hcC5zdGFUYWJsZVtpZF0udmFwOworICAgICAgICAqc3RhdGUgPSB3ZC0+YXAuc3RhVGFibGVbaWQrK10uc3RhdGU7CisgICAgfQorCisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlmICh1YXBzZFN0YUF3YWtlID09IDEpCisgICAgeworICAgICAgICB6YnVmX3QqIHBzQnVmOworICAgICAgICB1OF90IG1iOworCisgICAgICAgIHdoaWxlICgxKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHBzQnVmID0gemZRdWV1ZUdldFdpdGhNYWMoZGV2LCB3ZC0+YXAudWFwc2RRLCAodThfdCopYWRkciwgJm1iKSkgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6ZlR4U2VuZEV0aChkZXYsIHBzQnVmLCAwLCBaTV9FWFRFUk5BTF9BTExPQ19CVUYsIDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGlkOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZBcEdldE5ld1N0YSAgICAgICAgICAgICAgICovCisvKiAgICAgIEdldCBhIG5ldyBTVEEgZnJvbSBzdGF0aW9uIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIDB4ZmZmZiA6IGZhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBvdGhlciA6IFNUQSB0YWJsZSBpbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNS4xMCAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZBcEdldE5ld1N0YSh6ZGV2X3QqIGRldikKK3sKKyAgICB1MTZfdCBpOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgZm9yIChpPTA7IGk8Wk1fTUFYX1NUQV9TVVBQT1JUOyBpKyspCisgICAgeworICAgICAgICBpZiAod2QtPmFwLnN0YVRhYmxlW2ldLnZhbGlkID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHptX21zZzJfbW0oWk1fTFZfMCwgInpmQXBHZXROZXdTdGE9IiwgaSk7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMHhmZmZmOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkFwQWRkU3RhICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgQWRkIGEgU1RBIHRvIHN0YXRpb24gdGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGFkZHIgOiBTVEEgTUFDIGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBzdGF0ZSA6IFNUQSBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYXBJZCA6IFZpcnR1YWwgQVAgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHR5cGUgOiAwPT4xMWIsIDE9PjExZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIDB4ZmZmZiA6IGZhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBPdGhlciA6IGluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNS4xMCAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZBcEFkZFN0YSh6ZGV2X3QqIGRldiwgdTE2X3QqIGFkZHIsIHUxNl90IHN0YXRlLCB1MTZfdCBhcElkLCB1OF90IHR5cGUsCisgICAgICAgICAgICAgICAgIHU4X3QgcW9zVHlwZSwgdThfdCBxb3NJbmZvKQoreworICAgIHUxNl90IGluZGV4OworICAgIHUxNl90IGk7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem1fbXNnMV9tbShaTV9MVl8wLCAiU1RBIHR5cGU9IiwgdHlwZSk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgaWYgKChpbmRleCA9IHpmQXBGaW5kU3RhKGRldiwgYWRkcikpICE9IDB4ZmZmZikKKyAgICB7CisgICAgICAgIHptX21zZzBfbW0oWk1fTFZfMiwgImZvdW5kIik7CisgICAgICAgIC8qIFVwZGF0ZSBTVEEgc3RhdGUgKi8KKyAgICAgICAgaWYgKChzdGF0ZSA9PSBaTV9TVEFURV9BVVRIKSB8fCAoc3RhdGUgPT0gWk1fU1RBVEVfUFJFQVVUSCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdkLT5hcC5zdGFUYWJsZVtpbmRleF0uc3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgICAgIHdkLT5hcC5zdGFUYWJsZVtpbmRleF0udGltZSA9IHdkLT50aWNrOworICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2luZGV4XS52YXAgPSAodThfdClhcElkOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0YXRlID09IFpNX1NUQVRFX0FTT0MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgod2QtPmFwLnN0YVRhYmxlW2luZGV4XS5zdGF0ZSA9PSBaTV9TVEFURV9BVVRIKSkKKyAgICAgICAgICAgICAgICAgICAgLy8mJiAod2QtPmFwLnN0YVRhYmxlW2luZGV4XS52YXAgPT0gYXBJZCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2luZGV4XS5zdGF0ZSA9IHN0YXRlOworICAgICAgICAgICAgICAgIHdkLT5hcC5zdGFUYWJsZVtpbmRleF0udGltZSA9IHdkLT50aWNrOworICAgICAgICAgICAgICAgIHdkLT5hcC5zdGFUYWJsZVtpbmRleF0ucW9zVHlwZSA9IHFvc1R5cGU7CisgICAgICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2luZGV4XS52YXAgPSAodThfdClhcElkOworICAgICAgICAgICAgICAgIHdkLT5hcC5zdGFUYWJsZVtpbmRleF0uc3RhVHlwZSA9IHR5cGU7CisgICAgICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2luZGV4XS5xb3NJbmZvID0gcW9zSW5mbzsKKworICAgICAgICAgICAgICAgIGlmICh3ZC0+ZnJlcXVlbmN5IDwgMzAwMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIEluaXQgMTFiL2cgKi8KKyAgICAgICAgICAgICAgICAgICAgemZSYXRlQ3RybEluaXRDZWxsKGRldiwgJndkLT5hcC5zdGFUYWJsZVtpbmRleF0ucmNDZWxsLCB0eXBlLCAxLCAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogSW5pdCAxMWEgKi8KKyAgICAgICAgICAgICAgICAgICAgemZSYXRlQ3RybEluaXRDZWxsKGRldiwgJndkLT5hcC5zdGFUYWJsZVtpbmRleF0ucmNDZWxsLCB0eXBlLCAwLCAxKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAod2QtPnpmY2JBcENvbm5lY3ROb3RpZnkgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdkLT56ZmNiQXBDb25uZWN0Tm90aWZ5KGRldiwgKHU4X3QqKWFkZHIsIGFwSWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbmRleCA9IDB4ZmZmZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB6bV9tc2cwX21tKFpNX0xWXzIsICJOb3QgZm91bmQiKTsKKyAgICAgICAgaWYgKChzdGF0ZSA9PSBaTV9TVEFURV9BVVRIKSB8fCAoc3RhdGUgPT0gWk1fU1RBVEVfUFJFQVVUSCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEdldCBhIG5ldyBTVEEgYW5kIHVwZGF0ZSBzdGF0ZSAqLworICAgICAgICAgICAgaW5kZXggPSB6ZkFwR2V0TmV3U3RhKGRldik7CisgICAgICAgICAgICB6bV9tc2cyX21tKFpNX0xWXzEsICJuZXcgU1RBIGluZGV4PSIsIGluZGV4KTsKKworICAgICAgICAgICAgaWYgKGluZGV4ICE9IDB4ZmZmZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTwzOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3ZC0+YXAuc3RhVGFibGVbaW5kZXhdLmFkZHJbaV0gPSBhZGRyW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3ZC0+YXAuc3RhVGFibGVbaW5kZXhdLnN0YXRlID0gc3RhdGU7CisgICAgICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2luZGV4XS52YWxpZCA9IDE7CisgICAgICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2luZGV4XS50aW1lID0gd2QtPnRpY2s7CisgICAgICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2luZGV4XS52YXAgPSAodThfdClhcElkOworICAgICAgICAgICAgICAgIHdkLT5hcC5zdGFUYWJsZVtpbmRleF0uZW5jcnlNb2RlID0gWk1fTk9fV0VQOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHJldHVybiBpbmRleDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZBcEFnaW5nU3RhICAgICAgICAgICAgICAgICovCisvKiAgICAgIEFnaW5nIFNUQSBpbiBzdGF0aW9uIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG51bWJlciBvZiAxMWIgU1RBIGluIFNUQSB0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFN0ZXBoZW4gQ2hlbiAgICAgICAgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAgICAyMDA1LjEwICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHpmQXBBZ2luZ1N0YSh6ZGV2X3QqIGRldikKK3sKKyAgICB1MTZfdCBpOworICAgIHUzMl90IGRlbHRhTXM7CisgICAgdTE2X3QgYWRkclszXTsKKyAgICB1MTZfdCB0eEZsYWc7CisgICAgdTE2X3QgcHNTdGFDb3VudCA9IDA7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgd2QtPmFwLmdTdGFBc3NvY2lhdGVkID0gd2QtPmFwLmJTdGFBc3NvY2lhdGVkID0gMDsKKworICAgIGZvciAoaT0wOyBpPFpNX01BWF9TVEFfU1VQUE9SVDsgaSsrKQorICAgIHsKKyAgICAgICAgdHhGbGFnID0gMDsKKyAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgaWYgKHdkLT5hcC5zdGFUYWJsZVtpXS52YWxpZCA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICBhZGRyWzBdID0gd2QtPmFwLnN0YVRhYmxlW2ldLmFkZHJbMF07CisgICAgICAgICAgICBhZGRyWzFdID0gd2QtPmFwLnN0YVRhYmxlW2ldLmFkZHJbMV07CisgICAgICAgICAgICBhZGRyWzJdID0gd2QtPmFwLnN0YVRhYmxlW2ldLmFkZHJbMl07CisgICAgICAgICAgICAvKiBtaWxsaXNlY29uZCAqLworICAgICAgICAgICAgZGVsdGFNcyA9ICh1MzJfdCkoKHUzMl90KXdkLT50aWNrLSh1MzJfdCl3ZC0+YXAuc3RhVGFibGVbaV0udGltZSkKKyAgICAgICAgICAgICAgICAgICAgICAqIFpNX01TX1BFUl9USUNLOworCisgICAgICAgICAgICAvKiBwcmVhdXRoICovCisgICAgICAgICAgICBpZiAoKHdkLT5hcC5zdGFUYWJsZVtpXS5zdGF0ZSA9PSBaTV9TVEFURV9QUkVBVVRIKQorICAgICAgICAgICAgICAgICAgICAmJiAoZGVsdGFNcyA+IFpNX1BSRUFVVEhfVElNRU9VVF9NUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogQWdpbmcgU1RBICovCisgICAgICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2ldLnZhbGlkID0gMDsKKyAgICAgICAgICAgICAgICB3ZC0+YXAuYXV0aFNoYXJpbmcgPSAwOworICAgICAgICAgICAgICAgIHR4RmxhZyA9IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGF1dGggKi8KKyAgICAgICAgICAgIGlmICgod2QtPmFwLnN0YVRhYmxlW2ldLnN0YXRlID09IFpNX1NUQVRFX0FVVEgpCisgICAgICAgICAgICAgICAgICAgICYmIChkZWx0YU1zID4gWk1fQVVUSF9USU1FT1VUX01TKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBBZ2luZyBTVEEgKi8KKyAgICAgICAgICAgICAgICB3ZC0+YXAuc3RhVGFibGVbaV0udmFsaWQgPSAwOworICAgICAgICAgICAgICAgIHR4RmxhZyA9IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGFzb2MgKi8KKyAgICAgICAgICAgIGlmICh3ZC0+YXAuc3RhVGFibGVbaV0uc3RhdGUgPT0gWk1fU1RBVEVfQVNPQykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAod2QtPmFwLnN0YVRhYmxlW2ldLnBzTW9kZSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHNTdGFDb3VudCsrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChkZWx0YU1zID4gKCh1MzJfdCl3ZC0+YXAuc3RhQWdpbmdUaW1lU2VjPDwxMCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBBZ2luZyBTVEEgKi8KKyAgICAgICAgICAgICAgICAgICAgem1fbXNnMV9tbShaTV9MVl8wLCAiQWdlIFNUQSBpbmRleD0iLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2ldLnZhbGlkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgdHhGbGFnID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGVsdGFNcyA+ICgodTMyX3Qpd2QtPmFwLnN0YVByb2JpbmdUaW1lU2VjPDwxMCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAod2QtPmFwLnN0YVRhYmxlW2ldLnBzTW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBQcm9iaW5nIG5vbi1QUyBTVEEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHptX21zZzFfbW0oWk1fTFZfMCwgIlByb2JpbmcgU1RBIGluZGV4PSIsIGkpOworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2ldLnRpbWUgKz0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdkLT5hcC5zdGFQcm9iaW5nVGltZVNlYyAqIFpNX1RJQ0tfUEVSX1NFQ09ORCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0eEZsYWcgPSAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisKKyAgICAgICAgfQorICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgIGlmICh0eEZsYWcgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogU2VuZCBkZWF1dGhlbnRpY2F0aW9uIG1hbmFnZW1lbnQgZnJhbWUgKi8KKyAgICAgICAgICAgIHpmU2VuZE1tRnJhbWUoZGV2LCBaTV9XTEFOX0ZSQU1FX1RZUEVfREVBVVRILCBhZGRyLCA0LCAwLCAwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eEZsYWcgPT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgemZTZW5kTW1GcmFtZShkZXYsIFpNX1dMQU5fREFUQV9GUkFNRSwgYWRkciwgMCwgMCwgMCk7CisgICAgICAgIH0KKworICAgIH0KKworICAgIHdkLT5hcC5zdGFQb3dlclNhdmluZyA9IHBzU3RhQ291bnQ7CisKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgemZBcFByb3RjdGlvbk1vbml0b3IoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLyogMTFiIFNUQSBhc3NvY2lhdGVkID0+IG5vbkVycCwgUHJvdGVjdCAqLworICAgIGlmICh3ZC0+YXAuYlN0YUFzc29jaWF0ZWQgPiAwKQorICAgIHsKKyAgICAgICAgLyogRW5hYmxlIE5vbkVycCBiaXQgaW4gaW5mb3JtYXRpb24gZWxlbWVudCAqLworICAgICAgICB3ZC0+ZXJwRWxlbWVudCA9IFpNX1dMQU5fTk9OX0VSUF9QUkVTRU5UX0JJVAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgWk1fV0xBTl9VU0VfUFJPVEVDVElPTl9CSVQ7CisKKyAgICAgICAgLyogRW5hYmxlIHByb3RlY3Rpb24gbW9kZSAqLworICAgICAgICB6ZkFwU2V0UHJvdGVjdGlvbk1vZGUoZGV2LCAxKTsKKworICAgIH0KKyAgICAvKiAxMWIgU1RBIG5vdCBhc3NvY2lhdGVkLCBwcm90ZWN0aW9uIE9CU1MgcHJlc2VudCA9PiBQcm90ZWN0ICovCisgICAgZWxzZSBpZiAod2QtPmFwLnByb3RlY3RlZE9ic3MgPiAyKSAvL1RocmVzaG9sZAorICAgIHsKKyAgICAgICAgaWYgKHdkLT5kaXNhYmxlU2VsZkN0cyA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBEaXNhYmxlIE5vbkVycCBiaXQgaW4gaW5mb3JtYXRpb24gZWxlbWVudCAqLworICAgICAgICAgICAgd2QtPmVycEVsZW1lbnQgPSBaTV9XTEFOX1VTRV9QUk9URUNUSU9OX0JJVDsKKworICAgICAgICAgICAgLyogRW5hYmxlIHByb3RlY3Rpb24gbW9kZSAqLworICAgICAgICAgICAgemZBcFNldFByb3RlY3Rpb25Nb2RlKGRldiwgMSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogRGlzYWJsZSBOb25FcnAgYml0IGluIGluZm9ybWF0aW9uIGVsZW1lbnQgKi8KKyAgICAgICAgd2QtPmVycEVsZW1lbnQgPSAwOworCisgICAgICAgIC8qIERpc2FibGUgcHJvdGVjdGlvbiBtb2RlICovCisgICAgICAgIHpmQXBTZXRQcm90ZWN0aW9uTW9kZShkZXYsIDApOworICAgIH0KKyAgICB3ZC0+YXAucHJvdGVjdGVkT2JzcyA9IDA7Cit9CisKKwordm9pZCB6ZkFwUHJvY2Vzc0JlYWNvbih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgdTE2X3Qgb2Zmc2V0OworICAgIHU4X3QgY2g7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bV9tc2cwX21tKFpNX0xWXzMsICJSeCBiZWFjb24iKTsKKworICAgIC8qIHVwZGF0ZSBOb24tRVJQIGZsYWcod2QtPmFwLm5vbkVycE9ic3MpICovCisgICAgaWYgKChvZmZzZXQgPSB6ZkZpbmRFbGVtZW50KGRldiwgYnVmLCBaTV9XTEFOX0VJRF9FUlApKSA9PSAweGZmZmYpCisgICAgeworICAgICAgICAvKiAxMWIgT0JTUyAqLworICAgICAgICB3ZC0+YXAucHJvdGVjdGVkT2JzcysrOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2ggPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMik7CisgICAgaWYgKChjaCAmIFpNX1dMQU5fVVNFX1BST1RFQ1RJT05fQklUKSA9PSBaTV9XTEFOX1VTRV9QUk9URUNUSU9OX0JJVCkKKyAgICB7CisgICAgICAgIC8qIFByb3RlY3RlZCBPQlNTICovCisgICAgICAgIHdkLT5hcC5wcm90ZWN0ZWRPYnNzID0gMTsKKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmUHJvY2Vzc0F1dGggICAgICAgICAgICAgICAqLworLyogICAgICBQcm9jZXNzIGF1dGhlbnRpY2F0ZSBtYW5hZ2VtZW50IGZyYW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmIDogYXV0aCBmcmFtZSBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgbm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDUuMTAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE5vdGUgOiBBUCBhbGxvd3Mgb25lIGF1dGhlbnRpY2F0aW5nIFNUQSBhdCBhIHRpbWUsIGRvZXMgbm90ICAgICAgICAgICovCisvKiAgICAgICAgc3VwcG9ydCBtdWx0aXBsZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzLiBNYWtlIHN1cmUgICAgICAgICAgICAqLworLyogICAgICAgIGF1dGhlbnRpY2F0aW9uIHN0YXRlIG1hY2hpbmUgd2lsbCBub3QgYmUgYmxvY2tlZCBkdWUgICAgICAgICAgKi8KKy8qICAgICAgICB0byBpbmNvbXBsZXRlZCBhdXRoZW50aWNhdGlvbiBoYW5kc2hha2UuICAgICAgICAgICAgICAgICAgICAgICovCit2b2lkIHpmQXBQcm9jZXNzQXV0aCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90KiBzcmMsIHUxNl90IGFwSWQpCit7CisgICAgdTE2X3QgYWxnbywgc2VxLCBzdGF0dXM7CisgICAgdThfdCBhdXRoU2hhcmluZzsKKyAgICB1MTZfdCByZXQ7CisgICAgdTE2X3QgaTsKKyAgICB1OF90IGNoYWxsZW5nZVBhc3NlZCA9IDA7CisgICAgdThfdCBmcmFtZUN0cmw7CisgICAgdTMyX3QgcmV0QWxnb1NlcTsKKyAgICB1MzJfdCByZXRTdGF0dXM7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKworICAgIGZyYW1lQ3RybCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDEpOworICAgIC8qIEFQIDogQXV0aCBzaGFyZSAzICovCisgICAgLyogc2hpZnQgZm9yIFdFUCBJViAqLworICAgIGlmICgoZnJhbWVDdHJsICYgMHg0MCkgIT0gMCkKKyAgICB7CisgICAgICAgIGFsZ28gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAyOCk7CisgICAgICAgIHNlcSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDMwKTsKKyAgICAgICAgc3RhdHVzID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMzIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhbGdvID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMjQpOworICAgICAgICBzZXEgPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAyNik7CisgICAgICAgIHN0YXR1cyA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDI4KTsKKyAgICB9CisKKyAgICB6bV9tc2cyX21tKFpNX0xWXzAsICJSeCBBdXRoLCBzZXE9Iiwgc2VxKTsKKworICAgIC8qIFNldCBkZWZhdWx0IHRvIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBub3Qgc3VwcG9ydCAqLworICAgIHJldEFsZ29TZXEgPSAweDIwMDAwIHwgYWxnbzsKKyAgICByZXRTdGF0dXMgPSAxMzsgLyogYXV0aGVudGljYXRpb24gYWxnb3JpdGhtIG5vdCBzdXBwb3J0ICovCisKKyAgICAvKiBBUCA6IEF1dGggb3BlbiAxICovCisgICAgaWYgKGFsZ28gPT0gMCkKKyAgICB7CisgICAgICAgIGlmICh3ZC0+YXAuYXV0aEFsZ29bYXBJZF0gPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0QWxnb1NlcSA9IDB4MjAwMDA7CisgICAgICAgICAgICBpZiAoc2VxID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogQVAgOiB1cGRhdGUgU1RBIHRvIGF1dGggKi8KKyAgICAgICAgICAgICAgICBpZiAoKHJldCA9IHpmQXBBZGRTdGEoZGV2LCBzcmMsIFpNX1NUQVRFX0FVVEgsIGFwSWQsIDAsIDAsIDApKSAhPSAweGZmZmYpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBBUCA6IGNhbGwgemZ3QXV0aE5vdGlmeSgpIGZvciBob3N0IHRvIGp1ZGdlICovCisgICAgICAgICAgICAgICAgICAgIC8vemZ3QXV0aE5vdGlmeShkZXYsIHNyYyk7CisKKyAgICAgICAgICAgICAgICAgICAgLyogQVAgOiByZXNwb25zZSBBdXRoIHNlcT0yLCBzdWNjZXNzICovCisgICAgICAgICAgICAgICAgICAgIHJldFN0YXR1cyA9IDA7CisKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogQVAgOiByZXNwb25zZSBBdXRoIHNlcT0yLCB1bnNwZWNpZmljIGVycm9yICovCisgICAgICAgICAgICAgICAgICAgIHJldFN0YXR1cyA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIEFQIDogcmVzcG9uc2UgQXV0aCBzZXE9Miwgc2VxdWVuY2UgbnVtYmVyIG91dCBvZiBleHBlY3RlZCAqLworICAgICAgICAgICAgICAgIHJldFN0YXR1cyA9IDE0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8qIEFQIDogQXV0aCBzaGFyZSAxICovCisgICAgZWxzZSBpZiAoYWxnbyA9PSAxKQorICAgIHsKKyAgICAgICAgaWYgKHdkLT5hcC5hdXRoQWxnb1thcElkXSA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc2VxID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0QWxnb1NlcSA9IDB4MjAwMDE7CisKKyAgICAgICAgICAgICAgICAvKiBjcml0aWNhbCBzZWN0aW9uICovCisgICAgICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgICAgICBpZiAod2QtPmFwLmF1dGhTaGFyaW5nID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhdXRoU2hhcmluZyA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGF1dGhTaGFyaW5nID0gMDsKKyAgICAgICAgICAgICAgICAgICAgd2QtPmFwLmF1dGhTaGFyaW5nID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogZW5kIG9mIGNyaXRpY2FsIHNlY3Rpb24gKi8KKyAgICAgICAgICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgICAgICAgICAgaWYgKGF1dGhTaGFyaW5nID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBBUCA6IHJlc3BvbnNlIEF1dGggc2VxPTIsIHN0YXR1cyA9IGZhaWwgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0U3RhdHVzID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogQVAgOiB1cGRhdGUgU1RBIHRvIHByZWF1dGggKi8KKyAgICAgICAgICAgICAgICAgICAgemZBcEFkZFN0YShkZXYsIHNyYywgWk1fU1RBVEVfUFJFQVVUSCwgYXBJZCwgMCwgMCwgMCk7CisKKyAgICAgICAgICAgICAgICAgICAgLyogQVAgOiBjYWxsIHpmd0F1dGhOb3RpZnkoKSBmb3IgaG9zdCB0byBqdWRnZSAqLworICAgICAgICAgICAgICAgICAgICAvL3pmd0F1dGhOb3RpZnkoZGV2LCBzcmMpOworCisgICAgICAgICAgICAgICAgICAgIC8qIEFQIDogcmVzcG9uc2UgQXV0aCBzZXE9MiAqLworICAgICAgICAgICAgICAgICAgICByZXRTdGF0dXMgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHNlcSA9PSAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldEFsZ29TZXEgPSAweDQwMDAxOworCisgICAgICAgICAgICAgICAgaWYgKHdkLT5hcC5hdXRoU2hhcmluZyA9PSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogY2hlY2sgY2hhbGxlbmdlIHRleHQgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHptd19idWZfcmVhZGgoZGV2LCBidWYsIDMwKzQpID09IDB4ODAxMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8MTI4OyBpKyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdkLT5hcC5jaGFsbGVuZ2VUZXh0W2ldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gem13X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMzIraSs0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IDEyOCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFsbGVuZ2VQYXNzZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoYWxsZW5nZVBhc3NlZCA9PSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBBUCA6IHVwZGF0ZSBTVEEgdG8gYXV0aCAqLworICAgICAgICAgICAgICAgICAgICAgICAgemZBcEFkZFN0YShkZXYsIHNyYywgWk1fU1RBVEVfQVVUSCwgYXBJZCwgMCwgMCwgMCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFQIDogcmVzcG9uc2UgQXV0aCBzZXE9MiAqLworICAgICAgICAgICAgICAgICAgICAgICAgcmV0U3RhdHVzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFQIDogcmVzcG9uc2UgQXV0aCBzZXE9MiwgY2hhbGxlbmdlIGZhaWx1cmUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldFN0YXR1cyA9IDE1OworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUT0RPIDogZGVsZXRlIFNUQSAqLworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgd2QtPmFwLmF1dGhTaGFyaW5nID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0QWxnb1NlcSA9IDB4NDAwMDE7CisgICAgICAgICAgICAgICAgcmV0U3RhdHVzID0gMTQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB6ZlNlbmRNbUZyYW1lKGRldiwgWk1fV0xBTl9GUkFNRV9UWVBFX0FVVEgsIHNyYywgcmV0QWxnb1NlcSwKKyAgICAgICAgICAgIHJldFN0YXR1cywgYXBJZCk7CisgICAgcmV0dXJuOworfQorCit2b2lkIHpmQXBQcm9jZXNzQXNvY1JlcSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90KiBzcmMsIHUxNl90IGFwSWQpCit7CisgICAgdTE2X3QgYWlkID0gMHhmZmZmOworICAgIHU4X3QgZnJhbWVUeXBlOworICAgIHUxNl90IG9mZnNldDsKKyAgICB1OF90IHN0YVR5cGUgPSAwOworICAgIHU4X3QgcW9zVHlwZSA9IDA7CisgICAgdThfdCBxb3NJbmZvID0gMDsKKyAgICB1OF90IHRtcDsKKyAgICB1MTZfdCBpLCBqLCBrOworICAgIHUxNl90IGVuY01vZGUgPSAwOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIC8qIEFQIDogY2hlY2sgU1NJRCAqLworICAgIGlmICgob2Zmc2V0ID0gemZGaW5kRWxlbWVudChkZXYsIGJ1ZiwgWk1fV0xBTl9FSURfU1NJRCkpICE9IDB4ZmZmZikKKyAgICB7CisgICAgICAgIGsgPSAwOworICAgICAgICBmb3IgKGogPSAwOyBqIDwgd2QtPmFwLnZhcE51bWJlcjsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHRtcCA9IHptd19idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICE9IHdkLT5hcC5zc2lkTGVuW2pdKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGsrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoayA9PSB3ZC0+YXAudmFwTnVtYmVyKQorICAgICAgICB7CisgICAgICAgICAgICBnb3RvIHpsRGVhdXRoOworICAgICAgICB9CisKKyAgICAgICAgayA9IDA7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCB3ZC0+YXAudmFwTnVtYmVyOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaT0wOyBpPHdkLT5hcC5zc2lkTGVuW2pdOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCh0bXAgPSB6bXdfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMitpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICE9IHdkLT5hcC5zc2lkW2pdW2ldKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGkgPT0gd2QtPmFwLnNzaWRMZW5bal0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXBJZCA9IGo7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaysrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChrID09IHdkLT5hcC52YXBOdW1iZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdvdG8gemxEZWF1dGg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBUT0RPIDogY2hlY2sgY2FwYWJpbGl0eSAqLworCisgICAgLyogQVAgOiBjaGVjayBzdXBwb3J0IHJhdGUgKi8KKyAgICBpZiAoKG9mZnNldCA9IHpmRmluZEVsZW1lbnQoZGV2LCBidWYsIFpNX1dMQU5fRUlEX0VYVEVOREVEX1JBVEUpKSAhPSAweGZmZmYpCisgICAgeworICAgICAgICAvKiAxMWcgU1RBICovCisgICAgICAgIHN0YVR5cGUgPSAxOworICAgIH0KKyAgICAvL0NXWWFuZygrKQorICAgIGlmICgob2Zmc2V0ID0gemZGaW5kRWxlbWVudChkZXYsIGJ1ZiwgWk1fV0xBTl9FSURfSFRfQ0FQQUJJTElUWSkpICE9IDB4ZmZmZikKKyAgICB7CisgICAgICAgIC8qIDExbiBTVEEgKi8KKyAgICAgICAgc3RhVHlwZSA9IDI7CisgICAgfQorCisgICAgLyogVE9ETyA6IGRvIG5vdCBhbGxvdyAxMWIgU1RBIHRvIGFzc29jaWF0ZWQgaW4gUHVyZSBHIG1vZGUgKi8KKyAgICBpZiAod2QtPmFwLndsYW5UeXBlW2FwSWRdID09IFpNX1dMQU5fVFlQRV9QVVJFX0cgJiYgc3RhVHlwZSA9PSAwKQorICAgIHsKKyAgICAgICAgemZTZW5kTW1GcmFtZShkZXYsIFpNX1dMQU5fRlJBTUVfVFlQRV9ERUFVVEgsIHNyYywgMywgMCwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBJbiBwdXJlIEIgbW9kZSwgd2Ugc2V0IEcgU1RBIGludG8gQiBtb2RlICovCisgICAgaWYgKHdkLT5hcC53bGFuVHlwZVthcElkXSA9PSBaTV9XTEFOX1RZUEVfUFVSRV9CICYmIHN0YVR5cGUgPT0gMSkKKyAgICB7CisgICAgICAgIHN0YVR5cGUgPSAwOworICAgIH0KKworICAgIC8qIEFQIDogY2hlY2sgMTFpIGFuZCBXUEEgKi8KKyAgICAvKiBBUCA6IGNoZWNrIDExaCAqLworCisgICAgLyogQVAgOiBjaGVjayBXTUUgKi8KKyAgICBpZiAoKG9mZnNldCA9IHpmRmluZFdpZmlFbGVtZW50KGRldiwgYnVmLCAyLCAwKSkgIT0gMHhmZmZmKQorICAgIHsKKyAgICAgICAgLyogV01FIFNUQSAqLworICAgICAgICBxb3NUeXBlID0gMTsKKyAgICAgICAgem1fbXNnMF9tbShaTV9MVl8wLCAiV01FIFNUQSIpOworCisgICAgICAgIGlmICh3ZC0+YXAudWFwc2RFbmFibGVkICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHFvc0luZm8gPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrOCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAod2QtPmFwLndwYVN1cHBvcnRbYXBJZF0gPT0gMSkKKyAgICB7CisgICAgICAgIGlmICggKG9mZnNldCA9IHpmRmluZEVsZW1lbnQoZGV2LCBidWYsIFpNX1dMQU5fRUlEX1dQQV9JRSkpICE9IDB4ZmZmZiApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIGdldCBXUEEgSUUgKi8KKyAgICAgICAgICAgIHU4X3QgbGVuZ3RoID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzEpOworICAgICAgICAgICAgaWYgKGxlbmd0aCsyIDwgWk1fTUFYX1dQQUlFX1NJWkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZDb3B5RnJvbVJ4QnVmZmVyKGRldiwgYnVmLCB3ZC0+YXAuc3Rhd3BhSWVbYXBJZF0sIG9mZnNldCwgbGVuZ3RoKzIpOworICAgICAgICAgICAgICAgIHdkLT5hcC5zdGF3cGFMZW5bYXBJZF0gPSBsZW5ndGgrMjsKKyAgICAgICAgICAgICAgICBlbmNNb2RlID0gMTsKKworCisgICAgICAgICAgICAgICAgem1fbXNnMV9tbShaTV9MVl8wLCAiV1BBIE1vZGUgemZ3QXNvY05vdGlmeSwgYXBJZD0iLCBhcElkKTsKKworICAgICAgICAgICAgICAgIC8qIEFQIDogQ2FsbCB6ZndBc29jTm90aWZ5KCkgKi8KKyAgICAgICAgICAgICAgICBpZiAod2QtPnpmY2JBc29jTm90aWZ5ICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3ZC0+emZjYkFzb2NOb3RpZnkoZGV2LCBzcmMsIHdkLT5hcC5zdGF3cGFJZVthcElkXSwgd2QtPmFwLnN0YXdwYUxlblthcElkXSwgYXBJZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdvdG8gemxEZWF1dGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIChvZmZzZXQgPSB6ZkZpbmRFbGVtZW50KGRldiwgYnVmLCBaTV9XTEFOX0VJRF9SU05fSUUpKSAhPSAweGZmZmYgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBnZXQgUlNOIElFICovCisgICAgICAgICAgICB1OF90IGxlbmd0aCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKTsKKyAgICAgICAgICAgIGlmIChsZW5ndGgrMiA8IFpNX01BWF9XUEFJRV9TSVpFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmQ29weUZyb21SeEJ1ZmZlcihkZXYsIGJ1Ziwgd2QtPmFwLnN0YXdwYUllW2FwSWRdLCBvZmZzZXQsIGxlbmd0aCsyKTsKKyAgICAgICAgICAgICAgICB3ZC0+YXAuc3Rhd3BhTGVuW2FwSWRdID0gbGVuZ3RoKzI7CisgICAgICAgICAgICAgICAgZW5jTW9kZSA9IDE7CisKKyAgICAgICAgICAgICAgICB6bV9tc2cxX21tKFpNX0xWXzAsICJSU04gTW9kZSB6ZndBc29jTm90aWZ5LCBhcElkPSIsIGFwSWQpOworCisgICAgICAgICAgICAgICAgLyogQVAgOiBDYWxsIHpmd0Fzb2NOb3RpZnkoKSAqLworICAgICAgICAgICAgICAgIGlmICh3ZC0+emZjYkFzb2NOb3RpZnkgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdkLT56ZmNiQXNvY05vdGlmeShkZXYsIHNyYywgd2QtPmFwLnN0YXdwYUllW2FwSWRdLCB3ZC0+YXAuc3Rhd3BhTGVuW2FwSWRdLCBhcElkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ290byB6bERlYXV0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisgICAgICAgIGVsc2UgaWYgKCAob2Zmc2V0ID0gemZGaW5kRWxlbWVudChkZXYsIGJ1ZiwgWk1fV0xBTl9FSURfQ0VOQ19JRSkpICE9IDB4ZmZmZiApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIGdldCBDRU5DIElFICovCisgICAgICAgICAgICB1OF90IGxlbmd0aCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKTsKKworICAgICAgICAgICAgaWYgKGxlbmd0aCsyIDwgWk1fTUFYX1dQQUlFX1NJWkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZDb3B5RnJvbVJ4QnVmZmVyKGRldiwgYnVmLCB3ZC0+YXAuc3Rhd3BhSWVbYXBJZF0sIG9mZnNldCwgbGVuZ3RoKzIpOworICAgICAgICAgICAgICAgIHdkLT5hcC5zdGF3cGFMZW5bYXBJZF0gPSBsZW5ndGgrMjsKKyAgICAgICAgICAgICAgICBlbmNNb2RlID0gMTsKKworICAgICAgICAgICAgICAgIHptX21zZzFfbW0oWk1fTFZfMCwgIkNFTkMgTW9kZSB6ZndBc29jTm90aWZ5LCBhcElkPSIsIGFwSWQpOworCisgICAgICAgICAgICAgICAgLyogQVAgOiBDYWxsIHpmd0Fzb2NOb3RpZnkoKSAqLworICAgICAgICAgICAgICAgIGlmICh3ZC0+emZjYkNlbmNBc29jTm90aWZ5ICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3ZC0+emZjYkNlbmNBc29jTm90aWZ5KGRldiwgc3JjLCB3ZC0+YXAuc3Rhd3BhSWVbYXBJZF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPmFwLnN0YXdwYUxlblthcElkXSwgYXBJZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdvdG8gemxEZWF1dGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCisgICAgICAgIGVsc2UKKyAgICAgICAgeyAgIC8qIGFwIGlzIGVuY3J5cHRpb24gYnV0IHN0YSBoYXMgbm8gd3BhL3JzbiBpZSAqLworICAgICAgICAgICAgemZTZW5kTW1GcmFtZShkZXYsIFpNX1dMQU5fRlJBTUVfVFlQRV9ERUFVVEgsIHNyYywgNiwgMCwgMCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgLyogc3RhIGhhcyB3cGEvcnNuIGllIGJ1dCBhcCBpcyBubyBlbmNyeXB0aW9uICovCisgICAgaWYgKCh3ZC0+YXAud3BhU3VwcG9ydFthcElkXSA9PSAwKSAmJiAoZW5jTW9kZSA9PSAxKSkKKyAgICB7CisgICAgICAgIHpmU2VuZE1tRnJhbWUoZGV2LCBaTV9XTEFOX0ZSQU1FX1RZUEVfREVBVVRILCBzcmMsIDYsIDAsIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogQVAgOiB1cGRhdGUgU1RBIHRvIGFzb2MgKi8KKyAgICBhaWQgPSB6ZkFwQWRkU3RhKGRldiwgc3JjLCBaTV9TVEFURV9BU09DLCBhcElkLCBzdGFUeXBlLCBxb3NUeXBlLCBxb3NJbmZvKTsKKworICAgIHpmQXBTdG9yZUFzb2NSZXFJZShkZXYsIGJ1ZiwgYWlkKTsKKworemxEZWF1dGg6CisgICAgLyogQVAgOiBzZW5kIGFzb2MgcnNwMiAqLworICAgIGlmIChhaWQgIT0gMHhmZmZmKQorICAgIHsKKyAgICAgICAgZnJhbWVUeXBlID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMCk7CisKKyAgICAgICAgaWYgKGZyYW1lVHlwZSA9PSBaTV9XTEFOX0ZSQU1FX1RZUEVfQVNPQ1JFUSkKKyAgICAgICAgeworICAgICAgICAgICAgemZTZW5kTW1GcmFtZShkZXYsIFpNX1dMQU5fRlJBTUVfVFlQRV9BU09DUlNQLCBzcmMsIDAsIGFpZCsxLCBhcElkKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmU2VuZE1tRnJhbWUoZGV2LCBaTV9XTEFOX0ZSQU1FX1RZUEVfUkVBU09DUlNQLCBzcmMsIDAsIGFpZCsxLCBhcElkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBUT0RPIDogc2VuZCBkZWF1dGhlbnRpY2F0aW9uICovCisgICAgICAgIHpmU2VuZE1tRnJhbWUoZGV2LCBaTV9XTEFOX0ZSQU1FX1RZUEVfREVBVVRILCBzcmMsIDYsIDAsIDApOworICAgIH0KKworICAgIHJldHVybjsKK30KKwordm9pZCB6ZkFwU3RvcmVBc29jUmVxSWUoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBhaWQpCit7CisgICAgLy9zdHJ1Y3QgenNXbGFuQXNzb0ZyYW1lSGVhZGVyKiBwQXNzb0ZyYW1lOworICAgIC8vdThfdCAgcEJ1ZltzaXplb2Yoc3RydWN0IHpzV2xhbkFzc29GcmFtZUhlYWRlcildOworICAgIHUxNl90IG9mZnNldDsKKyAgICB1MzJfdCBpOworICAgIHUxNl90IGxlbmd0aDsKKyAgICB1OF90ICAqaHRjYXA7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBmb3IgKGk9MDsgaTx3ZC0+c3RhLmFzb2NSc3BGcmFtZUJvZHlTaXplOyBpKyspCisgICAgeworICAgICAgICB3ZC0+c3RhLmFzb2NSc3BGcmFtZUJvZHlbaV0gPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBpKzI0KTsKKyAgICB9CisgICAgLyogY2FwYWJpbGl0eTogMiBvY3RldHMgKi8KKyAgICBvZmZzZXQgPSAyNDsKKworICAgIC8qIExpc3RlbiBpbnRlcnZhbDogMiBvY3RldHMgKi8KKyAgICBvZmZzZXQgPSAyNjsKKworICAgIC8qIFNTSUQgKi8KKyAgICBvZmZzZXQgPSAyODsKKworICAgIC8qIHN1cHBvcnRlZCByYXRlcyAqLworICAgIGlmICgob2Zmc2V0ID0gemZGaW5kRWxlbWVudChkZXYsIGJ1ZiwgWk1fV0xBTl9FSURfU1VQUE9SVF9SQVRFKSkgPT0gMHhmZmZmKQorICAgICAgICByZXR1cm47CisgICAgbGVuZ3RoID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0ICsgMSk7CisKKyAgICAvKiBleHRlbmRlZCBzdXBwb3J0ZWQgcmF0ZXMgKi8KKyAgICBpZiAoKG9mZnNldCA9IHpmRmluZEVsZW1lbnQoZGV2LCBidWYsIFpNX1dMQU5fRUlEX0VYVEVOREVEX1JBVEUpKSA9PSAweGZmZmYpCisgICAgICAgIHJldHVybjsKKyAgICBsZW5ndGggPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQgKyAxKTsKKworICAgIC8qIHBvd2VyIGNhcGFiaWxpdHk6NCBvY3RldHMgKi8KKyAgICBvZmZzZXQgPSBvZmZzZXQgKyAyICsgbGVuZ3RoOworCisgICAgLyogc3VwcG9ydGVkIGNoYW5uZWxzOiA0IG9jdGV0cyAqLworICAgIG9mZnNldCA9IG9mZnNldCArIDIgKyA0OworCisgICAgLyogUlNOICovCisKKyAgICAvKiBRb1MgKi8KKworICAgIC8qIEhUIGNhcGFiaWxpdGllczogMjggb2N0ZXRzICovCisgICAgaWYgKChvZmZzZXQgPSB6ZkZpbmRFbGVtZW50KGRldiwgYnVmLCBaTV9XTEFOX0VJRF9IVF9DQVBBQklMSVRZKSkgIT0gMHhmZmZmKSB7CisgICAgICAgIC8qIGF0aGVyb3MgcHJlIG4gKi8KKyAgICAgICAgaHRjYXAgPSAodThfdCAqKSZ3ZC0+YXAuaWVbYWlkXS5IdENhcDsKKyAgICAgICAgaHRjYXBbMF0gPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQpOworICAgICAgICBodGNhcFsxXSA9IDI2OworICAgICAgICBmb3IgKGk9MTsgaTw9MjY7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaHRjYXBbaSsxXSA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCArIGkpOworICAgICAgICAgICAgem1fZGVidWdfbXNnMigiQVNPQzogIEhUIENhcGFiaWxpdGllcywgaHRjYXA9IiwgaHRjYXBbaSsxXSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmICgob2Zmc2V0ID0gemZGaW5kRWxlbWVudChkZXYsIGJ1ZiwgWk1fV0xBTl9QUkVOMl9FSURfSFRDQVBBQklMSVRZKSkgIT0gMHhmZmZmKSB7CisgICAgICAgIC8qIHByZSBuIDIuMCBzdGFuZGFyZCAqLworICAgICAgICBodGNhcCA9ICh1OF90ICopJndkLT5hcC5pZVthaWRdLkh0Q2FwOworICAgICAgICBmb3IgKGk9MDsgaTwyODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBodGNhcFtpXSA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCArIGkpOworICAgICAgICAgICAgem1fZGVidWdfbXNnMigiQVNPQzogIEhUIENhcGFiaWxpdGllcywgaHRjYXA9IiwgaHRjYXBbaV0pOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBub3QgMTFuIEFQICovCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKworICAgIC8qIHN1cHBvcnRlZCByZWd1bGF0b3J5IGNsYXNzZXMgKi8KKyAgICBvZmZzZXQgPSBvZmZzZXQgKyBsZW5ndGg7CisgICAgLy9sZW5ndGggPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQgKyAxKTsKKyAgICB7CisgICAgdThfdCAqaHRjYXA7CisgICAgaHRjYXAgPSAodThfdCAqKSZ3ZC0+c3RhLmllLkh0SW5mbzsKKyAgICAvL3ptX2RlYnVnX21zZzIoIkFTT0M6ICBIVCBDYXBhYmlsaXRpZXMgaW5mbz0iLCAoKHUxNl90ICopaHRjYXApWzFdKTsKKyAgICAvL3ptX2RlYnVnX21zZzIoIkFTT0M6ICBBLU1QRFUgcGFyYW1ldGVycz0iLCBodGNhcFs0XSk7CisgICAgLy96bV9kZWJ1Z19tc2cyKCJBU09DOiAgU3VwcG9ydGVkIE1DUyBzZXQ9IiwgKCh1MzJfdCAqKWh0Y2FwKVsxXT4+OCk7CisgICAgfQorCit9CisKK3ZvaWQgemZBcFByb2Nlc3NBc29jUnNwKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZikKK3sKKworfQorCit2b2lkIHpmQXBQcm9jZXNzRGVhdXRoKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QqIHNyYywgdTE2X3QgYXBJZCkKK3sKKyAgICB1MTZfdCBhaWQ7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIC8qIEFQIDogaWYgU0E9YXNzb2NpYXRlZCBTVEEgdGhlbiBkZWF1dGhlbnRpY2F0ZSBTVEEgKi8KKyAgICBpZiAoKGFpZCA9IHpmQXBGaW5kU3RhKGRldiwgc3JjKSkgIT0gMHhmZmZmKQorICAgIHsKKyAgICAgICAgLyogQ2xlYXIgU1RBIHRhYmxlICovCisgICAgICAgIHdkLT5hcC5zdGFUYWJsZVthaWRdLnZhbGlkID0gMDsKKyAgICAgICAgaWYgKHdkLT56ZmNiRGlzQXNvY05vdGlmeSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+emZjYkRpc0Fzb2NOb3RpZnkoZGV2LCAodThfdCopc3JjLCBhcElkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCit9CisKK3ZvaWQgemZBcFByb2Nlc3NEaXNhc29jKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QqIHNyYywgdTE2X3QgYXBJZCkKK3sKKyAgICB1MTZfdCBhaWQ7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIC8qIEFQIDogaWYgU0E9YXNzb2NpYXRlZCBTVEEgdGhlbiBkZWF1dGhlbnRpY2F0ZSBTVEEgKi8KKyAgICBpZiAoKGFpZCA9IHpmQXBGaW5kU3RhKGRldiwgc3JjKSkgIT0gMHhmZmZmKQorICAgIHsKKyAgICAgICAgLyogQ2xlYXIgU1RBIHRhYmxlICovCisgICAgICAgIHdkLT5hcC5zdGFUYWJsZVthaWRdLnZhbGlkID0gMDsKKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgaWYgKHdkLT56ZmNiRGlzQXNvY05vdGlmeSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+emZjYkRpc0Fzb2NOb3RpZnkoZGV2LCAodThfdCopc3JjLCBhcElkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCit9CisKKwordm9pZCB6ZkFwUHJvY2Vzc1Byb2JlUnNwKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Ziwgc3RydWN0IHpzQWRkaXRpb25JbmZvKiBBZGRJbmZvKQoreworI2lmIDAKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bV9tc2cwX21tKFpNX0xWXzAsICJSeCBwcm9iZXJzcCIpOworCisgICAgLyogR2F0aGVyIHNjYW4gcmVzdWx0ICovCisKKyAgICAvL3ptX2RlYnVnX21zZzEoImJzc0xpc3QgQ291bnQgPSAiLCB3ZC0+c3RhLmJzc0xpc3QuYnNzQ291bnQpOworICAgIC8qIHJldHVybiBpZiBub3QgaW4gc2Nhbm5pbmcgKi8KKyAgICBpZiAoKHdkLT5oZWFydEJlYXROb3RpZmljYXRpb24gJiBaTV9CU1NJRF9MSVNUX1NDQU4pCisgICAgICAgICAgICAhPSBaTV9CU1NJRF9MSVNUX1NDQU4pCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy9pZiAoIHdkLT5zdGEucFVwZGF0ZUJzc0xpc3QtPmJzc0NvdW50ID09IFpNX01BWF9CU1MgKQorICAgIGlmICggd2QtPnN0YS5ic3NMaXN0LmJzc0NvdW50ID09IFpNX01BWF9CU1MgKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHpmUHJvY2Vzc1Byb2JlUnNwKGRldiwgYnVmLCBBZGRJbmZvKTsKKworI2VuZGlmCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkFwQWRkSWVTc2lkICAgICAgICAgICAgICAgKi8KKy8qICAgICAgQWRkIEFQIGluZm9ybWF0aW9uIGVsZW1lbnQgU1NJRCB0byBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZiA6IGJ1ZmZlciB0byBhZGQgaW5mb3JtYXRpb24gZWxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBvZmZzZXQgOiBhZGQgaW5mb3JtYXRpb24gZWxlbWVudCBmcm9tIHRoaXMgb2Zmc2V0ICAgICAgICAgICAgICAgKi8KKy8qICAgICAgdmFwIDogdmlydHVhbCBBUCBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmZmVyIG9mZnNldCBhZnRlciBhZGRpbmcgaW5mb3JtYXRpb24gZWxlbWVudCAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDUuMTEgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90IHpmQXBBZGRJZVNzaWQoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQsIHUxNl90IHZhcCkKK3sKKyAgICB1MTZfdCBpOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLyogRWxlbWVudCBJRCAqLworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgWk1fV0xBTl9FSURfU1NJRCk7CisKKyAgICAvKiBFbGVtZW50IExlbmd0aCAqLworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgd2QtPmFwLnNzaWRMZW5bdmFwXSk7CisKKyAgICAvKiBJbmZvcm1hdGlvbiA6IFNTSUQgKi8KKyAgICBmb3IgKGk9MDsgaTx3ZC0+YXAuc3NpZExlblt2YXBdOyBpKyspCisgICAgeworICAgICAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIHdkLT5hcC5zc2lkW3ZhcF1baV0pOworICAgIH0KKworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmQXBBZGRJZVRpbSAgICAgICAgICAgICAgICAqLworLyogICAgICBBZGQgQVAgaW5mb3JtYXRpb24gZWxlbWVudCBUSU0gdG8gYnVmZmVyLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmIDogYnVmZmVyIHRvIGFkZCBpbmZvcm1hdGlvbiBlbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG9mZnNldCA6IGFkZCBpbmZvcm1hdGlvbiBlbGVtZW50IGZyb20gdGhpcyBvZmZzZXQgICAgICAgICAgICAgICAqLworLyogICAgICB2YXAgOiB2aXJ0dWFsIEFQIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBidWZmZXIgb2Zmc2V0IGFmdGVyIGFkZGluZyBpbmZvcm1hdGlvbiBlbGVtZW50ICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNS4xMSAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZBcEFkZEllVGltKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3Qgb2Zmc2V0LCB1MTZfdCB2YXApCit7CisgICAgdThfdCB1bmlCaXRNYXBbOV07CisgICAgdTE2X3QgaGlnaGVzdEJ5dGU7CisgICAgdTE2X3QgaTsKKyAgICB1MTZfdCBsZW5PZmZzZXQ7CisgICAgdTE2X3QgaWQ7CisgICAgdTE2X3QgZHN0WzNdOworICAgIHUxNl90IGFpZDsKKyAgICB1MTZfdCBiaXRQb3NpdGlvbjsKKyAgICB1MTZfdCBieXRlUG9zaXRpb247CisgICAgemJ1Zl90KiBwc0J1ZjsKKyAgICB6YnVmX3QqIHRtcEJ1ZkFycmF5W1pNX1VOSV9BUlJBWV9TSVpFXTsKKyAgICB1MTZfdCB0bXBCdWZBcnJheVNpemUgPSAwOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIC8qIEVsZW1lbnQgSUQgKi8KKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIFpNX1dMQU5fRUlEX1RJTSk7CisKKyAgICAvKiBvZmZzZXQgb2YgRWxlbWVudCBMZW5ndGggKi8KKyAgICBsZW5PZmZzZXQgPSBvZmZzZXQrKzsKKworICAgIC8qIEluZm9ybWF0aW9uIDogVElNICovCisgICAgLyogRFRJTSBjb3VudCAqLworICAgIC8qIFRPRE8gOiBEb2Vzbid0IHdvcmsgZm9yIFZpcnR1YWwgQVAncyBjYXNlICovCisgICAgd2QtPkN1cnJlbnREdGltQ291bnQrKzsKKyAgICBpZiAod2QtPkN1cnJlbnREdGltQ291bnQgPj0gd2QtPmR0aW0pCisgICAgeworICAgICAgICB3ZC0+Q3VycmVudER0aW1Db3VudCA9IDA7CisgICAgfQorICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgd2QtPkN1cnJlbnREdGltQ291bnQpOworICAgIC8qIERUSU0gcGVyaW9kICovCisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCB3ZC0+ZHRpbSk7CisgICAgLyogYml0bWFwIG9mZnNldCAqLworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgMCk7CisKKyAgICAvKiBVcGRhdGUgQkNNQyBiaXQgKi8KKyAgICBpZiAod2QtPkN1cnJlbnREdGltQ291bnQgPT0gMCkKKyAgICB7CisgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHdkLT5hcC50aW1CY21jQml0W3ZhcF0gPSAod2QtPmFwLmJjbWNUYWlsW3ZhcF0hPXdkLT5hcC5iY21jSGVhZFt2YXBdKT8xOjA7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHdkLT5hcC50aW1CY21jQml0W3ZhcF0gPSAwOworICAgIH0KKworICAgIC8qIFVwZGF0ZSBVbmljYXN0IGJpdG1hcCAqLworICAgIC8qIHJlc2V0IGJpdCBtYXAgKi8KKyAgICBmb3IgKGk9MDsgaTw5OyBpKyspCisgICAgeworICAgICAgICB1bmlCaXRNYXBbaV0gPSAwOworICAgIH0KKyAgICBoaWdoZXN0Qnl0ZSA9IDA7CisjaWYgMQorCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlkID0gd2QtPmFwLnVuaUhlYWQ7CisgICAgd2hpbGUgKGlkICE9IHdkLT5hcC51bmlUYWlsKQorICAgIHsKKyAgICAgICAgcHNCdWYgPSB3ZC0+YXAudW5pQXJyYXlbaWRdOworCisgICAgICAgIC8qIFRPRE8gOiBBZ2luZyBQUyBmcmFtZSBhZnRlciBxdWV1aW5nIGZvciBtb3JlIHRoYW4gMTAgc2Vjb25kcyAqLworCisgICAgICAgIC8qIGdldCBkZXN0aW5hdGlvbiBTVEEncyBhaWQgKi8KKyAgICAgICAgZHN0WzBdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIHBzQnVmLCAwKTsKKyAgICAgICAgZHN0WzFdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIHBzQnVmLCAyKTsKKyAgICAgICAgZHN0WzJdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIHBzQnVmLCA0KTsKKyAgICAgICAgaWYgKChhaWQgPSB6ZkFwRmluZFN0YShkZXYsIGRzdCkpICE9IDB4ZmZmZikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdkLT5hcC5zdGFUYWJsZVthaWRdLnBzTW9kZSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHptX21zZzFfbW0oWk1fTFZfMCwgImFpZD0iLGFpZCk7CisgICAgICAgICAgICAgICAgYWlkKys7CisgICAgICAgICAgICAgICAgem1fYXNzZXJ0KGFpZDw9NjQpOworICAgICAgICAgICAgICAgIGJpdFBvc2l0aW9uID0gKDEgPDwgKGFpZCAmIDB4NykpOworICAgICAgICAgICAgICAgIGJ5dGVQb3NpdGlvbiA9IChhaWQgPj4gMyk7CisgICAgICAgICAgICAgICAgdW5pQml0TWFwW2J5dGVQb3NpdGlvbl0gfD0gYml0UG9zaXRpb247CisKKyAgICAgICAgICAgICAgICBpZiAoYnl0ZVBvc2l0aW9uPmhpZ2hlc3RCeXRlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaGlnaGVzdEJ5dGUgPSBieXRlUG9zaXRpb247CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlkID0gKGlkKzEpICYgKFpNX1VOSV9BUlJBWV9TSVpFLTEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHptX21zZzBfbW0oWk1fTFZfMCwgIlNlbmQgUFMgZnJhbWUgd2hpY2ggU1RBIG5vIGxvbmdlciBpbiBQUyBtb2RlIik7CisgICAgICAgICAgICAgICAgLyogU2VuZCBQUyBmcmFtZSB3aGljaCBTVEEgbm8gbG9uZ2VyIGluIFBTIG1vZGUgKi8KKyAgICAgICAgICAgICAgICB6ZkFwUmVtb3ZlRnJvbVBzUXVldWUoZGV2LCBpZCwgZHN0KTsKKyAgICAgICAgICAgICAgICB0bXBCdWZBcnJheVt0bXBCdWZBcnJheVNpemUrK10gPSBwc0J1ZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHptX21zZzBfbW0oWk1fTFZfMCwgIkZyZWUgZ2FyYmFnZSBQUyBmcmFtZSIpOworICAgICAgICAgICAgLyogRnJlZSBnYXJiYWdlIFBTIGZyYW1lICovCisgICAgICAgICAgICB6ZkFwUmVtb3ZlRnJvbVBzUXVldWUoZGV2LCBpZCwgZHN0KTsKKyAgICAgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCBwc0J1ZiwgMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworI2VuZGlmCisKKyAgICB6ZlF1ZXVlR2VuZXJhdGVVYXBzZFRpbShkZXYsIHdkLT5hcC51YXBzZFEsIHVuaUJpdE1hcCwgJmhpZ2hlc3RCeXRlKTsKKworICAgIHptX21zZzFfbW0oWk1fTFZfMywgImJtPSIsdW5pQml0TWFwWzBdKTsKKyAgICB6bV9tc2cxX21tKFpNX0xWXzMsICJoaWdoZXN0Qnl0ZT0iLGhpZ2hlc3RCeXRlKTsKKyAgICB6bV9tc2cxX21tKFpNX0xWXzMsICJ0aW1CY21jQml0W109Iix3ZC0+YXAudGltQmNtY0JpdFt2YXBdKTsKKworICAgIC8qIGJpdG1hcCAqLworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bmlCaXRNYXBbMF0gfCB3ZC0+YXAudGltQmNtY0JpdFt2YXBdKTsKKyAgICBmb3IgKGk9MDsgaTxoaWdoZXN0Qnl0ZTsgaSsrKQorICAgIHsKKyAgICAgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCB1bmlCaXRNYXBbaSsxXSk7CisgICAgfQorCisgICAgLyogRWxlbWVudCBMZW5ndGggKi8KKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1ZiwgbGVuT2Zmc2V0LCBoaWdoZXN0Qnl0ZSs0KTsKKworICAgIGZvciAoaT0wOyBpPHRtcEJ1ZkFycmF5U2l6ZTsgaSsrKQorICAgIHsKKyAgICAgICAgLyogUHV0IHRvIFZUWFFbYWNdICovCisgICAgICAgIHpmUHV0VnR4cShkZXYsIHRtcEJ1ZkFycmF5W2ldKTsKKyAgICB9CisgICAgLyogUHVzaCBWVFhRW2FjXSAqLworICAgIHpmUHVzaFZ0eHEoZGV2KTsKKworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZBcFJlbW92ZUZyb21Qc1F1ZXVlICAgICAgICovCisvKiAgICAgIFJlbW92ZSB6YnVmIGZyb20gUFMgcXVldWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBpZCA6IGluZGV4IGluIHBzIHF1ZXVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBtb3JlIGRhdGEgYml0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIElOQy4gICAgMjAwNy4xICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordThfdCB6ZkFwUmVtb3ZlRnJvbVBzUXVldWUoemRldl90KiBkZXYsIHUxNl90IGlkLCB1MTZfdCogYWRkcikKK3sKKyAgICB1MTZfdCBkc3RbM107CisgICAgdTE2X3QgbmlkOworICAgIHU4X3QgbW9yZURhdGEgPSAwOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHdkLT5hcC51bmlUYWlsID0gKHdkLT5hcC51bmlUYWlsLTEpICYgKFpNX1VOSV9BUlJBWV9TSVpFLTEpOworICAgIHdoaWxlIChpZCAhPSB3ZC0+YXAudW5pVGFpbCkKKyAgICB7CisgICAgICAgIG5pZCA9IChpZCArIDEpICYgKFpNX1VOSV9BUlJBWV9TSVpFIC0gMSk7CisgICAgICAgIHdkLT5hcC51bmlBcnJheVtpZF0gPSB3ZC0+YXAudW5pQXJyYXlbbmlkXTsKKworICAgICAgICAvKiBTZWFyY2ggdW50aWwgdGFpbCB0byBjb25maWcgbW9yZSBkYXRhIGJpdCAqLworICAgICAgICBkc3RbMF0gPSB6bXdfYnVmX3JlYWRoKGRldiwgd2QtPmFwLnVuaUFycmF5W2lkXSwgMCk7CisgICAgICAgIGRzdFsxXSA9IHptd19idWZfcmVhZGgoZGV2LCB3ZC0+YXAudW5pQXJyYXlbaWRdLCAyKTsKKyAgICAgICAgZHN0WzJdID0gem13X2J1Zl9yZWFkaChkZXYsIHdkLT5hcC51bmlBcnJheVtpZF0sIDQpOworICAgICAgICBpZiAoKGFkZHJbMF0gPT0gZHN0WzBdKSAmJiAoYWRkclsxXSA9PSBkc3RbMV0pCisgICAgICAgICAgICAgICAgJiYgKGFkZHJbMl0gPT0gZHN0WzJdKSkKKyAgICAgICAgeworICAgICAgICAgICAgbW9yZURhdGEgPSAweDIwOworICAgICAgICB9CisKKyAgICAgICAgaWQgPSBuaWQ7CisgICAgfQorICAgIHJldHVybiBtb3JlRGF0YTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmQXBBZGRJZVdtZVBhcmEgICAgICAgICAgICAqLworLyogICAgICBBZGQgV01FIFBhcmFtZXRlciBFbGVtZW50IHRvIGJ1ZmZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmIDogYnVmZmVyIHRvIGFkZCBpbmZvcm1hdGlvbiBlbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG9mZnNldCA6IGFkZCBpbmZvcm1hdGlvbiBlbGVtZW50IGZyb20gdGhpcyBvZmZzZXQgICAgICAgICAgICAgICAqLworLyogICAgICB2YXAgOiB2aXJ0dWFsIEFQIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBidWZmZXIgb2Zmc2V0IGFmdGVyIGFkZGluZyBpbmZvcm1hdGlvbiBlbGVtZW50ICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNi4xICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZBcEFkZEllV21lUGFyYSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCwgdTE2X3QgdmFwKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8qIEVsZW1lbnQgSUQgKi8KKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIFpNX1dMQU5fRUlEX1dJRklfSUUpOworCisgICAgLyogRWxlbWVudCBMZW5ndGggKi8KKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIDI0KTsKKworICAgIC8qIE9VSSAqLworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgMHgwMCk7CisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCAweDUwKTsKKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIDB4RjIpOworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgMHgwMik7CisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCAweDAxKTsKKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIDB4MDEpOworCisgICAgLyogUW9TIEluZm8gKi8KKyAgICBpZiAod2QtPmFwLnVhcHNkRW5hYmxlZCkKKyAgICB7CisgICAgICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgMHg4MSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCAweDAxKTsKKyAgICB9CisKKyAgICAvKiBSZXNlcnZlZCAqLworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgMHgwMCk7CisKKyAgICAvKiBCZXN0IEVmZm9ydCBBQyBwYXJhbWV0ZXJzICovCisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCAweDAzKTsKKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIDB4QTQpOworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgMHgwMCk7CisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCAweDAwKTsKKyAgICAvKiBCYWNrZnJvdW5kIEFDIHBhcmFtZXRlcnMgKi8KKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIDB4MjcpOworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgMHhBNCk7CisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCAweDAwKTsKKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIDB4MDApOworICAgIC8qIFZpZGVvIEFDIHBhcmFtZXRlcnMgKi8KKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIDB4NDIpOworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgMHg0Myk7CisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCAweDVFKTsKKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIDB4MDApOworICAgIC8qIFZvaWNlIEFDIHBhcmFtZXRlcnMgKi8KKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIDB4NjIpOworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgMHgzMik7CisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCAweDJGKTsKKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIDB4MDApOworCisgICAgcmV0dXJuIG9mZnNldDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZBcFNlbmRCZWFjb24gICAgICAgICAgICAgICovCisvKiAgICAgIFNuZWQgQVAgbW9kZSBiZWFjb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFN0ZXBoZW4gQ2hlbiAgICAgICAgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAgICAyMDA1LjExICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHpmQXBTZW5kQmVhY29uKHpkZXZfdCogZGV2KQoreworICAgIHpidWZfdCogYnVmOworICAgIHUxNl90IG9mZnNldDsKKyAgICB1MTZfdCB2YXA7CisgICAgdTE2X3Qgc2VxOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHdkLT5hcC5iZWFjb25Db3VudGVyKys7CisgICAgaWYgKHdkLT5hcC5iZWFjb25Db3VudGVyID49IHdkLT5hcC52YXBOdW1iZXIpCisgICAgeworICAgICAgICB3ZC0+YXAuYmVhY29uQ291bnRlciA9IDA7CisgICAgfQorICAgIHZhcCA9IHdkLT5hcC5iZWFjb25Db3VudGVyOworCisKKyAgICB6bV9tc2cxX21tKFpNX0xWXzIsICJTZW5kIGJlYWNvbiwgdmFwPSIsIHZhcCk7CisKKyAgICAvKiBUQkQgOiBNYXhpbXVtIHNpemUgb2YgYmVhY29uICovCisgICAgaWYgKChidWYgPSB6ZndCdWZBbGxvY2F0ZShkZXYsIDEwMjQpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgem1fbXNnMF9tbShaTV9MVl8wLCAiQWxsb2MgYmVhY29uIGJ1ZiBGYWlsISIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb2Zmc2V0ID0gMDsKKworICAgIC8qIHdsYW4gaGVhZGVyICovCisgICAgLyogRnJhbWUgY29udHJvbCAqLworICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIDB4MDA4MCk7CisgICAgb2Zmc2V0Kz0yOworICAgIC8qIER1cmF0aW9uICovCisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgMHgwMDAwKTsKKyAgICBvZmZzZXQrPTI7CisgICAgLyogQWRkcmVzcyAxICovCisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgMHhmZmZmKTsKKyAgICBvZmZzZXQrPTI7CisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgMHhmZmZmKTsKKyAgICBvZmZzZXQrPTI7CisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgMHhmZmZmKTsKKyAgICBvZmZzZXQrPTI7CisgICAgLyogQWRkcmVzcyAyICovCisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgd2QtPm1hY0FkZHJbMF0pOworICAgIG9mZnNldCs9MjsKKyAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0LCB3ZC0+bWFjQWRkclsxXSk7CisgICAgb2Zmc2V0Kz0yOworI2lmZGVmIFpNX1ZBUE1PREVfTVVMVElMRV9TU0lECisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgd2QtPm1hY0FkZHJbMl0pOyAvL011bHRpcGxlIFNTSUQKKyNlbHNlCisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgKHdkLT5tYWNBZGRyWzJdKyh2YXA8PDgpKSk7IC8vVkFQCisjZW5kaWYKKyAgICBvZmZzZXQrPTI7CisgICAgLyogQWRkcmVzcyAzICovCisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgd2QtPm1hY0FkZHJbMF0pOworICAgIG9mZnNldCs9MjsKKyAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0LCB3ZC0+bWFjQWRkclsxXSk7CisgICAgb2Zmc2V0Kz0yOworI2lmZGVmIFpNX1ZBUE1PREVfTVVMVElMRV9TU0lECisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgd2QtPm1hY0FkZHJbMl0pOyAvL011bHRpcGxlIFNTSUQKKyNlbHNlCisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgKHdkLT5tYWNBZGRyWzJdKyh2YXA8PDgpKSk7IC8vVkFQCisjZW5kaWYKKyAgICBvZmZzZXQrPTI7CisKKyAgICAvKiBTZXF1ZW5jZSBudW1iZXIgKi8KKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIHNlcSA9ICgod2QtPm1tc2VxKyspPDw0KTsKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIHNlcSk7CisgICAgb2Zmc2V0Kz0yOworCisgICAgLyogMjQtMzEgVGltZSBTdGFtcCA6IGhhcmR3YXJlIHdpbGwgZmlsbCB0aGlzIGZpZWxkICovCisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgMCk7CisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCsyLCAwKTsKKyAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0KzQsIDApOworICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQrNiwgMCk7CisgICAgb2Zmc2V0Kz04OworCisgICAgLyogQmVhY29uIEludGVydmFsICovCisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgd2QtPmJlYWNvbkludGVydmFsKTsKKyAgICBvZmZzZXQrPTI7CisKKyAgICAvKiBDYXBhYmlsaXR5ICovCisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgd2QtPmFwLmNhcGFiW3ZhcF0pOworICAgIG9mZnNldCs9MjsKKworICAgIC8qIFNTSUQgKi8KKyAgICBpZiAod2QtPmFwLmhpZGVTc2lkW3ZhcF0gPT0gMCkKKyAgICB7CisgICAgICAgIG9mZnNldCA9IHpmQXBBZGRJZVNzaWQoZGV2LCBidWYsIG9mZnNldCwgdmFwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCBaTV9XTEFOX0VJRF9TU0lEKTsKKyAgICAgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCAwKTsKKworICAgIH0KKworICAgIC8qIFN1cHBvcnQgUmF0ZSAqLworICAgIGlmICggd2QtPmZyZXF1ZW5jeSA8IDMwMDAgKQorICAgIHsKKyAgICBvZmZzZXQgPSB6Zk1tQWRkSWVTdXBwb3J0UmF0ZShkZXYsIGJ1Ziwgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpNX1dMQU5fRUlEX1NVUFBPUlRfUkFURSwgWk1fUkFURV9TRVRfQ0NLKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb2Zmc2V0ID0gemZNbUFkZEllU3VwcG9ydFJhdGUoZGV2LCBidWYsIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTV9XTEFOX0VJRF9TVVBQT1JUX1JBVEUsIFpNX1JBVEVfU0VUX09GRE0pOworICAgIH0KKworICAgIC8qIERTIHBhcmFtZXRlciBzZXQgKi8KKyAgICBvZmZzZXQgPSB6Zk1tQWRkSWVEcyhkZXYsIGJ1Ziwgb2Zmc2V0KTsKKworICAgIC8qIFRJTSAqLworICAgIG9mZnNldCA9IHpmQXBBZGRJZVRpbShkZXYsIGJ1Ziwgb2Zmc2V0LCB2YXApOworCisgICAgLyogSWYgV0xBTiBUeXBlIGlzIG5vdCBQVVJFIEIgKi8KKyAgICBpZiAod2QtPmFwLndsYW5UeXBlW3ZhcF0gIT0gWk1fV0xBTl9UWVBFX1BVUkVfQikKKyAgICB7CisgICAgICAgIGlmICggd2QtPmZyZXF1ZW5jeSA8IDMwMDAgKQorICAgICAgICB7CisgICAgICAgIC8qIEVSUCBJbmZvcm1hdGlvbiAqLworICAgICAgICBvZmZzZXQgPSB6Zk1tQWRkSWVFcnAoZGV2LCBidWYsIG9mZnNldCk7CisKKyAgICAgICAgLyogRXh0ZW5kZWQgU3VwcG9ydGVkIFJhdGVzICovCisgICAgICAgIG9mZnNldCA9IHpmTW1BZGRJZVN1cHBvcnRSYXRlKGRldiwgYnVmLCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpNX1dMQU5fRUlEX0VYVEVOREVEX1JBVEUsIFpNX1JBVEVfU0VUX09GRE0pOworICAgIH0KKyAgICB9CisKKyAgICAvKiBUT0RPIDogY291bnRyeSBpbmZvcm1hdGlvbiAqLworICAgIC8qIFRPRE8gOiBSU04gKi8KKyAgICBpZiAod2QtPmFwLndwYVN1cHBvcnRbdmFwXSA9PSAxKQorICAgIHsKKyAgICAgICAgb2Zmc2V0ID0gemZNbUFkZEllV3BhKGRldiwgYnVmLCBvZmZzZXQsIHZhcCk7CisgICAgfQorCisgICAgLyogV01FIFBhcmFtZXRlcnMgKi8KKyAgICBpZiAod2QtPmFwLnFvc01vZGUgPT0gMSkKKyAgICB7CisgICAgICAgIG9mZnNldCA9IHpmQXBBZGRJZVdtZVBhcmEoZGV2LCBidWYsIG9mZnNldCwgdmFwKTsKKyAgICB9CisKKyAgICAvKiBIVCBDYXBhYmlsaXRpZXMgSW5mbyAqLworICAgIG9mZnNldCA9IHpmTW1BZGRIVENhcGFiaWxpdHkoZGV2LCBidWYsIG9mZnNldCk7CisKKyAgICAvKiBFeHRlbmRlZCBIVCBDYXBhYmlsaXRpZXMgSW5mbyAqLworICAgIG9mZnNldCA9IHpmTW1BZGRFeHRlbmRlZEhUQ2FwYWJpbGl0eShkZXYsIGJ1Ziwgb2Zmc2V0KTsKKworICAgIC8qIDEyMTIgOiB3cml0ZSB0byBiZWFjb24gZmlmbyAqLworICAgIC8qIDEyMjEgOiB3cml0ZSB0byBzaGFyZSBtZW1vcnkgKi8KKyAgICB6ZkhwU2VuZEJlYWNvbihkZXYsIGJ1Ziwgb2Zmc2V0KTsKKworICAgIC8qIEZyZWUgYmVhY29uIGJ1ZmZlciAqLworICAgIC8qIFRPRE86IEluIG9yZGVyIHRvIGZpdCB0aGUgbWFkd2lmaSBiZWFjb24gYXJjaGl0ZWN0dXJlLCB3ZSBuZWVkIHRvCisgICAgICAgZnJlZSBiZWFjb24gYnVmZmVyIGluIHRoZSBIQUwgbGF5ZXIuCisgICAgICovCisKKyAgICAvL3pmd0J1ZkZyZWUoZGV2LCBidWYsIDApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkludHJhYnNzRm9yd2FyZCAgICAgICAgICAgKi8KKy8qICAgICAgQ2FsbGVkIHRvIHRyYW5zbWl0IGludHJhLUJTUyBmcmFtZSBmcm9tIHVwcGVyIGxheWVyLiAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZiA6IGJ1ZmZlciBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICB2YXAgOiB2aXJ0dWFsIEFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAxIDogdW5pY2FzdCBpbnRyYXMtQlNTIGZyYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgMCA6IG90aGVyIGZyYW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiAgICAgICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDUuMTEgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90IHpmSW50cmFic3NGb3J3YXJkKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdThfdCBzcmNWYXApCit7CisgICAgdTE2X3QgZXJyOworICAgIHUxNl90IGFzb2NGbGFnID0gMDsKKyAgICB1MTZfdCBkc3RbM107CisgICAgdTE2X3QgYWlkOworICAgIHUxNl90IHN0YVN0YXRlOworICAgIHpidWZfdCogdHhCdWY7CisgICAgdTE2X3QgbGVuOworICAgIHUxNl90IGk7CisgICAgdTE2X3QgdGVtcDsKKyAgICB1MTZfdCByZXQ7CisgICAgdThfdCB2YXAgPSAwOworI2lmZGVmIFpNX0VOQUJMRV9OQVRJVkVfV0lGSQorICAgIGRzdFswXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIFpNX1dMQU5fSEVBREVSX0EzX09GRlNFVCk7CisgICAgZHN0WzFdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTNfT0ZGU0VUKzIpOworICAgIGRzdFsyXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIFpNX1dMQU5fSEVBREVSX0EzX09GRlNFVCs0KTsKKyNlbHNlCisgICAgZHN0WzBdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMCk7CisgICAgZHN0WzFdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMik7CisgICAgZHN0WzJdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgNCk7CisjZW5kaWYgIC8vIFpNX0VOQUJMRV9OQVRJVkVfV0lGSQorCisgICAgLyogRG8gSW50cmEtQlNTIGZvcndhcmQoZGF0YSBjb3B5KSBpZiBuZWNlc3NhcnkqLworICAgIGlmICgoZHN0WzBdJjB4MSkgIT0gMHgxKQorICAgIHsKKyAgICAgICAgYWlkID0gemZBcEdldFNUQUluZm8oZGV2LCBkc3QsICZzdGFTdGF0ZSwgJnZhcCk7CisgICAgICAgIGlmICgoYWlkICE9IDB4ZmZmZikgJiYgKHN0YVN0YXRlID09IFpNX1NUQVRFX0FTT0MpICYmIChzcmNWYXAgPT0gdmFwKSkKKyAgICAgICAgeworICAgICAgICAgICAgYXNvY0ZsYWcgPSAxOworICAgICAgICAgICAgem1fbXNnMF9yeChaTV9MVl8yLCAiSW50cmEtQlNTIGZvcndhcmQgOiBhc29jIFNUQSIpOworICAgICAgICB9CisKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmFwID0gc3JjVmFwOworICAgICAgICB6bV9tc2cwX3J4KFpNX0xWXzIsICJJbnRyYS1CU1MgZm9yd2FyZCA6IEJDb3JNQyIpOworICAgIH0KKworICAgIC8qIGRlc3RpbmF0aW9uIGFkZHJlc3MgPSBhc3NvY2lhdGVkIFNUQSBvciBCQy9NQyAqLworICAgIGlmICgoYXNvY0ZsYWcgPT0gMSkgfHwgKChkc3RbMF0mMHgxKSA9PSAweDEpKQorICAgIHsKKyAgICAgICAgLyogQWxsb2NhdGUgZnJhbWUgKi8KKyAgICAgICAgaWYgKCh0eEJ1ZiA9IHpmd0J1ZkFsbG9jYXRlKGRldiwgWk1fUlhfRlJBTUVfU0laRSkpCisgICAgICAgICAgICAgICAgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgem1fbXNnMF9yeChaTV9MVl8xLCAiQWxsb2MgaW50cmEtYnNzIGJ1ZiBGYWlsISIpOworICAgICAgICAgICAgZ290byB6bEFsbG9jRXJyb3I7CisgICAgICAgIH0KKworICAgICAgICAvKiBDb3B5IGZyYW1lICovCisgICAgICAgIGxlbiA9IHpmd0J1ZkdldFNpemUoZGV2LCBidWYpOworICAgICAgICBmb3IgKGk9MDsgaTxsZW47IGkrPTIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXAgPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBpKTsKKyAgICAgICAgICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgdHhCdWYsIGksIHRlbXApOworICAgICAgICB9CisgICAgICAgIHpmd0J1ZlNldFNpemUoZGV2LCB0eEJ1ZiwgbGVuKTsKKworI2lmZGVmIFpNX0VOQUJMRV9OQVRJVkVfV0lGSQorICAgICAgICAvKiBUeC1BMiA9IFJ4LUExLCBUeC1BMyA9IFJ4LUEyLCBUeC1BMSA9IFJ4LUEzICovCisgICAgICAgIGZvciAoaT0wOyBpPDY7IGkrPTIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXAgPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BMV9PRkZTRVQraSk7CisgICAgICAgICAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIHR4QnVmLCBaTV9XTEFOX0hFQURFUl9BMl9PRkZTRVQraSwgdGVtcCk7CisgICAgICAgICAgICB0ZW1wID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTJfT0ZGU0VUK2kpOworICAgICAgICAgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCB0eEJ1ZiwgWk1fV0xBTl9IRUFERVJfQTNfT0ZGU0VUK2ksIHRlbXApOworICAgICAgICAgICAgdGVtcCA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIFpNX1dMQU5fSEVBREVSX0EzX09GRlNFVCtpKTsKKyAgICAgICAgICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgdHhCdWYsIFpNX1dMQU5fSEVBREVSX0ExX09GRlNFVCtpLCB0ZW1wKTsKKyAgICAgICAgfQorCisgICAgICAgICNlbmRpZgorCisgICAgICAgIC8qIFRyYW5zbWl0IGZyYW1lICovCisgICAgICAgIC8qIFJldHVybiBlcnJvciBpZiBwb3J0IGlzIGRpc2FibGVkICovCisgICAgICAgIGlmICgoZXJyID0gemZUeFBvcnRDb250cm9sKGRldiwgdHhCdWYsIHZhcCkpID09IFpNX1BPUlRfRElTQUJMRUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVyciA9IFpNX0VSUl9UWF9QT1JUX0RJU0FCTEVEOworICAgICAgICAgICAgZ290byB6bFR4RXJyb3I7CisgICAgICAgIH0KKworI2lmIDEKKyAgICAgICAgLyogQVAgOiBCdWZmZXIgZnJhbWUgZm9yIHBvd2VyIHNhdmluZyBTVEEgKi8KKyAgICAgICAgaWYgKChyZXQgPSB6ZkFwQnVmZmVyUHNGcmFtZShkZXYsIHR4QnVmLCB2YXApKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBmb3J3YXJkIGZyYW1lIGlmIG5vdCBiZWVuIGJ1ZmZlcmVkICovCisgICAgICAgICAgICAjaWYgMQorICAgICAgICAgICAgLyogUHV0IHRvIFZUWFFbYWNdICovCisgICAgICAgICAgICByZXQgPSB6ZlB1dFZ0eHEoZGV2LCB0eEJ1Zik7CisgICAgICAgICAgICAvKiBQdXNoIFZUWFFbYWNdICovCisgICAgICAgICAgICB6ZlB1c2hWdHhxKGRldik7CisgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgemZUeFNlbmRFdGgoZGV2LCB0eEJ1ZiwgdmFwLCBaTV9JTlRFUk5BTF9BTExPQ19CVUYsIDApOworICAgICAgICAgICAgI2VuZGlmCisKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIHJldHVybiBhc29jRmxhZzsKKworemxUeEVycm9yOgorICAgIHpmd0J1ZkZyZWUoZGV2LCB0eEJ1ZiwgMCk7Cit6bEFsbG9jRXJyb3I6CisgICAgcmV0dXJuIGFzb2NGbGFnOworfQorCitzdHJ1Y3QgenNNaWNWYXIqIHpmQXBHZXRSeE1pY0tleSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgdThfdCBzYVs2XTsKKyAgICB1MTZfdCBpZCA9IDAsIG1hY0FkZHJbM107CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6ZkNvcHlGcm9tUnhCdWZmZXIoZGV2LCBidWYsIHNhLCBaTV9XTEFOX0hFQURFUl9BMl9PRkZTRVQsIDYpOworCisgICAgbWFjQWRkclswXSA9IHNhWzBdICsgKHNhWzFdIDw8IDgpOworICAgIG1hY0FkZHJbMV0gPSBzYVsyXSArIChzYVszXSA8PCA4KTsKKyAgICBtYWNBZGRyWzJdID0gc2FbNF0gKyAoc2FbNV0gPDwgOCk7CisKKyAgICBpZiAoKGlkID0gemZBcEZpbmRTdGEoZGV2LCBtYWNBZGRyKSkgIT0gMHhmZmZmKQorICAgICAgICByZXR1cm4gKCZ3ZC0+YXAuc3RhVGFibGVbaWRdLnJ4TWljS2V5KTsKKworICAgIHJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgenNNaWNWYXIqIHpmQXBHZXRUeE1pY0tleSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHU4X3QqIHFvc1R5cGUpCit7CisgICAgdThfdCBkYVs2XTsKKyAgICB1MTZfdCBpZCA9IDAsIG1hY0FkZHJbM107CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6ZkNvcHlGcm9tSW50VHhCdWZmZXIoZGV2LCBidWYsIGRhLCAwLCA2KTsKKworICAgIG1hY0FkZHJbMF0gPSBkYVswXSArIChkYVsxXSA8PCA4KTsKKyAgICBtYWNBZGRyWzFdID0gZGFbMl0gKyAoZGFbM10gPDwgOCk7CisgICAgbWFjQWRkclsyXSA9IGRhWzRdICsgKGRhWzVdIDw8IDgpOworCisgICAgaWYgKChtYWNBZGRyWzBdICYgMHgxKSkKKyAgICB7CisgICAgICAgIHJldHVybiAoJndkLT5hcC5iY01pY0tleVswXSk7CisgICAgfQorICAgIGVsc2UgaWYgKChpZCA9IHpmQXBGaW5kU3RhKGRldiwgbWFjQWRkcikpICE9IDB4ZmZmZikKKyAgICB7CisgICAgICAgICpxb3NUeXBlID0gd2QtPmFwLnN0YVRhYmxlW2lkXS5xb3NUeXBlOworICAgICAgICByZXR1cm4gKCZ3ZC0+YXAuc3RhVGFibGVbaWRdLnR4TWljS2V5KTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwordTE2X3QgemZBcFVwZGF0ZVBzQml0KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdThfdCogdmFwLCB1OF90KiB1YXBzZFRyaWcpCit7CisgICAgdTE2X3Qgc3RhU3RhdGU7CisgICAgdTE2X3QgYWlkOworICAgIHUxNl90IHBzQml0OworICAgIHUxNl90IHNyY1szXTsKKyAgICB1MTZfdCBkc3RbMV07CisgICAgdTE2X3QgaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHNyY1swXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDEwKTsKKyAgICBzcmNbMV0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAxMik7CisgICAgc3JjWzJdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMTQpOworCisgICAgaWYgKCh6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAxKSAmIDB4MykgIT0gMykKKyAgICB7CisgICAgICAgIC8qIEFQICovCisgICAgICAgIGRzdFswXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDQpOworCisgICAgICAgIHBzQml0ID0gKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDEpICYgMHgxMCkgPj4gNDsKKyAgICAgICAgLyogR2V0IEFJRCBhbmQgdXBkYXRlIFNUQSBQUyBtb2RlICovCisgICAgICAgIGFpZCA9IHpmQXBHZXRTVEFJbmZvQW5kVXBkYXRlUHMoZGV2LCBzcmMsICZzdGFTdGF0ZSwgdmFwLCBwc0JpdCwgdWFwc2RUcmlnKTsKKworICAgICAgICAvKiBpZiBTVEEgbm90IGFzc29jaWF0ZWQsIHNlbmQgZGVhdXRoICovCisgICAgICAgIGlmICgoYWlkID09IDB4ZmZmZikgfHwgKHN0YVN0YXRlICE9IFpNX1NUQVRFX0FTT0MpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKGRzdFswXSYweDEpPT0wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmU2VuZE1tRnJhbWUoZGV2LCBaTV9XTEFOX0ZSQU1FX1RZUEVfREVBVVRILCBzcmMsIDB4NywKKyAgICAgICAgICAgICAgICAgICAgICAgIDAsIDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gWk1fRVJSX1NUQV9OT1RfQVNTT0NJQVRFRDsKKyAgICAgICAgfQorICAgIH0gLyogaWYgKCh6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAxKSAmIDB4MykgIT0gMykgKi8KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBXRFMgKi8KKyAgICAgICAgZm9yIChpPTA7IGk8Wk1fTUFYX1dEU19TVVBQT1JUOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgod2QtPmFwLndkcy53ZHNCaXRtYXAgJiAoMTw8aSkpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChzcmNbMF0gPT0gd2QtPmFwLndkcy5tYWNBZGRyW2ldWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHNyY1sxXSA9PSB3ZC0+YXAud2RzLm1hY0FkZHJbaV1bMV0pCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoc3JjWzJdID09IHdkLT5hcC53ZHMubWFjQWRkcltpXVsyXSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqdmFwID0gMHgyMCArIGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gWk1fU1VDQ0VTUzsKK30KKwordm9pZCB6ZkFwUHJvY2Vzc1BzUG9sbCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgdTE2X3Qgc3JjWzNdOworICAgIHUxNl90IGRzdFszXTsKKyAgICB6YnVmX3QqIHBzQnVmID0gTlVMTDsKKyAgICB1MTZfdCBpZDsKKyAgICB1OF90IG1vcmVEYXRhID0gMDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICBzcmNbMF0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCAxMCk7CisgICAgc3JjWzFdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMTIpOworICAgIHNyY1syXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDE0KTsKKworICAgIC8qIEZpbmQgcHMgYnVmZmVyIGZvciBQc1BvbGwgKi8KKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIGlkID0gd2QtPmFwLnVuaUhlYWQ7CisgICAgd2hpbGUgKGlkICE9IHdkLT5hcC51bmlUYWlsKQorICAgIHsKKyAgICAgICAgcHNCdWYgPSB3ZC0+YXAudW5pQXJyYXlbaWRdOworCisgICAgICAgIGRzdFswXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBwc0J1ZiwgMCk7CisgICAgICAgIGRzdFsxXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBwc0J1ZiwgMik7CisgICAgICAgIGRzdFsyXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBwc0J1ZiwgNCk7CisKKyAgICAgICAgaWYgKChzcmNbMF0gPT0gZHN0WzBdKSAmJiAoc3JjWzFdID09IGRzdFsxXSkgJiYgKHNyY1syXSA9PSBkc3RbMl0pKQorICAgICAgICB7CisgICAgICAgICAgICBtb3JlRGF0YSA9IHpmQXBSZW1vdmVGcm9tUHNRdWV1ZShkZXYsIGlkLCBzcmMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwc0J1ZiA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWQgPSAoaWQgKyAxKSAmIChaTV9VTklfQVJSQVlfU0laRSAtIDEpOworICAgIH0KKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgLyogU2VuZCBwcyBidWZmZXIgKi8KKyAgICBpZiAocHNCdWYgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIC8qIFNlbmQgd2l0aCBtb3JlIGRhdGEgYml0ICovCisgICAgICAgIHpmVHhTZW5kRXRoKGRldiwgcHNCdWYsIDAsIFpNX0VYVEVSTkFMX0FMTE9DX0JVRiwgbW9yZURhdGEpOworICAgIH0KKworICAgIHJldHVybjsKK30KKwordm9pZCB6ZkFwU2V0UHJvdGVjdGlvbk1vZGUoemRldl90KiBkZXYsIHUxNl90IG1vZGUpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYgKG1vZGUgPT0gMCkKKyAgICB7CisgICAgICAgIGlmICh3ZC0+YXAucHJvdGVjdGlvbk1vZGUgIT0gbW9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogV3JpdGUgTUFDJlBIWSByZWdpc3RlcnMgdG8gZGlzYWJsZSBwcm90ZWN0aW9uICovCisKKyAgICAgICAgICAgIHdkLT5hcC5wcm90ZWN0aW9uTW9kZSA9IG1vZGU7CisgICAgICAgIH0KKworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAod2QtPmFwLnByb3RlY3Rpb25Nb2RlICE9IG1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFdyaXRlIE1BQyZQSFkgcmVnaXN0ZXJzIHRvIGVuYWJsZSBwcm90ZWN0aW9uICovCisKKyAgICAgICAgICAgIHdkLT5hcC5wcm90ZWN0aW9uTW9kZSA9IG1vZGU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkFwU2VuZEZhaWx1cmUgICAgICAgICAgICAgKi8KKy8qICAgICAgU2VuZCBmYWlsdXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGFkZHIgOiByZWNlaXZlciBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFN0ZXBoZW4gQ2hlbiAgICAgICAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSU5DLiAgICAyMDA3LjEgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHpmQXBTZW5kRmFpbHVyZSh6ZGV2X3QqIGRldiwgdThfdCogYWRkcikKK3sKKyAgICB1MTZfdCBpZDsKKyAgICB1MTZfdCBzdGFBZGRyWzNdOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgc3RhQWRkclswXSA9IGFkZHJbMF0gKyAoKCh1MTZfdClhZGRyWzFdKTw8OCk7CisgICAgc3RhQWRkclsxXSA9IGFkZHJbMl0gKyAoKCh1MTZfdClhZGRyWzNdKTw8OCk7CisgICAgc3RhQWRkclsyXSA9IGFkZHJbNF0gKyAoKCh1MTZfdClhZGRyWzVdKTw8OCk7CisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICBpZiAoKGlkID0gemZBcEZpbmRTdGEoZGV2LCBzdGFBZGRyKSkgIT0gMHhmZmZmKQorICAgIHsKKyAgICAgICAgLyogU2VuZCBmYWlsdHVyZSA6IEFkZCAzIG1pbnV0ZXMgdG8gaW5hY3RpdmUgdGltZSB0aGF0IHdpbGwgKi8KKyAgICAgICAgLyogICAgICAgICAgICAgICAgIHdpbGwgbWFrZSBTVEEgYmVlbiBraWNrZWQgb3V0IHNvb24gKi8KKyAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2lkXS50aW1lIC09ICgzKlpNX1RJQ0tfUEVSX01JTlVURSk7CisgICAgfQorICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7Cit9CisKKwordm9pZCB6ZkFwUHJvY2Vzc0FjdGlvbih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgdThfdCBjYXRlZ29yeTsKKworICAgIC8vem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLy96bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgY2F0ZWdvcnkgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAyNCk7CisKKyAgICBzd2l0Y2ggKGNhdGVnb3J5KQorICAgIHsKKyAgICBjYXNlIFpNX1dMQU5fQkxPQ0tfQUNLX0FDVElPTl9GUkFNRToKKyAgICAgICAgemZBZ2dCbG9ja0Fja0FjdGlvbkZyYW1lKGRldiwgYnVmKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NtbXN0YS5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NtbXN0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NWJhMTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY21tc3RhLmMKQEAgLTAsMCArMSw1NzgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImNwcmVjb21wLmgiCisjaW5jbHVkZSAicmF0ZWN0cmwuaCIKKyNpbmNsdWRlICIuLi9oYWwvaHByZWcuaCIKKworLyogVE9ETyA6IGNoYW5nZSBnbG9iYWwgdmFyaWFibGUgdG8gY29uc3RhbnQgKi8KK3U4X3QgICB6Z1dwYVJhZGl1c091aVtdID0geyAweDAwLCAweDUwLCAweGYyLCAweDAxIH07Cit1OF90ICAgemdXcGFBZXNPdWlbXSA9IHsgMHgwMCwgMHg1MCwgMHhmMiwgMHgwNCB9OwordThfdCAgIHpnV3BhMlJhZGl1c091aVtdID0geyAweDAwLCAweDBmLCAweGFjLCAweDAxIH07Cit1OF90ICAgemdXcGEyQWVzT3VpW10gPSB7IDB4MDAsIDB4MGYsIDB4YWMsIDB4MDQgfTsKKworY29uc3QgdTE2X3QgemNDd1RsYlsxNl0gPSB7ICAgMCwgICAgMSwgICAgMywgICAgNywgICAxNSwgICAzMSwgICA2MywgIDEyNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTUsICA1MTEsIDEwMjMsIDIwNDcsIDQwOTUsIDQwOTUsIDQwOTUsIDQwOTV9OworCit2b2lkIHpmU3RhU3RhcnRDb25uZWN0Q2IoemRldl90KiBkZXYpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZTdGFQdXRBcEludG9CbG9ja2luZ0xpc3QgICovCisvKiAgICAgIFB1dCBBUCBpbnRvIGJsb2NraW5nIEFQIGxpc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBic3NpZCA6IEFQJ3MgQlNTSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgd2VpZ2h0IDogd2VpZ2h0IG9mIEFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgbm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJTkMuICAgIDIwMDYuMTIgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgemZTdGFQdXRBcEludG9CbG9ja2luZ0xpc3QoemRldl90KiBkZXYsIHU4X3QqIGJzc2lkLCB1OF90IHdlaWdodCkKK3sKKyAgICB1MTZfdCBpLCBqOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgaWYgKHdlaWdodCA+IDApCisgICAgeworICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAvKkZpbmQgc2FtZSBic3NpZCBlbnRyeSBmaXJzdCovCisgICAgICAgIGZvciAoaT0wOyBpPFpNX01BWF9CTE9DS0lOR19BUF9MSVNUX1NJWkU7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChqPTA7IGo8NjsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKHdkLT5zdGEuYmxvY2tpbmdBcExpc3RbaV0uYWRkcltqXSE9IGJzc2lkW2pdKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZihqPT02KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qVGhpcyBic3NpZCBkb2Vzbid0IGhhdmUgb2xkIHJlY29yZC5GaW5kIGFuIGVtcHR5IGVudHJ5Ki8KKyAgICAgICAgaWYgKGkgPT0gWk1fTUFYX0JMT0NLSU5HX0FQX0xJU1RfU0laRSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpPTA7IGk8Wk1fTUFYX0JMT0NLSU5HX0FQX0xJU1RfU0laRTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh3ZC0+c3RhLmJsb2NraW5nQXBMaXN0W2ldLndlaWdodCA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogSWYgdGhlIGxpc3QgaXMgZnVsbCwgcGljayBvbmUgZW50cnkgZm9yIHJlcGxhY2VtZW50ICovCisgICAgICAgIGlmIChpID09IFpNX01BWF9CTE9DS0lOR19BUF9MSVNUX1NJWkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGkgPSBic3NpZFs1XSAmIChaTV9NQVhfQkxPQ0tJTkdfQVBfTElTVF9TSVpFLTEpOworICAgICAgICB9CisKKyAgICAgICAgLyogVXBkYXRlIEFQIGFkZHJlc3MgYW5kIHdlaWdodCAqLworICAgICAgICBmb3IgKGo9MDsgajw2OyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHdkLT5zdGEuYmxvY2tpbmdBcExpc3RbaV0uYWRkcltqXSA9IGJzc2lkW2pdOworICAgICAgICB9CisKKyAgICAgICAgd2QtPnN0YS5ibG9ja2luZ0FwTGlzdFtpXS53ZWlnaHQgPSB3ZWlnaHQ7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgfQorCisgICAgcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZlN0YUlzQXBJbkJsb2NraW5nTGlzdCAgICAgKi8KKy8qICAgICAgSXMgQVAgaW4gYmxvY2tpbmcgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJzc2lkIDogQVAncyBCU1NJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFRSVUUgOiBBUCBpbiBibG9ja2luZyBsaXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBGQUxTRSA6IEFQIG5vdCBpbiBibG9ja2luZyBsaXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIElOQy4gICAgMjAwNi4xMiAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZTdGFJc0FwSW5CbG9ja2luZ0xpc3QoemRldl90KiBkZXYsIHU4X3QqIGJzc2lkKQoreworICAgIHUxNl90IGksIGo7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIC8vem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIC8vem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICBmb3IgKGk9MDsgaTxaTV9NQVhfQkxPQ0tJTkdfQVBfTElTVF9TSVpFOyBpKyspCisgICAgeworICAgICAgICBpZiAod2QtPnN0YS5ibG9ja2luZ0FwTGlzdFtpXS53ZWlnaHQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChqPTA7IGo8NjsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh3ZC0+c3RhLmJsb2NraW5nQXBMaXN0W2ldLmFkZHJbal0gIT0gYnNzaWRbal0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaiA9PSA2KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvL3ptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgcmV0dXJuIEZBTFNFOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZlN0YVJlZnJlc2hCbG9ja0xpc3QgICAgICAgKi8KKy8qICAgICAgSXMgQVAgaW4gYmxvY2tpbmcgbGlzdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGZsdXNoRmxhZyA6IGZsdXNoIHdob2xlIGJsb2NraW5nIGxpc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFN0ZXBoZW4gQ2hlbiAgICAgICAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSU5DLiAgICAyMDA2LjEyICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHpmU3RhUmVmcmVzaEJsb2NrTGlzdCh6ZGV2X3QqIGRldiwgdTE2X3QgZmx1c2hGbGFnKQoreworICAgIHUxNl90IGk7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIGZvciAoaT0wOyBpPFpNX01BWF9CTE9DS0lOR19BUF9MSVNUX1NJWkU7IGkrKykKKyAgICB7CisgICAgICAgIGlmICh3ZC0+c3RhLmJsb2NraW5nQXBMaXN0W2ldLndlaWdodCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZmx1c2hGbGFnICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5ibG9ja2luZ0FwTGlzdFtpXS53ZWlnaHQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT5zdGEuYmxvY2tpbmdBcExpc3RbaV0ud2VpZ2h0LS07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICByZXR1cm47Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmU3RhQ29ubmVjdEZhaWwgICAgICAgICAgICAqLworLyogICAgICBIYW5kbGUgQ29ubmVjdCBmYWlsdXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnNzaWQgOiBCU1NJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHJlYXNvbiA6IHJlYXNvbiBvZiBmYWlsdXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFN0ZXBoZW4gQ2hlbiAgICAgICAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSU5DLiAgICAyMDA2LjEyICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHpmU3RhQ29ubmVjdEZhaWwoemRldl90KiBkZXYsIHUxNl90IHJlYXNvbiwgdTE2X3QqIGJzc2lkLCB1OF90IHdlaWdodCkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvKiBDaGFuZ2UgaW50ZXJuYWwgc3RhdGUgKi8KKyAgICB6ZkNoYW5nZUFkYXB0ZXJTdGF0ZShkZXYsIFpNX1NUQV9TVEFURV9ESVNDT05ORUNUKTsKKworICAgIC8qIEltcHJvdmUgV0VQL1RLSVAgcGVyZm9ybWFjZSB3aXRoIEhUIEFQLCBkZXRhaWwgaW5mb3JtYXRpb24gcGxlYXNlIGxvb2sgYnVnIzMyNDk1ICovCisgICAgLy96ZkhwU2V0VFRTSUZTVGltZShkZXYsIDB4OCk7CisKKyAgICAvKiBOb3RpZnkgd3JhcHBlciBvZiBjb25uZWN0aW9uIHN0YXR1cyBjaGFuZ2VzICovCisgICAgaWYgKHdkLT56ZmNiQ29ubmVjdE5vdGlmeSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgd2QtPnpmY2JDb25uZWN0Tm90aWZ5KGRldiwgcmVhc29uLCBic3NpZCk7CisgICAgfQorCisgICAgLyogUHV0IEFQIGludG8gaW50ZXJuYWwgYmxvY2tpbmcgbGlzdCAqLworICAgIHpmU3RhUHV0QXBJbnRvQmxvY2tpbmdMaXN0KGRldiwgKHU4X3QgKilic3NpZCwgd2VpZ2h0KTsKKworICAgIC8qIElzc3VlIGFub3RoZXIgU0NBTiAqLworICAgIGlmICggd2QtPnN0YS5iQXV0b1JlY29ubmVjdCApCisgICAgeworICAgICAgICB6bV9kZWJ1Z19tc2cwKCJTdGFydCBpbnRlcm5hbCBzY2FuLi4uIik7CisgICAgICAgIHpmU2Nhbk1nclNjYW5TdG9wKGRldiwgWk1fU0NBTl9NR1JfU0NBTl9JTlRFUk5BTCk7CisgICAgICAgIHpmU2Nhbk1nclNjYW5TdGFydChkZXYsIFpNX1NDQU5fTUdSX1NDQU5fSU5URVJOQUwpOworICAgIH0KK30KKwordThfdCB6ZmlXbGFuSUJTU0dldFBlZXJTdGF0aW9uc0NvdW50KHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHJldHVybiB3ZC0+c3RhLm9wcG9zaXRlQ291bnQ7Cit9CisKK3U4X3QgemZpV2xhbklCU1NJdGVyYXRlUGVlclN0YXRpb25zKHpkZXZfdCogZGV2LCB1OF90IG51bVRvSXRlcmF0ZSwgemZwSUJTU0l0ZXJhdGVQZWVyU3RhdGlvbkNiIGNhbGxiYWNrLCB2b2lkICpjdHgpCit7CisgICAgdThfdCBvcHBvc2l0ZUNvdW50OworICAgIHU4X3QgaTsKKyAgICB1OF90IGluZGV4ID0gMDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgb3Bwb3NpdGVDb3VudCA9IHdkLT5zdGEub3Bwb3NpdGVDb3VudDsKKyAgICBpZiAoIG9wcG9zaXRlQ291bnQgPiBudW1Ub0l0ZXJhdGUgKQorICAgIHsKKyAgICAgICAgb3Bwb3NpdGVDb3VudCA9IG51bVRvSXRlcmF0ZTsKKyAgICB9CisKKyAgICBmb3IoaT0wOyBpIDwgWk1fTUFYX09QUE9TSVRFX0NPVU5UOyBpKyspCisgICAgeworICAgICAgICBpZiAoIG9wcG9zaXRlQ291bnQgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB3ZC0+c3RhLm9wcG9zaXRlSW5mb1tpXS52YWxpZCA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBjYWxsYmFjayhkZXYsICZ3ZC0+c3RhLm9wcG9zaXRlSW5mb1tpXSwgY3R4LCBpbmRleCsrKTsKKyAgICAgICAgb3Bwb3NpdGVDb3VudC0tOworCisgICAgfQorCisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHJldHVybiBpbmRleDsKK30KKworCitzOF90IHpmU3RhRmluZEZyZWVPcHBvc2l0ZSh6ZGV2X3QqIGRldiwgdTE2X3QgKnNhLCBpbnQgKnBGb3VuZElkeCkKK3sKKyAgICBpbnQgb3Bwb3NpdGVDb3VudDsKKyAgICBpbnQgaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIG9wcG9zaXRlQ291bnQgPSB3ZC0+c3RhLm9wcG9zaXRlQ291bnQ7CisKKyAgICBmb3IoaT0wOyBpIDwgWk1fTUFYX09QUE9TSVRFX0NPVU5UOyBpKyspCisgICAgeworICAgICAgICBpZiAoIG9wcG9zaXRlQ291bnQgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB3ZC0+c3RhLm9wcG9zaXRlSW5mb1tpXS52YWxpZCA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBvcHBvc2l0ZUNvdW50LS07CisgICAgICAgIGlmICggemZNZW1vcnlJc0VxdWFsKCh1OF90Kikgc2EsIHdkLT5zdGEub3Bwb3NpdGVJbmZvW2ldLm1hY0FkZHIsIDYpICkKKyAgICAgICAgeworICAgICAgICAgICAgLy93ZC0+c3RhLm9wcG9zaXRlSW5mb1tpXS5hbGl2ZUNvdW50ZXIrKzsKKyAgICAgICAgICAgIHdkLT5zdGEub3Bwb3NpdGVJbmZvW2ldLmFsaXZlQ291bnRlciA9IFpNX0lCU1NfUEVFUl9BTElWRV9DT1VOVEVSOworCisgICAgICAgICAgICAvKiBpdCBpcyBhbHJlYWR5IHN0b3JlZCAqLworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaGVjayBpZiB0aGVyZSdzIHN0aWxsIHNwYWNlIGZvciBuZXcgY29tZXIKKyAgICBpZiAoIHdkLT5zdGEub3Bwb3NpdGVDb3VudCA9PSBaTV9NQVhfT1BQT1NJVEVfQ09VTlQgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8vIEZpbmQgYW4gdW51c2VkIHNsb3QgZm9yIG5ldyBwZWVyIHN0YXRpb24KKyAgICBmb3IoaT0wOyBpIDwgWk1fTUFYX09QUE9TSVRFX0NPVU5UOyBpKyspCisgICAgeworICAgICAgICBpZiAoIHdkLT5zdGEub3Bwb3NpdGVJbmZvW2ldLnZhbGlkID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgICpwRm91bmRJZHggPSBpOworICAgIHJldHVybiAwOworfQorCitzOF90IHpmU3RhRmluZE9wcG9zaXRlQnlNQUNBZGRyKHpkZXZfdCogZGV2LCB1MTZfdCAqc2EsIHU4X3QgKnBGb3VuZElkeCkKK3sKKyAgICB1MzJfdCBvcHBvc2l0ZUNvdW50OworICAgIHUzMl90IGk7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBvcHBvc2l0ZUNvdW50ID0gd2QtPnN0YS5vcHBvc2l0ZUNvdW50OworCisgICAgZm9yKGk9MDsgaSA8IFpNX01BWF9PUFBPU0lURV9DT1VOVDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKCBvcHBvc2l0ZUNvdW50ID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggd2QtPnN0YS5vcHBvc2l0ZUluZm9baV0udmFsaWQgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgb3Bwb3NpdGVDb3VudC0tOworICAgICAgICBpZiAoIHpmTWVtb3J5SXNFcXVhbCgodThfdCopIHNhLCB3ZC0+c3RhLm9wcG9zaXRlSW5mb1tpXS5tYWNBZGRyLCA2KSApCisgICAgICAgIHsKKyAgICAgICAgICAgICpwRm91bmRJZHggPSAodThfdClpOworCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgICpwRm91bmRJZHggPSAwOworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCB6ZlN0YUluaXRDb21tb25PcHBvc2l0ZUluZm8oemRldl90KiBkZXYsIGludCBpKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8qIHNldCB0aGUgZGVmYXVsdCByYXRlIHRvIHRoZSBoaWdoZXN0IHJhdGUgKi8KKyAgICB3ZC0+c3RhLm9wcG9zaXRlSW5mb1tpXS52YWxpZCA9IDE7CisgICAgd2QtPnN0YS5vcHBvc2l0ZUluZm9baV0uYWxpdmVDb3VudGVyID0gWk1fSUJTU19QRUVSX0FMSVZFX0NPVU5URVI7CisgICAgd2QtPnN0YS5vcHBvc2l0ZUNvdW50Kys7CisKKyNpZmRlZiBaTV9FTkFCTEVfSUJTU19XUEEyUFNLCisgICAgLyogU2V0IHBhcmFtZXRlcnMgZm9yIG5ldyBvcHBvc2l0ZSBwZWVyIHN0YXRpb24gISEhICovCisgICAgd2QtPnN0YS5vcHBvc2l0ZUluZm9baV0uY2FtSWR4ID0gMHhmZjsgIC8vIE5vdCBzZXQga2V5IGluIHRoaXMgbG9jYXRpb24KKyAgICB3ZC0+c3RhLm9wcG9zaXRlSW5mb1tpXS5wa0luc3RhbGxlZCA9IDA7CisgICAgd2QtPnN0YS5vcHBvc2l0ZUluZm9baV0ud3BhU3RhdGUgPSBaTV9TVEFfV1BBX1NUQVRFX0lOSVQgOyAgLy8gTm8gZW5jcnlwdGlvbgorI2VuZGlmCit9CisKK2ludCB6ZlN0YVNldE9wcG9zaXRlSW5mb0Zyb21CU1NJbmZvKHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNCc3NJbmZvKiBwQnNzSW5mbykKK3sKKyAgICBpbnQgaTsKKyAgICB1OF90KiAgZHN0OworICAgIHUxNl90ICBzYVszXTsKKyAgICBpbnQgcmVzOworICAgIHUzMl90IG9uZVR4U3RyZWFtQ2FwOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgemZNZW1vcnlDb3B5KCh1OF90Kikgc2EsIHBCc3NJbmZvLT5tYWNhZGRyLCA2KTsKKworICAgIHJlcyA9IHpmU3RhRmluZEZyZWVPcHBvc2l0ZShkZXYsIHNhLCAmaSk7CisgICAgaWYgKCByZXMgIT0gMCApCisgICAgeworICAgICAgICBnb3RvIHpsUmV0dXJuOworICAgIH0KKworICAgIGRzdCA9IHdkLT5zdGEub3Bwb3NpdGVJbmZvW2ldLm1hY0FkZHI7CisgICAgemZNZW1vcnlDb3B5KGRzdCwgKHU4X3QgKilzYSwgNik7CisKKyAgICBvbmVUeFN0cmVhbUNhcCA9ICh6ZkhwQ2FwYWJpbGl0eShkZXYpICYgWk1fSFBfQ0FQXzExTl9PTkVfVFhfU1RSRUFNKTsKKworICAgIGlmIChwQnNzSW5mby0+ZXh0U3VwcG9ydGVkUmF0ZXNbMV0gIT0gMCkKKyAgICB7CisgICAgICAgIC8qIFRPRE8gOiBIYW5kbGUgMTFuICovCisgICAgICAgIGlmIChwQnNzSW5mby0+ZnJlcXVlbmN5IDwgMzAwMCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogMi40R0h6ICovCisgICAgICAgICAgICBpZiAocEJzc0luZm8tPkVuYWJsZUhUID09IDEpCisgICAgICAgICAgICAgICAgemZSYXRlQ3RybEluaXRDZWxsKGRldiwgJndkLT5zdGEub3Bwb3NpdGVJbmZvW2ldLnJjQ2VsbCwgKG9uZVR4U3RyZWFtQ2FwIT0wKT8zOjIsIDEsIHBCc3NJbmZvLT5TRzQwKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB6ZlJhdGVDdHJsSW5pdENlbGwoZGV2LCAmd2QtPnN0YS5vcHBvc2l0ZUluZm9baV0ucmNDZWxsLCAxLCAxLCBwQnNzSW5mby0+U0c0MCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiA1R0h6ICovCisgICAgICAgICAgICBpZiAocEJzc0luZm8tPkVuYWJsZUhUID09IDEpCisgICAgICAgICAgICAgICAgemZSYXRlQ3RybEluaXRDZWxsKGRldiwgJndkLT5zdGEub3Bwb3NpdGVJbmZvW2ldLnJjQ2VsbCwgKG9uZVR4U3RyZWFtQ2FwIT0wKT8zOjIsIDAsIHBCc3NJbmZvLT5TRzQwKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB6ZlJhdGVDdHJsSW5pdENlbGwoZGV2LCAmd2QtPnN0YS5vcHBvc2l0ZUluZm9baV0ucmNDZWxsLCAxLCAwLCBwQnNzSW5mby0+U0c0MCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogVE9ETyA6IEhhbmRsZSAxMW4gKi8KKyAgICAgICAgaWYgKHBCc3NJbmZvLT5mcmVxdWVuY3kgPCAzMDAwKQorICAgICAgICB7CisgICAgICAgICAgICAvKiAyLjRHSHogKi8KKyAgICAgICAgICAgIGlmIChwQnNzSW5mby0+RW5hYmxlSFQgPT0gMSkKKyAgICAgICAgICAgICAgICB6ZlJhdGVDdHJsSW5pdENlbGwoZGV2LCAmd2QtPnN0YS5vcHBvc2l0ZUluZm9baV0ucmNDZWxsLCAob25lVHhTdHJlYW1DYXAhPTApPzM6MiwgMSwgcEJzc0luZm8tPlNHNDApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHpmUmF0ZUN0cmxJbml0Q2VsbChkZXYsICZ3ZC0+c3RhLm9wcG9zaXRlSW5mb1tpXS5yY0NlbGwsIDAsIDEsIHBCc3NJbmZvLT5TRzQwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIDVHSHogKi8KKyAgICAgICAgICAgIGlmIChwQnNzSW5mby0+RW5hYmxlSFQgPT0gMSkKKyAgICAgICAgICAgICAgICB6ZlJhdGVDdHJsSW5pdENlbGwoZGV2LCAmd2QtPnN0YS5vcHBvc2l0ZUluZm9baV0ucmNDZWxsLCAob25lVHhTdHJlYW1DYXAhPTApPzM6MiwgMCwgcEJzc0luZm8tPlNHNDApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHpmUmF0ZUN0cmxJbml0Q2VsbChkZXYsICZ3ZC0+c3RhLm9wcG9zaXRlSW5mb1tpXS5yY0NlbGwsIDEsIDAsIHBCc3NJbmZvLT5TRzQwKTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgemZTdGFJbml0Q29tbW9uT3Bwb3NpdGVJbmZvKGRldiwgaSk7Cit6bFJldHVybjoKKyAgICByZXR1cm4gMDsKK30KKworaW50IHpmU3RhU2V0T3Bwb3NpdGVJbmZvRnJvbVJ4QnVmKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZikKK3sKKyAgICBpbnQgICBpOworICAgIHU4X3QqICBkc3Q7CisgICAgdTE2X3QgIHNhWzNdOworICAgIGludCByZXMgPSAwOworICAgIHUxNl90ICBvZmZzZXQ7CisgICAgdThfdCAgIGJTdXBwb3J0RXh0UmF0ZTsKKyAgICB1MzJfdCBydHNjdHNSYXRlID0gMHhmZmZmZmZmZjsgLyogQ1RTOk9GRE0gNk0sIFJUUzpPRkRNIDZNICovCisgICAgdTMyX3Qgb25lVHhTdHJlYW1DYXA7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHNhWzBdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTJfT0ZGU0VUKTsKKyAgICBzYVsxXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIFpNX1dMQU5fSEVBREVSX0EyX09GRlNFVCsyKTsKKyAgICBzYVsyXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIFpNX1dMQU5fSEVBREVSX0EyX09GRlNFVCs0KTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICByZXMgPSB6ZlN0YUZpbmRGcmVlT3Bwb3NpdGUoZGV2LCBzYSwgJmkpOworICAgIGlmICggcmVzICE9IDAgKQorICAgIHsKKyAgICAgICAgZ290byB6bFJldHVybjsKKyAgICB9CisKKyAgICBkc3QgPSB3ZC0+c3RhLm9wcG9zaXRlSW5mb1tpXS5tYWNBZGRyOworICAgIHpmQ29weUZyb21SeEJ1ZmZlcihkZXYsIGJ1ZiwgZHN0LCBaTV9XTEFOX0hFQURFUl9BMl9PRkZTRVQsIDYpOworCisgICAgaWYgKCAod2QtPnN0YS5jdXJyZW50RnJlcXVlbmN5IDwgMzAwMCkgJiYgISh3ZC0+c3VwcG9ydE1vZGUgJiAoWk1fV0lSRUxFU1NfTU9ERV8yNF81NHxaTV9XSVJFTEVTU19NT0RFXzI0X04pKSApCisgICAgeworICAgICAgICBiU3VwcG9ydEV4dFJhdGUgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGJTdXBwb3J0RXh0UmF0ZSA9IDE7CisgICAgfQorCisgICAgaWYgKCAoYlN1cHBvcnRFeHRSYXRlID09IDEpCisgICAgICAgICAmJiAod2QtPnN0YS5jdXJyZW50RnJlcXVlbmN5IDwgMzAwMCkKKyAgICAgICAgICYmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JQlNTKQorICAgICAgICAgJiYgKHdkLT53ZmMuYklic3NHTW9kZSA9PSAwKSApCisgICAgeworICAgICAgICBiU3VwcG9ydEV4dFJhdGUgPSAwOworICAgIH0KKworICAgIHdkLT5zdGEuY29ubmVjdGlvbl8xMWIgPSAwOworICAgIG9uZVR4U3RyZWFtQ2FwID0gKHpmSHBDYXBhYmlsaXR5KGRldikgJiBaTV9IUF9DQVBfMTFOX09ORV9UWF9TVFJFQU0pOworCisgICAgaWYgKCAoKG9mZnNldCA9IHpmRmluZEVsZW1lbnQoZGV2LCBidWYsIFpNX1dMQU5fRUlEX0VYVEVOREVEX1JBVEUpKSAhPSAweGZmZmYpCisgICAgICAgICAmJiAoYlN1cHBvcnRFeHRSYXRlID09IDEpICkKKyAgICB7CisgICAgICAgIC8qIFRPRE8gOiBIYW5kbGUgMTFuICovCisgICAgICAgIGlmICh3ZC0+c3RhLmN1cnJlbnRGcmVxdWVuY3kgPCAzMDAwKQorICAgICAgICB7CisgICAgICAgICAgICAvKiAyLjRHSHogKi8KKyAgICAgICAgICAgIGlmICh3ZC0+c3RhLkVuYWJsZUhUID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8xMW5nCisgICAgICAgICAgICAgICAgemZSYXRlQ3RybEluaXRDZWxsKGRldiwgJndkLT5zdGEub3Bwb3NpdGVJbmZvW2ldLnJjQ2VsbCwgKG9uZVR4U3RyZWFtQ2FwIT0wKT8zOjIsIDEsIHdkLT5zdGEuU0c0MCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8xMWcKKyAgICAgICAgICAgICAgICB6ZlJhdGVDdHJsSW5pdENlbGwoZGV2LCAmd2QtPnN0YS5vcHBvc2l0ZUluZm9baV0ucmNDZWxsLCAxLCAxLCB3ZC0+c3RhLlNHNDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcnRzY3RzUmF0ZSA9IDB4MDAwMDFiYjsgLyogQ1RTOkNDSyAxTSwgUlRTOk9GRE0gNk0gKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIDVHSHogKi8KKyAgICAgICAgICAgIGlmICh3ZC0+c3RhLkVuYWJsZUhUID09IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8xMW5hCisgICAgICAgICAgICAgICAgemZSYXRlQ3RybEluaXRDZWxsKGRldiwgJndkLT5zdGEub3Bwb3NpdGVJbmZvW2ldLnJjQ2VsbCwgKG9uZVR4U3RyZWFtQ2FwIT0wKT8zOjIsIDAsIHdkLT5zdGEuU0c0MCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8xMWEKKyAgICAgICAgICAgICAgICB6ZlJhdGVDdHJsSW5pdENlbGwoZGV2LCAmd2QtPnN0YS5vcHBvc2l0ZUluZm9baV0ucmNDZWxsLCAxLCAwLCB3ZC0+c3RhLlNHNDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcnRzY3RzUmF0ZSA9IDB4MTBiMDFiYjsgLyogQ1RTOk9GRE0gNk0sIFJUUzpPRkRNIDZNICovCisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogVE9ETyA6IEhhbmRsZSAxMW4gKi8KKyAgICAgICAgaWYgKHdkLT5zdGEuY3VycmVudEZyZXF1ZW5jeSA8IDMwMDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIDIuNEdIeiAqLworICAgICAgICAgICAgaWYgKHdkLT5zdGEuRW5hYmxlSFQgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLzExbmcKKyAgICAgICAgICAgICAgICB6ZlJhdGVDdHJsSW5pdENlbGwoZGV2LCAmd2QtPnN0YS5vcHBvc2l0ZUluZm9baV0ucmNDZWxsLCAob25lVHhTdHJlYW1DYXAhPTApPzM6MiwgMSwgd2QtPnN0YS5TRzQwKTsKKyAgICAgICAgICAgICAgICBydHNjdHNSYXRlID0gMHgwMDAwMWJiOyAvKiBDVFM6Q0NLIDFNLCBSVFM6T0ZETSA2TSAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vMTFiCisgICAgICAgICAgICAgICAgemZSYXRlQ3RybEluaXRDZWxsKGRldiwgJndkLT5zdGEub3Bwb3NpdGVJbmZvW2ldLnJjQ2VsbCwgMCwgMSwgd2QtPnN0YS5TRzQwKTsKKyAgICAgICAgICAgICAgICBydHNjdHNSYXRlID0gMHgwOyAvKiBDVFM6Q0NLIDFNLCBSVFM6Q0NLIDFNICovCisgICAgICAgICAgICAgICAgd2QtPnN0YS5jb25uZWN0aW9uXzExYiA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiA1R0h6ICovCisgICAgICAgICAgICBpZiAod2QtPnN0YS5FbmFibGVIVCA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vMTFuYQorICAgICAgICAgICAgICAgIHpmUmF0ZUN0cmxJbml0Q2VsbChkZXYsICZ3ZC0+c3RhLm9wcG9zaXRlSW5mb1tpXS5yY0NlbGwsIChvbmVUeFN0cmVhbUNhcCE9MCk/MzoyLCAwLCB3ZC0+c3RhLlNHNDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vMTFhCisgICAgICAgICAgICAgICAgemZSYXRlQ3RybEluaXRDZWxsKGRldiwgJndkLT5zdGEub3Bwb3NpdGVJbmZvW2ldLnJjQ2VsbCwgMSwgMCwgd2QtPnN0YS5TRzQwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJ0c2N0c1JhdGUgPSAweDEwYjAxYmI7IC8qIENUUzpPRkRNIDZNLCBSVFM6T0ZETSA2TSAqLworICAgICAgICB9CisgICAgfQorCisgICAgemZTdGFJbml0Q29tbW9uT3Bwb3NpdGVJbmZvKGRldiwgaSk7CisKK3psUmV0dXJuOgorICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBpZiAocnRzY3RzUmF0ZSAhPSAweGZmZmZmZmZmKQorICAgIHsKKyAgICAgICAgemZIcFNldFJUU0NUU1JhdGUoZGV2LCBydHNjdHNSYXRlKTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZCB6ZlN0YVByb3RFcnBNb25pdG9yKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZikKK3sKKyAgICB1MTZfdCAgIG9mZnNldDsKKyAgICB1OF90ICAgIGVycDsKKyAgICB1OF90ICAgIGJzc2lkWzZdOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYgKCAod2QtPndsYW5Nb2RlID09IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUpJiYoemZTdGFJc0Nvbm5lY3RlZChkZXYpKSApCisgICAgeworICAgICAgICBaTV9NQUNfV09SRF9UT19CWVRFKHdkLT5zdGEuYnNzaWQsIGJzc2lkKTsKKworICAgICAgICBpZiAoemZSeEJ1ZmZlckVxdWFsVG9TdHIoZGV2LCBidWYsIGJzc2lkLCBaTV9XTEFOX0hFQURFUl9BMl9PRkZTRVQsIDYpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIChvZmZzZXQ9emZGaW5kRWxlbWVudChkZXYsIGJ1ZiwgWk1fV0xBTl9FSURfRVJQKSkgIT0gMHhmZmZmICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlcnAgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMik7CisKKyAgICAgICAgICAgICAgICBpZiAoIGVycCAmIFpNX0JJVF8xICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vem1fZGVidWdfbXNnMCgicHJvdGVjdGlvbiBtb2RlIG9uIik7CisgICAgICAgICAgICAgICAgICAgIGlmICh3ZC0+c3RhLmJQcm90ZWN0aW9uTW9kZSA9PSBGQUxTRSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5iUHJvdGVjdGlvbk1vZGUgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgemZIcFNldFNsb3RUaW1lKGRldiwgMCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy96bV9kZWJ1Z19tc2cwKCJwcm90ZWN0aW9uIG1vZGUgb2ZmIik7CisgICAgICAgICAgICAgICAgICAgIGlmICh3ZC0+c3RhLmJQcm90ZWN0aW9uTW9kZSA9PSBUUlVFKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLmJQcm90ZWN0aW9uTW9kZSA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgICAgICAgemZIcFNldFNsb3RUaW1lKGRldiwgMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwkJLy9DaGVjayB0aGUgZXhpc3RlbmNlIG9mIE5vbi1OIEFQCisJCS8vRm9sbG93IHRoZSBjaGVjayB0aGUgInBCc3NJbmZvLT5FbmFibGVIVCIKKwkJCWlmICgob2Zmc2V0ID0gemZGaW5kRWxlbWVudChkZXYsIGJ1ZiwgWk1fV0xBTl9FSURfSFRfQ0FQQUJJTElUWSkpICE9IDB4ZmZmZikKKwkJCXt9CisJCQllbHNlIGlmICgob2Zmc2V0ID0gemZGaW5kRWxlbWVudChkZXYsIGJ1ZiwgWk1fV0xBTl9QUkVOMl9FSURfSFRDQVBBQklMSVRZKSkgIT0gMHhmZmZmKQorCQkJe30KKwkJCWVsc2UKKwkJCXt3ZC0+c3RhLk5vbk5BUGNvdW50Kys7fQorICAgIH0KK30KKwordm9pZCB6ZlN0YVVwZGF0ZVdtZVBhcmFtZXRlcih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgdTE2X3QgICB0bXA7CisgICAgdTE2X3QgICBhaWZzWzVdOworICAgIHUxNl90ICAgY3dtaW5bNV07CisgICAgdTE2X3QgICBjd21heFs1XTsKKyAgICB1MTZfdCAgIHR4b3BbNV07CisgICAgdThfdCAgICBhY207CisgICAgdThfdCAgICBhYzsKKyAgICB1MTZfdCAgIGxlbjsKKyAgICB1MTZfdCAgIGk7CisgICAJdTE2X3QgICBvZmZzZXQ7CisgICAgdThfdCAgICByeFdtZVBhcmFtZXRlclNldENvdW50OworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLyogVXBkYXRlIGlmIFdNRSBwYXJhbWV0ZXIgc2V0IGNvdW50IGlzIGNoYW5nZWQgKi8KKyAgICAvKiBJZiBjb25uZWN0IHRvIFdNRSBBUCAqLworICAgIGlmICh3ZC0+c3RhLndtZUNvbm5lY3RlZCAhPSAwKQorICAgIHsKKyAgICAgICAgLyogRmluZCBXTUUgcGFyYW1ldGVyIGVsZW1lbnQgKi8KKyAgICAgICAgaWYgKChvZmZzZXQgPSB6ZkZpbmRXaWZpRWxlbWVudChkZXYsIGJ1ZiwgMiwgMSkpICE9IDB4ZmZmZikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChsZW4gPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMSkpID49IDcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcnhXbWVQYXJhbWV0ZXJTZXRDb3VudD16bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrOCk7CisgICAgICAgICAgICAgICAgaWYgKHJ4V21lUGFyYW1ldGVyU2V0Q291bnQgIT0gd2QtPnN0YS53bWVQYXJhbWV0ZXJTZXRDb3VudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHptX21zZzBfbW0oWk1fTFZfMCwgIndtZVBhcmFtZXRlclNldENvdW50IGNoYW5nZWQhIik7CisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEud21lUGFyYW1ldGVyU2V0Q291bnQgPSByeFdtZVBhcmFtZXRlclNldENvdW50OworICAgICAgICAgICAgICAgICAgICAvKiByZXRyaWV2ZSBXTUUgcGFyYW1ldGVyIGFuZCB1cGRhdGUgVHhRIHBhcmFtZXRlcnMgKi8KKyAgICAgICAgICAgICAgICAgICAgYWNtID0gMHhmOworICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTw0OyBpKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPj0gKDgrKGkqNCkrNCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wPXptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxMCtpKjQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjID0gKHRtcCA+PiA1KSAmIDB4MzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHRtcCAmIDB4MTApID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY20gJj0gKH4oMTw8YWMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlmc1thY10gPSAoKHRtcCAmIDB4ZikgKiA5KSArIDEwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcD16bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTEraSo0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IHRvIDJebiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3bWluW2FjXSA9IHpjQ3dUbGJbKHRtcCAmIDB4ZildOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3bWF4W2FjXSA9IHpjQ3dUbGJbKHRtcCA+PiA0KV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHhvcFthY109em13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCsxMitpKjQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKChhY20gJiAweDQpICE9IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN3bWluWzJdID0gY3dtaW5bMF07CisgICAgICAgICAgICAgICAgICAgICAgICBjd21heFsyXSA9IGN3bWF4WzBdOworICAgICAgICAgICAgICAgICAgICAgICAgYWlmc1syXSA9IGFpZnNbMF07CisgICAgICAgICAgICAgICAgICAgICAgICB0eG9wWzJdID0gdHhvcFswXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoKGFjbSAmIDB4OCkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgY3dtaW5bM10gPSBjd21pblsyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN3bWF4WzNdID0gY3dtYXhbMl07CisgICAgICAgICAgICAgICAgICAgICAgICBhaWZzWzNdID0gYWlmc1syXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR4b3BbM10gPSB0eG9wWzJdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGN3bWluWzRdID0gMzsKKyAgICAgICAgICAgICAgICAgICAgY3dtYXhbNF0gPSA3OworICAgICAgICAgICAgICAgICAgICBhaWZzWzRdID0gMjg7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKChjd21pblsyXSthaWZzWzJdKSA+ICgoY3dtaW5bMF0rYWlmc1swXSkrMSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuYWMwUHJpb3JpdHlIaWdoZXJUaGFuQWMyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuYWMwUHJpb3JpdHlIaWdoZXJUaGFuQWMyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB6ZkhwVXBkYXRlUW9zUGFyYW1ldGVyKGRldiwgY3dtaW4sIGN3bWF4LCBhaWZzLCB0eG9wKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IC8vaWYgKHdkLT5zdGEud21lQ29ubmVjdGVkICE9IDApCit9CisvKiBwcm9jZXNzIDgwMi4xMWggRHluYW1pYyBGcmVxdWVuY3kgU2VsZWN0aW9uICovCit2b2lkIHpmU3RhVXBkYXRlRG90MTFIREZTKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvKgorICAgIENoYW5uZWwgU3dpdGNoIEFubm91bmNlbWVudCBFbGVtZW50IEZvcm1hdAorICAgICstLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfEZvcm1hdHxFbGVtZW50IElEfExlbmd0aHxDaGFubmVsIFN3aXRjaCBNb2RlfE5ldyBDaGFubmVsIE51bWJlcnxDaGFubmVsIFN3aXRjaCBDb3VudHwKKyAgICArLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHxCeXRlcyB8ICAgMSAgICAgIHwgIDEgICB8CSAgICAgMSAgICAgICAgICAgfCAgICAgICAxICAgICAgICAgIHwgICAgICAgICAgMSAgICAgICAgIHwKKyAgICArLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHxWYWx1ZSB8ICAgMzcgICAgIHwgIDMgICB8ICAgICAgIDAgb3IgMSAgICAgIHx1bnNpZ25lZCBpbnRlZ2VyICB8dW5zaWduZWQgaW50ZWdlciAgICB8CisgICAgKy0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAqLworICAgIC8vdThfdCAgICBsZW5ndGgsIGNoYW5uZWwsIGlzNUc7CisgICAgdTE2X3QgICBvZmZzZXQ7CisKKyAgICAvKiBnZXQgRUlEKENoYW5uZWwgU3dpdGNoIEFubm91bmNlbWVudCkgKi8KKyAgICBpZiAoIChvZmZzZXQgPSB6ZkZpbmRFbGVtZW50KGRldiwgYnVmLCBaTV9XTEFOX0VJRF9DSEFOTkVMX1NXSVRDSF9BTk5PVU5DRSkpID09IDB4ZmZmZiApCisgICAgeworICAgICAgICAvL3ptX2RlYnVnX21zZzAoIkVJRChDaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1lbnQpIG5vdCBmb3VuZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKCB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMSkgPT0gMHgzICkKKyAgICB7CisgICAgICAgIHptX2RlYnVnX21zZzAoIkVJRChDaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1lbnQpIGZvdW5kIik7CisKKyAgICAgICAgLy9sZW5ndGggPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMSk7CisgICAgICAgIC8vemZDb3B5RnJvbVJ4QnVmZmVyKGRldiwgYnVmLCBwQnNzSW5mby0+c3VwcG9ydGVkUmF0ZXMsIG9mZnNldCwgbGVuZ3RoKzIpOworCisgICAgICAgIC8vQ2hhbmVsbCBTd2l0Y2ggTW9kZSBzZXQgdG8gMSwgZHJpdmVyIHNob3VsZCBkaXNhYmxlIHRyYW5zbWl0IGltbWVkaWF0ZQorICAgICAgICAvL3dlIGRvIHRoaXMgYnkgcG9sbCBDQ0EgaGlnaAorICAgICAgICBpZiAoem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzIpID09IDB4MSApCisgICAgICAgIHsKKyAgICAgICAgCS8vdXNlIFpNX09JRF9JTlRFUk5BTF9XUklURSxaTV9DTURfUkVTRVQgdG8gbm90aWNlIGZpcm13YXJlIGZsdXNoIHF1ZW5lIGFuZCBzdG9wIGRtYSwKKyAgICAgICAgCS8vdGhlbiByZXN0YXJ0IHJ4IGRtYSBidXQgbm90IHR4IGRtYQorICAgICAgICAJaWYgKHdkLT5zdGEuREZTRGlzYWJsZVR4ICE9IFRSVUUpCisgICAgICAgIAl7CisgICAgICAgICAgICAgICAgLyogVE9ETyA6IHpmSHBSZXNldFR4Unggd291bGQgY2F1c2UgUnggaGFuZyAqLworICAgICAgICAgICAgICAgIC8vemZIcFJlc2V0VHhSeChkZXYpOworICAgICAgICAgICAgICAgIHdkLT5zdGEuREZTRGlzYWJsZVR4ID0gVFJVRTsKKyAgICAgICAgICAgICAgICAvKiBUcmdnZXIgUnggRE1BICovCisgICAgICAgICAgICAgICAgemZIcFN0YXJ0UmVjdihkZXYpOworICAgICAgICAgICAgfQorICAgICAgICAJLy9BZGFwdGVyLT5aRDgwMjExSFNldHRpbmcuRGlzYWJsZVR4Qnk4MDIxMUg9VFJVRTsKKyAgICAgICAgCS8vQWNxdWlyZUN0ck9mUGh5UmVnKEFkYXB0ZXIpOworICAgICAgICAJLy9aRDEyMDVfV1JJVEVfUkVHSVNURVIoQWRhcHRlcixDUjI0LCAweDApOworICAgICAgICAJLy9SZWxlYXNlRG9Ob3RTbGVlcChBZGFwdGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNCkgPD0gMHgyICkKKyAgICAgICAgeworICAgICAgICAJLy9DaGFubmVsIFN3aXRjaAorICAgICAgICAJLy9pZiBDaGFubmVsIFN3aXRjaCBDb3VudCA9IDAgLCBTVEEgc2hvdWxkIGNoYW5nZSBjaGFubmVsIGltbWVkaWF0ZWx5LgorICAgICAgICAJLy9pZiBDaGFubmVsIFN3aXRjaCBDb3VudCA+IDAgLCBTVEEgc2hvdWxkIGNoYW5nZSBjaGFubmVsIGFmdGVyIFRCVFQqY291bnQKKyAgICAgICAgCS8vQnV0IGl0IHdvbid0IGJlIGFjY3VyYXRlIHRvIGxldCBkcml2ZXIgY2FsY3VsYXRlIFRCVFQqY291bnQsIGFuZCB0aGUgdmFsdWUgb2YKKyAgICAgICAgCS8vQ2hhbm5lbCBTd2l0Y2ggQ291bnQgd2lsbCBkZWNyZWFzZSBieSBvbmUgZWFjaCB3aGVuIGNvbnRpbnVlIHJlY2V2aW5nIGJlYWNvbgorICAgICAgICAJLy9TbyB3ZSBjaGFuZ2UgY2hhbm5lbCBoZXJlIHdoZW4gd2UgcmVjZWl2ZSBjb3VudCA8PTIuCisKKyAgICAgICAgICAgIHpmSHBEZWxldGVBbGxvd0NoYW5uZWwoZGV2LCB3ZC0+c3RhLmN1cnJlbnRGcmVxdWVuY3kpOworICAgICAgICAJd2QtPmZyZXF1ZW5jeSA9IHpmQ2hOdW1Ub0ZyZXEoZGV2LCB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMyksIDApOworICAgICAgICAJLy96ZkhwQWRkQWxsb3dDaGFubmVsKGRldiwgd2QtPmZyZXF1ZW5jeSk7CisgICAgICAgIAl6bV9kZWJ1Z19tc2cxKCJDV1kgLSBqdW1wIHRvIGZyZXF1ZW5jeSA9ICIsIHdkLT5mcmVxdWVuY3kpOworICAgICAgICAJemZDb3JlU2V0RnJlcXVlbmN5KGRldiwgd2QtPmZyZXF1ZW5jeSk7CisgICAgICAgIAl3ZC0+c3RhLkRGU0Rpc2FibGVUeCA9IEZBTFNFOworICAgICAgICAgICAgLyogSW5jcmVhc2UgcnhCZWFjb25Db3VudCB0byBwcmV2ZW50IGJlYWNvbiBsb3N0ICovCisgICAgICAgICAgICBpZiAoemZTdGFJc0Nvbm5lY3RlZChkZXYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT5zdGEucnhCZWFjb25Db3VudCA9IDEgPDwgNjsgLy8gMiB0aW1lcyBvZiBjaGVjayB3b3VsZCBwYXNzCisgICAgICAgICAgICB9CisgICAgICAgIAkvL3N0YXJ0IHR4IGRtYSB0byB0cmFuc21pdCBwYWNrZXQKKworICAgICAgICAJLy9pZiAoem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzMpICE9IHdkLT5mcmVxdWVuY3kpCisgICAgICAgIAkvL3sKKyAgICAgICAgCS8vCS8vWkREYmdQcmludCgoIlJhZGFyIERldGVjdCBieSBBUFxuIikpOworICAgICAgICAJLy8JemZDb3JlU2V0RnJlcXVlbmN5KCk7CisgICAgICAgIAkvLwlQcm9jZXNzUmFkYXJEZXRlY3RFdmVudChBZGFwdGVyKTsKKyAgICAgICAgCS8vCVNldF9SRl9DaGFubmVsKEFkYXB0ZXIsIFN3UmZkLT5SZmQtPlJ4QnVmZmVyW2luZGV4KzNdLCAoVUNIQVIpQWRhcHRlci0+UkZfTW9kZSwgMSk7CisgICAgICAgIAkvLwlBZGFwdGVyLT5DYXJkU2V0dGluZy5DaGFubmVsID0gU3dSZmQtPlJmZC0+UnhCdWZmZXJbaW5kZXgrM107CisgICAgICAgIAkvLwlBZGFwdGVyLT5TYXZlQ2hhbm5lbCA9IEFkYXB0ZXItPkNhcmRTZXR0aW5nLkNoYW5uZWw7CisgICAgICAgIAkvLwlBZGFwdGVyLT5VdGlsaXR5Q2hhbm5lbCA9IEFkYXB0ZXItPkNhcmRTZXR0aW5nLkNoYW5uZWw7CisgICAgICAgIAkvL30KKyAgICAgICAgfQorICAgIH0KKworfQorLyogVE9ETyA6IHByb2Nlc3MgODAyLjExaCBUcmFuc21pc3Npb24gUG93ZXIgQ29udHJvbCAqLwordm9pZCB6ZlN0YVVwZGF0ZURvdDExSFRQQyh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7Cit9CisKKy8qIElCU1MgcG93ZXItc2F2aW5nIG1vZGUgKi8KK3ZvaWQgemZTdGFJYnNzUFNDaGVja1N0YXRlKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZikKK3sKKyAgICB1OF90ICAgaSwgZnJhbWVDdHJsOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYgKCAhemZTdGFJc0Nvbm5lY3RlZChkZXYpICkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIHdkLT53bGFuTW9kZSAhPSBaTV9NT0RFX0lCU1MgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDsKKyAgICB9CisKKyAgICAvKiBjaGVjayBCU1NJRCAqLworICAgIGlmICggIXpmUnhCdWZmZXJFcXVhbFRvU3RyKGRldiwgYnVmLCAodThfdCopIHdkLT5zdGEuYnNzaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWk1fV0xBTl9IRUFERVJfQTNfT0ZGU0VULCA2KSApCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZnJhbWVDdHJsID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMSk7CisKKyAgICAvKiBjaGVjayBwb3dlciBtYW5hZ2VtZW50IGJpdCAqLworICAgIGlmICggZnJhbWVDdHJsICYgWk1fQklUXzQgKQorICAgIHsKKyAgICAgICAgZm9yKGk9MTsgaTxaTV9NQVhfUFNfU1RBOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggIXdkLT5zdGEuc3RhUFNMaXN0LmVudGl0eVtpXS5iVXNlZCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGNoZWNrIHNvdXJjZSBhZGRyZXNzICovCisgICAgICAgICAgICBpZiAoIHpmUnhCdWZmZXJFcXVhbFRvU3RyKGRldiwgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnN0YVBTTGlzdC5lbnRpdHlbaV0ubWFjQWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWk1fV0xBTl9IRUFERVJfQTJfT0ZGU0VULCA2KSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yKGk9MTsgaTxaTV9NQVhfUFNfU1RBOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggIXdkLT5zdGEuc3RhUFNMaXN0LmVudGl0eVtpXS5iVXNlZCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5zdGFQU0xpc3QuZW50aXR5W2ldLmJVc2VkID0gVFJVRTsKKyAgICAgICAgICAgICAgICB3ZC0+c3RhLnN0YVBTTGlzdC5lbnRpdHlbaV0uYkRhdGFRdWV1ZWQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggaSA9PSBaTV9NQVhfUFNfU1RBICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogU1RBIGxpc3QgaXMgZnVsbCAqLworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgemZDb3B5RnJvbVJ4QnVmZmVyKGRldiwgYnVmLCB3ZC0+c3RhLnN0YVBTTGlzdC5lbnRpdHlbaV0ubWFjQWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFpNX1dMQU5fSEVBREVSX0EyX09GRlNFVCwgNik7CisKKyAgICAgICAgaWYgKCB3ZC0+c3RhLnN0YVBTTGlzdC5jb3VudCA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZW5hYmxlIEFUSU0gd2luZG93CisgICAgICAgICAgICAvL3pmRW5hYmxlQXRpbVdpbmRvdyhkZXYpOworICAgICAgICB9CisKKyAgICAgICAgd2QtPnN0YS5zdGFQU0xpc3QuY291bnQrKzsKKyAgICB9CisgICAgZWxzZSBpZiAoIHdkLT5zdGEuc3RhUFNMaXN0LmNvdW50ICkKKyAgICB7CisgICAgICAgIGZvcihpPTE7IGk8Wk1fTUFYX1BTX1NUQTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIHdkLT5zdGEuc3RhUFNMaXN0LmVudGl0eVtpXS5iVXNlZCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCB6ZlJ4QnVmZmVyRXF1YWxUb1N0cihkZXYsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuc3RhUFNMaXN0LmVudGl0eVtpXS5tYWNBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWk1fV0xBTl9IRUFERVJfQTJfT0ZGU0VULCA2KSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnN0YVBTTGlzdC5lbnRpdHlbaV0uYlVzZWQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5zdGFQU0xpc3QuY291bnQtLTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIHdkLT5zdGEuc3RhUFNMaXN0LmVudGl0eVtpXS5iRGF0YVF1ZXVlZCApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlbmQgcXVldWVkIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICggd2QtPnN0YS5zdGFQU0xpc3QuY291bnQgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIGRpc2FibGUgQVRJTSB3aW5kb3cgKi8KKyAgICAgICAgICAgIC8vemZEaXNhYmxlQXRpbVdpbmRvdyhkZXYpOworICAgICAgICB9CisKKyAgICB9Cit9CisKKy8qIElCU1MgcG93ZXItc2F2aW5nIG1vZGUgKi8KK3U4X3QgemZTdGFJYnNzUFNRdWV1ZURhdGEoemRldl90KiBkZXYsIHpidWZfdCogYnVmKQoreworICAgIHU4X3QgICBpOworICAgIHUxNl90ICBkYVszXTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGlmICggIXpmU3RhSXNDb25uZWN0ZWQoZGV2KSApCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIHdkLT53bGFuTW9kZSAhPSBaTV9NT0RFX0lCU1MgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCB3ZC0+c3RhLnN0YVBTTGlzdC5jb3VudCA9PSAwICYmIHdkLT5zdGEucG93ZXJTYXZlTW9kZSA8PSBaTV9TVEFfUFNfTk9ORSApCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBEQSAqLworI2lmZGVmIFpNX0VOQUJMRV9OQVRJVkVfV0lGSQorICAgIGRhWzBdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTFfT0ZGU0VUKTsKKyAgICBkYVsxXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIFpNX1dMQU5fSEVBREVSX0ExX09GRlNFVCArIDIpOworICAgIGRhWzJdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTFfT0ZGU0VUICsgNCk7CisjZWxzZQorICAgIGRhWzBdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMCk7CisgICAgZGFbMV0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCAyKTsKKyAgICBkYVsyXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDQpOworI2VuZGlmCisKKyAgICBpZiAoIFpNX0lTX01VTFRJQ0FTVF9PUl9CUk9BRENBU1QoZGEpICkKKyAgICB7CisgICAgICAgIHdkLT5zdGEuc3RhUFNMaXN0LmVudGl0eVswXS5iRGF0YVF1ZXVlZCA9IFRSVUU7CisgICAgICAgIHdkLT5zdGEuaWJzc1BTRGF0YVF1ZXVlW3dkLT5zdGEuaWJzc1BTRGF0YUNvdW50KytdID0gYnVmOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvLyBVbmljYXN0IHBhY2tldC4uLgorCisgICAgZm9yKGk9MTsgaTxaTV9NQVhfUFNfU1RBOyBpKyspCisgICAgeworICAgICAgICBpZiAoIHpmTWVtb3J5SXNFcXVhbCh3ZC0+c3RhLnN0YVBTTGlzdC5lbnRpdHlbaV0ubWFjQWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHU4X3QqKSBkYSwgNikgKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+c3RhLnN0YVBTTGlzdC5lbnRpdHlbaV0uYkRhdGFRdWV1ZWQgPSBUUlVFOworICAgICAgICAgICAgd2QtPnN0YS5pYnNzUFNEYXRhUXVldWVbd2QtPnN0YS5pYnNzUFNEYXRhQ291bnQrK10gPSBidWY7CisKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQorCisjaWYgMAorICAgIGlmICggd2QtPnN0YS5wb3dlclNhdmVNb2RlID4gWk1fU1RBX1BTX05PTkUgKQorICAgIHsKKyAgICAgICAgd2QtPnN0YS5zdGFQU0RhdGFRdWV1ZVt3ZC0+c3RhLnN0YVBTRGF0YUNvdW50KytdID0gYnVmOworCisgICAgICAgIHJldHVybiAxOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIElCU1MgcG93ZXItc2F2aW5nIG1vZGUgKi8KK3ZvaWQgemZTdGFJYnNzUFNTZW5kKHpkZXZfdCogZGV2KQoreworICAgIHU4X3QgICBpOworICAgIHUxNl90ICBiY2FzdEFkZHJbM10gPSB7MHhmZmZmLCAweGZmZmYsIDB4ZmZmZn07CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAoICF6ZlN0YUlzQ29ubmVjdGVkKGRldikgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDsKKyAgICB9CisKKyAgICBpZiAoIHdkLT53bGFuTW9kZSAhPSBaTV9NT0RFX0lCU1MgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDsKKyAgICB9CisKKyAgICBmb3IoaT0wOyBpPFpNX01BWF9QU19TVEE7IGkrKykKKyAgICB7CisgICAgICAgIGlmICggd2QtPnN0YS5zdGFQU0xpc3QuZW50aXR5W2ldLmJEYXRhUXVldWVkICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBpID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmU2VuZE1tRnJhbWUoZGV2LCBaTV9XTEFOX0ZSQU1FX1RZUEVfQVRJTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJjYXN0QWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIHdkLT5zdGEuc3RhUFNMaXN0LmVudGl0eVtpXS5iVXNlZCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gU2VuZCBBVElNIHRvIHByZXZlbnQgdGhlIHBlZXIgdG8gZ28gdG8gc2xlZXAKKyAgICAgICAgICAgICAgICB6ZlNlbmRNbUZyYW1lKGRldiwgWk1fV0xBTl9GUkFNRV9UWVBFX0FUSU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTE2X3QqKSB3ZC0+c3RhLnN0YVBTTGlzdC5lbnRpdHlbaV0ubWFjQWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3ZC0+c3RhLnN0YVBTTGlzdC5lbnRpdHlbaV0uYkRhdGFRdWV1ZWQgPSBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvcihpPTA7IGk8d2QtPnN0YS5pYnNzUFNEYXRhQ291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIHpmVHhTZW5kRXRoKGRldiwgd2QtPnN0YS5pYnNzUFNEYXRhUXVldWVbaV0sIDAsCisgICAgICAgICAgICAgICAgICAgIFpNX0VYVEVSTkFMX0FMTE9DX0JVRiwgMCk7CisgICAgfQorCisgICAgd2QtPnN0YS5pYnNzUHJldlBTRGF0YUNvdW50ID0gd2QtPnN0YS5pYnNzUFNEYXRhQ291bnQ7CisgICAgd2QtPnN0YS5pYnNzUFNEYXRhQ291bnQgPSAwOworfQorCisKK3ZvaWQgemZTdGFSZWNvbm5lY3QoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICBpZiAoIHdkLT53bGFuTW9kZSAhPSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFICYmCisgICAgICAgICB3ZC0+d2xhbk1vZGUgIT0gWk1fTU9ERV9JQlNTICkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoICh6ZlN0YUlzQ29ubmVjdGVkKGRldikpfHwoemZTdGFJc0Nvbm5lY3RpbmcoZGV2KSkgKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICggd2QtPnN0YS5iQ2hhbm5lbFNjYW4gKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIFJlY292ZXIgemVybyBTU0lEIGxlbmd0aCAgKi8KKyAgICBpZiAoICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSkgJiYgKHdkLT53cy5zc2lkTGVuID09IDApKQorICAgIHsKKyAgICAgICAgem1fZGVidWdfbXNnMCgiemZTdGFSZWNvbm5lY3Q6IE5PVCBTdXBwb3J0ISEgU2V0IFNTSUQgdG8gYW55IEJTUyIpOworICAgICAgICAvKiBBTlkgQlNTICovCisgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHdkLT5zdGEuc3NpZFswXSA9IDA7CisgICAgICAgIHdkLT5zdGEuc3NpZExlbiA9IDA7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgfQorCisgICAgLy8gUkFZOiBUbyBlbnN1cmUgbm8gVFggcGVuZGluZyBiZWZvcmUgcmUtY29ubmVjdGluZworICAgIHpmRmx1c2hWdHhxKGRldik7CisgICAgemZXbGFuRW5hYmxlKGRldik7CisgICAgemZTY2FuTWdyU2NhbkFjayhkZXYpOworfQorCit2b2lkIHpmU3RhVGltZXIxMDBtcyh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAoICh3ZC0+dGljayAlIDEwKSA9PSAwICkKKyAgICB7CisgICAgICAgIHpmUHVzaFZ0eHEoZGV2KTsKKy8vICAgICAgICB6ZlBvd2VyU2F2aW5nTWdyTWFpbihkZXYpOworICAgIH0KK30KKworCit2b2lkIHpmU3RhQ2hlY2tSeEJlYWNvbih6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAoKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSApICYmICh6ZlN0YUlzQ29ubmVjdGVkKGRldikpKQorICAgIHsKKyAgICAgICAgaWYgKHdkLT5iZWFjb25JbnRlcnZhbCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+YmVhY29uSW50ZXJ2YWwgPSAxMDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCAod2QtPnRpY2sgJSAoKHdkLT5iZWFjb25JbnRlcnZhbCAqIDEwKSAvIFpNX01TX1BFUl9USUNLKSkgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENoZWNrIHJ4QmVhY29uQ291bnQgKi8KKyAgICAgICAgICAgIGlmICh3ZC0+c3RhLnJ4QmVhY29uQ291bnQgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAod2QtPnN0YS5iZWFjb25NaXNzU3RhdGUgPT0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAJLypub3RpZnkgQVAgdGhhdCB3ZSBsZWZ0Ki8KKyAgICAgICAgICAgIAl6ZlNlbmRNbUZyYW1lKGRldiwgWk1fV0xBTl9GUkFNRV9UWVBFX0RFQVVUSCwgd2QtPnN0YS5ic3NpZCwgMywgMCwgMCk7CisgICAgICAgICAgICAgICAgLyogQmVhY29uIExvc3QgKi8KKyAgICAgICAgICAgICAgICB6ZlN0YUNvbm5lY3RGYWlsKGRldiwgWk1fU1RBVFVTX01FRElBX0RJU0NPTk5FQ1RfQkVBQ09OX01JU1MsCisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLmJzc2lkLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5iZWFjb25NaXNzU3RhdGUgPSAxOworICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBjaGFubmVsICovCisgICAgICAgICAgICAgICAgICAgIHpmQ29yZVNldEZyZXF1ZW5jeUV4VjIoZGV2LCB3ZC0+ZnJlcXVlbmN5LCB3ZC0+QmFuZFdpZHRoNDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPkV4dE9mZnNldCwgTlVMTCwgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT5zdGEuYmVhY29uTWlzc1N0YXRlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdkLT5zdGEucnhCZWFjb25Db3VudCA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKKworCit2b2lkIHpmU3RhQ2hlY2tDb25uZWN0VGltZW91dCh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIGlmICggd2QtPndsYW5Nb2RlICE9IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUgKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICggIXpmU3RhSXNDb25uZWN0aW5nKGRldikgKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgaWYgKCAod2QtPnN0YS5jb25uZWN0U3RhdGUgPT0gWk1fU1RBX0NPTk5fU1RBVEVfQVVUSF9PUEVOKXx8CisgICAgICAgICAod2QtPnN0YS5jb25uZWN0U3RhdGUgPT0gWk1fU1RBX0NPTk5fU1RBVEVfQVVUSF9TSEFSRV8xKXx8CisgICAgICAgICAod2QtPnN0YS5jb25uZWN0U3RhdGUgPT0gWk1fU1RBX0NPTk5fU1RBVEVfQVVUSF9TSEFSRV8yKXx8CisgICAgICAgICAod2QtPnN0YS5jb25uZWN0U3RhdGUgPT0gWk1fU1RBX0NPTk5fU1RBVEVfQVNTT0NJQVRFKSApCisgICAgeworICAgICAgICBpZiAoICh3ZC0+dGljayAtIHdkLT5zdGEuY29ubmVjdFRpbWVyKSA+IFpNX0lOVEVSVkFMX0NPTk5FQ1RfVElNRU9VVCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggd2QtPnN0YS5jb25uZWN0QnlSZWFzc28gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT5zdGEuZmFpbENudE9mUmVhc3NvKys7CisgICAgICAgICAgICAgICAgaWYgKCB3ZC0+c3RhLmZhaWxDbnRPZlJlYXNzbyA+IDIgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5jb25uZWN0QnlSZWFzc28gPSBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdkLT5zdGEuY29ubmVjdFN0YXRlID0gWk1fU1RBX0NPTk5fU1RBVEVfTk9ORTsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzEoImNvbm5lY3QgdGltZW91dCwgc3RhdGUgPSAiLCB3ZC0+c3RhLmNvbm5lY3RTdGF0ZSk7CisgICAgICAgICAgICAvL3pmaVdsYW5EaXNhYmxlKGRldik7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgcmV0dXJuOworCitmYWlsZWQ6CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICBpZih3ZC0+c3RhLmF1dGhNb2RlID09IFpNX0FVVEhfTU9ERV9BVVRPKQorCXsgLy8gRml4IHNvbWUgQVAgbm90IHNlbmQgYXV0aGVudGljYXRpb24gZmFpbGVkIG1lc3NhZ2UgdG8gc3RhIGFuZCBsZWFkIHRvIGNvbm5lY3QgdGltZW91dCAhCisgICAgICAgICAgICB3ZC0+c3RhLmNvbm5lY3RUaW1lb3V0Q291bnQrKzsKKwl9CisgICAgemZTdGFDb25uZWN0RmFpbChkZXYsIFpNX1NUQVRVU19NRURJQV9ESVNDT05ORUNUX1RJTUVPVVQsIHdkLT5zdGEuYnNzaWQsIDIpOworICAgIHJldHVybjsKK30KKwordm9pZCB6Zk1tU3RhVGltZVRpY2soemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLyogYWlyb3BlZWsgKi8KKyAgICBpZiAod2QtPndsYW5Nb2RlICE9IFpNX01PREVfQVAgJiYgIXdkLT5zd1NuaWZmZXIpCisgICAgeworICAgICAgICBpZiAoIHdkLT50aWNrICYgMSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmVGltZXJDaGVja0FuZEhhbmRsZShkZXYpOworICAgICAgICB9CisKKyAgICAgICAgemZTdGFDaGVja1J4QmVhY29uKGRldik7CisgICAgICAgIHpmU3RhVGltZXIxMDBtcyhkZXYpOworICAgICAgICB6ZlN0YUNoZWNrQ29ubmVjdFRpbWVvdXQoZGV2KTsKKyAgICAgICAgemZQb3dlclNhdmluZ01nck1haW4oZGV2KTsKKyAgICB9CisKKyNpZmRlZiBaTV9FTkFCTEVfQUdHUkVHQVRJT04KKyAgICAvKgorICAgICAqIGFkZCBieSBob25kYQorICAgICAqLworICAgIHpmQWdnU2NhbkFuZENsZWFyKGRldiwgd2QtPnRpY2spOworI2VuZGlmCit9CisKK3ZvaWQgemZTdGFTZW5kQmVhY29uKHpkZXZfdCogZGV2KQoreworICAgIHpidWZfdCogYnVmOworICAgIHUxNl90IG9mZnNldCwgc2VxOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIC8vem1fZGVidWdfbXNnMCgiXG4iKTsKKworICAgIC8qIFRCRCA6IE1heGltdW0gc2l6ZSBvZiBiZWFjb24gKi8KKyAgICBpZiAoKGJ1ZiA9IHpmd0J1ZkFsbG9jYXRlKGRldiwgMTAyNCkpID09IE5VTEwpCisgICAgeworICAgICAgICB6bV9kZWJ1Z19tc2cwKCJBbGxvY2F0ZSBiZWFjb24gYnVmZmVyIGZhaWxlZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb2Zmc2V0ID0gMDsKKyAgICAvKiB3bGFuIGhlYWRlciAqLworICAgIC8qIEZyYW1lIGNvbnRyb2wgKi8KKyAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0LCAweDAwODApOworICAgIG9mZnNldCs9MjsKKyAgICAvKiBEdXJhdGlvbiAqLworICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIDB4MDAwMCk7CisgICAgb2Zmc2V0Kz0yOworICAgIC8qIEFkZHJlc3MgMSAqLworICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIDB4ZmZmZik7CisgICAgb2Zmc2V0Kz0yOworICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIDB4ZmZmZik7CisgICAgb2Zmc2V0Kz0yOworICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIDB4ZmZmZik7CisgICAgb2Zmc2V0Kz0yOworICAgIC8qIEFkZHJlc3MgMiAqLworICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIHdkLT5tYWNBZGRyWzBdKTsKKyAgICBvZmZzZXQrPTI7CisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgd2QtPm1hY0FkZHJbMV0pOworICAgIG9mZnNldCs9MjsKKyAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0LCB3ZC0+bWFjQWRkclsyXSk7CisgICAgb2Zmc2V0Kz0yOworICAgIC8qIEFkZHJlc3MgMyAqLworICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIHdkLT5zdGEuYnNzaWRbMF0pOworICAgIG9mZnNldCs9MjsKKyAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0LCB3ZC0+c3RhLmJzc2lkWzFdKTsKKyAgICBvZmZzZXQrPTI7CisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgd2QtPnN0YS5ic3NpZFsyXSk7CisgICAgb2Zmc2V0Kz0yOworCisgICAgLyogU2VxdWVuY2UgbnVtYmVyICovCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICBzZXEgPSAoKHdkLT5tbXNlcSsrKTw8NCk7CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0LCBzZXEpOworICAgIG9mZnNldCs9MjsKKworICAgIC8qIDI0LTMxIFRpbWUgU3RhbXAgOiBoYXJkd2FyZSB3aWxsIGZpbGwgdGhpcyBmaWVsZCAqLworICAgIG9mZnNldCs9ODsKKworICAgIC8qIEJlYWNvbiBJbnRlcnZhbCAqLworICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIHdkLT5iZWFjb25JbnRlcnZhbCk7CisgICAgb2Zmc2V0Kz0yOworCisgICAgLyogQ2FwYWJpbGl0eSAqLworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgd2QtPnN0YS5jYXBhYmlsaXR5WzBdKTsKKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIHdkLT5zdGEuY2FwYWJpbGl0eVsxXSk7CisKKyAgICAvKiBTU0lEICovCisgICAgb2Zmc2V0ID0gemZTdGFBZGRJZVNzaWQoZGV2LCBidWYsIG9mZnNldCk7CisKKyAgICBpZih3ZC0+ZnJlcXVlbmN5IDw9IFpNX0NIX0dfMTQpICAvLyAyLjQgR0h6ICBiK2cKKyAgICB7CisKKyAgICAJLyogU3VwcG9ydCBSYXRlICovCisgICAgCW9mZnNldCA9IHpmTW1BZGRJZVN1cHBvcnRSYXRlKGRldiwgYnVmLCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQlaTV9XTEFOX0VJRF9TVVBQT1JUX1JBVEUsIFpNX1JBVEVfU0VUX0NDSyk7CisKKyAgICAJLyogRFMgcGFyYW1ldGVyIHNldCAqLworICAgIAlvZmZzZXQgPSB6Zk1tQWRkSWVEcyhkZXYsIGJ1Ziwgb2Zmc2V0KTsKKworICAgIAlvZmZzZXQgPSB6ZlN0YUFkZEllSWJzcyhkZXYsIGJ1Ziwgb2Zmc2V0KTsKKworICAgICAgICBpZiggd2QtPndmYy5iSWJzc0dNb2RlCisgICAgICAgICAgICAmJiAod2QtPnN1cHBvcnRNb2RlICYgKFpNX1dJUkVMRVNTX01PREVfMjRfNTR8Wk1fV0lSRUxFU1NfTU9ERV8yNF9OKSkgKSAgICAvLyBPbmx5IGFjY29tcGFueSB3aXRoIGVuYWJsaW5nIGEgbW9kZSAuCisgICAgICAgIHsKKyAgICAgIAkgICAgLyogRVJQIEluZm9ybWF0aW9uICovCisgICAgICAgCSAgICB3ZC0+ZXJwRWxlbWVudCA9IDA7CisgICAgICAgCSAgICBvZmZzZXQgPSB6Zk1tQWRkSWVFcnAoZGV2LCBidWYsIG9mZnNldCk7CisgICAgICAgCX0KKworICAgICAgIAkvKiBUT0RPIDogY291bnRyeSBpbmZvcm1hdGlvbiAqLworICAgICAgICAvKiBSU04gKi8KKyAgICAgICAgaWYgKCB3ZC0+c3RhLmF1dGhNb2RlID09IFpNX0FVVEhfTU9ERV9XUEEyUFNLICkKKyAgICAgICAgeworICAgICAgICAgICAgb2Zmc2V0ID0gemZ3U3RhQWRkSWVXcGFSc24oZGV2LCBidWYsIG9mZnNldCwgWk1fV0xBTl9GUkFNRV9UWVBFX0FVVEgpOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHdkLT53ZmMuYklic3NHTW9kZQorICAgICAgICAgICAgJiYgKHdkLT5zdXBwb3J0TW9kZSAmIChaTV9XSVJFTEVTU19NT0RFXzI0XzU0fFpNX1dJUkVMRVNTX01PREVfMjRfTikpICkgICAgLy8gT25seSBhY2NvbXBhbnkgd2l0aCBlbmFibGluZyBhIG1vZGUgLgorICAgICAgICB7CisgICAgICAgICAgICAvKiBFbmFibGUgRyBNb2RlICovCisgICAgICAgICAgICAvKiBFeHRlbmRlZCBTdXBwb3J0ZWQgUmF0ZXMgKi8KKyAgICAgICAJICAgIG9mZnNldCA9IHpmTW1BZGRJZVN1cHBvcnRSYXRlKGRldiwgYnVmLCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJICAgIFpNX1dMQU5fRUlEX0VYVEVOREVEX1JBVEUsIFpNX1JBVEVfU0VUX09GRE0pOworCSAgICB9CisgICAgfQorICAgIGVsc2UgICAgLy8gNUdIeiBhCisgICAgeworICAgICAgICAvKiBTdXBwb3J0IFJhdGUgYSBNb2RlICovCisgICAgCW9mZnNldCA9IHpmTW1BZGRJZVN1cHBvcnRSYXRlKGRldiwgYnVmLCBvZmZzZXQsCisgICAgICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgWk1fV0xBTl9FSURfU1VQUE9SVF9SQVRFLCBaTV9SQVRFX1NFVF9PRkRNKTsKKworICAgICAgICAvKiBEUyBwYXJhbWV0ZXIgc2V0ICovCisgICAgCW9mZnNldCA9IHpmTW1BZGRJZURzKGRldiwgYnVmLCBvZmZzZXQpOworCisgICAgCW9mZnNldCA9IHpmU3RhQWRkSWVJYnNzKGRldiwgYnVmLCBvZmZzZXQpOworCisgICAgICAgIC8qIFRPRE8gOiBjb3VudHJ5IGluZm9ybWF0aW9uICovCisgICAgICAgIC8qIFJTTiAqLworICAgICAgICBpZiAoIHdkLT5zdGEuYXV0aE1vZGUgPT0gWk1fQVVUSF9NT0RFX1dQQTJQU0sgKQorICAgICAgICB7CisgICAgICAgICAgICBvZmZzZXQgPSB6ZndTdGFBZGRJZVdwYVJzbihkZXYsIGJ1Ziwgb2Zmc2V0LCBaTV9XTEFOX0ZSQU1FX1RZUEVfQVVUSCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIHdkLT53bGFuTW9kZSAhPSBaTV9NT0RFX0lCU1MgKQorICAgIHsKKyAgICAgICAgLyogVE9ETyA6IE5lZWQgdG8gY2hlY2sgaWYgaXQgaXMgb2sgKi8KKyAgICAgICAgLyogSFQgQ2FwYWJpbGl0aWVzIEluZm8gKi8KKyAgICAgICAgb2Zmc2V0ID0gemZNbUFkZEhUQ2FwYWJpbGl0eShkZXYsIGJ1Ziwgb2Zmc2V0KTsKKworICAgICAgICAvKiBFeHRlbmRlZCBIVCBDYXBhYmlsaXRpZXMgSW5mbyAqLworICAgICAgICBvZmZzZXQgPSB6Zk1tQWRkRXh0ZW5kZWRIVENhcGFiaWxpdHkoZGV2LCBidWYsIG9mZnNldCk7CisgICAgfQorCisgICAgaWYgKCB3ZC0+c3RhLmlic3NBZGRpdGlvbmFsSUVTaXplICkKKyAgICAgICAgb2Zmc2V0ID0gemZTdGFBZGRJYnNzQWRkaXRpb25hbElFKGRldiwgYnVmLCBvZmZzZXQpOworCisgICAgLyogMTIxMiA6IHdyaXRlIHRvIGJlYWNvbiBmaWZvICovCisgICAgLyogMTIyMSA6IHdyaXRlIHRvIHNoYXJlIG1lbW9yeSAqLworICAgIHpmSHBTZW5kQmVhY29uKGRldiwgYnVmLCBvZmZzZXQpOworCisgICAgLyogRnJlZSBiZWFjb24gYnVmZmVyICovCisgICAgLy96ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKK30KKwordm9pZCB6ZlN0YVNpZ25hbFN0YXRpc3RpYyh6ZGV2X3QqIGRldiwgdThfdCBTaWduYWxTdHJlbmd0aCwgdThfdCBTaWduYWxRdWFsaXR5KSAvL0NXWWFuZygrKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8qIEFkZCBZb3VyIENvZGUgdG8gRG8gV29ya3MgTGlrZSBNb3ZpbmcgQXZlcmFnZSBIZXJlICovCisgICAgd2QtPlNpZ25hbFN0cmVuZ3RoID0gKHdkLT5TaWduYWxTdHJlbmd0aCAqIDcgKyBTaWduYWxTdHJlbmd0aCAqIDMpLzEwOworICAgIHdkLT5TaWduYWxRdWFsaXR5ID0gKHdkLT5TaWduYWxRdWFsaXR5ICogNyArIFNpZ25hbFF1YWxpdHkgKiAzKS8xMDsKKworfQorCitzdHJ1Y3QgenNCc3NJbmZvKiB6ZlN0YUZpbmRCc3NJbmZvKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Ziwgc3RydWN0IHpzV2xhblByb2JlUnNwRnJhbWVIZWFkZXIgKnBQcm9iZVJzcEhlYWRlcikKK3sKKyAgICB1OF90ICAgIGk7CisgICAgdThfdCAgICBqOworICAgIHU4X3QgICAgazsKKyAgICB1OF90ICAgIGlzTWF0Y2hlZCwgbGVuZ3RoLCBjaGFubmVsOworICAgIHUxNl90ICAgb2Zmc2V0LCBmcmVxdWVuY3k7CisgICAgc3RydWN0IHpzQnNzSW5mbyogcEJzc0luZm87CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAoKHBCc3NJbmZvID0gd2QtPnN0YS5ic3NMaXN0LmhlYWQpID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBmb3IoIGk9MDsgaTx3ZC0+c3RhLmJzc0xpc3QuYnNzQ291bnQ7IGkrKyApCisgICAgeworICAgICAgICAvL3ptX2RlYnVnX21zZzIoImNoZWNrIHBCc3NJbmZvID0gIiwgcEJzc0luZm8pOworCisgICAgICAgIC8qIENoZWNrIEJTU0lEICovCisgICAgICAgIGZvciggaj0wOyBqPDY7IGorKyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggcEJzc0luZm8tPmJzc2lkW2pdICE9IHBQcm9iZVJzcEhlYWRlci0+YnNzaWRbal0gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKwkJLyogQ2hlY2sgU1NJRCAqLworICAgICAgICBpZiAoaiA9PSA2KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocFByb2JlUnNwSGVhZGVyLT5zc2lkWzFdIDw9IDMyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIGNvbXBhcmUgbGVuZ3RoIGFuZCBzc2lkICovCisgICAgICAgICAgICAgICAgaXNNYXRjaGVkID0gMTsKKwkJCQlpZigocFByb2JlUnNwSGVhZGVyLT5zc2lkWzFdICE9IDApICYmIChwQnNzSW5mby0+c3NpZFsxXSAhPSAwKSkKKwkJCQl7CisgICAgICAgICAgICAgICAgZm9yKCBrPTE7IGs8cFByb2JlUnNwSGVhZGVyLT5zc2lkWzFdICsgMTsgaysrICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICggcEJzc0luZm8tPnNzaWRba10gIT0gcFByb2JlUnNwSGVhZGVyLT5zc2lkW2tdICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaXNNYXRjaGVkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlzTWF0Y2hlZCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpc01hdGNoZWQgPSAwOworICAgICAgICB9CisKKyAgICAgICAgLyogQ2hlY2sgY2hhbm5lbCAqLworICAgICAgICAvKiBBZGQgY2hlY2sgY2hhbm5lbCB0byBzb2x2ZSB0aGUgYnVnICMzMTIyMiAqLworICAgICAgICBpZiAoaXNNYXRjaGVkKSB7CisgICAgICAgICAgICBpZiAoKG9mZnNldCA9IHpmRmluZEVsZW1lbnQoZGV2LCBidWYsIFpNX1dMQU5fRUlEX0RTKSkgIT0gMHhmZmZmKSB7CisgICAgICAgICAgICAgICAgaWYgKChsZW5ndGggPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMSkpID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhbm5lbCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHpmSHBJc0FsbG93ZWRDaGFubmVsKGRldiwgemZDaE51bVRvRnJlcShkZXYsIGNoYW5uZWwsIDApKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSAwOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZnJlcXVlbmN5ID0gemZDaE51bVRvRnJlcShkZXYsIGNoYW5uZWwsIDApOzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSB3ZC0+c3RhLmN1cnJlbnRGcmVxdWVuY3k7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmcmVxdWVuY3kgIT0gMCkgeworICAgICAgICAgICAgICAgIGlmICggKChmcmVxdWVuY3kgPiAzMDAwKSAmJiAocEJzc0luZm8tPmZyZXF1ZW5jeSA+IDMwMDApKQorICAgICAgICAgICAgICAgICAgICAgfHwgKChmcmVxdWVuY3kgPCAzMDAwKSAmJiAocEJzc0luZm8tPmZyZXF1ZW5jeSA8IDMwMDApKSApIHsKKyAgICAgICAgICAgICAgICAgICAgLyogcmVkdW5kYW50ICovCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHBCc3NJbmZvID0gcEJzc0luZm8tPm5leHQ7CisgICAgfQorCisgICAgaWYgKCBpID09IHdkLT5zdGEuYnNzTGlzdC5ic3NDb3VudCApCisgICAgeworICAgICAgICBwQnNzSW5mbyA9IE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIHBCc3NJbmZvOworfQorCit1OF90IHpmU3RhSW5pdEJzc0luZm8oemRldl90KiBkZXYsIHpidWZfdCogYnVmLAorICAgICAgICBzdHJ1Y3QgenNXbGFuUHJvYmVSc3BGcmFtZUhlYWRlciAqcFByb2JlUnNwSGVhZGVyLAorICAgICAgICBzdHJ1Y3QgenNCc3NJbmZvKiBwQnNzSW5mbywgc3RydWN0IHpzQWRkaXRpb25JbmZvKiBBZGRJbmZvLCB1OF90IHR5cGUpCit7CisgICAgdThfdCAgICBsZW5ndGgsIGNoYW5uZWwsIGlzNUc7CisgICAgdTE2X3QgICBpLCBvZmZzZXQ7CisgICAgdThfdCAgICBhcFFvc0luZm87CisgICAgdTE2X3QgICAgZWFjaElFbGVuZ3RoID0gMDsKKyAgICB1MTZfdCAgIGFjY3VtdWxhdGVMZW4gPSAwOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYgKCh0eXBlID09IDEpICYmICgocEJzc0luZm8tPmZsYWcgJiBaTV9CU1NfSU5GT19WQUxJRF9CSVQpICE9IDApKQorICAgIHsKKyAgICAgICAgZ290byB6bFVwZGF0ZVJzc2k7CisgICAgfQorCisgICAgLyogZ2V0IFNTSUQgKi8KKyAgICBpZiAoIChvZmZzZXQgPSB6ZkZpbmRFbGVtZW50KGRldiwgYnVmLCBaTV9XTEFOX0VJRF9TU0lEKSkgPT0gMHhmZmZmICkKKyAgICB7CisgICAgICAgIHptX2RlYnVnX21zZzAoIkVJRChTU0lEKSBub3QgZm91bmQiKTsKKyAgICAgICAgZ290byB6bEVycm9yOworICAgIH0KKworICAgIGxlbmd0aCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKTsKKworCXsKKwkJdThfdCBTaG93X0ZsYWcgPSAwOworCQl6ZndHZXRTaG93WmVyb0xlbmd0aFNTSUQoZGV2LCAmU2hvd19GbGFnKTsKKworCQlpZihTaG93X0ZsYWcpCisJCXsKKwkJCWlmIChsZW5ndGggPiBaTV9NQVhfU1NJRF9MRU5HVEggKQorCQkJeworCQkJCXptX2RlYnVnX21zZzAoIkVJRChTU0lEKSBpcyBpbnZhbGlkIik7CisJCQkJZ290byB6bEVycm9yOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworICAgIGlmICggbGVuZ3RoID09IDAgfHwgbGVuZ3RoID4gWk1fTUFYX1NTSURfTEVOR1RIICkKKyAgICB7CisgICAgICAgIHptX2RlYnVnX21zZzAoIkVJRChTU0lEKSBpcyBpbnZhbGlkIik7CisgICAgICAgIGdvdG8gemxFcnJvcjsKKyAgICB9CisKKwkJfQorCX0KKyAgICB6ZkNvcHlGcm9tUnhCdWZmZXIoZGV2LCBidWYsIHBCc3NJbmZvLT5zc2lkLCBvZmZzZXQsIGxlbmd0aCsyKTsKKworICAgIC8qIGdldCBEUyBwYXJhbWV0ZXIgKi8KKyAgICBpZiAoIChvZmZzZXQgPSB6ZkZpbmRFbGVtZW50KGRldiwgYnVmLCBaTV9XTEFOX0VJRF9EUykpICE9IDB4ZmZmZiApCisgICAgeworICAgICAgICBsZW5ndGggPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMSk7CisgICAgICAgIGlmICggbGVuZ3RoICE9IDEgKQorICAgICAgICB7CisgICAgICAgICAgICB6bV9tc2cwX21tKFpNX0xWXzAsICJBYm5vcm1hbCBEUyBQYXJhbSBTZXQgSUUiKTsKKyAgICAgICAgICAgIGdvdG8gemxFcnJvcjsKKyAgICAgICAgfQorICAgICAgICBjaGFubmVsID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzIpOworCisgICAgICAgIGlmICh6ZkhwSXNBbGxvd2VkQ2hhbm5lbChkZXYsIHpmQ2hOdW1Ub0ZyZXEoZGV2LCBjaGFubmVsLCAwKSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZ290byB6bEVycm9yMjsKKyAgICAgICAgfQorCisgICAgICAgIHBCc3NJbmZvLT5mcmVxdWVuY3kgPSB6ZkNoTnVtVG9GcmVxKGRldiwgY2hhbm5lbCwgMCk7IC8vIGF1dG8gY2hlY2sKKyAgICAgICAgcEJzc0luZm8tPmNoYW5uZWwgPSBjaGFubmVsOworCisKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogRFMgcGFyYW1ldGVyIG5vdCBmb3VuZCAqLworICAgICAgICBwQnNzSW5mby0+ZnJlcXVlbmN5ID0gd2QtPnN0YS5jdXJyZW50RnJlcXVlbmN5OworICAgICAgICBwQnNzSW5mby0+Y2hhbm5lbCA9IHpmQ2hGcmVxVG9OdW0od2QtPnN0YS5jdXJyZW50RnJlcXVlbmN5LCAmaXM1Ryk7CisgICAgfQorCisgICAgLyogaW5pdGlhbGl6ZSBzZWN1cml0eSB0eXBlICovCisgICAgcEJzc0luZm8tPnNlY3VyaXR5VHlwZSA9IFpNX1NFQ1VSSVRZX1RZUEVfTk9ORTsKKworICAgIC8qIGdldCBtYWNhZGRyICovCisgICAgZm9yKCBpPTA7IGk8NjsgaSsrICkKKyAgICB7CisgICAgICAgIHBCc3NJbmZvLT5tYWNhZGRyW2ldID0gcFByb2JlUnNwSGVhZGVyLT5zYVtpXTsKKyAgICB9CisKKyAgICAvKiBnZXQgYnNzaWQgKi8KKyAgICBmb3IoIGk9MDsgaTw2OyBpKysgKQorICAgIHsKKyAgICAgICAgcEJzc0luZm8tPmJzc2lkW2ldID0gcFByb2JlUnNwSGVhZGVyLT5ic3NpZFtpXTsKKyAgICB9CisKKyAgICAvKiBnZXQgdGltZXN0YW1wICovCisgICAgZm9yKCBpPTA7IGk8ODsgaSsrICkKKyAgICB7CisgICAgICAgIHBCc3NJbmZvLT50aW1lU3RhbXBbaV0gPSBwUHJvYmVSc3BIZWFkZXItPnRpbWVTdGFtcFtpXTsKKyAgICB9CisKKyAgICAvKiBnZXQgYmVhY29uIGludGVydmFsICovCisgICAgcEJzc0luZm8tPmJlYWNvbkludGVydmFsWzBdID0gcFByb2JlUnNwSGVhZGVyLT5iZWFjb25JbnRlcnZhbFswXTsKKyAgICBwQnNzSW5mby0+YmVhY29uSW50ZXJ2YWxbMV0gPSBwUHJvYmVSc3BIZWFkZXItPmJlYWNvbkludGVydmFsWzFdOworCisgICAgLyogZ2V0IGNhcGFiaWxpdHkgKi8KKyAgICBwQnNzSW5mby0+Y2FwYWJpbGl0eVswXSA9IHBQcm9iZVJzcEhlYWRlci0+Y2FwYWJpbGl0eVswXTsKKyAgICBwQnNzSW5mby0+Y2FwYWJpbGl0eVsxXSA9IHBQcm9iZVJzcEhlYWRlci0+Y2FwYWJpbGl0eVsxXTsKKworICAgIC8qIENvcHkgZnJhbWUgYm9keSAqLworICAgIG9mZnNldCA9IDM2OyAgICAgICAgICAgIC8vIENvcHkgZnJvbSB0aGUgc3RhcnQgb2YgdmFyaWFibGUgSUUKKyAgICBwQnNzSW5mby0+ZnJhbWVCb2R5c2l6ZSA9IHpmd0J1ZkdldFNpemUoZGV2LCBidWYpLW9mZnNldDsKKyAgICBpZiAocEJzc0luZm8tPmZyYW1lQm9keXNpemUgPiAoWk1fTUFYX1BST0JFX0ZSQU1FX0JPRFlfU0laRS0xKSkKKyAgICB7CisgICAgICAgIHBCc3NJbmZvLT5mcmFtZUJvZHlzaXplID0gWk1fTUFYX1BST0JFX0ZSQU1FX0JPRFlfU0laRS0xOworICAgIH0KKyAgICBhY2N1bXVsYXRlTGVuID0gMDsKKyAgICBkbworICAgIHsKKyAgICAgICAgZWFjaElFbGVuZ3RoID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0ICsgYWNjdW11bGF0ZUxlbisxKSArIDI7ICAvL0xlbisoRUlEK0RhdGEpCisKKyAgICAgICAgaWYgKCAoZWFjaElFbGVuZ3RoID49IDIpCisgICAgICAgICAgICAgJiYgKChhY2N1bXVsYXRlTGVuICsgZWFjaElFbGVuZ3RoKSA8PSBwQnNzSW5mby0+ZnJhbWVCb2R5c2l6ZSkgKQorICAgICAgICB7CisgICAgICAgICAgICB6ZkNvcHlGcm9tUnhCdWZmZXIoZGV2LCBidWYsIHBCc3NJbmZvLT5mcmFtZUJvZHkrYWNjdW11bGF0ZUxlbiwgb2Zmc2V0K2FjY3VtdWxhdGVMZW4sIGVhY2hJRWxlbmd0aCk7CisgICAgICAgICAgICBhY2N1bXVsYXRlTGVuKz0odTE2X3QpZWFjaElFbGVuZ3RoOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgem1fbXNnMF9tbShaTV9MVl8xLCAicHJvYmVyc3AgZnJhbWVCb2R5c2l6ZSBhYm5vcm1hbCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUoYWNjdW11bGF0ZUxlbiA8IHBCc3NJbmZvLT5mcmFtZUJvZHlzaXplKTsKKyAgICBwQnNzSW5mby0+ZnJhbWVCb2R5c2l6ZSA9IGFjY3VtdWxhdGVMZW47CisKKyAgICAvKiBnZXQgc3VwcG9ydGVkIHJhdGVzICovCisgICAgaWYgKCAob2Zmc2V0ID0gemZGaW5kRWxlbWVudChkZXYsIGJ1ZiwgWk1fV0xBTl9FSURfU1VQUE9SVF9SQVRFKSkgPT0gMHhmZmZmICkKKyAgICB7CisgICAgICAgIHptX2RlYnVnX21zZzAoIkVJRChzdXBwb3J0ZWQgcmF0ZXMpIG5vdCBmb3VuZCIpOworICAgICAgICBnb3RvIHpsRXJyb3I7CisgICAgfQorCisgICAgbGVuZ3RoID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzEpOworICAgIGlmICggbGVuZ3RoID09IDAgfHwgbGVuZ3RoID4gWk1fTUFYX1NVUFBfUkFURVNfSUVfU0laRSkKKyAgICB7CisgICAgICAgIHptX21zZzBfbW0oWk1fTFZfMCwgIlN1cHBvcnRlZCByYXRlcyBJRSBsZW5ndGggYWJub3JtYWwiKTsKKyAgICAgICAgZ290byB6bEVycm9yOworICAgIH0KKyAgICB6ZkNvcHlGcm9tUnhCdWZmZXIoZGV2LCBidWYsIHBCc3NJbmZvLT5zdXBwb3J0ZWRSYXRlcywgb2Zmc2V0LCBsZW5ndGgrMik7CisKKworCisgICAgLyogZ2V0IENvdW50cnkgaW5mb3JtYXRpb24gKi8KKyAgICBpZiAoIChvZmZzZXQgPSB6ZkZpbmRFbGVtZW50KGRldiwgYnVmLCBaTV9XTEFOX0VJRF9DT1VOVFJZKSkgIT0gMHhmZmZmICkKKyAgICB7CisgICAgICAgIGxlbmd0aCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKTsKKyAgICAgICAgaWYgKGxlbmd0aCA+IFpNX01BWF9DT1VOVFJZX0lORk9fU0laRSkKKyAgICAgICAgeworICAgICAgICAgICAgbGVuZ3RoID0gWk1fTUFYX0NPVU5UUllfSU5GT19TSVpFOworICAgICAgICB9CisgICAgICAgIHpmQ29weUZyb21SeEJ1ZmZlcihkZXYsIGJ1ZiwgcEJzc0luZm8tPmNvdW50cnlJbmZvLCBvZmZzZXQsIGxlbmd0aCsyKTsKKyAgICAgICAgLyogY2hlY2sgODAyLjExZCBzdXBwb3J0IGRhdGEgKi8KKyAgICAgICAgaWYgKHdkLT5zdGEuYjgwMl8xMUQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmSHBHZXRSZWd1bGF0aW9uVGFibGVmcm9tSVNPKGRldiwgKHU4X3QgKikmcEJzc0luZm8tPmNvdW50cnlJbmZvLCAzKTsKKyAgICAgICAgICAgIC8qIG9ubHkgc2V0IHJlZ3VsYXRvcnkgb25lIHRpbWUgKi8KKyAgICAgICAgICAgIHdkLT5zdGEuYjgwMl8xMUQgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgLyogZ2V0IEVSUCBpbmZvcm1hdGlvbiAqLworICAgIGlmICggKG9mZnNldCA9IHpmRmluZEVsZW1lbnQoZGV2LCBidWYsIFpNX1dMQU5fRUlEX0VSUCkpICE9IDB4ZmZmZiApCisgICAgeworICAgICAgICBwQnNzSW5mby0+ZXJwID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzIpOworICAgIH0KKworICAgIC8qIGdldCBleHRlbmRlZCBzdXBwb3J0ZWQgcmF0ZXMgKi8KKyAgICBpZiAoIChvZmZzZXQgPSB6ZkZpbmRFbGVtZW50KGRldiwgYnVmLCBaTV9XTEFOX0VJRF9FWFRFTkRFRF9SQVRFKSkgIT0gMHhmZmZmICkKKyAgICB7CisgICAgICAgIGxlbmd0aCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKTsKKyAgICAgICAgaWYgKGxlbmd0aCA+IFpNX01BWF9TVVBQX1JBVEVTX0lFX1NJWkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHptX21zZzBfbW0oWk1fTFZfMCwgIkV4dGVuZGVkIHJhdGVzIElFIGxlbmd0aCBhYm5vcm1hbCIpOworICAgICAgICAgICAgZ290byB6bEVycm9yOworICAgICAgICB9CisgICAgICAgIHpmQ29weUZyb21SeEJ1ZmZlcihkZXYsIGJ1ZiwgcEJzc0luZm8tPmV4dFN1cHBvcnRlZFJhdGVzLCBvZmZzZXQsIGxlbmd0aCsyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcEJzc0luZm8tPmV4dFN1cHBvcnRlZFJhdGVzWzBdID0gMDsKKyAgICAgICAgcEJzc0luZm8tPmV4dFN1cHBvcnRlZFJhdGVzWzFdID0gMDsKKyAgICB9CisKKyAgICAvKiBnZXQgV1BBIElFICovCisgICAgaWYgKCAob2Zmc2V0ID0gemZGaW5kRWxlbWVudChkZXYsIGJ1ZiwgWk1fV0xBTl9FSURfV1BBX0lFKSkgIT0gMHhmZmZmICkKKyAgICB7CisgICAgICAgIGxlbmd0aCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKTsKKyAgICAgICAgaWYgKGxlbmd0aCA+IFpNX01BWF9JRV9TSVpFKQorICAgICAgICB7CisgICAgICAgICAgICBsZW5ndGggPSBaTV9NQVhfSUVfU0laRTsKKyAgICAgICAgfQorICAgICAgICB6ZkNvcHlGcm9tUnhCdWZmZXIoZGV2LCBidWYsIHBCc3NJbmZvLT53cGFJZSwgb2Zmc2V0LCBsZW5ndGgrMik7CisgICAgICAgIHBCc3NJbmZvLT5zZWN1cml0eVR5cGUgPSBaTV9TRUNVUklUWV9UWVBFX1dQQTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcEJzc0luZm8tPndwYUllWzFdID0gMDsKKyAgICB9CisKKyAgICAvKiBnZXQgV1BTIElFICovCisgICAgaWYgKChvZmZzZXQgPSB6ZkZpbmRXaWZpRWxlbWVudChkZXYsIGJ1ZiwgNCwgMHhmZikpICE9IDB4ZmZmZikKKyAgICB7CisgICAgICAgIGxlbmd0aCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKTsKKyAgICAgICAgaWYgKGxlbmd0aCA+IFpNX01BWF9XUFNfSUVfU0laRSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IFpNX01BWF9XUFNfSUVfU0laRTsKKyAgICAgICAgfQorICAgICAgICB6ZkNvcHlGcm9tUnhCdWZmZXIoZGV2LCBidWYsIHBCc3NJbmZvLT53c2NJZSwgb2Zmc2V0LCBsZW5ndGgrMik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBCc3NJbmZvLT53c2NJZVsxXSA9IDA7CisgICAgfQorCisgICAgLyogZ2V0IFN1cGVyRyBJRSAqLworICAgIGlmICgob2Zmc2V0ID0gemZGaW5kU3VwZXJHRWxlbWVudChkZXYsIGJ1ZiwgWk1fV0xBTl9FSURfVkVORE9SX1BSSVZBVEUpKSAhPSAweGZmZmYpCisgICAgeworICAgICAgICBwQnNzSW5mby0+YXBDYXAgfD0gWk1fU3VwZXJHX0FQOworICAgIH0KKworICAgIC8qIGdldCBYUiBJRSAqLworICAgIGlmICgob2Zmc2V0ID0gemZGaW5kWFJFbGVtZW50KGRldiwgYnVmLCBaTV9XTEFOX0VJRF9WRU5ET1JfUFJJVkFURSkpICE9IDB4ZmZmZikKKyAgICB7CisgICAgICAgIHBCc3NJbmZvLT5hcENhcCB8PSBaTV9YUl9BUDsKKyAgICB9CisKKyAgICAvKiBnZXQgUlNOIElFICovCisgICAgaWYgKCAob2Zmc2V0ID0gemZGaW5kRWxlbWVudChkZXYsIGJ1ZiwgWk1fV0xBTl9FSURfUlNOX0lFKSkgIT0gMHhmZmZmICkKKyAgICB7CisgICAgICAgIGxlbmd0aCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKTsKKyAgICAgICAgaWYgKGxlbmd0aCA+IFpNX01BWF9JRV9TSVpFKQorICAgICAgICB7CisgICAgICAgICAgICBsZW5ndGggPSBaTV9NQVhfSUVfU0laRTsKKyAgICAgICAgfQorICAgICAgICB6ZkNvcHlGcm9tUnhCdWZmZXIoZGV2LCBidWYsIHBCc3NJbmZvLT5yc25JZSwgb2Zmc2V0LCBsZW5ndGgrMik7CisgICAgICAgIHBCc3NJbmZvLT5zZWN1cml0eVR5cGUgPSBaTV9TRUNVUklUWV9UWVBFX1dQQTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcEJzc0luZm8tPnJzbkllWzFdID0gMDsKKyAgICB9CisjaWZkZWYgWk1fRU5BQkxFX0NFTkMKKyAgICAvKiBnZXQgQ0VOQyBJRSAqLworICAgIGlmICggKG9mZnNldCA9IHpmRmluZEVsZW1lbnQoZGV2LCBidWYsIFpNX1dMQU5fRUlEX0NFTkNfSUUpKSAhPSAweGZmZmYgKQorICAgIHsKKyAgICAgICAgbGVuZ3RoID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzEpOworICAgICAgICBpZiAobGVuZ3RoID4gWk1fTUFYX0lFX1NJWkUgKQorICAgICAgICB7CisgICAgICAgICAgICBsZW5ndGggPSBaTV9NQVhfSUVfU0laRTsKKyAgICAgICAgfQorICAgICAgICB6ZkNvcHlGcm9tUnhCdWZmZXIoZGV2LCBidWYsIHBCc3NJbmZvLT5jZW5jSWUsIG9mZnNldCwgbGVuZ3RoKzIpOworICAgICAgICBwQnNzSW5mby0+c2VjdXJpdHlUeXBlID0gWk1fU0VDVVJJVFlfVFlQRV9DRU5DOworICAgICAgICBwQnNzSW5mby0+Y2FwYWJpbGl0eVswXSAmPSAweGZmZWY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBCc3NJbmZvLT5jZW5jSWVbMV0gPSAwOworICAgIH0KKyNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCisgICAgLyogZ2V0IFdNRSBQYXJhbWV0ZXIgSUUsIHByb2JlIHJzcCBtYXkgY29udGFpbiBXTUUgcGFyYW1ldGVyIGVsZW1lbnQgKi8KKyAgICAvL2lmICggd2QtPmJRb1NFbmFibGUgKQorICAgIHsKKyAgICAgICAgaWYgKChvZmZzZXQgPSB6ZkZpbmRXaWZpRWxlbWVudChkZXYsIGJ1ZiwgMiwgMSkpICE9IDB4ZmZmZikKKyAgICAgICAgeworICAgICAgICAgICAgYXBRb3NJbmZvID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzgpICYgMHg4MDsKKyAgICAgICAgICAgIHBCc3NJbmZvLT53bWVTdXBwb3J0ID0gMSB8IGFwUW9zSW5mbzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgob2Zmc2V0ID0gemZGaW5kV2lmaUVsZW1lbnQoZGV2LCBidWYsIDIsIDApKSAhPSAweGZmZmYpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFwUW9zSW5mbyA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs4KSAmIDB4ODA7CisgICAgICAgICAgICBwQnNzSW5mby0+d21lU3VwcG9ydCA9IDEgIHwgYXBRb3NJbmZvOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcEJzc0luZm8tPndtZVN1cHBvcnQgPSAwOworICAgICAgICB9CisgICAgfQorICAgIC8vQ1dZYW5nKCspCisgICAgaWYgKChvZmZzZXQgPSB6ZkZpbmRFbGVtZW50KGRldiwgYnVmLCBaTV9XTEFOX0VJRF9IVF9DQVBBQklMSVRZKSkgIT0gMHhmZmZmKQorICAgIHsKKyAgICAgICAgLyogMTFuIEFQICovCisgICAgICAgIHBCc3NJbmZvLT5FbmFibGVIVCA9IDE7CisgICAgICAgIGlmICh6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMSkgJiAweDAyKQorICAgICAgICB7CisgICAgICAgICAgICBwQnNzSW5mby0+ZW5hYmxlSFQ0MCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwQnNzSW5mby0+ZW5hYmxlSFQ0MCA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzEpICYgMHg0MCkKKyAgICAgICAgeworICAgICAgICAgICAgcEJzc0luZm8tPlNHNDAgPSAxOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcEJzc0luZm8tPlNHNDAgPSAwOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKChvZmZzZXQgPSB6ZkZpbmRFbGVtZW50KGRldiwgYnVmLCBaTV9XTEFOX1BSRU4yX0VJRF9IVENBUEFCSUxJVFkpKSAhPSAweGZmZmYpCisgICAgeworICAgICAgICAvKiAxMW4gQVAgKi8KKyAgICAgICAgcEJzc0luZm8tPkVuYWJsZUhUID0gMTsKKyAgICAgICAgcEJzc0luZm8tPmFwQ2FwIHw9IFpNX0FsbDExTl9BUDsKKyAgICAgICAgaWYgKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsyKSAmIDB4MDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBCc3NJbmZvLT5lbmFibGVIVDQwID0gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBCc3NJbmZvLT5lbmFibGVIVDQwID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMikgJiAweDQwKQorICAgICAgICB7CisgICAgICAgICAgICBwQnNzSW5mby0+U0c0MCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwQnNzSW5mby0+U0c0MCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcEJzc0luZm8tPkVuYWJsZUhUID0gMDsKKyAgICB9CisgICAgLyogSFQgaW5mb3JtYXRpb24gKi8KKyAgICBpZiAoKG9mZnNldCA9IHpmRmluZEVsZW1lbnQoZGV2LCBidWYsIFpNX1dMQU5fRUlEX0VYVEVOREVEX0hUX0NBUEFCSUxJVFkpKSAhPSAweGZmZmYpCisgICAgeworICAgICAgICAvKiBhdGhlcm9zIHByZSBuICovCisgICAgICAgIHBCc3NJbmZvLT5leHRDaE9mZnNldCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsyKSAmIDB4MDM7CisgICAgfQorICAgIGVsc2UgaWYgKChvZmZzZXQgPSB6ZkZpbmRFbGVtZW50KGRldiwgYnVmLCBaTV9XTEFOX1BSRU4yX0VJRF9IVElORk9STUFUSU9OKSkgIT0gMHhmZmZmKQorICAgIHsKKyAgICAgICAgLyogcHJlIG4gMi4wIHN0YW5kYXJkICovCisgICAgICAgIHBCc3NJbmZvLT5leHRDaE9mZnNldCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCszKSAmIDB4MDM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBCc3NJbmZvLT5leHRDaE9mZnNldCA9IDA7CisgICAgfQorCisgICAgaWYgKCAocEJzc0luZm8tPmVuYWJsZUhUNDAgPT0gMSkKKyAgICAgICAgICYmICgocEJzc0luZm8tPmV4dENoT2Zmc2V0ICE9IDEpICYmIChwQnNzSW5mby0+ZXh0Q2hPZmZzZXQgIT0gMykpICkKKyAgICB7CisgICAgICAgIHBCc3NJbmZvLT5lbmFibGVIVDQwID0gMDsKKyAgICB9CisKKyAgICBpZiAocEJzc0luZm8tPmVuYWJsZUhUNDAgPT0gMSkKKyAgICB7CisgICAgICAgIGlmICh6ZkhwSXNBbGxvd2VkQ2hhbm5lbChkZXYsIHBCc3NJbmZvLT5mcmVxdWVuY3krKChwQnNzSW5mby0+ZXh0Q2hPZmZzZXQ9PTEpPzIwOi0yMCkpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIGlmIGV4dGVuc2lvbiBjaGFubmVsIGlzIG5vdCBhbiBhbGxvd2VkIGNoYW5uZWwsIHRyZWF0IEFQIGFzIG5vbi1IVCBtb2RlICovCisgICAgICAgICAgICBwQnNzSW5mby0+RW5hYmxlSFQgPSAwOworICAgICAgICAgICAgcEJzc0luZm8tPmVuYWJsZUhUNDAgPSAwOworICAgICAgICAgICAgcEJzc0luZm8tPmV4dENoT2Zmc2V0ID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGdldCBBVEggRXh0ZW5kZWQgQ2FwYWJpbGl0eSAqLworICAgIGlmICggKChvZmZzZXQgPSB6ZkZpbmRFbGVtZW50KGRldiwgYnVmLCBaTV9XTEFOX0VJRF9FWFRFTkRFRF9IVF9DQVBBQklMSVRZKSkgIT0gMHhmZmZmKSYmCisgICAgICAgICgob2Zmc2V0ID0gemZGaW5kQnJkY21NcnZsUmxua0V4dENhcChkZXYsIGJ1ZikpID09IDB4ZmZmZikpCisKKyAgICB7CisgICAgICAgIHBCc3NJbmZvLT5hdGhPd2xBcCA9IDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBCc3NJbmZvLT5hdGhPd2xBcCA9IDA7CisgICAgfQorCisgICAgLyogZ2V0IEJyb2FkY29tIEV4dGVuZGVkIENhcGFiaWxpdHkgKi8KKyAgICBpZiAoIChwQnNzSW5mby0+RW5hYmxlSFQgPT0gMSkgLy8oKG9mZnNldCA9IHpmRmluZEVsZW1lbnQoZGV2LCBidWYsIFpNX1dMQU5fRUlEX0VYVEVOREVEX0hUX0NBUEFCSUxJVFkpKSAhPSAweGZmZmYpCisgICAgICAgICAmJiAoKG9mZnNldCA9IHpmRmluZEJyb2FkY29tRXh0Q2FwKGRldiwgYnVmKSkgIT0gMHhmZmZmKSApCisgICAgeworICAgICAgICBwQnNzSW5mby0+YnJvYWRjb21IVEFwID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcEJzc0luZm8tPmJyb2FkY29tSFRBcCA9IDA7CisgICAgfQorCisgICAgLyogZ2V0IE1hcnZlbCBFeHRlbmRlZCBDYXBhYmlsaXR5ICovCisgICAgaWYgKChvZmZzZXQgPSB6ZkZpbmRNYXJ2ZWxFeHRDYXAoZGV2LCBidWYpKSAhPSAweGZmZmYpCisgICAgeworICAgICAgICBwQnNzSW5mby0+bWFydmVsQXAgPSAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwQnNzSW5mby0+bWFydmVsQXAgPSAwOworICAgIH0KKworICAgIC8qIGdldCBBVElNIHdpbmRvdyAqLworICAgIGlmICggKG9mZnNldCA9IHpmRmluZEVsZW1lbnQoZGV2LCBidWYsIFpNX1dMQU5fRUlEX0lCU1MpKSAhPSAweGZmZmYgKQorICAgIHsKKyAgICAgICAgcEJzc0luZm8tPmF0aW1XaW5kb3cgPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLG9mZnNldCsyKTsKKyAgICB9CisKKyAgICAvKiBGaXQgZm9yIHN1cHBvcnQgbW9kZSAqLworICAgIGlmIChwQnNzSW5mby0+ZnJlcXVlbmN5ID4gMzAwMCkgeworICAgICAgICBpZiAod2QtPnN1cHBvcnRNb2RlICYgWk1fV0lSRUxFU1NfTU9ERV81X04pIHsKKyNpZiAwCisgICAgICAgICAgICBpZiAod2QtPnN1cHBvcnRNb2RlICYgWk1fV0lSRUxFU1NfTU9ERV81XzU0KSB7CisgICAgICAgICAgICAgICAgLyogc3VwcG9ydCBtb2RlOiBhLCBuICovCisgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBzdXBwb3J0IG1vZGU6IG4gKi8KKyAgICAgICAgICAgICAgICAvKiByZWplY3Qgbm9uLW4gYnNzIGluZm8gKi8KKyAgICAgICAgICAgICAgICBpZiAoIXBCc3NJbmZvLT5FbmFibGVIVCkgeworICAgICAgICAgICAgICAgICAgICBnb3RvIHpsRXJyb3IyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHdkLT5zdXBwb3J0TW9kZSAmIFpNX1dJUkVMRVNTX01PREVfNV81NCkgeworICAgICAgICAgICAgICAgIC8qIHN1cHBvcnQgbW9kZTogYSAqLworICAgICAgICAgICAgICAgIC8qIGRlbGV0ZSBuIG1vZGUgaW5mb3JtYXRpb24gKi8KKyAgICAgICAgICAgICAgICBwQnNzSW5mby0+RW5hYmxlSFQgPSAwOworICAgICAgICAgICAgICAgIHBCc3NJbmZvLT5lbmFibGVIVDQwID0gMDsKKyAgICAgICAgICAgICAgICBwQnNzSW5mby0+YXBDYXAgJj0gKH5aTV9BbGwxMU5fQVApOworICAgICAgICAgICAgICAgIHBCc3NJbmZvLT5leHRDaE9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgcEJzc0luZm8tPmZyYW1lQm9keXNpemUgPSB6ZlJlbW92ZUVsZW1lbnQoZGV2LCBwQnNzSW5mby0+ZnJhbWVCb2R5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCc3NJbmZvLT5mcmFtZUJvZHlzaXplLCBaTV9XTEFOX0VJRF9IVF9DQVBBQklMSVRZKTsKKyAgICAgICAgICAgICAgICBwQnNzSW5mby0+ZnJhbWVCb2R5c2l6ZSA9IHpmUmVtb3ZlRWxlbWVudChkZXYsIHBCc3NJbmZvLT5mcmFtZUJvZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJzc0luZm8tPmZyYW1lQm9keXNpemUsIFpNX1dMQU5fUFJFTjJfRUlEX0hUQ0FQQUJJTElUWSk7CisgICAgICAgICAgICAgICAgcEJzc0luZm8tPmZyYW1lQm9keXNpemUgPSB6ZlJlbW92ZUVsZW1lbnQoZGV2LCBwQnNzSW5mby0+ZnJhbWVCb2R5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCc3NJbmZvLT5mcmFtZUJvZHlzaXplLCBaTV9XTEFOX0VJRF9FWFRFTkRFRF9IVF9DQVBBQklMSVRZKTsKKyAgICAgICAgICAgICAgICBwQnNzSW5mby0+ZnJhbWVCb2R5c2l6ZSA9IHpmUmVtb3ZlRWxlbWVudChkZXYsIHBCc3NJbmZvLT5mcmFtZUJvZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJzc0luZm8tPmZyYW1lQm9keXNpemUsIFpNX1dMQU5fUFJFTjJfRUlEX0hUSU5GT1JNQVRJT04pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBzdXBwb3J0IG1vZGU6IG5vbmUgKi8KKyAgICAgICAgICAgICAgICBnb3RvIHpsRXJyb3IyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHdkLT5zdXBwb3J0TW9kZSAmIFpNX1dJUkVMRVNTX01PREVfMjRfTikgeworI2lmIDAKKyAgICAgICAgICAgIGlmICh3ZC0+c3VwcG9ydE1vZGUgJiBaTV9XSVJFTEVTU19NT0RFXzI0XzU0KSB7CisgICAgICAgICAgICAgICAgaWYgKHdkLT5zdXBwb3J0TW9kZSAmIFpNX1dJUkVMRVNTX01PREVfMjRfMTEpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogc3VwcG9ydCBtb2RlOiBiLCBnLCBuICovCisgICAgICAgICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvKiBzdXBwb3J0IG1vZGU6IGcsIG4gKi8KKyAgICAgICAgICAgICAgICAgICAgLyogcmVqZWN0IGItb25seSBic3MgaW5mbyAqLworICAgICAgICAgICAgICAgICAgICBpZiAoICghcEJzc0luZm8tPkVuYWJsZUhUKQorICAgICAgICAgICAgICAgICAgICAgICAgICYmIChwQnNzSW5mby0+ZXh0U3VwcG9ydGVkUmF0ZXNbMV0gPT0gMCkgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgZ290byB6bEVycm9yMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHdkLT5zdXBwb3J0TW9kZSAmIFpNX1dJUkVMRVNTX01PREVfMjRfMTEpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogc3VwcG9ydCBtb2RlOiBiLCBuICovCisgICAgICAgICAgICAgICAgICAgIC8qIDEuIHJlamVjdCBnLW9ubHkgYnNzIGluZm8KKyAgICAgICAgICAgICAgICAgICAgICogMi4gaWYgbm9uIGctb25seSwgZGVsZXRlIGcgbW9kZSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhcEJzc0luZm8tPkVuYWJsZUhUICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCB6ZklzR09ubHlNb2RlKGRldiwgcEJzc0luZm8tPmZyZXF1ZW5jeSwgcEJzc0luZm8tPnN1cHBvcnRlZFJhdGVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB6ZklzR09ubHlNb2RlKGRldiwgcEJzc0luZm8tPmZyZXF1ZW5jeSwgcEJzc0luZm8tPmV4dFN1cHBvcnRlZFJhdGVzKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHpsRXJyb3IyOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZkdhdGhlckJNb2RlKGRldiwgcEJzc0luZm8tPnN1cHBvcnRlZFJhdGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJzc0luZm8tPmV4dFN1cHBvcnRlZFJhdGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQnNzSW5mby0+ZXJwID0gMDsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCc3NJbmZvLT5mcmFtZUJvZHlzaXplID0gemZSZW1vdmVFbGVtZW50KGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJzc0luZm8tPmZyYW1lQm9keSwgcEJzc0luZm8tPmZyYW1lQm9keXNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpNX1dMQU5fRUlEX0VSUCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJzc0luZm8tPmZyYW1lQm9keXNpemUgPSB6ZlJlbW92ZUVsZW1lbnQoZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQnNzSW5mby0+ZnJhbWVCb2R5LCBwQnNzSW5mby0+ZnJhbWVCb2R5c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWk1fV0xBTl9FSURfRVhURU5ERURfUkFURSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQnNzSW5mby0+ZnJhbWVCb2R5c2l6ZSA9IHpmVXBkYXRlRWxlbWVudChkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCc3NJbmZvLT5mcmFtZUJvZHksIHBCc3NJbmZvLT5mcmFtZUJvZHlzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQnNzSW5mby0+c3VwcG9ydGVkUmF0ZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLyogc3VwcG9ydCBtb2RlOiBuICovCisgICAgICAgICAgICAgICAgICAgIC8qIHJlamVjdCBub24tbiBic3MgaW5mbyAqLworICAgICAgICAgICAgICAgICAgICBpZiAoIXBCc3NJbmZvLT5FbmFibGVIVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byB6bEVycm9yMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogZGVsZXRlIG4gbW9kZSBpbmZvcm1hdGlvbiAqLworICAgICAgICAgICAgcEJzc0luZm8tPkVuYWJsZUhUID0gMDsKKyAgICAgICAgICAgIHBCc3NJbmZvLT5lbmFibGVIVDQwID0gMDsKKyAgICAgICAgICAgIHBCc3NJbmZvLT5hcENhcCAmPSAoflpNX0FsbDExTl9BUCk7CisgICAgICAgICAgICBwQnNzSW5mby0+ZXh0Q2hPZmZzZXQgPSAwOworICAgICAgICAgICAgcEJzc0luZm8tPmZyYW1lQm9keXNpemUgPSB6ZlJlbW92ZUVsZW1lbnQoZGV2LCBwQnNzSW5mby0+ZnJhbWVCb2R5LAorICAgICAgICAgICAgICAgICAgICAgICAgcEJzc0luZm8tPmZyYW1lQm9keXNpemUsIFpNX1dMQU5fRUlEX0hUX0NBUEFCSUxJVFkpOworICAgICAgICAgICAgcEJzc0luZm8tPmZyYW1lQm9keXNpemUgPSB6ZlJlbW92ZUVsZW1lbnQoZGV2LCBwQnNzSW5mby0+ZnJhbWVCb2R5LAorICAgICAgICAgICAgICAgICAgICAgICAgcEJzc0luZm8tPmZyYW1lQm9keXNpemUsIFpNX1dMQU5fUFJFTjJfRUlEX0hUQ0FQQUJJTElUWSk7CisgICAgICAgICAgICBwQnNzSW5mby0+ZnJhbWVCb2R5c2l6ZSA9IHpmUmVtb3ZlRWxlbWVudChkZXYsIHBCc3NJbmZvLT5mcmFtZUJvZHksCisgICAgICAgICAgICAgICAgICAgICAgICBwQnNzSW5mby0+ZnJhbWVCb2R5c2l6ZSwgWk1fV0xBTl9FSURfRVhURU5ERURfSFRfQ0FQQUJJTElUWSk7CisgICAgICAgICAgICBwQnNzSW5mby0+ZnJhbWVCb2R5c2l6ZSA9IHpmUmVtb3ZlRWxlbWVudChkZXYsIHBCc3NJbmZvLT5mcmFtZUJvZHksCisgICAgICAgICAgICAgICAgICAgICAgICBwQnNzSW5mby0+ZnJhbWVCb2R5c2l6ZSwgWk1fV0xBTl9QUkVOMl9FSURfSFRJTkZPUk1BVElPTik7CisKKyAgICAgICAgICAgIGlmICh3ZC0+c3VwcG9ydE1vZGUgJiBaTV9XSVJFTEVTU19NT0RFXzI0XzU0KSB7CisjaWYgMAorICAgICAgICAgICAgICAgIGlmICh3ZC0+c3VwcG9ydE1vZGUgJiBaTV9XSVJFTEVTU19NT0RFXzI0XzExKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIHN1cHBvcnQgbW9kZTogYiwgZyAqLworICAgICAgICAgICAgICAgICAgICAvKiBkZWxldGUgbiBtb2RlIGluZm9ybWF0aW9uICovCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLyogc3VwcG9ydCBtb2RlOiBnICovCisgICAgICAgICAgICAgICAgICAgIC8qIGRlbGV0ZSBuIG1vZGUgaW5mb3JtYXRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgLyogcmVqZWN0IGItb25seSBic3MgaW5mbyAqLworICAgICAgICAgICAgICAgICAgICBpZiAocEJzc0luZm8tPmV4dFN1cHBvcnRlZFJhdGVzWzFdID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHpsRXJyb3IyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh3ZC0+c3VwcG9ydE1vZGUgJiBaTV9XSVJFTEVTU19NT0RFXzI0XzExKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIHN1cHBvcnQgbW9kZTogYiAqLworICAgICAgICAgICAgICAgICAgICAvKiBkZWxldGUgbiBtb2RlIGluZm9ybWF0aW9uICovCisgICAgICAgICAgICAgICAgICAgIGlmICggemZJc0dPbmx5TW9kZShkZXYsIHBCc3NJbmZvLT5mcmVxdWVuY3ksIHBCc3NJbmZvLT5zdXBwb3J0ZWRSYXRlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCB6ZklzR09ubHlNb2RlKGRldiwgcEJzc0luZm8tPmZyZXF1ZW5jeSwgcEJzc0luZm8tPmV4dFN1cHBvcnRlZFJhdGVzKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gemxFcnJvcjI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB6ZkdhdGhlckJNb2RlKGRldiwgcEJzc0luZm8tPnN1cHBvcnRlZFJhdGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJzc0luZm8tPmV4dFN1cHBvcnRlZFJhdGVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBCc3NJbmZvLT5lcnAgPSAwOworCisgICAgICAgICAgICAgICAgICAgICAgICBwQnNzSW5mby0+ZnJhbWVCb2R5c2l6ZSA9IHpmUmVtb3ZlRWxlbWVudChkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJzc0luZm8tPmZyYW1lQm9keSwgcEJzc0luZm8tPmZyYW1lQm9keXNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWk1fV0xBTl9FSURfRVJQKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBCc3NJbmZvLT5mcmFtZUJvZHlzaXplID0gemZSZW1vdmVFbGVtZW50KGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQnNzSW5mby0+ZnJhbWVCb2R5LCBwQnNzSW5mby0+ZnJhbWVCb2R5c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTV9XTEFOX0VJRF9FWFRFTkRFRF9SQVRFKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgcEJzc0luZm8tPmZyYW1lQm9keXNpemUgPSB6ZlVwZGF0ZUVsZW1lbnQoZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCc3NJbmZvLT5mcmFtZUJvZHksIHBCc3NJbmZvLT5mcmFtZUJvZHlzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCc3NJbmZvLT5zdXBwb3J0ZWRSYXRlcyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvKiBzdXBwb3J0IG1vZGU6IG5vbmUgKi8KKyAgICAgICAgICAgICAgICAgICAgZ290byB6bEVycm9yMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwQnNzSW5mby0+ZmxhZyB8PSBaTV9CU1NfSU5GT19WQUxJRF9CSVQ7CisKK3psVXBkYXRlUnNzaToKKyAgICAvKiBVcGRhdGUgVGltZXIgaW5mb3JtYXRpb24gKi8KKyAgICBwQnNzSW5mby0+dGljayA9IHdkLT50aWNrOworCisgICAgLyogVXBkYXRlIEVSUCBpbmZvcm1hdGlvbiAqLworICAgIGlmICggKG9mZnNldCA9IHpmRmluZEVsZW1lbnQoZGV2LCBidWYsIFpNX1dMQU5fRUlEX0VSUCkpICE9IDB4ZmZmZiApCisgICAgeworICAgICAgICBwQnNzSW5mby0+ZXJwID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzIpOworICAgIH0KKworICAgIGlmKCAoczhfdClwQnNzSW5mby0+c2lnbmFsU3RyZW5ndGggPCAoczhfdClBZGRJbmZvLT5UYWlsLkRhdGEuU2lnbmFsU3RyZW5ndGgxICkKKyAgICB7CisgICAgICAgIC8qIFVwZGF0ZSBzaWduYWwgc3RyZW5ndGggKi8KKyAgICAgICAgcEJzc0luZm8tPnNpZ25hbFN0cmVuZ3RoID0gKHU4X3QpQWRkSW5mby0+VGFpbC5EYXRhLlNpZ25hbFN0cmVuZ3RoMTsKKyAgICAgICAgLyogVXBkYXRlIHNpZ25hbCBxdWFsaXR5ICovCisgICAgICAgIHBCc3NJbmZvLT5zaWduYWxRdWFsaXR5ID0gKHU4X3QpKEFkZEluZm8tPlRhaWwuRGF0YS5TaWduYWxTdHJlbmd0aDEgKiAyKTsKKworICAgICAgICAvKiBVcGRhdGUgdGhlIHNvcnRpbmcgdmFsdWUgICovCisgICAgICAgIHBCc3NJbmZvLT5zb3J0VmFsdWUgPSB6ZkNvbXB1dGVCc3NJbmZvV2VpZ2h0VmFsdWUoZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocEJzc0luZm8tPnN1cHBvcnRlZFJhdGVzWzZdICsgcEJzc0luZm8tPmV4dFN1cHBvcnRlZFJhdGVzWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJzc0luZm8tPkVuYWJsZUhULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQnNzSW5mby0+ZW5hYmxlSFQ0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJzc0luZm8tPnNpZ25hbFN0cmVuZ3RoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKworemxFcnJvcjoKKworICAgIHJldHVybiAxOworCit6bEVycm9yMjoKKworICAgIHJldHVybiAyOworfQorCit2b2lkIHpmU3RhUHJvY2Vzc0JlYWNvbih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHN0cnVjdCB6c0FkZGl0aW9uSW5mbyogQWRkSW5mbykgLy9DV1lhbmcobSkKK3sKKyAgICAvKiBQYXJzZSBUSU0gYW5kIHNlbmQgUFMtUE9MTCBpbiBwb3dlciBzYXZpbmcgbW9kZSAqLworICAgIHN0cnVjdCB6c1dsYW5CZWFjb25GcmFtZUhlYWRlciogIHBCZWFjb25IZWFkZXI7CisgICAgc3RydWN0IHpzQnNzSW5mbyogcEJzc0luZm87CisgICAgdThfdCAgIHBCdWZbc2l6ZW9mKHN0cnVjdCB6c1dsYW5CZWFjb25GcmFtZUhlYWRlcildOworICAgIHU4X3QgICBic3NpZFs2XTsKKyAgICBpbnQgICAgcmVzOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIC8qIHN0YSByb3V0aW5lIGpvYnMgKi8KKyAgICB6ZlN0YVByb3RFcnBNb25pdG9yKGRldiwgYnVmKTsgIC8qIGNoZWNrIHByb3RlY3Rpb24gbW9kZSAqLworCisgICAgaWYgKHpmU3RhSXNDb25uZWN0ZWQoZGV2KSkKKyAgICB7CisgICAgICAgIFpNX01BQ19XT1JEX1RPX0JZVEUod2QtPnN0YS5ic3NpZCwgYnNzaWQpOworCisgICAgICAgIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIHpmUnhCdWZmZXJFcXVhbFRvU3RyKGRldiwgYnVmLCBic3NpZCwgWk1fV0xBTl9IRUFERVJfQTJfT0ZGU0VULCA2KSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZQb3dlclNhdmluZ01nclByb2Nlc3NCZWFjb24oZGV2LCBidWYpOworICAgICAgICAgICAgICAgIHpmU3RhVXBkYXRlV21lUGFyYW1ldGVyKGRldiwgYnVmKTsKKyAgICAgICAgICAgICAgICBpZiAod2QtPnN0YS5ERlNFbmFibGUpCisgICAgICAgICAgICAgICAgICAgIHpmU3RhVXBkYXRlRG90MTFIREZTKGRldiwgYnVmKTsKKyAgICAgICAgICAgICAgICBpZiAod2QtPnN0YS5UUENFbmFibGUpCisgICAgICAgICAgICAgICAgICAgIHpmU3RhVXBkYXRlRG90MTFIVFBDKGRldiwgYnVmKTsKKyAgICAgICAgICAgICAgICAvKiB1cGRhdGUgc2lnbmFsIHN0cmVuZ3RoIGFuZCBzaWduYWwgcXVhbGl0eSAqLworICAgICAgICAgICAgICAgIHpmU3RhU2lnbmFsU3RhdGlzdGljKGRldiwgQWRkSW5mby0+VGFpbC5EYXRhLlNpZ25hbFN0cmVuZ3RoMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFkZEluZm8tPlRhaWwuRGF0YS5TaWduYWxRdWFsaXR5KTsgLy9DV1lhbmcoKykKKyAgICAgICAgICAgICAgICB3ZC0+c3RhLnJ4QmVhY29uQ291bnQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfSUJTUyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggemZSeEJ1ZmZlckVxdWFsVG9TdHIoZGV2LCBidWYsIGJzc2lkLCBaTV9XTEFOX0hFQURFUl9BM19PRkZTRVQsIDYpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgcmVzOworICAgICAgICAgICAgICAgIHN0cnVjdCB6c1BhcnRuZXJOb3RpZnlFdmVudCBldmVudDsKKworICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIjIwMDcwOTE2IFJlY2VpdmUgb3Bwb3NpdGUgQmVhY29uISIpOworICAgICAgICAgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5pYnNzUmVjZWl2ZUJlYWNvbkNvdW50Kys7CisgICAgICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICAgICAgICAgIHJlcyA9IHpmU3RhU2V0T3Bwb3NpdGVJbmZvRnJvbVJ4QnVmKGRldiwgYnVmKTsKKyAgICAgICAgICAgICAgICBpZiAoIHJlcyA9PSAwICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5ldyBwZWVyIHN0YXRpb24gZm91bmQuIE5vdGlmeSB0aGUgd3JhcHBlciBub3cKKyAgICAgICAgICAgICAgICAgICAgemZJbml0UGFydG5lck5vdGlmeUV2ZW50KGRldiwgYnVmLCAmZXZlbnQpOworICAgICAgICAgICAgICAgICAgICBpZiAod2QtPnpmY2JJYnNzUGFydG5lck5vdGlmeSAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+emZjYklic3NQYXJ0bmVyTm90aWZ5KGRldiwgMSwgJmV2ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiB1cGRhdGUgc2lnbmFsIHN0cmVuZ3RoIGFuZCBzaWduYWwgcXVhbGl0eSAqLworICAgICAgICAgICAgICAgIHpmU3RhU2lnbmFsU3RhdGlzdGljKGRldiwgQWRkSW5mby0+VGFpbC5EYXRhLlNpZ25hbFN0cmVuZ3RoMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFkZEluZm8tPlRhaWwuRGF0YS5TaWduYWxRdWFsaXR5KTsgLy9DV1lhbmcoKykKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vZWxzZSBpZiAoIHdkLT5zdGEuaWJzc1BhcnRuZXJTdGF0dXMgPT0gWk1fSUJTU19QQVJUTkVSX0xPU1QgKQorICAgICAgICAgICAgLy8gV2h5IGRvZXMgdGhpcyBoYXBwZW4gaW4gSUJTUz8/IFRoZSBpbXBhY3Qgb2YgVmlzdGEgc2luY2UKKyAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gdGVsbCBpdCB0aGUgQlNTSUQKKyNpZiAwCisgICAgICAgICAgICBlbHNlIGlmICggd2QtPnN0YS5vcHBvc2l0ZUNvdW50ID09IDAgKQorICAgICAgICAgICAgeyAgIC8qIElCU1MgbWVyZ2UgaWYgU1NJRCBtYXRjaGVkICovCisgICAgICAgICAgICAgICAgaWYgKCAob2Zmc2V0ID0gemZGaW5kRWxlbWVudChkZXYsIGJ1ZiwgWk1fV0xBTl9FSURfU1NJRCkpICE9IDB4ZmZmZiApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoICh3ZC0+c3RhLnNzaWRMZW4gPT0gem13X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzEpKSYmCisgICAgICAgICAgICAgICAgICAgICAgICAgKHpmUnhCdWZmZXJFcXVhbFRvU3RyKGRldiwgYnVmLCB3ZC0+c3RhLnNzaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCsyLCB3ZC0+c3RhLnNzaWRMZW4pKSApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdHlJbmZvID0gem13X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMzQpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGNhcGFiaWxpdHlJbmZvICYgWk1fQklUXzEgKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggKHdkLT5zdGEuY2FwYWJpbGl0eVswXSAmIFpNX0JJVF80KSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhcGFiaWxpdHlJbmZvICYgWk1fQklUXzQpICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIklCU1MgbWVyZ2UiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemZDb3B5RnJvbVJ4QnVmZmVyKGRldiwgYnVmLCBic3NpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpNX1dMQU5fSEVBREVSX0EzX09GRlNFVCwgNik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmVXBkYXRlQnNzaWQoZGV2LCBic3NpZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiByZXR1cm4gaWYgbm90IGNoYW5uZWwgc2NhbiAqLworICAgIGlmICggIXdkLT5zdGEuYkNoYW5uZWxTY2FuICkKKyAgICB7CisgICAgICAgIGdvdG8gemxSZXR1cm47CisgICAgfQorCisgICAgemZDb3B5RnJvbVJ4QnVmZmVyKGRldiwgYnVmLCBwQnVmLCAwLCBzaXplb2Yoc3RydWN0IHpzV2xhbkJlYWNvbkZyYW1lSGVhZGVyKSk7CisgICAgcEJlYWNvbkhlYWRlciA9IChzdHJ1Y3QgenNXbGFuQmVhY29uRnJhbWVIZWFkZXIqKSBwQnVmOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIC8vem1fZGVidWdfbXNnMSgiYnNzIGNvdW50ID0gIiwgd2QtPnN0YS5ic3NMaXN0LmJzc0NvdW50KTsKKworICAgIHBCc3NJbmZvID0gemZTdGFGaW5kQnNzSW5mbyhkZXYsIGJ1ZiwgcEJlYWNvbkhlYWRlcik7CisKKyAgICBpZiAoIHBCc3NJbmZvID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgLyogQWxsb2NhdGUgYSBuZXcgZW50cnkgaWYgQlNTIG5vdCBpbiB0aGUgc2NhbiBsaXN0ICovCisgICAgICAgIHBCc3NJbmZvID0gemZCc3NJbmZvQWxsb2NhdGUoZGV2KTsKKyAgICAgICAgaWYgKHBCc3NJbmZvICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcyA9IHpmU3RhSW5pdEJzc0luZm8oZGV2LCBidWYsIHBCZWFjb25IZWFkZXIsIHBCc3NJbmZvLCBBZGRJbmZvLCAwKTsKKyAgICAgICAgICAgIC8vemZEdW1wU1NJRChwQnNzSW5mby0+c3NpZFsxXSwgJihwQnNzSW5mby0+c3NpZFsyXSkpOworICAgICAgICAgICAgaWYgKCByZXMgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZCc3NJbmZvRnJlZShkZXYsIHBCc3NJbmZvKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6ZkJzc0luZm9JbnNlcnRUb0xpc3QoZGV2LCBwQnNzSW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVzID0gemZTdGFJbml0QnNzSW5mbyhkZXYsIGJ1ZiwgcEJlYWNvbkhlYWRlciwgcEJzc0luZm8sIEFkZEluZm8sIDEpOworICAgICAgICBpZiAocmVzID09IDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmQnNzSW5mb1JlbW92ZUZyb21MaXN0KGRldiwgcEJzc0luZm8pOworICAgICAgICAgICAgemZCc3NJbmZvRnJlZShkZXYsIHBCc3NJbmZvKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfSUJTUyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpZHg7CisKKyAgICAgICAgICAgIC8vIEl0IHdvdWxkIHJlc2V0IHRoZSBhbGl2ZSBjb3VudGVyIGlmIHRoZSBwZWVyIHN0YXRpb24gaXMgZm91bmQhCisgICAgICAgICAgICB6ZlN0YUZpbmRGcmVlT3Bwb3NpdGUoZGV2LCAodTE2X3QgKilwQnNzSW5mby0+bWFjYWRkciwgJmlkeCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCit6bFJldHVybjoKKworICAgIHJldHVybjsKK30KKworCit2b2lkIHpmQXV0aEZyZXFDb21wbGV0ZUNiKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlmICh3ZC0+c3RhLmNvbm5lY3RTdGF0ZSA9PSBaTV9TVEFfQ09OTl9TVEFURV9BVVRIX0NPTVBMRVRFRCkKKyAgICB7CisgICAgICAgIHptX2RlYnVnX21zZzAoIlpNX1NUQV9DT05OX1NUQVRFX0FTU09DSUFURSIpOworICAgICAgICB3ZC0+c3RhLmNvbm5lY3RUaW1lciA9IHdkLT50aWNrOworICAgICAgICB3ZC0+c3RhLmNvbm5lY3RTdGF0ZSA9IFpNX1NUQV9DT05OX1NUQVRFX0FTU09DSUFURTsKKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIHJldHVybjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmUHJvY2Vzc0F1dGggICAgICAgICAgICAgICAqLworLyogICAgICBQcm9jZXNzIGF1dGhlbnRpY2F0ZSBtYW5hZ2VtZW50IGZyYW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmIDogYXV0aCBmcmFtZSBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgbm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDUuMTAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE5vdGUgOiBBUCBhbGxvd3Mgb25lIGF1dGhlbnRpY2F0aW5nIFNUQSBhdCBhIHRpbWUsIGRvZXMgbm90ICAgICAgICAgICovCisvKiAgICAgICAgc3VwcG9ydCBtdWx0aXBsZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzLiBNYWtlIHN1cmUgICAgICAgICAgICAqLworLyogICAgICAgIGF1dGhlbnRpY2F0aW9uIHN0YXRlIG1hY2hpbmUgd2lsbCBub3QgYmUgYmxvY2tlZCBkdWUgICAgICAgICAgKi8KKy8qICAgICAgICB0byBpbmNvbXBsZXRlZCBhdXRoZW50aWNhdGlvbiBoYW5kc2hha2UuICAgICAgICAgICAgICAgICAgICAgICovCit2b2lkIHpmU3RhUHJvY2Vzc0F1dGgoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCogc3JjLCB1MTZfdCBhcElkKQoreworICAgIHN0cnVjdCB6c1dsYW5BdXRoRnJhbWVIZWFkZXIqIHBBdXRoRnJhbWU7CisgICAgdThfdCAgcEJ1ZltzaXplb2Yoc3RydWN0IHpzV2xhbkF1dGhGcmFtZUhlYWRlcildOworICAgIHUzMl90IHAxLCBwMjsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgaWYgKCAhemZTdGFJc0Nvbm5lY3RpbmcoZGV2KSApCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcEF1dGhGcmFtZSA9IChzdHJ1Y3QgenNXbGFuQXV0aEZyYW1lSGVhZGVyKikgcEJ1ZjsKKyAgICB6ZkNvcHlGcm9tUnhCdWZmZXIoZGV2LCBidWYsIHBCdWYsIDAsIHNpemVvZihzdHJ1Y3QgenNXbGFuQXV0aEZyYW1lSGVhZGVyKSk7CisKKyAgICBpZiAoIHdkLT5zdGEuY29ubmVjdFN0YXRlID09IFpNX1NUQV9DT05OX1NUQVRFX0FVVEhfT1BFTiApCisgICAgeworICAgICAgICBpZiAoICh6bXdfbGUxNl90b19jcHUocEF1dGhGcmFtZS0+c2VxKSA9PSAyKSYmCisgICAgICAgICAgICAgKHptd19sZTE2X3RvX2NwdShwQXV0aEZyYW1lLT5hbGdvKSA9PSAwKSYmCisgICAgICAgICAgICAgKHptd19sZTE2X3RvX2NwdShwQXV0aEZyYW1lLT5zdGF0dXMpID09IDApICkKKyAgICAgICAgeworCisgICAgICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgd2QtPnN0YS5jb25uZWN0VGltZXIgPSB3ZC0+dGljazsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIlpNX1NUQV9DT05OX1NUQVRFX0FVVEhfQ09NUExFVEVEIik7CisgICAgICAgICAgICB3ZC0+c3RhLmNvbm5lY3RTdGF0ZSA9IFpNX1NUQV9DT05OX1NUQVRFX0FVVEhfQ09NUExFVEVEOworICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICAgICAgLy9TZXQgY2hhbm5lbCBhY2NvcmRpbmcgdG8gQVAncyBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAvL01vdmUgdG8gaGVyZSBiZWNhdXNlIG9mIENpc2NvIDExbiBBUCBmZWF0dXJlCisgICAgICAgICAgICB6ZkNvcmVTZXRGcmVxdWVuY3lFeChkZXYsIHdkLT5mcmVxdWVuY3ksIHdkLT5CYW5kV2lkdGg0MCwKKyAgICAgICAgICAgICAgICAgICAgd2QtPkV4dE9mZnNldCwgemZBdXRoRnJlcUNvbXBsZXRlQ2IpOworCisgICAgICAgICAgICAvKiBzZW5kIGFzc29jaWF0aW9uIGZyYW1lICovCisgICAgICAgICAgICBpZiAoIHdkLT5zdGEuY29ubmVjdEJ5UmVhc3NvICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6ZlNlbmRNbUZyYW1lKGRldiwgWk1fV0xBTl9GUkFNRV9UWVBFX1JFQVNPQ1JFUSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuYnNzaWQsIDAsIDAsIDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmU2VuZE1tRnJhbWUoZGV2LCBaTV9XTEFOX0ZSQU1FX1RZUEVfQVNPQ1JFUSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuYnNzaWQsIDAsIDAsIDApOworICAgICAgICAgICAgfQorCisKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzEoImF1dGhlbnRpY2F0aW9uIGZhaWxlZCwgc3RhdHVzID0gIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcEF1dGhGcmFtZS0+c3RhdHVzKTsKKworICAgICAgICAgICAgaWYgKHdkLT5zdGEuYXV0aE1vZGUgPT0gWk1fQVVUSF9NT0RFX0FVVE8pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5iSXNTaGFyZWRLZXkgPSAxOworICAgICAgICAgICAgICAgIHpmU3RhU3RhcnRDb25uZWN0KGRldiwgd2QtPnN0YS5iSXNTaGFyZWRLZXkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIlpNX1NUQV9TVEFURV9ESVNDT05ORUNUIik7CisgICAgICAgICAgICAgICAgemZTdGFDb25uZWN0RmFpbChkZXYsIFpNX1NUQVRVU19NRURJQV9ESVNDT05ORUNUX0FVVEhfRkFJTEVELCB3ZC0+c3RhLmJzc2lkLCAzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICggd2QtPnN0YS5jb25uZWN0U3RhdGUgPT0gWk1fU1RBX0NPTk5fU1RBVEVfQVVUSF9TSEFSRV8xICkKKyAgICB7CisgICAgICAgIGlmICggKHptd19sZTE2X3RvX2NwdShwQXV0aEZyYW1lLT5hbGdvKSA9PSAxKSAmJgorICAgICAgICAgICAgICh6bXdfbGUxNl90b19jcHUocEF1dGhGcmFtZS0+c2VxKSA9PSAyKSAmJgorICAgICAgICAgICAgICh6bXdfbGUxNl90b19jcHUocEF1dGhGcmFtZS0+c3RhdHVzKSA9PSAwKSkKKyAgICAgICAgICAgICAgLy8mJiAocEF1dGhGcmFtZS0+Y2hhbGxlbmdlVGV4dFsxXSA8PSAyNTUpICkKKyAgICAgICAgeworICAgICAgICAgICAgemZNZW1vcnlDb3B5KHdkLT5zdGEuY2hhbGxlbmdlVGV4dCwgcEF1dGhGcmFtZS0+Y2hhbGxlbmdlVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwQXV0aEZyYW1lLT5jaGFsbGVuZ2VUZXh0WzFdKzIpOworCisgICAgICAgICAgICAvKiBzZW5kIHRoZSAzcmQgYXV0aGVudGljYXRpb24gZnJhbWUgKi8KKyAgICAgICAgICAgIHAxID0gMHgzMDAwMTsKKyAgICAgICAgICAgIHAyID0gMDsKKyAgICAgICAgICAgIHpmU2VuZE1tRnJhbWUoZGV2LCBaTV9XTEFOX0ZSQU1FX1RZUEVfQVVUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5ic3NpZCwgcDEsIHAyLCAwKTsKKworICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIHdkLT5zdGEuY29ubmVjdFRpbWVyID0gd2QtPnRpY2s7CisKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIlpNX1NUQV9TVUJfU1RBVEVfQVVUSF9TSEFSRV8yIik7CisgICAgICAgICAgICB3ZC0+c3RhLmNvbm5lY3RTdGF0ZSA9IFpNX1NUQV9DT05OX1NUQVRFX0FVVEhfU0hBUkVfMjsKKyAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJhdXRoZW50aWNhdGlvbiBmYWlsZWQsIHN0YXR1cyA9ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBBdXRoRnJhbWUtPnN0YXR1cyk7CisKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIlpNX1NUQV9TVEFURV9ESVNDT05ORUNUIik7CisgICAgICAgICAgICB6ZlN0YUNvbm5lY3RGYWlsKGRldiwgWk1fU1RBVFVTX01FRElBX0RJU0NPTk5FQ1RfQVVUSF9GQUlMRUQsIHdkLT5zdGEuYnNzaWQsIDMpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKCB3ZC0+c3RhLmNvbm5lY3RTdGF0ZSA9PSBaTV9TVEFfQ09OTl9TVEFURV9BVVRIX1NIQVJFXzIgKQorICAgIHsKKyAgICAgICAgaWYgKCAoem13X2xlMTZfdG9fY3B1KHBBdXRoRnJhbWUtPmFsZ28pID09IDEpJiYKKyAgICAgICAgICAgICAoem13X2xlMTZfdG9fY3B1KHBBdXRoRnJhbWUtPnNlcSkgPT0gNCkmJgorICAgICAgICAgICAgICh6bXdfbGUxNl90b19jcHUocEF1dGhGcmFtZS0+c3RhdHVzKSA9PSAwKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vU2V0IGNoYW5uZWwgYWNjb3JkaW5nIHRvIEFQJ3MgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgLy9Nb3ZlIHRvIGhlcmUgYmVjYXVzZSBvZiBDaXNjbyAxMW4gQVAgZmVhdHVyZQorICAgICAgICAgICAgemZDb3JlU2V0RnJlcXVlbmN5RXgoZGV2LCB3ZC0+ZnJlcXVlbmN5LCB3ZC0+QmFuZFdpZHRoNDAsCisgICAgICAgICAgICAgICAgICAgIHdkLT5FeHRPZmZzZXQsIE5VTEwpOworCisgICAgICAgICAgICAvKiBzZW5kIGFzc29jaWF0aW9uIGZyYW1lICovCisgICAgICAgICAgICB6ZlNlbmRNbUZyYW1lKGRldiwgWk1fV0xBTl9GUkFNRV9UWVBFX0FTT0NSRVEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuYnNzaWQsIDAsIDAsIDApOworCisgICAgICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgd2QtPnN0YS5jb25uZWN0VGltZXIgPSB3ZC0+dGljazsKKworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiWk1fU1RBX1NVQl9TVEFURV9BU1NPQ0lBVEUiKTsKKyAgICAgICAgICAgIHdkLT5zdGEuY29ubmVjdFN0YXRlID0gWk1fU1RBX0NPTk5fU1RBVEVfQVNTT0NJQVRFOworICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzEoImF1dGhlbnRpY2F0aW9uIGZhaWxlZCwgc3RhdHVzID0gIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcEF1dGhGcmFtZS0+c3RhdHVzKTsKKworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiWk1fU1RBX1NUQVRFX0RJU0NPTk5FQ1QiKTsKKyAgICAgICAgICAgIHpmU3RhQ29ubmVjdEZhaWwoZGV2LCBaTV9TVEFUVVNfTUVESUFfRElTQ09OTkVDVF9BVVRIX0ZBSUxFRCwgd2QtPnN0YS5ic3NpZCwgMyk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgem1fZGVidWdfbXNnMCgidW5rbm93biBjYXNlIik7CisgICAgfQorfQorCit2b2lkIHpmU3RhUHJvY2Vzc0Fzb2NSZXEoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCogc3JjLCB1MTZfdCBhcElkKQoreworCisgICAgcmV0dXJuOworfQorCit2b2lkIHpmU3RhUHJvY2Vzc0Fzb2NSc3AoemRldl90KiBkZXYsIHpidWZfdCogYnVmKQoreworICAgIHN0cnVjdCB6c1dsYW5Bc3NvRnJhbWVIZWFkZXIqIHBBc3NvRnJhbWU7CisgICAgdThfdCAgcEJ1ZltzaXplb2Yoc3RydWN0IHpzV2xhbkFzc29GcmFtZUhlYWRlcildOworICAgIHUxNl90IG9mZnNldDsKKyAgICB1MzJfdCBpOworICAgIHUzMl90IG9uZVR4U3RyZWFtQ2FwOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYgKCAhemZTdGFJc0Nvbm5lY3RpbmcoZGV2KSApCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcEFzc29GcmFtZSA9IChzdHJ1Y3QgenNXbGFuQXNzb0ZyYW1lSGVhZGVyKikgcEJ1ZjsKKyAgICB6ZkNvcHlGcm9tUnhCdWZmZXIoZGV2LCBidWYsIHBCdWYsIDAsIHNpemVvZihzdHJ1Y3QgenNXbGFuQXNzb0ZyYW1lSGVhZGVyKSk7CisKKyAgICBpZiAoIHdkLT5zdGEuY29ubmVjdFN0YXRlID09IFpNX1NUQV9DT05OX1NUQVRFX0FTU09DSUFURSApCisgICAgeworICAgICAgICBpZiAoIHBBc3NvRnJhbWUtPnN0YXR1cyA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiWk1fU1RBX1NUQVRFX0NPTk5FQ1RFRCIpOworCisgICAgICAgICAgICBpZiAod2QtPnN0YS5FbmFibGVIVCA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT5zdGEud21lQ29ubmVjdGVkID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgod2QtPnN0YS53bWVFbmFibGVkICYgWk1fU1RBX1dNRV9FTkFCTEVfQklUKSAhPSAwKSAvL1dNRSBlbmFibGVkCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogQXNvYyByc3AgbWF5IGNvbnRhaW4gV01FIHBhcmFtZXRlciBlbGVtZW50ICovCisgICAgICAgICAgICAgICAgaWYgKChvZmZzZXQgPSB6ZkZpbmRXaWZpRWxlbWVudChkZXYsIGJ1ZiwgMiwgMSkpICE9IDB4ZmZmZikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIldNRSBlbmFibGUiKTsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS53bWVDb25uZWN0ZWQgPSAxOworICAgICAgICAgICAgICAgICAgICBpZiAoKHdkLT5zdGEud21lRW5hYmxlZCAmIFpNX1NUQV9VQVBTRF9FTkFCTEVfQklUKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs4KSAmIDB4ODApICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiVUFQU0QgZW5hYmxlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5xb3NJbmZvID0gd2QtPnN0YS53bWVRb3NJbmZvOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgemZTdGFVcGRhdGVXbWVQYXJhbWV0ZXIoZGV2LCBidWYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworCisgICAgICAgICAgICAvL1N0b3JlIGFzb2MgcmVzcG9uc2UgZnJhbWUgYm9keSwgZm9yIFZJU1RBIG9ubHkKKyAgICAgICAgICAgIHdkLT5zdGEuYXNvY1JzcEZyYW1lQm9keVNpemUgPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKS0yNDsKKyAgICAgICAgICAgIGlmICh3ZC0+c3RhLmFzb2NSc3BGcmFtZUJvZHlTaXplID4gWk1fQ0FDSEVEX0ZSQU1FQk9EWV9TSVpFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT5zdGEuYXNvY1JzcEZyYW1lQm9keVNpemUgPSBaTV9DQUNIRURfRlJBTUVCT0RZX1NJWkU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGk9MDsgaTx3ZC0+c3RhLmFzb2NSc3BGcmFtZUJvZHlTaXplOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5hc29jUnNwRnJhbWVCb2R5W2ldID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgaSsyNCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHpmU3RhU3RvcmVBc29jUnNwSWUoZGV2LCBidWYpOworICAgICAgICAgICAgaWYgKHdkLT5zdGEuRW5hYmxlSFQgJiYKKyAgICAgICAgICAgICAgICAoKHdkLT5zdGEuaWUuSHRDYXAuSHRDYXBJbmZvICYgSFRDQVBfU3VwQ2hhbm5lbFdpZHRoU2V0KSAhPSAwKSAmJgorICAgICAgICAgICAgICAgICh3ZC0+RXh0T2Zmc2V0ICE9IDApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT5zdGEuaHRDdHJsQmFuZHdpZHRoID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+c3RhLmh0Q3RybEJhbmR3aWR0aCA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vU2V0IGNoYW5uZWwgYWNjb3JkaW5nIHRvIEFQJ3MgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgLy96ZkNvcmVTZXRGcmVxdWVuY3lFeChkZXYsIHdkLT5mcmVxdWVuY3ksIHdkLT5CYW5kV2lkdGg0MCwKKyAgICAgICAgICAgIC8vICAgICAgICB3ZC0+RXh0T2Zmc2V0LCBOVUxMKTsKKworICAgICAgICAgICAgaWYgKHdkLT5zdGEuRW5hYmxlSFQgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+YWRkYmFDb21wbGV0ZSA9IDA7CisKKyAgICAgICAgICAgICAgICBpZiAoKHdkLT5zdGEuU1dFbmNyeXB0RW5hYmxlICYgWk1fU1dfVEtJUF9FTkNSWV9FTikgPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAod2QtPnN0YS5TV0VuY3J5cHRFbmFibGUgJiBaTV9TV19XRVBfRU5DUllfRU4pID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3ZC0+YWRkYmFDb3VudCA9IDE7CisgICAgICAgICAgICAgICAgICAgIHpmQWdnU2VuZEFkZGJhUmVxdWVzdChkZXYsIHdkLT5zdGEuYnNzaWQsIDAsIDApOworICAgICAgICAgICAgICAgICAgICB6ZlRpbWVyU2NoZWR1bGUoZGV2LCBaTV9FVkVOVF9USU1FT1VUX0FEREJBLCAxMDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogc2V0IFJJRlMgc3VwcG9ydCAqLworICAgICAgICAgICAgaWYod2QtPnN0YS5pZS5IdEluZm8uQ2hhbm5lbEluZm8gJiBFeHRIdENhcF9SSUZTTW9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+c3RhLkhUMjA0MCA9IDE7CisvLyAgICAgICAgICAgICAgICB6ZkhwU2V0UmlmcyhkZXYsIHdkLT5zdGEuRW5hYmxlSFQsIDEsICh3ZC0+c3RhLmN1cnJlbnRGcmVxdWVuY3kgPCAzMDAwKT8gMTowKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2QtPnN0YS5haWQgPSBwQXNzb0ZyYW1lLT5haWQgJiAweDNmZmY7CisgICAgICAgICAgICB3ZC0+c3RhLm9wcG9zaXRlQ291bnQgPSAwOyAgICAvKiByZXNldCBvcHBvc2l0ZSBjb3VudCAqLworICAgICAgICAgICAgemZTdGFTZXRPcHBvc2l0ZUluZm9Gcm9tUnhCdWYoZGV2LCBidWYpOworCisgICAgICAgICAgICB3ZC0+c3RhLnJ4QmVhY29uQ291bnQgPSAxNjsKKworICAgICAgICAgICAgemZDaGFuZ2VBZGFwdGVyU3RhdGUoZGV2LCBaTV9TVEFfU1RBVEVfQ09OTkVDVEVEKTsKKyAgICAgICAgICAgIHdkLT5zdGEuY29ublBvd2VySW5IYWxmRGJtID0gemZIcEdldFRyYW5zbWl0UG93ZXIoZGV2KTsKKyAgICAgICAgICAgIGlmICh3ZC0+emZjYkNvbm5lY3ROb3RpZnkgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAod2QtPnN0YS5FbmFibGVIVCAhPSAwKSAvKiAxMW4gKi8KKyAgICAgICAgICAgIAl7CisgICAgCQkgICAgICAgIG9uZVR4U3RyZWFtQ2FwID0gKHpmSHBDYXBhYmlsaXR5KGRldikgJiBaTV9IUF9DQVBfMTFOX09ORV9UWF9TVFJFQU0pOworICAgIAkJICAgICAgICBpZiAod2QtPnN0YS5odEN0cmxCYW5kd2lkdGggPT0gMSkgLyogSFQ0MCovCisgICAgCQkgICAgICAgIHsKKyAgICAJCQkJCWlmKG9uZVR4U3RyZWFtQ2FwKSAvKiBvbmUgVHggc3RyZWFtICovCisgICAgCQkJCSAgICB7CisgICAgCQkJCSAgICAgICAgaWYgKHdkLT5zdGEuU0c0MCkKKyAgICAJCQkJICAgICAgICB7CisgICAgCQkJCSAgICAgICAgICAgIHdkLT5DdXJyZW50VHhSYXRlS2JwcyA9IDE1MDAwMDsKKyAgICAJCQkJCQkgICAgd2QtPkN1cnJlbnRSeFJhdGVLYnBzID0gMzAwMDAwOworICAgIAkJCQkgICAgICAgIH0KKyAgICAJCQkJICAgICAgICBlbHNlCisgICAgCQkJCSAgICAgICAgeworICAgIAkJCQkgICAgICAgICAgICB3ZC0+Q3VycmVudFR4UmF0ZUticHMgPSAxMzUwMDA7CisgICAgCQkJCQkJICAgIHdkLT5DdXJyZW50UnhSYXRlS2JwcyA9IDI3MDAwMDsKKyAgICAJCQkJICAgICAgICB9CisgICAgCQkJCSAgICB9CisgICAgCQkJCSAgICBlbHNlIC8qIFR3byBUeCBzdHJlYW1zICovCisgICAgCQkJCSAgICB7CisgICAgCQkJCSAgICAgICAgaWYgKHdkLT5zdGEuU0c0MCkKKyAgICAJCQkJICAgICAgICB7CisgICAgCQkJCSAgICAgICAgICAgIHdkLT5DdXJyZW50VHhSYXRlS2JwcyA9IDMwMDAwMDsKKyAgICAJCQkJCQkgICAgd2QtPkN1cnJlbnRSeFJhdGVLYnBzID0gMzAwMDAwOworICAgIAkJCQkgICAgICAgIH0KKyAgICAJCQkJICAgICAgICBlbHNlCisgICAgCQkJCSAgICAgICAgeworICAgIAkJCQkgICAgICAgICAgICB3ZC0+Q3VycmVudFR4UmF0ZUticHMgPSAyNzAwMDA7CisgICAgCQkJCQkJICAgIHdkLT5DdXJyZW50UnhSYXRlS2JwcyA9IDI3MDAwMDsKKyAgICAJCQkJICAgICAgICB9CisgICAgCQkJCSAgICB9CisgICAgCQkgICAgICAgIH0KKyAgICAJCSAgICAgICAgZWxzZSAvKiBIVDIwICovCisgICAgCQkgICAgICAgIHsKKyAgICAJCSAgICAgICAgICAgIGlmKG9uZVR4U3RyZWFtQ2FwKSAvKiBvbmUgVHggc3RyZWFtICovCisgICAgCQkJCSAgICB7CisgICAgCQkJCSAgICAgICAgd2QtPkN1cnJlbnRUeFJhdGVLYnBzID0gNjUwMDAwOworICAgIAkJCQkJCXdkLT5DdXJyZW50UnhSYXRlS2JwcyA9IDEzMDAwMDsKKyAgICAJCQkJICAgIH0KKyAgICAJCQkJICAgIGVsc2UgLyogVHdvIFR4IHN0cmVhbXMgKi8KKyAgICAJCQkJICAgIHsKKyAgICAJCQkJICAgICAgICB3ZC0+Q3VycmVudFR4UmF0ZUticHMgPSAxMzAwMDA7CisgICAgCQkJCQkgICAgd2QtPkN1cnJlbnRSeFJhdGVLYnBzID0gMTMwMDAwOworICAgIAkJCQkgICAgfQorICAgIAkJICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgLyogMTFhYmcgKi8KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICh3ZC0+c3RhLmNvbm5lY3Rpb25fMTFiICE9IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5DdXJyZW50VHhSYXRlS2JwcyA9IDExMDAwOworICAgIAkJCSAgICAgICAgd2QtPkN1cnJlbnRSeFJhdGVLYnBzID0gMTEwMDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+Q3VycmVudFR4UmF0ZUticHMgPSA1NDAwMDsKKyAgICAJCQkgICAgICAgIHdkLT5DdXJyZW50UnhSYXRlS2JwcyA9IDU0MDAwOworICAgIAkJCSAgICB9CisgICAgICAgICAgICAgICAgfQorCisKKyAgICAgICAgICAgICAgICB3ZC0+emZjYkNvbm5lY3ROb3RpZnkoZGV2LCBaTV9TVEFUVVNfTUVESUFfQ09OTkVDVCwgd2QtPnN0YS5ic3NpZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3ZC0+c3RhLmNvbm5lY3RCeVJlYXNzbyA9IFRSVUU7CisgICAgICAgICAgICB3ZC0+c3RhLmZhaWxDbnRPZlJlYXNzbyA9IDA7CisKKyAgICAgICAgICAgIHpmUG93ZXJTYXZpbmdNZ3JDb25uZWN0Tm90aWZ5KGRldik7CisKKyAgICAgICAgICAgIC8qIERpc2FibGUgaGVyZSBiZWNhdXNlIGZpeGVkIHJhdGUgaXMgb25seSBmb3IgdGVzdCwgVEJELiAqLworICAgICAgICAgICAgLy9pZiAod2QtPnN0YS5FbmFibGVIVCkKKyAgICAgICAgICAgIC8veworICAgICAgICAgICAgLy8gICAgd2QtPnR4TUNTID0gNzsgLy9SYXRlID0gNjVNYnBzCisgICAgICAgICAgICAvLyAgICB3ZC0+dHhNVCA9IDI7IC8vIEh0IHJhdGUKKyAgICAgICAgICAgIC8vICAgIHdkLT5lbmFibGVBZ2dyZWdhdGlvbiA9IDI7IC8vIEVuYWJsZSBBZ2dyZWdhdGlvbgorICAgICAgICAgICAgLy99CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJhc3NvY2lhdGlvbiBmYWlsZWQsIHN0YXR1cyA9ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBBc3NvRnJhbWUtPnN0YXR1cyk7CisKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIlpNX1NUQV9TVEFURV9ESVNDT05ORUNUIik7CisgICAgICAgICAgICB3ZC0+c3RhLmNvbm5lY3RCeVJlYXNzbyA9IEZBTFNFOworICAgICAgICAgICAgemZTdGFDb25uZWN0RmFpbChkZXYsIFpNX1NUQVRVU19NRURJQV9ESVNDT05ORUNUX0FTT0NfRkFJTEVELCB3ZC0+c3RhLmJzc2lkLCAzKTsKKyAgICAgICAgfQorICAgIH0KKworfQorCit2b2lkIHpmU3RhU3RvcmVBc29jUnNwSWUoemRldl90KiBkZXYsIHpidWZfdCogYnVmKQoreworICAgIHUxNl90IG9mZnNldDsKKyAgICB1MzJfdCBpOworICAgIHUxNl90IGxlbmd0aDsKKyAgICB1OF90ICAqaHRjYXA7CisgICAgdThfdCAgYXNvY0J3NDAgPSAwOworICAgIHU4X3QgIGFzb2NFeHRPZmZzZXQgPSAwOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgZm9yIChpPTA7IGk8d2QtPnN0YS5hc29jUnNwRnJhbWVCb2R5U2l6ZTsgaSsrKQorICAgIHsKKyAgICAgICAgd2QtPnN0YS5hc29jUnNwRnJhbWVCb2R5W2ldID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgaSsyNCk7CisgICAgfQorCisgICAgLyogSFQgY2FwYWJpbGl0aWVzOiAyOCBvY3RldHMgKi8KKyAgICBpZiAoICAgICgod2QtPnN0YS5jdXJyZW50RnJlcXVlbmN5ID4gMzAwMCkgJiYgISh3ZC0+c3VwcG9ydE1vZGUgJiBaTV9XSVJFTEVTU19NT0RFXzVfTikpCisgICAgICAgICB8fCAoKHdkLT5zdGEuY3VycmVudEZyZXF1ZW5jeSA8IDMwMDApICYmICEod2QtPnN1cHBvcnRNb2RlICYgWk1fV0lSRUxFU1NfTU9ERV8yNF9OKSkgKQorICAgIHsKKyAgICAgICAgLyogbm90IDExbiBBUCAqLworICAgICAgICBodGNhcCA9ICh1OF90ICopJndkLT5zdGEuaWUuSHRDYXA7CisgICAgICAgIGZvciAoaT0wOyBpPDI4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGh0Y2FwW2ldID0gMDsKKyAgICAgICAgfQorICAgICAgICB3ZC0+QmFuZFdpZHRoNDAgPSAwOworICAgICAgICB3ZC0+RXh0T2Zmc2V0ID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgob2Zmc2V0ID0gemZGaW5kRWxlbWVudChkZXYsIGJ1ZiwgWk1fV0xBTl9FSURfSFRfQ0FQQUJJTElUWSkpICE9IDB4ZmZmZikKKyAgICB7CisgICAgICAgIC8qIGF0aGVyb3MgcHJlIG4gKi8KKyAgICAgICAgem1fZGVidWdfbXNnMCgiYXRoZXJvcyBwcmUgbiIpOworICAgICAgICBodGNhcCA9ICh1OF90ICopJndkLT5zdGEuaWUuSHRDYXA7CisgICAgICAgIGh0Y2FwWzBdID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KTsKKyAgICAgICAgaHRjYXBbMV0gPSAyNjsKKyAgICAgICAgZm9yIChpPTE7IGk8PTI2OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGh0Y2FwW2krMV0gPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQgKyBpKTsKKyAgICAgICAgICAgIHptX21zZzJfbW0oWk1fTFZfMSwgIkFTT0M6ICBIVCBDYXBhYmlsaXRpZXMsIGh0Y2FwPSIsIGh0Y2FwW2krMV0pOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKChvZmZzZXQgPSB6ZkZpbmRFbGVtZW50KGRldiwgYnVmLCBaTV9XTEFOX1BSRU4yX0VJRF9IVENBUEFCSUxJVFkpKSAhPSAweGZmZmYpCisgICAgeworICAgICAgICAvKiBwcmUgbiAyLjAgc3RhbmRhcmQgKi8KKyAgICAgICAgem1fZGVidWdfbXNnMCgicHJlIG4gMi4wIHN0YW5kYXJkIik7CisgICAgICAgIGh0Y2FwID0gKHU4X3QgKikmd2QtPnN0YS5pZS5IdENhcDsKKyAgICAgICAgZm9yIChpPTA7IGk8Mjg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaHRjYXBbaV0gPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQgKyBpKTsKKyAgICAgICAgICAgIHptX21zZzJfbW0oWk1fTFZfMSwgIkFTT0M6ICBIVCBDYXBhYmlsaXRpZXMsIGh0Y2FwPSIsIGh0Y2FwW2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBub3QgMTFuIEFQICovCisgICAgICAgIGh0Y2FwID0gKHU4X3QgKikmd2QtPnN0YS5pZS5IdENhcDsKKyAgICAgICAgZm9yIChpPTA7IGk8Mjg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaHRjYXBbaV0gPSAwOworICAgICAgICB9CisgICAgICAgIHdkLT5CYW5kV2lkdGg0MCA9IDA7CisgICAgICAgIHdkLT5FeHRPZmZzZXQgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXNvY0J3NDAgPSAodThfdCkoKHdkLT5zdGEuaWUuSHRDYXAuSHRDYXBJbmZvICYgSFRDQVBfU3VwQ2hhbm5lbFdpZHRoU2V0KSA+PiAxKTsKKworICAgIC8qIEhUIGluZm9ybWF0aW9uICovCisgICAgaWYgKChvZmZzZXQgPSB6ZkZpbmRFbGVtZW50KGRldiwgYnVmLCBaTV9XTEFOX0VJRF9FWFRFTkRFRF9IVF9DQVBBQklMSVRZKSkgIT0gMHhmZmZmKQorICAgIHsKKyAgICAgICAgLyogYXRoZXJvcyBwcmUgbiAqLworICAgICAgICB6bV9kZWJ1Z19tc2cwKCJhdGhlcm9zIHByZSBuIEhUSU5GTyIpOworICAgICAgICBsZW5ndGggPSAyMjsKKyAgICAgICAgaHRjYXAgPSAodThfdCAqKSZ3ZC0+c3RhLmllLkh0SW5mbzsKKyAgICAgICAgaHRjYXBbMF0gPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQpOworICAgICAgICBodGNhcFsxXSA9IDIyOworICAgICAgICBmb3IgKGk9MTsgaTw9MjI7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaHRjYXBbaSsxXSA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCArIGkpOworICAgICAgICAgICAgem1fbXNnMl9tbShaTV9MVl8xLCAiQVNPQzogIEhUIEluZm8sIGh0aW5mbz0iLCBodGNhcFtpKzFdKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICgob2Zmc2V0ID0gemZGaW5kRWxlbWVudChkZXYsIGJ1ZiwgWk1fV0xBTl9QUkVOMl9FSURfSFRJTkZPUk1BVElPTikpICE9IDB4ZmZmZikKKyAgICB7CisgICAgICAgIC8qIHByZSBuIDIuMCBzdGFuZGFyZCAqLworICAgICAgICB6bV9kZWJ1Z19tc2cwKCJwcmUgbiAyLjAgc3RhbmRhcmQgSFRJTkZPIik7CisgICAgICAgIGxlbmd0aCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCArIDEpOworICAgICAgICBodGNhcCA9ICh1OF90ICopJndkLT5zdGEuaWUuSHRJbmZvOworICAgICAgICBmb3IgKGk9MDsgaTwyNDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBodGNhcFtpXSA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCArIGkpOworICAgICAgICAgICAgem1fbXNnMl9tbShaTV9MVl8xLCAiQVNPQzogIEhUIEluZm8sIGh0aW5mbz0iLCBodGNhcFtpXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgem1fZGVidWdfbXNnMCgibm8gSFRJTkZPIik7CisgICAgICAgIGh0Y2FwID0gKHU4X3QgKikmd2QtPnN0YS5pZS5IdEluZm87CisgICAgICAgIGZvciAoaT0wOyBpPDI0OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGh0Y2FwW2ldID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBhc29jRXh0T2Zmc2V0ID0gd2QtPnN0YS5pZS5IdEluZm8uQ2hhbm5lbEluZm8gJiBFeHRIdENhcF9FeHRDaGFubmVsT2Zmc2V0QmVsb3c7CisKKyAgICBpZiAoKHdkLT5zdGEuRW5hYmxlSFQgPT0gMSkgJiYgKGFzb2NCdzQwID09IDEpICYmICgoYXNvY0V4dE9mZnNldCA9PSAxKSB8fCAoYXNvY0V4dE9mZnNldCA9PSAzKSkpCisgICAgeworICAgICAgICB3ZC0+QmFuZFdpZHRoNDAgPSBhc29jQnc0MDsKKyAgICAgICAgd2QtPkV4dE9mZnNldCA9IGFzb2NFeHRPZmZzZXQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHdkLT5CYW5kV2lkdGg0MCA9IDA7CisgICAgICAgIHdkLT5FeHRPZmZzZXQgPSAwOworICAgIH0KKworICAgIHJldHVybjsKK30KKwordm9pZCB6ZlN0YVByb2Nlc3NEZWF1dGgoemRldl90KiBkZXYsIHpidWZfdCogYnVmKQoreworICAgIHUxNl90IGFwTWFjQWRkclszXTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgLyogU1RBIDogaWYgU0E9Y29ubmVjdGVkIEFQIHRoZW4gZGlzY29ubmVjdCB3aXRoIEFQICovCisgICAgaWYgKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSApCisgICAgeworICAgICAgICBhcE1hY0FkZHJbMF0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BM19PRkZTRVQpOworICAgICAgICBhcE1hY0FkZHJbMV0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BM19PRkZTRVQrMik7CisgICAgICAgIGFwTWFjQWRkclsyXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIFpNX1dMQU5fSEVBREVSX0EzX09GRlNFVCs0KTsKKyAgCWlmICgoYXBNYWNBZGRyWzBdID09IHdkLT5zdGEuYnNzaWRbMF0pICYmIChhcE1hY0FkZHJbMV0gPT0gd2QtPnN0YS5ic3NpZFsxXSkgJiYgKGFwTWFjQWRkclsyXSA9PSB3ZC0+c3RhLmJzc2lkWzJdKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHpmd0J1ZkdldFNpemUoZGV2LCBidWYpID49IDI0KzIpIC8vbm90IGEgbWFsZm9ybWVkIGZyYW1lCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCB6ZlN0YUlzQ29ubmVjdGVkKGRldikgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgemZTdGFDb25uZWN0RmFpbChkZXYsIFpNX1NUQVRVU19NRURJQV9ESVNDT05ORUNUX0RFQVVUSCwgd2QtPnN0YS5ic3NpZCwgMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHpmU3RhSXNDb25uZWN0aW5nKGRldikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB6ZlN0YUNvbm5lY3RGYWlsKGRldiwgWk1fU1RBVFVTX01FRElBX0RJU0NPTk5FQ1RfQVVUSF9GQUlMRUQsIHdkLT5zdGEuYnNzaWQsIDMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfSUJTUyApCisgICAgeworICAgICAgICB1MTZfdCBwZWVyTWFjQWRkclszXTsKKyAgICAgICAgdThfdCAgcGVlcklkeDsKKyAgICAgICAgczhfdCAgcmVzOworCisgICAgICAgIGlmICggemZTdGFJc0Nvbm5lY3RlZChkZXYpICkKKyAgICAgICAgeworICAgICAgICAgICAgcGVlck1hY0FkZHJbMF0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BMl9PRkZTRVQpOworICAgICAgICAgICAgcGVlck1hY0FkZHJbMV0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BMl9PRkZTRVQrMik7CisgICAgICAgICAgICBwZWVyTWFjQWRkclsyXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIFpNX1dMQU5fSEVBREVSX0EyX09GRlNFVCs0KTsKKworICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIHJlcyA9IHpmU3RhRmluZE9wcG9zaXRlQnlNQUNBZGRyKGRldiwgcGVlck1hY0FkZHIsICZwZWVySWR4KTsKKyAgICAgICAgICAgIGlmICggcmVzID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT5zdGEub3Bwb3NpdGVJbmZvW3BlZXJJZHhdLmFsaXZlQ291bnRlciA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHpmU3RhUHJvY2Vzc0Rpc2Fzb2MoemRldl90KiBkZXYsIHpidWZfdCogYnVmKQoreworICAgIHUxNl90IGFwTWFjQWRkclszXTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8qIFNUQSA6IGlmIFNBPWNvbm5lY3RlZCBBUCB0aGVuIGRpc2Nvbm5lY3Qgd2l0aCBBUCAqLworICAgIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUgKQorICAgIHsKKyAgICAgICAgYXBNYWNBZGRyWzBdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTNfT0ZGU0VUKTsKKyAgICAgICAgYXBNYWNBZGRyWzFdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTNfT0ZGU0VUKzIpOworICAgICAgICBhcE1hY0FkZHJbMl0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BM19PRkZTRVQrNCk7CisKKyAgICAgICAgaWYgKChhcE1hY0FkZHJbMF0gPT0gd2QtPnN0YS5ic3NpZFswXSkgJiYgKGFwTWFjQWRkclsxXSA9PSB3ZC0+c3RhLmJzc2lkWzFdKSAmJiAoYXBNYWNBZGRyWzJdID09IHdkLT5zdGEuYnNzaWRbMl0pKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoemZ3QnVmR2V0U2l6ZShkZXYsIGJ1ZikgPj0gMjQrMikgLy9ub3QgYSBtYWxmb3JtZWQgZnJhbWUKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIHpmU3RhSXNDb25uZWN0ZWQoZGV2KSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB6ZlN0YUNvbm5lY3RGYWlsKGRldiwgWk1fU1RBVFVTX01FRElBX0RJU0NPTk5FQ1RfRElTQVNPQywgd2QtPnN0YS5ic3NpZCwgMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHpmU3RhQ29ubmVjdEZhaWwoZGV2LCBaTV9TVEFUVVNfTUVESUFfRElTQ09OTkVDVF9BU09DX0ZBSUxFRCwgd2QtPnN0YS5ic3NpZCwgMyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmUHJvY2Vzc1Byb2JlUmVxICAgICAgICAgICAqLworLyogICAgICBQcm9jZXNzIHByb2JlIHJlcXVlc3QgbWFuYWdlbWVudCBmcmFtZS4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmIDogYXV0aCBmcmFtZSBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgbm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDUuMTAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgemZTdGFQcm9jZXNzUHJvYmVSZXEoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCogc3JjKQoreworICAgIHUxNl90IG9mZnNldDsKKyAgICB1OF90IGxlbjsKKyAgICB1MTZfdCBpLCBqOworICAgIHUxNl90IHNlbmRGbGFnOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLyogY2hlY2sgbW9kZSA6IEFQL0lCU1MgKi8KKyAgICBpZiAoKHdkLT53bGFuTW9kZSAhPSBaTV9NT0RFX0FQKSB8fCAod2QtPndsYW5Nb2RlICE9IFpNX01PREVfSUJTUykpCisgICAgeworICAgICAgICB6bV9tc2cwX21tKFpNX0xWXzMsICJJZ25vcmUgcHJvYmUgcmVxIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBjaGVjayBTU0lEICovCisgICAgaWYgKChvZmZzZXQgPSB6ZkZpbmRFbGVtZW50KGRldiwgYnVmLCBaTV9XTEFOX0VJRF9TU0lEKSkgPT0gMHhmZmZmKQorICAgIHsKKyAgICAgICAgem1fbXNnMF9tbShaTV9MVl8zLCAicHJvYmUgcmVxIFNTSUQgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsZW4gPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMSk7CisKKyAgICBmb3IgKGk9MDsgaTxaTV9NQVhfQVBfU1VQUE9SVDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKCh3ZC0+YXAuYXBCaXRtYXAgJiAoaTw8aSkpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNlbmRGbGFnID0gMDsKKyAgICAgICAgICAgIC8qIGJvYXJkY2FzdCBTU0lEICovCisgICAgICAgICAgICBpZiAoKGxlbiA9PSAwKSAmJiAod2QtPmFwLmhpZGVTc2lkW2ldID09IDApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNlbmRGbGFnID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIE5vdCBicm9hZGNhc3QgU1NJRCAqLworICAgICAgICAgICAgZWxzZSBpZiAod2QtPmFwLnNzaWRMZW5baV0gPT0gbGVuKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaj0wOyBqPGxlbjsgaisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxK2opCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gd2QtPmFwLnNzaWRbaV1bal0pCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChqID09IGxlbikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHNlbmRGbGFnID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2VuZEZsYWcgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBTZW5kIHByb2JlIHJlc3BvbnNlICovCisgICAgICAgICAgICAgICAgemZTZW5kTW1GcmFtZShkZXYsIFpNX1dMQU5fRlJBTUVfVFlQRV9QUk9CRVJTUCwgc3JjLCBpLCAwLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB6ZlN0YVByb2Nlc3NQcm9iZVJzcCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHN0cnVjdCB6c0FkZGl0aW9uSW5mbyogQWRkSW5mbykKK3sKKyAgICAvKiByZXR1cm4gaWYgbm90IGNoYW5uZWwgc2NhbiAqLworICAgIC8vIFByb2JlIHJlc3BvbnNlIGlzIHNlbnQgd2l0aCB1bmljYXN0LiBJcyB0aGlzIHJlcXVpcmVkPworICAgIC8vIElCU1Mgd291bGQgc2VuZCBwcm9iZSByZXF1ZXN0IGFuZCB0aGUgY29kZSBiZWxvdyB3b3VsZCBwcmV2ZW50CisgICAgLy8gdGhlIHByb2JlIHJlc3BvbnNlIGZyb20gaGFuZGxpbmcuCisgICAgI2lmIDAKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAoICF3ZC0+c3RhLmJDaGFubmVsU2NhbiApCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgICNlbmRpZgorCisgICAgemZQcm9jZXNzUHJvYmVSc3AoZGV2LCBidWYsIEFkZEluZm8pOworfQorCit2b2lkIHpmSUJTU1NldHVwQnNzRGVzYyh6ZGV2X3QgKmRldikKK3sKKyNpZmRlZiBaTV9FTkFCTEVfSUJTU19XUEEyUFNLCisgICAgdThfdCBpOworI2VuZGlmCisgICAgc3RydWN0IHpzQnNzSW5mbyAqcEJzc0luZm87CisgICAgdTE2X3Qgb2Zmc2V0ID0gMDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHBCc3NJbmZvID0gJndkLT5zdGEuaWJzc0Jzc0Rlc2M7CisgICAgemZaZXJvTWVtb3J5KCh1OF90ICopcEJzc0luZm8sIHNpemVvZihzdHJ1Y3QgenNCc3NJbmZvKSk7CisKKyAgICBwQnNzSW5mby0+c2lnbmFsU3RyZW5ndGggPSAxMDA7CisKKyAgICB6Zk1lbW9yeUNvcHkoKHU4X3QgKilwQnNzSW5mby0+bWFjYWRkciwgKHU4X3QgKil3ZC0+bWFjQWRkciw2KTsKKyAgICB6Zk1lbW9yeUNvcHkoKHU4X3QgKilwQnNzSW5mby0+YnNzaWQsICh1OF90ICopd2QtPnN0YS5ic3NpZCwgNik7CisKKyAgICBwQnNzSW5mby0+YmVhY29uSW50ZXJ2YWxbMF0gPSAodThfdCkod2QtPmJlYWNvbkludGVydmFsKSA7CisgICAgcEJzc0luZm8tPmJlYWNvbkludGVydmFsWzFdID0gKHU4X3QpKCh3ZC0+YmVhY29uSW50ZXJ2YWwpID4+IDgpIDsKKworICAgIHBCc3NJbmZvLT5jYXBhYmlsaXR5WzBdID0gd2QtPnN0YS5jYXBhYmlsaXR5WzBdOworICAgIHBCc3NJbmZvLT5jYXBhYmlsaXR5WzFdID0gd2QtPnN0YS5jYXBhYmlsaXR5WzFdOworCisgICAgcEJzc0luZm8tPnNzaWRbMF0gPSBaTV9XTEFOX0VJRF9TU0lEOworICAgIHBCc3NJbmZvLT5zc2lkWzFdID0gd2QtPnN0YS5zc2lkTGVuOworICAgIHpmTWVtb3J5Q29weSgodThfdCAqKSZwQnNzSW5mby0+c3NpZFsyXSwgKHU4X3QgKil3ZC0+c3RhLnNzaWQsIHdkLT5zdGEuc3NpZExlbik7CisgICAgemZNZW1vcnlDb3B5KCh1OF90ICopJnBCc3NJbmZvLT5mcmFtZUJvZHlbb2Zmc2V0XSwgKHU4X3QgKilwQnNzSW5mby0+c3NpZCwKKyAgICAgICAgICAgICAgICAgd2QtPnN0YS5zc2lkTGVuICsgMik7CisgICAgb2Zmc2V0ICs9IHdkLT5zdGEuc3NpZExlbiArIDI7CisKKyAgICAvKiBzdXBwb3J0IHJhdGUgKi8KKworICAgIC8qIERTIHBhcmFtZXRlciBzZXQgKi8KKyAgICBwQnNzSW5mby0+Y2hhbm5lbCA9IHpmQ2hGcmVxVG9OdW0od2QtPmZyZXF1ZW5jeSwgTlVMTCk7CisgICAgcEJzc0luZm8tPmZyZXF1ZW5jeSA9IHdkLT5mcmVxdWVuY3k7CisgICAgcEJzc0luZm8tPmF0aW1XaW5kb3cgPSB3ZC0+c3RhLmF0aW1XaW5kb3c7CisKKyNpZmRlZiBaTV9FTkFCTEVfSUJTU19XUEEyUFNLCisgICAgaWYgKCB3ZC0+c3RhLmF1dGhNb2RlID09IFpNX0FVVEhfTU9ERV9XUEEyUFNLICkKKyAgICB7CisgICAgICAgIHU4X3QgcnNuWzY0XT0KKyAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBFbGVtZW50IElEICovCisgICAgICAgICAgICAgICAgICAgIDB4MzAsCisgICAgICAgICAgICAgICAgICAgIC8qIExlbmd0aCAqLworICAgICAgICAgICAgICAgICAgICAweDE0LAorICAgICAgICAgICAgICAgICAgICAvKiBWZXJzaW9uICovCisgICAgICAgICAgICAgICAgICAgIDB4MDEsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgIC8qIEdyb3VwIENpcGhlciBTdWl0ZSwgZGVmYXVsdD1US0lQICovCisgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MGYsIDB4YWMsIDB4MDQsCisgICAgICAgICAgICAgICAgICAgIC8qIFBhaXJ3aXNlIENpcGhlciBTdWl0ZSBDb3VudCAqLworICAgICAgICAgICAgICAgICAgICAweDAxLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAvKiBQYWlyd2lzZSBDaXBoZXIgU3VpdGUsIGRlZmF1bHQ9VEtJUCAqLworICAgICAgICAgICAgICAgICAgICAweDAwLCAweDBmLCAweGFjLCAweDAyLAorICAgICAgICAgICAgICAgICAgICAvKiBBdXRoZW50aWNhdGlvbiBhbmQgS2V5IE1hbmFnZW1lbnQgU3VpdGUgQ291bnQgKi8KKyAgICAgICAgICAgICAgICAgICAgMHgwMSwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgLyogQXV0aGVudGljYXRpb24gdHlwZSwgZGVmYXVsdD1QU0sgKi8KKyAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwZiwgMHhhYywgMHgwMiwKKyAgICAgICAgICAgICAgICAgICAgLyogUlNOIGNhcGFiaWxpdHkgKi8KKyAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMAorICAgICAgICB9OworCisgICAgICAgIC8qIE92ZXJ3cml0ZSBHcm91cCBDaXBoZXIgU3VpdGUgYnkgQVAncyBzZXR0aW5nICovCisgICAgICAgIHpmTWVtb3J5Q29weShyc24rNCwgemdXcGEyQWVzT3VpLCA0KTsKKworICAgICAgICBpZiAoIHdkLT5zdGEud2VwU3RhdHVzID09IFpNX0VOQ1JZUFRJT05fQUVTICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogT3ZlcndyaXRlIFBhaXJ3aXNlIENpcGhlciBTdWl0ZSBieSBBRVMgKi8KKyAgICAgICAgICAgIHpmTWVtb3J5Q29weShyc24rMTAsIHpnV3BhMkFlc091aSwgNCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBSU04gZWxlbWVudCBpZAorICAgICAgICBwQnNzSW5mby0+ZnJhbWVCb2R5W29mZnNldCsrXSA9IFpNX1dMQU5fRUlEX1JTTl9JRSA7CisKKyAgICAgICAgLy8gUlNOIGxlbmd0aAorICAgICAgICBwQnNzSW5mby0+ZnJhbWVCb2R5W29mZnNldCsrXSA9IHJzblsxXSA7CisKKyAgICAgICAgLy8gUlNOIGluZm9ybWF0aW9uCisgICAgICAgIGZvcihpPTA7IGk8cnNuWzFdOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHBCc3NJbmZvLT5mcmFtZUJvZHlbb2Zmc2V0KytdID0gcnNuW2krMl0gOworICAgICAgICB9CisKKyAgICAgICAgemZNZW1vcnlDb3B5KHBCc3NJbmZvLT5yc25JZSwgcnNuLCByc25bMV0rMik7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgemZJYnNzQ29ubmVjdE5ldHdvcmsoemRldl90KiBkZXYpCit7CisgICAgc3RydWN0IHpzQnNzSW5mbyogcEJzc0luZm87CisgICAgc3RydWN0IHpzQnNzSW5mbyB0bXBCc3NJbmZvOworICAgIHU4X3QgICBtYWNBZGRyWzZdLCBic3NpZFs2XSwgYnNzTm90Rm91bmQgPSBUUlVFOworICAgIHUxNl90ICBpLCBqPTEwMDsKKyAgICB1MTZfdCAgazsKKyAgICBzdHJ1Y3QgenNQYXJ0bmVyTm90aWZ5RXZlbnQgZXZlbnQ7CisgICAgdTMyX3QgIGNoYW5uZWxGbGFnczsKKyAgICB1MTZfdCAgb3Bwb3NpdGVXZXBTdGF0dXM7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgLyogY2hhbmdlIHN0YXRlIHRvIENPTk5FQ1RJTkcgYW5kIHN0b3AgdGhlIGNoYW5uZWwgc2Nhbm5pbmcgKi8KKyAgICB6ZkNoYW5nZUFkYXB0ZXJTdGF0ZShkZXYsIFpNX1NUQV9TVEFURV9DT05ORUNUSU5HKTsKKyAgICB6ZlBvd2VyU2F2aW5nTWdyV2FrZXVwKGRldik7CisKKyAgICAvKiBTZXQgVHhRcyBDV01JTiwgQ1dNQVgsIEFJRlMgYW5kIFRYTyB0byBXTUUgU1RBIGRlZmF1bHQuICovCisgICAgemZVcGRhdGVEZWZhdWx0UW9zUGFyYW1ldGVyKGRldiwgMCk7CisKKyAgICB3ZC0+c3RhLmJQcm90ZWN0aW9uTW9kZSA9IEZBTFNFOworICAgIHpmSHBTZXRTbG90VGltZShkZXYsIDEpOworCisgICAgLyogRVNTIGJpdCBvZmYgKi8KKyAgICB3ZC0+c3RhLmNhcGFiaWxpdHlbMF0gJj0gflpNX0JJVF8wOworICAgIC8qIElCU1MgYml0IG9uICovCisgICAgd2QtPnN0YS5jYXBhYmlsaXR5WzBdIHw9IFpNX0JJVF8xOworICAgIC8qIG5vdCBub3QgdXNlIHNob3J0IHNsb3QgdGltZSAqLworICAgIHdkLT5zdGEuY2FwYWJpbGl0eVsxXSAmPSB+Wk1fQklUXzI7CisKKyAgICB3ZC0+c3RhLndtZUNvbm5lY3RlZCA9IDA7CisgICAgd2QtPnN0YS5wc01nci50ZW1wV2FrZVVwID0gMDsKKyAgICB3ZC0+c3RhLnFvc0luZm8gPSAwOworICAgIHdkLT5zdGEuRW5hYmxlSFQgPSAwOworICAgIHdkLT5CYW5kV2lkdGg0MCA9IDA7CisgICAgd2QtPkV4dE9mZnNldCA9IDA7CisKKyAgICBpZiAoIHdkLT5zdGEuYnNzTGlzdC5ic3NDb3VudCApCisgICAgeworICAgICAgICAvL1Jlb3JkZXIgQnNzTGlzdCBieSBSU1NJLS1DV1lhbmcoKykKKyAgICAgICAgemZCc3NJbmZvUmVvcmRlckxpc3QoZGV2KTsKKworICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgIHBCc3NJbmZvID0gd2QtPnN0YS5ic3NMaXN0LmhlYWQ7CisKKyAgICAgICAgZm9yKGk9MDsgaTx3ZC0+c3RhLmJzc0xpc3QuYnNzQ291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gMjAwNzA4MDYgIzEgUHJpdmFjeSBiaXQKKyAgICAgICAgICAgIGlmICggcEJzc0luZm8tPmNhcGFiaWxpdHlbMF0gJiBaTV9CSVRfNCApCisgICAgICAgICAgICB7IC8vIFByaXZhY3kgSWJzcyBuZXR3b3JrCisvLyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJQcml2YWN5IGJpdCBvbiIpOworICAgICAgICAgICAgICAgIG9wcG9zaXRlV2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9XRVBfRU5BQkxFRDsKKworICAgICAgICAgICAgICAgIGlmICggcEJzc0luZm8tPnJzbkllWzFdICE9IDAgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAocEJzc0luZm8tPnJzbkllWzddID09IDB4MDEpIHx8IChwQnNzSW5mby0+cnNuSWVbN10gPT0gMHgwNSkgKQorICAgICAgICAgICAgICAgICAgICB7IC8vIFdFUC00MCAmIFdFUC0xMDQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiV0VQNDAgb3IgV0VQMTA0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHBvc2l0ZVdlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fV0VQX0VOQUJMRUQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHBCc3NJbmZvLT5yc25JZVs3XSA9PSAweDAyICkKKyAgICAgICAgICAgICAgICAgICAgeyAvLyBUS0lQCisvLyAgICAgICAgICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIlRLSVAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wcG9zaXRlV2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9US0lQOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCBwQnNzSW5mby0+cnNuSWVbN10gPT0gMHgwNCApCisgICAgICAgICAgICAgICAgICAgIHsgLy8gQUVTCisvLyAgICAgICAgICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIkNDTVAtQUVTIik7CisgICAgICAgICAgICAgICAgICAgICAgICBvcHBvc2l0ZVdlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fQUVTOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworLy8gICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiUHJpdmFjeSBiaXQgb2ZmIik7CisgICAgICAgICAgICAgICAgb3Bwb3NpdGVXZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1dFUF9ESVNBQkxFRDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCAoemZNZW1vcnlJc0VxdWFsKCYocEJzc0luZm8tPnNzaWRbMl0pLCB3ZC0+c3RhLnNzaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5zc2lkTGVuKSkmJgorICAgICAgICAgICAgICAgICAod2QtPnN0YS5zc2lkTGVuID09IHBCc3NJbmZvLT5zc2lkWzFdKSYmCisgICAgICAgICAgICAgICAgIChvcHBvc2l0ZVdlcFN0YXR1cyA9PSB3ZC0+c3RhLndlcFN0YXR1cykgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIENoZWNrIHN1cHBvcnQgbW9kZSAqLworICAgICAgICAgICAgICAgIGlmIChwQnNzSW5mby0+ZnJlcXVlbmN5ID4gMzAwMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoICAgKHBCc3NJbmZvLT5FbmFibGVIVCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHBCc3NJbmZvLT5hcENhcCAmIFpNX0FsbDExTl9BUCkgKSAvLzExbiBBUAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsRmxhZ3MgPSBDSEFOTkVMX0FfSFQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocEJzc0luZm8tPmVuYWJsZUhUNDAgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxGbGFncyB8PSBDSEFOTkVMX0hUNDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsRmxhZ3MgPSBDSEFOTkVMX0E7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoICAgKHBCc3NJbmZvLT5FbmFibGVIVCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHBCc3NJbmZvLT5hcENhcCAmIFpNX0FsbDExTl9BUCkgKSAvLzExbiBBUAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsRmxhZ3MgPSBDSEFOTkVMX0dfSFQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihwQnNzSW5mby0+ZW5hYmxlSFQ0MCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbEZsYWdzIHw9IENIQU5ORUxfSFQ0MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwQnNzSW5mby0+ZXh0U3VwcG9ydGVkUmF0ZXNbMV0gPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxGbGFncyA9IENIQU5ORUxfQjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbEZsYWdzID0gQ0hBTk5FTF9HOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCAgICgoY2hhbm5lbEZsYWdzID09IENIQU5ORUxfQikgJiYgKHdkLT5jb25uZWN0TW9kZSAmIFpNX0JJVF8wKSkKKyAgICAgICAgICAgICAgICAgICAgfHwgKChjaGFubmVsRmxhZ3MgPT0gQ0hBTk5FTF9HKSAmJiAod2QtPmNvbm5lY3RNb2RlICYgWk1fQklUXzEpKQorICAgICAgICAgICAgICAgICAgICB8fCAoKGNoYW5uZWxGbGFncyA9PSBDSEFOTkVMX0EpICYmICh3ZC0+Y29ubmVjdE1vZGUgJiBaTV9CSVRfMikpCisgICAgICAgICAgICAgICAgICAgIHx8ICgoY2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9IVDIwKSAmJiAod2QtPmNvbm5lY3RNb2RlICYgWk1fQklUXzMpKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwQnNzSW5mbyA9IHBCc3NJbmZvLT5uZXh0OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiBCeXBhc3MgREZTIGNoYW5uZWwgKi8KKyAgICAgICAgICAgICAgICBpZiAoemZIcElzRGZzQ2hhbm5lbE5DUyhkZXYsIHBCc3NJbmZvLT5mcmVxdWVuY3kpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiQnlwYXNzIERGUyBjaGFubmVsIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIGNoZWNrIElCU1MgYml0ICovCisgICAgICAgICAgICAgICAgaWYgKCBwQnNzSW5mby0+Y2FwYWJpbGl0eVswXSAmIFpNX0JJVF8xICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIG1heSBjaGVjayB0aW1lc3RhbXAgaGVyZSAqLworICAgICAgICAgICAgICAgICAgICBqID0gaTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwQnNzSW5mbyA9IHBCc3NJbmZvLT5uZXh0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKChqIDwgd2QtPnN0YS5ic3NMaXN0LmJzc0NvdW50KSAmJiAocEJzc0luZm8gIT0gTlVMTCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmd01lbW9yeUNvcHkoKHU4X3QqKSZ0bXBCc3NJbmZvLCAodThfdCopKHBCc3NJbmZvKSwgc2l6ZW9mKHN0cnVjdCB6c0Jzc0luZm8pKTsKKyAgICAgICAgICAgIHBCc3NJbmZvID0gJnRtcEJzc0luZm87CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwQnNzSW5mbyA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgIC8vaWYgKCBqIDwgd2QtPnN0YS5ic3NMaXN0LmJzc0NvdW50ICkKKyAgICAgICAgaWYgKHBCc3NJbmZvICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCByZXM7CisKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIklCU1MgZm91bmQiKTsKKworICAgICAgICAgICAgLyogRm91bmQgSUJTUywgcmVzZXQgYnNzTm90Rm91bmRDb3VudCAqLworICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIHdkLT5zdGEuYnNzTm90Rm91bmRDb3VudCA9IDA7CisgICAgICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgICAgICBic3NOb3RGb3VuZCA9IEZBTFNFOworICAgICAgICAgICAgd2QtPnN0YS5hdGltV2luZG93ID0gcEJzc0luZm8tPmF0aW1XaW5kb3c7CisgICAgICAgICAgICB3ZC0+ZnJlcXVlbmN5ID0gcEJzc0luZm8tPmZyZXF1ZW5jeTsKKyAgICAgICAgICAgIC8vd2QtPnN0YS5mbGFnRnJlcUNoYW5naW5nID0gMTsKKyAgICAgICAgICAgIHpmQ29yZVNldEZyZXF1ZW5jeShkZXYsIHdkLT5mcmVxdWVuY3kpOworICAgICAgICAgICAgemZVcGRhdGVCc3NpZChkZXYsIHBCc3NJbmZvLT5ic3NpZCk7CisgICAgICAgICAgICB6ZlJlc2V0U3VwcG9ydFJhdGUoZGV2LCBaTV9ERUZBVUxUX1NVUFBPUlRfUkFURV9aRVJPKTsKKyAgICAgICAgICAgIHpmVXBkYXRlU3VwcG9ydFJhdGUoZGV2LCBwQnNzSW5mby0+c3VwcG9ydGVkUmF0ZXMpOworICAgICAgICAgICAgemZVcGRhdGVTdXBwb3J0UmF0ZShkZXYsIHBCc3NJbmZvLT5leHRTdXBwb3J0ZWRSYXRlcyk7CisgICAgICAgICAgICB3ZC0+YmVhY29uSW50ZXJ2YWwgPSBwQnNzSW5mby0+YmVhY29uSW50ZXJ2YWxbMF0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodTE2X3QpIHBCc3NJbmZvLT5iZWFjb25JbnRlcnZhbFsxXSkgPDwgOCk7CisKKyAgICAgICAgICAgIGlmICh3ZC0+YmVhY29uSW50ZXJ2YWwgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+YmVhY29uSW50ZXJ2YWwgPSAxMDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIHJzbiBpbmZvcm1hdGlvbiBlbGVtZW50ICovCisgICAgICAgICAgICBpZiAoIHBCc3NJbmZvLT5yc25JZVsxXSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6Zk1lbW9yeUNvcHkod2QtPnN0YS5yc25JZSwgcEJzc0luZm8tPnJzbkllLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQnNzSW5mby0+cnNuSWVbMV0rMik7CisKKyNpZmRlZiBaTV9FTkFCTEVfSUJTU19XUEEyUFNLCisgICAgICAgICAgICAgICAgLyogSWYgbm90IHVzZSBSU05BICwgcnVuIHRyYWRpdGlvbmFsICovCisgICAgICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgICAgICB3ZC0+c3RhLmlic3NXcGEyUHNrID0gMTsKKyAgICAgICAgICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5yc25JZVsxXSA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIHByaXZhY3kgYml0ICovCisgICAgICAgICAgICBpZiAoIHBCc3NJbmZvLT5jYXBhYmlsaXR5WzBdICYgWk1fQklUXzQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT5zdGEuY2FwYWJpbGl0eVswXSB8PSBaTV9CSVRfNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+c3RhLmNhcGFiaWxpdHlbMF0gJj0gflpNX0JJVF80OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBwcmVhbWJsZSB0eXBlICovCisgICAgICAgICAgICB3ZC0+cHJlYW1ibGVUeXBlSW5Vc2VkID0gd2QtPnByZWFtYmxlVHlwZTsKKyAgICAgICAgICAgIGlmICggd2QtPnByZWFtYmxlVHlwZUluVXNlZCA9PSBaTV9QUkVBTUJMRV9UWVBFX0FVVE8gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChwQnNzSW5mby0+Y2FwYWJpbGl0eVswXSAmIFpNX0JJVF81KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnByZWFtYmxlVHlwZUluVXNlZCA9IFpNX1BSRUFNQkxFX1RZUEVfU0hPUlQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdkLT5wcmVhbWJsZVR5cGVJblVzZWQgPSBaTV9QUkVBTUJMRV9UWVBFX0xPTkc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2QtPnByZWFtYmxlVHlwZUluVXNlZCA9PSBaTV9QUkVBTUJMRV9UWVBFX0xPTkcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5jYXBhYmlsaXR5WzBdICY9IH5aTV9CSVRfNTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+c3RhLmNhcGFiaWxpdHlbMF0gfD0gWk1fQklUXzU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5U2l6ZSA9IHBCc3NJbmZvLT5mcmFtZUJvZHlzaXplICsgMTI7CisKKyAgICAgICAgICAgIGlmICh3ZC0+c3RhLmJlYWNvbkZyYW1lQm9keVNpemUgPiBaTV9DQUNIRURfRlJBTUVCT0RZX1NJWkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlTaXplID0gWk1fQ0FDSEVEX0ZSQU1FQk9EWV9TSVpFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGs9MDsgazw4OyBrKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlba10gPSBwQnNzSW5mby0+dGltZVN0YW1wW2tdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlbOF0gPSBwQnNzSW5mby0+YmVhY29uSW50ZXJ2YWxbMF07CisgICAgICAgICAgICB3ZC0+c3RhLmJlYWNvbkZyYW1lQm9keVs5XSA9IHBCc3NJbmZvLT5iZWFjb25JbnRlcnZhbFsxXTsKKyAgICAgICAgICAgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5WzEwXSA9IHBCc3NJbmZvLT5jYXBhYmlsaXR5WzBdOworICAgICAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlbMTFdID0gcEJzc0luZm8tPmNhcGFiaWxpdHlbMV07CisgICAgICAgICAgICAvL2ZvciAoaz0xMjsgazx3ZC0+c3RhLmJlYWNvbkZyYW1lQm9keVNpemU7IGsrKykKKyAgICAgICAgICAgIGZvciAoaz0wOyBrPHBCc3NJbmZvLT5mcmFtZUJvZHlzaXplOyBrKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlbaysxMl0gPSBwQnNzSW5mby0+ZnJhbWVCb2R5W2tdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgcmVzID0gemZTdGFTZXRPcHBvc2l0ZUluZm9Gcm9tQlNTSW5mbyhkZXYsIHBCc3NJbmZvKTsKKyAgICAgICAgICAgIGlmICggcmVzID09IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmTWVtb3J5Q29weShldmVudC5ic3NpZCwgKHU4X3QgKikocEJzc0luZm8tPmJzc2lkKSwgNik7CisgICAgICAgICAgICAgICAgemZNZW1vcnlDb3B5KGV2ZW50LnBlZXJNYWNBZGRyLCAodThfdCAqKShwQnNzSW5mby0+bWFjYWRkciksIDYpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICAgICAgLy96ZndJYnNzUGFydG5lck5vdGlmeShkZXYsIDEsICZldmVudCk7CisgICAgICAgICAgICBnb3RvIGNvbm5lY3RfZG9uZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIElCU1Mgbm90IGZvdW5kICovCisgICAgaWYgKCBic3NOb3RGb3VuZCApCisgICAgeworI2lmZGVmIFpNX0VOQUJMRV9JQlNTX1dQQTJQU0sKKyAgICAgICAgdTE2X3Qgb2Zmc2V0IDsKKyNlbmRpZgorICAgICAgICBpZiAoIHdkLT5zdGEuaWJzc0pvaW5Pbmx5ICkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiSUJTUyBqb2luIG9ubHkuLi5yZXRyeS4uLiIpOworICAgICAgICAgICAgZ290byByZXRyeV9pYnNzOworICAgICAgICB9CisKKyAgICAgICAgaWYod2QtPnN0YS5ic3NOb3RGb3VuZENvdW50PDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJJQlNTIG5vdCBmb3VuZCwgZG8gc2l0ZXN1cnZleSEhICBic3NOb3RGb3VuZENvdW50PSIsIHdkLT5zdGEuYnNzTm90Rm91bmRDb3VudCk7CisgICAgICAgICAgICB3ZC0+c3RhLmJzc05vdEZvdW5kQ291bnQrKzsKKyAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICBnb3RvIHJldHJ5X2lic3M7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgLyogRmFpbCBJQlNTIGZvdW5kLCBUT0RPIGNyZWF0ZSBJQlNTICovCisgICAgICAgICAgICB3ZC0+c3RhLmJzc05vdEZvdW5kQ291bnQgPSAwOworICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgfQorCisKKyAgICAgICAgaWYgKHpmSHBJc0Rmc0NoYW5uZWwoZGV2LCB3ZC0+ZnJlcXVlbmN5KSkKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPmZyZXF1ZW5jeSA9IHpmSHBGaW5kRmlyc3ROb25EZnNDaGFubmVsKGRldiwgd2QtPmZyZXF1ZW5jeSA+IDMwMDApOworICAgICAgICB9CisKKyAgICAgICAgaWYoIHdkLT53cy5hdXRvU2V0RnJlcXVlbmN5ID09IDAgKQorICAgICAgICB7IC8qIEF1dG8gc2V0IGZyZXF1ZW5jeSAqLworICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiQ3JlYXRlIEFkIEhvYyBOZXR3b3JrIEJhbmQgIiwgd2QtPndzLmFkaG9jTW9kZSk7CisgICAgICAgICAgICB3ZC0+ZnJlcXVlbmN5ID0gemZGaW5kQ2xlYW5GcmVxdWVuY3koZGV2LCB3ZC0+d3MuYWRob2NNb2RlKTsKKyAgICAgICAgICAgIHdkLT53cy5hdXRvU2V0RnJlcXVlbmN5ID0gMHhmZjsKKyAgICAgICAgfQorICAgICAgICB6bV9kZWJ1Z19tc2cxKCJJQlNTIG5vdCBmb3VuZCwgY3JlYXRlZCBvbmUgaW4gY2hhbm5lbCAiLCB3ZC0+ZnJlcXVlbmN5KTsKKworICAgICAgICB3ZC0+c3RhLmlic3NCc3NJc0NyZWF0b3IgPSAxOworCisgICAgICAgIC8vd2QtPnN0YS5mbGFnRnJlcUNoYW5naW5nID0gMTsKKyAgICAgICAgemZDb3JlU2V0RnJlcXVlbmN5KGRldiwgd2QtPmZyZXF1ZW5jeSk7CisgICAgICAgIGlmICh3ZC0+c3RhLmJEZXNpcmVkQnNzaWQgPT0gVFJVRSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChrPTA7IGs8NjsgaysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJzc2lkW2tdID0gd2QtPnN0YS5kZXNpcmVkQnNzaWRba107CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAjaWYgMQorICAgICAgICAgICAgbWFjQWRkclswXSA9ICh3ZC0+bWFjQWRkclswXSAmIDB4ZmYpOworICAgICAgICAgICAgbWFjQWRkclsxXSA9ICh3ZC0+bWFjQWRkclswXSA+PiA4KTsKKyAgICAgICAgICAgIG1hY0FkZHJbMl0gPSAod2QtPm1hY0FkZHJbMV0gJiAweGZmKTsKKyAgICAgICAgICAgIG1hY0FkZHJbM10gPSAod2QtPm1hY0FkZHJbMV0gPj4gOCk7CisgICAgICAgICAgICBtYWNBZGRyWzRdID0gKHdkLT5tYWNBZGRyWzJdICYgMHhmZik7CisgICAgICAgICAgICBtYWNBZGRyWzVdID0gKHdkLT5tYWNBZGRyWzJdID4+IDgpOworICAgICAgICAgICAgemZHZW5lcmF0ZVJhbmRvbUJTU0lEKGRldiwgKHU4X3QgKil3ZC0+bWFjQWRkciwgKHU4X3QgKilic3NpZCk7CisgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgZm9yIChrPTA7IGs8NjsgaysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJzc2lkW2tdID0gKHU4X3QpIHpmR2V0UmFuZG9tTnVtYmVyKGRldiwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBic3NpZFswXSAmPSB+Wk1fQklUXzA7CisgICAgICAgICAgICBic3NpZFswXSB8PSBaTV9CSVRfMTsKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgemZVcGRhdGVCc3NpZChkZXYsIGJzc2lkKTsKKyAgICAgICAgLy93ZC0+c3RhLmF0aW1XaW5kb3cgPSAweDBhOworCisgICAgICAgIC8qIHJhdGUgaW5mb3JtYXRpb24gKi8KKyAgICAgICAgaWYod2QtPmZyZXF1ZW5jeSA8PSBaTV9DSF9HXzE0KSAgLy8gMi40IEdIeiAgYitnCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggd2QtPndmYy5iSWJzc0dNb2RlCisgICAgICAgICAgICAgICAgICYmICh3ZC0+c3VwcG9ydE1vZGUgJiAoWk1fV0lSRUxFU1NfTU9ERV8yNF81NHxaTV9XSVJFTEVTU19NT0RFXzI0X04pKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZSZXNldFN1cHBvcnRSYXRlKGRldiwgWk1fREVGQVVMVF9TVVBQT1JUX1JBVEVfSUJTU19BRyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZSZXNldFN1cHBvcnRSYXRlKGRldiwgWk1fREVGQVVMVF9TVVBQT1JUX1JBVEVfSUJTU19CKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHpmUmVzZXRTdXBwb3J0UmF0ZShkZXYsIFpNX0RFRkFVTFRfU1VQUE9SVF9SQVRFX0lCU1NfQUcpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB3ZC0+c3RhLndlcFN0YXR1cyA9PSBaTV9FTkNSWVBUSU9OX1dFUF9ESVNBQkxFRCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHdkLT5zdGEuY2FwYWJpbGl0eVswXSAmPSB+Wk1fQklUXzQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+c3RhLmNhcGFiaWxpdHlbMF0gfD0gWk1fQklUXzQ7CisgICAgICAgIH0KKworICAgICAgICB3ZC0+cHJlYW1ibGVUeXBlSW5Vc2VkID0gd2QtPnByZWFtYmxlVHlwZTsKKyAgICAgICAgaWYgKHdkLT5wcmVhbWJsZVR5cGVJblVzZWQgPT0gWk1fUFJFQU1CTEVfVFlQRV9MT05HKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+c3RhLmNhcGFiaWxpdHlbMF0gJj0gflpNX0JJVF81OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPnByZWFtYmxlVHlwZUluVXNlZCA9IFpNX1BSRUFNQkxFX1RZUEVfU0hPUlQ7CisgICAgICAgICAgICB3ZC0+c3RhLmNhcGFiaWxpdHlbMF0gfD0gWk1fQklUXzU7CisgICAgICAgIH0KKworICAgICAgICB6ZklCU1NTZXR1cEJzc0Rlc2MoZGV2KTsKKworI2lmZGVmIFpNX0VOQUJMRV9JQlNTX1dQQTJQU0sKKworICAgICAgICAvLyAyMDA3MDQxMSBBZGQgV1BBMlBTSyBpbmZvcm1hdGlvbiB0byBpdHMgSUJTUyBuZXR3b3JrICEhIQorICAgICAgICBvZmZzZXQgPSAwIDsKKworICAgICAgICAvKiB0aW1lc3RhbXAgKi8KKyAgICAgICAgb2Zmc2V0ICs9IDggOworCisgICAgICAgIC8qIGJlYWNvbiBpbnRlcnZhbCAqLworICAgICAgICB3ZC0+c3RhLmJlYWNvbkZyYW1lQm9keVtvZmZzZXQrK10gPSAodThfdCkod2QtPmJlYWNvbkludGVydmFsKSA7CisgICAgICAgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5W29mZnNldCsrXSA9ICh1OF90KSgod2QtPmJlYWNvbkludGVydmFsKSA+PiA4KSA7CisKKyAgICAgICAgLyogY2FwYWJpbGl0eSBpbmZvcm1hdGlvbiAqLworICAgICAgICB3ZC0+c3RhLmJlYWNvbkZyYW1lQm9keVtvZmZzZXQrK10gPSB3ZC0+c3RhLmNhcGFiaWxpdHlbMF0gOworICAgICAgICB3ZC0+c3RhLmJlYWNvbkZyYW1lQm9keVtvZmZzZXQrK10gPSB3ZC0+c3RhLmNhcGFiaWxpdHlbMV0gOworICAgICAgICAjaWYgMAorICAgICAgICAvKiBzc2lkICovCisgICAgICAgIC8vIHNzaWQgZWxlbWVudCBpZAorICAgICAgICB3ZC0+c3RhLmJlYWNvbkZyYW1lQm9keVtvZmZzZXQrK10gPSBaTV9XTEFOX0VJRF9TU0lEIDsKKyAgICAgICAgLy8gc3NpZCBsZW5ndGgKKyAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlbb2Zmc2V0KytdID0gd2QtPnN0YS5zc2lkTGVuIDsKKyAgICAgICAgLy8gc3NpZCBpbmZvcm1hdGlvbgorICAgICAgICBmb3IoaT0wOyBpPHdkLT5zdGEuc3NpZExlbjsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+c3RhLmJlYWNvbkZyYW1lQm9keVtvZmZzZXQrK10gPSB3ZC0+c3RhLnNzaWRbaV0gOworICAgICAgICB9CisKKyAgICAgICAgLyogc3VwcG9ydCByYXRlICovCisgICAgICAgIHJhdGVTZXQgPSBaTV9SQVRFX1NFVF9DQ0sgOworICAgICAgICBpZiAoIChyYXRlU2V0ID09IFpNX1JBVEVfU0VUX09GRE0pJiYoKHdkLT5nUmF0ZSAmIDB4ZmYpID09IDApICkKKyAgICAgICAgeworICAgICAgICAgICAgb2Zmc2V0ICs9IDAgOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gc3VwcG9ydCByYXRlIGVsZW1lbnQgaWQKKyAgICAgICAgICAgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5W29mZnNldCsrXSA9IFpNX1dMQU5fRUlEX1NVUFBPUlRfUkFURSA7CisKKyAgICAgICAgICAgIC8vIHN1cHBvcnQgcmF0ZSBsZW5ndGgKKyAgICAgICAgICAgIGxlbk9mZnNldCA9IG9mZnNldCsrOworCisgICAgICAgICAgICAvLyBzdXBwb3J0IHJhdGUgaW5mb3JtYXRpb24KKyAgICAgICAgICAgIGZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKHdkLT5iUmF0ZSAmICgweDE8PGkpKSA9PSAoMHgxPDxpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5W29mZnNldCsrXSA9CisgICAgICAgICAgICAgICAgCSAgICB6ZzExYlJhdGVUYmxbaV0rKCh3ZC0+YlJhdGVCYXNpYyAmICgweDE8PGkpKTw8KDctaSkpIDsKKyAgICAgICAgICAgICAgICAgICAgbGVuKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBzdXBwb3J0IHJhdGUgbGVuZ3RoCisgICAgICAgICAgICB3ZC0+c3RhLmJlYWNvbkZyYW1lQm9keVtsZW5PZmZzZXRdID0gbGVuIDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIERTIHBhcmFtZXRlciBzZXQgKi8KKyAgICAgICAgLy8gRFMgcGFyYW1ldGVyIHNldCBlbGVtZXQgaWQKKyAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlbb2Zmc2V0KytdID0gWk1fV0xBTl9FSURfRFMgOworCisgICAgICAgIC8vIERTIHBhcmFtZXRlciBzZXQgbGVuZ3RoCisgICAgICAgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5W29mZnNldCsrXSA9IDEgOworCisgICAgICAgIC8vIERTIHBhcmFtZXRlciBzZXQgaW5mb3JtYXRpb24KKyAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlbb2Zmc2V0KytdID0KKyAgICAgICAgIAl6ZkNoRnJlcVRvTnVtKHdkLT5mcmVxdWVuY3ksIE5VTEwpIDsKKworICAgICAgICAvKiBJQlNTIHBhcmFtZXRlciBzZXQgKi8KKyAgICAgICAgLy8gSUJTUyBwYXJhbWV0ZXIgc2V0IGVsZW1lbnQgaWQKKyAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlbb2Zmc2V0KytdID0gWk1fV0xBTl9FSURfSUJTUyA7CisKKyAgICAgICAgLy8gSUJTUyBwYXJhbWV0ZXIgc2V0IGxlbmd0aAorICAgICAgICB3ZC0+c3RhLmJlYWNvbkZyYW1lQm9keVtvZmZzZXQrK10gPSAyIDsKKworICAgICAgICAvLyBJQlNTIHBhcmFtZXRlciBzZXQgaW5mb3JtYXRpb24KKyAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlbb2Zmc2V0XSA9IHdkLT5zdGEuYXRpbVdpbmRvdyA7CisgICAgICAgIG9mZnNldCArPSAyIDsKKworICAgICAgICAvKiBFUlAgSW5mb3JtYXRpb24gYW5kIEV4dGVuZGVkIFN1cHBvcnRlZCBSYXRlcyAqLworICAgICAgICBpZiAoIHdkLT53ZmMuYklic3NHTW9kZQorICAgICAgICAgICAgICYmICh3ZC0+c3VwcG9ydE1vZGUgJiAoWk1fV0lSRUxFU1NfTU9ERV8yNF81NHxaTV9XSVJFTEVTU19NT0RFXzI0X04pKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEVSUCBJbmZvcm1hdGlvbiAqLworICAgICAgICAgICAgd2QtPmVycEVsZW1lbnQgPSAwOworICAgICAgICAgICAgLy8gRVJQIGVsZW1lbnQgaWQKKyAgICAgICAgICAgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5W29mZnNldCsrXSA9IFpNX1dMQU5fRUlEX0VSUCA7CisKKyAgICAgICAgICAgIC8vIEVSUCBsZW5ndGgKKyAgICAgICAgICAgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5W29mZnNldCsrXSA9IDEgOworCisgICAgICAgICAgICAvLyBFUlAgaW5mb3JtYXRpb24KKyAgICAgICAgICAgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5W29mZnNldCsrXSA9IHdkLT5lcnBFbGVtZW50IDsKKworICAgICAgICAgICAgLyogRXh0ZW5kZWQgU3VwcG9ydGVkIFJhdGVzICovCisgICAgICAgICAgICBpZiAoIChyYXRlU2V0ID09IFpNX1JBVEVfU0VUX09GRE0pJiYoKHdkLT5nUmF0ZSAmIDB4ZmYpID09IDApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMCA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGVuID0gMCA7CisKKyAgICAgICAgICAgICAgICAvLyBFeHRlbmRlZCBTdXBwb3J0ZWQgUmF0ZXMgZWxlbWVudCBpZAorICAgICAgICAgICAgICAgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5W29mZnNldCsrXSA9IFpNX1dMQU5fRUlEX0VYVEVOREVEX1JBVEUgOworCisgICAgICAgICAgICAgICAgLy8gRXh0ZW5kZWQgU3VwcG9ydGVkIFJhdGVzIGxlbmd0aAorICAgICAgICAgICAgICAgIGxlbk9mZnNldCA9IG9mZnNldCsrIDsKKworICAgICAgICAgICAgICAgIC8vIEV4dGVuZGVkIFN1cHBvcnRlZCBSYXRlcyBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPDg7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICgod2QtPmdSYXRlICYgKDB4MTw8aSkpID09ICgweDE8PGkpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLmJlYWNvbkZyYW1lQm9keVtvZmZzZXQrK10gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpnMTFnUmF0ZVRibFtpXSsoKHdkLT5nUmF0ZUJhc2ljICYgKDB4MTw8aSkpPDwoNy1pKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGV4dGVuZGVkIHN1cHBvcnQgcmF0ZSBsZW5ndGgKKyAgICAgICAgICAgIAkgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5W2xlbk9mZnNldF0gPSBsZW4gOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICNlbmRpZgorCisgICAgICAgIC8qIFJTTiA6IGltcG9ydGFudCBpbmZvcm1hdGlvbiBpbmZsdWVuY2UgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBJQlNTIG5ldHdvcmsgKi8KKyAgICAgICAgaWYgKCB3ZC0+c3RhLmF1dGhNb2RlID09IFpNX0FVVEhfTU9ERV9XUEEyUFNLICkKKyAgICAgICAgeworICAgICAgICAgICAgdThfdCBmcmFtZVR5cGUgPSBaTV9XTEFOX0ZSQU1FX1RZUEVfQVVUSCA7CisgICAgICAgICAgICB1OF90ICAgIHJzbls2NF09CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbGVtZW50IElEICovCisgICAgICAgICAgICAgICAgICAgICAgICAweDMwLAorICAgICAgICAgICAgICAgICAgICAgICAgLyogTGVuZ3RoICovCisgICAgICAgICAgICAgICAgICAgICAgICAweDE0LAorICAgICAgICAgICAgICAgICAgICAgICAgLyogVmVyc2lvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdyb3VwIENpcGhlciBTdWl0ZSwgZGVmYXVsdD1US0lQICovCisgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDBmLCAweGFjLCAweDA0LAorICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFpcndpc2UgQ2lwaGVyIFN1aXRlIENvdW50ICovCisgICAgICAgICAgICAgICAgICAgICAgICAweDAxLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFpcndpc2UgQ2lwaGVyIFN1aXRlLCBkZWZhdWx0PVRLSVAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MGYsIDB4YWMsIDB4MDIsCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBBdXRoZW50aWNhdGlvbiBhbmQgS2V5IE1hbmFnZW1lbnQgU3VpdGUgQ291bnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBBdXRoZW50aWNhdGlvbiB0eXBlLCBkZWZhdWx0PVBTSyAqLworICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwZiwgMHhhYywgMHgwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJTTiBjYXBhYmlsaXR5ICovCisgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDAwCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICAvKiBPdmVyd3JpdGUgR3JvdXAgQ2lwaGVyIFN1aXRlIGJ5IEFQJ3Mgc2V0dGluZyAqLworICAgICAgICAgICAgemZNZW1vcnlDb3B5KHJzbis0LCB6Z1dwYTJBZXNPdWksIDQpOworCisgICAgICAgICAgICBpZiAoIHdkLT5zdGEud2VwU3RhdHVzID09IFpNX0VOQ1JZUFRJT05fQUVTICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBPdmVyd3JpdGUgUGFpcndpc2UgQ2lwaGVyIFN1aXRlIGJ5IEFFUyAqLworICAgICAgICAgICAgICAgIHpmTWVtb3J5Q29weShyc24rMTAsIHpnV3BhMkFlc091aSwgNCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFJTTiBlbGVtZW50IGlkCisgICAgICAgICAgICB3ZC0+c3RhLmJlYWNvbkZyYW1lQm9keVtvZmZzZXQrK10gPSBaTV9XTEFOX0VJRF9SU05fSUUgOworCisgICAgICAgICAgICAvLyBSU04gbGVuZ3RoCisgICAgICAgICAgICB3ZC0+c3RhLmJlYWNvbkZyYW1lQm9keVtvZmZzZXQrK10gPSByc25bMV0gOworCisgICAgICAgICAgICAvLyBSU04gaW5mb3JtYXRpb24KKyAgICAgICAgICAgIGZvcihpPTA7IGk8cnNuWzFdOyBpKyspCisgICAgICAgICAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlbb2Zmc2V0KytdID0gcnNuW2krMl0gOworCisgICAgICAgICAgICB6Zk1lbW9yeUNvcHkod2QtPnN0YS5yc25JZSwgcnNuLCByc25bMV0rMik7CisKKyNpZmRlZiBaTV9FTkFCTEVfSUJTU19XUEEyUFNLCisgICAgICAgICAgICAvKiBJZiBub3QgdXNlIFJTTkEgLCBydW4gdHJhZGl0aW9uYWwgKi8KKyAgICAgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICB3ZC0+c3RhLmlic3NXcGEyUHNrID0gMTsKKyAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgICNpZiAwCisgICAgICAgIC8qIEhUIENhcGFiaWxpdGllcyBJbmZvICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHU4X3QgT1VJWzNdID0geyAweDAgLCAweDkwICwgMHg0QyB9IDsKKworICAgICAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlbb2Zmc2V0KytdID0gWk1fV0xBTl9FSURfV1BBX0lFIDsKKworICAgICAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlbb2Zmc2V0KytdID0gd2QtPnN0YS5IVENhcC5EYXRhLkxlbmd0aCArIDQgOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5W29mZnNldCsrXSA9IE9VSVtpXSA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5W29mZnNldCsrXSA9IHdkLT5zdGEuSFRDYXAuRGF0YS5FbGVtZW50SUQgOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjY7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+c3RhLmJlYWNvbkZyYW1lQm9keVtvZmZzZXQrK10gPSB3ZC0+c3RhLkhUQ2FwLkJ5dGVbaSsyXSA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBFeHRlbmRlZCBIVCBDYXBhYmlsaXRpZXMgSW5mbyAqLworICAgICAgICB7CisgICAgICAgICAgICB1OF90IE9VSVszXSA9IHsgMHgwICwgMHg5MCAsIDB4NEMgfSA7CisKKyAgICAgICAgICAgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5W29mZnNldCsrXSA9IFpNX1dMQU5fRUlEX1dQQV9JRSA7CisKKyAgICAgICAgICAgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5W29mZnNldCsrXSA9IHdkLT5zdGEuRXh0SFRDYXAuRGF0YS5MZW5ndGggKyA0IDsKKworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+c3RhLmJlYWNvbkZyYW1lQm9keVtvZmZzZXQrK10gPSBPVUlbaV0gOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3ZC0+c3RhLmJlYWNvbkZyYW1lQm9keVtvZmZzZXQrK10gPSB3ZC0+c3RhLkV4dEhUQ2FwLkRhdGEuRWxlbWVudElEIDsKKworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDIyOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlbb2Zmc2V0KytdID0gd2QtPnN0YS5FeHRIVENhcC5CeXRlW2krMl0gOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICNlbmRpZgorCisgICAgICAgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5U2l6ZSA9IG9mZnNldCA7CisKKyAgICAgICAgaWYgKHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5U2l6ZSA+IFpNX0NBQ0hFRF9GUkFNRUJPRFlfU0laRSkKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlTaXplID0gWk1fQ0FDSEVEX0ZSQU1FQk9EWV9TSVpFOworICAgICAgICB9CisKKyAgICAgICAgLy8gMjAwNzA0MTYgTGV0IENyZWF0ZSBJQlNTIG5ldHdvcmsgY291bGQgZW50ZXIgdGhlIHpmd0lic3NQYXJ0bmVyTm90aWZ5IGZ1bmN0aW9uCisgICAgICAgIC8vIGJzc05vdEZvdW5kID0gRkFMU0UgOworCisgICAgICAgIHByaW50aygiVGhlIGNhcGFiaWxpdHkgaW5mbyAxID0gJTAyeFxuIiwgd2QtPnN0YS5jYXBhYmlsaXR5WzBdKSA7CisgICAgICAgIHByaW50aygiVGhlIGNhcGFiaWxpdHkgaW5mbyAyID0gJTAyeFxuIiwgd2QtPnN0YS5jYXBhYmlsaXR5WzFdKSA7CisgICAgICAgIGZvcihrPTA7IGs8d2QtPnN0YS5iZWFjb25GcmFtZUJvZHlTaXplOyBrKyspCisgICAgICAgIHsKKwkgICAgIHByaW50aygiJTAyeCAiLCB3ZC0+c3RhLmJlYWNvbkZyYW1lQm9keVtrXSkgOworICAgICAgICB9CisgICAgICAgICNpZiAwCisgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHpmTWVtb3J5Q29weShldmVudC5ic3NpZCwgKHU4X3QgKilic3NpZCwgNik7CisgICAgICAgIHpmTWVtb3J5Q29weShldmVudC5wZWVyTWFjQWRkciwgKHU4X3QgKil3ZC0+bWFjQWRkciwgNik7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICNlbmRpZgorI2VuZGlmCisKKyAgICAgICAgLy96bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAvL3dkLT5zdGEuaWJzc1BhcnRuZXJTdGF0dXMgPSBaTV9JQlNTX1BBUlRORVJfTE9TVDsKKyAgICAgICAgLy96bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB3ZC0+c3RhLmlic3NCc3NJc0NyZWF0b3IgPSAwOworICAgIH0KKworY29ubmVjdF9kb25lOgorICAgIHpmSHBFbmFibGVCZWFjb24oZGV2LCBaTV9NT0RFX0lCU1MsIHdkLT5iZWFjb25JbnRlcnZhbCwgd2QtPmR0aW0sICh1OF90KXdkLT5zdGEuYXRpbVdpbmRvdyk7CisgICAgemZTdGFTZW5kQmVhY29uKGRldik7IC8vIFJlZnJlc2ggQmVhY29uIGNvbnRlbnQgZm9yIFpEMTIxMUIgSGFsUGx1cworICAgIHpmSHBTZXRBdGltV2luZG93KGRldiwgd2QtPnN0YS5hdGltV2luZG93KTsKKworICAgIC8vIFN0YXJ0IHRoZSBJQlNTIHRpbWVyIHRvIG1vbml0b3IgZm9yIG5ldyBzdGF0aW9ucworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgemZUaW1lclNjaGVkdWxlKGRldiwgWk1fRVZFTlRfSUJTU19NT05JVE9SLCBaTV9USUNLX0lCU1NfTU9OSVRPUik7CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworCisgICAgaWYgKHdkLT56ZmNiQ29ubmVjdE5vdGlmeSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgd2QtPnpmY2JDb25uZWN0Tm90aWZ5KGRldiwgWk1fU1RBVFVTX01FRElBX0NPTk5FQ1QsIHdkLT5zdGEuYnNzaWQpOworICAgIH0KKyAgICB6ZkNoYW5nZUFkYXB0ZXJTdGF0ZShkZXYsIFpNX1NUQV9TVEFURV9DT05ORUNURUQpOworICAgIHdkLT5zdGEuY29ublBvd2VySW5IYWxmRGJtID0gemZIcEdldFRyYW5zbWl0UG93ZXIoZGV2KTsKKworI2lmZGVmIFpNX0VOQUJMRV9JQlNTX0RFTEFZRURfSk9JTl9JTkRJQ0FUSU9OCisgICAgaWYgKCAhYnNzTm90Rm91bmQgKQorICAgIHsKKyAgICAgICAgd2QtPnN0YS5pYnNzRGVsYXllZEluZCA9IDE7CisgICAgICAgIHpmTWVtb3J5Q29weSgodThfdCAqKSZ3ZC0+c3RhLmlic3NEZWxheWVkSW5kRXZlbnQsICh1OF90ICopJmV2ZW50LCBzaXplb2Yoc3RydWN0IHpzUGFydG5lck5vdGlmeUV2ZW50KSk7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoICFic3NOb3RGb3VuZCApCisgICAgeworICAgICAgICBpZiAod2QtPnpmY2JJYnNzUGFydG5lck5vdGlmeSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+emZjYklic3NQYXJ0bmVyTm90aWZ5KGRldiwgMSwgJmV2ZW50KTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuOworCityZXRyeV9pYnNzOgorICAgIHpmQ2hhbmdlQWRhcHRlclN0YXRlKGRldiwgWk1fU1RBX1NUQVRFX0NPTk5FQ1RJTkcpOworICAgIHpmU3RhQ29ubmVjdEZhaWwoZGV2LCBaTV9TVEFUVVNfTUVESUFfRElTQ09OTkVDVF9OT1RfRk9VTkQsIHdkLT5zdGEuYnNzaWQsIDApOworICAgIHJldHVybjsKK30KKwordm9pZCB6ZlN0YVByb2Nlc3NBdGltKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bV9kZWJ1Z19tc2cwKCJSZWNlaXZpbmcgQXRpbSB3aW5kb3cgbm90aWZpY2F0aW9uIik7CisKKyAgICB3ZC0+c3RhLnJlY3ZBdGltID0gMTsKK30KKworc3RhdGljIHN0cnVjdCB6c0Jzc0luZm8qIHpmSW5mcmFGaW5kQVBUb0Nvbm5lY3QoemRldl90KiBkZXYsCisgICAgICAgIHN0cnVjdCB6c0Jzc0luZm8qIGNhbmRpZGF0ZUJzcykKK3sKKyAgICBzdHJ1Y3QgenNCc3NJbmZvKiBwQnNzSW5mbzsKKyAgICBzdHJ1Y3QgenNCc3NJbmZvKiBwTm93QnNzSW5mbz1OVUxMOworICAgIHUxNl90IGk7CisgICAgdTE2X3QgcmV0LCBhcFdlcFN0YXR1czsKKyAgICB1MzJfdCBrOworICAgIHUzMl90IGNoYW5uZWxGbGFnczsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHBCc3NJbmZvID0gd2QtPnN0YS5ic3NMaXN0LmhlYWQ7CisKKyAgICBmb3IoaT0wOyBpPHdkLT5zdGEuYnNzTGlzdC5ic3NDb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKCBwQnNzSW5mby0+Y2FwYWJpbGl0eVswXSAmIFpNX0JJVF80ICkKKyAgICAgICAgeworICAgICAgICAgICAgYXBXZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1dFUF9FTkFCTEVEOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYXBXZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1dFUF9ESVNBQkxFRDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggKCh6Zk1lbW9yeUlzRXF1YWwoJihwQnNzSW5mby0+c3NpZFsyXSksIHdkLT5zdGEuc3NpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnNzaWRMZW4pKSYmCisgICAgICAgICAgICAgICh3ZC0+c3RhLnNzaWRMZW4gPT0gcEJzc0luZm8tPnNzaWRbMV0pKXx8CisgICAgICAgICAgICAgKCh3ZC0+c3RhLnNzaWRMZW4gPT0gMCkmJgorICAgICAgICAgICAgICAgLyogY29ubmVjdCB0byBhbnkgQlNTOiBBUCdzIGFucyBTVEEncyBXRVAgc3RhdHVzIG11c3QgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgKHdkLT5zdGEud2VwU3RhdHVzID09IGFwV2VwU3RhdHVzICkmJgorICAgICAgICAgICAgICAocEJzc0luZm8tPnNlY3VyaXR5VHlwZSAhPSBaTV9TRUNVUklUWV9UWVBFX1dQQSkgKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCB3ZC0+c3RhLnNzaWRMZW4gPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiQU5ZIEJTUyBmb3VuZCIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoICgod2QtPnN0YS53ZXBTdGF0dXMgPT0gWk1fRU5DUllQVElPTl9XRVBfRElTQUJMRUQgJiYgYXBXZXBTdGF0dXMgPT0gWk1fRU5DUllQVElPTl9XRVBfRU5BQkxFRCkgfHwKKyAgICAgICAgICAgICAgICAgKHdkLT5zdGEud2VwU3RhdHVzID09IFpNX0VOQ1JZUFRJT05fV0VQX0VOQUJMRUQgJiYKKyAgICAgICAgICAgICAgICAgKGFwV2VwU3RhdHVzID09IFpNX0VOQ1JZUFRJT05fV0VQX0RJU0FCTEVEICYmIHdkLT5zdGEuZHJvcFVuZW5jcnlwdGVkUGt0cyA9PSAxKSkpICYmCisgICAgICAgICAgICAgICAgICh3ZC0+c3RhLmF1dGhNb2RlID49IFpNX0FVVEhfTU9ERV9PUEVOICYmIHdkLT5zdGEuYXV0aE1vZGUgPD0gWk1fQVVUSF9NT0RFX0FVVE8pICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJQcml2YWN5IHBvbGljeSBpcyBpbmNvbnNpc3RlbnQiKTsKKyAgICAgICAgICAgICAgICBwQnNzSW5mbyA9IHBCc3NJbmZvLT5uZXh0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBmb3IgV1BBIG5lZ2F0aXZlIHRlc3QgKi8KKyAgICAgICAgICAgIGlmICggIXpmQ2hlY2tBdXRoZW50aWNhdGlvbihkZXYsIHBCc3NJbmZvKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEJzc0luZm8gPSBwQnNzSW5mby0+bmV4dDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogQ2hlY2sgYnNzaWQgKi8KKyAgICAgICAgICAgIGlmICh3ZC0+c3RhLmJEZXNpcmVkQnNzaWQgPT0gVFJVRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGs9MDsgazw2OyBrKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAod2QtPnN0YS5kZXNpcmVkQnNzaWRba10gIT0gcEJzc0luZm8tPmJzc2lkW2tdKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB6bV9tc2cwX21tKFpNX0xWXzEsICJkZXNpcmVkIGJzc2lkIG5vdCBtYXRjaGVkIDEiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGsgIT0gNikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHptX21zZzBfbW0oWk1fTFZfMSwgImRlc2lyZWQgYnNzaWQgbm90IG1hdGNoZWQgMiIpOworICAgICAgICAgICAgICAgICAgICBwQnNzSW5mbyA9IHBCc3NJbmZvLT5uZXh0OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIENoZWNrIHN1cHBvcnQgbW9kZSAqLworICAgICAgICAgICAgaWYgKHBCc3NJbmZvLT5mcmVxdWVuY3kgPiAzMDAwKSB7CisgICAgICAgICAgICAgICAgaWYgKCAgIChwQnNzSW5mby0+RW5hYmxlSFQgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgfHwgKHBCc3NJbmZvLT5hcENhcCAmIFpNX0FsbDExTl9BUCkgKSAvLzExbiBBUAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhbm5lbEZsYWdzID0gQ0hBTk5FTF9BX0hUOworICAgICAgICAgICAgICAgICAgICBpZiAocEJzc0luZm8tPmVuYWJsZUhUNDAgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbEZsYWdzIHw9IENIQU5ORUxfSFQ0MDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxGbGFncyA9IENIQU5ORUxfQTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICggICAocEJzc0luZm8tPkVuYWJsZUhUID09IDEpCisgICAgICAgICAgICAgICAgICAgIHx8IChwQnNzSW5mby0+YXBDYXAgJiBaTV9BbGwxMU5fQVApICkgLy8xMW4gQVAKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxGbGFncyA9IENIQU5ORUxfR19IVDsKKyAgICAgICAgICAgICAgICAgICAgaWYocEJzc0luZm8tPmVuYWJsZUhUNDAgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbEZsYWdzIHw9IENIQU5ORUxfSFQ0MDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwQnNzSW5mby0+ZXh0U3VwcG9ydGVkUmF0ZXNbMV0gPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbEZsYWdzID0gQ0hBTk5FTF9COworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbEZsYWdzID0gQ0hBTk5FTF9HOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoICAgKChjaGFubmVsRmxhZ3MgPT0gQ0hBTk5FTF9CKSAmJiAod2QtPmNvbm5lY3RNb2RlICYgWk1fQklUXzApKQorICAgICAgICAgICAgICAgIHx8ICgoY2hhbm5lbEZsYWdzID09IENIQU5ORUxfRykgJiYgKHdkLT5jb25uZWN0TW9kZSAmIFpNX0JJVF8xKSkKKyAgICAgICAgICAgICAgICB8fCAoKGNoYW5uZWxGbGFncyA9PSBDSEFOTkVMX0EpICYmICh3ZC0+Y29ubmVjdE1vZGUgJiBaTV9CSVRfMikpCisgICAgICAgICAgICAgICAgfHwgKChjaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0hUMjApICYmICh3ZC0+Y29ubmVjdE1vZGUgJiBaTV9CSVRfMykpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQnNzSW5mbyA9IHBCc3NJbmZvLT5uZXh0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBTa2lwIGlmIEFQIGluIGJsb2NraW5nIGxpc3QgKi8KKyAgICAgICAgICAgIGlmICgocmV0ID0gemZTdGFJc0FwSW5CbG9ja2luZ0xpc3QoZGV2LCBwQnNzSW5mby0+YnNzaWQpKSA9PSBUUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHptX21zZzBfbW0oWk1fTFZfMCwgIkNhbmRpZGF0ZSBBUCBpbiBibG9ja2luZyBMaXN0LCBza2lwIGlmIHRoZXJlJ3Mgc3RpbGxhIGNob2ljZSEiKTsKKyAgICAgICAgICAgICAgICBwTm93QnNzSW5mbyA9IHBCc3NJbmZvOworICAgICAgICAgICAgICAgIHBCc3NJbmZvID0gcEJzc0luZm8tPm5leHQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggcEJzc0luZm8tPmNhcGFiaWxpdHlbMF0gJiBaTV9CSVRfMCApICAvLyBjaGVjayBpZiBpbmZyYS1CU1MKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcE5vd0Jzc0luZm8gPSBwQnNzSW5mbzsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5hcFdtZUNhcGFiaWxpdHkgPSBwQnNzSW5mby0+d21lU3VwcG9ydDsKKworCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHBCc3NJbmZvID0gcEJzc0luZm8tPm5leHQ7CisgICAgfQorCitkb25lOgorICAgIGlmIChwTm93QnNzSW5mbyAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgemZ3TWVtb3J5Q29weSgodm9pZCopY2FuZGlkYXRlQnNzLCAodm9pZCopcE5vd0Jzc0luZm8sIHNpemVvZihzdHJ1Y3QgenNCc3NJbmZvKSk7CisgICAgICAgIHBOb3dCc3NJbmZvID0gY2FuZGlkYXRlQnNzOworICAgIH0KKworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICByZXR1cm4gcE5vd0Jzc0luZm87Cit9CisKKwordm9pZCB6ZkluZnJhQ29ubmVjdE5ldHdvcmsoemRldl90KiBkZXYpCit7CisgICAgc3RydWN0IHpzQnNzSW5mbyogcEJzc0luZm87CisgICAgc3RydWN0IHpzQnNzSW5mbyogcE5vd0Jzc0luZm89TlVMTDsKKyAgICBzdHJ1Y3QgenNCc3NJbmZvIGNhbmRpZGF0ZUJzczsKKyAgICAvL3UxNl90IGksIGo9MTAwLCBxdWFsaXR5PTEwMDAwOworICAgIC8vdThfdCByZXQ9RkFMU0UsIGFwV2VwU3RhdHVzOworICAgIHU4X3QgcmV0PUZBTFNFOworICAgIHUxNl90IGs7CisgICAgdThfdCBkZW5zaXR5ID0gWk1fTVBEVV9ERU5TSVRZX05PTkU7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIC8qIFJlc2V0IGJzc05vdEZvdW5kQ291bnQgZm9yIEFkLUhvYzpJQlNTICovCisgICAgLyogTmVlZCByZXZpZXcgOiBJYnNzQ29ubiAtPiBJbmZyYUNvbm4gLT4gSWJzc0Nvbm4gZXRjLCBmbGFnL2NvdW50ZXIgcmVzZXQ/ICovCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICB3ZC0+c3RhLmJzc05vdEZvdW5kQ291bnQgPSAwOworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAvKiBTZXQgVHhRcyBDV01JTiwgQ1dNQVgsIEFJRlMgYW5kIFRYTyB0byBXTUUgU1RBIGRlZmF1bHQuICovCisgICAgemZVcGRhdGVEZWZhdWx0UW9zUGFyYW1ldGVyKGRldiwgMCk7CisKKyAgICB6ZlN0YVJlZnJlc2hCbG9ja0xpc3QoZGV2LCAwKTsKKworICAgIC8qIGNoYW5nZSBzdGF0ZSB0byBDT05ORUNUSU5HIGFuZCBzdG9wIHRoZSBjaGFubmVsIHNjYW5uaW5nICovCisgICAgemZDaGFuZ2VBZGFwdGVyU3RhdGUoZGV2LCBaTV9TVEFfU1RBVEVfQ09OTkVDVElORyk7CisgICAgemZQb3dlclNhdmluZ01ncldha2V1cChkZXYpOworCisgICAgd2QtPnN0YS53bWVDb25uZWN0ZWQgPSAwOworICAgIHdkLT5zdGEucHNNZ3IudGVtcFdha2VVcCA9IDA7CisgICAgd2QtPnN0YS5xb3NJbmZvID0gMDsKKyAgICB6ZlF1ZXVlRmx1c2goZGV2LCB3ZC0+c3RhLnVhcHNkUSk7CisKKyAgICB3ZC0+c3RhLmNvbm5lY3RTdGF0ZSA9IFpNX1NUQV9DT05OX1NUQVRFX05PTkU7CisKKyAgICAvL1Jlb3JkZXIgQnNzTGlzdCBieSBSU1NJLS1DV1lhbmcoKykKKyAgICB6ZkJzc0luZm9SZW9yZGVyTGlzdChkZXYpOworCisgICAgcE5vd0Jzc0luZm8gPSB6ZkluZnJhRmluZEFQVG9Db25uZWN0KGRldiwgJmNhbmRpZGF0ZUJzcyk7CisKKwlpZiAod2QtPnN0YS5TV0VuY3J5cHRFbmFibGUgIT0gMCkKKwl7CisJICAgIGlmICh3ZC0+c3RhLmJTYWZlTW9kZSA9PSAwKQorCSAgICB7CisJCSAgICB6ZlN0YURpc2FibGVTV0VuY3J5cHRpb24oZGV2KTsvL1F1aWNrbHkgcmVib290CisJICAgIH0KKwl9CisgICAgaWYgKCBwTm93QnNzSW5mbyAhPSBOVUxMICkKKyAgICB7CisgICAgICAgIC8vem1fYXNzZXJ0KHBOb3dCc3NJbmZvICE9IE5VTEwpOworCisgICAgICAgIHBCc3NJbmZvID0gcE5vd0Jzc0luZm87CisgICAgICAgIHdkLT5zdGEuc3NpZExlbiA9IHBCc3NJbmZvLT5zc2lkWzFdOworICAgICAgICB6Zk1lbW9yeUNvcHkod2QtPnN0YS5zc2lkLCAmKHBCc3NJbmZvLT5zc2lkWzJdKSwgcEJzc0luZm8tPnNzaWRbMV0pOworICAgICAgICB3ZC0+ZnJlcXVlbmN5ID0gcEJzc0luZm8tPmZyZXF1ZW5jeTsKKyAgICAgICAgLy93ZC0+c3RhLmZsYWdGcmVxQ2hhbmdpbmcgPSAxOworCisgICAgICAgIC8vemZDb3JlU2V0RnJlcXVlbmN5KGRldiwgd2QtPmZyZXF1ZW5jeSk7CisgICAgICAgIHpmVXBkYXRlQnNzaWQoZGV2LCBwQnNzSW5mby0+YnNzaWQpOworICAgICAgICB6ZlJlc2V0U3VwcG9ydFJhdGUoZGV2LCBaTV9ERUZBVUxUX1NVUFBPUlRfUkFURV9aRVJPKTsKKyAgICAgICAgemZVcGRhdGVTdXBwb3J0UmF0ZShkZXYsIHBCc3NJbmZvLT5zdXBwb3J0ZWRSYXRlcyk7CisgICAgICAgIHpmVXBkYXRlU3VwcG9ydFJhdGUoZGV2LCBwQnNzSW5mby0+ZXh0U3VwcG9ydGVkUmF0ZXMpOworCisgICAgICAgIHdkLT5iZWFjb25JbnRlcnZhbCA9IHBCc3NJbmZvLT5iZWFjb25JbnRlcnZhbFswXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHUxNl90KSBwQnNzSW5mby0+YmVhY29uSW50ZXJ2YWxbMV0pIDw8IDgpOworICAgICAgICBpZiAod2QtPmJlYWNvbkludGVydmFsID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHdkLT5iZWFjb25JbnRlcnZhbCA9IDEwMDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEVTUyBiaXQgb24gKi8KKyAgICAgICAgd2QtPnN0YS5jYXBhYmlsaXR5WzBdIHw9IFpNX0JJVF8wOworICAgICAgICAvKiBJQlNTIGJpdCBvZmYgKi8KKyAgICAgICAgd2QtPnN0YS5jYXBhYmlsaXR5WzBdICY9IH5aTV9CSVRfMTsKKworICAgICAgICAvKiAxMW4gQVAgZmxhZyAqLworICAgICAgICB3ZC0+c3RhLkVuYWJsZUhUID0gcEJzc0luZm8tPkVuYWJsZUhUOworICAgICAgICB3ZC0+c3RhLlNHNDAgPSBwQnNzSW5mby0+U0c0MDsKKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQworICAgICAgICBpZiAoIHBCc3NJbmZvLT5zZWN1cml0eVR5cGUgPT0gWk1fU0VDVVJJVFlfVFlQRV9DRU5DICkKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPnN0YS53bWVFbmFibGVkID0gMDsgLy9EaXNhYmxlIFdNTSBpbiBDRU5DCisgICAgICAgICAgICBjZW5jSW5pdChkZXYpOworICAgICAgICAgICAgY2VuY1NldENFTkNNb2RlKGRldiwgTmRpc0NFTkNfUFNLKTsKKyAgICAgICAgICAgIHdkLT5zdGEud3BhU3RhdGUgPSBaTV9TVEFfV1BBX1NUQVRFX0lOSVQ7CisgICAgICAgICAgICAvKiBDRU5DICovCisgICAgICAgICAgICBpZiAoIHBCc3NJbmZvLT5jZW5jSWVbMV0gIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy93ZC0+c3RhLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fQ0VOQzsKKyAgICAgICAgICAgICAgICAvL3dkLT5zdGEuZW5jcnlNb2RlID0gWk1fQ0VOQzsKKyAgICAgICAgICAgICAgICB6ZndDZW5jSGFuZGxlQmVhY29uUHJvYnJlc3BvbihkZXYsICh1OF90ICopJnBCc3NJbmZvLT5jZW5jSWUsCisgICAgICAgICAgICAgICAgICAgICAgICAodThfdCAqKSZwQnNzSW5mby0+c3NpZCwgKHU4X3QgKikmcEJzc0luZm8tPm1hY2FkZHIpOworICAgICAgICAgICAgICAgIHpmTWVtb3J5Q29weSh3ZC0+c3RhLmNlbmNJZSwgcEJzc0luZm8tPmNlbmNJZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBCc3NJbmZvLT5jZW5jSWVbMV0rMik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5jZW5jSWVbMV0gPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworICAgICAgICBpZiAoIHBCc3NJbmZvLT5zZWN1cml0eVR5cGUgPT0gWk1fU0VDVVJJVFlfVFlQRV9XUEEgKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+c3RhLndwYVN0YXRlID0gWk1fU1RBX1dQQV9TVEFURV9JTklUOworCisgICAgICAgICAgICBpZiAoIHdkLT5zdGEud2VwU3RhdHVzID09IFpNX0VOQ1JZUFRJT05fVEtJUCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5lbmNyeU1vZGUgPSBaTV9US0lQOworCisgICAgICAgICAgICAgICAgLyogVHVybiBvbiBzb2Z0d2FyZSBlbmNyeXB0aW9uL2RlY3J5cHRpb24gZm9yIFRLSVAgKi8KKyAgICAgICAgICAgICAgICBpZiAod2QtPnN0YS5FbmFibGVIVCA9PSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgemZTdGFFbmFibGVTV0VuY3J5cHRpb24oZGV2LCAoWk1fU1dfVEtJUF9FTkNSWV9FTnxaTV9TV19US0lQX0RFQ1JZX0VOKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogRG8gbm90IHN1cHBvcnQgVEtJUCBpbiAxMW4gbW9kZSAqLworICAgICAgICAgICAgICAgIC8vd2QtPnN0YS5FbmFibGVIVCA9IDA7CisgICAgICAgICAgICAgICAgLy9wQnNzSW5mby0+ZW5hYmxlSFQ0MCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICggd2QtPnN0YS53ZXBTdGF0dXMgPT0gWk1fRU5DUllQVElPTl9BRVMgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT5zdGEuZW5jcnlNb2RlID0gWk1fQUVTOworCisgICAgICAgICAgICAgICAgLyogSWYgQVAgc3VwcG9ydHMgSFQgbW9kZSAqLworICAgICAgICAgICAgICAgIGlmICh3ZC0+c3RhLkVuYWJsZUhUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogU2V0IE1QRFUgZGVuc2l0eSB0byA4IHVzKi8KKyAgICAgICAgICAgICAgICAgICAgZGVuc2l0eSA9IFpNX01QRFVfREVOU0lUWV84VVM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHBCc3NJbmZvLT53cGFJZVsxXSAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6Zk1lbW9yeUNvcHkod2QtPnN0YS53cGFJZSwgcEJzc0luZm8tPndwYUllLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQnNzSW5mby0+d3BhSWVbMV0rMik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnN0YS53cGFJZVsxXSA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggcEJzc0luZm8tPnJzbkllWzFdICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmTWVtb3J5Q29weSh3ZC0+c3RhLnJzbkllLCBwQnNzSW5mby0+cnNuSWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCc3NJbmZvLT5yc25JZVsxXSsyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+c3RhLnJzbkllWzFdID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisKKworICAgICAgICAvKiBjaGVjayBwcmVhbWJsZSBiaXQgKi8KKyAgICAgICAgd2QtPnByZWFtYmxlVHlwZUluVXNlZCA9IHdkLT5wcmVhbWJsZVR5cGU7CisgICAgICAgIGlmICggd2QtPnByZWFtYmxlVHlwZUluVXNlZCA9PSBaTV9QUkVBTUJMRV9UWVBFX0FVVE8gKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocEJzc0luZm8tPmNhcGFiaWxpdHlbMF0gJiBaTV9CSVRfNSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+cHJlYW1ibGVUeXBlSW5Vc2VkID0gWk1fUFJFQU1CTEVfVFlQRV9TSE9SVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+cHJlYW1ibGVUeXBlSW5Vc2VkID0gWk1fUFJFQU1CTEVfVFlQRV9MT05HOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHdkLT5wcmVhbWJsZVR5cGVJblVzZWQgPT0gWk1fUFJFQU1CTEVfVFlQRV9MT05HKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+c3RhLmNhcGFiaWxpdHlbMF0gJj0gflpNX0JJVF81OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPnN0YS5jYXBhYmlsaXR5WzBdIHw9IFpNX0JJVF81OworICAgICAgICB9CisKKyAgICAgICAgLyogY2hlY2sgODAyLjExbiA0ME1IeiBTZXR0aW5nICovCisgICAgICAgIGlmICgocEJzc0luZm8tPmVuYWJsZUhUNDAgPT0gMSkgJiYKKyAgICAgICAgICAgICgocEJzc0luZm8tPmV4dENoT2Zmc2V0ID09IDEpIHx8IChwQnNzSW5mby0+ZXh0Q2hPZmZzZXQgPT0gMykpKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+QmFuZFdpZHRoNDAgPSBwQnNzSW5mby0+ZW5hYmxlSFQ0MDsKKyAgICAgICAgICAgIHdkLT5FeHRPZmZzZXQgPSBwQnNzSW5mby0+ZXh0Q2hPZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+QmFuZFdpZHRoNDAgPSAwOworICAgICAgICAgICAgd2QtPkV4dE9mZnNldCA9IDA7CisgICAgICAgIH0KKworICAgICAgICAvKiBjaGVjayA4MDIuMTFIIHN1cHBvcnQgYml0ICovCisKKyAgICAgICAgLyogY2hlY2sgT3dsIEFwICovCisgICAgICAgIGlmICggcEJzc0luZm8tPmF0aE93bEFwICYgWk1fQklUXzAgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBJbiB0aGlzIGZ1bmN0aW9uLCBGVyByZXRyeSB3aWxsIGJlIGVuYWJsZSwgWk1fTUFDX1JFR19SRVRSWV9NQVgKKyAgICAgICAgICAgICAgIHdpbGwgYmUgc2V0IHRvIDAuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHpmSHBEaXNhYmxlSHdSZXRyeShkZXYpOworICAgICAgICAgICAgd2QtPnN0YS5hdGhPd2xBcCA9IDE7CisgICAgICAgICAgICAvKiBTZXQgTVBEVSBkZW5zaXR5IHRvIDggdXMqLworICAgICAgICAgICAgZGVuc2l0eSA9IFpNX01QRFVfREVOU0lUWV84VVM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBJbiB0aGlzIGZ1bmN0aW9uLCBGVyByZXRyeSB3aWxsIGJlIGRpc2FibGUsIFpNX01BQ19SRUdfUkVUUllfTUFYCisgICAgICAgICAgICAgICB3aWxsIGJlIHNldCB0byAzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICB6ZkhwRW5hYmxlSHdSZXRyeShkZXYpOworICAgICAgICAgICAgd2QtPnN0YS5hdGhPd2xBcCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgd2QtPnJlb3JkZXIgPSAxOworCisgICAgICAgIC8qIFNldCBNUERVIGRlbnNpdHkgKi8KKyAgICAgICAgemZIcFNldE1QRFVEZW5zaXR5KGRldiwgZGVuc2l0eSk7CisKKyAgICAgICAgLyogY2hlY2sgc2hvcnQgc2xvdCB0aW1lIGJpdCAqLworICAgICAgICBpZiAoIHBCc3NJbmZvLT5jYXBhYmlsaXR5WzFdICYgWk1fQklUXzIgKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+c3RhLmNhcGFiaWxpdHlbMV0gfD0gWk1fQklUXzI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHBCc3NJbmZvLT5lcnAgJiBaTV9CSVRfMSApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vem1fZGVidWdfbXNnMCgicHJvdGVjdGlvbiBtb2RlIG9uIik7CisgICAgICAgICAgICB3ZC0+c3RhLmJQcm90ZWN0aW9uTW9kZSA9IFRSVUU7CisgICAgICAgICAgICB6ZkhwU2V0U2xvdFRpbWUoZGV2LCAwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vem1fZGVidWdfbXNnMCgicHJvdGVjdGlvbiBtb2RlIG9mZiIpOworICAgICAgICAgICAgd2QtPnN0YS5iUHJvdGVjdGlvbk1vZGUgPSBGQUxTRTsKKyAgICAgICAgICAgIHpmSHBTZXRTbG90VGltZShkZXYsIDEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBCc3NJbmZvLT5tYXJ2ZWxBcCA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+c3RhLmVuYWJsZURydkJBID0gMDsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiA4NzAxIDogTmV0R2VhciAzNTAwIChNQVJWRUxMKQorICAgICAgICAgICAgICogRG93bmxpbmsgaXNzdWUgOiBzZXQgc2xvdHRpbWUgdG8gMjAuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHpmSHBTZXRTbG90VGltZVJlZ2lzdGVyKGRldiwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+c3RhLmVuYWJsZURydkJBID0gMTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFRoaXMgaXMgbm90IGdvb2QgZm9yIGhlcmUgZG8gcmVzZXQgc2xvdCB0aW1lLgorICAgICAgICAgICAgICogSSB0aGluayBpdCBzaG91bGQgcmVzZXQgd2hlbiBsZWF2ZSBNQVJWRUxMIGFwCisgICAgICAgICAgICAgKiBvciBlbnRlciBkaXNjb25uZWN0IHN0YXRlIGV0Yy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgemZIcFNldFNsb3RUaW1lUmVnaXN0ZXIoZGV2LCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vU3RvcmUgcHJvYmUgcmVzcG9uc2UgZnJhbWUgYm9keSwgZm9yIFZJU1RBIG9ubHkKKyAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlTaXplID0gcEJzc0luZm8tPmZyYW1lQm9keXNpemUgKyAxMjsKKyAgICAgICAgaWYgKHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5U2l6ZSA+IFpNX0NBQ0hFRF9GUkFNRUJPRFlfU0laRSkKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlTaXplID0gWk1fQ0FDSEVEX0ZSQU1FQk9EWV9TSVpFOworICAgICAgICB9CisgICAgICAgIGZvciAoaz0wOyBrPDg7IGsrKykKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlba10gPSBwQnNzSW5mby0+dGltZVN0YW1wW2tdOworICAgICAgICB9CisgICAgICAgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5WzhdID0gcEJzc0luZm8tPmJlYWNvbkludGVydmFsWzBdOworICAgICAgICB3ZC0+c3RhLmJlYWNvbkZyYW1lQm9keVs5XSA9IHBCc3NJbmZvLT5iZWFjb25JbnRlcnZhbFsxXTsKKyAgICAgICAgd2QtPnN0YS5iZWFjb25GcmFtZUJvZHlbMTBdID0gcEJzc0luZm8tPmNhcGFiaWxpdHlbMF07CisgICAgICAgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5WzExXSA9IHBCc3NJbmZvLT5jYXBhYmlsaXR5WzFdOworICAgICAgICBmb3IgKGs9MDsgazwod2QtPnN0YS5iZWFjb25GcmFtZUJvZHlTaXplIC0gMTIpOyBrKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHdkLT5zdGEuYmVhY29uRnJhbWVCb2R5W2srMTJdID0gcEJzc0luZm8tPmZyYW1lQm9keVtrXTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggKCBwQnNzSW5mby0+Y2FwYWJpbGl0eVswXSAmIFpNX0JJVF80ICkmJgorICAgICAgICAgICAgICgoIHdkLT5zdGEuYXV0aE1vZGUgPT0gWk1fQVVUSF9NT0RFX09QRU4gKXx8CisgICAgICAgICAgICAgICggd2QtPnN0YS5hdXRoTW9kZSA9PSBaTV9BVVRIX01PREVfU0hBUkVEX0tFWSl8fAorICAgICAgICAgICAgICAod2QtPnN0YS5hdXRoTW9kZSA9PSBaTV9BVVRIX01PREVfQVVUTykpICkKKyAgICAgICAgeyAgIC8qIHByaXZhY3kgZW5hYmxlZCAqLworCisgICAgICAgICAgICBpZiAoIHdkLT5zdGEud2VwU3RhdHVzID09IFpNX0VOQ1JZUFRJT05fV0VQX0RJU0FCTEVEICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJBZGFwdGVyIGlzIG5vIFdFUCwgdHJ5IHRvIGNvbm5lY3QgdG8gV0VQIEFQIik7CisgICAgICAgICAgICAgICAgcmV0ID0gRkFMU0U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIERvIG5vdCBzdXBwb3J0IFdFUCBpbiAxMW4gbW9kZSAqLworICAgICAgICAgICAgaWYgKCB3ZC0+c3RhLndlcFN0YXR1cyA9PSBaTV9FTkNSWVBUSU9OX1dFUF9FTkFCTEVEICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBUdXJuIG9uIHNvZnR3YXJlIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBmb3IgV0VQICovCisgICAgICAgICAgICAgICAgaWYgKHdkLT5zdGEuRW5hYmxlSFQgPT0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHpmU3RhRW5hYmxlU1dFbmNyeXB0aW9uKGRldiwgKFpNX1NXX1dFUF9FTkNSWV9FTnxaTV9TV19XRVBfREVDUllfRU4pKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvL3dkLT5zdGEuRW5hYmxlSFQgPSAwOworICAgICAgICAgICAgICAgIC8vd2QtPkJhbmRXaWR0aDQwID0gMDsKKyAgICAgICAgICAgICAgICAvL3dkLT5FeHRPZmZzZXQgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3ZC0+c3RhLmNhcGFiaWxpdHlbMF0gfD0gWk1fQklUXzQ7CisKKyAgICAgICAgICAgIGlmICggd2QtPnN0YS5hdXRoTW9kZSA9PSBaTV9BVVRIX01PREVfQVVUTyApCisgICAgICAgICAgICB7IC8qIFRyeSB0byB1c2Ugb3BlbiBhbmQgc2hhcmVkLWtleSBhdXRoZWh0aWNhdGlvbiBhbHRlcm5hdGl2ZWx5ICovCisgICAgICAgICAgICAgICAgaWYgKCAod2QtPnN0YS5jb25uZWN0VGltZW91dENvdW50ICUgMikgPT0gMCApCisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuYklzU2hhcmVkS2V5ID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuYklzU2hhcmVkS2V5ID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCB3ZC0+c3RhLmF1dGhNb2RlICE9IFpNX0FVVEhfTU9ERV9TSEFSRURfS0VZICkKKyAgICAgICAgICAgIHsgICAvKiBvcGVuICBvciBhdXRvICovCisgICAgICAgICAgICAgICAgLy96ZlN0YVN0YXJ0Q29ubmVjdChkZXYsIDApOworICAgICAgICAgICAgICAgIHdkLT5zdGEuYklzU2hhcmVkS2V5ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCB3ZC0+c3RhLmF1dGhNb2RlICE9IFpNX0FVVEhfTU9ERV9PUEVOICkKKyAgICAgICAgICAgIHsgICAvKiBzaGFyZWQga2V5ICovCisgICAgICAgICAgICAgICAgLy96ZlN0YVN0YXJ0Q29ubmVjdChkZXYsIDEpIDsKKyAgICAgICAgICAgICAgICB3ZC0+c3RhLmJJc1NoYXJlZEtleSA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIChwQnNzSW5mby0+c2VjdXJpdHlUeXBlID09IFpNX1NFQ1VSSVRZX1RZUEVfV1BBKXx8CisgICAgICAgICAgICAgICAgIChwQnNzSW5mby0+Y2FwYWJpbGl0eVswXSAmIFpNX0JJVF80KSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5jYXBhYmlsaXR5WzBdIHw9IFpNX0JJVF80OworICAgICAgICAgICAgICAgIC8qIGluaXRpYWxpemUgV1BBIHJlbGF0ZWQgcGFyYW1ldGVycyAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT5zdGEuY2FwYWJpbGl0eVswXSAmPSAoflpNX0JJVF80KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogYXV0aGVudGljYXRpb24gd2l0aCBvcGVuIHN5c3RlbSAqLworICAgICAgICAgICAgLy96ZlN0YVN0YXJ0Q29ubmVjdChkZXYsIDApOworICAgICAgICAgICAgd2QtPnN0YS5iSXNTaGFyZWRLZXkgPSAwOworICAgICAgICB9CisKKyAgICAgICAgLyogSW1wcm92ZSBXRVAvVEtJUCBwZXJmb3JtYWNlIHdpdGggSFQgQVAsIGRldGFpbCBpbmZvcm1hdGlvbiBwbGVhc2UgbG9vayBidWcjMzI0OTUgKi8KKyAgICAgICAgLyoKKyAgICAgICAgaWYgKCAocEJzc0luZm8tPmJyb2FkY29tSFRBcCA9PSAxKQorICAgICAgICAgICAgICYmICh3ZC0+c3RhLlNXRW5jcnlwdEVuYWJsZSAhPSAwKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmSHBTZXRUVFNJRlNUaW1lKGRldiwgMHhhKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmSHBTZXRUVFNJRlNUaW1lKGRldiwgMHg4KTsKKyAgICAgICAgfQorICAgICAgICAqLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB6bV9kZWJ1Z19tc2cwKCJEZXNpcmVkIFNTSUQgbm90IGZvdW5kIik7CisgICAgICAgIGdvdG8gemxDb25uZWN0RmFpbGVkOworICAgIH0KKworCisgICAgemZDb3JlU2V0RnJlcXVlbmN5VjIoZGV2LCB3ZC0+ZnJlcXVlbmN5LCB6ZlN0YVN0YXJ0Q29ubmVjdENiKTsKKyAgICByZXR1cm47CisKK3psQ29ubmVjdEZhaWxlZDoKKyAgICB6ZlN0YUNvbm5lY3RGYWlsKGRldiwgWk1fU1RBVFVTX01FRElBX0RJU0NPTk5FQ1RfTk9UX0ZPVU5ELCB3ZC0+c3RhLmJzc2lkLCAwKTsKKyAgICByZXR1cm47Cit9CisKK3U4X3QgemZDaGVja1dQQUF1dGgoemRldl90KiBkZXYsIHN0cnVjdCB6c0Jzc0luZm8qIHBCc3NJbmZvKQoreworICAgIHU4X3QgICByZXQ9VFJVRTsKKyAgICB1OF90ICAgcG1rQ291bnQ7CisgICAgdThfdCAgIGk7CisgICAgdTE2X3QgICBlbmNBbGdvVHlwZSA9IDA7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAoIHdkLT5zdGEud2VwU3RhdHVzID09IFpNX0VOQ1JZUFRJT05fVEtJUCApCisgICAgeworICAgICAgICBlbmNBbGdvVHlwZSA9IFpNX1RLSVA7CisgICAgfQorICAgIGVsc2UgaWYgKCB3ZC0+c3RhLndlcFN0YXR1cyA9PSBaTV9FTkNSWVBUSU9OX0FFUyApCisgICAgeworICAgICAgICBlbmNBbGdvVHlwZSA9IFpNX0FFUzsKKyAgICB9CisKKyAgICBzd2l0Y2god2QtPnN0YS5hdXRoTW9kZSkKKyAgICB7CisgICAgICAgIGNhc2UgWk1fQVVUSF9NT0RFX1dQQToKKyAgICAgICAgY2FzZSBaTV9BVVRIX01PREVfV1BBUFNLOgorICAgICAgICAgICAgaWYgKCBwQnNzSW5mby0+d3BhSWVbMV0gPT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gRkFMU0U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHBta0NvdW50ID0gcEJzc0luZm8tPndwYUllWzEyXTsKKyAgICAgICAgICAgIGZvcihpPTA7IGkgPCBwbWtDb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggcEJzc0luZm8tPndwYUllWzE3ICsgNCppXSA9PSBlbmNBbGdvVHlwZSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXQgPSBGQUxTRTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWk1fQVVUSF9NT0RFX1dQQTI6CisgICAgICAgIGNhc2UgWk1fQVVUSF9NT0RFX1dQQTJQU0s6CisgICAgICAgICAgICBpZiAoIHBCc3NJbmZvLT5yc25JZVsxXSA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcG1rQ291bnQgPSBwQnNzSW5mby0+cnNuSWVbOF07CisgICAgICAgICAgICBmb3IoaT0wOyBpIDwgcG1rQ291bnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIHBCc3NJbmZvLT5yc25JZVsxMyArIDQqaV0gPT0gZW5jQWxnb1R5cGUgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0ID0gRkFMU0U7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKK2RvbmU6CisgICAgcmV0dXJuIHJldDsKK30KKwordThfdCB6ZkNoZWNrQXV0aGVudGljYXRpb24oemRldl90KiBkZXYsIHN0cnVjdCB6c0Jzc0luZm8qIHBCc3NJbmZvKQoreworICAgIHU4X3QgICByZXQ9VFJVRTsKKyAgICB1MTZfdCAgZW5jQWxnb1R5cGU7CisgICAgdTE2X3QgVW5pY2FzdENpcGhlck51bTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8qIENvbm5lY3RpbmcgdG8gQU5ZIGhhcyBiZWVuIGNoZWNrZWQgKi8KKyAgICBpZiAoIHdkLT5zdGEuc3NpZExlbiA9PSAwICkKKyAgICB7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisKKwlzd2l0Y2god2QtPnN0YS5hdXRoTW9kZSkKKwkvL3N3aXRjaCh3ZC0+d3MuYXV0aE1vZGUpLy9RdWlja2x5IHJlYm9vdAorICAgIHsKKyAgICAgICAgY2FzZSBaTV9BVVRIX01PREVfV1BBX0FVVE86CisgICAgICAgIGNhc2UgWk1fQVVUSF9NT0RFX1dQQVBTS19BVVRPOgorICAgICAgICAgICAgZW5jQWxnb1R5cGUgPSAwOworICAgICAgICAgICAgaWYocEJzc0luZm8tPnJzbkllWzFdICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVW5pY2FzdENpcGhlck51bSA9IChwQnNzSW5mby0+cnNuSWVbOF0pICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBCc3NJbmZvLT5yc25JZVs5XSA8PCA4KTsKKworICAgICAgICAgICAgICAgIC8qIElmIHRoZXJlIGlzIG9ubHkgb25lIHVuaWNhc3QgY2lwaGVyICovCisgICAgICAgICAgICAgICAgaWYgKFVuaWNhc3RDaXBoZXJOdW0gPT0gMSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVuY0FsZ29UeXBlID0gcEJzc0luZm8tPnJzbkllWzEzXTsKKyAgICAgICAgICAgICAgICAgICAgLy9lbmNBbGdvVHlwZSA9IHBCc3NJbmZvLT5yc25JZVs3XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTE2X3QgaWk7CisgICAgICAgICAgICAgICAgICAgIHUxNl90IGRlc2lyZWRDaXBoZXIgPSAwOworICAgICAgICAgICAgICAgICAgICB1MTZfdCBJRU9mZlNldCA9IDEzOworCisgICAgICAgICAgICAgICAgICAgIC8qIEVudW1lcmF0ZSBhbGwgdGhlIHN1cHBvcnRlZCB1bmljYXN0IGNpcGhlciAqLworICAgICAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBVbmljYXN0Q2lwaGVyTnVtOyBpaSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocEJzc0luZm8tPnJzbkllW0lFT2ZmU2V0K2lpKjRdID4gZGVzaXJlZENpcGhlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkQ2lwaGVyID0gcEJzc0luZm8tPnJzbkllW0lFT2ZmU2V0K2lpKjRdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZW5jQWxnb1R5cGUgPSBkZXNpcmVkQ2lwaGVyOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICggZW5jQWxnb1R5cGUgPT0gMHgwMiApCisgICAgICAgICAgICAgICAgeworICAgIAkJCSAgICB3ZC0+c3RhLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fVEtJUDsKKworICAgIAkJCSAgICBpZiAoIHdkLT5zdGEuYXV0aE1vZGUgPT0gWk1fQVVUSF9NT0RFX1dQQV9BVVRPICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5jdXJyZW50QXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIC8vWk1fQVVUSF9NT0RFX1dQQVBTS19BVVRPCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuY3VycmVudEF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTJQU0s7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIGVuY0FsZ29UeXBlID09IDB4MDQgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX0FFUzsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIHdkLT5zdGEuYXV0aE1vZGUgPT0gWk1fQVVUSF9NT0RFX1dQQV9BVVRPICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5jdXJyZW50QXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIC8vWk1fQVVUSF9NT0RFX1dQQVBTS19BVVRPCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuY3VycmVudEF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTJQU0s7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZihwQnNzSW5mby0+d3BhSWVbMV0gIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVbmljYXN0Q2lwaGVyTnVtID0gKHBCc3NJbmZvLT53cGFJZVsxMl0pICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBCc3NJbmZvLT53cGFJZVsxM10gPDwgOCk7CisKKyAgICAgICAgICAgICAgICAvKiBJZiB0aGVyZSBpcyBvbmx5IG9uZSB1bmljYXN0IGNpcGhlciAqLworICAgICAgICAgICAgICAgIGlmIChVbmljYXN0Q2lwaGVyTnVtID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBlbmNBbGdvVHlwZSA9IHBCc3NJbmZvLT53cGFJZVsxN107CisgICAgICAgICAgICAgICAgICAgIC8vZW5jQWxnb1R5cGUgPSBwQnNzSW5mby0+d3BhSWVbMTFdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MTZfdCBpaTsKKyAgICAgICAgICAgICAgICAgICAgdTE2X3QgZGVzaXJlZENpcGhlciA9IDA7CisgICAgICAgICAgICAgICAgICAgIHUxNl90IElFT2ZmU2V0ID0gMTc7CisKKyAgICAgICAgICAgICAgICAgICAgLyogRW51bWVyYXRlIGFsbCB0aGUgc3VwcG9ydGVkIHVuaWNhc3QgY2lwaGVyICovCisgICAgICAgICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IFVuaWNhc3RDaXBoZXJOdW07IGlpKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwQnNzSW5mby0+d3BhSWVbSUVPZmZTZXQraWkqNF0gPiBkZXNpcmVkQ2lwaGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRDaXBoZXIgPSBwQnNzSW5mby0+d3BhSWVbSUVPZmZTZXQraWkqNF07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBlbmNBbGdvVHlwZSA9IGRlc2lyZWRDaXBoZXI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCBlbmNBbGdvVHlwZSA9PSAweDAyICkKKyAgICAgICAgICAgICAgICB7CisgICAgCQkJICAgIHdkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9US0lQOworCisgICAgCQkJICAgIGlmICggd2QtPnN0YS5hdXRoTW9kZSA9PSBaTV9BVVRIX01PREVfV1BBX0FVVE8gKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLmN1cnJlbnRBdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSAvL1pNX0FVVEhfTU9ERV9XUEFQU0tfQVVUTworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLmN1cnJlbnRBdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEFQU0s7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIGVuY0FsZ29UeXBlID09IDB4MDQgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX0FFUzsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIHdkLT5zdGEuYXV0aE1vZGUgPT0gWk1fQVVUSF9NT0RFX1dQQV9BVVRPICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5jdXJyZW50QXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgLy9aTV9BVVRIX01PREVfV1BBUFNLX0FVVE8KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5jdXJyZW50QXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBUFNLOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IEZBTFNFOworICAgICAgICAgICAgICAgIH0KKworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gRkFMU0U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWk1fQVVUSF9NT0RFX1dQQToKKyAgICAgICAgY2FzZSBaTV9BVVRIX01PREVfV1BBUFNLOgorICAgICAgICBjYXNlIFpNX0FVVEhfTU9ERV9XUEFfTk9ORToKKyAgICAgICAgY2FzZSBaTV9BVVRIX01PREVfV1BBMjoKKyAgICAgICAgY2FzZSBaTV9BVVRIX01PREVfV1BBMlBTSzoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIHBCc3NJbmZvLT5zZWN1cml0eVR5cGUgIT0gWk1fU0VDVVJJVFlfVFlQRV9XUEEgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0ID0gemZDaGVja1dQQUF1dGgoZGV2LCBwQnNzSW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFpNX0FVVEhfTU9ERV9PUEVOOgorICAgICAgICBjYXNlIFpNX0FVVEhfTU9ERV9TSEFSRURfS0VZOgorICAgICAgICBjYXNlIFpNX0FVVEhfTU9ERV9BVVRPOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggcEJzc0luZm8tPndzY0llWzFdICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBBUCBpcyBhIEp1bXBzdGFydCBBUCwgaXQncyBvayEhIFJheQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHBCc3NJbmZvLT5zZWN1cml0eVR5cGUgPT0gWk1fU0VDVVJJVFlfVFlQRV9XUEEgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3U4X3QgemZTdGFJc0Nvbm5lY3RlZCh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAoIHdkLT5zdGEuYWRhcHRlclN0YXRlID09IFpNX1NUQV9TVEFURV9DT05ORUNURUQgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgcmV0dXJuIEZBTFNFOworfQorCit1OF90IHpmU3RhSXNDb25uZWN0aW5nKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGlmICggd2QtPnN0YS5hZGFwdGVyU3RhdGUgPT0gWk1fU1RBX1NUQVRFX0NPTk5FQ1RJTkcgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgcmV0dXJuIEZBTFNFOworfQorCit1OF90IHpmU3RhSXNEaXNjb25uZWN0KHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGlmICggd2QtPnN0YS5hZGFwdGVyU3RhdGUgPT0gWk1fU1RBX1NUQVRFX0RJU0NPTk5FQ1QgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgcmV0dXJuIEZBTFNFOworfQorCit1OF90IHpmQ2hhbmdlQWRhcHRlclN0YXRlKHpkZXZfdCogZGV2LCB1OF90IG5ld1N0YXRlKQoreworICAgIHU4X3QgcmV0ID0gVFJVRTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICAvL2lmICggbmV3U3RhdGUgPT0gd2QtPnN0YS5hZGFwdGVyU3RhdGUgKQorICAgIC8veworICAgIC8vICAgIHJldHVybiBGQUxTRTsKKyAgICAvL30KKworICAgIHN3aXRjaChuZXdTdGF0ZSkKKyAgICB7CisgICAgY2FzZSBaTV9TVEFfU1RBVEVfRElTQ09OTkVDVDoKKyAgICAgICAgemZSZXNldFN1cHBvcnRSYXRlKGRldiwgWk1fREVGQVVMVF9TVVBQT1JUX1JBVEVfRElTQ09OTkVDVCk7CisKKyAgICAgICAgI2lmIDEKKyAgICAgICAgICAgIHpmU2Nhbk1nclNjYW5TdG9wKGRldiwgWk1fU0NBTl9NR1JfU0NBTl9JTlRFUk5BTCk7CisgICAgICAgICNlbHNlCisgICAgICAgICAgICBpZiAoIHdkLT5zdGEuYkNoYW5uZWxTY2FuICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBzdG9wIHRoZSBhY3Rpb24gb2YgY2hhbm5lbCBzY2FubmluZyAqLworICAgICAgICAgICAgICAgIHdkLT5zdGEuYkNoYW5uZWxTY2FuID0gRkFMU0U7CisgICAgICAgICAgICAgICAgcmV0ID0gIFRSVUU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICNlbmRpZgorCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWk1fU1RBX1NUQVRFX0NPTk5FQ1RJTkc6CisgICAgICAgICNpZiAxCisgICAgICAgICAgICB6ZlNjYW5NZ3JTY2FuU3RvcChkZXYsIFpNX1NDQU5fTUdSX1NDQU5fSU5URVJOQUwpOworICAgICAgICAjZWxzZQorICAgICAgICAgICAgaWYgKCB3ZC0+c3RhLmJDaGFubmVsU2NhbiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogc3RvcCB0aGUgYWN0aW9uIG9mIGNoYW5uZWwgc2Nhbm5pbmcgKi8KKyAgICAgICAgICAgICAgICB3ZC0+c3RhLmJDaGFubmVsU2NhbiA9IEZBTFNFOworICAgICAgICAgICAgICAgIHJldCA9ICBUUlVFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAjZW5kaWYKKworICAgICAgICBicmVhazsKKyAgICBjYXNlIFpNX1NUQV9TVEFURV9DT05ORUNURUQ6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vaWYgKCByZXQgKQorICAgIC8veworICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICB3ZC0+c3RhLmFkYXB0ZXJTdGF0ZSA9IG5ld1N0YXRlOworICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgIHptX2RlYnVnX21zZzEoImNoYW5nZSBhZGFwdGVyIHN0YXRlID0gIiwgbmV3U3RhdGUpOworICAgIC8vfQorCisgICAgcmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmU3RhTW1BZGRJZVNzaWQgICAgICAgICAgICAqLworLyogICAgICBBZGQgaW5mb3JtYXRpb24gZWxlbWVudCBTU0lEIHRvIGJ1ZmZlci4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmIDogYnVmZmVyIHRvIGFkZCBpbmZvcm1hdGlvbiBlbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG9mZnNldCA6IGFkZCBpbmZvcm1hdGlvbiBlbGVtZW50IGZyb20gdGhpcyBvZmZzZXQgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZmZlciBvZmZzZXQgYWZ0ZXIgYWRkaW5nIGluZm9ybWF0aW9uIGVsZW1lbnQgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIEppLUh1YW5nIExlZSAgICAgICAgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAgICAyMDA1LjExICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MTZfdCB6ZlN0YUFkZEllU3NpZCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCkKK3sKKyAgICB1MTZfdCBpOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLyogRWxlbWVudCBJRCAqLworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgWk1fV0xBTl9FSURfU1NJRCk7CisKKyAgICAvKiBFbGVtZW50IExlbmd0aCAqLworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgd2QtPnN0YS5zc2lkTGVuKTsKKworICAgIC8qIEluZm9ybWF0aW9uIDogU1NJRCAqLworICAgIGZvciAoaT0wOyBpPHdkLT5zdGEuc3NpZExlbjsgaSsrKQorICAgIHsKKyAgICAgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCB3ZC0+c3RhLnNzaWRbaV0pOworICAgIH0KKworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZlN0YU1tQWRkSWVXcGEgICAgICAgICAgICAgKi8KKy8qICAgICAgQWRkIGluZm9ybWF0aW9uIGVsZW1lbnQgU1NJRCB0byBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZiA6IGJ1ZmZlciB0byBhZGQgaW5mb3JtYXRpb24gZWxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBvZmZzZXQgOiBhZGQgaW5mb3JtYXRpb24gZWxlbWVudCBmcm9tIHRoaXMgb2Zmc2V0ICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBidWZmZXIgb2Zmc2V0IGFmdGVyIGFkZGluZyBpbmZvcm1hdGlvbiBlbGVtZW50ICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBKaS1IdWFuZyBMZWUgICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNi4wMSAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZTdGFBZGRJZVdwYVJzbih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCwgdThfdCBmcmFtZVR5cGUpCit7CisgICAgdTMyX3QgIGk7CisgICAgdThfdCAgICBzc25bNjRdPXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVsZW1lbnQgSUQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDB4ZGQsCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgsCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBPVUkgdHlwZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHg1MCwgMHhmMiwgMHgwMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFZlcnNpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBHcm91cCBDaXBoZXIgU3VpdGUsIGRlZmF1bHQ9VEtJUCAqLworICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHg1MCwgMHhmMiwgMHgwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhaXJ3aXNlIENpcGhlciBTdWl0ZSBDb3VudCAqLworICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhaXJ3aXNlIENpcGhlciBTdWl0ZSwgZGVmYXVsdD1US0lQICovCisgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDUwLCAweGYyLCAweDAyLAorICAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0aGVudGljYXRpb24gYW5kIEtleSBNYW5hZ2VtZW50IFN1aXRlIENvdW50ICovCisgICAgICAgICAgICAgICAgICAgICAgICAweDAxLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgLyogQXV0aGVudGljYXRpb24gdHlwZSwgZGVmYXVsdD1QU0sgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBXUEEgY2FwYWJpbGl0eSAqLworICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwMAorICAgICAgICAgICAgICAgICAgICB9OworCisgICAgdThfdCAgICByc25bNjRdPXsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVsZW1lbnQgSUQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDB4MzAsCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQsCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBWZXJzaW9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAweDAxLCAweDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgLyogR3JvdXAgQ2lwaGVyIFN1aXRlLCBkZWZhdWx0PVRLSVAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MGYsIDB4YWMsIDB4MDIsCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYWlyd2lzZSBDaXBoZXIgU3VpdGUgQ291bnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEsIDB4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBQYWlyd2lzZSBDaXBoZXIgU3VpdGUsIGRlZmF1bHQ9VEtJUCAqLworICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCwgMHgwZiwgMHhhYywgMHgwMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIGFuZCBLZXkgTWFuYWdlbWVudCBTdWl0ZSBDb3VudCAqLworICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSwgMHgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEF1dGhlbnRpY2F0aW9uIHR5cGUsIGRlZmF1bHQ9UFNLICovCisgICAgICAgICAgICAgICAgICAgICAgICAweDAwLCAweDBmLCAweGFjLCAweDAyLAorICAgICAgICAgICAgICAgICAgICAgICAgLyogUlNOIGNhcGFiaWxpdHkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAsIDB4MDAKKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGlmICggd2QtPnN0YS5jdXJyZW50QXV0aE1vZGUgPT0gWk1fQVVUSF9NT0RFX1dQQVBTSyApCisgICAgeworICAgICAgICAvKiBPdmVyd3JpdGUgR3JvdXAgQ2lwaGVyIFN1aXRlIGJ5IEFQJ3Mgc2V0dGluZyAqLworICAgICAgICB6Zk1lbW9yeUNvcHkoc3NuKzgsIHdkLT5zdGEud3BhSWUrOCwgNCk7CisKKyAgICAgICAgaWYgKCB3ZC0+c3RhLndlcFN0YXR1cyA9PSBaTV9FTkNSWVBUSU9OX0FFUyApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE92ZXJ3cml0ZSBQYWlyd2lzZSBDaXBoZXIgU3VpdGUgYnkgQUVTICovCisgICAgICAgICAgICB6Zk1lbW9yeUNvcHkoc3NuKzE0LCB6Z1dwYUFlc091aSwgNCk7CisgICAgICAgIH0KKworICAgICAgICB6ZkNvcHlUb0ludFR4QnVmZmVyKGRldiwgYnVmLCBzc24sIG9mZnNldCwgc3NuWzFdKzIpOworICAgICAgICB6Zk1lbW9yeUNvcHkod2QtPnN0YS53cGFJZSwgc3NuLCBzc25bMV0rMik7CisgICAgICAgIG9mZnNldCArPSAoc3NuWzFdKzIpOworICAgIH0KKyAgICBlbHNlIGlmICggd2QtPnN0YS5jdXJyZW50QXV0aE1vZGUgPT0gWk1fQVVUSF9NT0RFX1dQQSApCisgICAgeworICAgICAgICAvKiBPdmVyd3JpdGUgR3JvdXAgQ2lwaGVyIFN1aXRlIGJ5IEFQJ3Mgc2V0dGluZyAqLworICAgICAgICB6Zk1lbW9yeUNvcHkoc3NuKzgsIHdkLT5zdGEud3BhSWUrOCwgNCk7CisgICAgICAgIC8qIE92ZXJ3cml0ZSBLZXkgTWFuYWdlbWVudCBTdWl0ZSBieSBXUEEtUmFkaXVzICovCisgICAgICAgIHpmTWVtb3J5Q29weShzc24rMjAsIHpnV3BhUmFkaXVzT3VpLCA0KTsKKworICAgICAgICBpZiAoIHdkLT5zdGEud2VwU3RhdHVzID09IFpNX0VOQ1JZUFRJT05fQUVTICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogT3ZlcndyaXRlIFBhaXJ3aXNlIENpcGhlciBTdWl0ZSBieSBBRVMgKi8KKyAgICAgICAgICAgIHpmTWVtb3J5Q29weShzc24rMTQsIHpnV3BhQWVzT3VpLCA0KTsKKyAgICAgICAgfQorCisgICAgICAgIHpmQ29weVRvSW50VHhCdWZmZXIoZGV2LCBidWYsIHNzbiwgb2Zmc2V0LCBzc25bMV0rMik7CisgICAgICAgIHpmTWVtb3J5Q29weSh3ZC0+c3RhLndwYUllLCBzc24sIHNzblsxXSsyKTsKKyAgICAgICAgb2Zmc2V0ICs9IChzc25bMV0rMik7CisgICAgfQorICAgIGVsc2UgaWYgKCB3ZC0+c3RhLmN1cnJlbnRBdXRoTW9kZSA9PSBaTV9BVVRIX01PREVfV1BBMlBTSyApCisgICAgeworICAgICAgICAvKiBPdmVyd3JpdGUgR3JvdXAgQ2lwaGVyIFN1aXRlIGJ5IEFQJ3Mgc2V0dGluZyAqLworICAgICAgICB6Zk1lbW9yeUNvcHkocnNuKzQsIHdkLT5zdGEucnNuSWUrNCwgNCk7CisKKyAgICAgICAgaWYgKCB3ZC0+c3RhLndlcFN0YXR1cyA9PSBaTV9FTkNSWVBUSU9OX0FFUyApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE92ZXJ3cml0ZSBQYWlyd2lzZSBDaXBoZXIgU3VpdGUgYnkgQUVTICovCisgICAgICAgICAgICB6Zk1lbW9yeUNvcHkocnNuKzEwLCB6Z1dwYTJBZXNPdWksIDQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBmcmFtZVR5cGUgPT0gWk1fV0xBTl9GUkFNRV9UWVBFX1JFQVNPQ1JFUSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvcihpPTA7IGk8d2QtPnN0YS5wbWtpZEluZm8uYnNzaWRDb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggemZNZW1vcnlJc0VxdWFsKCh1OF90Kikgd2QtPnN0YS5wbWtpZEluZm8uYnNzaWRJbmZvW2ldLmJzc2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1OF90Kikgd2QtPnN0YS5ic3NpZCwgNikgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogbWF0Y2hlZCAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIGkgPCB3ZC0+c3RhLnBta2lkSW5mby5ic3NpZENvdW50ICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZpbGwgUE1LSUQgQ291bnQgaW4gUlNOIGluZm9ybWF0aW9uIGVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgcnNuWzIyXSA9IDB4MDE7CisgICAgICAgICAgICAgICAgICAgIHJzblsyM10gPSAweDAwOworCisgICAgICAgICAgICAgICAgICAgIC8vIEZpbGwgUE1LSUQgaW4gUlNOIGluZm9ybWF0aW9uIGVsZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgemZNZW1vcnlDb3B5KHJzbisyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEucG1raWRJbmZvLmJzc2lkSW5mb1tpXS5wbWtpZCwgMTYpOworCQkJICAgICAgICAgICAgICAgICByc25bMV0gKz0gMTg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgemZDb3B5VG9JbnRUeEJ1ZmZlcihkZXYsIGJ1ZiwgcnNuLCBvZmZzZXQsIHJzblsxXSsyKTsKKyAgICAgICAgemZNZW1vcnlDb3B5KHdkLT5zdGEucnNuSWUsIHJzbiwgcnNuWzFdKzIpOworICAgICAgICBvZmZzZXQgKz0gKHJzblsxXSsyKTsKKyAgICB9CisgICAgZWxzZSBpZiAoIHdkLT5zdGEuY3VycmVudEF1dGhNb2RlID09IFpNX0FVVEhfTU9ERV9XUEEyICkKKyAgICB7CisgICAgICAgIC8qIE92ZXJ3cml0ZSBHcm91cCBDaXBoZXIgU3VpdGUgYnkgQVAncyBzZXR0aW5nICovCisgICAgICAgIHpmTWVtb3J5Q29weShyc24rNCwgd2QtPnN0YS5yc25JZSs0LCA0KTsKKyAgICAgICAgLyogT3ZlcndyaXRlIEtleSBNYW5hZ2VtZW50IFN1aXRlIGJ5IFdQQTItUmFkaXVzICovCisgICAgICAgIHpmTWVtb3J5Q29weShyc24rMTYsIHpnV3BhMlJhZGl1c091aSwgNCk7CisKKyAgICAgICAgaWYgKCB3ZC0+c3RhLndlcFN0YXR1cyA9PSBaTV9FTkNSWVBUSU9OX0FFUyApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE92ZXJ3cml0ZSBQYWlyd2lzZSBDaXBoZXIgU3VpdGUgYnkgQUVTICovCisgICAgICAgICAgICB6Zk1lbW9yeUNvcHkocnNuKzEwLCB6Z1dwYTJBZXNPdWksIDQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCggZnJhbWVUeXBlID09IFpNX1dMQU5fRlJBTUVfVFlQRV9SRUFTT0NSRVEgfHwgKCBmcmFtZVR5cGUgPT0gWk1fV0xBTl9GUkFNRV9UWVBFX0FTT0NSRVEgKSkpCisgICAgICAgIHsKKworICAgICAgICAgICAgaWYgKHdkLT5zdGEucG1raWRJbmZvLmJzc2lkQ291bnQgIT0gMCkgeworICAgICAgICAgICAgICAgIC8vIEZpbGwgUE1LSUQgQ291bnQgaW4gUlNOIGluZm9ybWF0aW9uIGVsZW1lbnQKKyAgICAgICAgICAgICAgICByc25bMjJdID0gMTsKKyAgICAgICAgICAgICAgICByc25bMjNdID0gMDsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqICBUaGUgY2FsbGVyIGlzIHJlc3Buc2libGUgdG8gZ2l2ZSB1cyB0aGUgcmVsZXZhbnQgUE1LSUQuCisgICAgICAgICAgICAgICAgICogIFdlJ2xsIG9ubHkgYWNjZXB0IDEgUE1LSUQgZm9yIG5vdy4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBmb3IoaT0wOyBpPHdkLT5zdGEucG1raWRJbmZvLmJzc2lkQ291bnQ7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICggemZNZW1vcnlJc0VxdWFsKCh1OF90Kikgd2QtPnN0YS5wbWtpZEluZm8uYnNzaWRJbmZvW2ldLmJzc2lkLCAodThfdCopIHdkLT5zdGEuYnNzaWQsIDYpICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgemZNZW1vcnlDb3B5KHJzbisyNCwgd2QtPnN0YS5wbWtpZEluZm8uYnNzaWRJbmZvW2ldLnBta2lkLCAxNik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByc25bMV0gKz0gMTg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCisgICAgICAgIHpmQ29weVRvSW50VHhCdWZmZXIoZGV2LCBidWYsIHJzbiwgb2Zmc2V0LCByc25bMV0rMik7CisgICAgICAgIHpmTWVtb3J5Q29weSh3ZC0+c3RhLnJzbkllLCByc24sIHJzblsxXSsyKTsKKyAgICAgICAgb2Zmc2V0ICs9IChyc25bMV0rMik7CisgICAgfQorCisgICAgcmV0dXJuIG9mZnNldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmU3RhQWRkSWVJYnNzICAgICAgICAgICAgICAqLworLyogICAgICBBZGQgaW5mb3JtYXRpb24gZWxlbWVudCBJQlNTIHBhcmFtZXRlciB0byBidWZmZXIuICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmIDogYnVmZmVyIHRvIGFkZCBpbmZvcm1hdGlvbiBlbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG9mZnNldCA6IGFkZCBpbmZvcm1hdGlvbiBlbGVtZW50IGZyb20gdGhpcyBvZmZzZXQgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZmZlciBvZmZzZXQgYWZ0ZXIgYWRkaW5nIGluZm9ybWF0aW9uIGVsZW1lbnQgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIEppLUh1YW5nIExlZSAgICAgICAgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAgICAyMDA1LjEyICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MTZfdCB6ZlN0YUFkZEllSWJzcyh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvKiBFbGVtZW50IElEICovCisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCBaTV9XTEFOX0VJRF9JQlNTKTsKKworICAgIC8qIEVsZW1lbnQgTGVuZ3RoICovCisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCAyKTsKKworICAgIC8qIEFUSU0gd2luZG93ICovCisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgd2QtPnN0YS5hdGltV2luZG93KTsKKyAgICBvZmZzZXQgKz0gMjsKKworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZTdGFBZGRJZVdtZUluZm8gICAgICAgICAgICovCisvKiAgICAgIEFkZCBXTUUgSW5mb3JtYXRpb24gRWxlbWVudCB0byBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBidWYgOiBidWZmZXIgdG8gYWRkIGluZm9ybWF0aW9uIGVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgb2Zmc2V0IDogYWRkIGluZm9ybWF0aW9uIGVsZW1lbnQgZnJvbSB0aGlzIG9mZnNldCAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmZmVyIG9mZnNldCBhZnRlciBhZGRpbmcgaW5mb3JtYXRpb24gZWxlbWVudCAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDYuNiAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90IHpmU3RhQWRkSWVXbWVJbmZvKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3Qgb2Zmc2V0LCB1OF90IHFvc0luZm8pCit7CisgICAgLyogRWxlbWVudCBJRCAqLworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgWk1fV0xBTl9FSURfV0lGSV9JRSk7CisKKyAgICAvKiBFbGVtZW50IExlbmd0aCAqLworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgNyk7CisKKyAgICAvKiBPVUkgKi8KKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIDB4MDApOworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgMHg1MCk7CisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCAweEYyKTsKKyAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIDB4MDIpOworICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQrKywgMHgwMCk7CisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCAweDAxKTsKKworICAgIC8qIFFvUyBJbmZvICovCisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCBxb3NJbmZvKTsKKworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZlN0YUFkZEllUG93ZXJDYXAgICAgICAgICAgKi8KKy8qICAgICAgQWRkIGluZm9ybWF0aW9uIGVsZW1lbnQgUG93ZXIgY2FwYWJpbGl0eSB0byBidWZmZXIuICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZiA6IGJ1ZmZlciB0byBhZGQgaW5mb3JtYXRpb24gZWxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBvZmZzZXQgOiBhZGQgaW5mb3JtYXRpb24gZWxlbWVudCBmcm9tIHRoaXMgb2Zmc2V0ICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBidWZmZXIgb2Zmc2V0IGFmdGVyIGFkZGluZyBpbmZvcm1hdGlvbiBlbGVtZW50ICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTaGFyb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDcuMTIgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZTdGFBZGRJZVBvd2VyQ2FwKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3Qgb2Zmc2V0KQoreworICAgIHU4X3QgTWF4VHhQb3dlcjsKKyAgICB1OF90IE1pblR4UG93ZXI7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvKiBFbGVtZW50IElEICovCisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCBaTV9XTEFOX0VJRF9QT1dFUl9DQVBBQklMSVRZKTsKKworICAgIC8qIEVsZW1lbnQgTGVuZ3RoICovCisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCAyKTsKKworICAgIE1pblR4UG93ZXIgPSAodThfdCkoemZIcEdldE1pblR4UG93ZXIoZGV2KS8yKTsKKyAgICBNYXhUeFBvd2VyID0gKHU4X3QpKHpmSHBHZXRNYXhUeFBvd2VyKGRldikvMik7CisKKyAgICAvKiBNaW4gVHJhbnNtaXQgUG93ZXIgQ2FwICovCisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCsrLCBNaW5UeFBvd2VyKTsKKworICAgIC8qIE1heCBUcmFuc21pdCBQb3dlciBDYXAgKi8KKyAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0KyssIE1heFR4UG93ZXIpOworCisgICAgcmV0dXJuIG9mZnNldDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZlN0YUFkZEllU3VwcG9ydENoICAgICAgICAgICAgICAqLworLyogICAgICBBZGQgaW5mb3JtYXRpb24gZWxlbWVudCBzdXBwb3J0ZWQgY2hhbm5lbHMgdG8gYnVmZmVyLiAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZiA6IGJ1ZmZlciB0byBhZGQgaW5mb3JtYXRpb24gZWxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBvZmZzZXQgOiBhZGQgaW5mb3JtYXRpb24gZWxlbWVudCBmcm9tIHRoaXMgb2Zmc2V0ICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBidWZmZXIgb2Zmc2V0IGFmdGVyIGFkZGluZyBpbmZvcm1hdGlvbiBlbGVtZW50ICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTaGFyb24gICAgICAgICAgICAyMDA3LjEyICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MTZfdCB6ZlN0YUFkZEllU3VwcG9ydENoKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3Qgb2Zmc2V0KQoreworCisgICAgdThfdCAgIGk7CisgICAgdTE2X3QgIGNvdW50XzI0RyA9IDA7CisgICAgdTE2X3QgIGNvdW50XzVHID0gMDsKKyAgICB1MTZfdCAgY2hhbm5lbE51bTsKKyAgICB1OF90ICAgbGVuZ3RoOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgZm9yIChpID0gMDsgaSA8IHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250OyBpKyspCisgICAgeworICAgICAgICBpZiAod2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0uY2hhbm5lbCA8IDMwMDApCisgICAgICAgIHsgLy8gMi40SHoKKyAgICAgICAgICAgIGNvdW50XzI0RysrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeyAvLyA1R0h6CisgICAgICAgICAgICBjb3VudF81RysrOworICAgICAgICB9CisgICAgfQorCisgICAgbGVuZ3RoID0gKHU4X3QpKGNvdW50XzVHICogMiArIDIpOyAvLzVHIGZpbGwgYnkgcGFpciwgMiw0RyAoY29udGludW91cyBjaGFubmVscykgZmlsbCAyIGJ5dGVzCisKKyAgICAvKiBFbGVtZW50IElEICovCisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCBaTV9XTEFOX0VJRF9TVVBQT1JURURfQ0hBTk5FTFMgKTsKKworICAgIC8qIEVsZW1lbnQgTGVuZ3RoICovCisgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCBsZW5ndGgpOworCisgICAgLy8gMi40R0h6IChjb250aW51b3VzIGNoYW5uZWxzKQorICAgIC8qIEZpcnN0IGNoYW5uZWwgbnVtYmVyICovCisgICAgem13X3R4X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCsrLCAxKTsgLy9TdGFydCBmcm9tIGNoYW5ubGUgMQorICAgIC8qIE51bWJlciBvZiBjaGFubmVscyAqLworICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQrKywgY291bnRfMjRHKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbENudCA7IGkrKykKKyAgICB7CisgICAgICAgIGlmICh3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5jaGFubmVsID4gNDAwMCAmJiB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5jaGFubmVsIDwgNTAwMCkKKyAgICAgICAgeyAvLyA1R0h6IDQwMDAgLTUwMDBNaHoKKyAgICAgICAgICAgIGNoYW5uZWxOdW0gPSAod2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0uY2hhbm5lbC00MDAwKS81OworICAgICAgICAgICAgLyogRmlyc3QgY2hhbm5lbCBudW1iZXIgKi8KKyAgICAgICAgICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQrKywgY2hhbm5lbE51bSk7CisgICAgICAgICAgICAvKiBOdW1iZXIgb2YgY2hhbm5lbHMgKi8KKyAgICAgICAgICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQrKywgMSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAod2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0uY2hhbm5lbCA+PSA1MDAwKQorICAgICAgICB7IC8vIDVHSHogPjUwMDBNaHoKKyAgICAgICAgICAgIGNoYW5uZWxOdW0gPSAod2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0uY2hhbm5lbC01MDAwKS81OworICAgICAgICAgICAgLyogRmlyc3QgY2hhbm5lbCBudW1iZXIgKi8KKyAgICAgICAgICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQrKywgY2hhbm5lbE51bSk7CisgICAgICAgICAgICAvKiBOdW1iZXIgb2YgY2hhbm5lbHMgKi8KKyAgICAgICAgICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQrKywgMSk7CisgICAgICAgIH0KKyAgICB9CisgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgcmV0dXJuIG9mZnNldDsKK30KKwordm9pZCB6ZlN0YVN0YXJ0Q29ubmVjdENiKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHpmU3RhU3RhcnRDb25uZWN0KGRldiwgd2QtPnN0YS5iSXNTaGFyZWRLZXkpOworfQorCit2b2lkIHpmU3RhU3RhcnRDb25uZWN0KHpkZXZfdCogZGV2LCB1OF90IGJJc1NoYXJlZEtleSkKK3sKKyAgICB1MzJfdCBwMSwgcDI7CisgICAgdThfdCBuZXdDb25uU3RhdGU7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIC8qIHAxX2xvdyA9IGFsZ29yaXRobSBudW1iZXIsIHAxX2hpZ2ggPSB0cmFuc2FjdGlvbiBzZXF1ZW5jZSBudW1iZXIgKi8KKyAgICBpZiAoIGJJc1NoYXJlZEtleSApCisgICAgeworICAgICAgICAvL3dkLT5zdGEuY29ubmVjdFN0YXRlID0gWk1fU1RBX0NPTk5fU1RBVEVfQVVUSF9TSEFSRV8xOworICAgICAgICBuZXdDb25uU3RhdGUgPSBaTV9TVEFfQ09OTl9TVEFURV9BVVRIX1NIQVJFXzE7CisgICAgICAgIHptX2RlYnVnX21zZzAoIlpNX1NUQV9DT05OX1NUQVRFX0FVVEhfU0hBUkVfMSIpOworICAgICAgICBwMSA9IFpNX0FVVEhfQUxHT19TSEFSRURfS0VZOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvL3dkLT5zdGEuY29ubmVjdFN0YXRlID0gWk1fU1RBX0NPTk5fU1RBVEVfQVVUSF9PUEVOOworICAgICAgICBuZXdDb25uU3RhdGUgPSBaTV9TVEFfQ09OTl9TVEFURV9BVVRIX09QRU47CisgICAgICAgIHptX2RlYnVnX21zZzAoIlpNX1NUQV9DT05OX1NUQVRFX0FVVEhfT1BFTiIpOworICAgICAgICBpZiggd2QtPnN0YS5sZWFwRW5hYmxlZCApCisgICAgICAgICAgICBwMSA9IFpNX0FVVEhfQUxHT19MRUFQOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwMSA9IFpNX0FVVEhfQUxHT19PUEVOX1NZU1RFTTsKKyAgICB9CisKKyAgICAvKiBzdGF0dXMgY29kZSAqLworICAgIHAyID0gMHgwOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICB3ZC0+c3RhLmNvbm5lY3RUaW1lciA9IHdkLT50aWNrOworICAgIHdkLT5zdGEuY29ubmVjdFN0YXRlID0gbmV3Q29ublN0YXRlOworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAvKiBzZW5kIHRoZSAxc3QgYXV0aGVudGljYXRpb24gZnJhbWUgKi8KKyAgICB6ZlNlbmRNbUZyYW1lKGRldiwgWk1fV0xBTl9GUkFNRV9UWVBFX0FVVEgsIHdkLT5zdGEuYnNzaWQsIHAxLCBwMiwgMCk7CisKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgemZTZW5kTnVsbERhdGEoemRldl90KiBkZXYsIHU4X3QgdHlwZSkKK3sKKyAgICB6YnVmX3QqIGJ1ZjsKKyAgICAvL3UxNl90IGFkZHJUYmxTaXplOworICAgIC8vc3RydWN0IHpzQWRkclRibCBhZGRyVGJsOworICAgIHUxNl90IGVycjsKKyAgICB1MTZfdCBobGVuOworICAgIHUxNl90IGhlYWRlclsoMzQrOCsxKS8yXTsKKyAgICB1MTZfdCBiY2FzdEFkZHJbM10gPSB7MHhmZmZmLDB4ZmZmZiwweGZmZmZ9OworICAgIHUxNl90ICpkc3RBZGRyOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYgKChidWYgPSB6ZndCdWZBbGxvY2F0ZShkZXYsIDEwMjQpKSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgem1fbXNnMF9tbShaTV9MVl8wLCAiQWxsb2MgbW0gYnVmIEZhaWwhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB6ZndCdWZTZXRTaXplKGRldiwgYnVmLCAwKTsKKworICAgIC8vem1fbXNnMl9tbShaTV9MVl8yLCAiYnVmLT5sZW49IiwgYnVmLT5sZW4pOworCisgICAgaWYgKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JQlNTKQorICAgIHsKKyAgICAgICAgZHN0QWRkciA9IGJjYXN0QWRkcjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZHN0QWRkciA9IHdkLT5zdGEuYnNzaWQ7CisgICAgfQorCisgICAgaWYgKHdkLT5zdGEud21lQ29ubmVjdGVkICE9IDApCisgICAgeworICAgICAgICAvKiBJZiBjb25uZWN0IHRvIGEgV01NIEFQLCBTZW5kIFFvUyBOdWxsIGRhdGEgKi8KKyAgICAgICAgaGxlbiA9IHpmVHhHZW5NbUhlYWRlcihkZXYsIFpNX1dMQU5fRlJBTUVfVFlQRV9RT1NfTlVMTCwgZHN0QWRkciwgaGVhZGVyLCAwLCBidWYsIDAsIDApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBobGVuID0gemZUeEdlbk1tSGVhZGVyKGRldiwgWk1fV0xBTl9GUkFNRV9UWVBFX05VTEwsIGRzdEFkZHIsIGhlYWRlciwgMCwgYnVmLCAwLCAwKTsKKyAgICB9CisKKyAgICBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUpCisgICAgeworICAgICAgICBoZWFkZXJbNF0gfD0gMHgwMTAwOyAvL1RPRFMgYml0CisgICAgfQorCisgICAgaWYgKCB0eXBlID09IDEgKQorICAgIHsKKyAgICAgICAgaGVhZGVyWzRdIHw9IDB4MTAwMDsKKyAgICB9CisKKyAgICAvKiBHZXQgYnVmZmVyIERNQSBhZGRyZXNzICovCisgICAgLy9pZiAoKGFkZHJUYmxTaXplID0gemZ3QnVmTWFwRG1hKGRldiwgYnVmLCAmYWRkclRibCkpID09IDApCisgICAgLy9pZiAoKGFkZHJUYmxTaXplID0gemZ3TWFwVHhEbWEoZGV2LCBidWYsICZhZGRyVGJsKSkgPT0gMCkKKyAgICAvL3sKKyAgICAvLyAgICBnb3RvIHpsRXJyb3I7CisgICAgLy99CisKKyAgICAvKmluY3JlYXNlIHVuaWNhc3QgZnJhbWUgY291bnRlciovCisgICAgd2QtPmNvbW1UYWxseS50eFVuaWNhc3RGcm0rKzsKKworICAgIGlmICgoZXJyID0gemZIcFNlbmQoZGV2LCBoZWFkZXIsIGhsZW4sIE5VTEwsIDAsIE5VTEwsIDAsIGJ1ZiwgMCwKKyAgICAgICAgICAgIFpNX0lOVEVSTkFMX0FMTE9DX0JVRiwgMCwgMHhmZikpICE9IFpNX1NVQ0NFU1MpCisgICAgeworICAgICAgICBnb3RvIHpsRXJyb3I7CisgICAgfQorCisKKyAgICByZXR1cm47CisKK3psRXJyb3I6CisKKyAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKyAgICByZXR1cm47CisKK30KKwordm9pZCB6ZlNlbmRQU1BvbGwoemRldl90KiBkZXYpCit7CisgICAgemJ1Zl90KiBidWY7CisgICAgLy91MTZfdCBhZGRyVGJsU2l6ZTsKKyAgICAvL3N0cnVjdCB6c0FkZHJUYmwgYWRkclRibDsKKyAgICB1MTZfdCBlcnI7CisgICAgdTE2X3QgaGxlbjsKKyAgICB1MTZfdCBoZWFkZXJbKDgrMjQrMSkvMl07CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAoKGJ1ZiA9IHpmd0J1ZkFsbG9jYXRlKGRldiwgMTAyNCkpID09IE5VTEwpCisgICAgeworICAgICAgICB6bV9tc2cwX21tKFpNX0xWXzAsICJBbGxvYyBtbSBidWYgRmFpbCEiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHpmd0J1ZlNldFNpemUoZGV2LCBidWYsIDApOworCisgICAgLy96bV9tc2cyX21tKFpNX0xWXzIsICJidWYtPmxlbj0iLCBidWYtPmxlbik7CisKKyAgICB6ZlR4R2VuTW1IZWFkZXIoZGV2LCBaTV9XTEFOX0ZSQU1FX1RZUEVfUFNQT0xMLCB3ZC0+c3RhLmJzc2lkLCBoZWFkZXIsIDAsIGJ1ZiwgMCwgMCk7CisKKyAgICBoZWFkZXJbMF0gPSAyMDsKKyAgICBoZWFkZXJbNF0gfD0gMHgxMDAwOworICAgIGhlYWRlcls1XSA9IHdkLT5zdGEuYWlkIHwgMHhjMDAwOyAvL0JvdGggYml0LTE0IGFuZCBiaXQtMTUgYXJlIDEKKyAgICBobGVuID0gMTYgKyA4OworCisgICAgLyogR2V0IGJ1ZmZlciBETUEgYWRkcmVzcyAqLworICAgIC8vaWYgKChhZGRyVGJsU2l6ZSA9IHpmd0J1Zk1hcERtYShkZXYsIGJ1ZiwgJmFkZHJUYmwpKSA9PSAwKQorICAgIC8vaWYgKChhZGRyVGJsU2l6ZSA9IHpmd01hcFR4RG1hKGRldiwgYnVmLCAmYWRkclRibCkpID09IDApCisgICAgLy97CisgICAgLy8gICAgZ290byB6bEVycm9yOworICAgIC8vfQorCisgICAgaWYgKChlcnIgPSB6ZkhwU2VuZChkZXYsIGhlYWRlciwgaGxlbiwgTlVMTCwgMCwgTlVMTCwgMCwgYnVmLCAwLAorICAgICAgICAgICAgWk1fSU5URVJOQUxfQUxMT0NfQlVGLCAwLCAweGZmKSkgIT0gWk1fU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGdvdG8gemxFcnJvcjsKKyAgICB9CisKKyAgICByZXR1cm47CisKK3psRXJyb3I6CisKKyAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKyAgICByZXR1cm47CisKK30KKwordm9pZCB6ZlNlbmRCQSh6ZGV2X3QqIGRldiwgdTE2X3Qgc3RhcnRfc2VxLCB1OF90ICpiaXRtYXApCit7CisgICAgemJ1Zl90KiBidWY7CisgICAgLy91MTZfdCBhZGRyVGJsU2l6ZTsKKyAgICAvL3N0cnVjdCB6c0FkZHJUYmwgYWRkclRibDsKKyAgICB1MTZfdCBlcnI7CisgICAgdTE2X3QgaGxlbjsKKyAgICB1MTZfdCBoZWFkZXJbKDgrMjQrMSkvMl07CisgICAgdTE2X3QgaSwgb2Zmc2V0ID0gMDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGlmICgoYnVmID0gemZ3QnVmQWxsb2NhdGUoZGV2LCAxMDI0KSkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHptX21zZzBfbW0oWk1fTFZfMCwgIkFsbG9jIG1tIGJ1ZiBGYWlsISIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgemZ3QnVmU2V0U2l6ZShkZXYsIGJ1ZiwgMTIpOyAvLyAyOCA9IEZDIDIgKyBEVSAyICsgUkEgNiArIFRBIDYgKyBCQUMgMiArIFNFUSAyICsgQml0TWFwIDgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEyID0gQkFDIDIgKyBTRVEgMiArIEJpdE1hcCA4CisKKyAgICAvL3ptX21zZzJfbW0oWk1fTFZfMiwgImJ1Zi0+bGVuPSIsIGJ1Zi0+bGVuKTsKKworICAgIHpmVHhHZW5NbUhlYWRlcihkZXYsIFpNX1dMQU5fRlJBTUVfVFlQRV9CQSwgd2QtPnN0YS5ic3NpZCwgaGVhZGVyLCAwLCBidWYsIDAsIDApOworCisgICAgaGVhZGVyWzBdID0gMzI7IC8qIE1BQyBoZWFkZXIgMTYgKyBCQSBjb250cm9sIDIgKyBCQSBpbmZvIDEwICsgRkNTIDQqLworICAgIGhlYWRlclsxXSA9IDB4NDsgIC8qIE5vIEFDSyAqLworCisgICAgLyogc2VuZCBieSBPRkRNIDZNICovCisgICAgaGVhZGVyWzJdID0gKHUxNl90KSh6Y1JhdGVUb1BoeUN0cmxbNF0gJiAweGZmZmYpOworICAgIGhlYWRlclszXSA9ICh1MTZfdCkoemNSYXRlVG9QaHlDdHJsWzRdPj4xNikgJiAweGZmZmY7CisKKyAgICBobGVuID0gMTYgKyA4OyAgLyogTUFDIGhlYWRlciAxNiArIGNvbnRyb2wgOCovCisgICAgb2Zmc2V0ID0gMDsKKyAgICB6bXdfdHhfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0LCAweDA1KTsgLypjb21wcmVzc2VkIGJpdG1hcCBvbiovCisgICAgb2Zmc2V0Kz0yOworICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIHN0YXJ0X3NlcSk7CisgICAgb2Zmc2V0Kz0yOworCisgICAgZm9yIChpPTA7IGk8ODsgaSsrKSB7CisgICAgICAgIHptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQsIGJpdG1hcFtpXSk7CisgICAgICAgIG9mZnNldCsrOworICAgIH0KKworICAgIGlmICgoZXJyID0gemZIcFNlbmQoZGV2LCBoZWFkZXIsIGhsZW4sIE5VTEwsIDAsIE5VTEwsIDAsIGJ1ZiwgMCwKKyAgICAgICAgICAgIFpNX0lOVEVSTkFMX0FMTE9DX0JVRiwgMCwgMHhmZikpICE9IFpNX1NVQ0NFU1MpCisgICAgeworICAgICAgICBnb3RvIHpsRXJyb3I7CisgICAgfQorCisgICAgcmV0dXJuOworCit6bEVycm9yOgorCisgICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CisgICAgcmV0dXJuOworCit9CisKK3ZvaWQgemZTdGFHZXRUeFJhdGUoemRldl90KiBkZXYsIHUxNl90KiBtYWNBZGRyLCB1MzJfdCogcGh5Q3RybCwKKyAgICAgICAgdTE2X3QqIHJjUHJvYmluZ0ZsYWcpCit7CisgICAgdThfdCAgIGFkZHJbNl0sIGk7CisgICAgdThfdCAgIHJhdGU7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICBaTV9NQUNfV09SRF9UT19CWVRFKG1hY0FkZHIsIGFkZHIpOworICAgICpwaHlDdHJsID0gMDsKKworICAgIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUgKQorICAgIHsKKyAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgcmF0ZSA9ICh1OF90KXpmUmF0ZUN0cmxHZXRUeFJhdGUoZGV2LCAmd2QtPnN0YS5vcHBvc2l0ZUluZm9bMF0ucmNDZWxsLCByY1Byb2JpbmdGbGFnKTsKKy8vI2lmZGVmIFpNX0ZCNTAKKyAgICAgICAgLy9yYXRlID0gMjc7CisvLyNlbmRpZgorICAgICAgICAqcGh5Q3RybCA9IHpjUmF0ZVRvUGh5Q3RybFtyYXRlXTsKKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgZm9yKGk9MDsgaTx3ZC0+c3RhLm9wcG9zaXRlQ291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBhZGRyWzBdICYmIDB4MDEgPT0gMSApIC8vIFRoZSBkZWZhdWx0IGJlYWNvbiB0cmFuc21pdHRlZCByYXRlIGlzIENDSyBhbmQgMSBNYnBzICwgYnV0IHRoZSBhIG1vZGUgc2hvdWxkIHVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9GRE0gbW9kdWxhdGlvbiBhbmQgNk1icHMgdG8gdHJhbnNtaXQgYmVhY29uLgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vcmF0ZSA9ICh1OF90KXpmUmF0ZUN0cmxHZXRUeFJhdGUoZGV2LCAmd2QtPnN0YS5vcHBvc2l0ZUluZm9baV0ucmNDZWxsLCByY1Byb2JpbmdGbGFnKTsKKyAgICAgICAgICAgICAgICByYXRlID0gd2QtPnN0YS5vcHBvc2l0ZUluZm9baV0ucmNDZWxsLm9wZXJhdGlvblJhdGVTZXRbMF07CisgICAgICAgICAgICAgICAgKnBoeUN0cmwgPSB6Y1JhdGVUb1BoeUN0cmxbcmF0ZV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICggemZNZW1vcnlJc0VxdWFsKGFkZHIsIHdkLT5zdGEub3Bwb3NpdGVJbmZvW2ldLm1hY0FkZHIsIDYpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByYXRlID0gKHU4X3QpemZSYXRlQ3RybEdldFR4UmF0ZShkZXYsICZ3ZC0+c3RhLm9wcG9zaXRlSW5mb1tpXS5yY0NlbGwsIHJjUHJvYmluZ0ZsYWcpOworICAgICAgICAgICAgICAgICpwaHlDdHJsID0gemNSYXRlVG9QaHlDdHJsW3JhdGVdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgfQorCisgICAgcmV0dXJuOworfQorCitzdHJ1Y3QgenNNaWNWYXIqIHpmU3RhR2V0UnhNaWNLZXkoemRldl90KiBkZXYsIHpidWZfdCogYnVmKQoreworICAgIHU4X3Qga2V5SW5kZXg7CisgICAgdThfdCBkYTA7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvKiBpZiBuZWVkIG5vdCBjaGVjayBNSUMsIHJldHVybiBOVUxMICovCisgICAgaWYgKCAoKHdkLT5zdGEuZW5jcnlNb2RlICE9IFpNX1RLSVApJiYod2QtPnN0YS5lbmNyeU1vZGUgIT0gWk1fQUVTKSl8fAorICAgICAgICAgKHdkLT5zdGEud3BhU3RhdGUgPCBaTV9TVEFfV1BBX1NUQVRFX1BLX09LKSApCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBkYTAgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BMV9PRkZTRVQpOworCisgICAgaWYgKCh6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAwKSAmIDB4ODApID09IDB4ODApCisgICAgICAgIGtleUluZGV4ID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfSVZfT0ZGU0VUKzUpOyAvKiBRb3MgUGFja2V0Ki8KKyAgICBlbHNlCisgICAgICAgIGtleUluZGV4ID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfSVZfT0ZGU0VUKzMpOyAvKiBub3JtYWwgUGFja2V0Ki8KKyAgICBrZXlJbmRleCA9IChrZXlJbmRleCAmIDB4YzApID4+IDY7CisKKyAgICByZXR1cm4gKCZ3ZC0+c3RhLnJ4TWljS2V5W2tleUluZGV4XSk7Cit9CisKK3N0cnVjdCB6c01pY1ZhciogemZTdGFHZXRUeE1pY0tleSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLyogaWYgbmVlZCBub3QgY2hlY2sgTUlDLCByZXR1cm4gTlVMTCAqLworICAgIC8vaWYgKCAoKHdkLT5zdGEuZW5jcnlNb2RlICE9IFpNX1RLSVApJiYod2QtPnN0YS5lbmNyeU1vZGUgIT0gWk1fQUVTKSl8fAorICAgIC8vICAgICAod2QtPnN0YS53cGFTdGF0ZSA8IFpNX1NUQV9XUEFfU1RBVEVfUEtfT0spICkKKyAgICBpZiAoICh3ZC0+c3RhLmVuY3J5TW9kZSAhPSBaTV9US0lQKSB8fCAod2QtPnN0YS53cGFTdGF0ZSA8IFpNX1NUQV9XUEFfU1RBVEVfUEtfT0spICkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiAoJndkLT5zdGEudHhNaWNLZXkpOworfQorCit1MTZfdCB6ZlN0YVJ4VmFsaWRhdGVGcmFtZSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgdThfdCAgIGZyYW1lVHlwZSwgZnJhbWVDdHJsOworICAgIHU4X3QgICBkYTA7CisgICAgLy91MTZfdCAgc2FbM107CisgICAgdTE2X3QgIHJldDsKKyAgICB1MTZfdCAgaTsKKyAgICAvL3U4X3QgICAgc2EwOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgZnJhbWVUeXBlID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMCk7CisgICAgZGEwID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTFfT0ZGU0VUKTsKKyAgICAvL3NhMCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIFpNX1dMQU5fSEVBREVSX0EyX09GRlNFVCk7CisKKyAgICBpZiAoICghemZTdGFJc0Nvbm5lY3RlZChkZXYpKSYmKChmcmFtZVR5cGUgJiAweGYpID09IFpNX1dMQU5fREFUQV9GUkFNRSkgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFpNX0VSUl9EQVRBX0JFRk9SRV9DT05ORUNURUQ7CisgICAgfQorCisKKyAgICBpZiAoICh6ZlN0YUlzQ29ubmVjdGVkKGRldikpJiYoKGZyYW1lVHlwZSAmIDB4ZikgPT0gWk1fV0xBTl9EQVRBX0ZSQU1FKSApCisgICAgeworICAgICAgICAvKiBjaGVjayBCU1NJRCAqLworICAgICAgICBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogQmlnIEVuZGlhbiBhbmQgTGl0dGxlIEVuZGlhbiBDb21wYXRpYmlsaXR5ICovCisgICAgICAgICAgICB1MTZfdCBtYWNbM107CisgICAgICAgICAgICBtYWNbMF0gPSB6bXdfY3B1X3RvX2xlMTYod2QtPnN0YS5ic3NpZFswXSk7CisgICAgICAgICAgICBtYWNbMV0gPSB6bXdfY3B1X3RvX2xlMTYod2QtPnN0YS5ic3NpZFsxXSk7CisgICAgICAgICAgICBtYWNbMl0gPSB6bXdfY3B1X3RvX2xlMTYod2QtPnN0YS5ic3NpZFsyXSk7CisgICAgICAgICAgICBpZiAoICF6ZlJ4QnVmZmVyRXF1YWxUb1N0cihkZXYsIGJ1ZiwgKHU4X3QgKiltYWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTV9XTEFOX0hFQURFUl9BMl9PRkZTRVQsIDYpICkKKyAgICAgICAgICAgIHsKKy8qV2Ugd2lsbCBnZXQgbG90cyBvZiBnYXJiYWdlIGRhdGEsIGVzcGVjaWFsbHkgaW4gQUVTIG1vZGUuKi8KKy8qVG8gYXZvaWQgc2VuZGluZyB0b28gbWFueSBkZWF1dGhlbnRpY2F0aW9uIGZyYW1lcyBpbiBTVEEgbW9kZSwgbWFyayBpdC4qLworI2lmIDAKKyAgICAgICAgICAgICAgICAvKiBJZiB1bmljYXN0IGZyYW1lLCBzZW5kIGRlYXV0aCB0byB0aGUgdHJhbnNtaXR0ZXIgKi8KKyAgICAgICAgICAgICAgICBpZiAoKCBkYTAgJiAweDAxICkgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPDM7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc2FbaV0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BMl9PRkZTRVQrKGkqMikpOworICAgICAgICAgICAgICAgICAgICB9CisJCQkJCS8qIElmIG11dGlsY2FzdCBhZGRyZXNzLCBkb24ndCBzZW5kIGRlYXV0aGVudGljYXRpb24qLworCQkJCQlpZiAoKCBzYTAgJiAweDAxICkgPT0gMCkKKwkgICAgICAgICAgICAgICAgICAJemZTZW5kTW1GcmFtZShkZXYsIFpNX1dMQU5fRlJBTUVfVFlQRV9ERUFVVEgsIHNhLCA3LCAwLCAwKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZXR1cm4gWk1fRVJSX0RBVEFfQlNTSURfTk9UX01BVENIRUQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lCU1MgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBCaWcgRW5kaWFuIGFuZCBMaXR0bGUgRW5kaWFuIENvbXBhdGliaWxpdHkgKi8KKyAgICAgICAgICAgIHUxNl90IG1hY1szXTsKKyAgICAgICAgICAgIG1hY1swXSA9IHptd19jcHVfdG9fbGUxNih3ZC0+c3RhLmJzc2lkWzBdKTsKKyAgICAgICAgICAgIG1hY1sxXSA9IHptd19jcHVfdG9fbGUxNih3ZC0+c3RhLmJzc2lkWzFdKTsKKyAgICAgICAgICAgIG1hY1syXSA9IHptd19jcHVfdG9fbGUxNih3ZC0+c3RhLmJzc2lkWzJdKTsKKyAgICAgICAgICAgIGlmICggIXpmUnhCdWZmZXJFcXVhbFRvU3RyKGRldiwgYnVmLCAodThfdCAqKW1hYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpNX1dMQU5fSEVBREVSX0EzX09GRlNFVCwgNikgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBaTV9FUlJfREFUQV9CU1NJRF9OT1RfTUFUQ0hFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZyYW1lQ3RybCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDEpOworCisgICAgICAgIC8qIGNoZWNrIHNlY3VyaXR5IGJpdCAqLworICAgICAgICBpZiAoIHdkLT5zdGEuZHJvcFVuZW5jcnlwdGVkUGt0cyAmJgorICAgICAgICAgICAgICh3ZC0+c3RhLndlcFN0YXR1cyAhPSBaTV9FTkNSWVBUSU9OX1dFUF9ESVNBQkxFRCApJiYKKyAgICAgICAgICAgICAoICEoZnJhbWVDdHJsICYgWk1fQklUXzYpICkgKQorICAgICAgICB7ICAgLyogc2VjdXJpdHkgb24sIGJ1dCBnb3QgZGF0YSB3aXRob3V0IGVuY3J5cHRpb24gKi8KKworICAgICAgICAgICAgI2lmIDEKKyAgICAgICAgICAgIHJldCA9IFpNX0VSUl9EQVRBX05PVF9FTkNSWVBURUQ7CisgICAgICAgICAgICBpZiAoIHdkLT5zdGEucFN0YVJ4U2VjdXJpdHlDaGVja0NiICE9IE5VTEwgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldCA9IHdkLT5zdGEucFN0YVJ4U2VjdXJpdHlDaGVja0NiKGRldiwgYnVmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXQgPSBaTV9FUlJfREFUQV9OT1RfRU5DUllQVEVEOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJldCA9PSBaTV9FUlJfREFUQV9OT1RfRU5DUllQVEVEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT5jb21tVGFsbHkuc3dSeERyb3BVbmVuY3J5cHRlZENvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgIGlmICggKHdkLT5zdGEud2VwU3RhdHVzICE9IFpNX0VOQ1JZUFRJT05fVEtJUCkmJgorICAgICAgICAgICAgICAgICAod2QtPnN0YS53ZXBTdGF0dXMgIT0gWk1fRU5DUllQVElPTl9BRVMpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gWk1fRVJSX0RBVEFfTk9UX0VOQ1JZUFRFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFpNX1NVQ0NFU1M7Cit9CisKK3ZvaWQgemZTdGFNaWNGYWlsdXJlSGFuZGxpbmcoemRldl90KiBkZXYsIHpidWZfdCogYnVmKQoreworICAgIHU4X3QgICBkYTA7CisgICAgdThfdCAgIG1pY05vdGlmeSA9IDE7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgaWYgKCB3ZC0+c3RhLndwYVN0YXRlIDwgIFpNX1NUQV9XUEFfU1RBVEVfUEtfT0sgKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICB3ZC0+c3RhLmNtTWljRmFpbHVyZUNvdW50Kys7CisKKyAgICBpZiAoIHdkLT5zdGEuY21NaWNGYWlsdXJlQ291bnQgPT0gMSApCisgICAgeworICAgICAgICB6bV9kZWJ1Z19tc2cwKCJnZXQgdGhlIGZpcnN0IE1JQyBmYWlsdXJlIik7CisgICAgICAgIC8vemZUaW1lclNjaGVkdWxlKGRldiwgWk1fRVZFTlRfQ01fVElNRVIsIFpNX1RJQ0tfQ01fVElNRU9VVCk7CisKKyAgICAgICAgLyogVGltZXIgUmVzb2x1dGlvbiBvbiBXaW5YUCBpcyAxNS8xNiBtcyAgKi8KKyAgICAgICAgLyogRGVjcmVhc2UgVGltZSBvZmZzZXQgZm9yIDxYUD4gQ291bnRlciBNZWFzdXJlICovCisgICAgICAgIHpmVGltZXJTY2hlZHVsZShkZXYsIFpNX0VWRU5UX0NNX1RJTUVSLCBaTV9USUNLX0NNX1RJTUVPVVQgLSBaTV9USUNLX0NNX1RJTUVPVVRfT0ZGU0VUKTsKKyAgICB9CisgICAgZWxzZSBpZiAoIHdkLT5zdGEuY21NaWNGYWlsdXJlQ291bnQgPT0gMiApCisgICAgeworICAgICAgICB6bV9kZWJ1Z19tc2cwKCJnZXQgdGhlIHNlY29uZCBNSUMgZmFpbHVyZSIpOworICAgICAgICAvKiByZXNlcnZlIDIgc2Vjb25kIGZvciBPUyB0byBzZW5kIE1JQyBmYWlsdXJlIHJlcG9ydCB0byBBUCAqLworICAgICAgICB3ZC0+c3RhLmNtRGlzYWxsb3dTc2lkTGVuZ3RoID0gd2QtPnN0YS5zc2lkTGVuOworICAgICAgICB6Zk1lbW9yeUNvcHkod2QtPnN0YS5jbURpc2FsbG93U3NpZCwgd2QtPnN0YS5zc2lkLCB3ZC0+c3RhLnNzaWRMZW4pOworICAgICAgICAvL3dkLT5zdGEuY21NaWNGYWlsdXJlQ291bnQgPSAwOworICAgICAgICB6ZlRpbWVyQ2FuY2VsKGRldiwgWk1fRVZFTlRfQ01fVElNRVIpOworICAgICAgICAvL3pmVGltZXJTY2hlZHVsZShkZXYsIFpNX0VWRU5UX0NNX0RJU0NPTk5FQ1QsIFpNX1RJQ0tfQ01fRElTQ09OTkVDVCk7CisKKyAgICAgICAgLyogVGltZXIgUmVzb2x1dGlvbiBvbiBXaW5YUCBpcyAxNS8xNiBtcyAgKi8KKyAgICAgICAgLyogRGVjcmVhc2UgVGltZSBvZmZzZXQgZm9yIDxYUD4gQ291bnRlciBNZWFzdXJlICovCisgICAgICAgIHpmVGltZXJTY2hlZHVsZShkZXYsIFpNX0VWRU5UX0NNX0RJU0NPTk5FQ1QsIFpNX1RJQ0tfQ01fRElTQ09OTkVDVCAtIFpNX1RJQ0tfQ01fRElTQ09OTkVDVF9PRkZTRVQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtaWNOb3RpZnkgPSAwOworICAgIH0KKworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBpZiAobWljTm90aWZ5ID09IDEpCisgICAgeworICAgICAgICBkYTAgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BMV9PRkZTRVQpOworICAgICAgICBpZiAoIGRhMCAmIDB4MDEgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2QtPnpmY2JNaWNGYWlsdXJlTm90aWZ5ICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnpmY2JNaWNGYWlsdXJlTm90aWZ5KGRldiwgd2QtPnN0YS5ic3NpZCwgWk1fTUlDX0dST1VQX0VSUk9SKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3ZC0+emZjYk1pY0ZhaWx1cmVOb3RpZnkgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+emZjYk1pY0ZhaWx1cmVOb3RpZnkoZGV2LCB3ZC0+c3RhLmJzc2lkLCBaTV9NSUNfUEFJUldJU0VfRVJST1IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisKK3U4X3QgemZTdGFCbG9ja1dsYW5TY2FuKHpkZXZfdCogZGV2KQoreworICAgIHU4X3QgICByZXQ9RkFMU0U7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAoIHdkLT5zdGEuYkNoYW5uZWxTY2FuICkKKyAgICB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgemZTdGFSZXNldFN0YXR1cyh6ZGV2X3QqIGRldiwgdThfdCBiSW5pdCkKK3sKKyAgICB1OF90ICAgaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHpmSHBEaXNhYmxlQmVhY29uKGRldik7CisKKyAgICB3ZC0+ZHRpbSA9IDE7CisgICAgd2QtPnN0YS5jYXBhYmlsaXR5WzBdID0gMHgwMTsKKyAgICB3ZC0+c3RhLmNhcGFiaWxpdHlbMV0gPSAweDAwOworICAgIC8qIDgwMi4xMWggKi8KKyAgICBpZiAod2QtPnN0YS5ERlNFbmFibGUgfHwgd2QtPnN0YS5UUENFbmFibGUpCisgICAgICAgIHdkLT5zdGEuY2FwYWJpbGl0eVsxXSB8PSBaTV9CSVRfMDsKKworICAgIC8qIHJlbGVhc2UgcXVldWVkIHBhY2tldHMgKi8KKyAgICBmb3IoaT0wOyBpPHdkLT5zdGEuaWJzc1BTRGF0YUNvdW50OyBpKyspCisgICAgeworICAgICAgICB6ZndCdWZGcmVlKGRldiwgd2QtPnN0YS5pYnNzUFNEYXRhUXVldWVbaV0sIDApOworICAgIH0KKworICAgIGZvcihpPTA7IGk8d2QtPnN0YS5zdGFQU0RhdGFDb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgemZ3QnVmRnJlZShkZXYsIHdkLT5zdGEuc3RhUFNEYXRhUXVldWVbaV0sIDApOworICAgIH0KKworICAgIHdkLT5zdGEuaWJzc1BTRGF0YUNvdW50ID0gMDsKKyAgICB3ZC0+c3RhLnN0YVBTRGF0YUNvdW50ID0gMDsKKyAgICB6Zlplcm9NZW1vcnkoKHU4X3QqKSAmd2QtPnN0YS5zdGFQU0xpc3QsIHNpemVvZihzdHJ1Y3QgenNTdGFQU0xpc3QpKTsKKworICAgIHdkLT5zdGEud21lQ29ubmVjdGVkID0gMDsKKyAgICB3ZC0+c3RhLnBzTWdyLnRlbXBXYWtlVXAgPSAwOworICAgIHdkLT5zdGEucW9zSW5mbyA9IDA7CisgICAgemZRdWV1ZUZsdXNoKGRldiwgd2QtPnN0YS51YXBzZFEpOworCisgICAgcmV0dXJuOworCit9CisKK3ZvaWQgemZTdGFJYnNzTW9uaXRvcmluZyh6ZGV2X3QqIGRldiwgdThfdCByZXNldCkKK3sKKyAgICB1MTZfdCBpOworICAgIHUxNl90IG9wcG9zaXRlQ291bnQ7CisgICAgc3RydWN0IHpzUGFydG5lck5vdGlmeUV2ZW50IGV2ZW50OworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIC8vem1fZGVidWdfbXNnMSgiemZTdGFJYnNzTW9uaXRvcmluZyAlZCIsIHdkLT5zdGEub3Bwb3NpdGVDb3VudCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgaWYgKCB3ZC0+c3RhLm9wcG9zaXRlQ291bnQgPT0gMCApCisgICAgeworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAgaWYgKCB3ZC0+c3RhLmJDaGFubmVsU2NhbiApCisgICAgeworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAgb3Bwb3NpdGVDb3VudCA9IHdkLT5zdGEub3Bwb3NpdGVDb3VudDsKKworICAgIGZvcihpPTA7IGkgPCBaTV9NQVhfT1BQT1NJVEVfQ09VTlQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmICggb3Bwb3NpdGVDb3VudCA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHJlc2V0ICkKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPnN0YS5vcHBvc2l0ZUluZm9baV0udmFsaWQgPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB3ZC0+c3RhLm9wcG9zaXRlSW5mb1tpXS52YWxpZCA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBvcHBvc2l0ZUNvdW50LS07CisKKyAgICAgICAgaWYgKCB3ZC0+c3RhLm9wcG9zaXRlSW5mb1tpXS5hbGl2ZUNvdW50ZXIgKQorICAgICAgICB7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJTZXR0aW5nIGFsaXZlIHRvICIsIHdkLT5zdGEub3Bwb3NpdGVJbmZvW2ldLmFsaXZlQ291bnRlcik7CisKKyAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgICAgIGlmICggd2QtPnN0YS5vcHBvc2l0ZUluZm9baV0uYWxpdmVDb3VudGVyICE9IFpNX0lCU1NfUEVFUl9BTElWRV9DT1VOVEVSICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6ZlNlbmRNbUZyYW1lKGRldiwgWk1fV0xBTl9GUkFNRV9UWVBFX1BST0JFUkVRLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUxNl90Kil3ZC0+c3RhLm9wcG9zaXRlSW5mb1tpXS5tYWNBZGRyLCAxLCAwLCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIHdkLT5zdGEub3Bwb3NpdGVJbmZvW2ldLmFsaXZlQ291bnRlci0tOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiemZTdGFJYnNzTW9uaXRvcmluZyByZW1vdmUgdGhlIHBlZXIgc3RhdGlvbiIpOworICAgICAgICAgICAgemZNZW1vcnlDb3B5KGV2ZW50LmJzc2lkLCAodThfdCAqKSh3ZC0+c3RhLmJzc2lkKSwgNik7CisgICAgICAgICAgICB6Zk1lbW9yeUNvcHkoZXZlbnQucGVlck1hY0FkZHIsIHdkLT5zdGEub3Bwb3NpdGVJbmZvW2ldLm1hY0FkZHIsIDYpOworCisgICAgICAgICAgICB3ZC0+c3RhLm9wcG9zaXRlSW5mb1tpXS52YWxpZCA9IDA7CisgICAgICAgICAgICB3ZC0+c3RhLm9wcG9zaXRlQ291bnQtLTsKKyAgICAgICAgICAgIGlmICh3ZC0+emZjYklic3NQYXJ0bmVyTm90aWZ5ICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgICAgICB3ZC0+emZjYklic3NQYXJ0bmVyTm90aWZ5KGRldiwgMCwgJmV2ZW50KTsKKyAgICAgICAgICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCitkb25lOgorICAgIGlmICggcmVzZXQgPT0gMCApCisgICAgeworICAgICAgICB6ZlRpbWVyU2NoZWR1bGUoZGV2LCBaTV9FVkVOVF9JQlNTX01PTklUT1IsIFpNX1RJQ0tfSUJTU19NT05JVE9SKTsKKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworfQorCit2b2lkIHpmSW5pdFBhcnRuZXJOb3RpZnlFdmVudCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHN0cnVjdCB6c1BhcnRuZXJOb3RpZnlFdmVudCAqZXZlbnQpCit7CisgICAgdTE2X3QgICpwZWVyTWFjQWRkcjsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHBlZXJNYWNBZGRyID0gKHUxNl90ICopZXZlbnQtPnBlZXJNYWNBZGRyOworCisgICAgemZNZW1vcnlDb3B5KGV2ZW50LT5ic3NpZCwgKHU4X3QgKikod2QtPnN0YS5ic3NpZCksIDYpOworICAgIHBlZXJNYWNBZGRyWzBdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTJfT0ZGU0VUKTsKKyAgICBwZWVyTWFjQWRkclsxXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIFpNX1dMQU5fSEVBREVSX0EyX09GRlNFVCArIDIpOworICAgIHBlZXJNYWNBZGRyWzJdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTJfT0ZGU0VUICsgNCk7Cit9CisKK3ZvaWQgemZTdGFJbml0T3Bwb3NpdGVJbmZvKHpkZXZfdCogZGV2KQoreworICAgIGludCBpOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgZm9yKGk9MDsgaTxaTV9NQVhfT1BQT1NJVEVfQ09VTlQ7IGkrKykKKyAgICB7CisgICAgICAgIHdkLT5zdGEub3Bwb3NpdGVJbmZvW2ldLnZhbGlkID0gMDsKKyAgICAgICAgd2QtPnN0YS5vcHBvc2l0ZUluZm9baV0uYWxpdmVDb3VudGVyID0gWk1fSUJTU19QRUVSX0FMSVZFX0NPVU5URVI7CisgICAgfQorfQorI2lmZGVmIFpNX0VOQUJMRV9DRU5DCit1MTZfdCB6ZlN0YUFkZEllQ2VuYyh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAod2QtPnN0YS5jZW5jSWVbMV0gIT0gMCkKKyAgICB7CisgICAgICAgIHpmQ29weVRvSW50VHhCdWZmZXIoZGV2LCBidWYsIHdkLT5zdGEuY2VuY0llLCBvZmZzZXQsIHdkLT5zdGEuY2VuY0llWzFdKzIpOworICAgICAgICBvZmZzZXQgKz0gKHdkLT5zdGEuY2VuY0llWzFdKzIpOworICAgIH0KKyAgICByZXR1cm4gb2Zmc2V0OworfQorI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKK3UxNl90IHpmU3RhUHJvY2Vzc0FjdGlvbih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgdThfdCBjYXRlZ29yeSwgYWN0aW9uRGV0YWlsczsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBjYXRlZ29yeSA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDI0KTsKKyAgICBhY3Rpb25EZXRhaWxzID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMjUpOworICAgIHN3aXRjaCAoY2F0ZWdvcnkpCisgICAgeworICAgICAgICBjYXNlIDA6CQkvL1NwZWN0cnVtIE1hbmFnZW1lbnQKKwkgICAgICAgIHN3aXRjaChhY3Rpb25EZXRhaWxzKQorCSAgICAgICAgeworCSAgICAgICAgCWNhc2UgMDoJCQkvL01lYXN1cmVtZW50IFJlcXVlc3QKKwkgICAgICAgIAkJYnJlYWs7CisJICAgICAgICAJY2FzZSAxOgkJCS8vTWVhc3VyZW1lbnQgUmVwb3J0CisJICAgICAgICAJCS8vUHJvY2Vzc0FjdGlvblNwZWN0cnVtRnJhbWVfTWVhc3VyZW1lbnRSZXBvcnQoQWRhcHRlcixwQWN0aW9uQm9keSszKTsKKwkgICAgICAgIAkJYnJlYWs7CisJICAgICAgICAJY2FzZSAyOgkJCS8vVFBDIHJlcXVlc3QKKyAgICAgICAgICAgICAgICAgICAgLy9pZiAod2QtPnN0YS5UUENFbmFibGUpCisgICAgICAgICAgICAgICAgICAgIC8vICAgIHpmU3RhVXBkYXRlRG90MTFIVFBDKGRldiwgYnVmKTsKKwkgICAgICAgIAkJYnJlYWs7CisJICAgICAgICAJY2FzZSAzOgkJCS8vVFBDIHJlcG9ydAorICAgICAgICAgICAgICAgICAgICAvL2lmICh3ZC0+c3RhLlRQQ0VuYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgemZTdGFVcGRhdGVEb3QxMUhUUEMoZGV2LCBidWYpOworCSAgICAgICAgCQlicmVhazsKKwkgICAgICAgIAljYXNlIDQ6CQkJLy9DaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdkLT5zdGEuREZTRW5hYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgemZTdGFVcGRhdGVEb3QxMUhERlMoZGV2LCBidWYpOworCSAgICAgICAgCQlicmVhazsKKwkgICAgICAgIAlkZWZhdWx0OgorCSAgICAgICAgCQl6bV9kZWJ1Z19tc2cxKCJBY3Rpb24gRnJhbWUgY29udGFpbiBub3Qgc3VwcG9ydCBhY3Rpb24gZmllbGQgIiwgYWN0aW9uRGV0YWlscyk7CisJICAgICAgICAJCWJyZWFrOworCSAgICAgICAgfQorICAgICAgICAJYnJlYWs7CisgICAgICAgIGNhc2UgWk1fV0xBTl9CTE9DS19BQ0tfQUNUSU9OX0ZSQU1FOgorICAgICAgICAgICAgemZBZ2dCbG9ja0Fja0FjdGlvbkZyYW1lKGRldiwgYnVmKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE3OgkvL1FvcyBNYW5hZ2VtZW50CisgICAgICAgIAlicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyogRGV0ZXJtaW5lIHRoZSB0aW1lIG5vdCBzZW5kIGJlYWNvbiAsIGlmIG1vcmUgdGhhbiBzb21lIHZhbHVlICwKKyAgIHJlLXdyaXRlIHRoZSBiZWFjb24gc3RhcnQgYWRkcmVzcyAqLwordm9pZCB6ZlJlV3JpdGVCZWFjb25TdGFydEFkZHJlc3MoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgd2QtPnRpY2tJYnNzU2VuZEJlYWNvbisrOyAgICAvLyBJbmNyZWFzZSAxIHBlciAxMG1zIC4KKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgaWYgKCB3ZC0+dGlja0lic3NTZW5kQmVhY29uID09IDQwICkKKyAgICB7CisvLyAgICAgICAgRGJnUHJpbnQoIjIwMDcwNzI3Iik7CisgICAgICAgIHpmSHBFbmFibGVCZWFjb24oZGV2LCBaTV9NT0RFX0lCU1MsIHdkLT5iZWFjb25JbnRlcnZhbCwgd2QtPmR0aW0sICh1OF90KXdkLT5zdGEuYXRpbVdpbmRvdyk7CisgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHdkLT50aWNrSWJzc1NlbmRCZWFjb24gPSAwOworICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIH0KK30KKworc3RydWN0IHpzVGtpcFNlZWQqIHpmU3RhR2V0UnhTZWVkKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZikKK3sKKyAgICB1OF90IGtleUluZGV4OworICAgIHU4X3QgZGEwOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLyogaWYgbmVlZCBub3QgY2hlY2sgTUlDLCByZXR1cm4gTlVMTCAqLworICAgIGlmICggKCh3ZC0+c3RhLmVuY3J5TW9kZSAhPSBaTV9US0lQKSYmKHdkLT5zdGEuZW5jcnlNb2RlICE9IFpNX0FFUykpfHwKKyAgICAgICAgICh3ZC0+c3RhLndwYVN0YXRlIDwgWk1fU1RBX1dQQV9TVEFURV9QS19PSykgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZGEwID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTFfT0ZGU0VUKTsKKworICAgIGlmICgoem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMCkgJiAweDgwKSA9PSAweDgwKQorICAgICAgICBrZXlJbmRleCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIFpNX1dMQU5fSEVBREVSX0lWX09GRlNFVCs1KTsgLyogUW9zIFBhY2tldCovCisgICAgZWxzZQorICAgICAgICBrZXlJbmRleCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIFpNX1dMQU5fSEVBREVSX0lWX09GRlNFVCszKTsgLyogbm9ybWFsIFBhY2tldCovCisgICAga2V5SW5kZXggPSAoa2V5SW5kZXggJiAweGMwKSA+PiA2OworCisgICAgcmV0dXJuICgmd2QtPnN0YS5yeFNlZWRba2V5SW5kZXhdKTsKK30KKwordm9pZCB6ZlN0YUVuYWJsZVNXRW5jcnlwdGlvbih6ZGV2X3QgKmRldiwgdThfdCB2YWx1ZSkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB3ZC0+c3RhLlNXRW5jcnlwdEVuYWJsZSA9IHZhbHVlOworICAgIHpmSHBTV0RlY3J5cHQoZGV2LCAxKTsKKyAgICB6ZkhwU1dFbmNyeXB0KGRldiwgMSk7Cit9CisKK3ZvaWQgemZTdGFEaXNhYmxlU1dFbmNyeXB0aW9uKHpkZXZfdCAqZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHdkLT5zdGEuU1dFbmNyeXB0RW5hYmxlID0gMDsKKyAgICB6ZkhwU1dEZWNyeXB0KGRldiwgMCk7CisgICAgemZIcFNXRW5jcnlwdChkZXYsIDApOworfQorCit1MTZfdCB6ZkNvbXB1dGVCc3NJbmZvV2VpZ2h0VmFsdWUoemRldl90ICpkZXYsIHU4X3QgaXNCTW9kZSwgdThfdCBpc0hULCB1OF90IGlzSFQ0MCwgdThfdCBzaWduYWxTdHJlbmd0aCkKK3sKKwl1OF90ICB3ZWlnaHRPZkIgICAgICAgICAgID0gMDsKKwl1OF90ICB3ZWlnaHRPZkFHQmVsb3dUaHIgID0gMDsKKwl1OF90ICB3ZWlnaHRPZkFHVXBUaHIgICAgID0gMTU7CisJdThfdCAgd2VpZ2h0T2ZOMjBCZWxvd1RociA9IDE1OworCXU4X3QgIHdlaWdodE9mTjIwVXBUaHIgICAgPSAzMDsKKwl1OF90ICB3ZWlnaHRPZk40MEJlbG93VGhyID0gMTY7CisJdThfdCAgd2VpZ2h0T2ZONDBVcFRociAgICA9IDMyOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYoIGlzQk1vZGUgPT0gMCApCisgICAgICAgIHJldHVybiAoc2lnbmFsU3RyZW5ndGggKyB3ZWlnaHRPZkIpOyAgICAvLyBwdXJlIGIgbW9kZSAsIGRvIG5vdCBhZGQgdGhlIHdlaWdodCB2YWx1ZSBmb3IgdGhpcyBBUCAhCisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYoIGlzSFQgPT0gMCAmJiBpc0hUNDAgPT0gMCApCisgICAgICAgIHsgLy8gYSAsIGcgLCBiL2cgbW9kZSAhIGFkZCB0aGUgd2VpZ2h0IHZhbHVlIDE1IGZvciB0aGlzIEFQIGlmIGl0J3Mgc2lnbmFsIHN0cmVuZ3RoIGlzIG1vcmUgdGhhbiBzb21lIHZhbHVlICEKKyAgICAgICAgICAgIGlmKCBzaWduYWxTdHJlbmd0aCA8IDE4ICkgLy8gLTc3IGRCbQorCQkJCXJldHVybiBzaWduYWxTdHJlbmd0aCArIHdlaWdodE9mQUdCZWxvd1RocjsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gKHNpZ25hbFN0cmVuZ3RoICsgd2VpZ2h0T2ZBR1VwVGhyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBpc0hUID09IDEgJiYgaXNIVDQwID09IDAgKQorICAgICAgICB7IC8vIDgwMjExbiBtb2RlIHVzZSAyME1IegorICAgICAgICAgICAgaWYoIHNpZ25hbFN0cmVuZ3RoIDwgMjMgKSAvLyAtNzIgZEJtCisgICAgICAgICAgICAgICAgcmV0dXJuIChzaWduYWxTdHJlbmd0aCArIHdlaWdodE9mTjIwQmVsb3dUaHIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAoc2lnbmFsU3RyZW5ndGggKyB3ZWlnaHRPZk4yMFVwVGhyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIC8vIGlzSFQgPT0gMSAmJiBpc0hUNDAgPT0gMQorICAgICAgICB7IC8vIDgwMjExbiBtb2RlIHVzZSA0ME1IegorICAgICAgICAgICAgaWYoIHNpZ25hbFN0cmVuZ3RoIDwgMTYgKSAvLyAtNzkgZEJtCisgICAgICAgICAgICAgICAgcmV0dXJuIChzaWduYWxTdHJlbmd0aCArIHdlaWdodE9mTjQwQmVsb3dUaHIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAoc2lnbmFsU3RyZW5ndGggKyB3ZWlnaHRPZk40MFVwVGhyKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordTE2X3QgemZTdGFBZGRJYnNzQWRkaXRpb25hbElFKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3Qgb2Zmc2V0KQoreworCXUxNl90IGk7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBmb3IgKGk9MDsgaTx3ZC0+c3RhLmlic3NBZGRpdGlvbmFsSUVTaXplOyBpKyspCisgICAgeworICAgICAgICB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0KyssIHdkLT5zdGEuaWJzc0FkZGl0aW9uYWxJRVtpXSk7CisgICAgfQorCisgICAgcmV0dXJuIG9mZnNldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jb2lkLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY29pZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMDdmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY29pZC5jCkBAIC0wLDAgKzEsMjY5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE1vZHVsZSBOYW1lIDogaW9kLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQWJzdHJhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBUaGlzIG1vZHVsZSBjb250YWlucyBPSUQgZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTk9URVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImNwcmVjb21wLmgiCisjaW5jbHVkZSAiLi4vaGFsL2hwcmVnLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZmlXbGFuUXVlcnlNYWNBZGRyZXNzICAgICAgKi8KKy8qICAgICAgUXVlcnkgT1dOIE1BQyBhZGRyZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYWRkciA6IGZvciByZXR1cm4gTUFDIGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDUuMTAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgemZpV2xhblF1ZXJ5TWFjQWRkcmVzcyh6ZGV2X3QqIGRldiwgdThfdCogYWRkcikKK3sKKyAgICB1MTZfdCB2YXBJZCA9IDA7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgdmFwSWQgPSB6ZndHZXRWYXBJZChkZXYpOworCisgICAgYWRkclswXSA9ICh1OF90KSh3ZC0+bWFjQWRkclswXSAmIDB4ZmYpOworICAgIGFkZHJbMV0gPSAodThfdCkod2QtPm1hY0FkZHJbMF0gPj4gOCk7CisgICAgYWRkclsyXSA9ICh1OF90KSh3ZC0+bWFjQWRkclsxXSAmIDB4ZmYpOworICAgIGFkZHJbM10gPSAodThfdCkod2QtPm1hY0FkZHJbMV0gPj4gOCk7CisgICAgYWRkcls0XSA9ICh1OF90KSh3ZC0+bWFjQWRkclsyXSAmIDB4ZmYpOworICAgIGlmICh2YXBJZCA9PSAweGZmZmYpCisgICAgICAgIGFkZHJbNV0gPSAodThfdCkod2QtPm1hY0FkZHJbMl0gPj4gOCk7CisgICAgZWxzZQorICAgIHsKKyNpZmRlZiBaTV9WQVBNT0RFX01VTFRJTEVfU1NJRAorICAgICAgICBhZGRyWzVdID0gKHU4X3QpKHdkLT5tYWNBZGRyWzJdID4+IDgpOyAvLyBNdWx0aXBsZSBTU0lECisjZWxzZQorICAgICAgICBhZGRyWzVdID0gdmFwSWQgKyAxICsgKHU4X3QpKHdkLT5tYWNBZGRyWzJdID4+IDgpOyAvL1ZBUAorI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuOworfQorCit2b2lkIHpmaVdsYW5RdWVyeUJzc0xpc3QoemRldl90KiBkZXYsIHN0cnVjdCB6c0Jzc0xpc3QqIHBCc3NMaXN0KQoreworICAgIHN0cnVjdCB6c0Jzc0luZm8qICAgcEJzc0luZm87CisgICAgc3RydWN0IHpzQnNzSW5mbyogICBwRHN0QnNzSW5mbzsKKyAgICB1OF90ICAgaTsKKyAgICB1OF90KiAgcE1lbUxpc3Q7CisgICAgdThfdCogIHBNZW1JbmZvOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHBNZW1MaXN0ID0gKHU4X3QqKSBwQnNzTGlzdDsKKyAgICBwTWVtSW5mbyA9IHBNZW1MaXN0ICsgc2l6ZW9mKHN0cnVjdCB6c0Jzc0xpc3QpOworICAgIHBCc3NMaXN0LT5oZWFkID0gKHN0cnVjdCB6c0Jzc0luZm8qKSBwTWVtSW5mbzsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBwQnNzSW5mbyA9IHdkLT5zdGEuYnNzTGlzdC5oZWFkOworICAgIHBEc3RCc3NJbmZvID0gKHN0cnVjdCB6c0Jzc0luZm8qKSBwTWVtSW5mbzsKKyAgICBwQnNzTGlzdC0+YnNzQ291bnQgPSB3ZC0+c3RhLmJzc0xpc3QuYnNzQ291bnQ7CisKKyAgICBmb3IoIGk9MDsgaTx3ZC0+c3RhLmJzc0xpc3QuYnNzQ291bnQ7IGkrKyApCisgICAgeworICAgICAgICB6Zk1lbW9yeUNvcHkoKHU4X3QqKXBEc3RCc3NJbmZvLCAodThfdCopcEJzc0luZm8sCisgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCB6c0Jzc0luZm8pKTsKKworICAgICAgICBpZiAoIHBCc3NJbmZvLT5uZXh0ICE9IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBwQnNzSW5mbyA9IHBCc3NJbmZvLT5uZXh0OworICAgICAgICAgICAgcERzdEJzc0luZm8tPm5leHQgPSBwRHN0QnNzSW5mbyArIDE7CisgICAgICAgICAgICBwRHN0QnNzSW5mbysrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgem1fYXNzZXJ0KGk9PSh3ZC0+c3RhLmJzc0xpc3QuYnNzQ291bnQtMSkpOworICAgICAgICB9CisgICAgfQorCisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHpmU2Nhbk1nclNjYW5BY2soZGV2KTsKK30KKwordm9pZCB6ZmlXbGFuUXVlcnlCc3NMaXN0VjEoemRldl90KiBkZXYsIHN0cnVjdCB6c0Jzc0xpc3RWMSogYnNzTGlzdFYxKQoreworICAgIHN0cnVjdCB6c0Jzc0luZm8qICAgcEJzc0luZm87CisgICAgLy9zdHJ1Y3QgenNCc3NJbmZvKiAgIHBEc3RCc3NJbmZvOworICAgIHU4X3QgICBpLCBqLCBiZHJvcCA9IDAsIGsgPSAwLCBTYW1lX0NvdW50ID0gMDsKKyAgICB1OF90ICAgYnNzaWRbNl07CisgICAgLy91OF90KiAgcE1lbUxpc3Q7CisgICAgLy91OF90KiAgcE1lbUluZm87CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgYnNzTGlzdFYxLT5ic3NDb3VudCA9IHdkLT5zdGEuYnNzTGlzdC5ic3NDb3VudDsKKworICAgIHBCc3NJbmZvID0gd2QtPnN0YS5ic3NMaXN0LmhlYWQ7CisgICAgWk1fTUFDX1dPUkRfVE9fQllURSh3ZC0+c3RhLmJzc2lkLCBic3NpZCk7CisKKyAgICBmb3IoIGk9MDsgaTx3ZC0+c3RhLmJzc0xpc3QuYnNzQ291bnQ7IGkrKyApCisgICAgeworICAgICAgICBiZHJvcCA9IDA7CisgICAgICAgIGlmICggemZTdGFJc0Nvbm5lY3RlZChkZXYpCisgICAgICAgICAgICAgJiYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFICkgKQorICAgICAgICB7CisJCQlmb3IgKGogPSAwOyBqIDwgNjsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggcEJzc0luZm8tPmJzc2lkW2pdICE9IGJzc2lkW2pdICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgICggKGogPT0gNikKKyAgICAgICAgICAgICAgICAgICYmKChwQnNzSW5mby0+c3NpZFsxXSA9PSB3ZC0+c3RhLnNzaWRMZW4pIHx8IChwQnNzSW5mby0+c3NpZFsxXSA9PSAwKSApJiYgKHBCc3NJbmZvLT5mcmVxdWVuY3kgPT0gd2QtPmZyZXF1ZW5jeSkgKQorICAgICAgICAgICAgeworCQkJCWlmKHBCc3NJbmZvLT5zc2lkWzFdID09IDApCisJCQkJCXBCc3NJbmZvLT5zc2lkWzFdID0gd2QtPnN0YS5zc2lkTGVuOworCisJCQkJaWYoU2FtZV9Db3VudCA9PSAwKQorCQkJCXsvL0ZpcnN0IG1lZXQKKwkJCQkJU2FtZV9Db3VudCsrOworCQkJCX0KKwkJCQllbHNlCisJCQkJey8vc2FtZSBvbmUKKwkJCQkJYmRyb3AgPSAxOworCQkJCQlic3NMaXN0VjEtPmJzc0NvdW50LS07CisJCQkJfQorCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoYmRyb3AgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgemZNZW1vcnlDb3B5KCh1OF90KikoJmJzc0xpc3RWMS0+YnNzSW5mb1trXSksICh1OF90KilwQnNzSW5mbywKKyAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHpzQnNzSW5mbykpOworCisJCQlpZihTYW1lX0NvdW50ID09IDEpCisJCQl7CisJCQkJemZNZW1vcnlDb3B5KCYoYnNzTGlzdFYxLT5ic3NJbmZvW2tdLnNzaWRbMl0pLCB3ZC0+c3RhLnNzaWQsIHdkLT5zdGEuc3NpZExlbik7CisJCQkJU2FtZV9Db3VudCsrOworCQkJfQorCisJCQlrKys7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHBCc3NJbmZvLT5uZXh0ICE9IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBwQnNzSW5mbyA9IHBCc3NJbmZvLT5uZXh0OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgem1fYXNzZXJ0KGk9PSh3ZC0+c3RhLmJzc0xpc3QuYnNzQ291bnQtMSkpOworICAgICAgICB9CisgICAgfQorCisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHpmU2Nhbk1nclNjYW5BY2soZGV2KTsKK30KKwordm9pZCB6ZmlXbGFuUXVlcnlBZEhvY0NyZWF0ZWRCc3NEZXNjKHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNCc3NJbmZvICpwQnNzSW5mbykKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6Zk1lbW9yeUNvcHkoKHU4X3QgKilwQnNzSW5mbywgKHU4X3QgKikmd2QtPnN0YS5pYnNzQnNzRGVzYywgc2l6ZW9mKHN0cnVjdCB6c0Jzc0luZm8pKTsKK30KKwordThfdCB6ZmlXbGFuUXVlcnlBZEhvY0lzQ3JlYXRvcih6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICByZXR1cm4gd2QtPnN0YS5pYnNzQnNzSXNDcmVhdG9yOworfQorCit1MzJfdCB6ZmlXbGFuUXVlcnlTdXBwb3J0TW9kZSh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICByZXR1cm4gd2QtPnN1cHBvcnRNb2RlOworfQorCit1MzJfdCB6ZmlXbGFuUXVlcnlUcmFuc21pdFBvd2VyKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHUzMl90IHJldCA9IDA7CisKKyAgICBpZiAoemZTdGFJc0Nvbm5lY3RlZChkZXYpKSB7CisgICAgICAgIHJldCA9IHdkLT5zdGEuY29ublBvd2VySW5IYWxmRGJtOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldCA9IHpmSHBHZXRUcmFuc21pdFBvd2VyKGRldik7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmaVdsYW5GbHVzaEJzc0xpc3QgICAgICAgICAqLworLyogICAgICBGbHVzaCBCU1NJRCBMaXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBub25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIElOQy4gICAgMjAwNi4xMiAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB6ZmlXbGFuRmx1c2hCc3NMaXN0KHpkZXZfdCogZGV2KQoreworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIC8qIENhbGwgemZCc3NJbmZvUmVmcmVzaCgpIHR3aWNlIHRvIHJlbW92ZSBhbGwgZW50cnkgKi8KKyAgICB6ZkJzc0luZm9SZWZyZXNoKGRldiwgMSk7CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKK30KKwordm9pZCB6ZmlXbGFuU2V0V2xhbk1vZGUoemRldl90KiBkZXYsIHU4X3Qgd2xhbk1vZGUpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgd2QtPndzLndsYW5Nb2RlID0gd2xhbk1vZGU7CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKK30KKwordm9pZCB6ZmlXbGFuU2V0QXV0aGVudGljYXRpb25Nb2RlKHpkZXZfdCogZGV2LCB1OF90IGF1dGhNb2RlKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIHdkLT53cy5hdXRoTW9kZSA9IGF1dGhNb2RlOworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7Cit9CisKK3ZvaWQgemZpV2xhblNldFdlcFN0YXR1cyh6ZGV2X3QqIGRldiwgdThfdCB3ZXBTdGF0dXMpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgd2QtPndzLndlcFN0YXR1cyA9IHdlcFN0YXR1czsKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCit9CisKK3ZvaWQgemZpV2xhblNldFNTSUQoemRldl90KiBkZXYsIHU4X3QqIHNzaWQsIHU4X3Qgc3NpZExlbmd0aCkKK3sKKyAgICB1MTZfdCBpOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICBpZiAoIHNzaWRMZW5ndGggPD0gMzIgKQorICAgIHsKKyAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICB3ZC0+d3Muc3NpZExlbiA9IHNzaWRMZW5ndGg7CisgICAgICAgIHpmTWVtb3J5Q29weSh3ZC0+d3Muc3NpZCwgc3NpZCwgc3NpZExlbmd0aCk7CisKKyAgICAgICAgaWYgKCBzc2lkTGVuZ3RoIDwgMzIgKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+d3Muc3NpZFtzc2lkTGVuZ3RoXSA9IDA7CisgICAgICAgIH0KKworICAgICAgICB3ZC0+d3MucHJvYmluZ1NzaWRMaXN0WzBdLnNzaWRMZW4gPSBzc2lkTGVuZ3RoOworICAgICAgICB6Zk1lbW9yeUNvcHkod2QtPndzLnByb2JpbmdTc2lkTGlzdFswXS5zc2lkLCBzc2lkLCBzc2lkTGVuZ3RoKTsKKyAgICAgICAgZm9yIChpPTE7IGk8Wk1fTUFYX1BST0JFX0hJRERFTl9TU0lEX1NJWkU7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPndzLnByb2JpbmdTc2lkTGlzdFtpXS5zc2lkTGVuID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgfQorfQorCit2b2lkIHpmaVdsYW5TZXRGcmFnVGhyZXNob2xkKHpkZXZfdCogZGV2LCB1MTZfdCBmcmFnVGhyZXNob2xkKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgaWYgKGZyYWdUaHJlc2hvbGQgPT0gMCkKKyAgICB7ICAgLyogZnJhZ21lbnRhdGlvbiBpcyBkaXNhYmxlZCAqLworICAgICAgICB3ZC0+ZnJhZ1RocmVzaG9sZCA9IDMyNzY3OworICAgIH0KKyAgICBlbHNlIGlmIChmcmFnVGhyZXNob2xkIDwgMjU2KQorICAgIHsKKyAgICAgICAgLyogTWluaW11bSBmcmFnbWVudCB0aHJlc2hvbGQgKi8KKyAgICAgICAgd2QtPmZyYWdUaHJlc2hvbGQgPSAyNTY7CisgICAgfQorICAgIGVsc2UgaWYgKGZyYWdUaHJlc2hvbGQgPiAyMzQ2KQorICAgIHsKKyAgICAgICAgd2QtPmZyYWdUaHJlc2hvbGQgPSAyMzQ2OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB3ZC0+ZnJhZ1RocmVzaG9sZCA9IGZyYWdUaHJlc2hvbGQgJiAweGZmZmU7CisgICAgfQorCisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKK30KKwordm9pZCB6ZmlXbGFuU2V0UnRzVGhyZXNob2xkKHpkZXZfdCogZGV2LCB1MTZfdCBydHNUaHJlc2hvbGQpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgd2QtPnJ0c1RocmVzaG9sZCA9IHJ0c1RocmVzaG9sZDsKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworfQorCit2b2lkIHpmaVdsYW5TZXRGcmVxdWVuY3koemRldl90KiBkZXYsIHUzMl90IGZyZXF1ZW5jeSwgdThfdCBiSW1tZWRpYXRlKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICBpZiAoIGJJbW1lZGlhdGUgKQorICAgIHsKKyAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgd2QtPmZyZXF1ZW5jeSA9ICh1MTZfdCkgKGZyZXF1ZW5jeS8xMDAwKTsKKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgemZDb3JlU2V0RnJlcXVlbmN5KGRldiwgd2QtPmZyZXF1ZW5jeSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIGlmKCBmcmVxdWVuY3kgPT0gMCApCisgICAgICAgIHsgLy8gQXV0byBzZWxlY3QgY2xlYW4gY2hhbm5lbCBkZXBlbmQgb24gd2lyZWxlc3MgZW52aXJvbm1lbnQgIQorICAgICAgICAgICAgd2QtPndzLmF1dG9TZXRGcmVxdWVuY3kgPSAwOworICAgICAgICB9CisgICAgICAgIHdkLT53cy5mcmVxdWVuY3kgPSAodTE2X3QpIChmcmVxdWVuY3kvMTAwMCk7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgfQorfQorCit2b2lkIHpmaVdsYW5TZXRCc3NpZCh6ZGV2X3QqIGRldiwgdThfdCogYnNzaWQpCit7CisgICAgdTE2X3QgaTsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICBmb3IgKGk9MDsgaTw2OyBpKyspCisgICAgeworICAgICAgICB3ZC0+d3MuZGVzaXJlZEJzc2lkW2ldID0gYnNzaWRbaV07CisgICAgfQorICAgIHdkLT53cy5iRGVzaXJlZEJzc2lkID0gVFJVRTsKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCit9CisKK3ZvaWQgemZpV2xhblNldEJlYWNvbkludGVydmFsKHpkZXZfdCogZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2X3QgIGJlYWNvbkludGVydmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdThfdCAgIGJJbW1lZGlhdGUpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIGlmICggYkltbWVkaWF0ZSApCisgICAgeworICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICB3ZC0+YmVhY29uSW50ZXJ2YWwgPSBiZWFjb25JbnRlcnZhbDsKKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICAvKiB1cGRhdGUgYmVhY29uIGludGVydmFsIGhlcmUgKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgd2QtPndzLmJlYWNvbkludGVydmFsID0gYmVhY29uSW50ZXJ2YWw7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgfQorfQorCisKK3ZvaWQgemZpV2xhblNldER0aW1Db3VudCh6ZGV2X3QqIGRldiwgdThfdCAgZHRpbSkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICBpZiAoZHRpbSA+IDApCisgICAgeworICAgICAgICB3ZC0+d3MuZHRpbSA9IGR0aW07CisgICAgfQorICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7Cit9CisKKwordm9pZCB6ZmlXbGFuU2V0QXRpbVdpbmRvdyh6ZGV2X3QqIGRldiwgdTE2X3QgYXRpbVdpbmRvdywgdThfdCBiSW1tZWRpYXRlKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICBpZiAoIGJJbW1lZGlhdGUgKQorICAgIHsKKyAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgd2QtPnN0YS5hdGltV2luZG93ID0gYXRpbVdpbmRvdzsKKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICAvKiBhdGltIHdpbmRvdyBoZXJlICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHdkLT53cy5hdGltV2luZG93ID0gYXRpbVdpbmRvdzsKKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICB9Cit9CisKKwordm9pZCB6ZmlXbGFuU2V0RW5jcnlNb2RlKHpkZXZfdCogZGV2LCB1OF90IGVuY3J5TW9kZSkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApCisgICAgeworICAgICAgICAvKiBIb3N0YXBkIElzc3VlICovCisgICAgICAgIGlmICgod2QtPndzLmVuY3J5TW9kZSAhPSBaTV9BRVMpICYmICh3ZC0+d3MuZW5jcnlNb2RlICE9IFpNX1RLSVApKQorICAgICAgICAgICAgd2QtPndzLmVuY3J5TW9kZSA9IGVuY3J5TW9kZTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICB3ZC0+d3MuZW5jcnlNb2RlID0gZW5jcnlNb2RlOworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7Cit9CisKK3ZvaWQgemZpV2xhblNldERlZmF1bHRLZXlJZCh6ZGV2X3QqIGRldiwgdThfdCBrZXlJZCkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB3ZC0+c3RhLmtleUlkID0ga2V5SWQ7Cit9CisKK3U4X3QgemZpV2xhblF1ZXJ5SXNQS0luc3RhbGxlZCh6ZGV2X3QgKmRldiwgdThfdCAqc3RhTWFjQWRkcikKK3sKKyAgICB1OF90IGlzSW5zdGFsbGVkID0gMDsKKworI2lmIDEKKy8vI2lmZGVmIFpNX0VOQUJMRV9JQlNTX1dQQTJQU0sKKyAgICB1OF90ICAgcmVzLCBwZWVySWR4OworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgcmVzID0gemZTdGFGaW5kT3Bwb3NpdGVCeU1BQ0FkZHIoZGV2LCAodTE2X3QgKilzdGFNYWNBZGRyLCAmcGVlcklkeCk7CisgICAgaWYoIHJlcyA9PSAwICkKKyAgICB7CisgICAgICAgIGlzSW5zdGFsbGVkID0gd2QtPnN0YS5vcHBvc2l0ZUluZm9bcGVlcklkeF0ucGtJbnN0YWxsZWQ7CisgICAgfQorICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisvLyNlbmRpZgorI2VuZGlmCisKKyAgICByZXR1cm4gaXNJbnN0YWxsZWQ7Cit9CisKK3U4X3QgemZpV2xhblNldEtleSh6ZGV2X3QqIGRldiwgc3RydWN0IHpzS2V5SW5mbyBrZXlJbmZvKQoreworICAgIHUxNl90ICBicm9hZGNhc3RbM10gPSB7MHhmZmZmLCAweGZmZmYsIDB4ZmZmZn07CisgICAgdTMyX3QqIGtleTsKKyAgICB1OF90ICAgZW5jcnlNb2RlID0gWk1fTk9fV0VQOworI2lmZGVmIFpNX0VOQUJMRV9JQlNTX1dQQTJQU0sKKyAgICB1OF90ICAgZW5jcnlUeXBlID0gWk1fTk9fV0VQOworI2VuZGlmCisgICAgdThfdCAgIG1pY0tleVsxNl07CisgICAgdTE2X3QgIGlkID0gMDsKKyAgICB1OF90ICAgdmFwSWQsIGksIGFkZHJbNl07CisgICAgdThfdCAgIHVzZXJJZHg9MDsKKworI2lmZGVmIFpNX0VOQUJMRV9JQlNTX1dQQTJQU0sKKyAgICAvKiBEZXRlcm1pbmUgb3Bwb3NpdGUgZXhpc3Qgb3Igbm90ICovCisgICAgdThfdCAgIHJlcywgcGVlcklkeDsKKy8vICAgIHU4X3QgICB1c2VySWR4PTA7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAoIHdkLT5zdGEuaWJzc1dwYTJQc2sgPT0gMSApCisgICAgeworICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICByZXMgPSB6ZlN0YUZpbmRPcHBvc2l0ZUJ5TUFDQWRkcihkZXYsICh1MTZfdCopa2V5SW5mby5tYWNBZGRyLCAmcGVlcklkeCk7CisgICAgICAgIGlmKCByZXMgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVzZXJJZHggPSBwZWVySWR4OworICAgICAgICAgICAgaWYgKCB3ZC0+c3RhLm9wcG9zaXRlSW5mb1t1c2VySWR4XS5jYW1JZHggPT0gMHhmZiApCisgICAgICAgICAgICAgICAgd2QtPnN0YS5vcHBvc2l0ZUluZm9bdXNlcklkeF0uY2FtSWR4ID0gdXNlcklkeDsKKyAgICAgICAgfQorICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIH0KKyNlbHNlCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworI2VuZGlmCisKKyAgICBpZiAoIGtleUluZm8uZmxhZyAmIFpNX0tFWV9GTEFHX0FVVEhFTlRJQ0FUT1IgKQorICAgIHsgICAvKiBzZXQga2V5IGJ5IGF1dGhlbnRpY2F0b3IgKi8KKyAgICAgICAgLyogc2V0IHBhaXJ3aXNlIGtleSAqLworICAgICAgICBpZiAoa2V5SW5mby5mbGFnICYgWk1fS0VZX0ZMQUdfUEspCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEZpbmQgU1RBJ3MgaW5mb3JtYXRpb24gKi8KKyAgICAgICAgICAgIGlmICgoaWQgPSB6ZkFwRmluZFN0YShkZXYsIGtleUluZm8ubWFjQWRkcikpID09IDB4ZmZmZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBDYW4ndCBTVEEgaW4gdGhlIHN0YVRhYmxlICovCisgICAgICAgICAgICAgICAgcmV0dXJuIFpNX1NUQVRVU19GQUlMVVJFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3ZC0+YXAuc3RhVGFibGVbaWRdLml2MTYgPSAwOworICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2lkXS5pdjMyID0gMDsKKworICAgICAgICAgICAgaWYgKGtleUluZm8ua2V5TGVuZ3RoID09IDMyKQorICAgICAgICAgICAgeyAgIC8qIFRLSVAgKi8KKyAgICAgICAgICAgICAgICAvL3U4X3QgS2V5UnNjWzZdID0gezAsIDAsIDAsIDAsIDAsIDB9OworCisgICAgICAgICAgICAgICAgLyogSW4gdGhlIGN1cnJlbnQgQVAgbW9kZSwgd2Ugc2V0IEtleVJzYyB0byB6ZXJvICovCisgICAgICAgICAgICAgICAgLy96ZlRraXBJbml0KGtleUluZm8ua2V5LCAodThfdCopIHdkLT5tYWNBZGRyLAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAmKHdkLT5hcC5zdGFUYWJsZVtpZF0udHhTZWVkKSwgS2V5UnNjKTsKKyAgICAgICAgICAgICAgICAvL3pmVGtpcEluaXQoa2V5SW5mby5rZXksICh1OF90Kikga2V5SW5mby5tYWNBZGRyLAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAmKHdkLT5hcC5zdGFUYWJsZVtpZF0ucnhTZWVkKSwgS2V5UnNjKTsKKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQworICAgICAgICAgICAgICAgIGlmIChrZXlJbmZvLmZsYWcgJiBaTV9LRVlfRkxBR19DRU5DKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiU2V0IENFTkMgcGFpcndpc2UgS2V5Iik7CisKKyAgICAgICAgICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2lkXS5lbmNyeU1vZGUgPSBaTV9DRU5DOworCisgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IHR4aXYgYW5kIHJ4aXYgKi8KKyAgICAgICAgICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2lkXS50eGl2WzBdID0gMHg1YzM2NWMzNzsKKyAgICAgICAgICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2lkXS50eGl2WzFdID0gMHg1YzM2NWMzNjsKKyAgICAgICAgICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2lkXS50eGl2WzJdID0gMHg1YzM2NWMzNjsKKyAgICAgICAgICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2lkXS50eGl2WzNdID0gMHg1YzM2NWMzNjsKKworICAgICAgICAgICAgICAgICAgICB3ZC0+YXAuc3RhVGFibGVbaWRdLnJ4aXZbMF0gPSAweDVjMzY1YzM2OworICAgICAgICAgICAgICAgICAgICB3ZC0+YXAuc3RhVGFibGVbaWRdLnJ4aXZbMV0gPSAweDVjMzY1YzM2OworICAgICAgICAgICAgICAgICAgICB3ZC0+YXAuc3RhVGFibGVbaWRdLnJ4aXZbMl0gPSAweDVjMzY1YzM2OworICAgICAgICAgICAgICAgICAgICB3ZC0+YXAuc3RhVGFibGVbaWRdLnJ4aXZbM10gPSAweDVjMzY1YzM2OworCisgICAgICAgICAgICAgICAgICAgIC8qIFNldCBLZXkgSW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2lkXS5jZW5jS2V5SWR4ID0ga2V5SW5mby5rZXlJbmRleDsKKworICAgICAgICAgICAgICAgICAgICAvL3pmQ29yZVNldEtleShkZXYsIGlkKzEsIDEsIFpNX0NFTkMsICh1MTZfdCAqKWtleUluZm8ubWFjQWRkciwKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgKHUzMl90KikgJmtleUluZm8ua2V5WzE2XSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3ZC0+YXAuc3RhVGFibGVbaWRdLmVuY3J5TW9kZSA9IFpNX1RLSVA7CisKKyAgICAgICAgICAgICAgICAgICAgemZNZW1vcnlDb3B5KG1pY0tleSwgJmtleUluZm8ua2V5WzE2XSwgOCk7CisgICAgICAgICAgICAgICAgICAgIHpmTWVtb3J5Q29weSgmbWljS2V5WzhdLCAma2V5SW5mby5rZXlbMjRdLCA4KTsKKworICAgICAgICAgICAgICAgICAgICAvL3pmQ29yZVNldEtleShkZXYsIGlkKzEsIDEsIFpNX1RLSVAsICh1MTZfdCAqKWtleUluZm8ubWFjQWRkciwKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICh1MzJfdCopIG1pY0tleSk7CisKKyAgICAgICAgICAgICAgICAgICAgLyogRm9yIGZyYWdtZW50YXRpb24sIHdlIHVzZSBzb2Z0d2FyZSBNSUMgKi8KKyAgICAgICAgICAgICAgICAgICAgemZNZW1vcnlDb3B5KCh1OF90ICopJih3ZC0+YXAuc3RhVGFibGVbaWRdLnR4TWljS2V5KSwgJihrZXlJbmZvLmtleVsxNl0pLCA4KTsKKyAgICAgICAgICAgICAgICAgICAgemZNZW1vcnlDb3B5KCh1OF90ICopJih3ZC0+YXAuc3RhVGFibGVbaWRdLnJ4TWljS2V5KSwgJihrZXlJbmZvLmtleVsyNF0pLCA4KTsKKworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGtleUluZm8ua2V5TGVuZ3RoID09IDE2KQorICAgICAgICAgICAgeyAgIC8qIEFFUyAqLworICAgICAgICAgICAgICAgIHdkLT5hcC5zdGFUYWJsZVtpZF0uZW5jcnlNb2RlID0gWk1fQUVTOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoa2V5SW5mby5rZXlMZW5ndGggPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBDbGVhciBLZXkgSW5mbyAqLworICAgICAgICAgICAgICAgIHpmQXBDbGVhclN0YUtleShkZXYsICh1MTZfdCAqKWtleUluZm8ubWFjQWRkcik7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gWk1fU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFpNX1NUQVRVU19GQUlMVVJFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvL3pmQ29yZVNldEtleShkZXYsIGlkKzEsIDAsIHdkLT5hcC5zdGFUYWJsZVtpZF0uZW5jcnlNb2RlLAorICAgICAgICAgICAgLy8gICAgICAodTE2X3QgKilrZXlJbmZvLm1hY0FkZHIsICh1MzJfdCopIGtleUluZm8ua2V5KTsKKyAgICAgICAgICAgIHpmSHBTZXRBcFBhaXJ3aXNlS2V5KGRldiwgKHUxNl90ICopa2V5SW5mby5tYWNBZGRyLAorICAgICAgICAgICAgICAgICAgICB3ZC0+YXAuc3RhVGFibGVbaWRdLmVuY3J5TW9kZSwgKHUzMl90Kikga2V5SW5mby5rZXksCisgICAgICAgICAgICAgICAgICAgICh1MzJfdCopICZrZXlJbmZvLmtleVsxNl0sIGlkKzEpOworICAgICAgICAgICAgd2QtPmFwLnN0YVRhYmxlW2lkXS5rZXlJZHggPSBpZCArIDEgKyA0OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGtleUluZm8uZmxhZyAmIFpNX0tFWV9GTEFHX0dLKQorICAgICAgICB7CisgICAgICAgICAgICB2YXBJZCA9IGtleUluZm8udmFwSWQ7CisKKyAgICAgICAgICAgIHdkLT5hcC5pdjE2W3ZhcElkXSA9IDA7CisgICAgICAgICAgICB3ZC0+YXAuaXYzMlt2YXBJZF0gPSAwOworCisgICAgICAgICAgICBpZiAoa2V5SW5mby5rZXlMZW5ndGggPT0gMzIpCisgICAgICAgICAgICB7ICAgLyogVEtJUCAqLworICAgICAgICAgICAgICAgIC8vdThfdCBLZXlSc2NbNl0gPSB7MCwgMCwgMCwgMCwgMCwgMH07CisKKyAgICAgICAgICAgICAgICAvL3pmVGtpcEluaXQoa2V5SW5mby5rZXksICh1OF90Kikgd2QtPm1hY0FkZHIsCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICYod2QtPmFwLmJjU2VlZCksIEtleVJzYyk7CisjaWZkZWYgWk1fRU5BQkxFX0NFTkMKKyAgICAgICAgICAgICAgICBpZiAoa2V5SW5mby5mbGFnICYgWk1fS0VZX0ZMQUdfQ0VOQykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVuY3J5TW9kZSA9IFpNX0NFTkM7CisgICAgICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIlNldCBDRU5DIGdyb3VwIEtleSIpOworCisgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IHR4aXYgYW5kIHJ4aXYgKi8KKyAgICAgICAgICAgICAgICAgICAgd2QtPmFwLnR4aXZbdmFwSWRdWzBdID0gMHg1YzM2NWMzNjsKKyAgICAgICAgICAgICAgICAgICAgd2QtPmFwLnR4aXZbdmFwSWRdWzFdID0gMHg1YzM2NWMzNjsKKyAgICAgICAgICAgICAgICAgICAgd2QtPmFwLnR4aXZbdmFwSWRdWzJdID0gMHg1YzM2NWMzNjsKKyAgICAgICAgICAgICAgICAgICAgd2QtPmFwLnR4aXZbdmFwSWRdWzNdID0gMHg1YzM2NWMzNjsKKworICAgICAgICAgICAgICAgICAgICAvL3pmQ29yZVNldEtleShkZXYsIDAsIDEsIFpNX0NFTkMsIGtleUluZm8udmFwQWRkciwKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgKHUzMl90KikgJmtleUluZm8ua2V5WzE2XSk7CisgICAgICAgICAgICAgICAgICAgIGtleSA9ICh1MzJfdCopIGtleUluZm8ua2V5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZW5jcnlNb2RlID0gWk1fVEtJUDsKKyAgICAgICAgICAgICAgICAgICAga2V5ID0gKHUzMl90ICopa2V5SW5mby5rZXk7CisKKyAgICAgICAgICAgICAgICAgICAgLyogc2V0IE1JQyBrZXkgdG8gSE1BQyAqLworICAgICAgICAgICAgICAgICAgICAvL3pmQ29yZVNldEtleShkZXYsIDAsIDEsIFpNX1RLSVAsIGJyb2FkY2FzdCwKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAodTMyX3QqKSAoJmtleUluZm8ua2V5WzE2XSkpOworICAgICAgICAgICAgICAgICAgICAvL3pmQ29yZVNldEtleShkZXYsIDAsIDEsIFpNX1RLSVAsIGtleUluZm8udmFwQWRkciwKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICh1MzJfdCopICgma2V5SW5mby5rZXlbMTZdKSk7CisKKyAgICAgICAgICAgICAgICAgICAgemZNaWNTZXRLZXkoJihrZXlJbmZvLmtleVsxNl0pLCAmKHdkLT5hcC5iY01pY0tleVswXSkpOworICAgICAgICAgICAgICAgICAgICBrZXkgPSAodTMyX3QqKSBrZXlJbmZvLmtleTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChrZXlJbmZvLmtleUxlbmd0aCA9PSAxNikKKyAgICAgICAgICAgIHsgICAvKiBBRVMgKi8KKyAgICAgICAgICAgICAgICBlbmNyeU1vZGUgPSBaTV9BRVM7CisgICAgICAgICAgICAgICAga2V5ID0gKHUzMl90ICopa2V5SW5mby5rZXk7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiQ1dZIC0gU2V0IEFFUyBHcm91cCBLZXkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGtleUluZm8ua2V5TGVuZ3RoID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogQ2xlYXIgS2V5IEluZm8gKi8KKyAgICAgICAgICAgICAgICB6ZkFwQ2xlYXJTdGFLZXkoZGV2LCBicm9hZGNhc3QpOworCisgICAgICAgICAgICAgICAgLyogVHVybiBvZmYgV0VQIGJpdCBpbiB0aGUgY2FwYWJpbGl0eSBmaWVsZCAqLworICAgICAgICAgICAgICAgIHdkLT5hcC5jYXBhYlt2YXBJZF0gJj0gMHhmZmVmOworCisgICAgICAgICAgICAgICAgcmV0dXJuIFpNX1NUQVRVU19TVUNDRVNTOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeyAgIC8qIFdFUCAqLworICAgICAgICAgICAgICAgIGlmIChrZXlJbmZvLmtleUxlbmd0aCA9PSA1KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZW5jcnlNb2RlID0gWk1fV0VQNjQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGtleUluZm8ua2V5TGVuZ3RoID09IDEzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZW5jcnlNb2RlID0gWk1fV0VQMTI4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChrZXlJbmZvLmtleUxlbmd0aCA9PSAyOSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVuY3J5TW9kZSA9IFpNX1dFUDI1NjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBrZXkgPSAodTMyX3QqKSBrZXlJbmZvLmtleTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTW9kaWZpY2F0aW9uIGZvciBDQU0gbm90IHN1cHBvcnQgVkFQIHNlYXJjaAorICAgICAgICAgICAgLy96ZkNvcmVTZXRLZXkoZGV2LCAwLCAwLCBlbmNyeU1vZGUsIGJyb2FkY2FzdCwga2V5KTsKKyAgICAgICAgICAgIC8vemZDb3JlU2V0S2V5KGRldiwgMCwgMCwgZW5jcnlNb2RlLCB3ZC0+bWFjQWRkciwga2V5KTsKKyAgICAgICAgICAgIC8vemZDb3JlU2V0S2V5KGRldiwgMCwgMCwgZW5jcnlNb2RlLCBrZXlJbmZvLnZhcEFkZHIsIGtleSk7CisgICAgICAgICAgICB6ZkhwU2V0QXBHcm91cEtleShkZXYsIHdkLT5tYWNBZGRyLCBlbmNyeU1vZGUsCisgICAgICAgICAgICAgICAgICAgIGtleSwgKHUzMl90KikgJmtleUluZm8ua2V5WzE2XSwgdmFwSWQpOworCisgICAgICAgICAgICAvL3pmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCBlbmNyeU1vZGUpOworICAgICAgICAgICAgd2QtPndzLmVuY3J5TW9kZSA9IGVuY3J5TW9kZTsKKworICAgICAgICAgICAgLyogc2V0IHRoZSBtdWx0aWNhc3QgYWRkcmVzcyBlbmNyeXB0aW9uIHR5cGUgKi8KKyAgICAgICAgICAgIHdkLT5hcC5lbmNyeU1vZGVbdmFwSWRdID0gZW5jcnlNb2RlOworCisgICAgICAgICAgICAvKiBzZXQgdGhlIG11bHRpY2FzdCBrZXkgaW5kZXggKi8KKyAgICAgICAgICAgIHdkLT5hcC5iY0tleUluZGV4W3ZhcElkXSA9IGtleUluZm8ua2V5SW5kZXg7CisgICAgICAgICAgICB3ZC0+YXAuYmNIYWxLZXlJZHhbdmFwSWRdID0gdmFwSWQgKyA2MDsKKworICAgICAgICAgICAgLyogVHVybiBvbiBXRVAgYml0IGluIHRoZSBjYXBhYmlsaXR5IGZpZWxkICovCisgICAgICAgICAgICB3ZC0+YXAuY2FwYWJbdmFwSWRdIHw9IDB4MTA7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsgICAvKiBzZXQgYnkgc3VwcGxpY2FudCAqLworCisgICAgICAgIGlmICgga2V5SW5mby5mbGFnICYgWk1fS0VZX0ZMQUdfUEsgKQorICAgICAgICB7ICAgLyogc2V0IHBhaXJ3aXNlIGtleSAqLworCisgICAgICAgICAgICAvL3pmVGtpcEluaXQoa2V5SW5mby5rZXksICh1OF90Kikgd2QtPm1hY0FkZHIsCisgICAgICAgICAgICAvLyAgICAgICAgICAgJndkLT5zdGEudHhTZWVkLCBrZXlJbmZvLmluaXRJdik7CisgICAgICAgICAgICAvL3pmVGtpcEluaXQoa2V5SW5mby5rZXksICh1OF90Kikgd2QtPnN0YS5ic3NpZCwKKyAgICAgICAgICAgIC8vICAgICAgICAgICAmd2QtPnN0YS5yeFNlZWRba2V5SW5mby5rZXlJbmRleF0sIGtleUluZm8uaW5pdEl2KTsKKworI2lmZGVmIFpNX0VOQUJMRV9JQlNTX1dQQTJQU0sKKyAgICAgICAgICAgIGlmICggd2QtPnN0YS5pYnNzV3BhMlBzayA9PSAxICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiB1bmljYXN0IC0tID4gcGFpcndpc2Uga2V5ICovCisgICAgICAgICAgICAgICAgd2QtPnN0YS5vcHBvc2l0ZUluZm9bdXNlcklkeF0uaXYxNiA9IDA7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5vcHBvc2l0ZUluZm9bdXNlcklkeF0uaXYzMiA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5pdjE2ID0gMDsKKyAgICAgICAgICAgICAgICB3ZC0+c3RhLml2MzIgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3ZC0+c3RhLm9wcG9zaXRlSW5mb1t1c2VySWR4XS5wa0luc3RhbGxlZCA9IDE7CisjZWxzZQorICAgICAgICAgICAgd2QtPnN0YS5pdjE2ID0gMDsKKyAgICAgICAgICAgIHdkLT5zdGEuaXYzMiA9IDA7CisKKyAgICAgICAgICAgIHdkLT5zdGEub3Bwb3NpdGVJbmZvW3VzZXJJZHhdLnBrSW5zdGFsbGVkID0gMTsKKyNlbmRpZgorCisgICAgICAgICAgICBpZiAoIGtleUluZm8ua2V5TGVuZ3RoID09IDMyICkKKyAgICAgICAgICAgIHsgICAvKiBUS0lQICovCisgICAgICAgICAgICAgICAgemZUa2lwSW5pdChrZXlJbmZvLmtleSwgKHU4X3QqKSB3ZC0+bWFjQWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICZ3ZC0+c3RhLnR4U2VlZCwga2V5SW5mby5pbml0SXYpOworICAgICAgICAgICAgICAgIHpmVGtpcEluaXQoa2V5SW5mby5rZXksICh1OF90Kikgd2QtPnN0YS5ic3NpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICZ3ZC0+c3RhLnJ4U2VlZFtrZXlJbmZvLmtleUluZGV4XSwga2V5SW5mby5pbml0SXYpOworCisjaWZkZWYgWk1fRU5BQkxFX0NFTkMKKyAgICAgICAgICAgICAgICBpZiAoa2V5SW5mby5mbGFnICYgWk1fS0VZX0ZMQUdfQ0VOQykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIlNldCBDRU5DIHBhaXJ3aXNlIEtleSIpOworCisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuZW5jcnlNb2RlID0gWk1fQ0VOQzsKKworICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCB0eGl2IGFuZCByeGl2ICovCisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEudHhpdlswXSA9IDB4NWMzNjVjMzY7CisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEudHhpdlsxXSA9IDB4NWMzNjVjMzY7CisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEudHhpdlsyXSA9IDB4NWMzNjVjMzY7CisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEudHhpdlszXSA9IDB4NWMzNjVjMzY7CisKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5yeGl2WzBdID0gMHg1YzM2NWMzNzsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5yeGl2WzFdID0gMHg1YzM2NWMzNjsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5yeGl2WzJdID0gMHg1YzM2NWMzNjsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5yeGl2WzNdID0gMHg1YzM2NWMzNjsKKworICAgICAgICAgICAgICAgICAgICAvKiBTZXQgS2V5IEluZGV4ICovCisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuY2VuY0tleUlkID0ga2V5SW5mby5rZXlJbmRleDsKKworICAgICAgICAgICAgICAgICAgICAvL3pmQ29yZVNldEtleShkZXYsIGlkKzEsIDEsIFpNX0NFTkMsICh1MTZfdCAqKWtleUluZm8ubWFjQWRkciwKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAodTMyX3QqKSAma2V5SW5mby5rZXlbMTZdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuZW5jcnlNb2RlID0gWk1fVEtJUDsKKworICAgICAgICAgICAgICAgICAgICAvL3pmQ29yZVNldEtleShkZXYsIDAsIDEsIFpNX1RLSVAsIHdkLT5zdGEuYnNzaWQsCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgKHUzMl90KikgJmtleUluZm8ua2V5WzE2XSk7CisKKyAgICAgICAgICAgICAgICAgICAgemZNaWNTZXRLZXkoJmtleUluZm8ua2V5WzE2XSwgJndkLT5zdGEudHhNaWNLZXkpOworICAgICAgICAgICAgICAgICAgICB6Zk1pY1NldEtleSgma2V5SW5mby5rZXlbMjRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd2QtPnN0YS5yeE1pY0tleVtrZXlJbmZvLmtleUluZGV4XSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIGtleUluZm8ua2V5TGVuZ3RoID09IDE2ICkKKyAgICAgICAgICAgIHsgICAvKiBBRVMgKi8KKyNpZmRlZiBaTV9FTkFCTEVfSUJTU19XUEEyUFNLCisgICAgICAgICAgICAgICAgaWYgKCB3ZC0+c3RhLmlic3NXcGEyUHNrID09IDEgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5vcHBvc2l0ZUluZm9bdXNlcklkeF0uZW5jcnlNb2RlID0gWk1fQUVTOworICAgICAgICAgICAgICAgICAgICBlbmNyeVR5cGUgPSB3ZC0+c3RhLm9wcG9zaXRlSW5mb1t1c2VySWR4XS5lbmNyeU1vZGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuZW5jcnlNb2RlID0gWk1fQUVTOworICAgICAgICAgICAgICAgICAgICBlbmNyeVR5cGUgPSB3ZC0+c3RhLmVuY3J5TW9kZTsKKyAgICAgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICAgIHdkLT5zdGEuZW5jcnlNb2RlID0gWk1fQUVTOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFpNX1NUQVRVU19GQUlMVVJFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiB1c2VyIDAgKi8KKyAgICAgICAgICAgIC8vemZDb3JlU2V0S2V5KGRldiwgMCwgMCwgd2QtPnN0YS5lbmNyeU1vZGUsCisgICAgICAgICAgICAvLyAgICAgICAgIHdkLT5zdGEuYnNzaWQsICh1MzJfdCopIGtleUluZm8ua2V5KTsKKyAgICAgICAgICAgIC8vemZIcFNldFN0YVBhaXJ3aXNlS2V5KGRldiwgd2QtPnN0YS5ic3NpZCwgd2QtPnN0YS5lbmNyeU1vZGUsCisgICAgICAgICAgICAvLyAgICAodTMyX3QqKSBrZXlJbmZvLmtleSwgKHUzMl90KikgJmtleUluZm8ua2V5WzE2XSk7CisKKyNpZmRlZiBaTV9FTkFCTEVfSUJTU19XUEEyUFNLCisgICAgICAgICAgICBpZiAoIChrZXlJbmZvLmtleUxlbmd0aD09MTYpICYmICh3ZC0+c3RhLmlic3NXcGEyUHNrPT0xKSApCisgICAgICAgICAgICB7IC8qIElmIG5vdCBBRVMtQ0NNUCBhbmQgaWJzcyBuZXR3b3JrICwgdXNlIHRyYWRpdGlvbmFsICovCisgICAgICAgICAgICAgICAgemZIcFNldFBlclVzZXJLZXkoZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VySWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlJbmZvLmtleUluZGV4LCAgLy8ga2V5IGlkID09IDAgKCBQYWlyd2lzZSBrZXkgPSAwICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHU4X3QqKWtleUluZm8ubWFjQWRkciwgICAvLyBSWCBuZWVkIFNvdXJjZSBBZGRyZXNzICggQWRkcmVzcyAyICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jcnlUeXBlLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLmVuY3J5TW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUzMl90Kikga2V5SW5mby5rZXksICh1MzJfdCopICZrZXlJbmZvLmtleVsxNl0pOworCisgICAgICAgICAgICAgICAgd2QtPnN0YS5vcHBvc2l0ZUluZm9bdXNlcklkeF0ud3BhU3RhdGUgPSBaTV9TVEFfV1BBX1NUQVRFX1BLX09LIDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsvKiBCaWcgRW5kaWFuIGFuZCBMaXR0bGUgRW5kaWFuIENvbXBhdGliaWxpdHkgKi8KKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkclsyICogaV0gPSB3ZC0+c3RhLmJzc2lkW2ldICYgMHhmZjsKKyAgICAgICAgICAgICAgICAgICAgYWRkclsyICogaSArIDFdID0gd2QtPnN0YS5ic3NpZFtpXSA+PiA4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB6ZkhwU2V0UGVyVXNlcktleShkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTV9VU0VSX0tFWV9QSywgICAvLyB1c2VyIGlkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAvLyBrZXkgaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIsLy8odThfdCAqKXdkLT5zdGEuYnNzaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLmVuY3J5TW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MzJfdCopIGtleUluZm8ua2V5LCAodTMyX3QqKSAma2V5SW5mby5rZXlbMTZdKTsKKworICAgICAgICAgICAgICAgIHdkLT5zdGEua2V5SWQgPSA0OworICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgIC8qIEJpZyBFbmRpYW4gYW5kIExpdHRsZSBFbmRpYW4gQ29tcGF0aWJpbGl0eSAqLworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhZGRyWzIgKiBpXSA9IHdkLT5zdGEuYnNzaWRbaV0gJiAweGZmOworICAgICAgICAgICAgICAgIGFkZHJbMiAqIGkgKyAxXSA9IHdkLT5zdGEuYnNzaWRbaV0gPj4gODsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHpmSHBTZXRQZXJVc2VyS2V5KGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpNX1VTRVJfS0VZX1BLLCAgIC8vIHVzZXIgaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgIC8vIGtleSBpZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkciwvLyh1OF90ICopd2QtPnN0YS5ic3NpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuZW5jcnlNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUzMl90Kikga2V5SW5mby5rZXksICh1MzJfdCopICZrZXlJbmZvLmtleVsxNl0pOworCisgICAgICAgICAgICB3ZC0+c3RhLmtleUlkID0gNDsKKyNlbmRpZgorCisgICAgICAgICAgICB3ZC0+c3RhLndwYVN0YXRlID0gWk1fU1RBX1dQQV9TVEFURV9QS19PSzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgga2V5SW5mby5mbGFnICYgWk1fS0VZX0ZMQUdfR0sgKQorICAgICAgICB7ICAgLyogc2V0IGdyb3VwIGtleSAqLworCisgICAgICAgICAgICB6ZlRraXBJbml0KGtleUluZm8ua2V5LCAodThfdCopIHdkLT5zdGEuYnNzaWQsCisgICAgICAgICAgICAgICAgICAgICAgICZ3ZC0+c3RhLnJ4U2VlZFtrZXlJbmZvLmtleUluZGV4XSwga2V5SW5mby5pbml0SXYpOworCisgICAgICAgICAgICBpZiAoIGtleUluZm8ua2V5TGVuZ3RoID09IDMyICkKKyAgICAgICAgICAgIHsgICAvKiBUS0lQICovCisjaWZkZWYgWk1fRU5BQkxFX0NFTkMKKyAgICAgICAgICAgICAgICBpZiAoa2V5SW5mby5mbGFnICYgWk1fS0VZX0ZMQUdfQ0VOQykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVuY3J5TW9kZSA9IFpNX0NFTkM7CisgICAgICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIlNldCBDRU5DIGdyb3VwIEtleSIpOworCisgICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IHR4aXYgYW5kIHJ4aXYgKi8KKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5yeGl2R0tbMF0gPSAweDVjMzY1YzM2OworICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnJ4aXZHS1sxXSA9IDB4NWMzNjVjMzY7CisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEucnhpdkdLWzJdID0gMHg1YzM2NWMzNjsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5yeGl2R0tbM10gPSAweDVjMzY1YzM2OworCisgICAgICAgICAgICAgICAgICAgIC8vemZDb3JlU2V0S2V5KGRldiwgMCwgMSwgWk1fQ0VOQywga2V5SW5mby52YXBBZGRyLAorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICh1MzJfdCopICZrZXlJbmZvLmtleVsxNl0pOworICAgICAgICAgICAgICAgICAgICBrZXkgPSAodTMyX3QqKSBrZXlJbmZvLmtleTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVuY3J5TW9kZSA9IFpNX1RLSVA7CisgICAgICAgICAgICAgICAgICAgIGtleSA9ICh1MzJfdCopIHdkLT5zdGEucnhTZWVkW2tleUluZm8ua2V5SW5kZXhdLnRrOworCisgICAgICAgICAgICAgICAgICAgIGlmICggIShrZXlJbmZvLmZsYWcgJiBaTV9LRVlfRkxBR19JTklUX0lWKSApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEucnhTZWVkW2tleUluZm8ua2V5SW5kZXhdLml2MTYgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5yeFNlZWRba2V5SW5mby5rZXlJbmRleF0uaXYzMiA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvKiBzZXQgTUlDIGtleSB0byBITUFDICovCisgICAgICAgICAgICAgICAgICAgIC8vemZDb3JlU2V0S2V5KGRldiwgOCwgMSwgWk1fVEtJUCwgYnJvYWRjYXN0LAorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICh1MzJfdCopICgma2V5SW5mby5rZXlbMTZdKSk7CisKKyAgICAgICAgICAgICAgICAgICAgemZNaWNTZXRLZXkoJmtleUluZm8ua2V5WzI0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndkLT5zdGEucnhNaWNLZXlba2V5SW5mby5rZXlJbmRleF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCBrZXlJbmZvLmtleUxlbmd0aCA9PSAxNiApCisgICAgICAgICAgICB7ICAgLyogQUVTICovCisgICAgICAgICAgICAgICAgZW5jcnlNb2RlID0gWk1fQUVTOworICAgICAgICAgICAgICAgIC8va2V5ID0gKHUzMl90Kikgd2QtPnN0YS5yeFNlZWRba2V5SW5mby5rZXlJbmRleF0udGs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7ICAgLyogV0VQICovCisgICAgICAgICAgICAgICAgaWYgKCBrZXlJbmZvLmtleUxlbmd0aCA9PSA1ICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVuY3J5TW9kZSA9IFpNX1dFUDY0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICgga2V5SW5mby5rZXlMZW5ndGggPT0gMTMgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZW5jcnlNb2RlID0gWk1fV0VQMTI4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICgga2V5SW5mby5rZXlMZW5ndGggPT0gMjkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZW5jcnlNb2RlID0gWk1fV0VQMjU2OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGtleSA9ICh1MzJfdCopIGtleUluZm8ua2V5OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiB1c2VyIDggKi8KKyAgICAgICAgICAgIC8vemZDb3JlU2V0S2V5KGRldiwgOCwgMCwgZW5jcnlNb2RlLCBicm9hZGNhc3QsIGtleSk7CisgICAgICAgICAgICAvL3pmSHBTZXRTdGFHcm91cEtleShkZXYsIGJyb2FkY2FzdCwgZW5jcnlNb2RlLAorICAgICAgICAgICAgLy8gICAgICAgICh1MzJfdCopIGtleUluZm8ua2V5LCAodTMyX3QqKSAoJmtleUluZm8ua2V5WzE2XSkpOworCisjaWZkZWYgWk1fRU5BQkxFX0lCU1NfV1BBMlBTSworICAgICAgICAgICAgaWYgKCAoa2V5SW5mby5rZXlMZW5ndGg9PTE2KSAmJiAod2QtPnN0YS5pYnNzV3BhMlBzaz09MSkgKQorICAgICAgICAgICAgey8qIElmIG5vdCBBRVMtQ0NNUCBhbmQgaWJzcyBuZXR3b3JrICwgdXNlIHRyYWRpdGlvbmFsICovCisgICAgICAgICAgICAgICAgemZIcFNldFBlclVzZXJLZXkoZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcklkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUluZm8ua2V5SW5kZXgsICAgICAgICAgICAgICAgIC8vIGtleSBpZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKHU4X3QgKilicm9hZGNhc3QsICAgICAgICAgICAgICAgICAgLy8gZm9yIG9ubHkgMiBzdGF0aW9ucyBJQlNTIG5ldHdybCAoIEEyICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1OF90KilrZXlJbmZvLm1hY0FkZHIsICAgLy8gZm9yIG11bHRpcGxlICggPiAyICkgc3RhdGlvbnMgSUJTUyBuZXR3b3JrICggQTIgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jcnlNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUzMl90Kikga2V5SW5mby5rZXksICh1MzJfdCopICZrZXlJbmZvLmtleVsxNl0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmSHBTZXRQZXJVc2VyS2V5KGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWk1fVVNFUl9LRVlfR0ssICAgLy8gdXNlciBpZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAvLyBrZXkgaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHU4X3QgKilicm9hZGNhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5TW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHUzMl90Kikga2V5SW5mby5rZXksICh1MzJfdCopICZrZXlJbmZvLmtleVsxNl0pOworCisgICAgICAgICAgICAgICAgd2QtPnN0YS53cGFTdGF0ZSA9IFpNX1NUQV9XUEFfU1RBVEVfR0tfT0s7CisgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgemZIcFNldFBlclVzZXJLZXkoZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWk1fVVNFUl9LRVlfR0ssICAgLy8gdXNlciBpZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgLy8ga2V5IGlkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodThfdCAqKWJyb2FkY2FzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5TW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MzJfdCopIGtleUluZm8ua2V5LCAodTMyX3QqKSAma2V5SW5mby5rZXlbMTZdKTsKKworICAgICAgICAgICAgd2QtPnN0YS53cGFTdGF0ZSA9IFpNX1NUQV9XUEFfU1RBVEVfR0tfT0s7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsgICAvKiBsZWdhY3kgV0VQICovCisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJsZWdhY3kgV0VQIik7CisKKyAgICAgICAgICAgIGlmICgga2V5SW5mby5rZXlJbmRleCA+PSA0ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gWk1fU1RBVFVTX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgga2V5SW5mby5rZXlMZW5ndGggPT0gNSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiV0VQIDY0Iik7CisKKyAgICAgICAgICAgICAgICBlbmNyeU1vZGUgPSBaTV9XRVA2NDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCBrZXlJbmZvLmtleUxlbmd0aCA9PSAxMyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiV0VQIDEyOCIpOworCisgICAgICAgICAgICAgICAgZW5jcnlNb2RlID0gWk1fV0VQMTI4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIGtleUluZm8ua2V5TGVuZ3RoID09IDMyICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBUS0lQICovCisgICAgICAgICAgICAgICAgI2lmIDAKKyAgICAgICAgICAgICAgICAvLyBEb24ndCByZXNldCB0aGUgSVYgc2luY2Ugc29tZSBBUCB3b3VsZCBmYWlsIGluIElWIGNoZWNrIGFuZCBkcm9wIG91ciBjb25uZWN0aW9uCisgICAgICAgICAgICAgICAgaWYgKCB3ZC0+c3RhLndwYVN0YXRlICE9IFpNX1NUQV9XUEFfU1RBVEVfUEtfT0sgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5pdjE2ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5pdjMyID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgI2VuZGlmCisKKyAgICAgICAgICAgICAgICBlbmNyeU1vZGUgPSBaTV9US0lQOworCisgICAgICAgICAgICAgICAgemZUa2lwSW5pdChrZXlJbmZvLmtleSwgKHU4X3QqKSB3ZC0+c3RhLmJzc2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJndkLT5zdGEucnhTZWVkW2tleUluZm8ua2V5SW5kZXhdLCBrZXlJbmZvLmluaXRJdik7CisgICAgICAgICAgICAgICAgemZNaWNTZXRLZXkoJmtleUluZm8ua2V5WzI0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3ZC0+c3RhLnJ4TWljS2V5W2tleUluZm8ua2V5SW5kZXhdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCBrZXlJbmZvLmtleUxlbmd0aCA9PSAxNiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogQUVTICovCisgICAgICAgICAgICAgICAgI2lmIDAKKyAgICAgICAgICAgICAgICAvLyBEb24ndCByZXNldCB0aGUgSVYgc2luY2Ugc29tZSBBUCB3b3VsZCBmYWlsIGluIElWIGNoZWNrIGFuZCBkcm9wIG91ciBjb25uZWN0aW9uCisgICAgICAgICAgICAgICAgaWYgKCB3ZC0+c3RhLndwYVN0YXRlICE9IFpNX1NUQV9XUEFfU1RBVEVfUEtfT0sgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogYnJvYWRjYXN0IC0tID4gZ3JvdXAga2V5ICovCisgICAgICAgICAgICAgICAgICAgIC8qIE9ubHkgaW5pdGlhbGl6ZSB3aGVuIHNldCBvdXIgZGVmYXVsdCBrZXkgISAqLworICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLml2MTYgPSAwOworICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLml2MzIgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAjZW5kaWYKKworICAgICAgICAgICAgICAgIGVuY3J5TW9kZSA9IFpNX0FFUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCBrZXlJbmZvLmtleUxlbmd0aCA9PSAyOSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiV0VQIDI1NiIpOworCisgICAgICAgICAgICAgICAgZW5jcnlNb2RlID0gWk1fV0VQMjU2OworICAgICAgICAgICAgICAgIC8vemZDb3JlU2V0S2V5KGRldiwgNjQsIDEsIHdkLT5zdGEuZW5jcnlNb2RlLAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgd2QtPnN0YS5ic3NpZCwgKHUzMl90KikgKCZrZXlJbmZvLmtleVsxNl0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gWk1fU1RBVFVTX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1OF90IGk7CisKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJrZXkgPSAiKTsKKyAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBrZXlJbmZvLmtleUxlbmd0aDsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMigiIiwga2V5SW5mby5rZXlbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBrZXlJbmZvLmZsYWcgJiBaTV9LRVlfRkxBR19ERUZBVUxUX0tFWSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy9mb3IgV0VQIGRlZmF1bHQga2V5IDF+MyBhbmQgQVRPTSBwbGF0Zm9ybS0tQ1dZYW5nKCspCisgICAgICAgICAgICAgICAgdmFwSWQgPSAwOworICAgICAgICAgICAgICAgIHdkLT5hcC5iY0hhbEtleUlkeFt2YXBJZF0gPSBrZXlJbmZvLmtleUluZGV4OworICAgICAgICAgICAgICAgIHdkLT5hcC5iY0tleUluZGV4W3ZhcElkXSA9IGtleUluZm8ua2V5SW5kZXg7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5rZXlJZCA9IGtleUluZm8ua2V5SW5kZXg7CisgICAgICAgICAgICB9CisKKwkJCWlmKGVuY3J5TW9kZSA9PSBaTV9US0lQKQorCQkJeworCQkJCWlmKHdkLT5US0lQX0dyb3VwX0tleUNoYW5naW5nID09IDB4MSkKKwkJCQl7CisJCQkJCXptX2RlYnVnX21zZzAoIkNvdW50ZXJtZWFzdXJlIDogQ2FuY2VsIE9sZCBUaW1lciAiKTsKKwkJCQkJemZUaW1lckNhbmNlbChkZXYsCVpNX0VWRU5UX1NLSVBfQ09VTlRFUk1FQVNVUkUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQl6bV9kZWJ1Z19tc2cwKCJDb3VudGVybWVhc3VyZSA6IENyZWF0ZSBOZXcgVGltZXIgIik7CisJCQkJfQorCisJCQkJd2QtPlRLSVBfR3JvdXBfS2V5Q2hhbmdpbmcgPSAweDE7CisJCQkJemZUaW1lclNjaGVkdWxlKGRldiwgWk1fRVZFTlRfU0tJUF9DT1VOVEVSTUVBU1VSRSwgMTUwKTsKKwkJCX0KKworCisKKwkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgICAgIC8qIHVzZSBkZWZhdWx0IGtleSAqLworICAgICAgICAgICAgLy96ZkNvcmVTZXRLZXkoZGV2LCBaTV9VU0VSX0tFWV9ERUZBVUxUK2tleUluZm8ua2V5SW5kZXgsIDAsCisgICAgICAgICAgICAvLyAgICAgICAgIHdkLT5zdGEuZW5jcnlNb2RlLCB3ZC0+c3RhLmJzc2lkLCAodTMyX3QqKSBrZXlJbmZvLmtleSk7CisKKyAgICAgICAgICAgIGlmICggZW5jcnlNb2RlID09IFpNX1RLSVAgfHwKKyAgICAgICAgICAgICAgICAgZW5jcnlNb2RlID09IFpNX0FFUyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZIcFNldERlZmF1bHRLZXkoZGV2LCBrZXlJbmZvLmtleUluZGV4LCBlbmNyeU1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyX3QqKSBrZXlJbmZvLmtleSwgKHUzMl90KikgJmtleUluZm8ua2V5WzE2XSk7CisKKyNpZmRlZiBaTV9FTkFCTEVfSUJTU19XUEEyUFNLCisgICAgICAgICAgICBpZiAoIChrZXlJbmZvLmtleUxlbmd0aD09MTYpICYmICh3ZC0+c3RhLmlic3NXcGEyUHNrPT0xKSApCisgICAgICAgICAgICB7LyogSWYgbm90IEFFUy1DQ01QIGFuZCBpYnNzIG5ldHdvcmsgLCB1c2UgdHJhZGl0aW9uYWwgKi8KKyAgICAgICAgICAgICAgICB3ZC0+c3RhLndwYVN0YXRlID0gWk1fU1RBX1dQQV9TVEFURV9QS19PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAod2QtPnN0YS53cGFTdGF0ZSA9PSBaTV9TVEFfV1BBX1NUQVRFX1BLX09LKQorICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLndwYVN0YXRlID0gWk1fU1RBX1dQQV9TVEFURV9HS19PSzsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLndwYVN0YXRlID0gWk1fU1RBX1dQQV9TVEFURV9QS19PSzsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5lbmNyeU1vZGUgPSBlbmNyeU1vZGU7CisgICAgICAgICAgICAgICAgICAgIHdkLT53cy5lbmNyeU1vZGUgPSBlbmNyeU1vZGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgICBpZiAod2QtPnN0YS53cGFTdGF0ZSA9PSBaTV9TVEFfV1BBX1NUQVRFX1BLX09LKQorICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLndwYVN0YXRlID0gWk1fU1RBX1dQQV9TVEFURV9HS19PSzsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICggd2QtPnN0YS53cGFTdGF0ZSA9PSBaTV9TVEFfV1BBX1NUQVRFX0lOSVQgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS53cGFTdGF0ZSA9IFpNX1NUQV9XUEFfU1RBVEVfUEtfT0s7CisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEuZW5jcnlNb2RlID0gZW5jcnlNb2RlOworICAgICAgICAgICAgICAgICAgICB3ZC0+d3MuZW5jcnlNb2RlID0gZW5jcnlNb2RlOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmSHBTZXREZWZhdWx0S2V5KGRldiwga2V5SW5mby5rZXlJbmRleCwgZW5jcnlNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MzJfdCopIGtleUluZm8ua2V5LCBOVUxMKTsKKworICAgICAgICAgICAgICAgIC8qIFNhdmUga2V5IGZvciBzb2Z0d2FyZSBXRVAgKi8KKyAgICAgICAgICAgICAgICB6Zk1lbW9yeUNvcHkod2QtPnN0YS53ZXBLZXlba2V5SW5mby5rZXlJbmRleF0sIGtleUluZm8ua2V5LAorICAgICAgICAgICAgICAgICAgICAgICAga2V5SW5mby5rZXlMZW5ndGgpOworCisgICAgICAgICAgICAgICAgLyogVE9ETzogQ2hlY2sgd2hldGhlciB3ZSBuZWVkIHRvIHNhdmUgdGhlIFNXRW5jcnlNb2RlICovCisgICAgICAgICAgICAgICAgd2QtPnN0YS5TV0VuY3J5TW9kZVtrZXlJbmZvLmtleUluZGV4XSA9IGVuY3J5TW9kZTsKKworICAgICAgICAgICAgICAgIHdkLT5zdGEuZW5jcnlNb2RlID0gZW5jcnlNb2RlOworICAgICAgICAgICAgICAgIHdkLT53cy5lbmNyeU1vZGUgPSBlbmNyeU1vZGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKy8vICAgIHdkLT5zdGEuZmxhZ0tleUNoYW5naW5nID0gMTsKKyAgICByZXR1cm4gWk1fU1RBVFVTX1NVQ0NFU1M7Cit9CisKKy8qIFBTRVVETyB0ZXN0ICovCit1OF90IHpmaVdsYW5QU0VVRE9TZXRLZXkoemRldl90KiBkZXYsIHN0cnVjdCB6c0tleUluZm8ga2V5SW5mbykKK3sKKyAgICAvL3UxNl90ICBicm9hZGNhc3RbM10gPSB7MHhmZmZmLCAweGZmZmYsIDB4ZmZmZn07CisgICAgLy91MzJfdCoga2V5OworICAgIHU4X3QgICBtaWNLZXlbMTZdOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgc3dpdGNoIChrZXlJbmZvLmtleUxlbmd0aCkKKyAgICB7CisgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgIHdkLT5zdGEuZW5jcnlNb2RlID0gWk1fV0VQNjQ7CisgICAgICAgICAgICAvKiB1c2UgZGVmYXVsdCBrZXkgKi8KKyAgICAgICAgICAgIHpmQ29yZVNldEtleShkZXYsIDY0LCAwLCBaTV9XRVA2NCwgKHUxNl90ICopa2V5SW5mby5tYWNBZGRyLCAodTMyX3QqKSBrZXlJbmZvLmtleSk7CisJCSAgICAgICAgICBicmVhazsKKworICAgICAgIAljYXNlIDEzOgorICAgICAgICAgICAgd2QtPnN0YS5lbmNyeU1vZGUgPSBaTV9XRVAxMjg7CisgICAgICAgICAgICAvKiB1c2UgZGVmYXVsdCBrZXkgKi8KKyAgICAgICAgICAgIHpmQ29yZVNldEtleShkZXYsIDY0LCAwLCBaTV9XRVAxMjgsICh1MTZfdCAqKWtleUluZm8ubWFjQWRkciwgKHUzMl90Kikga2V5SW5mby5rZXkpOworICAgICAgICAgIAkJYnJlYWs7CisKKyAgICAgICAJY2FzZSAyOToKKyAgICAgICAgICAgIHdkLT5zdGEuZW5jcnlNb2RlID0gWk1fV0VQMjU2OworICAgICAgICAgICAgLyogdXNlIGRlZmF1bHQga2V5ICovCisgICAgICAgICAgICB6ZkNvcmVTZXRLZXkoZGV2LCA2NCwgMSwgWk1fV0VQMjU2LCAgKHUxNl90ICopa2V5SW5mby5tYWNBZGRyLCAodTMyX3QqKSAoJmtleUluZm8ua2V5WzE2XSkpOworICAgICAgICAgICAgemZDb3JlU2V0S2V5KGRldiwgNjQsIDAsIFpNX1dFUDI1NiwgKHUxNl90ICopa2V5SW5mby5tYWNBZGRyLCAodTMyX3QqKSBrZXlJbmZvLmtleSk7CisJCSAgICAgICAgICBicmVhazsKKworICAgICAgIAljYXNlIDE2OgorICAgICAgICAgICAgd2QtPnN0YS5lbmNyeU1vZGUgPSBaTV9BRVM7CisgICAgICAgICAgICAvL3pmQ29yZVNldEtleShkZXYsIDAsIDAsIFpNX0FFUywgKHUxNl90ICopa2V5SW5mby5tYWNBZGRyLCAodTMyX3QqKSBrZXlJbmZvLmtleSk7CisgICAgICAgICAgICB6ZkNvcmVTZXRLZXkoZGV2LCA2NCwgMCwgWk1fQUVTLCAodTE2X3QgKilrZXlJbmZvLm1hY0FkZHIsICh1MzJfdCopIGtleUluZm8ua2V5KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgCWNhc2UgMzI6CisjaWZkZWYgWk1fRU5BQkxFX0NFTkMKKyAgICAgICAgICAgIGlmIChrZXlJbmZvLmZsYWcgJiBaTV9LRVlfRkxBR19DRU5DKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHUxNl90IGJvYXJkY2FzdEFkZHJbM10gPSB7MHhmZmZmLCAweGZmZmYsIDB4ZmZmZn07CisgICAgICAgICAgICAgICAgdTE2X3QgQWRkcl9hW10gPSB7IDB4MDAwMCwgMHgwMDgwLCAweDA5MDF9OworICAgICAgICAgICAgICAgIHUxNl90IEFkZHJfYltdID0geyAweDAwMDAsIDB4MDA4MCwgMHgwOTAyfTsKKyAgICAgICAgICAgICAgICAvKiBDRU5DIHRlc3Q6IHVzZXIwLDEgYW5kIHVzZXIyIGZvciBib2FyZGNhc3QgKi8KKyAgICAgICAgICAgICAgICB3ZC0+c3RhLmVuY3J5TW9kZSA9IFpNX0NFTkM7CisgICAgICAgICAgICAgICAgemZDb3JlU2V0S2V5KGRldiwgMCwgMSwgWk1fQ0VOQywgKHUxNl90ICopQWRkcl9hLCAodTMyX3QqKSAoJmtleUluZm8ua2V5WzE2XSkpOworICAgICAgICAgICAgICAgIHpmQ29yZVNldEtleShkZXYsIDAsIDAsIFpNX0NFTkMsICh1MTZfdCAqKUFkZHJfYSwgKHUzMl90Kikga2V5SW5mby5rZXkpOworCisgICAgICAgICAgICAgICAgemZDb3JlU2V0S2V5KGRldiwgMSwgMSwgWk1fQ0VOQywgKHUxNl90ICopQWRkcl9iLCAodTMyX3QqKSAoJmtleUluZm8ua2V5WzE2XSkpOworICAgICAgICAgICAgICAgIHpmQ29yZVNldEtleShkZXYsIDEsIDAsIFpNX0NFTkMsICh1MTZfdCAqKUFkZHJfYiwgKHUzMl90Kikga2V5SW5mby5rZXkpOworCisgICAgICAgICAgICAgICAgemZDb3JlU2V0S2V5KGRldiwgMiwgMSwgWk1fQ0VOQywgKHUxNl90ICopYm9hcmRjYXN0QWRkciwgKHUzMl90KikgKCZrZXlJbmZvLmtleVsxNl0pKTsKKyAgICAgICAgICAgICAgICB6ZkNvcmVTZXRLZXkoZGV2LCAyLCAwLCBaTV9DRU5DLCAodTE2X3QgKilib2FyZGNhc3RBZGRyLCAodTMyX3QqKSBrZXlJbmZvLmtleSk7CisKKyAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIFBOIHNlcXVlbmNlICovCisgICAgICAgICAgICAgICAgd2QtPnN0YS50eGl2WzBdID0gMHg1YzM2NWMzNjsKKyAgICAgICAgICAgICAgICB3ZC0+c3RhLnR4aXZbMV0gPSAweDVjMzY1YzM2OworICAgICAgICAgICAgICAgIHdkLT5zdGEudHhpdlsyXSA9IDB4NWMzNjVjMzY7CisgICAgICAgICAgICAgICAgd2QtPnN0YS50eGl2WzNdID0gMHg1YzM2NWMzNjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5lbmNyeU1vZGUgPSBaTV9US0lQOworICAgICAgICAgICAgICAgIHpmQ29yZVNldEtleShkZXYsIDY0LCAxLCBaTV9US0lQLCAodTE2X3QgKilrZXlJbmZvLm1hY0FkZHIsICh1MzJfdCopIG1pY0tleSk7CisgICAgICAgICAgICAgICAgemZDb3JlU2V0S2V5KGRldiwgNjQsIDAsIFpNX1RLSVAsICh1MTZfdCAqKWtleUluZm8ubWFjQWRkciwgKHUzMl90Kikga2V5SW5mby5rZXkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB3ZC0+c3RhLmVuY3J5TW9kZSA9IFpNX05PX1dFUDsKKyAgICB9CisKKyAgICByZXR1cm4gWk1fU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3ZvaWQgemZpV2xhblNldFBvd2VyU2F2ZU1vZGUoemRldl90KiBkZXYsIHU4X3QgbW9kZSkKK3sKKyNpZiAwCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgd2QtPnN0YS5wb3dlclNhdmVNb2RlID0gbW9kZTsKKworICAgIC8qIHNlbmQgbnVsbCBkYXRhIHdpdGggUHdyQml0IHRvIGluZm9ybSBBUCAqLworICAgIGlmICggbW9kZSA+IFpNX1NUQV9QU19OT05FICkKKyAgICB7CisgICAgICAgIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUgKQorICAgICAgICB7CisgICAgICAgICAgICB6ZlNlbmROdWxsRGF0YShkZXYsIDEpOworICAgICAgICB9CisKKyAgICAgICAgLyogZGV2aWNlIGludG8gUFMgbW9kZSAqLworICAgICAgICB6ZlBTRGV2aWNlU2xlZXAoZGV2KTsKKyAgICB9CisjZW5kaWYKKworICAgIHpmUG93ZXJTYXZpbmdNZ3JTZXRNb2RlKGRldiwgbW9kZSk7Cit9CisKK3ZvaWQgemZpV2xhblNldE1hY0FkZHJlc3MoemRldl90KiBkZXYsIHUxNl90KiBtYWMpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgd2QtPm1hY0FkZHJbMF0gPSBtYWNbMF07CisgICAgd2QtPm1hY0FkZHJbMV0gPSBtYWNbMV07CisgICAgd2QtPm1hY0FkZHJbMl0gPSBtYWNbMl07CisKKyAgICB6ZkhwU2V0TWFjQWRkcmVzcyhkZXYsIG1hYywgMCk7Cit9CisKK3U4X3QgemZpV2xhblF1ZXJ5V2xhbk1vZGUoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgcmV0dXJuIHdkLT53bGFuTW9kZTsKK30KKwordThfdCB6ZmlXbGFuUXVlcnlBZGFwdGVyU3RhdGUoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgcmV0dXJuIHdkLT5zdGF0ZTsKK30KKwordThfdCB6ZmlXbGFuUXVlcnlBdXRoZW50aWNhdGlvbk1vZGUoemRldl90KiBkZXYsIHU4X3QgYldyYXBwZXIpCit7CisgICAgdThfdCAgIGF1dGhNb2RlOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYgKCBiV3JhcHBlciApCisgICAgeworICAgICAgICBhdXRoTW9kZSA9IHdkLT53cy5hdXRoTW9kZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy9hdXRoTW9kZSA9IHdkLT5zdGEuYXV0aE1vZGU7CisgICAgICAgIGF1dGhNb2RlID0gd2QtPnN0YS5jdXJyZW50QXV0aE1vZGU7CisgICAgfQorCisgICAgcmV0dXJuIGF1dGhNb2RlOworfQorCit1OF90IHpmaVdsYW5RdWVyeVdlcFN0YXR1cyh6ZGV2X3QqIGRldiwgdThfdCBiV3JhcHBlcikKK3sKKyAgICB1OF90IHdlcFN0YXR1czsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGlmICggYldyYXBwZXIgKQorICAgIHsKKyAgICAgICAgd2VwU3RhdHVzID0gd2QtPndzLndlcFN0YXR1czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgd2VwU3RhdHVzID0gd2QtPnN0YS53ZXBTdGF0dXM7CisgICAgfQorCisgICAgcmV0dXJuIHdlcFN0YXR1czsKK30KKwordm9pZCB6ZmlXbGFuUXVlcnlTU0lEKHpkZXZfdCogZGV2LCB1OF90KiBzc2lkLCB1OF90KiBwU3NpZExlbmd0aCkKK3sKKyAgICB1MTZfdCB2YXBJZCA9IDA7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKQorICAgIHsKKyAgICAgICAgdmFwSWQgPSB6ZndHZXRWYXBJZChkZXYpOworCisgICAgICAgIGlmICh2YXBJZCA9PSAweGZmZmYpCisgICAgICAgIHsKKyAgICAgICAgICAgICpwU3NpZExlbmd0aCA9IHdkLT5hcC5zc2lkTGVuWzBdOworICAgICAgICAgICAgemZNZW1vcnlDb3B5KHNzaWQsIHdkLT5hcC5zc2lkWzBdLCB3ZC0+YXAuc3NpZExlblswXSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAqcFNzaWRMZW5ndGggPSB3ZC0+YXAuc3NpZExlblt2YXBJZCArIDFdOworICAgICAgICAgICAgemZNZW1vcnlDb3B5KHNzaWQsIHdkLT5hcC5zc2lkW3ZhcElkICsgMV0sIHdkLT5hcC5zc2lkTGVuW3ZhcElkICsgMV0pOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICpwU3NpZExlbmd0aCA9IHdkLT5zdGEuc3NpZExlbjsKKyAgICAgICAgemZNZW1vcnlDb3B5KHNzaWQsIHdkLT5zdGEuc3NpZCwgd2QtPnN0YS5zc2lkTGVuKTsKKyAgICB9Cit9CisKK3UxNl90IHpmaVdsYW5RdWVyeUZyYWdUaHJlc2hvbGQoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgcmV0dXJuIHdkLT5mcmFnVGhyZXNob2xkOworfQorCit1MTZfdCB6ZmlXbGFuUXVlcnlSdHNUaHJlc2hvbGQoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgcmV0dXJuIHdkLT5ydHNUaHJlc2hvbGQ7Cit9CisKK3UzMl90IHpmaVdsYW5RdWVyeUZyZXF1ZW5jeSh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICByZXR1cm4gKHdkLT5mcmVxdWVuY3kqMTAwMCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRnVuY3Rpb246IHpmaVdsYW5RdWVyeUN1cnJlbnRGcmVxdWVuY3kKKyAqIFJldHVybiB2YWx1ZToKKyAqICAgLSAgIDAgOiBubyB2YWxpZGF0ZSBjdXJyZW50IGZyZXF1ZW5jeQorICogICAtICg+MCk6IGN1cnJlbnQgZnJlcXVlbmN5IGRlcGVuZCBvbiAicW1vZGUiCisgKiBJbnB1dDoKKyAqICAgLSBxbW9kZToKKyAqICAgICAgMDogcmV0dXJuIHZhbHVlIGRlcGVuZCBvbiB0aGUgc3VwcG9ydCBtb2RlLCB0aGlzCisgICAgICAgICAgIHFtb2RlIGlzIHVzZSB0byBzb2x2ZSB0aGUgYnVnICMzMTIyMworICogICAgICAxOiByZXR1cm4gdGhlIGFjdHVhbGx5IGN1cnJlbnQgZnJlcXVlbmN5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzJfdCB6ZmlXbGFuUXVlcnlDdXJyZW50RnJlcXVlbmN5KHpkZXZfdCogZGV2LCB1OF90IHFtb2RlKQoreworICAgIHUzMl90IGZyZXF1ZW5jeTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHN3aXRjaCAocW1vZGUpCisgICAgeworICAgIGNhc2UgMDoKKyAgICAgICAgaWYgKHdkLT5zdGEuY3VycmVudEZyZXF1ZW5jeSA+IDMwMDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3ZC0+c3VwcG9ydE1vZGUgJiBaTV9XSVJFTEVTU19NT0RFXzUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJlcXVlbmN5ID0gd2QtPnN0YS5jdXJyZW50RnJlcXVlbmN5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAod2QtPnN1cHBvcnRNb2RlICYgWk1fV0lSRUxFU1NfTU9ERV8yNCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSB6ZkNoR2V0Rmlyc3QyR2h6Q2hhbm5lbChkZXYpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2QtPnN1cHBvcnRNb2RlICYgWk1fV0lSRUxFU1NfTU9ERV8yNCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmcmVxdWVuY3kgPSB3ZC0+c3RhLmN1cnJlbnRGcmVxdWVuY3k7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh3ZC0+c3VwcG9ydE1vZGUgJiBaTV9XSVJFTEVTU19NT0RFXzUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnJlcXVlbmN5ID0gemZDaEdldExhc3Q1R2h6Q2hhbm5lbChkZXYpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDE6CisgICAgICAgIGZyZXF1ZW5jeSA9IHdkLT5zdGEuY3VycmVudEZyZXF1ZW5jeTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBmcmVxdWVuY3kgPSAwOworICAgIH0KKworICAgIHJldHVybiAoZnJlcXVlbmN5KjEwMDApOworfQorCit1MzJfdCB6ZmlXbGFuUXVlcnlGcmVxdWVuY3lBdHRyaWJ1dGUoemRldl90KiBkZXYsIHUzMl90IGZyZXEpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgdThfdCAgaTsKKyAgICB1MTZfdCBmcmVxdWVuY3kgPSAodTE2X3QpIChmcmVxLzEwMDApOworICAgIHUzMl90IHJldCA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgd2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxDbnQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmICggd2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0uY2hhbm5lbCA9PSBmcmVxdWVuY3kgKQorICAgICAgICB7CisgICAgICAgICAgICByZXQgPSB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5jaGFubmVsRmxhZ3M7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisvKiBCYW5kV2lkdGggIDA9PjIwICAxPT40MCAqLworLyogRXh0T2Zmc2V0ICAwPT4yMCAgMT0+aGlnaCBjb250cm9sIDQwICAgMz0+bG93IGNvbnRyb2wgNDAgKi8KK3ZvaWQgemZpV2xhblF1ZXJ5RnJlcXVlbmN5SFQoemRldl90KiBkZXYsIHUzMl90ICpiYW5kV2lkdGgsIHUzMl90ICpleHRPZmZzZXQpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgKmJhbmRXaWR0aCA9IHdkLT5CYW5kV2lkdGg0MDsKKyAgICAqZXh0T2Zmc2V0ID0gd2QtPkV4dE9mZnNldDsKK30KKwordThfdCB6ZmlXbGFuUXVlcnlDV01vZGUoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgcmV0dXJuIHdkLT5jd20uY3dfbW9kZTsKK30KKwordTMyX3QgemZpV2xhblF1ZXJ5Q1dFbmFibGUoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgcmV0dXJuIHdkLT5jd20uY3dfZW5hYmxlOworfQorCit2b2lkIHpmaVdsYW5RdWVyeUJzc2lkKHpkZXZfdCogZGV2LCB1OF90KiBic3NpZCkKK3sKKyAgICB1OF90ICAgYWRkcls2XTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIFpNX01BQ19XT1JEX1RPX0JZVEUod2QtPnN0YS5ic3NpZCwgYWRkcik7CisgICAgemZNZW1vcnlDb3B5KGJzc2lkLCBhZGRyLCA2KTsKK30KKwordTE2X3QgemZpV2xhblF1ZXJ5QmVhY29uSW50ZXJ2YWwoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgcmV0dXJuIHdkLT5iZWFjb25JbnRlcnZhbDsKK30KKwordTMyX3QgemZpV2xhblF1ZXJ5UnhCZWFjb25Ub3RhbCh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgd2QtPnN0YS5yeEJlYWNvblRvdGFsICs9IHdkLT5zdGEucnhCZWFjb25Db3VudDsKKworICAgIHJldHVybiB3ZC0+c3RhLnJ4QmVhY29uVG90YWw7Cit9CisKK3UxNl90IHpmaVdsYW5RdWVyeUF0aW1XaW5kb3coemRldl90KiBkZXYpCit7CisgICAgdTE2X3QgYXRpbVdpbmRvdzsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGF0aW1XaW5kb3cgPSB3ZC0+c3RhLmF0aW1XaW5kb3c7CisKKyAgICByZXR1cm4gYXRpbVdpbmRvdzsKK30KKwordThfdCB6ZmlXbGFuUXVlcnlFbmNyeU1vZGUoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKQorICAgICAgICByZXR1cm4gd2QtPmFwLmVuY3J5TW9kZVswXTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiB3ZC0+c3RhLmVuY3J5TW9kZTsKK30KKwordTE2X3QgemZpV2xhblF1ZXJ5Q2FwYWJpbGl0eSh6ZGV2X3QqIGRldikKK3sKKyAgICB1MTZfdCBjYXBhYmlsaXR5OworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgY2FwYWJpbGl0eSA9IHdkLT5zdGEuY2FwYWJpbGl0eVswXSArCisgICAgICAgICAgICAgICAgICgoKHUxNl90KSB3ZC0+c3RhLmNhcGFiaWxpdHlbMV0pIDw8IDgpOworCisgICAgcmV0dXJuIGNhcGFiaWxpdHk7CisKK30KKwordTE2X3QgemZpV2xhblF1ZXJ5QWlkKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHJldHVybiB3ZC0+c3RhLmFpZDsKK30KKwordm9pZCB6ZmlXbGFuUXVlcnlTdXBwb3J0UmF0ZSh6ZGV2X3QqIGRldiwgdThfdCogcmF0ZUFycmF5LCB1OF90KiBwTGVuZ3RoKQoreworICAgIHU4X3QgICBpLCBqPTA7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBmb3IoIGk9MDsgaTw0OyBpKysgKQorICAgIHsKKyAgICAgICAgaWYgKCB3ZC0+YlJhdGUgJiAoMHgxIDw8IGkpICkKKyAgICAgICAgeworICAgICAgICAgICAgcmF0ZUFycmF5W2pdID0gemcxMWJSYXRlVGJsW2ldICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgod2QtPmJSYXRlQmFzaWMgJiAoMHgxPDxpKSk8PCg3LWkpKTsKKyAgICAgICAgICAgIGorKzsKKyAgICAgICAgfQorICAgIH0KKworICAgICpwTGVuZ3RoID0gajsKK30KKwordm9pZCB6ZmlXbGFuUXVlcnlFeHRTdXBwb3J0UmF0ZSh6ZGV2X3QqIGRldiwgdThfdCogcmF0ZUFycmF5LCB1OF90KiBwTGVuZ3RoKQoreworICAgIHU4X3QgICBpLCBqPTA7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBmb3IoIGk9MDsgaTw4OyBpKysgKQorICAgIHsKKyAgICAgICAgaWYgKCB3ZC0+Z1JhdGUgJiAoMHgxIDw8IGkpICkKKyAgICAgICAgeworICAgICAgICAgICAgcmF0ZUFycmF5W2pdID0gemcxMWdSYXRlVGJsW2ldICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgod2QtPmdSYXRlQmFzaWMgJiAoMHgxPDxpKSk8PCg3LWkpKTsKKyAgICAgICAgICAgIGorKzsKKyAgICAgICAgfQorICAgIH0KKworICAgICpwTGVuZ3RoID0gajsKK30KKwordm9pZCB6ZmlXbGFuUXVlcnlSc25JZSh6ZGV2X3QqIGRldiwgdThfdCogaWUsIHU4X3QqIHBMZW5ndGgpCit7CisgICAgdThfdCBsZW47CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBsZW4gPSB3ZC0+c3RhLnJzbkllWzFdICsgMjsKKyAgICB6Zk1lbW9yeUNvcHkoaWUsIHdkLT5zdGEucnNuSWUsIGxlbik7CisgICAgKnBMZW5ndGggPSBsZW47Cit9CisKK3ZvaWQgemZpV2xhblF1ZXJ5V3BhSWUoemRldl90KiBkZXYsIHU4X3QqIGllLCB1OF90KiBwTGVuZ3RoKQoreworICAgIHU4X3QgbGVuOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgbGVuID0gd2QtPnN0YS53cGFJZVsxXSArIDI7CisgICAgemZNZW1vcnlDb3B5KGllLCB3ZC0+c3RhLndwYUllLCBsZW4pOworICAgICpwTGVuZ3RoID0gbGVuOworCit9CisKK3U4X3QgemZpV2xhblF1ZXJ5TXVsdGljYXN0Q2lwaGVyQWxnbyh6ZGV2X3QgKmRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBzd2l0Y2goIHdkLT5zdGEuY3VycmVudEF1dGhNb2RlICkKKyAgICB7CisgICAgICAgIGNhc2UgWk1fQVVUSF9NT0RFX1dQQTJQU0s6CisgICAgICAgIGNhc2UgWk1fQVVUSF9NT0RFX1dQQTI6CisgICAgICAgICAgICBpZiAoIHdkLT5zdGEucnNuSWVbN10gPT0gMiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFpNX1RLSVA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFpNX0FFUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWk1fQVVUSF9NT0RFX1dQQVBTSzoKKyAgICAgICAgY2FzZSBaTV9BVVRIX01PREVfV1BBOgorICAgICAgICAgICAgaWYgKCB3ZC0+c3RhLnJzbkllWzExXSA9PSAyICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gWk1fVEtJUDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gWk1fQUVTOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiB3ZC0+c3RhLmVuY3J5TW9kZTsKKyAgICB9Cit9CisKK3U4X3QgemZpV2xhblF1ZXJ5SFRNb2RlKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICAvLyAwOkxlZ2FuY3ksIDE6TgorICAgIHJldHVybiB3ZC0+c3RhLkVuYWJsZUhUOworfQorCit1OF90IHpmaVdsYW5RdWVyeUJhbmRXaWR0aDQwKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICAvLyAwOjIwTSwgMTo0ME0KKyAgICByZXR1cm4gd2QtPkJhbmRXaWR0aDQwOworfQorCit1MTZfdCB6ZmlXbGFuUXVlcnlSZWdpb25Db2RlKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHJldHVybiB3ZC0+cmVndWxhdGlvblRhYmxlLnJlZ2lvbkNvZGU7Cit9Cit2b2lkIHpmaVdsYW5TZXRXcGFJZSh6ZGV2X3QqIGRldiwgdThfdCogaWUsIHU4X3QgTGVuZ3RoKQoreworICAgIHUxNl90IHZhcElkID0gMDsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApIC8vIEFQIE1vZGUKKyAgICB7CisgICAgICAgIHZhcElkID0gemZ3R2V0VmFwSWQoZGV2KTsKKworICAgICAgICBpZiAodmFwSWQgPT0gMHhmZmZmKQorICAgICAgICAgICAgdmFwSWQgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YXBJZCsrOworCisgICAgICAgIHptX2Fzc2VydChMZW5ndGggPCBaTV9NQVhfV1BBSUVfU0laRSk7CisgICAgICAgIGlmIChMZW5ndGggPCBaTV9NQVhfV1BBSUVfU0laRSkKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPmFwLndwYUxlblt2YXBJZF0gPSBMZW5ndGg7CisgICAgICAgICAgICB6Zk1lbW9yeUNvcHkod2QtPmFwLndwYUllW3ZhcElkXSwgaWUsIHdkLT5hcC53cGFMZW5bdmFwSWRdKTsKKyAgICAgICAgfQorCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHdkLT5zdGEud3BhTGVuID0gTGVuZ3RoOworICAgICAgICB6Zk1lbW9yeUNvcHkod2QtPnN0YS53cGFJZSwgaWUsIHdkLT5zdGEud3BhTGVuKTsKKyAgICB9CisgICAgLy96ZmlXbGFuU2V0V3BhU3VwcG9ydChkZXYsIDEpOworICAgIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCkgLy8gQVAgTW9kZQorICAgIHsKKyAgICAgICAgd2QtPmFwLndwYVN1cHBvcnRbdmFwSWRdID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgd2QtPnN0YS53cGFTdXBwb3J0ID0gMTsKKyAgICB9CisKK30KKwordm9pZCB6ZmlXbGFuU2V0V3BhU3VwcG9ydCh6ZGV2X3QqIGRldiwgdThfdCBXcGFTdXBwb3J0KQoreworICAgIHUxNl90IHZhcElkID0gMDsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApIC8vIEFQIE1vZGUKKyAgICB7CisgICAgICAgIHZhcElkID0gemZ3R2V0VmFwSWQoZGV2KTsKKworICAgICAgICBpZiAodmFwSWQgPT0gMHhmZmZmKQorICAgICAgICAgICAgdmFwSWQgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YXBJZCsrOworCisgICAgICAgIHdkLT5hcC53cGFTdXBwb3J0W3ZhcElkXSA9IFdwYVN1cHBvcnQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHdkLT5zdGEud3BhU3VwcG9ydCA9IFdwYVN1cHBvcnQ7CisgICAgfQorCit9CisKK3ZvaWQgemZpV2xhblNldFByb3RlY3Rpb25Nb2RlKHpkZXZfdCogZGV2LCB1OF90IG1vZGUpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgd2QtPnN0YS5iUHJvdGVjdGlvbk1vZGUgPSBtb2RlOworICAgIGlmICh3ZC0+c3RhLmJQcm90ZWN0aW9uTW9kZSA9PSBUUlVFKQorICAgIHsKKyAgICAgICAgemZIcFNldFNsb3RUaW1lKGRldiwgMCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHpmSHBTZXRTbG90VGltZShkZXYsIDEpOworICAgIH0KKworICAgIHptX21zZzFfbW0oWk1fTFZfMSwgIndkLT5wcm90ZWN0aW9uTW9kZT0iLCB3ZC0+c3RhLmJQcm90ZWN0aW9uTW9kZSk7Cit9CisKK3ZvaWQgemZpV2xhblNldEJhc2ljUmF0ZSh6ZGV2X3QqIGRldiwgdThfdCBiUmF0ZVNldCwgdThfdCBnUmF0ZVNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1MzJfdCBuUmF0ZVNldCkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB3ZC0+d3MuYlJhdGVCYXNpYyA9IGJSYXRlU2V0OworICAgIHdkLT53cy5nUmF0ZUJhc2ljID0gZ1JhdGVTZXQ7CisgICAgd2QtPndzLm5SYXRlQmFzaWMgPSBuUmF0ZVNldDsKK30KKwordm9pZCB6ZmlXbGFuU2V0QkdNb2RlKHpkZXZfdCogZGV2LCB1OF90IG1vZGUpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgd2QtPndzLmJnTW9kZSA9IG1vZGU7Cit9CisKK3ZvaWQgemZpV2xhblNldHByZWFtYmxlVHlwZSh6ZGV2X3QqIGRldiwgdThfdCB0eXBlKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHdkLT53cy5wcmVhbWJsZVR5cGUgPSB0eXBlOworfQorCit1OF90IHpmaVdsYW5RdWVyeXByZWFtYmxlVHlwZSh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICByZXR1cm4gd2QtPndzLnByZWFtYmxlVHlwZTsKK30KKwordThfdCB6ZmlXbGFuUXVlcnlQb3dlclNhdmVNb2RlKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHJldHVybiB3ZC0+c3RhLnBvd2VyU2F2ZU1vZGU7Cit9CisKK3U4X3QgemZpV2xhblNldFBta2lkSW5mbyh6ZGV2X3QqIGRldiwgdTE2X3QqIGJzc2lkLCB1OF90KiBwbWtpZCkKK3sKKyAgICB1MzJfdCAgaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGZvcihpPTA7IGk8d2QtPnN0YS5wbWtpZEluZm8uYnNzaWRDb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKCB6Zk1lbW9yeUlzRXF1YWwoKHU4X3QqKSB3ZC0+c3RhLnBta2lkSW5mby5ic3NpZEluZm9baV0uYnNzaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1OF90KikgYnNzaWQsIDYpICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogbWF0Y2hlZCAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIGkgPCB3ZC0+c3RhLnBta2lkSW5mby5ic3NpZENvdW50ICkKKyAgICB7CisgICAgICAgIC8qIG92ZXJ3cml0ZSB0aGUgb3JpZ2luYWwgb25lICovCisgICAgICAgIHpmTWVtb3J5Q29weSh3ZC0+c3RhLnBta2lkSW5mby5ic3NpZEluZm9baV0ucG1raWQsIHBta2lkLCAxNik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmICggaSA8IFpNX1BNS0lEX01BWF9CU1NfQ05UICkKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPnN0YS5wbWtpZEluZm8uYnNzaWRJbmZvW2ldLmJzc2lkWzBdID0gYnNzaWRbMF07CisgICAgICAgICAgICB3ZC0+c3RhLnBta2lkSW5mby5ic3NpZEluZm9baV0uYnNzaWRbMV0gPSBic3NpZFsxXTsKKyAgICAgICAgICAgIHdkLT5zdGEucG1raWRJbmZvLmJzc2lkSW5mb1tpXS5ic3NpZFsyXSA9IGJzc2lkWzJdOworCisgICAgICAgICAgICB6Zk1lbW9yeUNvcHkod2QtPnN0YS5wbWtpZEluZm8uYnNzaWRJbmZvW2ldLnBta2lkLCBwbWtpZCwgMTYpOworICAgICAgICAgICAgd2QtPnN0YS5wbWtpZEluZm8uYnNzaWRDb3VudCsrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3UzMl90IHpmaVdsYW5RdWVyeVBta2lkSW5mbyh6ZGV2X3QqIGRldiwgdThfdCogYnVmLCB1MzJfdCBsZW4pCit7CisgICAgLy9zdHJ1Y3QgenNQbWtpZEluZm8qIHBQbWtpZEluZm8gPSAoIHN0cnVjdCB6c1Bta2lkSW5mbyogKSBidWY7CisgICAgdTMyX3QgIHNpemU7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBzaXplID0gc2l6ZW9mKHUzMl90KSArCisgICAgICAgICAgIHdkLT5zdGEucG1raWRJbmZvLmJzc2lkQ291bnQgKiBzaXplb2Yoc3RydWN0IHpzUG1raWRCc3NpZEluZm8pOworCisgICAgaWYgKCBsZW4gPCBzaXplICkKKyAgICB7CisgICAgICAgIHJldHVybiB3ZC0+c3RhLnBta2lkSW5mby5ic3NpZENvdW50OworICAgIH0KKworICAgIHpmTWVtb3J5Q29weShidWYsICh1OF90KikgJndkLT5zdGEucG1raWRJbmZvLCAodTE2X3QpIHNpemUpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgemZpV2xhblNldE11bHRpY2FzdExpc3QoemRldl90KiBkZXYsIHU4X3Qgc2l6ZSwgdThfdCogcExpc3QpCit7CisgICAgc3RydWN0IHpzTXVsdGljYXN0QWRkciogcE1hY0xpc3QgPSAoc3RydWN0IHpzTXVsdGljYXN0QWRkciopIHBMaXN0OworICAgIHU4X3QgICBpOworICAgIHU4X3QgICBiQWxsTXVsdGljYXN0ID0gMDsKKyAgICAvL3UzMl90ICB2YWx1ZTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHdkLT5zdGEubXVsdGljYXN0TGlzdC5zaXplID0gc2l6ZTsKKyAgICBmb3IoaT0wOyBpPHNpemU7IGkrKykKKyAgICB7CisgICAgICAgIHpmTWVtb3J5Q29weSh3ZC0+c3RhLm11bHRpY2FzdExpc3QubWFjQWRkcltpXS5hZGRyLAorICAgICAgICAgICAgICAgICAgICAgcE1hY0xpc3RbaV0uYWRkciwgNik7CisgICAgfQorCisgICAgaWYgKCB3ZC0+c3RhLm9zUnhGaWx0ZXIgJiBaTV9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUICkKKyAgICAgICAgYkFsbE11bHRpY2FzdCA9IDE7CisgICAgemZIcFNldE11bHRpY2FzdExpc3QoZGV2LCBzaXplLCBwTGlzdCwgYkFsbE11bHRpY2FzdCk7CisKK30KKwordm9pZCB6ZmlXbGFuUmVtb3ZlS2V5KHpkZXZfdCogZGV2LCB1OF90IGtleVR5cGUsIHU4X3Qga2V5SWQpCit7CisgICAgdTE2X3QgIGZha2VNYWNBZGRyWzNdID0gezAsIDAsIDB9OworICAgIHUzMl90ICBmYWtlS2V5WzRdID0gezAsIDAsIDAsIDB9OworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYgKCBrZXlUeXBlID09IDAgKQorICAgIHsKKyAgICAgICAgLyogcmVtb3ZlIFdFUCBrZXkgKi8KKyAgICAgICAgem1fZGVidWdfbXNnMCgicmVtb3ZlIFdFUCBrZXkiKTsKKyAgICAgICAgemZDb3JlU2V0S2V5KGRldiwgWk1fVVNFUl9LRVlfREVGQVVMVCtrZXlJZCwgMCwKKyAgICAgICAgICAgICAgICAgWk1fTk9fV0VQLCBmYWtlTWFjQWRkciwgZmFrZUtleSk7CisgICAgICAgIHdkLT5zdGEuZW5jcnlNb2RlID0gWk1fTk9fV0VQOworICAgIH0KKyAgICBlbHNlIGlmICgga2V5VHlwZSA9PSAxICkKKyAgICB7CisgICAgICAgIC8qIHJlbW92ZSBwYWlyd2lzZSBrZXkgKi8KKyAgICAgICAgem1fZGVidWdfbXNnMCgicmVtb3ZlIHBhaXJ3aXNlIGtleSIpOworICAgICAgICB6ZkhwUmVtb3ZlS2V5KGRldiwgWk1fVVNFUl9LRVlfUEspOworICAgICAgICB3ZC0+c3RhLmVuY3J5TW9kZSA9IFpNX05PX1dFUDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogcmVtb3ZlIGdyb3VwIGtleSAqLworICAgICAgICB6bV9kZWJ1Z19tc2cwKCJyZW1vdmUgZ3JvdXAga2V5Iik7CisgICAgICAgIHpmSHBSZW1vdmVLZXkoZGV2LCBaTV9VU0VSX0tFWV9HSyk7CisgICAgfQorfQorCisKK3ZvaWQgemZpV2xhblF1ZXJ5UmVndWxhdGlvblRhYmxlKHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNSZWd1bGF0aW9uVGFibGUqIHBFbnRyeSkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6Zk1lbW9yeUNvcHkoKHU4X3QqKSBwRW50cnksICh1OF90KikgJndkLT5yZWd1bGF0aW9uVGFibGUsCisgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgenNSZWd1bGF0aW9uVGFibGUpKTsKK30KKworLyogcGFyYW1ldGVyICJ0aW1lIiBpcyBzcGVjaWZpZWQgaW4gbXMgKi8KK3ZvaWQgemZpV2xhblNldFNjYW5UaW1lclBlckNoYW5uZWwoemRldl90KiBkZXYsIHUxNl90IHRpbWUpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem1fZGVidWdfbXNnMSgic2NhbiB0aW1lIChtcykgPSAiLCB0aW1lKTsKKworICAgIHdkLT5zdGEuYWN0aXZlc2NhblRpY2tQZXJDaGFubmVsID0gdGltZSAvIFpNX01TX1BFUl9USUNLOworfQorCit2b2lkIHpmaVdsYW5TZXRBdXRvUmVjb25uZWN0KHpkZXZfdCogZGV2LCB1OF90IGVuYWJsZSkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB3ZC0+c3RhLmJBdXRvUmVjb25uZWN0ID0gZW5hYmxlOworICAgIC8vd2QtPnN0YS5iQXV0b1JlY29ubmVjdEVuYWJsZWQgPSBlbmFibGU7Cit9CisKK3ZvaWQgemZpV2xhblNldFN0YVdtZSh6ZGV2X3QqIGRldiwgdThfdCBlbmFibGUsIHU4X3QgdWFwc2RJbmZvKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHdkLT53cy5zdGFXbWVFbmFibGVkID0gZW5hYmxlICYgMHgzOworICAgIGlmICgoZW5hYmxlICYgMHgyKSAhPSAwKQorICAgIHsKKyAgICAgICAgd2QtPndzLnN0YVdtZVFvc0luZm8gPSB1YXBzZEluZm8gJiAweDZmOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB3ZC0+d3Muc3RhV21lUW9zSW5mbyA9IDA7CisgICAgfQorfQorCit2b2lkIHpmaVdsYW5TZXRBcFdtZSh6ZGV2X3QqIGRldiwgdThfdCBlbmFibGUpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgd2QtPndzLmFwV21lRW5hYmxlZCA9IGVuYWJsZTsKK30KKwordThfdCB6ZmlXbGFuUXVlcnl3bWVFbmFibGUoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgcmV0dXJuIHdkLT53cy5zdGFXbWVFbmFibGVkOworfQorCit2b2lkIHpmaVdsYW5TZXRQcm9iaW5nSGlkZGVuU3NpZCh6ZGV2X3QqIGRldiwgdThfdCogc3NpZCwgdThfdCBzc2lkTGVuLAorICAgIHUxNl90IGVudHJ5KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisKKyAgICBpZiAoKHNzaWRMZW4gPD0gMzIpICYmIChlbnRyeSA8IFpNX01BWF9QUk9CRV9ISURERU5fU1NJRF9TSVpFKSkKKyAgICB7CisgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHdkLT53cy5wcm9iaW5nU3NpZExpc3RbZW50cnldLnNzaWRMZW4gPSBzc2lkTGVuOworICAgICAgICB6Zk1lbW9yeUNvcHkod2QtPndzLnByb2JpbmdTc2lkTGlzdFtlbnRyeV0uc3NpZCwgc3NpZCwgc3NpZExlbik7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgfQorCisgICAgcmV0dXJuOworfQorCit2b2lkIHpmaVdsYW5TZXREaXNhYmxlUHJvYmluZ1dpdGhTc2lkKHpkZXZfdCogZGV2LCB1OF90IG1vZGUpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgd2QtPnN0YS5kaXNhYmxlUHJvYmluZ1dpdGhTc2lkID0gbW9kZTsKKworICAgIHJldHVybjsKK30KKwordm9pZCB6ZmlXbGFuU2V0RHJvcFVuZW5jcnlwdGVkUGFja2V0cyh6ZGV2X3QqIGRldiwgdThfdCBlbmFibGUpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgd2QtPndzLmRyb3BVbmVuY3J5cHRlZFBrdHMgPSBlbmFibGU7Cit9CisKK3ZvaWQgemZpV2xhblNldFN0YVJ4U2VjdXJpdHlDaGVja0NiKHpkZXZfdCogZGV2LCB6ZnBTdGFSeFNlY3VyaXR5Q2hlY2tDYiBwU3RhUnhTZWN1cml0eUNoZWNrQ2IpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgd2QtPnN0YS5wU3RhUnhTZWN1cml0eUNoZWNrQ2IgPSBwU3RhUnhTZWN1cml0eUNoZWNrQ2I7Cit9CisKK3ZvaWQgemZpV2xhblNldElCU1NKb2luT25seSh6ZGV2X3QqIGRldiwgdThfdCBqb2luT25seSkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB3ZC0+d3MuaWJzc0pvaW5Pbmx5ID0gam9pbk9ubHk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZmlDb25maWdXZHNQb3J0ICAgICAgICAgICAgKi8KKy8qICAgICAgQ29uZmlndXJlIFdEUyBwb3J0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHdkc1BvcnRJZCA6IFdEUyBwb3J0IElELCBzdGFydCBmcm9tIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBmbGFnIDogMD0+ZGlzYWJsZSBXRFMgcG9ydCwgMT0+ZW5hYmxlIFdEUyBwb3J0ICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgd2RzQWRkciA6IFdEUyBuZWlnaGJvciBNQUMgYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGVuY1R5cGUgOiBlbmNyeXB0aW9uIHR5cGUgZm9yIFdEUyBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICB3ZHNLZXkgOiBlbmNyeXB0aW9uIGtleSBmb3IgV0RTIHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBFcnJvciBjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNi42ICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZpQ29uZmlnV2RzUG9ydCh6ZGV2X3QqIGRldiwgdThfdCB3ZHNQb3J0SWQsIHUxNl90IGZsYWcsIHUxNl90KiB3ZHNBZGRyLAorICAgICAgICB1MTZfdCBlbmNUeXBlLCB1MzJfdCogd2RzS2V5KQoreworICAgIHUxNl90IGFkZHJbM107CisgICAgdTMyX3Qga2V5WzRdOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYgKHdkc1BvcnRJZCA+IFpNX01BWF9XRFNfU1VQUE9SVCkKKyAgICB7CisgICAgICAgIHJldHVybiBaTV9FUlJfV0RTX1BPUlRfSUQ7CisgICAgfQorCisgICAgaWYgKGZsYWcgPT0gMSkKKyAgICB7CisgICAgICAgIC8qIEVuYWJsZSBXRFMgcG9ydCAqLworICAgICAgICB3ZC0+YXAud2RzLm1hY0FkZHJbd2RzUG9ydElkXVswXSA9IHdkc0FkZHJbMF07CisgICAgICAgIHdkLT5hcC53ZHMubWFjQWRkclt3ZHNQb3J0SWRdWzFdID0gd2RzQWRkclsxXTsKKyAgICAgICAgd2QtPmFwLndkcy5tYWNBZGRyW3dkc1BvcnRJZF1bMl0gPSB3ZHNBZGRyWzJdOworCisgICAgICAgIHdkLT5hcC53ZHMud2RzQml0bWFwIHw9ICgxIDw8IHdkc1BvcnRJZCk7CisgICAgICAgIHdkLT5hcC53ZHMuZW5jcnlNb2RlW3dkc1BvcnRJZF0gPSAodThfdCkgZW5jVHlwZTsKKworICAgICAgICB6ZkNvcmVTZXRLZXkoZGV2LCAxMCtaTV9NQVhfV0RTX1NVUFBPUlQsIDAsICh1OF90KSBlbmNUeXBlLCB3ZHNBZGRyLCB3ZHNLZXkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBEaXNhYmxlIFdEUyBwb3J0ICovCisgICAgICAgIGFkZHJbMF0gPSBhZGRyWzFdID0gYWRkclsyXSA9IDA7CisgICAgICAgIGtleVswXSA9IGtleVsxXSA9IGtleVsyXSA9IGtleVszXSA9IDA7CisgICAgICAgIHdkLT5hcC53ZHMud2RzQml0bWFwICY9ICh+KDEgPDwgd2RzUG9ydElkKSk7CisgICAgICAgIHpmQ29yZVNldEtleShkZXYsIDEwK1pNX01BWF9XRFNfU1VQUE9SVCwgMCwgWk1fTk9fV0VQLCBhZGRyLCBrZXkpOworICAgIH0KKworICAgIHJldHVybiBaTV9TVUNDRVNTOworfQorI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisvKiBDRU5DICovCit2b2lkIHpmaVdsYW5RdWVyeUdTTih6ZGV2X3QqIGRldiwgdThfdCAqZ3NuLCB1MTZfdCB2YXBJZCkKK3sKKyAgICAvL3N0cnVjdCB6c1dsYW5EZXYqIHdkID0gKHN0cnVjdCB6c1dsYW5EZXYqKSB6bXdfd2xhbl9kZXYoZGV2KTsKKyAgICB1MzJfdCB0eGl2WzRdOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8qIGNvbnZlcnQgbGl0dGxlIGVuZGlhbiB0byBiaWcgZW5kaWFuIGZvciAzMiBiaXRzICovCisgICAgdHhpdlszXSA9IHdkLT5hcC50eGl2W3ZhcElkXVswXTsKKyAgICB0eGl2WzJdID0gd2QtPmFwLnR4aXZbdmFwSWRdWzFdOworICAgIHR4aXZbMV0gPSB3ZC0+YXAudHhpdlt2YXBJZF1bMl07CisgICAgdHhpdlswXSA9IHdkLT5hcC50eGl2W3ZhcElkXVszXTsKKworICAgIHpmTWVtb3J5Q29weShnc24sICh1OF90Kil0eGl2LCAxNik7Cit9CisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworLy9DV1lhbmcoKykKK3ZvaWQgemZpV2xhblF1ZXJ5U2lnbmFsSW5mbyh6ZGV2X3QqIGRldiwgdThfdCAqYnVmZmVyKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8qQ2hhbmdlIFNpZ25hbCBTdHJlbmd0aC9RdWFsaXR5IFZhbHVlIHRvIEh1bWFuIFNlbnNlIEhlcmUqLworCisgICAgYnVmZmVyWzBdID0gd2QtPlNpZ25hbFN0cmVuZ3RoOworICAgIGJ1ZmZlclsxXSA9IHdkLT5TaWduYWxRdWFsaXR5OworfQorCisvKiBPUy1YUCAqLwordTE2X3QgemZpU3RhQWRkSWVXcGFSc24oemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQsIHU4X3QgZnJhbWVUeXBlKQoreworICAgIHJldHVybiAgemZTdGFBZGRJZVdwYVJzbihkZXYsIGJ1Ziwgb2Zmc2V0LCBmcmFtZVR5cGUpOworfQorCisvKiB6ZmlEZWJ1Z0NtZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgY21kICAgICAgIHZhbHVlLWRlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAwICAgICAgIHNjaGVkdWxlIHRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAxICAgICAgIGNhbmNlbCB0aW1lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgIDIgICAgICAgY2xlYXIgdGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgIDMgICAgICAgdGVzdCB0aW1lciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICA1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgNiAgICAgICBjaGVja3N1bSB0ZXN0ICAgICAwLzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgNyAgICAgICBlbmFibGVQcm90ZWN0aW9uTW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgIDggICAgICAgcnggcGFja2V0IGNvbnRlbnQgZHVtcCAgICAwLzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwordTMyX3QgemZpRGVidWdDbWQoemRldl90KiBkZXYsIHUzMl90IGNtZCwgdTMyX3QgdmFsdWUpCit7CisgICAgdTE2X3QgZXZlbnQ7CisgICAgdTMyX3QgdGljazsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgaWYgKCBjbWQgPT0gMCApCisgICAgeyAgIC8qIHNjaGVkdWxlIHRpbWVyICovCisgICAgICAgIGV2ZW50ID0gKHUxNl90KSAoKHZhbHVlID4+IDE2KSAmIDB4ZmZmZik7CisgICAgICAgIHRpY2sgPSB2YWx1ZSAmIDB4ZmZmZjsKKyAgICAgICAgemZUaW1lclNjaGVkdWxlKGRldiwgZXZlbnQsIHRpY2spOworICAgIH0KKyAgICBlbHNlIGlmICggY21kID09IDEgKQorICAgIHsgICAvKiBjYW5jZWwgdGltZXIgKi8KKyAgICAgICAgZXZlbnQgPSAodTE2X3QpICh2YWx1ZSAmIDB4ZmZmZik7CisgICAgICAgIHpmVGltZXJDYW5jZWwoZGV2LCBldmVudCk7CisgICAgfQorICAgIGVsc2UgaWYgKCBjbWQgPT0gMiApCisgICAgeyAgIC8qIGNsZWFyIHRpbWVyICovCisgICAgICAgIHpmVGltZXJDbGVhcihkZXYpOworICAgIH0KKyAgICBlbHNlIGlmICggY21kID09IDMgKQorICAgIHsgICAvKiB0ZXN0IHRpbWVyICovCisgICAgICAgIHpmVGltZXJTY2hlZHVsZShkZXYsIDEsICA1MDApOworICAgICAgICB6ZlRpbWVyU2NoZWR1bGUoZGV2LCAyLCAxMDAwKTsKKyAgICAgICAgemZUaW1lclNjaGVkdWxlKGRldiwgMywgMTAwMCk7CisgICAgICAgIHpmVGltZXJTY2hlZHVsZShkZXYsIDQsIDEwMDApOworICAgICAgICB6ZlRpbWVyU2NoZWR1bGUoZGV2LCA1LCAxNTAwKTsKKyAgICAgICAgemZUaW1lclNjaGVkdWxlKGRldiwgNiwgMjAwMCk7CisgICAgICAgIHpmVGltZXJTY2hlZHVsZShkZXYsIDcsIDIyMDApOworICAgICAgICB6ZlRpbWVyU2NoZWR1bGUoZGV2LCA2LCAyNTAwKTsKKyAgICAgICAgemZUaW1lclNjaGVkdWxlKGRldiwgOCwgMjgwMCk7CisgICAgfQorICAgIGVsc2UgaWYgKCBjbWQgPT0gNCkKKyAgICB7CisgICAgICAgIHpmVGltZXJTY2hlZHVsZShkZXYsIDEsICA1MDApOworICAgICAgICB6ZlRpbWVyU2NoZWR1bGUoZGV2LCAyLCAxMDAwKTsKKyAgICAgICAgemZUaW1lclNjaGVkdWxlKGRldiwgMywgMTAwMCk7CisgICAgICAgIHpmVGltZXJTY2hlZHVsZShkZXYsIDQsIDEwMDApOworICAgICAgICB6ZlRpbWVyU2NoZWR1bGUoZGV2LCA1LCAxNTAwKTsKKyAgICAgICAgemZUaW1lclNjaGVkdWxlKGRldiwgNiwgMjAwMCk7CisgICAgICAgIHpmVGltZXJTY2hlZHVsZShkZXYsIDcsIDIyMDApOworICAgICAgICB6ZlRpbWVyU2NoZWR1bGUoZGV2LCA2LCAyNTAwKTsKKyAgICAgICAgemZUaW1lclNjaGVkdWxlKGRldiwgOCwgMjgwMCk7CisgICAgICAgIHpmVGltZXJDYW5jZWwoZGV2LCAxKTsKKyAgICAgICAgemZUaW1lckNhbmNlbChkZXYsIDMpOworICAgICAgICB6ZlRpbWVyQ2FuY2VsKGRldiwgNik7CisgICAgfQorICAgIGVsc2UgaWYgKCBjbWQgPT0gNSApCisgICAgeworICAgICAgICB3ZC0+c3RhLmtleUlkID0gKHU4X3QpIHZhbHVlOworICAgIH0KKwllbHNlIGlmICggY21kID09IDYgKQorCXsKKwkgICAgLyogMDogbm9ybWFsICAgIDE6IGFsd2F5cyBzZXQgVENQL1VEUCBjaGVja3N1bSB6ZXJvICovCisgICAgICAgIHdkLT5jaGVja3N1bVRlc3QgPSB2YWx1ZTsKKwl9CisJZWxzZSBpZiAoIGNtZCA9PSA3ICkKKwl7CisgICAgICAgIHdkLT5lbmFibGVQcm90ZWN0aW9uTW9kZSA9IHZhbHVlOworICAgCSAgICB6bV9tc2cxX21tKFpNX0xWXzEsICJ3ZC0+ZW5hYmxlUHJvdGVjdGlvbk1vZGU9Iiwgd2QtPmVuYWJsZVByb3RlY3Rpb25Nb2RlKTsKKwl9CisJZWxzZSBpZiAoIGNtZCA9PSA4ICkKKwl7CisgICAgICAgIC8qIHJ4IHBhY2tldCBjb250ZW50IGR1bXAgKi8KKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+cnhQYWNrZXREdW1wID0gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHdkLT5yeFBhY2tldER1bXAgPSAwOworICAgICAgICB9CisJfQorCisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQwordThfdCB6ZmlXbGFuU2V0Q2VuY1BhaXJ3aXNlS2V5KHpkZXZfdCogZGV2LCB1OF90IGtleWlkLCB1MzJfdCAqdHhpdiwgdTMyX3QgKnJ4aXYsCisgICAgICAgIHU4X3QgKmtleSwgdThfdCAqbWljKQoreworICAgIHN0cnVjdCB6c0tleUluZm8ga2V5SW5mbzsKKyAgICB1OF90IGNlbmNLZXlbMzJdOworICAgIHU4X3QgaTsKKyAgICB1MTZfdCBtYWNBZGRyWzNdOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisgICAgICAgIGNlbmNLZXlbaV0gPSBrZXlbaV07CisgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisgICAgICAgIGNlbmNLZXlbaSArIDE2XSA9IG1pY1tpXTsKKyAgICBrZXlJbmZvLmtleSA9IGNlbmNLZXk7CisgICAga2V5SW5mby5rZXlMZW5ndGggPSAzMjsKKyAgICBrZXlJbmZvLmtleUluZGV4ID0ga2V5aWQ7CisgICAga2V5SW5mby5mbGFnID0gWk1fS0VZX0ZMQUdfQ0VOQyB8IFpNX0tFWV9GTEFHX1BLOworICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisgICAgICAgIG1hY0FkZHJbaV0gPSB3ZC0+c3RhLmJzc2lkW2ldOworICAgIGtleUluZm8ubWFjQWRkciA9IG1hY0FkZHI7CisKKyAgICB6ZmlXbGFuU2V0S2V5KGRldiwga2V5SW5mbyk7CisKKyAgICAvKiBSZXNldCB0eGl2IGFuZCByeGl2ICovCisgICAgLy93ZC0+c3RhLnR4aXZbMF0gPSB0eGl2WzBdOworICAgIC8vd2QtPnN0YS50eGl2WzFdID0gdHhpdlsxXTsKKyAgICAvL3dkLT5zdGEudHhpdlsyXSA9IHR4aXZbMl07CisgICAgLy93ZC0+c3RhLnR4aXZbM10gPSB0eGl2WzNdOworICAgIC8vCisgICAgLy93ZC0+c3RhLnJ4aXZbMF0gPSByeGl2WzBdOworICAgIC8vd2QtPnN0YS5yeGl2WzFdID0gcnhpdlsxXTsKKyAgICAvL3dkLT5zdGEucnhpdlsyXSA9IHJ4aXZbMl07CisgICAgLy93ZC0+c3RhLnJ4aXZbM10gPSByeGl2WzNdOworCisgICAgcmV0dXJuIDA7Cit9CisKK3U4X3QgemZpV2xhblNldENlbmNHcm91cEtleSh6ZGV2X3QqIGRldiwgdThfdCBrZXlpZCwgdTMyX3QgKnJ4aXYsCisgICAgICAgIHU4X3QgKmtleSwgdThfdCAqbWljKQoreworICAgIHN0cnVjdCB6c0tleUluZm8ga2V5SW5mbzsKKyAgICB1OF90IGNlbmNLZXlbMzJdOworICAgIHU4X3QgaTsKKyAgICB1MTZfdCBtYWNBZGRyWzZdID0gezB4ZmZmZiwgMHhmZmZmLCAweGZmZmZ9OworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisgICAgICAgIGNlbmNLZXlbaV0gPSBrZXlbaV07CisgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisgICAgICAgIGNlbmNLZXlbaSArIDE2XSA9IG1pY1tpXTsKKyAgICBrZXlJbmZvLmtleSA9IGNlbmNLZXk7CisgICAga2V5SW5mby5rZXlMZW5ndGggPSAzMjsKKyAgICBrZXlJbmZvLmtleUluZGV4ID0ga2V5aWQ7CisgICAga2V5SW5mby5mbGFnID0gWk1fS0VZX0ZMQUdfQ0VOQyB8IFpNX0tFWV9GTEFHX0dLOworICAgIGtleUluZm8udmFwSWQgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisgICAgICAgIGtleUluZm8udmFwQWRkcltpXSA9IHdkLT5tYWNBZGRyW2ldOworICAgIGtleUluZm8ubWFjQWRkciA9IG1hY0FkZHI7CisKKyAgICB6ZmlXbGFuU2V0S2V5KGRldiwga2V5SW5mbyk7CisKKyAgICAvKiBSZXNldCB0eGl2IGFuZCByeGl2ICovCisgICAgd2QtPnN0YS5yeGl2R0tbMF0gPSAoKHJ4aXZbM10gPj4gMjQpICYgMHhGRikKKyAgICAgICAgICAgICAgICAgICAgICArICgoKHJ4aXZbM10gPj4gMTYpICYgMHhGRikgPDwgOCkKKyAgICAgICAgICAgICAgICAgICAgICArICgoKHJ4aXZbM10gPj4gOCkgJiAweEZGKSA8PCAxNikKKyAgICAgICAgICAgICAgICAgICAgICArICgocnhpdlszXSAmIDB4RkYpIDw8IDI0KTsKKyAgICB3ZC0+c3RhLnJ4aXZHS1sxXSA9ICgocnhpdlsyXSA+PiAyNCkgJiAweEZGKQorICAgICAgICAgICAgICAgICAgICAgICsgKCgocnhpdlsyXSA+PiAxNikgJiAweEZGKSA8PCA4KQorICAgICAgICAgICAgICAgICAgICAgICsgKCgocnhpdlsyXSA+PiA4KSAmIDB4RkYpIDw8IDE2KQorICAgICAgICAgICAgICAgICAgICAgICsgKChyeGl2WzJdICYgMHhGRikgPDwgMjQpOworICAgIHdkLT5zdGEucnhpdkdLWzJdID0gKChyeGl2WzFdID4+IDI0KSAmIDB4RkYpCisgICAgICAgICAgICAgICAgICAgICAgKyAoKChyeGl2WzFdID4+IDE2KSAmIDB4RkYpIDw8IDgpCisgICAgICAgICAgICAgICAgICAgICAgKyAoKChyeGl2WzFdID4+IDgpICYgMHhGRikgPDwgMTYpCisgICAgICAgICAgICAgICAgICAgICAgKyAoKHJ4aXZbMV0gJiAweEZGKSA8PCAyNCk7CisgICAgd2QtPnN0YS5yeGl2R0tbM10gPSAoKHJ4aXZbMF0gPj4gMjQpICYgMHhGRikKKyAgICAgICAgICAgICAgICAgICAgICArICgoKHJ4aXZbMF0gPj4gMTYpICYgMHhGRikgPDwgOCkKKyAgICAgICAgICAgICAgICAgICAgICArICgoKHJ4aXZbMF0gPj4gOCkgJiAweEZGKSA8PCAxNikKKyAgICAgICAgICAgICAgICAgICAgICArICgocnhpdlswXSAmIDB4RkYpIDw8IDI0KTsKKworICAgIHdkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfQ0VOQzsKKyAgICB3ZC0+c3RhLmN1cnJlbnRBdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9DRU5DOworCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworCit1OF90IHpmaVdsYW5TZXREb3QxMURNb2RlKHpkZXZfdCogZGV2LCB1OF90IG1vZGUpCit7CisgICAgdThfdCBpOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgd2QtPnN0YS5iODAyXzExRCA9IG1vZGU7CisgICAgaWYgKG1vZGUpIC8vRW5hYmxlIDgwMi4xMWQKKyAgICB7CisgICAgICAgIHdkLT5yZWd1bGF0aW9uVGFibGUucmVnaW9uQ29kZSA9IE5PX0VOVU1SRDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250OyBpKyspCisgICAgICAgICAgICB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5jaGFubmVsRmxhZ3MgfD0gWk1fUkVHX0ZMQUdfQ0hBTk5FTF9QQVNTSVZFOworICAgIH0KKyAgICBlbHNlIC8vRGlzYWJsZQorICAgIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250OyBpKyspCisgICAgICAgICAgICB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5jaGFubmVsRmxhZ3MgJj0gflpNX1JFR19GTEFHX0NIQU5ORUxfUEFTU0lWRTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordThfdCB6ZmlXbGFuU2V0RG90MTFIREZTTW9kZSh6ZGV2X3QqIGRldiwgdThfdCBtb2RlKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8vem1fZGVidWdfbXNnMCgiQ1dZIC0gRW5hYmxlIDgwMi4xMWggREZTIik7CisKKyAgICAvLyBUT0RPIDogREZTIEVuYWJsZSBpbiA1MjUwIHRvIDUzNTAgTUh6IGFuZCA1NDcwIHRvIDU3MjUgTUh6IC4KKyAgICAvL2lmICggQWRhcHRlci0+WkQ4MDIxMUhTdXBwb3J0ICYmCisgICAgLy8gICBBZGFwdGVyLT5DYXJkU2V0dGluZy5OZXR3b3JrVHlwZUluVXNlID09IE5kaXM4MDJfMTFPRkRNNSAmJgorICAgIC8vICAgKChDaGFubmVsTm8gPj01MiAmJiBDaGFubmVsTm8gPD0gNjQpCXx8CQkJCS8vNTI1MH41MzUwIE1IWgorICAgIC8vICAgIChDaGFubmVsTm8gPj0xMDAgJiYgQ2hhbm5lbE5vIDw9IDE0MCkpKSAJCQkvLzU0NzB+NTcyNSBNSFoKKyAgICAvL3sKKyAgICAvLyAgIEFkYXB0ZXItPlpEODAyMTFIU2V0dGluZy5ERlNFbmFibGU9VFJVRTsKKyAgICAvL30KKyAgICAvL2Vsc2UKKyAgICAvL3sKKyAgICAvLyAgIEFkYXB0ZXItPlpEODAyMTFIU2V0dGluZy5ERlNFbmFibGU9RkFMU0U7CisgICAgLy99CisKKyAgICB3ZC0+c3RhLkRGU0VuYWJsZSA9IG1vZGU7CisgICAgaWYgKG1vZGUpCisgICAgICAgIHdkLT5zdGEuY2FwYWJpbGl0eVsxXSB8PSBaTV9CSVRfMDsKKyAgICBlbHNlCisgICAgICAgIHdkLT5zdGEuY2FwYWJpbGl0eVsxXSAmPSAoflpNX0JJVF8wKTsKKworICAgIHJldHVybiAwOworfQorCit1OF90IHpmaVdsYW5TZXREb3QxMUhUUENNb2RlKHpkZXZfdCogZGV2LCB1OF90IG1vZGUpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLy8gVE9ETyA6IFRQQyBFbmFibGUgaW4gNTE1MH41MzUwIE1IeiBhbmQgNTQ3MH41NzI1TUh6LgorICAgIC8vaWYgKCBBZGFwdGVyLT5aRDgwMjExSFN1cHBvcnQgJiYKKyAgICAvLyAgIEFkYXB0ZXItPkNhcmRTZXR0aW5nLk5ldHdvcmtUeXBlSW5Vc2UgPT0gTmRpczgwMl8xMU9GRE01ICYmCisgICAgLy8gICAoKENoYW5uZWxObyA9PSAzNiB8fCBDaGFubmVsTm8gPT0gNDAgfHwgQ2hhbm5lbE5vID09IDQ0IHx8IENoYW5uZWxObyA9PSA0OCkgfHwJLy81MTUwfjUyNTAgTUhaICwgTm90IEphcGFuCisgICAgLy8gICAgKENoYW5uZWxObyA+PTUyICYmIENoYW5uZWxObyA8PSA2NCkgfHwJCQkJLy81MjUwfjUzNTAgTUhaCisgICAgLy8gICAgKENoYW5uZWxObyA+PTEwMCAmJiBDaGFubmVsTm8gPD0gMTQwKSkpIAkJCS8vNTQ3MH41NzI1IE1IWgorICAgIC8veworICAgIC8vICAgQWRhcHRlci0+WkQ4MDIxMUhTZXR0aW5nLlRQQ0VuYWJsZT1UUlVFOworICAgIC8vfQorICAgIC8vZWxzZQorICAgIC8veworICAgIC8vICAgQWRhcHRlci0+WkQ4MDIxMUhTZXR0aW5nLlRQQ0VuYWJsZT1GQUxTRTsKKyAgICAvL30KKworICAgIHdkLT5zdGEuVFBDRW5hYmxlID0gbW9kZTsKKyAgICBpZiAobW9kZSkKKyAgICAgICAgd2QtPnN0YS5jYXBhYmlsaXR5WzFdIHw9IFpNX0JJVF8wOworICAgIGVsc2UKKyAgICAgICAgd2QtPnN0YS5jYXBhYmlsaXR5WzFdICY9ICh+Wk1fQklUXzApOworCisgICAgcmV0dXJuIDA7Cit9CisKK3U4X3QgemZpV2xhblNldEFuaU1vZGUoemRldl90KiBkZXYsIHU4X3QgbW9kZSkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB3ZC0+YW5pRW5hYmxlID0gbW9kZTsKKyAgICBpZiAobW9kZSkKKyAgICAgICAgemZIcEFuaUF0dGFjaChkZXYpOworCisgICAgcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBaTV9PU19MSU5VWF9GVU5DCit2b2lkIHpmaVdsYW5TaG93VGFsbHkoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem1fbXNnMV9tbShaTV9MVl8wLCAiSHdfVW5kZXJydW5DbnQgICAgPSAiLCB3ZC0+Y29tbVRhbGx5Lkh3X1VuZGVycnVuQ250KTsKKyAgICB6bV9tc2cxX21tKFpNX0xWXzAsICJId19Ub3RhbFJ4RnJtICAgICA9ICIsIHdkLT5jb21tVGFsbHkuSHdfVG90YWxSeEZybSk7CisgICAgem1fbXNnMV9tbShaTV9MVl8wLCAiSHdfQ1JDMzJDbnQgICAgICAgPSAiLCB3ZC0+Y29tbVRhbGx5Lkh3X0NSQzMyQ250KTsKKyAgICB6bV9tc2cxX21tKFpNX0xWXzAsICJId19DUkMxNkNudCAgICAgICA9ICIsIHdkLT5jb21tVGFsbHkuSHdfQ1JDMTZDbnQpOworICAgIHptX21zZzFfbW0oWk1fTFZfMSwgIkh3X0RlY3J5cEVycl9VTkkgID0gIiwgd2QtPmNvbW1UYWxseS5Id19EZWNyeXBFcnJfVU5JKTsKKyAgICB6bV9tc2cxX21tKFpNX0xWXzAsICJId19SeEZJRk9PdmVycnVuICA9ICIsIHdkLT5jb21tVGFsbHkuSHdfUnhGSUZPT3ZlcnJ1bik7CisgICAgem1fbXNnMV9tbShaTV9MVl8xLCAiSHdfRGVjcnlwRXJyX011bCAgPSAiLCB3ZC0+Y29tbVRhbGx5Lkh3X0RlY3J5cEVycl9NdWwpOworICAgIHptX21zZzFfbW0oWk1fTFZfMSwgIkh3X1JldHJ5Q250ICAgICAgID0gIiwgd2QtPmNvbW1UYWxseS5Id19SZXRyeUNudCk7CisgICAgem1fbXNnMV9tbShaTV9MVl8wLCAiSHdfVG90YWxUeEZybSAgICAgPSAiLCB3ZC0+Y29tbVRhbGx5Lkh3X1RvdGFsVHhGcm0pOworICAgIHptX21zZzFfbW0oWk1fTFZfMCwgIkh3X1J4VGltZU91dCAgICAgID0gIiwgd2QtPmNvbW1UYWxseS5Id19SeFRpbWVPdXQpOworICAgIHptX21zZzFfbW0oWk1fTFZfMCwgIlR4X01QRFUgICAgICAgICAgID0gIiwgd2QtPmNvbW1UYWxseS5UeF9NUERVKTsKKyAgICB6bV9tc2cxX21tKFpNX0xWXzAsICJCQV9GYWlsICAgICAgICAgICA9ICIsIHdkLT5jb21tVGFsbHkuQkFfRmFpbCk7CisgICAgem1fbXNnMV9tbShaTV9MVl8wLCAiSHdfVHhfQU1QRFUgICAgICAgPSAiLCB3ZC0+Y29tbVRhbGx5Lkh3X1R4X0FNUERVKTsKKyAgICB6bV9tc2cxX21tKFpNX0xWXzAsICJId19UeF9NUERVICAgICAgICA9ICIsIHdkLT5jb21tVGFsbHkuSHdfVHhfTVBEVSk7CisKKyAgICB6bV9tc2cxX21tKFpNX0xWXzEsICJId19SeE1QRFUgICAgICAgICAgPSAiLCB3ZC0+Y29tbVRhbGx5Lkh3X1J4TVBEVSk7CisgICAgem1fbXNnMV9tbShaTV9MVl8xLCAiSHdfUnhEcm9wTVBEVSAgICAgID0gIiwgd2QtPmNvbW1UYWxseS5Id19SeERyb3BNUERVKTsKKyAgICB6bV9tc2cxX21tKFpNX0xWXzEsICJId19SeERlbE1QRFUgICAgICAgPSAiLCB3ZC0+Y29tbVRhbGx5Lkh3X1J4RGVsTVBEVSk7CisgICAgem1fbXNnMV9tbShaTV9MVl8xLCAiSHdfUnhQaHlNaXNjRXJyb3IgID0gIiwgd2QtPmNvbW1UYWxseS5Id19SeFBoeU1pc2NFcnJvcik7CisgICAgem1fbXNnMV9tbShaTV9MVl8xLCAiSHdfUnhQaHlYUkVycm9yICAgID0gIiwgd2QtPmNvbW1UYWxseS5Id19SeFBoeVhSRXJyb3IpOworICAgIHptX21zZzFfbW0oWk1fTFZfMSwgIkh3X1J4UGh5T0ZETUVycm9yICA9ICIsIHdkLT5jb21tVGFsbHkuSHdfUnhQaHlPRkRNRXJyb3IpOworICAgIHptX21zZzFfbW0oWk1fTFZfMSwgIkh3X1J4UGh5Q0NLRXJyb3IgICA9ICIsIHdkLT5jb21tVGFsbHkuSHdfUnhQaHlDQ0tFcnJvcik7CisgICAgem1fbXNnMV9tbShaTV9MVl8xLCAiSHdfUnhQaHlIVEVycm9yICAgID0gIiwgd2QtPmNvbW1UYWxseS5Id19SeFBoeUhURXJyb3IpOworICAgIHptX21zZzFfbW0oWk1fTFZfMSwgIkh3X1J4UGh5VG90YWxDb3VudCA9ICIsIHdkLT5jb21tVGFsbHkuSHdfUnhQaHlUb3RhbENvdW50KTsKKworICAgIGlmICghKCh3ZC0+Y29tbVRhbGx5LlR4X01QRFUgPT0gMCkgJiYgKHdkLT5jb21tVGFsbHkuQkFfRmFpbCA9PSAwKSkpCisgICAgeworICAgICAgICB6bV9kZWJ1Z19tc2dfcCgiQkEgRmFpbCBSYXRpbyglKSAgPSAiLCB3ZC0+Y29tbVRhbGx5LkJBX0ZhaWwgKiAxMDAsCisgICAgICAgICAgICAgICAgKHdkLT5jb21tVGFsbHkuQkFfRmFpbCArIHdkLT5jb21tVGFsbHkuVHhfTVBEVSkpOworICAgIH0KKworICAgIGlmICghKCh3ZC0+Y29tbVRhbGx5Lkh3X1R4X01QRFUgPT0gMCkgJiYgKHdkLT5jb21tVGFsbHkuSHdfVHhfQU1QRFUgPT0gMCkpKQorICAgIHsKKyAgICAgICAgem1fZGVidWdfbXNnX3AoIkF2ZyBBZ2cgTnVtYmVyICAgID0gIiwKKyAgICAgICAgICAgICAgICB3ZC0+Y29tbVRhbGx5Lkh3X1R4X01QRFUsIHdkLT5jb21tVGFsbHkuSHdfVHhfQU1QRFUpOworICAgIH0KK30KKyNlbmRpZgorCit2b2lkIHpmaVdsYW5TZXRNYXhUeFBvd2VyKHpkZXZfdCogZGV2LCB1OF90IHBvd2VyMiwgdThfdCBwb3dlcjUpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgd2QtPm1heFR4UG93ZXIyID0gcG93ZXIyOworICAgIHdkLT5tYXhUeFBvd2VyNSA9IHBvd2VyNTsKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworfQorCit2b2lkIHpmaVdsYW5RdWVyeU1heFR4UG93ZXIoemRldl90KiBkZXYsIHU4X3QgKnBvd2VyMiwgdThfdCAqcG93ZXI1KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgICpwb3dlcjIgPSB3ZC0+bWF4VHhQb3dlcjI7CisgICAgKnBvd2VyNSA9IHdkLT5tYXhUeFBvd2VyNTsKK30KKwordm9pZCB6ZmlXbGFuU2V0Q29ubmVjdE1vZGUoemRldl90KiBkZXYsIHU4X3QgbW9kZSkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICB3ZC0+Y29ubmVjdE1vZGUgPSBtb2RlOworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7Cit9CisKK3ZvaWQgemZpV2xhblNldFN1cHBvcnRNb2RlKHpkZXZfdCogZGV2LCB1MzJfdCBtb2RlKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIHdkLT5zdXBwb3J0TW9kZSA9IG1vZGU7CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKK30KKwordm9pZCB6ZmlXbGFuU2V0QWRob2NNb2RlKHpkZXZfdCogZGV2LCB1MzJfdCBtb2RlKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHdkLT53cy5hZGhvY01vZGUgPSBtb2RlOworfQorCit1MzJfdCB6ZmlXbGFuUXVlcnlBZGhvY01vZGUoemRldl90KiBkZXYsIHU4X3QgYldyYXBwZXIpCit7CisgICAgdTMyX3QgYWRob2NNb2RlOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYgKCBiV3JhcHBlciApCisgICAgeworICAgICAgICBhZGhvY01vZGUgPSB3ZC0+d3MuYWRob2NNb2RlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBhZGhvY01vZGUgPSB3ZC0+d2ZjLmJJYnNzR01vZGU7CisgICAgfQorCisgICAgcmV0dXJuIGFkaG9jTW9kZTsKK30KKworCit1OF90IHpmaVdsYW5TZXRDb3VudHJ5SXNvTmFtZSh6ZGV2X3QqIGRldiwgdThfdCAqY291bnRyeUlzb05hbWUsIHU4X3QgbGVuZ3RoKQoreworICAgIHU4X3QgYnVmWzVdOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGlmIChsZW5ndGggPT0gNCkKKyAgICB7CisgICAgICAgIGJ1ZlsyXSA9IHdkLT53cy5jb3VudHJ5SXNvTmFtZVswXSA9IGNvdW50cnlJc29OYW1lWzJdOworICAgICAgICBidWZbM10gPSB3ZC0+d3MuY291bnRyeUlzb05hbWVbMV0gPSBjb3VudHJ5SXNvTmFtZVsxXTsKKyAgICAgICAgYnVmWzRdID0gd2QtPndzLmNvdW50cnlJc29OYW1lWzJdID0gY291bnRyeUlzb05hbWVbMF07CisgICAgfQorICAgIGVsc2UgaWYgKGxlbmd0aCA9PSAzKQorICAgIHsKKyAgICAgICAgYnVmWzJdID0gd2QtPndzLmNvdW50cnlJc29OYW1lWzBdID0gY291bnRyeUlzb05hbWVbMV07CisgICAgICAgIGJ1ZlszXSA9IHdkLT53cy5jb3VudHJ5SXNvTmFtZVsxXSA9IGNvdW50cnlJc29OYW1lWzBdOworICAgICAgICBidWZbNF0gPSB3ZC0+d3MuY291bnRyeUlzb05hbWVbMl0gPSAnXDAnOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICByZXR1cm4gemZIcEdldFJlZ3VsYXRpb25UYWJsZWZyb21JU08oZGV2LCBidWYsIGxlbmd0aCk7Cit9CisKKworY29uc3QgY2hhciogemZpV2xhblF1ZXJ5Q291bnRyeUlzb05hbWUoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgcmV0dXJuIHdkLT53cy5jb3VudHJ5SXNvTmFtZTsKK30KKworCisKK3ZvaWQgemZpV2xhblNldFJlZ3VsYXRvcnkoemRldl90KiBkZXYsIHU4X3QgQ0NTLCB1MTZfdCBDb2RlLCB1OF90IGJmaXJzdENoYW5uZWwpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIGlmIChDQ1MpCisgICAgeworICAgICAgICAvKiBSZXNldCBSZWd1bGF0aW9uIFRhYmxlIGJ5IENvdW50cnkgQ29kZSAqLworICAgICAgICB6ZkhwR2V0UmVndWxhdGlvblRhYmxlZnJvbUNvdW50cnkoZGV2LCBDb2RlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogUmVzZXQgUmVndWxhdGlvbiBUYWJsZSBieSBSZWdpb24gQ29kZSAqLworICAgICAgICB6ZkhwR2V0UmVndWxhdGlvblRhYmxlZnJvbVJlZ2lvbkNvZGUoZGV2LCBDb2RlKTsKKyAgICB9CisKKyAgICBpZiAoYmZpcnN0Q2hhbm5lbCkgeworICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICB3ZC0+ZnJlcXVlbmN5ID0gemZDaEdldEZpcnN0Q2hhbm5lbChkZXYsIE5VTEwpOworICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICB6ZkNvcmVTZXRGcmVxdWVuY3koZGV2LCB3ZC0+ZnJlcXVlbmN5KTsKKyAgICB9Cit9CisKKworY29uc3QgY2hhciogemZpSHBHZXRpc29OYW1lZnJvbXJlZ2lvbkNvZGUoemRldl90KiBkZXYsIHUxNl90IHJlZ2lvbkNvZGUpCit7CisgICAgcmV0dXJuIHpmSHBHZXRpc29OYW1lZnJvbXJlZ2lvbkNvZGUoZGV2LCByZWdpb25Db2RlKTsKK30KKwordTE2X3QgemZpV2xhbkNoYW5uZWxUb0ZyZXF1ZW5jeSh6ZGV2X3QqIGRldiwgdThfdCBjaGFubmVsKQoreworICAgIHJldHVybiB6ZkNoTnVtVG9GcmVxKGRldiwgY2hhbm5lbCwgMCk7Cit9CisKK3U4X3QgemZpV2xhbkZyZXF1ZW5jeVRvQ2hhbm5lbCh6ZGV2X3QqIGRldiwgdTE2X3QgZnJlcSkKK3sKKyAgICB1OF90IGlzNUdCYW5kID0gMDsKKworICAgIHJldHVybiB6ZkNoRnJlcVRvTnVtKGZyZXEsICZpczVHQmFuZCk7Cit9CisKK3ZvaWQgemZpV2xhbkRpc2FibGVEZnNDaGFubmVsKHpkZXZfdCogZGV2LCB1OF90IGRpc2FibGVGbGFnKQoreworICAgIHpmSHBEaXNhYmxlRGZzQ2hhbm5lbChkZXYsIGRpc2FibGVGbGFnKTsKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgemZpV2xhblNldExFREN0cmxQYXJhbSh6ZGV2X3QqIGRldiwgdThfdCB0eXBlLCB1OF90IGZsYWcpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgd2QtPmxlZFN0cnVjdC5MRURDdHJsVHlwZSA9IHR5cGU7CisgICAgd2QtPmxlZFN0cnVjdC5MRURDdHJsRmxhZ0Zyb21SZWcgID0gZmxhZzsKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworfQorCit2b2lkIHpmaVdsYW5FbmFibGVMZWFwQ29uZmlnKHpkZXZfdCogZGV2LCB1OF90IGxlYXBFbmFibGVkKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHdkLT5zdGEubGVhcEVuYWJsZWQgPSBsZWFwRW5hYmxlZDsKK30KKwordTMyX3QgemZpV2xhblF1ZXJ5SHdDYXBhYmlsaXR5KHpkZXZfdCogZGV2KQoreworICAgIHJldHVybiB6ZkhwQ2FwYWJpbGl0eShkZXYpOworfQorCit1MzJfdCB6ZmlXbGFuUXVlcnlSZWNlaXZlZFBhY2tldCh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICByZXR1cm4gd2QtPnN0YS5SZWNlaXZlZFBrdFJhdGVQZXJTZWNvbmQ7Cit9CisKK3ZvaWQgemZpV2xhbkNoZWNrU1dFbmNyeXB0aW9uKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGlmICh3ZC0+c3RhLlNXRW5jcnlwdEVuYWJsZSAhPSAwKQorICAgIHsKKyAgICAgICAgemZIcFNXRGVjcnlwdChkZXYsIDEpOworICAgIH0KK30KKwordTE2X3QgemZpV2xhblF1ZXJ5QWxsb3dDaGFubmVscyh6ZGV2X3QqIGRldiwgdTE2X3QgKmNoYW5uZWxzKQoreworICAgIHUxNl90IGlpOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGZvciAoaWkgPSAwOyBpaSA8IHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250OyBpaSsrKQorICAgIHsKKyAgICAgICAgY2hhbm5lbHNbaWldID0gd2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaWldLmNoYW5uZWw7CisgICAgfQorCisgICAgcmV0dXJuIHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250OworfQorCit2b2lkIHpmaVdsYW5TZXREeW5hbWljU0lGU1BhcmFtKHpkZXZfdCogZGV2LCB1OF90IHZhbCkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB3ZC0+ZHluYW1pY1NJRlNFbmFibGUgPSB2YWw7CisKKyAgICB6bV9kZWJ1Z19tc2cxKCJ3ZC0+ZHluYW1pY1NJRlNFbmFibGUgPSAiLCB3ZC0+ZHluYW1pY1NJRlNFbmFibGUpCit9CisKK3UxNl90IHpmaVdsYW5HZXRNdWx0aWNhc3RBZGRyZXNzQ291bnQoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgcmV0dXJuIHdkLT5zdGEubXVsdGljYXN0TGlzdC5zaXplOworfQorCit2b2lkIHpmaVdsYW5HZXRNdWx0aWNhc3RMaXN0KHpkZXZfdCogZGV2LCB1OF90KiBwTUNMaXN0KQoreworICAgIHN0cnVjdCB6c011bHRpY2FzdEFkZHIqIHBNYWNMaXN0ID0gKHN0cnVjdCB6c011bHRpY2FzdEFkZHIqKSBwTUNMaXN0OworICAgIHU4X3QgaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGZvciAoIGk9MDsgaTx3ZC0+c3RhLm11bHRpY2FzdExpc3Quc2l6ZTsgaSsrICkKKyAgICB7CisgICAgICAgIHpmTWVtb3J5Q29weShwTWFjTGlzdFtpXS5hZGRyLCB3ZC0+c3RhLm11bHRpY2FzdExpc3QubWFjQWRkcltpXS5hZGRyLCA2KTsKKyAgICB9Cit9CisKK3ZvaWQgemZpV2xhblNldFBhY2tldEZpbHRlcih6ZGV2X3QqIGRldiwgdTMyX3QgUGFja2V0RmlsdGVyKQoreworICAgIHU4X3QgIGJBbGxNdWx0aWNhc3QgPSAwOworICAgIHUzMl90IG9sZEZpbHRlcjsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIG9sZEZpbHRlciA9IHdkLT5zdGEub3NSeEZpbHRlcjsKKworICAgIHdkLT5zdGEub3NSeEZpbHRlciA9IFBhY2tldEZpbHRlcjsKKworICAgIGlmICgob2xkRmlsdGVyICYgWk1fUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVCkgIT0KKyAgICAgICAgKHdkLT5zdGEub3NSeEZpbHRlciAmIFpNX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QpKQorICAgIHsKKyAgICAgICAgaWYgKCB3ZC0+c3RhLm9zUnhGaWx0ZXIgJiBaTV9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUICkKKyAgICAgICAgICAgIGJBbGxNdWx0aWNhc3QgPSAxOworICAgICAgICB6ZkhwU2V0TXVsdGljYXN0TGlzdChkZXYsIHdkLT5zdGEubXVsdGljYXN0TGlzdC5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodThfdCopd2QtPnN0YS5tdWx0aWNhc3RMaXN0Lm1hY0FkZHIsIGJBbGxNdWx0aWNhc3QpOworICAgIH0KK30KKwordThfdCB6ZmlDb21wYXJlV2l0aE11bHRpY2FzdExpc3RBZGRyZXNzKHpkZXZfdCogZGV2LCB1MTZfdCogZHN0TWFjQWRkcikKK3sKKyAgICB1OF90IGk7CisgICAgdThfdCBiSXNJbk1DTGlzdEFkZHIgPSAwOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgZm9yICggaT0wOyBpPHdkLT5zdGEubXVsdGljYXN0TGlzdC5zaXplOyBpKysgKQorICAgIHsKKyAgICAJaWYgKCB6ZndNZW1vcnlJc0VxdWFsKCh1OF90Kilkc3RNYWNBZGRyLCAodThfdCopd2QtPnN0YS5tdWx0aWNhc3RMaXN0Lm1hY0FkZHJbaV0uYWRkciwgNikgKQorICAgIAl7CisgICAgICAgICAgICBiSXNJbk1DTGlzdEFkZHIgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgCX0KKyAgICB9CisKKyAgICByZXR1cm4gYklzSW5NQ0xpc3RBZGRyOworfQorCit2b2lkIHpmaVdsYW5TZXRTYWZlTW9kZUVuYWJsZWQoemRldl90KiBkZXYsIHU4X3Qgc2FmZU1vZGUpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgd2QtPnN0YS5iU2FmZU1vZGUgPSBzYWZlTW9kZTsKKworICAgIGlmICggc2FmZU1vZGUgKQorICAgIAl6ZlN0YUVuYWJsZVNXRW5jcnlwdGlvbihkZXYsIDEpOworICAgIGVsc2UKKyAgICAgICAgemZTdGFEaXNhYmxlU1dFbmNyeXB0aW9uKGRldik7Cit9CisKK3ZvaWQgemZpV2xhblNldElCU1NBZGRpdGlvbmFsSUVMZW5ndGgoemRldl90KiBkZXYsIHUzMl90IGlic3NBZGRpdGlvbmFsSUVTaXplLCB1OF90KiBpYnNzQWRkaXRpb25hbElFKQoreworCXptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworCWlmICggaWJzc0FkZGl0aW9uYWxJRVNpemUgKQorICAgIHsKKwkgICAgd2QtPnN0YS5pYnNzQWRkaXRpb25hbElFU2l6ZSA9IGlic3NBZGRpdGlvbmFsSUVTaXplOworICAgICAgICB6Zk1lbW9yeUNvcHkod2QtPnN0YS5pYnNzQWRkaXRpb25hbElFLCBpYnNzQWRkaXRpb25hbElFLCAodTE2X3QpaWJzc0FkZGl0aW9uYWxJRVNpemUpOworICAgIH0KKyAgICBlbHNlCisgICAgCXdkLT5zdGEuaWJzc0FkZGl0aW9uYWxJRVNpemUgPSAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NwcmVjb21wLmggYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3ByZWNvbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjcwYmZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NwcmVjb21wLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX0NQUkVDT01QX0gKKyNkZWZpbmUgX0NQUkVDT01QX0gKKworI2luY2x1ZGUgIi4uL29hbF9kdC5oIgorI2luY2x1ZGUgIi4uL29hbF9tYXJjLmgiCisjaW5jbHVkZSAicHViX3pmaS5oIgorI2luY2x1ZGUgInB1Yl96ZncuaCIKKyNpbmNsdWRlICJwdWJfdXNiLmgiCisjaW5jbHVkZSAid2xhbi5oIgorI2luY2x1ZGUgInN0cnVjdC5oIgorI2luY2x1ZGUgImNmdW5jLmgiCisjaW5jbHVkZSAiY2FnZy5oIgorI2luY2x1ZGUgImN3bS5oIgorI2luY2x1ZGUgInBlcmZvcm1hbmNlLmgiCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2Nwc21nci5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2Nwc21nci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNzNjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3BzbWdyLmMKQEAgLTAsMCArMSw3MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisvKioKKyAgKiAgVGhlIHBvd2VyIHNhdmluZyBtYW5hZ2VyIGlzIHRvIHNhdmUgdGhlIHBvd2VyIGFzIG11Y2ggYXMgcG9zc2libGUuCisgICogIEdlbmVyYWxseSBzcGVha2luZywgaXQgY29udHJvbHM6CisgICoKKyAgKiAgICAgICAgIC0gd2hlbiB0byBzbGVlcAorICAqICAgICAgICAgLQorICAqCisgICovCisjaW5jbHVkZSAiY3ByZWNvbXAuaCIKKwordm9pZCB6ZlBvd2VyU2F2aW5nTWdySW5pdCh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB3ZC0+c3RhLnBvd2VyU2F2ZU1vZGUgPSBaTV9TVEFfUFNfTk9ORTsKKyAgICB3ZC0+c3RhLnBzTWdyLnN0YXRlID0gWk1fUFNfTVNHX1NUQVRFX0FDVElWRTsKKyAgICB3ZC0+c3RhLnBzTWdyLmlzU2xlZXBBbGxvd2VkID0gMDsKKyAgICB3ZC0+c3RhLnBzTWdyLm1heFNsZWVwUGVyaW9kcyA9IDE7CisgICAgd2QtPnN0YS5wc01nci50aWNrcyA9IDA7CisgICAgd2QtPnN0YS5wc01nci5zbGVlcEFsbG93ZWR0aWNrID0gMDsKK30KKworc3RhdGljIHUxNl90IHpmUG93ZXJTYXZpbmdNZ3JIYW5kbGVQc05vbmUoemRldl90KiBkZXYsIHU4X3QgKmlzV2FrZVVwUmVxdWlyZWQpCit7CisgICAgdTE2X3QgcmV0ID0gMDsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBzd2l0Y2god2QtPnN0YS5wc01nci5zdGF0ZSkKKyAgICB7CisgICAgICAgIGNhc2UgWk1fUFNfTVNHX1NUQVRFX0FDVElWRToKKyAgICAgICAgICAgICppc1dha2VVcFJlcXVpcmVkID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWk1fUFNfTVNHX1NUQVRFX1QxOgorICAgICAgICBjYXNlIFpNX1BTX01TR19TVEFURV9UMjoKKyAgICAgICAgY2FzZSBaTV9QU19NU0dfU1RBVEVfU0xFRVA6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqaXNXYWtlVXBSZXF1aXJlZCA9IDE7Cit6bV9kZWJ1Z19tc2cwKCJ6ZlBvd2VyU2F2aW5nTWdySGFuZGxlUHNOb25lOiBXYWtlIHVwIG5vd1xuIik7CisgICAgICAgICAgICBpZiAoIHpmU3RhSXNDb25uZWN0ZWQoZGV2KSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiemZQb3dlclNhdmluZ01nck9uSGFuZGxlVDEgc2VuZCBOdWxsIGRhdGFcbiIpOworICAgICAgICAgICAgICAgIC8vemZTZW5kTnVsbERhdGEoZGV2LCAwKTsKKyAgICAgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3ZC0+c3RhLnBzTWdyLnN0YXRlID0gWk1fUFNfTVNHX1NUQVRFX0FDVElWRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB6ZlBvd2VyU2F2aW5nTWdySGFuZGxlUHMoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgc3dpdGNoKHdkLT5zdGEucHNNZ3Iuc3RhdGUpCisgICAgeworICAgICAgICBjYXNlIFpNX1BTX01TR19TVEFURV9BQ1RJVkU6CisgICAgICAgICAgICAvL3ptX2RlYnVnX21zZzAoInpmUG93ZXJTYXZpbmdNZ3JIYW5kbGVQczogUHJlcGFyZSB0byBzbGVlcC4uLlxuIik7CisgICAgICAgICAgICAvL3dkLT5zdGEucHNNZ3Iuc3RhdGUgPSBaTV9QU19NU0dfU1RBVEVfVDE7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFpNX1BTX01TR19TVEFURV9UMToKKyAgICAgICAgY2FzZSBaTV9QU19NU0dfU1RBVEVfVDI6CisgICAgICAgIGNhc2UgWk1fUFNfTVNHX1NUQVRFX1NMRUVQOgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIHpmUG93ZXJTYXZpbmdNZ3JTZXRNb2RlKHpkZXZfdCogZGV2LCB1OF90IG1vZGUpCit7CisgICAgdTE2X3Qgc2VuZE51bGwgPSAwOworICAgIHU4X3QgaXNXYWtlVXBSZXF1aXJlZCA9IDA7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptX2RlYnVnX21zZzEoIm1vZGUgPSAiLCBtb2RlKTsKKworICAgIGlmIChtb2RlID4gWk1fU1RBX1BTX0xJR0hUKQorICAgIHsKKyAgICAgICAgem1fZGVidWdfbXNnMCgicmV0dXJuIC0gd3JvbmcgcG93ZXIgc2F2ZSBtb2RlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgI2lmIDEKKyAgICBzd2l0Y2gobW9kZSkKKyAgICB7CisgICAgICAgIGNhc2UgWk1fU1RBX1BTX05PTkU6CisgICAgICAgICAgICBzZW5kTnVsbCA9IHpmUG93ZXJTYXZpbmdNZ3JIYW5kbGVQc05vbmUoZGV2LCAmaXNXYWtlVXBSZXF1aXJlZCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFpNX1NUQV9QU19GQVNUOgorICAgICAgICBjYXNlIFpNX1NUQV9QU19MSUdIVDoKKyAgICAgICAgICAgIHdkLT5zdGEucHNNZ3IubWF4U2xlZXBQZXJpb2RzID0gMTsKKyAgICAgICAgICAgIHpmUG93ZXJTYXZpbmdNZ3JIYW5kbGVQcyhkZXYpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBaTV9TVEFfUFNfTUFYOgorICAgICAgICAgICAgd2QtPnN0YS5wc01nci5tYXhTbGVlcFBlcmlvZHMgPSBaTV9QU19NQVhfU0xFRVBfUEVSSU9EUzsKKyAgICAgICAgICAgIHpmUG93ZXJTYXZpbmdNZ3JIYW5kbGVQcyhkZXYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgICNlbHNlCisgICAgc3dpdGNoKHdkLT5zdGEucHNNZ3Iuc3RhdGUpCisgICAgeworICAgICAgICBjYXNlIFpNX1BTX01TR19TVEFURV9BQ1RJVkU6CisgICAgICAgICAgICBpZiAoIG1vZGUgIT0gWk1fU1RBX1BTX05PTkUgKQorICAgICAgICAgICAgeworem1fZGVidWdfbXNnMCgiemZQb3dlclNhdmluZ01nclNldE1vZGU6IHN3aXRjaCBmcm9tIFpNX1BTX01TR19TVEFURV9BQ1RJVkUgdG8gWk1fUFNfTVNHX1NUQVRFX1QxXG4iKTsKKyAgICAgICAgICAgICAgICAvLyBTdGFsbCB0aGUgVFggJiBzdGFydCB0byB3YWl0IHRoZSBwZW5kaW5nIFRYIHRvIGJlIGNvbXBsZXRlZAorICAgICAgICAgICAgICAgIHdkLT5zdGEucHNNZ3Iuc3RhdGUgPSBaTV9QU19NU0dfU1RBVEVfVDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFpNX1BTX01TR19TVEFURV9TTEVFUDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAjZW5kaWYKKworICAgIHdkLT5zdGEucG93ZXJTYXZlTW9kZSA9IG1vZGU7CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlmICggaXNXYWtlVXBSZXF1aXJlZCApCisgICAgeworICAgICAgICB6ZkhwUG93ZXJTYXZlU2V0U3RhdGUoZGV2LCAwKTsKKyAgICAgICAgd2QtPnN0YS5wc01nci50ZW1wV2FrZVVwID0gMDsKKyAgICB9CisKKyAgICBpZiAoIHpmU3RhSXNDb25uZWN0ZWQoZGV2KQorICAgICAgICAgJiYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFKSApCisgICAgeworICAgICAgICBzd2l0Y2gobW9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBaTV9TVEFfUFNfTk9ORToKKyAgICAgICAgICAgICAgICB6ZkhwUG93ZXJTYXZlU2V0TW9kZShkZXYsIDAsIDAsIHdkLT5iZWFjb25JbnRlcnZhbCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgWk1fU1RBX1BTX0ZBU1Q6CisgICAgICAgICAgICBjYXNlIFpNX1NUQV9QU19NQVg6CisgICAgICAgICAgICBjYXNlIFpNX1NUQV9QU19MSUdIVDoKKyAgICAgICAgICAgICAgICB6ZkhwUG93ZXJTYXZlU2V0TW9kZShkZXYsIDAsIDEsIHdkLT5iZWFjb25JbnRlcnZhbCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgemZIcFBvd2VyU2F2ZVNldE1vZGUoZGV2LCAwLCAwLCB3ZC0+YmVhY29uSW50ZXJ2YWwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNlbmROdWxsID09IDEpCisgICAgeworICAgICAgICB6ZlNlbmROdWxsRGF0YShkZXYsIDApOworICAgIH0KKworICAgIHJldHVybjsKK30KKworc3RhdGljIHZvaWQgemZQb3dlclNhdmluZ01nck5vdGlmeVBTVG9BUCh6ZGV2X3QgKmRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIGlmICggKHdkLT5zdGEucHNNZ3IudGVtcFdha2VVcCAhPSAxKSYmCisgICAgICAgICAod2QtPnN0YS5wc01nci5sYXN0VHhVbmljYXN0RnJtICE9IHdkLT5jb21tVGFsbHkudHhVbmljYXN0RnJtIHx8CisgICAgICAgICAgd2QtPnN0YS5wc01nci5sYXN0VHhCcm9hZGNhc3RGcm0gIT0gd2QtPmNvbW1UYWxseS50eEJyb2FkY2FzdEZybSB8fAorICAgICAgICAgIHdkLT5zdGEucHNNZ3IubGFzdFR4TXVsdGljYXN0RnJtICE9IHdkLT5jb21tVGFsbHkudHhNdWx0aWNhc3RGcm0pICkKKyAgICB7CisgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHdkLT5zdGEucHNNZ3IubGFzdFR4VW5pY2FzdEZybSA9IHdkLT5jb21tVGFsbHkudHhVbmljYXN0RnJtOworICAgICAgICB3ZC0+c3RhLnBzTWdyLmxhc3RUeEJyb2FkY2FzdEZybSA9IHdkLT5jb21tVGFsbHkudHhCcm9hZGNhc3RGcm07CisgICAgICAgIHdkLT5zdGEucHNNZ3IubGFzdFR4TXVsdGljYXN0RnJtID0gd2QtPmNvbW1UYWxseS50eE11bHRpY2FzdEZybTsKKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICB6ZlNlbmROdWxsRGF0YShkZXYsIDEpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgemZQb3dlclNhdmluZ01nck9uSGFuZGxlVDEoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICAvLyBJZiB0aGUgdHggUSBpcyBub3QgZW1wdHkuLi5yZXR1cm4KKyAgICBpZiAoIHpmSXNWdHhxRW1wdHkoZGV2KSA9PSBGQUxTRSApCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCit6bV9kZWJ1Z19tc2cwKCJWdHhRIGlzIGVtcHR5IG5vdy4uLkNoZWNrIGlmIEhBTCBUWFEgaXMgZW1wdHlcbiIpOworCisgICAgLy8gVGhlIHRoZSBIQUwgVFggUSBpcyBub3QgZW1wdHkuLi5yZXR1cm4KKyAgICBpZiAoIHpmSHBHZXRGcmVlVHhkQ291bnQoZGV2KSAhPSB6ZkhwR2V0TWF4VHhkQ291bnQoZGV2KSApCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCit6bV9kZWJ1Z19tc2cwKCJIQUwgVFhRIGlzIGVtcHR5IG5vdy4uLkNvdWxkIGdvIHRvIHNsZWVwLi4uXG4iKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBpZiAod2QtPnN0YS5wb3dlclNhdmVNb2RlID09IFpNX1NUQV9QU19MSUdIVCkKKyAgICB7CisgICAgICAgIGlmICh3ZC0+c3RhLlJlY2VpdmVkUGt0UmF0ZVBlclNlY29uZCA+IDIwMCkKKyAgICAgICAgeworICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggemZTdGFJc0Nvbm5lY3RlZChkZXYpCisgICAgICAgICAgICAgJiYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3ZC0+c3RhLnBzTWdyLnNsZWVwQWxsb3dlZHRpY2spIHsKKyAgICAgICAgICAgICAgICB3ZC0+c3RhLnBzTWdyLnNsZWVwQWxsb3dlZHRpY2stLTsKKyAgICAgICAgICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHdkLT5zdGEucHNNZ3Iuc3RhdGUgPSBaTV9QU19NU0dfU1RBVEVfVDI7CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgLy8gU2VuZCB0aGUgTnVsbCBwa3QgdG8gQVAgdG8gbm90aWZ5IHRoYXQgSSdtIGdvaW5nIHRvIHNsZWVwCisgICAgaWYgKCB6ZlN0YUlzQ29ubmVjdGVkKGRldikgKQorICAgIHsKK3ptX2RlYnVnX21zZzAoInpmUG93ZXJTYXZpbmdNZ3JPbkhhbmRsZVQxIHNlbmQgTnVsbCBkYXRhXG4iKTsKKyAgICAgICAgemZQb3dlclNhdmluZ01nck5vdGlmeVBTVG9BUChkZXYpOworICAgIH0KKworICAgIC8vIFN0YWxsIHRoZSBUWCBub3cKKyAgICAvLyB6ZlR4RW5naW5lU3RvcChkZXYpOworfQorCitzdGF0aWMgdm9pZCB6ZlBvd2VyU2F2aW5nTWdyT25IYW5kbGVUMih6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIC8vIFdhaXQgdW50aWwgdGhlIE51bGwgcGt0IGlzIHRyYW5zbWl0dGVkCisgICAgaWYgKCB6ZkhwR2V0RnJlZVR4ZENvdW50KGRldikgIT0gemZIcEdldE1heFR4ZENvdW50KGRldikgKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgd2QtPnN0YS5wc01nci5zdGF0ZSA9IFpNX1BTX01TR19TVEFURV9TTEVFUDsKKyAgICB3ZC0+c3RhLnBzTWdyLmxhc3RUeFVuaWNhc3RGcm0gPSB3ZC0+Y29tbVRhbGx5LnR4VW5pY2FzdEZybTsKKyAgICB3ZC0+c3RhLnBzTWdyLmxhc3RUeEJyb2FkY2FzdEZybSA9IHdkLT5jb21tVGFsbHkudHhCcm9hZGNhc3RGcm07CisgICAgd2QtPnN0YS5wc01nci5sYXN0VHhNdWx0aWNhc3RGcm0gPSB3ZC0+Y29tbVRhbGx5LnR4TXVsdGljYXN0RnJtOworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAvLyBMZXQgQ0hJUCBzbGVlcCBub3cKK3ptX2RlYnVnX21zZzAoInpmUG93ZXJTYXZpbmdNZ3JPbkhhbmRsZVQyIHp6enouLi4uXG4iKTsKKyAgICB6ZkhwUG93ZXJTYXZlU2V0U3RhdGUoZGV2LCAxKTsKKyAgICB3ZC0+c3RhLnBzTWdyLnRlbXBXYWtlVXAgPSAwOworfQorCit1OF90IHpmUG93ZXJTYXZpbmdNZ3JJc1NsZWVwaW5nKHpkZXZfdCAqZGV2KQoreworICAgIHU4X3QgaXNTbGVlcGluZyA9IEZBTFNFOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICBpZiAoIHdkLT5zdGEucHNNZ3Iuc3RhdGUgPT0gWk1fUFNfTVNHX1NUQVRFX1NMRUVQIHx8CisgICAgICAgICB3ZC0+c3RhLnBzTWdyLnN0YXRlID09IFpNX1BTX01TR19TVEFURV9UMikKKyAgICB7CisgICAgICAgIGlzU2xlZXBpbmcgPSBUUlVFOworICAgIH0KKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIHJldHVybiBpc1NsZWVwaW5nOworfQorCitzdGF0aWMgdThfdCB6ZlBvd2VyU2F2aW5nTWdySXNJZGxlKHpkZXZfdCAqZGV2KQoreworICAgIHU4X3QgaXNJZGxlID0gMDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlmICggemZTdGFJc0Nvbm5lY3RlZChkZXYpICYmIHdkLT5zdGEucHNNZ3IuaXNTbGVlcEFsbG93ZWQgPT0gMCApCisgICAgeworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAgaWYgKCB3ZC0+c3RhLmJDaGFubmVsU2NhbiApCisgICAgeworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAgaWYgKCB6ZlN0YUlzQ29ubmVjdGluZyhkZXYpICkKKyAgICB7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisKKyAgICBpZiAod2QtPnN0YS5wb3dlclNhdmVNb2RlID09IFpNX1NUQV9QU19MSUdIVCkKKyAgICB7CisgICAgICAgIGlmICh3ZC0+c3RhLlJlY2VpdmVkUGt0UmF0ZVBlclNlY29uZCA+IDIwMCkKKyAgICAgICAgeworICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB6ZlN0YUlzQ29ubmVjdGVkKGRldikKKyAgICAgICAgICAgICAmJiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUpICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdkLT5zdGEucHNNZ3Iuc2xlZXBBbGxvd2VkdGljaykgeworICAgICAgICAgICAgICAgIHdkLT5zdGEucHNNZ3Iuc2xlZXBBbGxvd2VkdGljay0tOworICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlzSWRsZSA9IDE7CisKK2RvbmU6CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlmICggemZJc1Z0eHFFbXB0eShkZXYpID09IEZBTFNFICkKKyAgICB7CisgICAgICAgIGlzSWRsZSA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIGlzSWRsZTsKK30KKworc3RhdGljIHZvaWQgemZQb3dlclNhdmluZ01nclNsZWVwSWZJZGxlKHpkZXZfdCAqZGV2KQoreworICAgIHU4X3QgaXNJZGxlOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICBpc0lkbGUgPSB6ZlBvd2VyU2F2aW5nTWdySXNJZGxlKGRldik7CisKKyAgICBpZiAoIGlzSWRsZSA9PSAwICkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgc3dpdGNoKHdkLT5zdGEucG93ZXJTYXZlTW9kZSkKKyAgICB7CisgICAgICAgIGNhc2UgWk1fU1RBX1BTX05PTkU6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFpNX1NUQV9QU19NQVg6CisgICAgICAgIGNhc2UgWk1fU1RBX1BTX0ZBU1Q6CisgICAgICAgIGNhc2UgWk1fU1RBX1BTX0xJR0hUOgorICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiemZQb3dlclNhdmluZ01nclNsZWVwSWZJZGxlOiBJRExFIHNvIHNsZXAgbm93Li4uXG4iKTsKKyAgICAgICAgICAgIHdkLT5zdGEucHNNZ3Iuc3RhdGUgPSBaTV9QU19NU0dfU1RBVEVfVDE7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworfQorCitzdGF0aWMgdm9pZCB6ZlBvd2VyU2F2aW5nTWdyRGlzY29ubmVjdE1haW4oemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisjaWZkZWYgWk1fRU5BQkxFX0RJU0NPTk5FQ1RfUFMKKyAgICBzd2l0Y2god2QtPnN0YS5wc01nci5zdGF0ZSkKKyAgICB7CisgICAgICAgIGNhc2UgWk1fUFNfTVNHX1NUQVRFX0FDVElWRToKKyAgICAgICAgICAgIHpmUG93ZXJTYXZpbmdNZ3JTbGVlcElmSWRsZShkZXYpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBaTV9QU19NU0dfU1RBVEVfU0xFRVA6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFpNX1BTX01TR19TVEFURV9UMToKKyAgICAgICAgICAgIHpmUG93ZXJTYXZpbmdNZ3JPbkhhbmRsZVQxKGRldik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFpNX1BTX01TR19TVEFURV9UMjoKKyAgICAgICAgICAgIHpmUG93ZXJTYXZpbmdNZ3JPbkhhbmRsZVQyKGRldik7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisjZWxzZQorICAgIHpmUG93ZXJTYXZpbmdNZ3JXYWtldXAoZGV2KTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCB6ZlBvd2VyU2F2aW5nTWdySW5mcmFNYWluKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHN3aXRjaCh3ZC0+c3RhLnBzTWdyLnN0YXRlKQorICAgIHsKKyAgICAgICAgY2FzZSBaTV9QU19NU0dfU1RBVEVfQUNUSVZFOgorICAgICAgICAgICAgemZQb3dlclNhdmluZ01nclNsZWVwSWZJZGxlKGRldik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFpNX1BTX01TR19TVEFURV9TTEVFUDoKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWk1fUFNfTVNHX1NUQVRFX1QxOgorICAgICAgICAgICAgemZQb3dlclNhdmluZ01nck9uSGFuZGxlVDEoZGV2KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWk1fUFNfTVNHX1NUQVRFX1QyOgorICAgICAgICAgICAgemZQb3dlclNhdmluZ01nck9uSGFuZGxlVDIoZGV2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCB6ZlBvd2VyU2F2aW5nTWdyQXRpbVdpbkV4cGlyZWQoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisvL3ByaW50aygiemZQb3dlclNhdmluZ01nckF0aW1XaW5FeHBpcmVkICMxXG4iKTsKKyAgICBpZiAoIHdkLT5zdGEucG93ZXJTYXZlTW9kZSA9PSBaTV9TVEFfUFNfTk9ORSApCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisvL3ByaW50aygiemZQb3dlclNhdmluZ01nckF0aW1XaW5FeHBpcmVkICMyXG4iKTsKKyAgICAvLyBpZiB3ZSByZWNlaXZlZCBhbnkgQVRJTSB3aW5kb3cgZnJvbSB0aGUgb3RoZXJzIHRvIGluZGljYXRlIHdlIGhhdmUgYnVmZmVyZWQgZGF0YQorICAgIC8vIGF0IHRoZSBvdGhlciBzdGF0aW9uLCB3ZSBjYW4ndCBnbyB0byBzbGVlcAorICAgIGlmICggd2QtPnN0YS5yZWN2QXRpbSApCisgICAgeworICAgICAgICB3ZC0+c3RhLnJlY3ZBdGltID0gMDsKKyAgICAgICAgem1fZGVidWdfbXNnMCgiQ2FuJ3Qgc2xlZXAgZHVlIHRvIHJlY2V2aW5nIEFUSU0gd2luZG93ISIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gaWYgd2UgYXJlIHRoZSBvbmUgdG8gdHggYmVhY29uIGR1cmluZyBsYXN0IGJlYWNvbiBpbnRlcnZhbC4gd2UgY2FuJ3QgZ28gdG8gc2xlZXAKKyAgICAvLyBzaW5jZSB3ZSBuZWVkIHRvIGJlIGFsaXZlIHRvIHJlc3BvbmQgdGhlIHByb2JlIHJlcXVlc3QhCisgICAgaWYgKCB3ZC0+c3RhLnR4QmVhY29uSW5kICkKKyAgICB7CisgICAgICAgIHptX2RlYnVnX21zZzAoIkNhbid0IHNsZWVwIGR1ZSB0byBqdXN0IHRyYW5zbWl0IGEgYmVhY29uISIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgd2UgYnVmZmVyIGFueSBkYXRhIGZvciB0aGUgb3RoZXIgc3RhdGlvbnMuIHdlIGNvdWxkIG5vdCBnbyB0byBzbGVlcAorICAgIGlmICggd2QtPnN0YS5pYnNzUHJldlBTRGF0YUNvdW50ICE9IDAgKQorICAgIHsKKyAgICAgICAgem1fZGVidWdfbXNnMCgiQ2FuJ3Qgc2xlZXAgZHVlIHRvIGJ1ZmZlcmluZyBkYXRhIGZvciB0aGUgb3RoZXJzISIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gYmVmb3JlIHNsZWVwaW5nLCB3ZSBzdGlsbCBuZWVkIHRvIG5vdGlmeSB0aGUgb3RoZXJzIGJ5IHRyYW5zbWl0dGluZyBudWxsCisgICAgLy8gcGt0IHdpdGggcG93ZXIgbWdtdCBiaXQgdHVybmVkIG9uLgorICAgIHpmUG93ZXJTYXZpbmdNZ3JPbkhhbmRsZVQxKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIHpmUG93ZXJTYXZpbmdNZ3JJQlNTTWFpbih6ZGV2X3QqIGRldikKK3sKKyAgICAvLyB3YWl0IGZvciB0aGUgZW5kIG9mCisgICAgLy8gaWYgbmVlZCB0byB3YWl0IHRvIGtub3cgaWYgd2UgYXJlIHRoZSBvbmUgdG8gdHJhbnNtaXQgdGhlIGJlYWNvbgorICAgIC8vIGR1cmluZyB0aGUgYmVhY29uIGludGVydmFsLiBJZiBpdCdzIG1lLCB3ZSBjYW4ndCBnbyB0byBzbGVlcC4KKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHN3aXRjaCh3ZC0+c3RhLnBzTWdyLnN0YXRlKQorICAgIHsKKyAgICAgICAgY2FzZSBaTV9QU19NU0dfU1RBVEVfQUNUSVZFOgorICAgICAgICBjYXNlIFpNX1BTX01TR19TVEFURV9TTEVFUDoKKyAgICAgICAgY2FzZSBaTV9QU19NU0dfU1RBVEVfVDE6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFpNX1BTX01TR19TVEFURV9UMjoKKyAgICAgICAgICAgIHpmUG93ZXJTYXZpbmdNZ3JPbkhhbmRsZVQyKGRldik7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKKyNpZiAxCit2b2lkIHpmUG93ZXJTYXZpbmdNZ3JNYWluKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHN3aXRjaCAod2QtPnN0YS5hZGFwdGVyU3RhdGUpCisgICAgeworICAgIGNhc2UgWk1fU1RBX1NUQVRFX0RJU0NPTk5FQ1Q6CisgICAgICAgIHpmUG93ZXJTYXZpbmdNZ3JEaXNjb25uZWN0TWFpbihkZXYpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFpNX1NUQV9TVEFURV9DT05ORUNURUQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSkgeworICAgICAgICAgICAgICAgIHpmUG93ZXJTYXZpbmdNZ3JJbmZyYU1haW4oZGV2KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfSUJTUykgeworICAgICAgICAgICAgICAgIHpmUG93ZXJTYXZpbmdNZ3JJQlNTTWFpbihkZXYpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWk1fU1RBX1NUQVRFX0NPTk5FQ1RJTkc6CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorI2Vsc2UKK3ZvaWQgemZQb3dlclNhdmluZ01nck1haW4oemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYgKCB3ZC0+d2xhbk1vZGUgIT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSApCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3dpdGNoKHdkLT5zdGEucHNNZ3Iuc3RhdGUpCisgICAgeworICAgICAgICBjYXNlIFpNX1BTX01TR19TVEFURV9BQ1RJVkU6CisgICAgICAgICAgICBnb3RvIGNoZWNrX3NsZWVwOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBaTV9QU19NU0dfU1RBVEVfU0xFRVA6CisgICAgICAgICAgICBnb3RvIHNsZWVwaW5nOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBaTV9QU19NU0dfU1RBVEVfVDE6CisgICAgICAgICAgICB6ZlBvd2VyU2F2aW5nTWdyT25IYW5kbGVUMShkZXYpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBaTV9QU19NU0dfU1RBVEVfVDI6CisgICAgICAgICAgICB6ZlBvd2VyU2F2aW5nTWdyT25IYW5kbGVUMihkZXYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuOworCitzbGVlcGluZzoKKyAgICByZXR1cm47CisKK2NoZWNrX3NsZWVwOgorICAgIHpmUG93ZXJTYXZpbmdNZ3JTbGVlcElmSWRsZShkZXYpOworICAgIHJldHVybjsKK30KKyNlbmRpZgorCisjaWZkZWYgWk1fRU5BQkxFX1BPV0VSX1NBVkUKK3ZvaWQgemZQb3dlclNhdmluZ01ncldha2V1cCh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworLy96bV9kZWJ1Z19tc2cwKCJ6ZlBvd2VyU2F2aW5nTWdyV2FrZXVwIik7CisKKyAgICAvL2lmICggd2QtPnN0YS5wc01nci5zdGF0ZSAhPSBaTV9QU19NU0dfU1RBVEVfQUNUSVZFICYmICggemZQb3dlclNhdmluZ01ncklzSWRsZShkZXYpID09IDAgKSkKKyAgICBpZiAoIHdkLT5zdGEucHNNZ3Iuc3RhdGUgIT0gWk1fUFNfTVNHX1NUQVRFX0FDVElWRSApCisgICAgeworICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgIHdkLT5zdGEucHNNZ3IuaXNTbGVlcEFsbG93ZWQgPSAwOworICAgICAgICB3ZC0+c3RhLnBzTWdyLnN0YXRlID0gWk1fUFNfTVNHX1NUQVRFX0FDVElWRTsKKworICAgICAgICBpZiAoIHdkLT5zdGEucG93ZXJTYXZlTW9kZSA+IFpNX1NUQV9QU19OT05FICkKKyAgICAgICAgICAgIHdkLT5zdGEucHNNZ3IudGVtcFdha2VVcCA9IDE7CisKKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICAvLyBXYWtlIHVwIHRoZSBDSElQIG5vdyEhCisgICAgICAgIHpmSHBQb3dlclNhdmVTZXRTdGF0ZShkZXYsIDApOworICAgIH0KK30KKyNlbHNlCit2b2lkIHpmUG93ZXJTYXZpbmdNZ3JXYWtldXAoemRldl90KiBkZXYpCit7Cit9CisjZW5kaWYKKwordm9pZCB6ZlBvd2VyU2F2aW5nTWdyUHJvY2Vzc0JlYWNvbih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgdThfdCAgIGxlbmd0aCwgYml0bWFwOworICAgIHUxNl90ICBvZmZzZXQsIG4xLCBuMiwgcSwgcjsKKyAgICB6YnVmX3QqIHBzQnVmOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICBpZiAoIHdkLT5zdGEucG93ZXJTYXZlTW9kZSA9PSBaTV9TVEFfUFNfTk9ORSAgKQorICAgIC8vaWYgKCB3ZC0+c3RhLnBzTWdyLnN0YXRlICE9IFpNX1BTX01TR19TVEFURV9TTEVFUCApCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgd2QtPnN0YS5wc01nci5pc1NsZWVwQWxsb3dlZCA9IDE7CisKKyAgICBpZiAoIChvZmZzZXQ9emZGaW5kRWxlbWVudChkZXYsIGJ1ZiwgWk1fV0xBTl9FSURfVElNKSkgIT0gMHhmZmZmICkKKyAgICB7CisgICAgICAgIGxlbmd0aCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKTsKKworICAgICAgICBpZiAoIGxlbmd0aCA+IDMgKQorICAgICAgICB7CisgICAgICAgICAgICBuMSA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs0KSAmICh+Wk1fQklUXzApOworICAgICAgICAgICAgbjIgPSBsZW5ndGggKyBuMSAtIDQ7CisgICAgICAgICAgICBxID0gd2QtPnN0YS5haWQgPj4gMzsKKyAgICAgICAgICAgIHIgPSB3ZC0+c3RhLmFpZCAmIDc7CisKKyAgICAgICAgICAgIGlmICgocSA+PSBuMSkgJiYgKHEgPD0gbjIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJpdG1hcCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs1K3EtbjEpOworCisgICAgICAgICAgICAgICAgaWYgKCAoYml0bWFwID4+IHIpICYgIFpNX0JJVF8wICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vaWYgKCB3ZC0+c3RhLnBvd2VyU2F2ZU1vZGUgPT0gWk1fU1RBX1BTX0ZBU1QgKQorICAgICAgICAgICAgICAgICAgICBpZiAoIDAgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnBzTWdyLnN0YXRlID0gWk1fUFNfTVNHX1NUQVRFX1MxOworICAgICAgICAgICAgICAgICAgICAgICAgLy96ZlNlbmRQU1BvbGwoZGV2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHpmU2VuZE51bGxEYXRhKGRldiwgMCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHdkLT5zdGEucW9zSW5mbyYweGYpICE9IDB4ZikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZW5kIHBzLXBvbGwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50aygiemZTZW5kUFNQb2xsICMxXG4iKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEucHNNZ3IuaXNTbGVlcEFsbG93ZWQgPSAwOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh3ZC0+c3RhLnBvd2VyU2F2ZU1vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWk1fU1RBX1BTX01BWDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFpNX1NUQV9QU19GQVNUOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ptX2RlYnVnX21zZzAoIndha2UgdXAgYW5kIHNlbmQgUFMtUG9sbFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmU2VuZFBTUG9sbChkZXYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFpNX1NUQV9QU19MSUdIVDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgid2FrZSB1cCBhbmQgc2VuZCBudWxsIGRhdGFcbiIpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEucHNNZ3Iuc2xlZXBBbGxvd2VkdGljayA9IDQwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZlNlbmROdWxsRGF0YShkZXYsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnBzTWdyLnRlbXBXYWtlVXAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgd2hpbGUgKChwc0J1ZiA9IHpmUXVldWVHZXQoZGV2LCB3ZC0+c3RhLnVhcHNkUSkpICE9IE5VTEwpCisgICAgeworICAgICAgICB6ZlR4U2VuZEV0aChkZXYsIHBzQnVmLCAwLCBaTV9FWFRFUk5BTF9BTExPQ19CVUYsIDApOworICAgIH0KKworICAgIC8vcHJpbnRrKCJ6ZlBvd2VyU2F2aW5nTWdyUHJvY2Vzc0JlYWNvbiAjMVxuIik7CisgICAgemZQb3dlclNhdmluZ01nck1haW4oZGV2KTsKK30KKwordm9pZCB6ZlBvd2VyU2F2aW5nTWdyQ29ubmVjdE5vdGlmeSh6ZGV2X3QgKmRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFICkKKyAgICB7CisgICAgICAgIHN3aXRjaCh3ZC0+c3RhLnBvd2VyU2F2ZU1vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgWk1fU1RBX1BTX05PTkU6CisgICAgICAgICAgICAgICAgemZIcFBvd2VyU2F2ZVNldE1vZGUoZGV2LCAwLCAwLCB3ZC0+YmVhY29uSW50ZXJ2YWwpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFpNX1NUQV9QU19GQVNUOgorICAgICAgICAgICAgY2FzZSBaTV9TVEFfUFNfTUFYOgorICAgICAgICAgICAgY2FzZSBaTV9TVEFfUFNfTElHSFQ6CisgICAgICAgICAgICAgICAgemZIcFBvd2VyU2F2ZVNldE1vZGUoZGV2LCAwLCAxLCB3ZC0+YmVhY29uSW50ZXJ2YWwpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHpmSHBQb3dlclNhdmVTZXRNb2RlKGRldiwgMCwgMCwgd2QtPmJlYWNvbkludGVydmFsKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB6ZlBvd2VyU2F2aW5nTWdyUHJlVEJUVEludGVycnVwdCh6ZGV2X3QgKmRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIC8qIGRpc2FibGUgVEJUVCBpbnRlcnJ1cHQgd2hlbiBjaGFuZ2UgZnJvbSBjb25uZWN0aW9uIHRvIGRpc2Nvbm5lY3QgKi8KKyAgICBpZiAoemZTdGFJc0Rpc2Nvbm5lY3QoZGV2KSkgeworICAgICAgICB6ZkhwUG93ZXJTYXZlU2V0TW9kZShkZXYsIDAsIDAsIDApOworICAgICAgICB6ZlBvd2VyU2F2aW5nTWdyV2FrZXVwKGRldik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIHdkLT5zdGEucHNNZ3IudGlja3MrKzsKKworICAgIGlmICggd2QtPnN0YS5wc01nci50aWNrcyA8IHdkLT5zdGEucHNNZ3IubWF4U2xlZXBQZXJpb2RzICkKKyAgICB7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgd2QtPnN0YS5wc01nci50aWNrcyA9IDA7CisgICAgfQorCisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHpmUG93ZXJTYXZpbmdNZ3JXYWtldXAoZGV2KTsKK30KKworLyogTGVhdmUgYW4gZW1wdHkgbGluZSBiZWxvdyB0byByZW1vdmUgd2FybmluZyBtZXNzYWdlIG9uIHNvbWUgY29tcGlsZXIgKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NzY2FubWdyLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3NjYW5tZ3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzI4MzVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NzY2FubWdyLmMKQEAgLTAsMCArMSw1MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiY3ByZWNvbXAuaCIKKwordm9pZCB6ZlNjYW5NZ3JJbml0KHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHdkLT5zdGEuc2Nhbk1nci5zY2FuUmVxc1swXSA9IDA7CisgICAgd2QtPnN0YS5zY2FuTWdyLnNjYW5SZXFzWzFdID0gMDsKKworICAgIHdkLT5zdGEuc2Nhbk1nci5jdXJyU2NhblR5cGUgPSBaTV9TQ0FOX01HUl9TQ0FOX05PTkU7CisgICAgd2QtPnN0YS5zY2FuTWdyLnNjYW5TdGFydERlbGF5ID0gMzsKKyAgICAvL3dkLT5zdGEuc2Nhbk1nci5zY2FuU3RhcnREZWxheSA9IDA7Cit9CisKK3U4X3QgemZTY2FuTWdyU2NhblN0YXJ0KHpkZXZfdCogZGV2LCB1OF90IHNjYW5UeXBlKQoreworICAgIHU4X3QgaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptX2RlYnVnX21zZzEoInNjYW5UeXBlID0gIiwgc2NhblR5cGUpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIGlmICggc2NhblR5cGUgIT0gWk1fU0NBTl9NR1JfU0NBTl9JTlRFUk5BTCAmJgorICAgICAgICAgc2NhblR5cGUgIT0gWk1fU0NBTl9NR1JfU0NBTl9FWFRFUk5BTCApCisgICAgeworICAgICAgICB6bV9kZWJ1Z19tc2cwKCJ1bmtub3duIHNjYW5UeXBlIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBlbHNlIGlmICh6ZlN0YUlzQ29ubmVjdGluZyhkZXYpKQorICAgIHsKKyAgICAgICAgem1fZGVidWdfbXNnMCgicmVqZWN0IHNjYW4gcmVxdWVzdCBkdWUgdG8gY29ubmVjdGluZyIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBpID0gc2NhblR5cGUgLSAxOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlmICggd2QtPnN0YS5zY2FuTWdyLnNjYW5SZXFzW2ldID09IDEgKQorICAgIHsKKyAgICAgICAgem1fZGVidWdfbXNnMSgic2NhbiByZXNjaGVkdWxlZCIsIHNjYW5UeXBlKTsKKyAgICAgICAgZ290byBzY2FuX2RvbmU7CisgICAgfQorCisgICAgd2QtPnN0YS5zY2FuTWdyLnNjYW5SZXFzW2ldID0gMTsKKyAgICB6bV9kZWJ1Z19tc2cxKCJzY2FuIHNjaGVkdWxlZDogIiwgc2NhblR5cGUpOworCisgICAgLy8gSWYgdGhlcmUncyBubyBzY2FuIHBlbmRpbmcsIHdlIGRvIHRoZSBzY2FuIHJpZ2h0IGF3YXkuCisgICAgLy8gSWYgdGhlcmUncyBhbiBpbnRlcm5hbCBzY2FuIGFuZCB0aGUgbmV3IHNjYW4gcmVxdWVzdCBpcyBleHRlcm5hbCBvbmUsCisgICAgLy8gd2Ugd2lsbCByZXN0YXJ0IHRoZSBzY2FuLgorICAgIGlmICggd2QtPnN0YS5zY2FuTWdyLmN1cnJTY2FuVHlwZSA9PSBaTV9TQ0FOX01HUl9TQ0FOX05PTkUgKQorICAgIHsKKyAgICAgICAgZ290byBzY2hlZHVsZV9zY2FuOworICAgIH0KKyAgICBlbHNlIGlmICggd2QtPnN0YS5zY2FuTWdyLmN1cnJTY2FuVHlwZSA9PSBaTV9TQ0FOX01HUl9TQ0FOX0lOVEVSTkFMICYmCisgICAgICAgICAgICAgIHNjYW5UeXBlID09IFpNX1NDQU5fTUdSX1NDQU5fRVhURVJOQUwgKQorICAgIHsKKyAgICAgICAgLy8gU3RvcCB0aGUgaW50ZXJuYWwgc2NhbiAmIHNjaGVkdWxlIGV4dGVybmFsIHNjYW4gZmlyc3QKKyAgICAgICAgemZUaW1lckNhbmNlbChkZXYsIFpNX0VWRU5UX1NDQU4pOworCisgICAgICAgIC8qIEZpeCBmb3IgV0hRTCBzZW5kcmVjdiA9PiB3ZSBkbyBub3QgYXBwbHkgZGVsYXkgdGltZSBpbiB3aGljaCB0aGUgZGV2aWNlCisgICAgICAgICAgIHN0b3AgdHJhbnNtaXR0aW5nIHBhY2tldCB3aGVuIHdlIGFscmVhZHkgY29ubmVjdCB0byBzb21lIEFQICAqLworICAgICAgICB3ZC0+c3RhLmJTY2hlZHVsZVNjYW4gPSBGQUxTRTsKKworICAgICAgICB6ZlRpbWVyQ2FuY2VsKGRldiwgWk1fRVZFTlRfVElNRU9VVF9TQ0FOKTsKKyAgICAgICAgemZUaW1lckNhbmNlbChkZXYsIFpNX0VWRU5UX0lOX1NDQU4pOworCisgICAgICAgIHdkLT5zdGEuYkNoYW5uZWxTY2FuID0gRkFMU0U7CisgICAgICAgIGdvdG8gc2NoZWR1bGVfc2NhbjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgem1fZGVidWdfbXNnMCgiU2NhbiBpcyBidXN5Li4ud2FpdGluZyBsYXRlciB0byBzdGFydFxuIik7CisgICAgfQorCisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICByZXR1cm4gMDsKKworc2Nhbl9kb25lOgorICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgcmV0dXJuIDE7CisKK3NjaGVkdWxlX3NjYW46CisKKyAgICB3ZC0+c3RhLmJTY2hlZHVsZVNjYW4gPSBUUlVFOworCisgICAgemZUaW1lclNjaGVkdWxlKGRldiwgWk1fRVZFTlRfU0NBTiwgd2QtPnN0YS5zY2FuTWdyLnNjYW5TdGFydERlbGF5KTsKKyAgICB3ZC0+c3RhLnNjYW5NZ3Iuc2NhblN0YXJ0RGVsYXkgPSAzOworICAgIC8vd2QtPnN0YS5zY2FuTWdyLnNjYW5TdGFydERlbGF5ID0gMDsKKyAgICB3ZC0+c3RhLnNjYW5NZ3IuY3VyclNjYW5UeXBlID0gc2NhblR5cGU7CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlmICgoemZTdGFJc0Nvbm5lY3RlZChkZXYpKSAmJiAoIXpmUG93ZXJTYXZpbmdNZ3JJc1NsZWVwaW5nKGRldikpKQorICAgIHsKKyAgICAgICAgemZTZW5kTnVsbERhdGEoZGV2LCAxKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgemZTY2FuTWdyU2NhblN0b3AoemRldl90KiBkZXYsIHU4X3Qgc2NhblR5cGUpCit7CisgICAgdThfdCBzY2FuTm90aWZ5UmVxdWlyZWQgPSAwOworICAgIHU4X3QgdGhlT3RoZXJTY2FuID0gWk1fU0NBTl9NR1JfU0NBTl9OT05FOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBpZiAoIHdkLT5zdGEuc2Nhbk1nci5jdXJyU2NhblR5cGUgPT0gWk1fU0NBTl9NR1JfU0NBTl9OT05FICkKKyAgICB7CisgICAgICAgIHptX2Fzc2VydCh3ZC0+c3RhLnNjYW5NZ3Iuc2NhblJlcXNbMF0gPT0gMCk7CisgICAgICAgIHptX2Fzc2VydCh3ZC0+c3RhLnNjYW5NZ3Iuc2NhblJlcXNbMV0gPT0gMCk7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisKKyAgICBzd2l0Y2goc2NhblR5cGUpCisgICAgeworICAgICAgICBjYXNlIFpNX1NDQU5fTUdSX1NDQU5fRVhURVJOQUw6CisgICAgICAgICAgICBzY2FuTm90aWZ5UmVxdWlyZWQgPSAxOworICAgICAgICAgICAgdGhlT3RoZXJTY2FuID0gWk1fU0NBTl9NR1JfU0NBTl9JTlRFUk5BTDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWk1fU0NBTl9NR1JfU0NBTl9JTlRFUk5BTDoKKyAgICAgICAgICAgIHRoZU90aGVyU2NhbiA9IFpNX1NDQU5fTUdSX1NDQU5fRVhURVJOQUw7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZ290byBkb25lOworICAgIH0KKworICAgIGlmICggd2QtPnN0YS5zY2FuTWdyLmN1cnJTY2FuVHlwZSAhPSBzY2FuVHlwZSApCisgICAgeworICAgICAgICBnb3RvIHN0b3BfZG9uZTsKKyAgICB9CisKKyAgICB6ZlRpbWVyQ2FuY2VsKGRldiwgWk1fRVZFTlRfU0NBTik7CisKKyAgICAvKiBGaXggZm9yIFdIUUwgc2VuZHJlY3YgPT4gd2UgZG8gbm90IGFwcGx5IGRlbGF5IHRpbWUgaW4gd2hpY2ggdGhlIGRldmljZQorICAgICAgIHN0b3AgdHJhbnNtaXR0aW5nIHBhY2tldCB3aGVuIHdlIGFscmVhZHkgY29ubmVjdCB0byBzb21lIEFQICAqLworICAgIHdkLT5zdGEuYlNjaGVkdWxlU2NhbiA9IEZBTFNFOworCisgICAgemZUaW1lckNhbmNlbChkZXYsIFpNX0VWRU5UX1RJTUVPVVRfU0NBTik7CisgICAgemZUaW1lckNhbmNlbChkZXYsIFpNX0VWRU5UX0lOX1NDQU4pOworCisgICAgd2QtPnN0YS5iQ2hhbm5lbFNjYW4gPSBGQUxTRTsKKyAgICB3ZC0+c3RhLnNjYW5GcmVxdWVuY3kgPSAwOworCisgICAgaWYgKCB3ZC0+c3RhLnNjYW5NZ3Iuc2NhblJlcXNbdGhlT3RoZXJTY2FuIC0gMV0gKQorICAgIHsKKyAgICAgICAgd2QtPnN0YS5zY2FuTWdyLmN1cnJTY2FuVHlwZSA9IHRoZU90aGVyU2NhbjsKKworICAgICAgICAvLyBTY2hlZHVsZSB0aGUgb3RoZXIgc2NhbiBhZnRlciAxIHNlY29uZCBsYXRlcgorICAgICAgICB6ZlRpbWVyU2NoZWR1bGUoZGV2LCBaTV9FVkVOVF9TQ0FOLCAxMDApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB3ZC0+c3RhLnNjYW5NZ3IuY3VyclNjYW5UeXBlID0gWk1fU0NBTl9NR1JfU0NBTl9OT05FOworICAgIH0KKworc3RvcF9kb25lOgorICAgIHdkLT5zdGEuc2Nhbk1nci5zY2FuUmVxc1tzY2FuVHlwZSAtIDFdID0gMDsKKworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAvKiBhdm9pZCBsb3NlIHJlY2VpdmUgcGFja2V0IHdoZW4gc2l0ZSBzdXJ2ZXkgKi8KKyAgICBpZiAoKHpmU3RhSXNDb25uZWN0ZWQoZGV2KSkgJiYgKCF6ZlBvd2VyU2F2aW5nTWdySXNTbGVlcGluZyhkZXYpKSkKKyAgICB7CisgICAgICAgIHpmU2VuZE51bGxEYXRhKGRldiwgMCk7CisgICAgfQorCisgICAgaWYgKCBzY2FuTm90aWZ5UmVxdWlyZWQgKQorICAgIHsKKyAgICAgICAgem1fZGVidWdfbXNnMCgiU2NhbiBub3RpZnkgYWZ0ZXIgcmVzZXQiKTsKKyAgICAgICAgaWYgKHdkLT56ZmNiU2Nhbk5vdGlmeSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+emZjYlNjYW5Ob3RpZnkoZGV2LCBOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybjsKKworZG9uZToKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIHJldHVybjsKK30KKwordm9pZCB6ZlNjYW5NZ3JTY2FuQWNrKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgd2QtPnN0YS5zY2FuTWdyLnNjYW5TdGFydERlbGF5ID0gMzsKKyAgICAvL3dkLT5zdGEuc2Nhbk1nci5zY2FuU3RhcnREZWxheSA9IDA7CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIHJldHVybjsKK30KKworZXh0ZXJuIHZvaWQgemZTdGFSZWNvbm5lY3QoemRldl90KiBkZXYpOworCitzdGF0aWMgdm9pZCB6ZlNjYW5TZW5kUHJvYmVSZXF1ZXN0KHpkZXZfdCogZGV2KQoreworICAgIHU4X3QgazsKKyAgICB1MTZfdCAgZHN0WzNdID0geyAweGZmZmYsIDB4ZmZmZiwgMHhmZmZmIH07CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvKiBJbmNyZWFzZSByeEJlYWNvbkNvdW50IHRvIHByZXZlbnQgYmVhY29uIGxvc3QgKi8KKyAgICBpZiAoemZTdGFJc0Nvbm5lY3RlZChkZXYpKQorICAgIHsKKyAgICAgICAgd2QtPnN0YS5yeEJlYWNvbkNvdW50Kys7CisgICAgfQorCisgICAgaWYgKCB3ZC0+c3RhLmJQYXNzaXZlU2NhbiApCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8qIGVuYWJsZSA4MDIubDExaCBhbmQgaW4gREZTIEJhbmQgLCBkaXNhYmxlIHNlbmRpbmcgcHJvYmUgcmVxdWVzdCAqLworICAgIGlmICh3ZC0+c3RhLkRGU0VuYWJsZSkKKyAgICB7CisgICAgICAgIGlmICh6ZkhwSXNEZnNDaGFubmVsKGRldiwgd2QtPnN0YS5zY2FuRnJlcXVlbmN5KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgemZTZW5kTW1GcmFtZShkZXYsIFpNX1dMQU5fRlJBTUVfVFlQRV9QUk9CRVJFUSwgZHN0LCAwLCAwLCAwKTsKKworICAgIGlmICggd2QtPnN0YS5kaXNhYmxlUHJvYmluZ1dpdGhTc2lkICkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKGs9MTsgazw9Wk1fTUFYX1BST0JFX0hJRERFTl9TU0lEX1NJWkU7IGsrKykKKyAgICB7CisgICAgICAgIGlmICggd2QtPndzLnByb2JpbmdTc2lkTGlzdFtrLTFdLnNzaWRMZW4gIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmU2VuZE1tRnJhbWUoZGV2LCBaTV9XTEFOX0ZSQU1FX1RZUEVfUFJPQkVSRVEsIGRzdCwgaywgMCwgMCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHpmU2Nhbk1nckV2ZW50U2V0RnJlcUNvbXBsZXRlQ2IoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworLy9wcmludGsoInpmU2Nhbk1nckV2ZW50U2V0RnJlcUNvbXBsZXRlQ2IgIzFcbiIpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICB6ZlRpbWVyU2NoZWR1bGUoZGV2LCBaTV9FVkVOVF9JTl9TQ0FOLCBaTV9USUNLX0lOX1NDQU4pOworICAgIGlmICh3ZC0+c3RhLmJQYXNzaXZlU2NhbikKKyAgICB7CisgICAgICAgIHpmVGltZXJTY2hlZHVsZShkZXYsIFpNX0VWRU5UX1RJTUVPVVRfU0NBTiwgd2QtPnN0YS5wYXNzaXZlU2NhblRpY2tQZXJDaGFubmVsKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgemZUaW1lclNjaGVkdWxlKGRldiwgWk1fRVZFTlRfVElNRU9VVF9TQ0FOLCB3ZC0+c3RhLmFjdGl2ZXNjYW5UaWNrUGVyQ2hhbm5lbCk7CisgICAgfQorICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICB6ZlNjYW5TZW5kUHJvYmVSZXF1ZXN0KGRldik7Cit9CisKKworc3RhdGljIHZvaWQgemZTY2FuTWdyRXZlbnRTY2FuQ29tcGxldGVDYih6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAoKHpmU3RhSXNDb25uZWN0ZWQoZGV2KSkgJiYgKCF6ZlBvd2VyU2F2aW5nTWdySXNTbGVlcGluZyhkZXYpKSkKKyAgICB7CisgICAgICAgIHpmU2VuZE51bGxEYXRhKGRldiwgMCk7CisgICAgfQorICAgIHJldHVybjsKK30KKworCit2b2lkIHpmU2Nhbk1nclNjYW5FdmVudFJldHJ5KHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGlmICggIXdkLT5zdGEuYkNoYW5uZWxTY2FuICkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoICF3ZC0+c3RhLmJQYXNzaXZlU2NhbiApCisgICAgeworICAgICAgICB6ZlNjYW5TZW5kUHJvYmVSZXF1ZXN0KGRldik7CisgICAgICAgICNpZiAwCisgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHpmVGltZXJTY2hlZHVsZShkZXYsIFpNX0VWRU5UX0lOX1NDQU4sIFpNX1RJQ0tfSU5fU0NBTik7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICNlbmRpZgorICAgIH0KK30KKwordThfdCB6ZlNjYW5NZ3JTY2FuRXZlbnRUaW1lb3V0KHpkZXZfdCogZGV2KQoreworICAgIHUxNl90ICAgbmV4dFNjYW5GcmVxdWVuY3kgPSAwOworICAgIHU4X3QgICAgdGVtcDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIGlmICggd2QtPnN0YS5zY2FuRnJlcXVlbmN5ID09IDAgKQorICAgIHsKKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIG5leHRTY2FuRnJlcXVlbmN5ID0gemZDaEdldE5leHRDaGFubmVsKGRldiwgd2QtPnN0YS5zY2FuRnJlcXVlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3ZC0+c3RhLmJQYXNzaXZlU2Nhbik7CisKKyAgICBpZiAoIChuZXh0U2NhbkZyZXF1ZW5jeSA9PSAweGZmZmYpCisgICAgICAgICB8fCAod2QtPnN0YS5zY2FuRnJlcXVlbmN5ID09IHpmQ2hHZXRMYXN0Q2hhbm5lbChkZXYsICZ0ZW1wKSkgKQorICAgIHsKKyAgICAgICAgdThfdCBjdXJyU2NhblR5cGU7CisgICAgICAgIHU4X3QgaXNFeHRlcm5hbFNjYW4gPSAwOworICAgICAgICB1OF90IGlzSW50ZXJuYWxTY2FuID0gMDsKKworICAgICAgICAvL3ptX2RlYnVnX21zZzEoImVuZCBzY2FuID0gIiwgS2VRdWVyeUludGVycnVwdFRpbWUoKSk7CisgICAgICAgIHdkLT5zdGEuc2NhbkZyZXF1ZW5jeSA9IDA7CisKKyAgICAgICAgem1fZGVidWdfbXNnMSgic2NhbiAxIHR5cGU6ICIsIHdkLT5zdGEuc2Nhbk1nci5jdXJyU2NhblR5cGUpOworICAgICAgICB6bV9kZWJ1Z19tc2cxKCJzY2FuIGNoYW5uZWwgY291bnQgPSAiLCB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbENudCk7CisKKyAgICAgICAgLy96ZkJzc0luZm9SZWZyZXNoKGRldik7CisgICAgICAgIHpmVGltZXJDYW5jZWwoZGV2LCBaTV9FVkVOVF9USU1FT1VUX1NDQU4pOworCisgICAgICAgIGlmICggd2QtPnN0YS5iQ2hhbm5lbFNjYW4gPT0gRkFMU0UgKQorICAgICAgICB7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJXT1chISBzY2FuIGlzIGNhbmNlbGxlZFxuIik7CisgICAgICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgZ290byByZXBvcnRfc2Nhbl9yZXN1bHQ7CisgICAgICAgIH0KKworCisgICAgICAgIGN1cnJTY2FuVHlwZSA9IHdkLT5zdGEuc2Nhbk1nci5jdXJyU2NhblR5cGU7CisgICAgICAgIHN3aXRjaChjdXJyU2NhblR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgWk1fU0NBTl9NR1JfU0NBTl9FWFRFUk5BTDoKKyAgICAgICAgICAgICAgICBpc0V4dGVybmFsU2NhbiA9IDE7CisKKyAgICAgICAgICAgICAgICBpZiAoIHdkLT5zdGEuc2Nhbk1nci5zY2FuUmVxc1taTV9TQ0FOX01HUl9TQ0FOX0lOVEVSTkFMIC0gMV0gKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5zY2FuTWdyLnNjYW5SZXFzW1pNX1NDQU5fTUdSX1NDQU5fSU5URVJOQUwgLSAxXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlzSW50ZXJuYWxTY2FuID0gMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBaTV9TQ0FOX01HUl9TQ0FOX0lOVEVSTkFMOgorICAgICAgICAgICAgICAgIGlzSW50ZXJuYWxTY2FuID0gMTsKKworICAgICAgICAgICAgICAgIGlmICggd2QtPnN0YS5zY2FuTWdyLnNjYW5SZXFzW1pNX1NDQU5fTUdSX1NDQU5fRVhURVJOQUwgLSAxXSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIHRoZSBleHRlcm5hbCBzY2FuIHNob3VsZCBwcmUtZW1wdHMgaW50ZXJuYWwgc2Nhbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gU28gdGhpcyBzaGFsbCBub3QgYmUgaGFwcGVuZWQhIQorICAgICAgICAgICAgICAgICAgICB6bV9hc3NlcnQoMCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgem1fYXNzZXJ0KDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgd2QtPnN0YS5zY2FuTWdyLnNjYW5SZXFzW2N1cnJTY2FuVHlwZSAtIDFdID0gMDsKKyAgICAgICAgd2QtPnN0YS5zY2FuTWdyLnNjYW5TdGFydERlbGF5ID0gMTAwOworICAgICAgICB3ZC0+c3RhLnNjYW5NZ3IuY3VyclNjYW5UeXBlID0gWk1fU0NBTl9NR1JfU0NBTl9OT05FOworICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgIC8vU2V0IGNoYW5uZWwgYWNjb3JkaW5nIHRvIEFQJ3MgY29uZmlndXJhdGlvbgorICAgICAgICB6ZkNvcmVTZXRGcmVxdWVuY3lFeChkZXYsIHdkLT5mcmVxdWVuY3ksIHdkLT5CYW5kV2lkdGg0MCwKKyAgICAgICAgICAgICAgICB3ZC0+RXh0T2Zmc2V0LCB6ZlNjYW5NZ3JFdmVudFNjYW5Db21wbGV0ZUNiKTsKKworICAgICAgICB3ZC0+c3RhLmJDaGFubmVsU2NhbiA9IEZBTFNFOworCisgICAgICAgICNpZiAxCisgICAgICAgIGlmICh6ZlN0YUlzQ29ubmVjdGVkKGRldikpCisgICAgICAgIHsgLy8gRmluaXNoIHNpdGUgc3VydmV5LCByZXNldCB0aGUgdmFyaWFibGUgdG8gZGV0ZWN0IHVzaW5nIHdyb25nIGZyZXF1ZW5jeSAhCisgICAgICAgICAgICB6ZkhwRmluaXNoU2l0ZVN1cnZleShkZXYsIDEpOworICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIHdkLT5zdGEuaWJzc1NpdGVTdXJ2ZXlTdGF0dXMgPSAyOworICAgICAgICAgICAgd2QtPnRpY2tJYnNzUmVjZWl2ZUJlYWNvbiA9IDA7CisgICAgICAgICAgICB3ZC0+c3RhLmlic3NSZWNlaXZlQmVhY29uQ291bnQgPSAwOworICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICAgICAgLyogIzUgUmUtZW5hYmxlIFJJRlMgZnVuY3Rpb24gYWZ0ZXIgdGhlIHNpdGUgc3VydmV5ICEgKi8KKyAgICAgICAgICAgIC8qIFRoaXMgaXMgYmVjYXVzZSBzd2l0Y2ggYmFuZCB3aWxsIHJlc2V0IHRoZSBCQiByZWdpc3RlciB0byBpbml0aWFsIHZhbHVlICovCisgICAgICAgICAgICBpZiggd2QtPnN0YS5yaWZzU3RhdGUgPT0gWk1fUklGU19TVEFURV9ERVRFQ1RFRCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZIcEVuYWJsZVJpZnMoZGV2LCAoKHdkLT5zdGEuY3VycmVudEZyZXF1ZW5jeTwzMDAwKT8xOjApLCB3ZC0+c3RhLkVuYWJsZUhULCB3ZC0+c3RhLkhUMjA0MCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB6ZkhwRmluaXNoU2l0ZVN1cnZleShkZXYsIDApOworICAgICAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIHdkLT5zdGEuaWJzc1NpdGVTdXJ2ZXlTdGF0dXMgPSAwOworICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgfQorICAgICAgICAjZW5kaWYKKworcmVwb3J0X3NjYW5fcmVzdWx0OgorICAgICAgICAvKiBhdm9pZCBsb3NlIHJlY2VpdmUgcGFja2V0IHdoZW4gc2l0ZSBzdXJ2ZXkgKi8KKyAgICAgICAgLy9pZiAoKHpmU3RhSXNDb25uZWN0ZWQoZGV2KSkgJiYgKCF6ZlBvd2VyU2F2aW5nTWdySXNTbGVlcGluZyhkZXYpKSkKKyAgICAgICAgLy97CisgICAgICAgIC8vICAgIHpmU2VuZE51bGxEYXRhKGRldiwgMCk7CisgICAgICAgIC8vfQorCisgICAgICAgIGlmICggaXNFeHRlcm5hbFNjYW4gKS8vUXVpY2tseSByZWJvb3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdkLT56ZmNiU2Nhbk5vdGlmeSAhPSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT56ZmNiU2Nhbk5vdGlmeShkZXYsIE5VTEwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCBpc0ludGVybmFsU2NhbiApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vd2QtPnN0YS5JbnRlcm5hbFNjYW5SZXEgPSAwOworICAgICAgICAgICAgemZTdGFSZWNvbm5lY3QoZGV2KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB3ZC0+c3RhLnNjYW5GcmVxdWVuY3kgPSBuZXh0U2NhbkZyZXF1ZW5jeTsKKworICAgICAgICAvL3ptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHpmVGltZXJDYW5jZWwoZGV2LCBaTV9FVkVOVF9JTl9TQ0FOKTsKKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICB6bV9kZWJ1Z19tc2cwKCJzY2FuIDIiKTsKKyAgICAgICAgemZDb3JlU2V0RnJlcXVlbmN5VjIoZGV2LCB3ZC0+c3RhLnNjYW5GcmVxdWVuY3ksIHpmU2Nhbk1nckV2ZW50U2V0RnJlcUNvbXBsZXRlQ2IpOworCisgICAgICAgIHJldHVybiAxOworICAgIH0KK30KKwordm9pZCB6ZlNjYW5NZ3JTY2FuRXZlbnRTdGFydCh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgaWYgKCB3ZC0+c3RhLmJDaGFubmVsU2NhbiApCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgemZQb3dlclNhdmluZ01ncldha2V1cChkZXYpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlmICggd2QtPnN0YS5zY2FuTWdyLmN1cnJTY2FuVHlwZSA9PSBaTV9TQ0FOX01HUl9TQ0FOX05PTkUgKQorICAgIHsKKyAgICAgICAgZ290byBub19zY2FuOworICAgIH0KKworICAgIC8vemZCc3NJbmZvUmVmcmVzaChkZXYpOworICAgIHpmQnNzSW5mb1JlZnJlc2goZGV2LCAwKTsKKyAgICB3ZC0+c3RhLmJDaGFubmVsU2NhbiA9IFRSVUU7CisgICAgd2QtPnN0YS5iU2NoZWR1bGVTY2FuID0gRkFMU0U7CisgICAgemZUaW1lckNhbmNlbChkZXYsIFpNX0VWRU5UX0lOX1NDQU4pOworICAgIHpmVGltZXJDYW5jZWwoZGV2LCBaTV9FVkVOVF9USU1FT1VUX1NDQU4pOworCisgICAgLy96bV9kZWJ1Z19tc2cxKCJzdGFydCBzY2FuID0gIiwgS2VRdWVyeUludGVycnVwdFRpbWUoKSk7CisgICAgd2QtPnN0YS5zY2FuRnJlcXVlbmN5ID0gemZDaEdldEZpcnN0Q2hhbm5lbChkZXYsICZ3ZC0+c3RhLmJQYXNzaXZlU2Nhbik7CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIC8qIGF2b2lkIGxvc2UgcmVjZWl2ZSBwYWNrZXQgd2hlbiBzaXRlIHN1cnZleSAqLworICAgIC8vaWYgKCh6ZlN0YUlzQ29ubmVjdGVkKGRldikpICYmICghemZQb3dlclNhdmluZ01ncklzU2xlZXBpbmcoZGV2KSkpCisgICAgLy97CisgICAgLy8gICAgemZTZW5kTnVsbERhdGEoZGV2LCAxKTsKKyAgICAvL30KKy8vICAgIHptX2RlYnVnX21zZzAoInNjYW4gMCIpOworLy8gICAgemZDb3JlU2V0RnJlcXVlbmN5VjIoZGV2LCB3ZC0+c3RhLnNjYW5GcmVxdWVuY3ksIHpmU2Nhbk1nckV2ZW50U2V0RnJlcUNvbXBsZXRlQ2IpOworCisgICAgI2lmIDEKKyAgICBpZiAoemZTdGFJc0Nvbm5lY3RlZChkZXYpKQorICAgIHsvLyBJZiBkb2luZyBzaXRlIHN1cnZleSAhCisgICAgICAgIHpmSHBCZWdpblNpdGVTdXJ2ZXkoZGV2LCAxKTsKKyAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgd2QtPnN0YS5pYnNzU2l0ZVN1cnZleVN0YXR1cyA9IDE7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHpmSHBCZWdpblNpdGVTdXJ2ZXkoZGV2LCAwKTsKKyAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgd2QtPnN0YS5pYnNzU2l0ZVN1cnZleVN0YXR1cyA9IDA7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgfQorICAgICNlbmRpZgorCisgICAgem1fZGVidWdfbXNnMCgic2NhbiAwIik7CisgICAgemZDb3JlU2V0RnJlcXVlbmN5VjIoZGV2LCB3ZC0+c3RhLnNjYW5GcmVxdWVuY3ksIHpmU2Nhbk1nckV2ZW50U2V0RnJlcUNvbXBsZXRlQ2IpOworCisgICAgcmV0dXJuOworCitub19zY2FuOgorICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2N0a2lwLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3RraXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTQyZjdhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2N0a2lwLmMKQEAgLTAsMCArMSw1OTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBNb2R1bGUgTmFtZSA6IGN0a2lwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEFic3RyYWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgVGhpcyBtb2R1bGUgY29udGFpbnMgVHggYW5kIFJ4IGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE5PVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJjcHJlY29tcC5oIgorCit1MTZfdCB6Z1RraXBTYm94TG93ZXJbMjU2XSA9CisgICAgeworICAgICAgICAweEE1LDB4ODQsMHg5OSwweDhELDB4MEQsMHhCRCwweEIxLDB4NTQsCisgICAgICAgIDB4NTAsMHgwMywweEE5LDB4N0QsMHgxOSwweDYyLDB4RTYsMHg5QSwKKyAgICAgICAgMHg0NSwweDlELDB4NDAsMHg4NywweDE1LDB4RUIsMHhDOSwweDBCLAorICAgICAgICAweEVDLDB4NjcsMHhGRCwweEVBLDB4QkYsMHhGNywweDk2LDB4NUIsCisgICAgICAgIDB4QzIsMHgxQywweEFFLDB4NkEsMHg1QSwweDQxLDB4MDIsMHg0RiwKKyAgICAgICAgMHg1QywweEY0LDB4MzQsMHgwOCwweDkzLDB4NzMsMHg1MywweDNGLAorICAgICAgICAweDBDLDB4NTIsMHg2NSwweDVFLDB4MjgsMHhBMSwweDBGLDB4QjUsCisgICAgICAgIDB4MDksMHgzNiwweDlCLDB4M0QsMHgyNiwweDY5LDB4Q0QsMHg5RiwKKyAgICAgICAgMHgxQiwweDlFLDB4NzQsMHgyRSwweDJELDB4QjIsMHhFRSwweEZCLAorICAgICAgICAweEY2LDB4NEQsMHg2MSwweENFLDB4N0IsMHgzRSwweDcxLDB4OTcsCisgICAgICAgIDB4RjUsMHg2OCwweDAwLDB4MkMsMHg2MCwweDFGLDB4QzgsMHhFRCwKKyAgICAgICAgMHhCRSwweDQ2LDB4RDksMHg0QiwweERFLDB4RDQsMHhFOCwweDRBLAorICAgICAgICAweDZCLDB4MkEsMHhFNSwweDE2LDB4QzUsMHhENywweDU1LDB4OTQsCisgICAgICAgIDB4Q0YsMHgxMCwweDA2LDB4ODEsMHhGMCwweDQ0LDB4QkEsMHhFMywKKyAgICAgICAgMHhGMywweEZFLDB4QzAsMHg4QSwweEFELDB4QkMsMHg0OCwweDA0LAorICAgICAgICAweERGLDB4QzEsMHg3NSwweDYzLDB4MzAsMHgxQSwweDBFLDB4NkQsCisgICAgICAgIDB4NEMsMHgxNCwweDM1LDB4MkYsMHhFMSwweEEyLDB4Q0MsMHgzOSwKKyAgICAgICAgMHg1NywweEYyLDB4ODIsMHg0NywweEFDLDB4RTcsMHgyQiwweDk1LAorICAgICAgICAweEEwLDB4OTgsMHhEMSwweDdGLDB4NjYsMHg3RSwweEFCLDB4ODMsCisgICAgICAgIDB4Q0EsMHgyOSwweEQzLDB4M0MsMHg3OSwweEUyLDB4MUQsMHg3NiwKKyAgICAgICAgMHgzQiwweDU2LDB4NEUsMHgxRSwweERCLDB4MEEsMHg2QywweEU0LAorICAgICAgICAweDVELDB4NkUsMHhFRiwweEE2LDB4QTgsMHhBNCwweDM3LDB4OEIsCisgICAgICAgIDB4MzIsMHg0MywweDU5LDB4QjcsMHg4QywweDY0LDB4RDIsMHhFMCwKKyAgICAgICAgMHhCNCwweEZBLDB4MDcsMHgyNSwweEFGLDB4OEUsMHhFOSwweDE4LAorICAgICAgICAweEQ1LDB4ODgsMHg2RiwweDcyLDB4MjQsMHhGMSwweEM3LDB4NTEsCisgICAgICAgIDB4MjMsMHg3QywweDlDLDB4MjEsMHhERCwweERDLDB4ODYsMHg4NSwKKyAgICAgICAgMHg5MCwweDQyLDB4QzQsMHhBQSwweEQ4LDB4MDUsMHgwMSwweDEyLAorICAgICAgICAweEEzLDB4NUYsMHhGOSwweEQwLDB4OTEsMHg1OCwweDI3LDB4QjksCisgICAgICAgIDB4MzgsMHgxMywweEIzLDB4MzMsMHhCQiwweDcwLDB4ODksMHhBNywKKyAgICAgICAgMHhCNiwweDIyLDB4OTIsMHgyMCwweDQ5LDB4RkYsMHg3OCwweDdBLAorICAgICAgICAweDhGLDB4RjgsMHg4MCwweDE3LDB4REEsMHgzMSwweEM2LDB4QjgsCisgICAgICAgIDB4QzMsMHhCMCwweDc3LDB4MTEsMHhDQiwweEZDLDB4RDYsMHgzQQorICAgIH07CisKKwordTE2X3QgemdUa2lwU2JveFVwcGVyWzI1Nl0gPQorICAgIHsKKyAgICAgICAgMHhDNiwweEY4LDB4RUUsMHhGNiwweEZGLDB4RDYsMHhERSwweDkxLAorICAgICAgICAweDYwLDB4MDIsMHhDRSwweDU2LDB4RTcsMHhCNSwweDRELDB4RUMsCisgICAgICAgIDB4OEYsMHgxRiwweDg5LDB4RkEsMHhFRiwweEIyLDB4OEUsMHhGQiwKKyAgICAgICAgMHg0MSwweEIzLDB4NUYsMHg0NSwweDIzLDB4NTMsMHhFNCwweDlCLAorICAgICAgICAweDc1LDB4RTEsMHgzRCwweDRDLDB4NkMsMHg3RSwweEY1LDB4ODMsCisgICAgICAgIDB4NjgsMHg1MSwweEQxLDB4RjksMHhFMiwweEFCLDB4NjIsMHgyQSwKKyAgICAgICAgMHgwOCwweDk1LDB4NDYsMHg5RCwweDMwLDB4MzcsMHgwQSwweDJGLAorICAgICAgICAweDBFLDB4MjQsMHgxQiwweERGLDB4Q0QsMHg0RSwweDdGLDB4RUEsCisgICAgICAgIDB4MTIsMHgxRCwweDU4LDB4MzQsMHgzNiwweERDLDB4QjQsMHg1QiwKKyAgICAgICAgMHhBNCwweDc2LDB4QjcsMHg3RCwweDUyLDB4REQsMHg1RSwweDEzLAorICAgICAgICAweEE2LDB4QjksMHgwMCwweEMxLDB4NDAsMHhFMywweDc5LDB4QjYsCisgICAgICAgIDB4RDQsMHg4RCwweDY3LDB4NzIsMHg5NCwweDk4LDB4QjAsMHg4NSwKKyAgICAgICAgMHhCQiwweEM1LDB4NEYsMHhFRCwweDg2LDB4OUEsMHg2NiwweDExLAorICAgICAgICAweDhBLDB4RTksMHgwNCwweEZFLDB4QTAsMHg3OCwweDI1LDB4NEIsCisgICAgICAgIDB4QTIsMHg1RCwweDgwLDB4MDUsMHgzRiwweDIxLDB4NzAsMHhGMSwKKyAgICAgICAgMHg2MywweDc3LDB4QUYsMHg0MiwweDIwLDB4RTUsMHhGRCwweEJGLAorICAgICAgICAweDgxLDB4MTgsMHgyNiwweEMzLDB4QkUsMHgzNSwweDg4LDB4MkUsCisgICAgICAgIDB4OTMsMHg1NSwweEZDLDB4N0EsMHhDOCwweEJBLDB4MzIsMHhFNiwKKyAgICAgICAgMHhDMCwweDE5LDB4OUUsMHhBMywweDQ0LDB4NTQsMHgzQiwweDBCLAorICAgICAgICAweDhDLDB4QzcsMHg2QiwweDI4LDB4QTcsMHhCQywweDE2LDB4QUQsCisgICAgICAgIDB4REIsMHg2NCwweDc0LDB4MTQsMHg5MiwweDBDLDB4NDgsMHhCOCwKKyAgICAgICAgMHg5RiwweEJELDB4NDMsMHhDNCwweDM5LDB4MzEsMHhEMywweEYyLAorICAgICAgICAweEQ1LDB4OEIsMHg2RSwweERBLDB4MDEsMHhCMSwweDlDLDB4NDksCisgICAgICAgIDB4RDgsMHhBQywweEYzLDB4Q0YsMHhDQSwweEY0LDB4NDcsMHgxMCwKKyAgICAgICAgMHg2RiwweEYwLDB4NEEsMHg1QywweDM4LDB4NTcsMHg3MywweDk3LAorICAgICAgICAweENCLDB4QTEsMHhFOCwweDNFLDB4OTYsMHg2MSwweDBELDB4MEYsCisgICAgICAgIDB4RTAsMHg3QywweDcxLDB4Q0MsMHg5MCwweDA2LDB4RjcsMHgxQywKKyAgICAgICAgMHhDMiwweDZBLDB4QUUsMHg2OSwweDE3LDB4OTksMHgzQSwweDI3LAorICAgICAgICAweEQ5LDB4RUIsMHgyQiwweDIyLDB4RDIsMHhBOSwweDA3LDB4MzMsCisgICAgICAgIDB4MkQsMHgzQywweDE1LDB4QzksMHg4NywweEFBLDB4NTAsMHhBNSwKKyAgICAgICAgMHgwMywweDU5LDB4MDksMHgxQSwweDY1LDB4RDcsMHg4NCwweEQwLAorICAgICAgICAweDgyLDB4MjksMHg1QSwweDFFLDB4N0IsMHhBOCwweDZELDB4MkMKKyAgICB9OworCit1MTZfdCB6ZnJvdHIxKHUxNl90IGEpCisvLyByb3RhdGUgcmlnaHQgYnkgMSBiaXQuCit7CisgICAgdTE2X3QgYjsKKworICAgIGlmIChhICYgMHgwMSkKKyAgICB7CisgICAgICAgIGIgPSAoYSA+PiAxKSB8IDB4ODAwMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYiA9IChhID4+IDEpICYgMHg3ZmZmOworICAgIH0KKyAgICByZXR1cm4gYjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiB6ZlRraXBTYm94KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFJldHVybnMgYSAxNiBiaXQgdmFsdWUgZnJvbSBhIDY0SyBlbnRyeSB0YWJsZS4gVGhlIFRhYmxlICAqLworLyogaXMgc3ludGhlc2l6ZWQgZnJvbSB0d28gMjU2IGVudHJ5IGJ5dGUgd2lkZSB0YWJsZXMuICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90IHpmVGtpcFNib3godTE2X3QgaW5kZXgpCit7CisgICAgdTE2X3QgICBsb3c7CisgICAgdTE2X3QgICBoaWdoOworICAgIHUxNl90ICAgbGVmdCwgcmlnaHQ7CisKKyAgICBsb3cgPSAoaW5kZXggJiAweEZGKTsKKyAgICBoaWdoID0gKChpbmRleCA+PiA4KSAmIDB4RkYpOworCisgICAgbGVmdCA9IHpnVGtpcFNib3hMb3dlcltsb3ddICsgKHpnVGtpcFNib3hVcHBlcltsb3ddIDw8IDggKTsKKyAgICByaWdodCA9IHpnVGtpcFNib3hVcHBlcltoaWdoXSArICh6Z1RraXBTYm94TG93ZXJbaGlnaF0gPDwgOCApOworCisgICAgcmV0dXJuIChsZWZ0IF4gcmlnaHQpOworfQorCit1OF90IHpmVGtpcFBoYXNlMUtleU1peCh1MzJfdCBpdjMyLCBzdHJ1Y3QgenNUa2lwU2VlZCogcFNlZWQpCit7CisgICAgdTE2X3QgICB0c2MwOworICAgIHUxNl90ICAgdHNjMTsKKyAgICB1MTZfdCAgIGksIGo7CisjaWYgMAorICAgIC8qIE5lZWQgbm90IHByb2NlZWQgdGhpcyBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIGl2MzIgKi8KKyAgICBpZiAoIGl2MzIgPT0gcFNlZWQtPml2MzIgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorI2VuZGlmCisgICAgdHNjMCA9ICh1MTZfdCkgKChpdjMyID4+IDE2KSAmIDB4ZmZmZik7IC8qIG1zYiAqLworICAgIHRzYzEgPSAodTE2X3QpIChpdjMyICYgMHhmZmZmKTsKKworICAgIC8qIFBoYXNlIDEsIHN0ZXAgMSAqLworICAgIHBTZWVkLT50dGFrWzBdID0gdHNjMTsKKyAgICBwU2VlZC0+dHRha1sxXSA9IHRzYzA7CisgICAgcFNlZWQtPnR0YWtbMl0gPSAodTE2X3QpIChwU2VlZC0+dGFbMF0gKyAocFNlZWQtPnRhWzFdIDw8OCkpOworICAgIHBTZWVkLT50dGFrWzNdID0gKHUxNl90KSAocFNlZWQtPnRhWzJdICsgKHBTZWVkLT50YVszXSA8PDgpKTsKKyAgICBwU2VlZC0+dHRha1s0XSA9ICh1MTZfdCkgKHBTZWVkLT50YVs0XSArIChwU2VlZC0+dGFbNV0gPDw4KSk7CisKKyAgICAvKiBQaGFzZSAxLCBzdGVwIDIgKi8KKyAgICBmb3IgKGk9MDsgaTw4OyBpKyspCisgICAgeworICAgICAgICBqID0gMiooaSAmIDEpOworICAgICAgICBwU2VlZC0+dHRha1swXSA9KHBTZWVkLT50dGFrWzBdICsgemZUa2lwU2JveChwU2VlZC0+dHRha1s0XQorICAgICAgICAgICAgICAgICAgICAgICAgIF4gWk1fQllURV9UT19XT1JEKHBTZWVkLT50a1sxK2pdLCBwU2VlZC0+dGtbal0pKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYgMHhmZmZmOworICAgICAgICBwU2VlZC0+dHRha1sxXSA9KHBTZWVkLT50dGFrWzFdICsgemZUa2lwU2JveChwU2VlZC0+dHRha1swXQorICAgICAgICAgICAgICAgICAgICAgICAgIF4gWk1fQllURV9UT19XT1JEKHBTZWVkLT50a1s1K2pdLCBwU2VlZC0+dGtbNCtqXSApKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYgMHhmZmZmOworICAgICAgICBwU2VlZC0+dHRha1syXSA9KHBTZWVkLT50dGFrWzJdICsgemZUa2lwU2JveChwU2VlZC0+dHRha1sxXQorICAgICAgICAgICAgICAgICAgICAgICAgIF4gWk1fQllURV9UT19XT1JEKHBTZWVkLT50a1s5K2pdLCBwU2VlZC0+dGtbOCtqXSApKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYgMHhmZmZmOworICAgICAgICBwU2VlZC0+dHRha1szXSA9KHBTZWVkLT50dGFrWzNdICsgemZUa2lwU2JveChwU2VlZC0+dHRha1syXQorICAgICAgICAgICAgICAgICAgICAgICAgIF4gWk1fQllURV9UT19XT1JEKHBTZWVkLT50a1sxMytqXSwgcFNlZWQtPnRrWzEyK2pdKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAmIDB4ZmZmZjsKKyAgICAgICAgcFNlZWQtPnR0YWtbNF0gPShwU2VlZC0+dHRha1s0XSArIHpmVGtpcFNib3gocFNlZWQtPnR0YWtbM10KKyAgICAgICAgICAgICAgICAgICAgICAgICBeIFpNX0JZVEVfVE9fV09SRChwU2VlZC0+dGtbMStqXSwgcFNlZWQtPnRrW2pdICApKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYgMHhmZmZmOworICAgICAgICBwU2VlZC0+dHRha1s0XSA9KHBTZWVkLT50dGFrWzRdICsgaSkgJiAweGZmZmY7CisgICAgfQorCisgICAgaWYgKCBpdjMyID09IChwU2VlZC0+aXYzMisxKSApCisgICAgeworICAgICAgICBwU2VlZC0+aXYzMnRtcCA9IGl2MzI7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit1OF90IHpmVGtpcFBoYXNlMktleU1peCh1MTZfdCBpdjE2LCBzdHJ1Y3QgenNUa2lwU2VlZCogcFNlZWQpCit7CisgICAgdTE2X3QgdHNjMjsKKworICAgIHRzYzIgPSBpdjE2OworCisgICAgLyogUGhhc2UgMiwgU3RlcCAxICovCisgICAgcFNlZWQtPnBwa1swXSA9IHBTZWVkLT50dGFrWzBdOworICAgIHBTZWVkLT5wcGtbMV0gPSBwU2VlZC0+dHRha1sxXTsKKyAgICBwU2VlZC0+cHBrWzJdID0gcFNlZWQtPnR0YWtbMl07CisgICAgcFNlZWQtPnBwa1szXSA9IHBTZWVkLT50dGFrWzNdOworICAgIHBTZWVkLT5wcGtbNF0gPSBwU2VlZC0+dHRha1s0XTsKKyAgICBwU2VlZC0+cHBrWzVdID0gKHBTZWVkLT50dGFrWzRdICsgdHNjMikgJiAweGZmZmY7CisKKyAgICAvKiBQaGFzZTIsIFN0ZXAgMiAqLworICAgIHBTZWVkLT5wcGtbMF0gPSBwU2VlZC0+cHBrWzBdCisgICAgICAgICAgICAgICAgKyB6ZlRraXBTYm94KHBTZWVkLT5wcGtbNV0gXiBaTV9CWVRFX1RPX1dPUkQocFNlZWQtPnRrWzFdLHBTZWVkLT50a1swXSkpOworICAgIHBTZWVkLT5wcGtbMV0gPSBwU2VlZC0+cHBrWzFdCisgICAgICAgICAgICAgICAgKyB6ZlRraXBTYm94KHBTZWVkLT5wcGtbMF0gXiBaTV9CWVRFX1RPX1dPUkQocFNlZWQtPnRrWzNdLHBTZWVkLT50a1syXSkpOworICAgIHBTZWVkLT5wcGtbMl0gPSBwU2VlZC0+cHBrWzJdCisgICAgICAgICAgICAgICAgKyB6ZlRraXBTYm94KHBTZWVkLT5wcGtbMV0gXiBaTV9CWVRFX1RPX1dPUkQocFNlZWQtPnRrWzVdLHBTZWVkLT50a1s0XSkpOworICAgIHBTZWVkLT5wcGtbM10gPSBwU2VlZC0+cHBrWzNdCisgICAgICAgICAgICAgICAgKyB6ZlRraXBTYm94KHBTZWVkLT5wcGtbMl0gXiBaTV9CWVRFX1RPX1dPUkQocFNlZWQtPnRrWzddLHBTZWVkLT50a1s2XSkpOworICAgIHBTZWVkLT5wcGtbNF0gPSBwU2VlZC0+cHBrWzRdCisgICAgICAgICAgICAgICAgKyB6ZlRraXBTYm94KHBTZWVkLT5wcGtbM10gXiBaTV9CWVRFX1RPX1dPUkQocFNlZWQtPnRrWzldLHBTZWVkLT50a1s4XSkpOworICAgIHBTZWVkLT5wcGtbNV0gPSBwU2VlZC0+cHBrWzVdCisgICAgICAgICAgICAgICAgKyB6ZlRraXBTYm94KHBTZWVkLT5wcGtbNF0gXiBaTV9CWVRFX1RPX1dPUkQocFNlZWQtPnRrWzExXSxwU2VlZC0+dGtbMTBdKSk7CisKKyAgICBwU2VlZC0+cHBrWzBdID0gcFNlZWQtPnBwa1swXQorICAgICAgICAgICAgICAgICsgemZyb3RyMShwU2VlZC0+cHBrWzVdIF4gWk1fQllURV9UT19XT1JEKHBTZWVkLT50a1sxM10scFNlZWQtPnRrWzEyXSkpOworICAgIHBTZWVkLT5wcGtbMV0gPSBwU2VlZC0+cHBrWzFdCisgICAgICAgICAgICAgICAgKyB6ZnJvdHIxKHBTZWVkLT5wcGtbMF0gXiBaTV9CWVRFX1RPX1dPUkQocFNlZWQtPnRrWzE1XSxwU2VlZC0+dGtbMTRdKSk7CisgICAgcFNlZWQtPnBwa1syXSA9IHBTZWVkLT5wcGtbMl0gKyB6ZnJvdHIxKHBTZWVkLT5wcGtbMV0pOworICAgIHBTZWVkLT5wcGtbM10gPSBwU2VlZC0+cHBrWzNdICsgemZyb3RyMShwU2VlZC0+cHBrWzJdKTsKKyAgICBwU2VlZC0+cHBrWzRdID0gcFNlZWQtPnBwa1s0XSArIHpmcm90cjEocFNlZWQtPnBwa1szXSk7CisgICAgcFNlZWQtPnBwa1s1XSA9IHBTZWVkLT5wcGtbNV0gKyB6ZnJvdHIxKHBTZWVkLT5wcGtbNF0pOworCisgICAgaWYgKGl2MTYgPT0gMCkKKyAgICB7CisgICAgICAgIGlmIChwU2VlZC0+aXYxNiA9PSAweGZmZmYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBTZWVkLT5pdjE2dG1wPTA7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoaXYxNiA9PSAocFNlZWQtPml2MTYrMSkpCisgICAgeworICAgICAgICBwU2VlZC0+aXYxNnRtcCA9IGl2MTY7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCit2b2lkIHpmVGtpcEluaXQodThfdCoga2V5LCB1OF90KiB0YSwgc3RydWN0IHpzVGtpcFNlZWQqIHBTZWVkLCB1OF90KiBpbml0SXYpCit7CisgICAgdTE2X3QgIGl2MTY7CisgICAgdTMyX3QgIGl2MzI7CisgICAgdTE2X3QgIGk7CisKKyAgICAvKiBjbGVhciBtZW1vcnkgKi8KKyAgICB6Zlplcm9NZW1vcnkoKHU4X3QqKSBwU2VlZCwgc2l6ZW9mKHN0cnVjdCB6c1RraXBTZWVkKSk7CisgICAgLyogc2V0IGtleSB0byBzZWVkICovCisgICAgemZNZW1vcnlDb3B5KHBTZWVkLT50YSwgdGEsIDYpOworICAgIHpmTWVtb3J5Q29weShwU2VlZC0+dGssIGtleSwgMTYpOworCisgICAgaXYxNiA9ICppbml0SXYrKzsKKyAgICBpdjE2ICs9ICppbml0SXY8PDg7CisgICAgaW5pdEl2Kys7CisKKyAgICBpdjMyPTA7CisKKyAgICBmb3IoaT0wOyBpPDQ7IGkrKykgICAgICAvLyBpbml0aXYgaXMgbGl0dGxlIGVuZGlhbgorICAgIHsKKyAgICAgICAgaXYzMiArPSAqaW5pdEl2PDwoaSo4KTsKKyAgICAgICAgKmluaXRJdisrOworICAgIH0KKworICAgIHBTZWVkLT5pdjMyID0gaXYzMisxOyAvLyBGb3JjZSBSZWNhbGN1bGF0aW5nIG9uIFRraXAgUGhhc2UxCisgICAgemZUa2lwUGhhc2UxS2V5TWl4KGl2MzIsIHBTZWVkKTsKKworICAgIHBTZWVkLT5pdjE2ID0gaXYxNjsKKyAgICBwU2VlZC0+aXYzMiA9IGl2MzI7Cit9CisKK3UzMl90IHpmR2V0VTMydCh1OF90KiBwKQoreworICAgIHUzMl90IHJlcz0wOworICAgIHUxNl90IGk7CisKKyAgICBmb3IoIGk9MDsgaTw0OyBpKysgKQorICAgIHsKKyAgICAgICAgcmVzIHw9ICgqcCsrKSA8PCAoOCppKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzOworCit9CisKK3ZvaWQgemZQdXRVMzJ0KHU4X3QqIHAsIHUzMl90IHZhbHVlKQoreworICAgIHUxNl90IGk7CisKKyAgICBmb3IoaT0wOyBpPDQ7IGkrKykKKyAgICB7CisgICAgICAgICpwKysgPSAodThfdCkgKHZhbHVlICYgMHhmZik7CisgICAgICAgIHZhbHVlID4+PSA4OworICAgIH0KK30KKwordm9pZCB6Zk1pY0NsZWFyKHN0cnVjdCB6c01pY1ZhciogcE1pYykKK3sKKyAgICBwTWljLT5sZWZ0ID0gcE1pYy0+azA7CisgICAgcE1pYy0+cmlnaHQgPSBwTWljLT5rMTsKKyAgICBwTWljLT5uQnl0ZXMgPSAwOworICAgIHBNaWMtPm0gPSAwOworfQorCit2b2lkIHpmTWljU2V0S2V5KHU4X3QqIGtleSwgc3RydWN0IHpzTWljVmFyKiBwTWljKQoreworICAgIHBNaWMtPmswID0gemZHZXRVMzJ0KGtleSk7CisgICAgcE1pYy0+azEgPSB6ZkdldFUzMnQoa2V5KzQpOworICAgIHpmTWljQ2xlYXIocE1pYyk7Cit9CisKK3ZvaWQgemZNaWNBcHBlbmRCeXRlKHU4X3QgYiwgc3RydWN0IHpzTWljVmFyKiBwTWljKQoreworICAgIC8vIEFwcGVuZCB0aGUgYnl0ZSB0byBvdXIgd29yZC1zaXplZCBidWZmZXIKKyAgICBwTWljLT5tIHw9IGIgPDwgKDgqIHBNaWMtPm5CeXRlcyk7CisgICAgcE1pYy0+bkJ5dGVzKys7CisKKyAgICAvLyBQcm9jZXNzIHRoZSB3b3JkIGlmIGl0IGlzIGZ1bGwuCisgICAgaWYgKCBwTWljLT5uQnl0ZXMgPj0gNCApCisgICAgeworICAgICAgICBwTWljLT5sZWZ0IF49IHBNaWMtPm07CisgICAgICAgIHBNaWMtPnJpZ2h0IF49IFpNX1JPTDMyKHBNaWMtPmxlZnQsIDE3ICk7CisgICAgICAgIHBNaWMtPmxlZnQgKz0gcE1pYy0+cmlnaHQ7CisgICAgICAgIHBNaWMtPnJpZ2h0IF49ICgocE1pYy0+bGVmdCAmIDB4ZmYwMGZmMDApID4+IDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgKChwTWljLT5sZWZ0ICYgMHgwMGZmMDBmZikgPDwgOCk7CisgICAgICAgIHBNaWMtPmxlZnQgKz0gcE1pYy0+cmlnaHQ7CisgICAgICAgIHBNaWMtPnJpZ2h0IF49IFpNX1JPTDMyKCBwTWljLT5sZWZ0LCAzICk7CisgICAgICAgIHBNaWMtPmxlZnQgKz0gcE1pYy0+cmlnaHQ7CisgICAgICAgIHBNaWMtPnJpZ2h0IF49IFpNX1JPUjMyKCBwTWljLT5sZWZ0LCAyICk7CisgICAgICAgIHBNaWMtPmxlZnQgKz0gcE1pYy0+cmlnaHQ7CisgICAgICAgIC8vIENsZWFyIHRoZSBidWZmZXIKKyAgICAgICAgcE1pYy0+bSA9IDA7CisgICAgICAgIHBNaWMtPm5CeXRlcyA9IDA7CisgICAgfQorfQorCit2b2lkIHpmTWljR2V0TWljKHU4X3QqIGRzdCwgc3RydWN0IHpzTWljVmFyKiBwTWljKQoreworICAgIC8vIEFwcGVuZCB0aGUgbWluaW11bSBwYWRkaW5nCisgICAgemZNaWNBcHBlbmRCeXRlKDB4NWEsIHBNaWMpOworICAgIHpmTWljQXBwZW5kQnl0ZSgwLCBwTWljKTsKKyAgICB6Zk1pY0FwcGVuZEJ5dGUoMCwgcE1pYyk7CisgICAgemZNaWNBcHBlbmRCeXRlKDAsIHBNaWMpOworICAgIHpmTWljQXBwZW5kQnl0ZSgwLCBwTWljKTsKKworICAgIC8vIGFuZCB0aGVuIHplcm9lcyB1bnRpbCB0aGUgbGVuZ3RoIGlzIGEgbXVsdGlwbGUgb2YgNAorICAgIHdoaWxlKCBwTWljLT5uQnl0ZXMgIT0gMCApCisgICAgeworICAgICAgICB6Zk1pY0FwcGVuZEJ5dGUoMCwgcE1pYyk7CisgICAgfQorCisgICAgLy8gVGhlIGFwcGVuZEJ5dGUgZnVuY3Rpb24gaGFzIGFscmVhZHkgY29tcHV0ZWQgdGhlIHJlc3VsdC4KKyAgICB6ZlB1dFUzMnQoZHN0LCBwTWljLT5sZWZ0KTsKKyAgICB6ZlB1dFUzMnQoZHN0KzQsIHBNaWMtPnJpZ2h0KTsKKworICAgIC8vIFJlc2V0IHRvIHRoZSBlbXB0eSBtZXNzYWdlLgorICAgIHpmTWljQ2xlYXIocE1pYyk7CisKK30KKwordThfdCB6Zk1pY1J4VmVyaWZ5KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZikKK3sKKyAgICBzdHJ1Y3QgenNNaWNWYXIqICBwTWljS2V5OworICAgIHN0cnVjdCB6c01pY1ZhciAgICBNeU1pY0tleTsKKyAgICB1OF90ICAgbWljWzhdOworICAgIHU4X3QgICBkYVs2XTsKKyAgICB1OF90ICAgc2FbNl07CisgICAgdThfdCAgIGJWYWx1ZTsKKyAgICB1MTZfdCAgaSwgcGF5bG9hZE9mZnNldCwgdGFpbE9mZnNldDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8qIG5lZWQgbm90IGNoZWNrIE1JQyBpZiBwTWljS0V5IGlzIGVxdWFsIHRvIE5VTEwgKi8KKyAgICBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQICkKKyAgICB7CisgICAgICAgIHBNaWNLZXkgPSB6ZkFwR2V0UnhNaWNLZXkoZGV2LCBidWYpOworCisgICAgICAgIGlmICggcE1pY0tleSAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgemZDb3B5RnJvbVJ4QnVmZmVyKGRldiwgYnVmLCBzYSwgWk1fV0xBTl9IRUFERVJfQTJfT0ZGU0VULCA2KTsKKyAgICAgICAgICAgIHpmQ29weUZyb21SeEJ1ZmZlcihkZXYsIGJ1ZiwgZGEsIFpNX1dMQU5fSEVBREVSX0EzX09GRlNFVCwgNik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gWk1fTUlDX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFICkKKyAgICB7CisgICAgICAgIHBNaWNLZXkgPSB6ZlN0YUdldFJ4TWljS2V5KGRldiwgYnVmKTsKKworICAgICAgICBpZiAoIHBNaWNLZXkgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmQ29weUZyb21SeEJ1ZmZlcihkZXYsIGJ1Ziwgc2EsIFpNX1dMQU5fSEVBREVSX0EzX09GRlNFVCwgNik7CisgICAgICAgICAgICB6ZkNvcHlGcm9tUnhCdWZmZXIoZGV2LCBidWYsIGRhLCBaTV9XTEFOX0hFQURFUl9BMV9PRkZTRVQsIDYpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFpNX01JQ19TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBaTV9NSUNfU1VDQ0VTUzsKKyAgICB9CisKKyAgICBNeU1pY0tleS5rMD1wTWljS2V5LT5rMDsKKyAgICBNeU1pY0tleS5rMT1wTWljS2V5LT5rMTsKKyAgICBwTWljS2V5ID0gJk15TWljS2V5OworCisgICAgemZNaWNDbGVhcihwTWljS2V5KTsKKyAgICB0YWlsT2Zmc2V0ID0gemZ3QnVmR2V0U2l6ZShkZXYsIGJ1Zik7CisgICAgdGFpbE9mZnNldCAtPSA4OworCisgICAgLyogYXBwZW5kIERBICovCisgICAgZm9yKGk9MDsgaTw2OyBpKyspCisgICAgeworICAgICAgICB6Zk1pY0FwcGVuZEJ5dGUoZGFbaV0sIHBNaWNLZXkpOworICAgIH0KKyAgICAvKiBhcHBlbmQgU0EgKi8KKyAgICBmb3IoaT0wOyBpPDY7IGkrKykKKyAgICB7CisgICAgICAgIHpmTWljQXBwZW5kQnl0ZShzYVtpXSwgcE1pY0tleSk7CisgICAgfQorCisgICAgLyogYXBwZW5kIGZvciBhbGlnbm1lbnQgKi8KKyAgICBpZiAoKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDApICYgMHg4MCkgIT0gMCkKKyAgICAgICAgemZNaWNBcHBlbmRCeXRlKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsMjQpJjB4NywgcE1pY0tleSk7CisgICAgZWxzZQorICAgICAgICB6Zk1pY0FwcGVuZEJ5dGUoMCwgcE1pY0tleSk7CisgICAgemZNaWNBcHBlbmRCeXRlKDAsIHBNaWNLZXkpOworICAgIHpmTWljQXBwZW5kQnl0ZSgwLCBwTWljS2V5KTsKKyAgICB6Zk1pY0FwcGVuZEJ5dGUoMCwgcE1pY0tleSk7CisKKyAgICAvKiBhcHBlbmQgcGF5bG9hZCAqLworICAgIHBheWxvYWRPZmZzZXQgPSBaTV9TSVpFX09GX1dMQU5fREFUQV9IRUFERVIgKworICAgICAgICAgICAgICAgICAgICBaTV9TSVpFX09GX0lWICsKKyAgICAgICAgICAgICAgICAgICAgWk1fU0laRV9PRl9FWFRfSVY7CisKKyAgICBpZiAoKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDApICYgMHg4MCkgIT0gMCkKKyAgICB7CisgICAgICAgIC8qIFFvcyBQYWNrZXQsIFBsY3BoZWFkZXIgKyAyICovCisgICAgICAgIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogVE9ETyA6IFJ4IFFvcyBlbGVtZW50IG9mZnNldCBpbiBzb2Z0d2FyZSBNSUMgY2hlY2sgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdkLT5zdGEud21lQ29ubmVjdGVkICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGF5bG9hZE9mZnNldCArPSAyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yKGk9cGF5bG9hZE9mZnNldDsgaTx0YWlsT2Zmc2V0OyBpKyspCisgICAgeworICAgICAgICBiVmFsdWUgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBpKTsKKyAgICAgICAgemZNaWNBcHBlbmRCeXRlKGJWYWx1ZSwgcE1pY0tleSk7CisgICAgfQorCisgICAgemZNaWNHZXRNaWMobWljLCBwTWljS2V5KTsKKworICAgIGlmICggIXpmUnhCdWZmZXJFcXVhbFRvU3RyKGRldiwgYnVmLCBtaWMsIHRhaWxPZmZzZXQsIDgpICkKKyAgICB7CisgICAgICAgIHJldHVybiBaTV9NSUNfRkFJTFVSRTsKKyAgICB9CisKKyAgICByZXR1cm4gWk1fTUlDX1NVQ0NFU1M7Cit9CisKK3ZvaWQgemZUa2lwR2V0c2VlZHModTE2X3QgaXYxNiwgdThfdCAqUkM0S2V5LCBzdHJ1Y3QgenNUa2lwU2VlZCAqU2VlZCkKK3sKKyAgICBSQzRLZXlbMF0gID0gWk1fSEk4KGl2MTYpOworICAgIFJDNEtleVsxXSAgPSAoWk1fSEk4KGl2MTYpIHwgMHgyMCkgJiAweDdmOworICAgIFJDNEtleVsyXSAgPSBaTV9MTzgoaXYxNik7CisgICAgUkM0S2V5WzNdICA9ICgoU2VlZC0+cHBrWzVdIF4gWk1fQllURV9UT19XT1JEKFNlZWQtPnRrWzFdLFNlZWQtPnRrWzBdKSk+PjEpICYgMHhmZjsKKyAgICBSQzRLZXlbNF0gID0gU2VlZC0+cHBrWzBdICYgMHhmZjsKKyAgICBSQzRLZXlbNV0gID0gU2VlZC0+cHBrWzBdID4+IDg7CisgICAgUkM0S2V5WzZdICA9IFNlZWQtPnBwa1sxXSAmIDB4ZmY7CisgICAgUkM0S2V5WzddICA9IFNlZWQtPnBwa1sxXSA+PiA4OworICAgIFJDNEtleVs4XSAgPSBTZWVkLT5wcGtbMl0gJiAweGZmOworICAgIFJDNEtleVs5XSAgPSBTZWVkLT5wcGtbMl0gPj4gODsKKyAgICBSQzRLZXlbMTBdID0gU2VlZC0+cHBrWzNdICYgMHhmZjsKKyAgICBSQzRLZXlbMTFdID0gU2VlZC0+cHBrWzNdID4+IDg7CisgICAgUkM0S2V5WzEyXSA9IFNlZWQtPnBwa1s0XSAmIDB4ZmY7CisgICAgUkM0S2V5WzEzXSA9IFNlZWQtPnBwa1s0XSA+PiA4OworICAgIFJDNEtleVsxNF0gPSBTZWVkLT5wcGtbNV0gJiAweGZmOworICAgIFJDNEtleVsxNV0gPSBTZWVkLT5wcGtbNV0gPj4gODsKK30KKwordm9pZCB6ZkNhbFR4TWljKHpkZXZfdCAqZGV2LCB6YnVmX3QgKmJ1ZiwgdThfdCAqc25hcCwgdTE2X3Qgc25hcExlbiwgdTE2X3Qgb2Zmc2V0LCB1MTZfdCAqZGEsIHUxNl90ICpzYSwgdThfdCB1cCwgdThfdCAqbWljKQoreworICAgIHN0cnVjdCB6c01pY1ZhciogIHBNaWNLZXk7CisgICAgdTE2X3QgIGk7CisgICAgdTE2X3QgbGVuOworICAgIHU4X3QgYlZhbHVlOworICAgIHU4X3QgcW9zVHlwZTsKKyAgICB1OF90ICpwRGEgPSAodThfdCAqKWRhOworICAgIHU4X3QgKnBTYSA9ICh1OF90ICopc2E7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvKiBuZWVkIG5vdCBjaGVjayBNSUMgaWYgcE1pY0tFeSBpcyBlcXVhbCB0byBOVUxMICovCisgICAgaWYgKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCApCisgICAgeworICAgICAgICBwTWljS2V5ID0gemZBcEdldFR4TWljS2V5KGRldiwgYnVmLCAmcW9zVHlwZSk7CisKKyAgICAgICAgaWYgKCBwTWljS2V5ID09IE5VTEwgKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUgKQorICAgIHsKKyAgICAgICAgcE1pY0tleSA9IHpmU3RhR2V0VHhNaWNLZXkoZGV2LCBidWYpOworCisgICAgICAgIGlmICggcE1pY0tleSA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgicE1pY0tleSBpcyBOVUxMIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHpmTWljQ2xlYXIocE1pY0tleSk7CisgICAgbGVuID0gemZ3QnVmR2V0U2l6ZShkZXYsIGJ1Zik7CisKKyAgICAvKiBhcHBlbmQgREEgKi8KKyAgICBmb3IoaSA9IDA7IGkgPCA2OyBpKyspCisgICAgeworICAgICAgICB6Zk1pY0FwcGVuZEJ5dGUocERhW2ldLCBwTWljS2V5KTsKKyAgICB9CisKKyAgICAvKiBhcHBlbmQgU0EgKi8KKyAgICBmb3IoaSA9IDA7IGkgPCA2OyBpKyspCisgICAgeworICAgICAgICB6Zk1pY0FwcGVuZEJ5dGUocFNhW2ldLCBwTWljS2V5KTsKKyAgICB9CisKKyAgICBpZiAodXAgIT0gMCkKKyAgICAgICAgemZNaWNBcHBlbmRCeXRlKCh1cCYweDcpLCBwTWljS2V5KTsKKyAgICBlbHNlCisgICAgICAgIHpmTWljQXBwZW5kQnl0ZSgwLCBwTWljS2V5KTsKKworICAgIHpmTWljQXBwZW5kQnl0ZSgwLCBwTWljS2V5KTsKKyAgICB6Zk1pY0FwcGVuZEJ5dGUoMCwgcE1pY0tleSk7CisgICAgemZNaWNBcHBlbmRCeXRlKDAsIHBNaWNLZXkpOworCisgICAgLyogRm9yIFNuYXAgaGVhZGVyICovCisgICAgZm9yKGkgPSAwOyBpIDwgc25hcExlbjsgaSsrKQorICAgIHsKKyAgICAgICAgemZNaWNBcHBlbmRCeXRlKHNuYXBbaV0sIHBNaWNLZXkpOworICAgIH0KKworICAgIGZvcihpID0gb2Zmc2V0OyBpIDwgbGVuOyBpKyspCisgICAgeworICAgICAgICBiVmFsdWUgPSB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBpKTsKKyAgICAgICAgemZNaWNBcHBlbmRCeXRlKGJWYWx1ZSwgcE1pY0tleSk7CisgICAgfQorCisgICAgemZNaWNHZXRNaWMobWljLCBwTWljS2V5KTsKK30KKwordm9pZCB6ZlRLSVBFbmNyeXB0KHpkZXZfdCAqZGV2LCB6YnVmX3QgKmJ1ZiwgdThfdCAqc25hcCwgdTE2X3Qgc25hcExlbiwgdTE2X3Qgb2Zmc2V0LCB1OF90IGtleUxlbiwgdThfdCoga2V5LCB1MzJfdCogaWN2KQoreworICAgIHU4X3QgaXZbM107CisKKyAgICBpdlswXSA9IGtleVswXTsKKyAgICBpdlsxXSA9IGtleVsxXTsKKyAgICBpdlsyXSA9IGtleVsyXTsKKworICAgIGtleUxlbiAtPSAzOworCisgICAgemZXRVBFbmNyeXB0KGRldiwgYnVmLCBzbmFwLCBzbmFwTGVuLCBvZmZzZXQsIGtleUxlbiwgJmtleVszXSwgaXYpOworfQorCit1MTZfdCB6ZlRLSVBEZWNyeXB0KHpkZXZfdCAqZGV2LCB6YnVmX3QgKmJ1ZiwgdTE2X3Qgb2Zmc2V0LCB1OF90IGtleUxlbiwgdThfdCoga2V5KQoreworICAgIHUxNl90IHJldCA9IFpNX0lDVl9TVUNDRVNTOworICAgIHU4X3QgaXZbM107CisKKyAgICBpdlswXSA9IGtleVswXTsKKyAgICBpdlsxXSA9IGtleVsxXTsKKyAgICBpdlsyXSA9IGtleVsyXTsKKworICAgIGtleUxlbiAtPSAzOworCisgICAgcmV0ID0gemZXRVBEZWNyeXB0KGRldiwgYnVmLCBvZmZzZXQsIGtleUxlbiwgJmtleVszXSwgaXYpOworCisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jdHhyeC5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2N0eHJ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI1OGE3ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jdHhyeC5jCkBAIC0wLDAgKzEsNDA5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE1vZHVsZSBOYW1lIDogaHRyLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQWJzdHJhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBUaGlzIG1vZHVsZSBjb250YWlucyBUeCBhbmQgUnggZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTk9URVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImNwcmVjb21wLmgiCisKK3UxNl90IHpmV2xhblJ4VmFsaWRhdGUoemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKK3UxNl90IHpmV2xhblJ4RmlsdGVyKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Zik7CisKKworCitjb25zdCB1OF90IHpnU25hcEJyaWRnZVR1bm5lbFs2XSA9IHsgMHhBQSwgMHhBQSwgMHgwMywgMHgwMCwgMHgwMCwgMHhGOCB9OworY29uc3QgdThfdCB6Z1NuYXA4MDIxaFs2XSA9IHsgMHhBQSwgMHhBQSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCB9OworLyogVGFibGUgZm9yIGNvbnZlcnRpbmcgSVAgRFNDUCBQMi1QMCBiaXRzIHRvIDgwMi4xMWUgQWNjZXNzIENhdGVnb3J5ICovCitjb25zdCB1OF90IHpjVXBUb0FjWzhdID0gezAsIDEsIDEsIDAsIDIsIDIsIDMsIDN9OyAvL1dNTSBkZWZhdWx0CisvL2NvbnN0IHU4X3QgemNVcFRvQWNbOF0gPSB7MCwgMSwgMSwgMCwgMCwgMCwgMCwgMH07IC8vRm9yIDIgVHhRCisvL2NvbnN0IHU4X3QgemNVcFRvQWNbOF0gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07IC8vRm9yIHNpbmdsZSBUeFEKK2NvbnN0IHU4X3QgemNNYXhzcFRvUGt0TnVtWzRdID0gezgsIDIsIDQsIDZ9OworCit1OF90IHpmR2V0RW5jcnlNb2RlRnJvbVJ4U3RhdHVzKHN0cnVjdCB6c0FkZGl0aW9uSW5mbyogYWRkSW5mbykKK3sKKyAgICB1OF90IHNlY3VyaXR5Qnl0ZTsKKyAgICB1OF90IGVuY3J5TW9kZTsKKworICAgIHNlY3VyaXR5Qnl0ZSA9IChhZGRJbmZvLT5UYWlsLkRhdGEuU0FJbmRleCAmIDB4YzApID4+IDQ7ICAvKiBieXRlNCAqLworICAgIHNlY3VyaXR5Qnl0ZSB8PSAoYWRkSW5mby0+VGFpbC5EYXRhLkRBSW5kZXggJiAweGMwKSA+PiA2OyAvKiBieXRlNSAqLworCisgICAgc3dpdGNoKCBzZWN1cml0eUJ5dGUgKQorICAgIHsKKyAgICAgICAgY2FzZSBaTV9OT19XRVA6CisgICAgICAgIGNhc2UgWk1fV0VQNjQ6CisgICAgICAgIGNhc2UgWk1fV0VQMTI4OgorICAgICAgICBjYXNlIFpNX1dFUDI1NjoKKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQworICAgICAgICBjYXNlIFpNX0NFTkM6CisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworICAgICAgICBjYXNlIFpNX1RLSVA6CisgICAgICAgIGNhc2UgWk1fQUVTOgorCisgICAgICAgICAgICBlbmNyeU1vZGUgPSBzZWN1cml0eUJ5dGU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorCisgICAgICAgICAgICBpZiAoIChzZWN1cml0eUJ5dGUgJiAweGY4KSA9PSAweDA4ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBkZWNyeXB0ZWQgYnkgc29mdHdhcmUKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5jcnlNb2RlID0gWk1fTk9fV0VQOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGVuY3J5TW9kZTsKK30KKwordm9pZCB6ZkdldFJ4SXZJY3ZMZW5ndGgoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1OF90IHZhcCwgdTE2X3QqIHBJdkxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxNl90KiBwSWN2TGVuLCBzdHJ1Y3QgenNBZGRpdGlvbkluZm8qIGFkZEluZm8pCit7CisgICAgdTE2X3Qgd2RzUG9ydDsKKyAgICB1OF90ICBlbmNyeU1vZGU7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAqcEl2TGVuID0gMDsKKyAgICAqcEljdkxlbiA9IDA7CisKKyAgICBlbmNyeU1vZGUgPSB6ZkdldEVuY3J5TW9kZUZyb21SeFN0YXR1cyhhZGRJbmZvKTsKKworICAgIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfQVAgKQorICAgIHsKKyAgICAgICAgaWYgKHZhcCA8IFpNX01BWF9BUF9TVVBQT1JUKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKCB3ZC0+YXAuZW5jcnlNb2RlW3ZhcF0gPT0gWk1fV0VQNjQgKSB8fAorICAgICAgICAgICAgICAgICAgICAoIHdkLT5hcC5lbmNyeU1vZGVbdmFwXSA9PSBaTV9XRVAxMjggKSB8fAorICAgICAgICAgICAgICAgICAgICAoIHdkLT5hcC5lbmNyeU1vZGVbdmFwXSA9PSBaTV9XRVAyNTYgKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcEl2TGVuID0gNDsKKyAgICAgICAgICAgICAgICAqcEljdkxlbiA9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdTE2X3QgaWQ7CisgICAgICAgICAgICAgICAgdTE2X3QgYWRkclszXTsKKworICAgICAgICAgICAgICAgIGFkZHJbMF0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BMl9PRkZTRVQpOworICAgICAgICAgICAgICAgIGFkZHJbMV0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BMl9PRkZTRVQrMik7CisgICAgICAgICAgICAgICAgYWRkclsyXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIFpNX1dMQU5fSEVBREVSX0EyX09GRlNFVCs0KTsKKworICAgICAgICAgICAgICAgIC8qIEZpbmQgU1RBJ3MgaW5mb3JtYXRpb24gKi8KKyAgICAgICAgICAgICAgICBpZiAoKGlkID0gemZBcEZpbmRTdGEoZGV2LCBhZGRyKSkgIT0gMHhmZmZmKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdkLT5hcC5zdGFUYWJsZVtpZF0uZW5jcnlNb2RlID09IFpNX1RLSVApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwSXZMZW4gPSA4OworICAgICAgICAgICAgICAgICAgICAgICAgKnBJY3ZMZW4gPSA0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdkLT5hcC5zdGFUYWJsZVtpZF0uZW5jcnlNb2RlID09IFpNX0FFUykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgKnBJdkxlbiA9IDg7CisgICAgICAgICAgICAgICAgICAgICAgICAqcEljdkxlbiA9IDg7IC8vIEFFUyBNSUMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vKnBJY3ZMZW4gPSAwOworICAgICAgICAgICAgICAgICAgICB9CisjaWZkZWYgWk1fRU5BQkxFX0NFTkMKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAod2QtPmFwLnN0YVRhYmxlW2lkXS5lbmNyeU1vZGUgPT0gWk1fQ0VOQykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgKnBJdkxlbiA9IDE4OworICAgICAgICAgICAgICAgICAgICAgICAgKnBJY3ZMZW49IDE2OworICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIFdEUyBwb3J0IGNoZWNraW5nICovCisgICAgICAgICAgICBpZiAoKHdkc1BvcnQgPSB2YXAgLSAweDIwKSA+PSBaTV9NQVhfV0RTX1NVUFBPUlQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2RzUG9ydCA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAod2QtPmFwLndkcy5lbmNyeU1vZGVbd2RzUG9ydF0pCisJCQl7CisJCQljYXNlIFpNX1dFUDY0OgorCQkJY2FzZSBaTV9XRVAxMjg6CisJCQljYXNlIFpNX1dFUDI1NjoKKyAgICAgICAgICAgICAgICAqcEl2TGVuID0gNDsKKyAgICAgICAgICAgICAgICAqcEljdkxlbiA9IDQ7CisJCQkJYnJlYWs7CisJCQljYXNlIFpNX1RLSVA6CisgICAgICAgICAgICAgICAgKnBJdkxlbiA9IDg7CisgICAgICAgICAgICAgICAgKnBJY3ZMZW4gPSA0OworCQkJCWJyZWFrOworCQkJY2FzZSBaTV9BRVM6CisgICAgICAgICAgICAgICAgKnBJdkxlbiA9IDg7CisgICAgICAgICAgICAgICAgKnBJY3ZMZW4gPSAwOworCQkJCWJyZWFrOworI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisgICAgICAgICAgICBjYXNlIFpNX0NFTkM6CisgICAgICAgICAgICAgICAgKnBJdkxlbiA9IDE4OworICAgICAgICAgICAgICAgICpwSWN2TGVuID0gMTY7CisJCQkJYnJlYWs7CisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworCQkJfS8qIGVuZCBvZiBzd2l0Y2ggKi8KKyAgICAgICAgfQorICAgIH0KKwllbHNlIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfUFNFVURPKQorICAgIHsKKyAgICAgICAgLyogdGVzdDogNjUxOCBmb3IgUUEgYXV0byB0ZXN0ICovCisgICAgICAgIHN3aXRjaCAoZW5jcnlNb2RlKQorCQl7CisgICAgICAgIGNhc2UgWk1fV0VQNjQ6CisgICAgICAgIGNhc2UgWk1fV0VQMTI4OgorICAgICAgICBjYXNlIFpNX1dFUDI1NjoKKyAgICAgICAgICAgICpwSXZMZW4gPSA0OworICAgICAgICAgICAgKnBJY3ZMZW4gPSA0OworCQkJYnJlYWs7CisJCWNhc2UgWk1fVEtJUDoKKyAgICAgICAgICAgICpwSXZMZW4gPSA4OworICAgICAgICAgICAgKnBJY3ZMZW4gPSA0OworCQkJYnJlYWs7CisJCWNhc2UgWk1fQUVTOgorICAgICAgICAgICAgKnBJdkxlbiA9IDg7CisgICAgICAgICAgICAqcEljdkxlbiA9IDA7CisJCQlicmVhazsKKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQworICAgICAgICBjYXNlIFpNX0NFTkM6CisgICAgICAgICAgICAqcEl2TGVuID0gMTg7CisgICAgICAgICAgICAqcEljdkxlbiA9IDE2OworI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKKwkJfS8qIGVuZCBvZiBzd2l0Y2ggKi8KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKCAoZW5jcnlNb2RlID09IFpNX1dFUDY0KXx8CisgICAgICAgICAgICAgKGVuY3J5TW9kZSA9PSBaTV9XRVAxMjgpfHwKKyAgICAgICAgICAgICAoZW5jcnlNb2RlID09IFpNX1dFUDI1NikgKQorICAgICAgICB7CisgICAgICAgICAgICAqcEl2TGVuID0gNDsKKyAgICAgICAgICAgICpwSWN2TGVuID0gNDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggZW5jcnlNb2RlID09IFpNX1RLSVAgKQorICAgICAgICB7CisgICAgICAgICAgICAqcEl2TGVuID0gODsKKyAgICAgICAgICAgICpwSWN2TGVuID0gNDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggZW5jcnlNb2RlID09IFpNX0FFUyApCisgICAgICAgIHsKKyAgICAgICAgICAgICpwSXZMZW4gPSA4OworICAgICAgICAgICAgKnBJY3ZMZW4gPSA4OyAvLyBBRVMgTUlDCisgICAgICAgIH0KKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQworICAgICAgICBlbHNlIGlmICggZW5jcnlNb2RlID09IFpNX0NFTkMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpwSXZMZW4gPSAxODsKKyAgICAgICAgICAgICpwSWN2TGVuPSAxNjsKKyAgICAgICAgfQorI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKKyAgICB9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmQWdpbmdEZWZyYWdMaXN0ICAgICAgICAgICAqLworLyogICAgICBGb3JjZSBmbHVzaGluZyB3aG9sZSBkZWZyYWcgbGlzdCBvciBhZ2luZyB0aGUgYnVmZmVyICAgICAgICAgICAgKi8KKy8qICAgICAgaW4gdGhlIGRlZnJhZyBsaXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGZsdXNoRmxhZyA6IDE9PmZsdXNoaW5nLCAwPT5BZ2luZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFN0ZXBoZW4gQ2hlbiAgICAgICAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSU5DLiAgICAyMDA3LjEgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHpmQWdpbmdEZWZyYWdMaXN0KHpkZXZfdCogZGV2LCB1MTZfdCBmbHVzaEZsYWcpCit7CisgICAgdTE2X3QgaSwgajsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBmb3IoaT0wOyBpPFpNX01BWF9ERUZSQUdfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKHdkLT5kZWZyYWdUYWJsZS5kZWZyYWdFbnRyeVtpXS5mcmFnQ291bnQgIT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgoKHdkLT50aWNrIC0gd2QtPmRlZnJhZ1RhYmxlLmRlZnJhZ0VudHJ5W2ldLnRpY2spID4KKyAgICAgICAgICAgICAgICAgICAgICAgIChaTV9ERUZSQUdfQUdJTkdfVElNRV9TRUMgKiBaTV9USUNLX1BFUl9TRUNPTkQpKQorICAgICAgICAgICAgICAgfHwgKGZsdXNoRmxhZyAhPSAwKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6bV9tc2cxX3J4KFpNX0xWXzIsICJBZ2luZyBkZWZyYWcgbGlzdCA6IiwgaSk7CisgICAgICAgICAgICAgICAgLyogRnJlZSB0aGUgYnVmZmVycyBpbiB0aGUgZGVmcmFnIGxpc3QgKi8KKyAgICAgICAgICAgICAgICBmb3IgKGo9MDsgajx3ZC0+ZGVmcmFnVGFibGUuZGVmcmFnRW50cnlbaV0uZnJhZ0NvdW50OyBqKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB6ZndCdWZGcmVlKGRldiwgd2QtPmRlZnJhZ1RhYmxlLmRlZnJhZ0VudHJ5W2ldLmZyYWdtZW50W2pdLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2QtPmRlZnJhZ1RhYmxlLmRlZnJhZ0VudHJ5W2ldLmZyYWdDb3VudCA9IDA7CisgICAgfQorCisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHJldHVybjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZBZGRGaXJzdEZyYWdUb0RlZnJhZ0xpc3QgICovCisvKiAgICAgIEFkZCBmaXJzdCBmcmFnbWVudCB0byBkZWZyYWdtZW50IGxpc3QsIHRoZSBmaXJzdCBlbXB0eSBlbnRyeSAgICAqLworLyogICAgICB3aWxsIGJlIHNlbGVjdGVkLiBJZiB0aGUgbGlzdCBpcyBmdWxsLCBzZXF1ZW50aWFsbHkgc2VsZWN0ICAgICAgKi8KKy8qICAgICAgb25lIGVudHJ5IGZvciByZXBsYWNlbWVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZiA6IGZpcnN0IGZyYWdtZW50IGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBhZGRyIDogYWRkcmVzcyBvZiBmaXJzdCBmcmFnbWVudCBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgc2VxTnVtIDogc2VxdWVuY2Ugb2YgZmlyc3QgZnJhZ21lbnQgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJTkMuICAgIDIwMDcuMSAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgemZBZGRGaXJzdEZyYWdUb0RlZnJhZ0xpc3QoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1OF90KiBhZGRyLCB1MTZfdCBzZXFOdW0pCit7CisgICAgdTE2X3QgaSwgajsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAvKiBGaW5kIGFuIGVtcHR5IG9uZSBpbiBkZWZyYWcgbGlzdCAqLworICAgIGZvcihpPTA7IGk8Wk1fTUFYX0RFRlJBR19FTlRSSUVTOyBpKyspCisgICAgeworICAgICAgICBpZiAoIHdkLT5kZWZyYWdUYWJsZS5kZWZyYWdFbnRyeVtpXS5mcmFnQ291bnQgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLyogSWYgZnVsbCwgc2VxdWVudGlhbGx5IHJlcGxhY2UgZXhpc3Rpbmcgb25lICovCisgICAgaWYgKGkgPT0gWk1fTUFYX0RFRlJBR19FTlRSSUVTKQorICAgIHsKKyAgICAgICAgaSA9IHdkLT5kZWZyYWdUYWJsZS5yZXBsYWNlTnVtKysgJiAoWk1fTUFYX0RFRlJBR19FTlRSSUVTLTEpOworICAgICAgICAvKiBGcmVlIHRoZSBidWZmZXJzIGluIHRoZSBkZWZyYWcgbGlzdCB0byBiZSByZXBsYWNlZCAqLworICAgICAgICBmb3IgKGo9MDsgajx3ZC0+ZGVmcmFnVGFibGUuZGVmcmFnRW50cnlbaV0uZnJhZ0NvdW50OyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCB3ZC0+ZGVmcmFnVGFibGUuZGVmcmFnRW50cnlbaV0uZnJhZ21lbnRbal0sIDApOworICAgICAgICB9CisgICAgfQorCisgICAgd2QtPmRlZnJhZ1RhYmxlLmRlZnJhZ0VudHJ5W2ldLmZyYWdDb3VudCA9IDE7CisgICAgd2QtPmRlZnJhZ1RhYmxlLmRlZnJhZ0VudHJ5W2ldLmZyYWdtZW50WzBdID0gYnVmOworICAgIHdkLT5kZWZyYWdUYWJsZS5kZWZyYWdFbnRyeVtpXS5zZXFOdW0gPSBzZXFOdW07CisgICAgd2QtPmRlZnJhZ1RhYmxlLmRlZnJhZ0VudHJ5W2ldLnRpY2sgPSB3ZC0+dGljazsKKworICAgIGZvciAoaj0wOyBqPDY7IGorKykKKyAgICB7CisgICAgICAgIHdkLT5kZWZyYWdUYWJsZS5kZWZyYWdFbnRyeVtpXS5hZGRyW2pdID0gYWRkcltqXTsKKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkFkZEZyYWdUb0RlZnJhZ0xpc3QgICAgICAgKi8KKy8qICAgICAgQWRkIG1pZGRsZSBvciBsYXN0IGZyYWdtZW50IHRvIGRlZnJhZ21lbnQgbGlzdC4gICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZiA6IGZpcnN0IGZyYWdtZW50IGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBhZGRyIDogYWRkcmVzcyBvZiBmcmFnbWVudCBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgc2VxTnVtIDogc2VxdWVuY2UgZnJhZ21lbnQgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGZyYWdOdW0gOiBmcmFnbWVudCBudW1iZXIgb2YgZnJhZ21lbnQgYnVmZmVyICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBtb3JlRnJhZyA6IG1vcmUgZnJhZyBiaXQgb2YgZnJhZ21lbnQgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYWRkSW5mbyA6IGFkZGl0aW9uIGluZm8gb2YgZnJhZ21lbnQgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJTkMuICAgIDIwMDcuMSAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3pidWZfdCogemZBZGRGcmFnVG9EZWZyYWdMaXN0KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdThfdCogYWRkciwKKyAgICAgICAgdTE2X3Qgc2VxTnVtLCB1OF90IGZyYWdOdW0sIHU4X3QgbW9yZUZyYWcsCisgICAgICAgIHN0cnVjdCB6c0FkZGl0aW9uSW5mbyogYWRkSW5mbykKK3sKKyAgICB1MTZfdCBpLCBqLCBrOworICAgIHpidWZfdCogcmV0dXJuQnVmID0gTlVMTDsKKyAgICB1MTZfdCBkZWZyYWdEb25lID0gMDsKKyAgICB1MTZfdCBsZW5FcnIgPSAwOworICAgIHUxNl90IHN0YXJ0QWRkciwgZnJhZ0hlYWQsIGZyYW1lTGVuLCBpdkxlbiwgaWN2TGVuOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIC8qIEZpbmQgZnJhZyBpbiB0aGUgZGVmcmFnIGxpc3QgKi8KKyAgICBmb3IoaT0wOyBpPFpNX01BWF9ERUZSQUdfRU5UUklFUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKCB3ZC0+ZGVmcmFnVGFibGUuZGVmcmFnRW50cnlbaV0uZnJhZ0NvdW50ICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBDb21wYXJlIGFkZHJlc3MgKi8KKyAgICAgICAgICAgIGZvciAoaj0wOyBqPDY7IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYWRkcltqXSAhPSB3ZC0+ZGVmcmFnVGFibGUuZGVmcmFnRW50cnlbaV0uYWRkcltqXSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChqID09IDYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogQ29tcGFyZSBzZXF1ZW5jZSBhbmQgZnJhZ21lbnQgbnVtYmVyICovCisgICAgICAgICAgICAgICAgaWYgKHNlcU51bSA9PSB3ZC0+ZGVmcmFnVGFibGUuZGVmcmFnRW50cnlbaV0uc2VxTnVtKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChmcmFnTnVtID09IHdkLT5kZWZyYWdUYWJsZS5kZWZyYWdFbnRyeVtpXS5mcmFnQ291bnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChmcmFnTnVtIDwgOCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFkZCBmcmFnIGZyYW1lIHRvIGRlZnJhZyBsaXN0ICovCisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+ZGVmcmFnVGFibGUuZGVmcmFnRW50cnlbaV0uZnJhZ21lbnRbZnJhZ051bV0gPSBidWY7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+ZGVmcmFnVGFibGUuZGVmcmFnRW50cnlbaV0uZnJhZ0NvdW50Kys7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZyYWdEb25lID0gMTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vcmVGcmFnID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVyZ2UgYWxsIGZyYWdtZW50IGlmIG1vcmUgZGF0YSBiaXQgaXMgY2xlYXJlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybkJ1ZiA9IHdkLT5kZWZyYWdUYWJsZS5kZWZyYWdFbnRyeVtpXS5mcmFnbWVudFswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydEFkZHIgPSB6ZndCdWZHZXRTaXplKGRldiwgcmV0dXJuQnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBza2lwIFdMQU4gaGVhZGVyIDI0KERhdGEpIG9yIDI2KFFvUyBEYXRhKSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdIZWFkID0gMjQgKyAoKHptd19yeF9idWZfcmVhZGgoZGV2LCByZXR1cm5CdWYsIDApICYgMHg4MCkgPj4gNik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgemZHZXRSeEl2SWN2TGVuZ3RoKGRldiwgcmV0dXJuQnVmLCAwLCAmaXZMZW4sICZpY3ZMZW4sIGFkZEluZm8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdIZWFkICs9IGl2TGVuOyAvKiBza2lwIElWICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGs9MTsgazx3ZC0+ZGVmcmFnVGFibGUuZGVmcmFnRW50cnlbaV0uZnJhZ0NvdW50OyBrKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZUxlbiA9IHpmd0J1ZkdldFNpemUoZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPmRlZnJhZ1RhYmxlLmRlZnJhZ0VudHJ5W2ldLmZyYWdtZW50W2tdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzdGFydEFkZHIrZnJhbWVMZW4tZnJhZ0hlYWQpIDwgMTU2MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemZSeEJ1ZmZlckNvcHkoZGV2LCByZXR1cm5CdWYsIHdkLT5kZWZyYWdUYWJsZS5kZWZyYWdFbnRyeVtpXS5mcmFnbWVudFtrXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRBZGRyLCBmcmFnSGVhZCwgZnJhbWVMZW4tZnJhZ0hlYWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRBZGRyICs9IChmcmFtZUxlbi1mcmFnSGVhZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5FcnIgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCB3ZC0+ZGVmcmFnVGFibGUuZGVmcmFnRW50cnlbaV0uZnJhZ21lbnRba10sIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5kZWZyYWdUYWJsZS5kZWZyYWdFbnRyeVtpXS5mcmFnQ291bnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmd0J1ZlNldFNpemUoZGV2LCByZXR1cm5CdWYsIHN0YXJ0QWRkcik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBpZiAobGVuRXJyID09IDEpCisgICAgeworICAgICAgICB6ZndCdWZGcmVlKGRldiwgcmV0dXJuQnVmLCAwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChkZWZyYWdEb25lID09IDApCisgICAgeworICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIHJldHVybkJ1ZjsKK30KKworCisvKiByZXR1cm4gdmFsdWUgPSBOVUxMID0+IHNhdmUgb3IgZnJlZSB0aGlzIGZyYW1lICAgICAgICAgKi8KK3pidWZfdCogemZEZWZyYWdtZW50KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdThfdCogcGJJc0RlZnJhZywKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB6c0FkZGl0aW9uSW5mbyogYWRkSW5mbykKK3sKKyAgICB1OF90IGZyYWdOdW07CisgICAgdTE2X3Qgc2VxTnVtOworICAgIHU4X3QgbW9yZUZyYWdCaXQ7CisgICAgdThfdCBhZGRyWzZdOworICAgIHUxNl90IGk7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgWk1fQlVGRkVSX1RSQUNFKGRldiwgYnVmKQorCisgICAgKnBiSXNEZWZyYWcgPSBGQUxTRTsKKyAgICBzZXFOdW0gPSB6bXdfYnVmX3JlYWRoKGRldiwgYnVmLCAyMik7CisgICAgZnJhZ051bSA9ICh1OF90KShzZXFOdW0gJiAweGYpOworICAgIG1vcmVGcmFnQml0ID0gKHptd19idWZfcmVhZGIoZGV2LCBidWYsIDEpICYgWk1fQklUXzIpID4+IDI7CisKKyAgICBpZiAoKGZyYWdOdW0gPT0gMCkgJiYgKG1vcmVGcmFnQml0ID09IDApKQorICAgIHsKKyAgICAgICAgLyogTm90IHBhcnQgb2YgYSBmcmFnbWVudGF0aW9uICovCisKKyAgICAgICAgcmV0dXJuIGJ1ZjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgd2QtPmNvbW1UYWxseS5zd1J4RnJhZ21lbnRDb3VudCsrOworICAgICAgICBzZXFOdW0gPSBzZXFOdW0gPj4gNDsKKyAgICAgICAgZm9yIChpPTA7IGk8NjsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBhZGRyW2ldID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTJfT0ZGU0VUK2kpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZyYWdOdW0gPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogbW9yZSBmcmFnID0gMSAqLworICAgICAgICAgICAgLyogRmlyc3QgcGFydCBvZiBhIGZyYWdtZW50YXRpb24gKi8KKyAgICAgICAgICAgIHptX21zZzFfcngoWk1fTFZfMiwgIkZpcnN0IEZyYWcsIHNlcT0iLCBzZXFOdW0pOworICAgICAgICAgICAgemZBZGRGaXJzdEZyYWdUb0RlZnJhZ0xpc3QoZGV2LCBidWYsIGFkZHIsIHNlcU51bSk7CisgICAgICAgICAgICBidWYgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogTWlkZGxlIG9yIGxhc3QgcGFydCBvZiBhIGZyYWdtZW50YXRpb24gKi8KKyAgICAgICAgICAgIHptX21zZzFfcngoWk1fTFZfMiwgIkZyYWcgc2VxPSIsIHNlcU51bSk7CisgICAgICAgICAgICB6bV9tc2cxX3J4KFpNX0xWXzIsICJGcmFnIG1vcmVGcmFnQml0PSIsIG1vcmVGcmFnQml0KTsKKyAgICAgICAgICAgIGJ1ZiA9IHpmQWRkRnJhZ1RvRGVmcmFnTGlzdChkZXYsIGJ1ZiwgYWRkciwgc2VxTnVtLCBmcmFnTnVtLCBtb3JlRnJhZ0JpdCwgYWRkSW5mbyk7CisgICAgICAgICAgICBpZiAoYnVmICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBiSXNEZWZyYWcgPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGJ1ZjsKK30KKworCisjaWYgWk1fUFJPVE9DT0xfUkVTUE9OU0VfU0lNVUxBVElPTgordTE2X3QgemZTd2FwKHUxNl90IG51bSkKK3sKKyAgICByZXR1cm4gKChudW0gPj4gOCkgKyAoKG51bSAmIDB4ZmYpIDw8IDgpKTsKK30KKworCit2b2lkIHpmUHJvdFJzcFNpbSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgdTE2X3QgZXRoVHlwZTsKKyAgICB1MTZfdCBhcnBPcDsKKyAgICB1MTZfdCBwcm90OworICAgIHUxNl90IHRlbXA7CisgICAgdTE2X3QgaTsKKyAgICB1MTZfdCBkaXBbMl07CisgICAgdTE2X3QgZHN0UG9ydDsKKyAgICB1MTZfdCBzcmNQb3J0OworCisgICAgZXRoVHlwZSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDEyKTsKKyAgICB6bV9tc2cyX3J4KFpNX0xWXzIsICJldGhUeXBlPSIsIGV0aFR5cGUpOworCisgICAgLyogQVJQICovCisgICAgaWYgKGV0aFR5cGUgPT0gMHgwNjA4KQorICAgIHsKKyAgICAgICAgYXJwT3AgPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAyMCk7CisgICAgICAgIGRpcFswXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDM4KTsKKyAgICAgICAgZGlwWzFdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgNDApOworICAgICAgICB6bV9tc2cyX3J4KFpNX0xWXzIsICJhcnBPcD0iLCBhcnBPcCk7CisgICAgICAgIHptX21zZzJfcngoWk1fTFZfMiwgImlwMD0iLCBkaXBbMF0pOworICAgICAgICB6bV9tc2cyX3J4KFpNX0xWXzIsICJpcDE9IiwgZGlwWzFdKTsKKworICAgICAgICAvL0FSUCByZXF1ZXN0IHRvIDE5Mi4xNjguMS4xNQorICAgICAgICBpZiAoKGFycE9wID09IDB4MDEwMCkgJiYgKGRpcFswXSA9PSAweGE4YzApICYmIChkaXBbMV0gPT0gMHgwZjAxKSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIHptX21zZzBfcngoWk1fTFZfMiwgIkFSUCIpOworICAgICAgICAgICAgLyogQVJQIHJlc3BvbnNlICovCisgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMjAsIDB4MDIwMCk7CisKKyAgICAgICAgICAgIC8qIGRzdCBoYXJkd2FyZSBhZGRyZXNzICovCisKKyAgICAgICAgICAgIC8qIHNyYyBoYXJkd2FyZSBhZGRyZXNzICovCisgICAgICAgICAgICAvL3ptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCA2LCAweGEwMDApOworICAgICAgICAgICAgLy96bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgOCwgMHgwMDAwKTsKKyAgICAgICAgICAgIC8vem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDEwLCAweDAwMDApOworCisgICAgICAgICAgICAvKiBkc3QgaXAgYWRkcmVzcyAqLworICAgICAgICAgICAgZm9yIChpPTA7IGk8NTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRlbXAgPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAyMisoaSoyKSk7CisgICAgICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDMyKyhpKjIpLCB0ZW1wKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogc3JjIGhhcmR3YXJlIGFkZHJlc3MgKi8KKyAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAyMiwgMHhhMDAwKTsKKyAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAyNCwgMHgwMDAwKTsKKyAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAyNiwgMHgwMDAwKTsKKworICAgICAgICAgICAgLyogc3JjIGlwIGFkZHJlc3MgKi8KKyAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAyOCwgMHhhOGMwKTsKKyAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAzMCwgMHgwZjAxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBJQ01QICovCisgICAgZWxzZSBpZiAoZXRoVHlwZSA9PSAweDAwMDgpCisgICAgeworICAgICAgICB6bV9tc2cwX3J4KFpNX0xWXzIsICJJUCIpOworICAgICAgICBwcm90ID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMjMpOworICAgICAgICBkaXBbMF0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAzMCk7CisgICAgICAgIGRpcFsxXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDMyKTsKKyAgICAgICAgem1fbXNnMl9yeChaTV9MVl8yLCAicHJvdD0iLCBwcm90KTsKKyAgICAgICAgem1fbXNnMl9yeChaTV9MVl8yLCAiaXAwPSIsIGRpcFswXSk7CisgICAgICAgIHptX21zZzJfcngoWk1fTFZfMiwgImlwMT0iLCBkaXBbMV0pOworCisgICAgICAgIC8qIFBJTkcgcmVxdWVzdCB0byAxOTIuMTY4LjEuMTUgKi8KKyAgICAgICAgaWYgKChwcm90ID09IDB4MSkgJiYgKGRpcFswXSA9PSAweGE4YzApICYmIChkaXBbMV0gPT0gMHgwZjAxKSkKKyAgICAgICAgeworICAgICAgICAgICAgem1fbXNnMF9yeChaTV9MVl8yLCAiSUNNUCIpOworICAgICAgICAgICAgLyogY2hhbmdlIGRzdCAqLworICAgICAgICAgICAgZm9yIChpPTA7IGk8MzsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRlbXAgPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCA2KyhpKjIpKTsKKyAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgaSoyLCB0ZW1wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIGNoYW5nZSBzcmMgKi8KKyAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCA2LCAweGEwMDApOworICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDgsIDB4MDAwMCk7CisgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMTAsIDB4MDAwMCk7CisKKyAgICAgICAgICAgIC8qIGV4Y2hhbmdlIHNyYyBpcCBhbmQgZHN0IGlwICovCisgICAgICAgICAgICBmb3IgKGk9MDsgaTwyOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGVtcCA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDI2KyhpKjIpKTsKKyAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMzArKGkqMiksIHRlbXApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDI2LCAweGE4YzApOworICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDI4LCAweDBmMDEpOworCisgICAgICAgICAgICAvKiBjaGFuZ2UgaWNtcCB0eXBlIHRvIGVjaG8gcmVwbHkgKi8KKyAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGViKGRldiwgYnVmLCAzNCwgMHgwKTsKKworICAgICAgICAgICAgLyogdXBkYXRlIGljbXAgY2hlY2tzdW0gKi8KKyAgICAgICAgICAgIHRlbXAgPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAzNik7CisgICAgICAgICAgICB0ZW1wICs9IDg7CisgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMzYsIHRlbXApOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHByb3QgPT0gMHg2KQorICAgICAgICB7CisgICAgICAgICAgICB6bV9tc2cwX3J4KFpNX0xWXzIsICJUQ1AiKTsKKyAgICAgICAgICAgIHNyY1BvcnQgPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAzNCk7CisgICAgICAgICAgICBkc3RQb3J0ID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMzYpOworICAgICAgICAgICAgem1fbXNnMl9yeChaTV9MVl8yLCAiU3JjIFBvcnQ9Iiwgc3JjUG9ydCk7CisgICAgICAgICAgICB6bV9tc2cyX3J4KFpNX0xWXzIsICJEc3QgUG9ydD0iLCBkc3RQb3J0KTsKKyAgICAgICAgICAgIGlmICgoZHN0UG9ydCA9PSAweDE1MDApIHx8IChzcmNQb3J0ID09IDB4MTUwMCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem1fbXNnMF9yeChaTV9MVl8yLCAiRlRQIik7CisKKyAgICAgICAgICAgICAgICAvKiBjaGFuZ2UgZHN0ICovCisgICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8MzsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDYrKGkqMikpOworICAgICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgaSoyLCB0ZW1wKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogY2hhbmdlIHNyYyAqLworICAgICAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCA2LCAweGEwMDApOworICAgICAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCA4LCAweDAwMDApOworICAgICAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAxMCwgMHgwMDAwKTsKKworICAgICAgICAgICAgICAgIC8qIGV4Y2hhbmdlIHNyYyBpcCBhbmQgZHN0IGlwICovCisgICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8MjsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDI2KyhpKjIpKTsKKyAgICAgICAgICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDMwKyhpKjIpLCB0ZW1wKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDI2LCAweGE4YzApOworICAgICAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAyOCwgMHgwZjAxKTsKKyNpZiAwCisgICAgICAgICAgICAgICAgLyogUGF0Y2ggc3JjIHBvcnQgKi8KKyAgICAgICAgICAgICAgICB0ZW1wID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMzQpOworICAgICAgICAgICAgICAgIHRlbXAgPSB6ZlN3YXAoemZTd2FwKHRlbXApICsgMSk7CisgICAgICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDM0LCB0ZW1wKTsKKyAgICAgICAgICAgICAgICB0ZW1wID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMzgpOworICAgICAgICAgICAgICAgIHRlbXAgPSB6ZlN3YXAoemZTd2FwKHRlbXApICsgMSk7CisgICAgICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDM4LCB0ZW1wKTsKKworICAgICAgICAgICAgICAgIC8qIFBhdGNoIGNoZWNrc3VtICovCisgICAgICAgICAgICAgICAgdGVtcCA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDUwKTsKKyAgICAgICAgICAgICAgICB0ZW1wID0gemZTd2FwKHRlbXApOworICAgICAgICAgICAgICAgIHRlbXAgPSB+dGVtcDsKKyAgICAgICAgICAgICAgICB0ZW1wICs9IDI7CisgICAgICAgICAgICAgICAgdGVtcCA9IH50ZW1wOworICAgICAgICAgICAgICAgIHRlbXAgPSB6ZlN3YXAodGVtcCk7CisgICAgICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDUwLCB0ZW1wKTsKKyNlbmRpZgorICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocHJvdCA9PSAweDExKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBjaGFuZ2UgZHN0ICovCisgICAgICAgICAgICBmb3IgKGk9MDsgaTwzOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGVtcCA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDYrKGkqMikpOworICAgICAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCBpKjIsIHRlbXApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogY2hhbmdlIHNyYyAqLworICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDYsIDB4YTAwMCk7CisgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgOCwgMHgwMDAwKTsKKyAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAxMCwgMHgwMDAwKTsKKworICAgICAgICAgICAgem1fbXNnMF9yeChaTV9MVl8yLCAiVURQIik7CisgICAgICAgICAgICBzcmNQb3J0ID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMzQpOworICAgICAgICAgICAgZHN0UG9ydCA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDM2KTsKKyAgICAgICAgICAgIHptX21zZzJfcngoWk1fTFZfMiwgIlNyYyBQb3J0PSIsIHNyY1BvcnQpOworICAgICAgICAgICAgem1fbXNnMl9yeChaTV9MVl8yLCAiRHN0IFBvcnQ9IiwgZHN0UG9ydCk7CisKKyAgICAgICAgICAgIC8qIGV4Y2hhbmdlIHNyYyBpcCBhbmQgZHN0IGlwICovCisgICAgICAgICAgICBmb3IgKGk9MDsgaTwyOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGVtcCA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDI2KyhpKjIpKTsKKyAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMzArKGkqMiksIHRlbXApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDI2LCAweGE4YzApOworICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDI4LCAweDBmMDEpOworCisgICAgICAgICAgICAvKiBleGNoYW5nZSBwb3J0ICovCisgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMzQsIHNyY1BvcnQrMSk7CisgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMzYsIGRzdFBvcnQpOworCisgICAgICAgICAgICAvKiBjaGVja3N1bSA9IDAgKi8KKyAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCA0MCwgMCk7CisgICAgICAgIH0KKworICAgIH0KKyAgICBlbHNlIGlmIChldGhUeXBlID09IDB4MDA2MCkgLyogPT4weDAwNjAgaXMgcG9ydCAqLworICAgIHsKKyAgICAgICAgLyogY2hhbmdlIHNyYyBmb3IgRXZsIHRvb2wgbG9vcCBiYWNrIHJlY2VpdmUgKi8KKyAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDYsIDB4YTAwMCk7CisgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCA4LCAweDAwMDApOworICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMTAsIDB4MDAwMCk7CisgICAgfQorCit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmaVR4U2VuZEV0aCAgICAgICAgICAgICAgICAqLworLyogICAgICBDYWxsZWQgdG8gbmF0aXZlIDgwMi4xMSBtYW5hZ2VtZW50IGZyYW1lcyAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmIDogYnVmZmVyIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHBvcnQgOiBXTEFOIHBvcnQsIDA9PnN0YW5kYXJkLCAweDEtMHg3PT5WQVAsIDB4MjAtMHgyNT0+V0RTICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGVycm9yIGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFJheSAgICAgICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDUuNSAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90IHpmaVR4U2VuZDgwMjExTWdtdCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IHBvcnQpCit7CisgICAgdTE2X3QgZXJyOworICAgIC8vdTE2X3QgYWRkclRibFNpemUgPSAwOworICAgIC8vc3RydWN0IHpzQWRkclRibCBhZGRyVGJsOworICAgIHUxNl90IGhsZW47CisgICAgdTE2X3QgaGVhZGVyWygyNCsyNSsxKS8yXTsKKyAgICBpbnQgaTsKKworICAgIGZvcihpPTA7aTwxMjtpKyspCisgICAgeworICAgICAgICBoZWFkZXJbaV0gPSB6bXdfYnVmX3JlYWRoKGRldiwgYnVmLCBpKTsKKyAgICB9CisgICAgaGxlbiA9IDI0OworCisgICAgemZ3QnVmUmVtb3ZlSGVhZChkZXYsIGJ1ZiwgMjQpOworCisgICAgaWYgKChlcnIgPSB6ZkhwU2VuZChkZXYsIGhlYWRlciwgaGxlbiwgTlVMTCwgMCwgTlVMTCwgMCwgYnVmLCAwLAorICAgICAgICAgICAgWk1fRVhURVJOQUxfQUxMT0NfQlVGLCAwLCAwKSkgIT0gWk1fU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGdvdG8gemxFcnJvcjsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKworemxFcnJvcjoKKworICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIDApOworICAgIHJldHVybiAwOworfQorCit1OF90IHpmaUlzVHhRdWV1ZUZ1bGwoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIGlmICgoKCh3ZC0+dnR4cUhlYWRbMF0gKyAxKSAmIFpNX1ZUWFFfU0laRV9NQVNLKSAhPSB3ZC0+dnR4cVRhaWxbMF0pICkKKyAgICB7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZmlUeFNlbmRFdGggICAgICAgICAgICAgICAgKi8KKy8qICAgICAgQ2FsbGVkIHRvIHRyYW5zbWl0IEV0aGVybmV0IGZyYW1lIGZyb20gdXBwZXIgbGF5ZXIuICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZiA6IGJ1ZmZlciBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBwb3J0IDogV0xBTiBwb3J0LCAwPT5zdGFuZGFyZCwgMHgxLTB4Nz0+VkFQLCAweDIwLTB4MjU9PldEUyAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBlcnJvciBjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuICAgICAgICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNS41ICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZpVHhTZW5kRXRoKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgcG9ydCkKK3sKKyAgICB1MTZfdCBlcnIsIHJldDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIFpNX1BFUkZPUk1BTkNFX1RYX01TRFUoZGV2LCB3ZC0+dGljayk7CisgICAgem1fbXNnMV90eChaTV9MVl8yLCAiemZpVHhTZW5kRXRoKCksIHBvcnQ9IiwgcG9ydCk7CisgICAgLyogUmV0dXJuIGVycm9yIGlmIHBvcnQgaXMgZGlzYWJsZWQgKi8KKyAgICBpZiAoKGVyciA9IHpmVHhQb3J0Q29udHJvbChkZXYsIGJ1ZiwgcG9ydCkpID09IFpNX1BPUlRfRElTQUJMRUQpCisgICAgeworICAgICAgICBlcnIgPSBaTV9FUlJfVFhfUE9SVF9ESVNBQkxFRDsKKyAgICAgICAgZ290byB6bEVycm9yOworICAgIH0KKworI2lmIDEKKyAgICBpZiAoKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKSAmJiAocG9ydCA8IDB4MjApKQorICAgIHsKKyAgICAgICAgLyogQVAgOiBCdWZmZXIgZnJhbWUgZm9yIHBvd2VyIHNhdmluZyBTVEEgKi8KKyAgICAgICAgaWYgKChyZXQgPSB6ZkFwQnVmZmVyUHNGcmFtZShkZXYsIGJ1ZiwgcG9ydCkpID09IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBaTV9TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSkKKyAgICB7CisgICAgICAgIGlmICggemZQb3dlclNhdmluZ01ncklzU2xlZXBpbmcoZGV2KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qY2hlY2sgWk1fRU5BQkxFX1BPV0VSX1NBVkUgZmxhZyovCisgICAgICAgICAgICB6ZlBvd2VyU2F2aW5nTWdyV2FrZXVwKGRldik7CisgICAgICAgIH0KKyAgICB9CisjaWZkZWYgWk1fRU5BQkxFX0lCU1NfUFMKKyAgICAvKiBJQlNTIHBvd2VyLXNhdmluZyBtb2RlICovCisgICAgZWxzZSBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lCU1MgKQorICAgIHsKKyAgICAgICAgaWYgKCB6ZlN0YUlic3NQU1F1ZXVlRGF0YShkZXYsIGJ1ZikgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gWk1fU1VDQ0VTUzsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisjaWYgMQorICAgIC8vaWYgKCB3ZC0+YlFvU0VuYWJsZSApCisgICAgaWYgKDEpCisgICAgeworICAgICAgICAvKiBQdXQgdG8gVlRYUVthY10gKi8KKyAgICAgICAgcmV0ID0gemZQdXRWdHhxKGRldiwgYnVmKTsKKworICAgICAgICAvKiBQdXNoIFZUWFFbYWNdICovCisgICAgICAgIHpmUHVzaFZ0eHEoZGV2KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0ID0gemZUeFNlbmRFdGgoZGV2LCBidWYsIHBvcnQsIFpNX0VYVEVSTkFMX0FMTE9DX0JVRiwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKKyNlbHNlCisgICAgcmV0dXJuIHpmVHhTZW5kRXRoKGRldiwgYnVmLCBwb3J0LCBaTV9FWFRFUk5BTF9BTExPQ19CVUYsIDApOworI2VuZGlmCisKK3psRXJyb3I6CisgICAgem1fbXNnMl90eChaTV9MVl8xLCAiVHggQ29tcCBlcnI9IiwgZXJyKTsKKworICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIGVycik7CisgICAgcmV0dXJuIGVycjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZUeFNlbmRFdGggICAgICAgICAgICAgICAgICovCisvKiAgICAgIENhbGxlZCB0byB0cmFuc21pdCBFdGhlcm5ldCBmcmFtZSBmcm9tIHVwcGVyIGxheWVyLiAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBidWYgOiBidWZmZXIgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgcG9ydCA6IFdMQU4gcG9ydCwgMD0+c3RhbmRhcmQsIDB4MTAtMHgxNz0+VkFQLCAweDIwLTB4MjU9PldEUyAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZXJyb3IgY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiAgICAgICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDUuNSAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90IHpmVHhTZW5kRXRoKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgcG9ydCwgdTE2X3QgYnVmVHlwZSwgdTE2X3QgZmxhZykKK3sKKyAgICB1MTZfdCBlcnI7CisgICAgLy91MTZfdCBhZGRyVGJsU2l6ZTsKKyAgICAvL3N0cnVjdCB6c0FkZHJUYmwgYWRkclRibDsKKyAgICB1MTZfdCByZW1vdmVMZW47CisgICAgdTE2X3QgaGVhZGVyWyg4KzMwKzIrMTgpLzJdOyAgICAvKiBjdHIrKDQrYTErYTIrYTMrMithNCkrcW9zK2l2ICovCisgICAgdTE2X3QgaGVhZGVyTGVuOworICAgIHUxNl90IG1pY1s4LzJdOworICAgIHUxNl90IG1pY0xlbjsKKyAgICB1MTZfdCBzbmFwWzgvMl07CisgICAgdTE2X3Qgc25hcExlbjsKKyAgICB1MTZfdCBmcmFnTGVuOworICAgIHUxNl90IGZyYW1lTGVuOworICAgIHUxNl90IGZyYWdOdW07CisgICAgc3RydWN0IHpzRnJhZyBmcmFnOworICAgIHUxNl90IGksIGosIGlkOworICAgIHUxNl90IG9mZnNldDsKKyAgICB1MTZfdCBkYVszXTsKKyAgICB1MTZfdCBzYVszXTsKKyAgICB1OF90IHVwOworICAgIHU4X3QgcW9zVHlwZSwga2V5SWR4ID0gMDsKKyAgICB1MTZfdCBmcmFnT2ZmOworICAgIHUxNl90IG5ld0ZsYWc7CisgICAgc3RydWN0IHpzTWljVmFyKiAgcE1pY0tleTsKKyAgICB1OF90IHRraXBGcmFtZU9mZnNldCA9IDA7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgbmV3RmxhZyA9IGZsYWcgJiAweGZmMDA7CisgICAgZmxhZyA9IGZsYWcgJiAweGZmOworCisgICAgem1fbXNnMV90eChaTV9MVl8yLCAiemZUeFNlbmRFdGgoKSwgcG9ydD0iLCBwb3J0KTsKKworICAgIC8qIEdldCBJUCBUT1MgZm9yIFFvUyBBQyBhbmQgSVAgZnJhZyBvZmZzZXQgKi8KKyAgICB6ZlR4R2V0SXBUb3NBbmRGcmFnKGRldiwgYnVmLCAmdXAsICZmcmFnT2ZmKTsKKworICAgIC8vRU9TUCBiaXQKKyAgICBpZiAobmV3RmxhZyAmIDB4MTAwKQorICAgIHsKKyAgICAgICAgdXAgfD0gMHgxMDsKKyAgICB9CisKKyNpZmRlZiBaTV9FTkFCTEVfTkFUSVZFX1dJRkkKKyAgICBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFICkKKyAgICB7CisgICAgICAgIC8qIERBICovCisgICAgICAgIGRhWzBdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMTYpOworICAgICAgICBkYVsxXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDE4KTsKKyAgICAgICAgZGFbMl0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCAyMCk7CisgICAgICAgIC8qIFNBICovCisgICAgICAgIHNhWzBdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMTApOworICAgICAgICBzYVsxXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDEyKTsKKyAgICAgICAgc2FbMl0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCAxNCk7CisgICAgfQorICAgIGVsc2UgaWYgKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JQlNTICkKKyAgICB7CisgICAgICAgIC8qIERBICovCisgICAgICAgIGRhWzBdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgNCk7CisgICAgICAgIGRhWzFdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgNik7CisgICAgICAgIGRhWzJdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgOCk7CisgICAgICAgIC8qIFNBICovCisgICAgICAgIHNhWzBdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMTApOworICAgICAgICBzYVsxXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDEyKTsKKyAgICAgICAgc2FbMl0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCAxNCk7CisgICAgfQorICAgIGVsc2UgaWYgKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCApCisgICAgeworICAgICAgICAvKiBEQSAqLworICAgICAgICBkYVswXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDQpOworICAgICAgICBkYVsxXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDYpOworICAgICAgICBkYVsyXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDgpOworICAgICAgICAvKiBTQSAqLworICAgICAgICBzYVswXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDE2KTsKKyAgICAgICAgc2FbMV0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCAxOCk7CisgICAgICAgIHNhWzJdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMjApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLworICAgIH0KKyNlbHNlCisgICAgLyogREEgKi8KKyAgICBkYVswXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDApOworICAgIGRhWzFdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMik7CisgICAgZGFbMl0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCA0KTsKKyAgICAvKiBTQSAqLworICAgIHNhWzBdID0gem13X3R4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgNik7CisgICAgc2FbMV0gPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCA4KTsKKyAgICBzYVsyXSA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIDEwKTsKKyNlbmRpZgorICAgIC8vRGVjaWRlIEtleSBJbmRleCBpbiBBVE9NLCBObyBtZWFuaW5nIGluIE9UVVMtLUNXWWFuZyhtKQorICAgIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCkKKyAgICB7CisgICAgICAgIGtleUlkeCA9IHdkLT5hcC5iY0hhbEtleUlkeFtwb3J0XTsKKyAgICAgICAgaWQgPSB6ZkFwRmluZFN0YShkZXYsIGRhKTsKKyAgICAgICAgaWYgKGlkICE9IDB4ZmZmZikKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh3ZC0+YXAuc3RhVGFibGVbaWRdLmVuY3J5TW9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgWk1fQUVTOgorICAgICAgICAgICAgY2FzZSBaTV9US0lQOgorI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisgICAgICAgICAgICBjYXNlIFpNX0NFTkM6CisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworICAgICAgICAgICAgICAgIGtleUlkeCA9IHdkLT5hcC5zdGFUYWJsZVtpZF0ua2V5SWR4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN3aXRjaCAod2QtPnN0YS5lbmNyeU1vZGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBaTV9XRVA2NDoKKyAgICAgICAgY2FzZSBaTV9XRVAxMjg6CisgICAgICAgIGNhc2UgWk1fV0VQMjU2OgorICAgICAgICAgICAga2V5SWR4ID0gd2QtPnN0YS5rZXlJZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFpNX0FFUzoKKyAgICAgICAgY2FzZSBaTV9US0lQOgorICAgICAgICAgICAgaWYgKChkYVswXSAmIDB4MSkpCisgICAgICAgICAgICAgICAga2V5SWR4ID0gNTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBrZXlJZHggPSA0OworICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgWk1fRU5BQkxFX0NFTkMKKyAgICAgICAgY2FzZSBaTV9DRU5DOgorICAgICAgICAgICAga2V5SWR4ID0gd2QtPnN0YS5jZW5jS2V5SWQ7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDcmVhdGUgU05BUCAqLworICAgIHJlbW92ZUxlbiA9IHpmVHhHZW5XbGFuU25hcChkZXYsIGJ1Ziwgc25hcCwgJnNuYXBMZW4pOworICAgIC8vem1fbXNnMV90eChaTV9MVl8wLCAiZnJhZ09mZj0iLCBmcmFnT2ZmKTsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBBZGQgMjAwNzEwMjUgTXh6ZW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgRXRoZXJuZXQgOiBmcmFtZUxlbiA9IHpmd0J1ZkdldFNpemUoZGV2LCBidWYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0rLS02LS0rLS02LS0rLS0yLS0rLS0tLS0yMC0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tIFZhcmlhYmxlIC0tLS0tLS0rLS0tLS0tLS0tICovCisvKiAgICB8ICBEQSB8ICBTQSB8IFR5cGV8ICBJUCBIZWFkZXIgfCBUQ1AoMjApIFVEUCgxMikgSUNNUCg4KSB8IEFwcGxpY2F0aW9uIFBheWxvYWQgTCB8ICAgICAgICAgICovCisvKiAtLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tICovCisvKiAgTVNEVSA9IDYgKyA2ICsgMiArICggTmV0d29yayBMYXllciBoZWFkZXIgKSArICggVHJhbnNwb3J0IExheWVyIGhlYWRlciApICsgTCAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTVNEVSAtIERBIC0gU0EgOiBmcmFtZUxlbiAtPSByZW1vdmVMZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0rLS0yLS0rLS0tLS0yMC0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tIFZhcmlhYmxlIC0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgICB8IFR5cGV8IElQIEhlYWRlciAgfCBUQ1AoMjApIFVEUCgxMikgSUNNUCg4KSB8IEFwcGxpY2F0aW9uIFBheWxvYWQgTCB8ICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0rLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKgkJCQkJCQkJCQkJCSAgKi8KKy8qICBNUERVIDogZnJhbWVMZW4gKyBtcGR1TGVuZ3RoT2Zmc2V0IDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0rLS0tMi0tLSstLS0tMi0tLSstNi0rLTYtKy0tNi0tKy0tLTItLS0tKy0tMS0tKy0tMS0rLS0tMS0tLSstLS0tLS0tMy0tLS0tLSstZnJhbWVMZW4tKy0tLTQtLSstICovCisvKiAgfCBmcmFtZSB8ZHVyYXRpb258IERBfFNBIHxCU1NJRHxzZXF1ZW5jZXxTTkFQIHxTTkFQfENvbnRyb2x8ICAgIFJGQyAxMDQyICB8ICAgICAgICAgIHwgIEZDUyB8ICAqLworLyogIHxDb250cm9sfCAgICAgICAgfCAgIHwgICB8ICAgICB8IG51bWJlciB8RFNBUCB8U1NBUHwgICAgICAgfCBlbmNhcHN1bGF0aW9ufCAgICAgICAgICB8ICAgICAgfCAgKi8KKy8qIC0rLS0tLS0tLSstLS0tLS0tLSstLS0rLS0tKy0tLS0tKy0tLS0tLS0tKy0tLS0tKy0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLSstICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisgICAgaWYgKCB3ZC0+c3RhLmVuY3J5TW9kZSA9PSBaTV9US0lQICkKKyAgICAgICAgdGtpcEZyYW1lT2Zmc2V0ID0gODsKKworICAgIGZyYWdMZW4gPSB3ZC0+ZnJhZ1RocmVzaG9sZCArIHRraXBGcmFtZU9mZnNldDsgICAvLyBGcmFnbWVudGF0aW9uIHRocmVzaG9sZCBmb3IgTVBEVSBMZW5ndGhzCisgICAgZnJhbWVMZW4gPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsgICAgLy8gTVNEVSBMZW5ndGhzCisgICAgZnJhbWVMZW4gLT0gcmVtb3ZlTGVuOyAgICAgICAgICAgICAgICAgLy8gTVNEVSBMZW5ndGhzIC0gREEgLSBTQQorCisgICAgLyogIzFzdCBjcmVhdGUgTUlDIExlbmd0aCBtYW51YWxseSAqLworICAgIG1pY0xlbiA9IDA7CisKKyAgICAvKiBBY2Nlc3MgQ2F0ZWdvcnkgKi8KKyAgICBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApCisgICAgeworICAgICAgICB6ZkFwR2V0U3RhUW9zVHlwZShkZXYsIGRhLCAmcW9zVHlwZSk7CisgICAgICAgIGlmIChxb3NUeXBlID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVwID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSkKKyAgICB7CisgICAgICAgIGlmICh3ZC0+c3RhLndtZUNvbm5lY3RlZCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB1cCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogVE9ETyA6IFNUQSBRb1MgY29udHJvbCBmaWVsZCAqLworICAgICAgICB1cCA9IDA7CisgICAgfQorCisgICAgLyogIzJuZCBBc3NpZ24gc2VxdWVuY2UgbnVtYmVyICovCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICBmcmFnLnNlcVswXSA9ICgod2QtPnNlcVt6Y1VwVG9BY1t1cCYweDddXSsrKSA8PCA0KTsKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgLyogIzNyZCBQYXNzIHRoZSB0b3RhbCBwYXlsb2FkIHRvIGdlbmVyYXRlIE1QRFUgbGVuZ3RoICEgKi8KKyAgICBmcmFnLmJ1ZlswXSA9IGJ1ZjsKKyAgICBmcmFnLmJ1ZlR5cGVbMF0gPSBidWZUeXBlOworICAgIGZyYWcuZmxhZ1swXSA9ICh1OF90KWZsYWc7CisgICAgZnJhZ051bSA9IDE7CisKKyAgICBoZWFkZXJMZW4gPSB6ZlR4R2VuV2xhbkhlYWRlcihkZXYsIGZyYWcuYnVmWzBdLCBoZWFkZXIsIGZyYWcuc2VxWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWcuZmxhZ1swXSwgc25hcExlbittaWNMZW4sIHJlbW92ZUxlbiwgcG9ydCwgZGEsIHNhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwLCAmbWljTGVuLCBzbmFwLCBzbmFwTGVuLCBOVUxMKTsKKworICAgIC8vem1fZGVidWdfbXNnMSgiIzEgaGVhZGVyTGVuID0gIiwgaGVhZGVyTGVuKTsKKworICAgIC8qICM0dGggQ2hlY2sgdGhlIEhlYWRlckxlbiBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIE1QRFUgTGVuZ3RocyBiaWdnZXIgdGhhbiBGcmFnbWVudGF0aW9uIHRocmVzaG9sZCAgKi8KKyAgICAvKiBJZiBNUERVIExlbmd0aHMgbGFyZ2UgdGhhbiBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCAtLT4gaGVhZGVyTGVuID0gMCAqLworICAgIGlmKCBoZWFkZXJMZW4gIT0gMCApCisgICAgeworICAgICAgICB6ZjgwMjExRnJhbWVTZW5kKGRldiwgZnJhZy5idWZbMF0sIGhlYWRlciwgc25hcExlbiwgZGEsIHNhLCB1cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJMZW4sIHNuYXAsIG1pYywgbWljTGVuLCByZW1vdmVMZW4sIGZyYWcuYnVmVHlwZVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB6Y1VwVG9BY1t1cCYweDddLCBrZXlJZHgpOworICAgIH0KKyAgICBlbHNlIC8vaWYoIGhlYWRlckxlbiA9PSAwICkgLy8gTmVlZCB0byBiZSBmcmFnbWVudGVkCisgICAgeworICAgICAgICB1MTZfdCBtcGR1TGVuZ3RoT2Zmc2V0OworICAgICAgICB1MTZfdCBwc2V1ZFNuYXBMZW4gPSAwOworCisgICAgICAgIG1wZHVMZW5ndGhPZmZzZXQgPSBoZWFkZXJbMF0gLSBmcmFtZUxlbjsgLy8gRm9yIGZyYWdtZW50YXRpb24gdGhyZXNob2xkICEKKworICAgICAgICBtaWNMZW4gPSB6ZlR4R2VuV2xhblRhaWwoZGV2LCBidWYsIHNuYXAsIHNuYXBMZW4sIG1pYyk7IC8vIEdldCBzbmFwIGFuZCBtaWMgaW5mb3JtYXRpb24KKworICAgICAgICBmcmFnTGVuID0gZnJhZ0xlbiAtIG1wZHVMZW5ndGhPZmZzZXQ7CisKKyAgICAgICAgLy96bV9kZWJ1Z19tc2cxKCIjMiBmcmFtZUxlbiA9ICIsIGZyYW1lTGVuKTsKKyAgICAgICAgLy96bV9kZWJ1Z19tc2cxKCIjMyBmcmFnVGhyZXNob2xkID0gIiwgZnJhZ0xlbik7CisKKyAgICAgICAgLyogZnJhZ21lbnRhdGlvbiAqLworICAgICAgICBpZiAoZnJhbWVMZW4gPj0gZnJhZ0xlbikKKyAgICAgICAgeworICAgICAgICAgICAgLy9jb3B5IGZyYWdMZW4gdG8gZnJhZworICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICB3aGlsZSggZnJhbWVMZW4gPiAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKGZyYWcuYnVmW2ldID0gemZ3QnVmQWxsb2NhdGUoZGV2LCBmcmFnTGVuKzMyKSkgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZyYWcuYnVmVHlwZVtpXSA9IFpNX0lOVEVSTkFMX0FMTE9DX0JVRjsKKyAgICAgICAgICAgICAgICAgICAgZnJhZy5zZXFbaV0gPSBmcmFnLnNlcVswXSArIGk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHJlbW92ZUxlbiArIGkqZnJhZ0xlbjsKKworICAgICAgICAgICAgICAgICAgICAvKiBDb25zaWRlciB0aGUgb2Zmc2V0IGlmIHdlIGNvbnNpZGVyIHNuYXAgbGVuZ3RoIHRvIHRoZSBvdGhlciBmcmFnbWVudGVkIGZyYW1lICovCisgICAgICAgICAgICAgICAgICAgIGlmICggaSA+PSAxICkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldCArIHBzZXVkU25hcExlbiooaS0xKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVMZW4gPiBmcmFnTGVuICsgcHNldWRTbmFwTGVuKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmFnLmZsYWdbaV0gPSBmbGFnIHwgMHg0OyAvKiBNb3JlIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZpcnN0IGZyYWdtZW50ICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFkZCBTTkFQICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqPTA7IGo8c25hcExlbjsgais9MikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHptd190eF9idWZfd3JpdGVoKGRldiwgZnJhZy5idWZbaV0sIGosIHNuYXBbKGo+PjEpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmVHhCdWZmZXJDb3B5KGRldiwgZnJhZy5idWZbaV0sIGJ1Ziwgc25hcExlbiwgb2Zmc2V0LCBmcmFnTGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZndCdWZTZXRTaXplKGRldiwgZnJhZy5idWZbaV0sIHNuYXBMZW4rZnJhZ0xlbik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBZGQgcHNldWQgc25hcCBsZW5ndGggdG8gdGhlIG90aGVyIGZyYWdtZW50ZWQgZnJhbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2V1ZFNuYXBMZW4gPSBzbmFwTGVuOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVMZW4gLT0gZnJhZ0xlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybWVkaWF0ZSBGcmFnbWVudCAqLworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vemZUeEJ1ZmZlckNvcHkoZGV2LCBmcmFnLmJ1ZltpXSwgYnVmLCAwLCBvZmZzZXQsIGZyYWdMZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vemZ3QnVmU2V0U2l6ZShkZXYsIGZyYWcuYnVmW2ldLCBmcmFnTGVuKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmVHhCdWZmZXJDb3B5KGRldiwgZnJhZy5idWZbaV0sIGJ1ZiwgMCwgb2Zmc2V0LCBmcmFnTGVuK3BzZXVkU25hcExlbiApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmd0J1ZlNldFNpemUoZGV2LCBmcmFnLmJ1ZltpXSwgZnJhZ0xlbitwc2V1ZFNuYXBMZW4pOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVMZW4gLT0gKGZyYWdMZW4rcHNldWRTbmFwTGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vZnJhbWVMZW4gLT0gZnJhZ0xlbjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIExhc3QgZnJhZ21lbnQgICovCisgICAgICAgICAgICAgICAgICAgICAgICB6ZlR4QnVmZmVyQ29weShkZXYsIGZyYWcuYnVmW2ldLCBidWYsIDAsIG9mZnNldCwgZnJhbWVMZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgLyogQWRkIE1JQyBpZiBuZWVkICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIG1pY0xlbiApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgemZDb3B5VG9SeEJ1ZmZlcihkZXYsIGZyYWcuYnVmW2ldLCAodThfdCopIG1pYywgZnJhbWVMZW4sIG1pY0xlbik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB6ZndCdWZTZXRTaXplKGRldiwgZnJhZy5idWZbaV0sIGZyYW1lTGVuK21pY0xlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZUxlbiA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmFnLmZsYWdbaV0gPSAodThfdClmbGFnOyAvKiBObyBtb3JlIGRhdGEgKi8KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFBsZWFzZSBwYXkgYXR0ZW50aW9uIHRvIHRoZSBpbmRleCBvZiB0aGUgYnVmICEhIQorICAgICAgICAgICAgICAgIC8vIElmIHdyaXRlIHRvIG51bGwgYnVmICwgdGhlIE9TIHdpbGwgY3Jhc2ggISEhCisgICAgICAgICAgICAgICAgemZ3Q29weUJ1ZkNvbnRleHQoZGV2LCBidWYsIGZyYWcuYnVmW2ktMV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnJhZ051bSA9IGk7CisgICAgICAgICAgICBzbmFwTGVuID0gbWljTGVuID0gcmVtb3ZlTGVuID0gMDsKKworICAgICAgICAgICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGk9MDsgaTxmcmFnTnVtOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENyZWF0ZSBXTEFOIGhlYWRlcihDb250cm9sIFNldHRpbmcgKyA4MDIuMTEgaGVhZGVyICsgSVYpICovCisgICAgICAgICAgICBoZWFkZXJMZW4gPSB6ZlR4R2VuV2xhbkhlYWRlcihkZXYsIGZyYWcuYnVmW2ldLCBoZWFkZXIsIGZyYWcuc2VxW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZy5mbGFnW2ldLCBzbmFwTGVuK21pY0xlbiwgcmVtb3ZlTGVuLCBwb3J0LCBkYSwgc2EsIHVwLCAmbWljTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcCwgc25hcExlbiwgTlVMTCk7CisKKyAgICAgICAgICAgIHpmODAyMTFGcmFtZVNlbmQoZGV2LCBmcmFnLmJ1ZltpXSwgaGVhZGVyLCBzbmFwTGVuLCBkYSwgc2EsIHVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJMZW4sIHNuYXAsIG1pYywgbWljTGVuLCByZW1vdmVMZW4sIGZyYWcuYnVmVHlwZVtpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemNVcFRvQWNbdXAmMHg3XSwga2V5SWR4KTsKKworICAgICAgICB9IC8qIGZvciAoaT0wOyBpPGZyYWdOdW07IGkrKykgKi8KKyAgICB9CisKKyAgICByZXR1cm4gWk1fU1VDQ0VTUzsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZUeFBvcnRDb250cm9sICAgICAgICAgICAgICovCisvKiAgICAgIENoZWNrIHBvcnQgc3RhdHVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZiA6IGJ1ZmZlciBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBwb3J0IDogcG9ydCBudW1iZXIsIDA9PnN0YW5kYXJkLCAxMC0xNz0+VmlydHVhbCBBUCwgMjAtMjU9PldEUyAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBaTV9QT1JUX0VOQUJMRUQgb3IgWk1fUE9SVF9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTaWduYXR1cmUgICAgICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNS40ICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZUeFBvcnRDb250cm9sKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgcG9ydCkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFICkKKyAgICB7CisgICAgICAgIGlmICggd2QtPnN0YS5hZGFwdGVyU3RhdGUgPT0gWk1fU1RBX1NUQVRFX0RJU0NPTk5FQ1QgKQorICAgICAgICB7CisgICAgICAgICAgICB6bV9tc2cwX3R4KFpNX0xWXzMsICJQYWNrZXRzIGRyb3BwZWQgZHVlIHRvIGRpc2Nvbm5lY3Qgc3RhdGUiKTsKKyAgICAgICAgICAgIHJldHVybiBaTV9QT1JUX0RJU0FCTEVEOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFpNX1BPUlRfRU5BQkxFRDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZklkbFJlY3YgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgRG8gZnJhbWUgdmFsaWRhdGlvbiBhbmQgZmlsdGVyaW5nIHRoZW4gcGFzcyB0byB6ZndSZWN2ODAyMTEoKS4gICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZiA6IHJlY2VpdmVkIDgwMi4xMSBmcmFtZSBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFN0ZXBoZW4gICAgICAgICAgICAgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAgICAyMDA1LjEwICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHpmQ29yZVJlY3YoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCBzdHJ1Y3QgenNBZGRpdGlvbkluZm8qIGFkZEluZm8pCit7CisgICAgdTE2X3QgcmV0ID0gMDsKKyAgICB1MTZfdCBic3NpZFszXTsKKyAgICBzdHJ1Y3QgYWdnX3RpZF9yeCAqdGlkX3J4OworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIFpNX0JVRkZFUl9UUkFDRShkZXYsIGJ1ZikKKworICAgIC8qIHRhbGx5ICovCisgICAgd2QtPmNvbW1UYWxseS5Ecml2ZXJSeEZybUNudCsrOworCisgICAgYnNzaWRbMF0gPSB6bXdfYnVmX3JlYWRoKGRldiwgYnVmLCAxNik7CisgICAgYnNzaWRbMV0gPSB6bXdfYnVmX3JlYWRoKGRldiwgYnVmLCAxOCk7CisgICAgYnNzaWRbMl0gPSB6bXdfYnVmX3JlYWRoKGRldiwgYnVmLCAyMCk7CisKKyAgICAvKiBWYWxpZGF0ZSBSeCBmcmFtZSAqLworICAgIGlmICgocmV0ID0gemZXbGFuUnhWYWxpZGF0ZShkZXYsIGJ1ZikpICE9IFpNX1NVQ0NFU1MpCisgICAgeworICAgICAgICB6bV9tc2cxX3J4KFpNX0xWXzEsICJSeCBpbnZhbGlkOiIsIHJldCk7CisgICAgICAgIGdvdG8gemxFcnJvcjsKKyAgICB9CisKKyNpZmRlZiBaTV9FTkFCTEVfQUdHUkVHQVRJT04KKyAgICAvLyNpZm5kZWYgWk1fRU5BQkxFX0ZXX0JBX1JFVFJBTlNNSVNTSU9OCisgICAgLyoKKyAgICAgKiBhZGQgYnkgaG9uZGEKKyAgICAgKi8KKyAgICB0aWRfcnggPSB6ZkFnZ1J4RW5hYmxlZChkZXYsIGJ1Zik7CisgICAgaWYgKHRpZF9yeCAmJiB3ZC0+cmVvcmRlcikKKyAgICB7CisgICAgICAgIHpmQWdnUngoZGV2LCBidWYsIGFkZEluZm8sIHRpZF9yeCk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvKgorICAgICAqIGVuZCBvZiBhZGQgYnkgaG9uZGEKKyAgICAgKi8KKyAgICAvLyNlbmRpZgorI2VuZGlmCisKKyAgICAvKiBGaWx0ZXIgUnggZnJhbWUgKi8KKyAgICBpZiAoKHJldCA9IHpmV2xhblJ4RmlsdGVyKGRldiwgYnVmKSkgIT0gWk1fU1VDQ0VTUykKKyAgICB7CisgICAgICAgIHptX21zZzFfcngoWk1fTFZfMSwgIlJ4IGR1cGxpY2F0ZWQ6IiwgcmV0KTsKKyAgICAgICAgZ290byB6bEVycm9yOworICAgIH0KKworICAgIC8qIERpc2NhcmQgZXJyb3IgZnJhbWUgZXhjZXB0IG1pYyBmYWlsdXJlICovCisgICAgaWYgKChhZGRJbmZvLT5UYWlsLkRhdGEuRXJyb3JJbmRpY2F0aW9uICYgMHgzZikgIT0gMCkKKyAgICB7CisgICAgICAgIGlmICggd2QtPlhMaW5rTW9kZSAmJiAoKGFkZEluZm8tPlRhaWwuRGF0YS5FcnJvckluZGljYXRpb24gJiAweDNmKT09MHgxMCkgJiYKKyAgICAgICAgICAgICB6ZkNvbXBhcmVXaXRoQnNzaWQoZGV2LCBic3NpZCkgKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBCeXBhc3MgZnJhbWVzICEhIQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZ290byB6bEVycm9yOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKiBPVFVTIGNvbW1hbmQtODIxMiBkdW1wIHJ4IHBhY2tldCAqLworICAgIGlmICh3ZC0+cnhQYWNrZXREdW1wKQorICAgIHsKKyAgICAgICAgemZ3RHVtcEJ1ZihkZXYsIGJ1Zik7CisgICAgfQorCisgICAgLyogQ2FsbCB6ZndSZWN2ODAyMTEoKSB3cmFwcGVyIGZ1bmN0aW9uIHRvIGRlbGl2ZXIgUnggcGFja2V0ICovCisgICAgLyogdG8gZHJpdmVyIGZyYW1ld29yay4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICBpZiAod2QtPnpmY2JSZWN2ODAyMTEgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHdkLT56ZmNiUmVjdjgwMjExKGRldiwgYnVmLCBhZGRJbmZvKTsgLy9DV1lhbmcobSkKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgemZpUmVjdjgwMjExKGRldiwgYnVmLCBhZGRJbmZvKTsKKyAgICB9CisgICAgcmV0dXJuOworCit6bEVycm9yOgorICAgIHptX21zZzFfcngoWk1fTFZfMSwgIkZyZWUgcGFja2V0LCBlcnJvciBjb2RlOiIsIHJldCk7CisKKyAgICB3ZC0+Y29tbVRhbGx5LkRyaXZlckRpc2NhcmRlZEZybSsrOworCisgICAgLyogRnJlZSBSeCBidWZmZXIgKi8KKyAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKworICAgIHJldHVybjsKK30KKworCit2b2lkIHpmU2hvd1J4RUFQT0woemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQpCit7CisgICAgdThfdCAgIHBhY2tldFR5cGUsIGtleVR5cGUsIGNvZGUsIGlkZW50aWZpZXIsIHR5cGUsIGZsYWdzOworICAgIHUxNl90ICBwYWNrZXRMZW4sIGtleUluZm8sIGtleUxlbiwga2V5RGF0YUxlbiwgbGVuZ3RoLCBPcF9Db2RlOworICAgIHUzMl90ICByZXBsYXlDb3VudGVySCwgcmVwbGF5Q291bnRlckwsIHZlbmRvcklkLCBWZW5kb3JUeXBlOworCisgICAgLyogRUFQT0wgcGFja2V0IHR5cGUgKi8KKyAgICBwYWNrZXRUeXBlID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzEpOyAvLyAwOiBFQVAtUGFja2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTogRUFQT0wtU3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyOiBFQVBPTC1Mb2dvZmYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzOiBFQVBPTC1LZXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA0OiBFQVBPTC1FbmNhcHN1bGF0ZWQtQVNGLUFsZXJ0CisKKyAgICAvKiBFQVBPTCBmcmFtZSBmb3JtYXQgKi8KKyAgICAvKiAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSAgICovCisgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAqLworICAgIC8qICAgICAgICAgICAgUEFFIEV0aGVybmV0IFR5cGUgKDB4ODg4ZSkgICAgICAgICAgICAgKi8KKyAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAyICovCisgICAgLyogICAgIFByb3RvY29sIFZlcnNpb24gICAgfCAgICAgICAgIFR5cGUgICAgICAgICAgICAqLworICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIDQgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoICAgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gNiAqLworICAgIC8qICAgICAgICAgICAgICAgICAgICBQYWNrZXQgQm9keSAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBOICovCisKKyAgICAvKiBFQVBPTCBib2R5IGxlbmd0aCAqLworICAgIHBhY2tldExlbiA9ICgoKHUxNl90KSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMikpIDw8IDgpICsKKyAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMyk7CisKKyAgICBpZiggcGFja2V0VHlwZSA9PSAwICkKKyAgICB7IC8vIEVBUC1QYWNrZXQKKworICAgICAgICAvKiBFQVAtUGFja2V0IENvZGUgKi8KKyAgICAgICAgY29kZSA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs0KTsgLy8gMSA6IFJlcXVlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMiA6IFJlc3BvbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgOiBTdWNjZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDQgOiBGYWlsdXJlCisgICAgICAgIC8vIEFuIEVBUCBwYWNrZXQgb2YgdGhlIHR5cGUgb2YgU3VjY2VzcyBhbmQgRmFpbHVyZSBoYXMgbm8gRGF0YSBmaWVsZCwgYW5kIGhhcyBhIGxlbmd0aCBvZiA0LgorCisgICAgICAgIC8qIEVBUCBQYWNrZXQgZm9ybWF0ICovCisgICAgICAgIC8qICAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIDEzIDE0IDE1ICAgKi8KKyAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAqLworICAgICAgICAvKiAgICAgICAgICAgQ29kZSAgICAgICAgICB8ICAgICAgICBJZGVudGlmaWVyICAgICAgICovCisgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIDIgKi8KKyAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA0ICovCisgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTiAqLworCisgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUC1QYWNrZXQiKTsKKyAgICAgICAgem1fZGVidWdfbXNnMSgiUGFja2V0IExlbmd0aCA9ICIsIHBhY2tldExlbik7CisgICAgICAgIHptX2RlYnVnX21zZzEoIkVBUC1QYWNrZXQgQ29kZSA9ICIsIGNvZGUpOworCisgICAgICAgIGlmKCBjb2RlID09IDEgKQorICAgICAgICB7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJFQVAtUGFja2V0IFJlcXVlc3QiKTsKKworICAgICAgICAgICAgLyogRUFQLVBhY2tldCBJZGVudGlmaWVyICovCisgICAgICAgICAgICBpZGVudGlmaWVyID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzUpOworICAgICAgICAgICAgLyogRUFQLVBhY2tldCBMZW5ndGggKi8KKyAgICAgICAgICAgIGxlbmd0aCA9ICgoKHUxNl90KSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNikpIDw8IDgpICsKKyAgICAgICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNyk7CisgICAgICAgICAgICAvKiBFQVAtUGFja2V0IFR5cGUgKi8KKyAgICAgICAgICAgIHR5cGUgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrOCk7IC8vIDEgICA6IElkZW50aXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyICAgOiBOb3RpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgICA6IE5hayAoUmVzcG9uc2UgT25seSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDQgICA6IE1ENS1DaGFsbGVuZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDUgICA6IE9uZSBUaW1lIFBhc3N3b3JkIChPVFApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA2ICAgOiBHZW5lcmljIFRva2VuIENhcmQgKEdUQykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDI1NCA6IChFeHBhbmRlZCBUeXBlcylXaS1GaSBQcm90ZWN0ZWQgU2V0dXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDI1NSA6IEV4cGVyaW1lbnRhbCBVc2UKKworICAgICAgICAgICAgLyogVGhlIGRhdGEgZmllbGQgaW4gYW4gRUFQIHBhY2tldCBvZiB0aGUgdHlwZSBvZiBSZXF1ZXN0IG9yIFJlc3BvbnNlIGlzIGluIHRoZSBmb3JtYXQgc2hvd24gYmVsbG93aW5nICovCisgICAgICAgICAgICAvKiAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgICAgICAgICAgICBOICAgICAgICAgICAgICovCisgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICovCisgICAgICAgICAgICAvKiAgICAgICAgICAgVHlwZSAgICAgICAgICB8ICAgICAgICBUeXBlIERhdGEgICAgICAgICovCisgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICovCisKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzEoIkVBUC1QYWNrZXQgSWRlbnRpZmllciA9ICIsIGlkZW50aWZpZXIpOworICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiRUFQLVBhY2tldCBMZW5ndGggPSAiLCBsZW5ndGgpOworICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiRUFQLVBhY2tldCBUeXBlID0gIiwgdHlwZSk7CisKKyAgICAgICAgICAgIGlmKCB0eXBlID09IDEgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUC1QYWNrZXQgUmVxdWVzdCBJZGVudGl0eSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggdHlwZSA9PSAyICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJFQVAtUGFja2V0IFJlcXVlc3QgTm90aWZpY2F0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCB0eXBlID09IDQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUC1QYWNrZXQgUmVxdWVzdCBNRDUtQ2hhbGxlbmdlIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCB0eXBlID09IDUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUC1QYWNrZXQgUmVxdWVzdCBPbmUgVGltZSBQYXNzd29yZCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggdHlwZSA9PSA2ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJFQVAtUGFja2V0IFJlcXVlc3QgR2VuZXJpYyBUb2tlbiBDYXJkIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCB0eXBlID09IDI1NCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiRUFQLVBhY2tldCBSZXF1ZXN0IFdpLUZpIFByb3RlY3RlZCBTZXR1cCIpOworCisgICAgICAgICAgICAgICAgLyogMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMyAgICovCisgICAgICAgICAgICAgICAgLyogMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxICovCisgICAgICAgICAgICAgICAgLyorLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyovCisgICAgICAgICAgICAgICAgLyp8ICAgICBUeXBlICAgICAgfCAgICAgICAgICAgICAgIFZlbmRvci1JZCAgICAgICAgICAgICAgICAgICAgICAgfCovCisgICAgICAgICAgICAgICAgLyorLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyovCisgICAgICAgICAgICAgICAgLyp8ICAgICAgICAgICAgICAgICAgICAgICAgICBWZW5kb3ItVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCovCisgICAgICAgICAgICAgICAgLyorLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyovCisgICAgICAgICAgICAgICAgLyp8ICAgICAgICAgICAgICBWZW5kb3IgZGF0YS4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgLyorLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgICAgICAvKiBFQVAtUGFja2V0IFZlbmRvciBJRCAqLworICAgICAgICAgICAgICAgIHZlbmRvcklkID0gKCgodTMyX3QpIHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs5KSkgPDwgMTYpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHUzMl90KSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTApKSA8PCA4KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTEpOworICAgICAgICAgICAgICAgIC8qIEVBUC1QYWNrZXQgVmVuZG9yIFR5cGUgKi8KKyAgICAgICAgICAgICAgICBWZW5kb3JUeXBlID0gKCgodTMyX3QpIHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxMikpIDw8IDI0KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHUzMl90KSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTMpKSA8PCAxNikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1MzJfdCkgem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzE0KSkgPDwgOCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTUpOworICAgICAgICAgICAgICAgIC8qIEVBUC1QYWNrZXQgT3AgQ29kZSAqLworICAgICAgICAgICAgICAgIE9wX0NvZGUgPSAoKCh1MTZfdCkgem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzE2KSkgPDwgOCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTcpOworICAgICAgICAgICAgICAgIC8qIEVBUC1QYWNrZXQgRmxhZ3MgKi8KKyAgICAgICAgICAgICAgICBmbGFncyA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxOCk7CisKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJFQVAtUGFja2V0IFZlbmRvciBJRCA9ICIsIHZlbmRvcklkKTsKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJFQVAtUGFja2V0IFZlbm9kciBUeXBlID0gIiwgVmVuZG9yVHlwZSk7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiRUFQLVBhY2tldCBPcCBDb2RlID0gIiwgT3BfQ29kZSk7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiRUFQLVBhY2tldCBGbGFncyA9ICIsIGZsYWdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBjb2RlID09IDIgKQorICAgICAgICB7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJFQVAtUGFja2V0IFJlc3BvbnNlIik7CisKKyAgICAgICAgICAgIC8qIEVBUC1QYWNrZXQgSWRlbnRpZmllciAqLworICAgICAgICAgICAgaWRlbnRpZmllciA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs1KTsKKyAgICAgICAgICAgIC8qIEVBUC1QYWNrZXQgTGVuZ3RoICovCisgICAgICAgICAgICBsZW5ndGggPSAoKCh1MTZfdCkgem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzYpKSA8PCA4KSArCisgICAgICAgICAgICAgICAgICAgICAgem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzcpOworICAgICAgICAgICAgLyogRUFQLVBhY2tldCBUeXBlICovCisgICAgICAgICAgICB0eXBlID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzgpOworCisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJFQVAtUGFja2V0IElkZW50aWZpZXIgPSAiLCBpZGVudGlmaWVyKTsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzEoIkVBUC1QYWNrZXQgTGVuZ3RoID0gIiwgbGVuZ3RoKTsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzEoIkVBUC1QYWNrZXQgVHlwZSA9ICIsIHR5cGUpOworCisgICAgICAgICAgICBpZiggdHlwZSA9PSAxICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJFQVAtUGFja2V0IFJlc3BvbnNlIElkZW50aXR5Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCB0eXBlID09IDIgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUC1QYWNrZXQgUmVxdWVzdCBOb3RpZmljYXRpb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoIHR5cGUgPT0gMyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiRUFQLVBhY2tldCBSZXF1ZXN0IE5hayIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggdHlwZSA9PSA0ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJFQVAtUGFja2V0IFJlcXVlc3QgTUQ1LUNoYWxsZW5nZSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggdHlwZSA9PSA1ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJFQVAtUGFja2V0IFJlcXVlc3QgT25lIFRpbWUgUGFzc3dvcmQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoIHR5cGUgPT0gNiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiRUFQLVBhY2tldCBSZXF1ZXN0IEdlbmVyaWMgVG9rZW4gQ2FyZCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggdHlwZSA9PSAyNTQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUC1QYWNrZXQgUmVzcG9uc2UgV2ktRmkgUHJvdGVjdGVkIFNldHVwIik7CisKKyAgICAgICAgICAgICAgICAvKiBFQVAtUGFja2V0IFZlbmRvciBJRCAqLworICAgICAgICAgICAgICAgIHZlbmRvcklkID0gKCgodTMyX3QpIHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs5KSkgPDwgMTYpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHUzMl90KSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTApKSA8PCA4KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTEpOworICAgICAgICAgICAgICAgIC8qIEVBUC1QYWNrZXQgVmVuZG9yIFR5cGUgKi8KKyAgICAgICAgICAgICAgICBWZW5kb3JUeXBlID0gKCgodTMyX3QpIHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxMikpIDw8IDI0KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHUzMl90KSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTMpKSA8PCAxNikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1MzJfdCkgem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzE0KSkgPDwgOCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTUpOworICAgICAgICAgICAgICAgIC8qIEVBUC1QYWNrZXQgT3AgQ29kZSAqLworICAgICAgICAgICAgICAgIE9wX0NvZGUgPSAoKCh1MTZfdCkgem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzE2KSkgPDwgOCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTcpOworICAgICAgICAgICAgICAgIC8qIEVBUC1QYWNrZXQgRmxhZ3MgKi8KKyAgICAgICAgICAgICAgICBmbGFncyA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxOCk7CisKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJFQVAtUGFja2V0IFZlbmRvciBJRCA9ICIsIHZlbmRvcklkKTsKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJFQVAtUGFja2V0IFZlbm9kciBUeXBlID0gIiwgVmVuZG9yVHlwZSk7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiRUFQLVBhY2tldCBPcCBDb2RlID0gIiwgT3BfQ29kZSk7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiRUFQLVBhY2tldCBGbGFncyA9ICIsIGZsYWdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBjb2RlID09IDMgKQorICAgICAgICB7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJFQVAtUGFja2V0IFN1Y2Nlc3MiKTsKKworICAgICAgICAgICAgLyogRUFQLVBhY2tldCBJZGVudGlmaWVyICovCisgICAgICAgICAgICBpZGVudGlmaWVyID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzUpOworICAgICAgICAgICAgLyogRUFQLVBhY2tldCBMZW5ndGggKi8KKyAgICAgICAgICAgIGxlbmd0aCA9ICgoKHUxNl90KSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNikpIDw8IDgpICsKKyAgICAgICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNyk7CisKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzEoIkVBUC1QYWNrZXQgSWRlbnRpZmllciA9ICIsIGlkZW50aWZpZXIpOworICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiRUFQLVBhY2tldCBMZW5ndGggPSAiLCBsZW5ndGgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIGNvZGUgPT0gNCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUC1QYWNrZXQgRmFpbHVyZSIpOworCisgICAgICAgICAgICAvKiBFQVAtUGFja2V0IElkZW50aWZpZXIgKi8KKyAgICAgICAgICAgIGlkZW50aWZpZXIgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNSk7CisgICAgICAgICAgICAvKiBFQVAtUGFja2V0IExlbmd0aCAqLworICAgICAgICAgICAgbGVuZ3RoID0gKCgodTE2X3QpIHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs2KSkgPDwgOCkgKworICAgICAgICAgICAgICAgICAgICAgIHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs3KTsKKworICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiRUFQLVBhY2tldCBJZGVudGlmaWVyID0gIiwgaWRlbnRpZmllcik7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJFQVAtUGFja2V0IExlbmd0aCA9ICIsIGxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiggcGFja2V0VHlwZSA9PSAxICkKKyAgICB7IC8vIEVBUE9MLVN0YXJ0CisgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUE9MLVN0YXJ0Iik7CisgICAgfQorICAgIGVsc2UgaWYoIHBhY2tldFR5cGUgPT0gMiApCisgICAgeyAvLyBFQVBPTC1Mb2dvZmYKKyAgICAgICAgem1fZGVidWdfbXNnMCgiRUFQT0wtTG9nb2ZmIik7CisgICAgfQorICAgIGVsc2UgaWYoIHBhY2tldFR5cGUgPT0gMyApCisgICAgeyAvLyBFQVBPTC1LZXkKKyAgICAgICAgLyogRUFQT0wtS2V5IHR5cGUgKi8KKyAgICAgICAga2V5VHlwZSA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs0KTsKKyAgICAgICAgLyogRUFQT0wtS2V5IGluZm9ybWF0aW9uICovCisgICAgICAgIGtleUluZm8gPSAoKCh1MTZfdCkgem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzUpKSA8PCA4KSArCisgICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNik7CisgICAgICAgIC8qIEVBUE9MLUtleSBsZW5ndGggKi8KKyAgICAgICAga2V5TGVuID0gKCgodTE2X3QpIHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs3KSkgPDwgOCkgKworICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrOCk7CisgICAgICAgIC8qIEVBUE9MLUtleSByZXBsYXkgY291bnRlciAoaGlnaCBkb3VibGUgd29yZCkgKi8KKyAgICAgICAgcmVwbGF5Q291bnRlckggPSAoKCh1MzJfdCkgem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzkpKSA8PCAyNCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICgoKHUzMl90KSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTApKSA8PCAxNikgKworICAgICAgICAgICAgICAgICAgICAgICAgICgoKHUzMl90KSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTEpKSA8PCA4KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzEyKTsKKyAgICAgICAgLyogRUFQT0wtS2V5IHJlcGxheSBjb3VudGVyIChsb3cgZG91YmxlIHdvcmQpICovCisgICAgICAgIHJlcGxheUNvdW50ZXJMID0gKCgodTMyX3QpIHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxMykpIDw8IDI0KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgodTMyX3QpIHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxNCkpIDw8IDE2KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgodTMyX3QpIHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxNSkpIDw8IDgpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTYpOworICAgICAgICAvKiBFQVBPTC1LZXkgZGF0YSBsZW5ndGggKi8KKyAgICAgICAga2V5RGF0YUxlbiA9ICgoKHUxNl90KSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrOTcpKSA8PCA4KSArCisgICAgICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrOTgpOworCisgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUE9MLUtleSIpOworICAgICAgICB6bV9kZWJ1Z19tc2cxKCJwYWNrZXQgbGVuZ3RoID0gIiwgcGFja2V0TGVuKTsKKworICAgICAgICBpZiAoIGtleVR5cGUgPT0gMjU0ICkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgia2V5IHR5cGUgPSAyNTQgKFNTTiBrZXkgZGVzY3JpcHRvcikiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzIoImtleSB0eXBlID0gMHgiLCBrZXlUeXBlKTsKKyAgICAgICAgfQorCisgICAgICAgIHptX2RlYnVnX21zZzIoInJlcGxheSBjb3VudGVyKEwpID0gIiwgcmVwbGF5Q291bnRlckwpOworCisgICAgICAgIHptX2RlYnVnX21zZzIoImtleSBpbmZvcm1hdGlvbiA9ICIsIGtleUluZm8pOworCisgICAgICAgIGlmICgga2V5SW5mbyAmIFpNX0JJVF8zICkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiICAgIC0gcGFpcndpc2Uga2V5Iik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCIgICAgLSBncm91cCBrZXkiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgga2V5SW5mbyAmIFpNX0JJVF82ICkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiICAgIC0gVHgga2V5IGluc3RhbGxlZCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiICAgIC0gVHgga2V5IG5vdCBzZXQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgga2V5SW5mbyAmIFpNX0JJVF83ICkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiICAgIC0gQWNrIG5lZWRlZCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiICAgIC0gQWNrIG5vdCBuZWVkZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgga2V5SW5mbyAmIFpNX0JJVF84ICkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiICAgIC0gTUlDIHNldCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiICAgIC0gTUlDIG5vdCBzZXQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgga2V5SW5mbyAmIFpNX0JJVF85ICkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiICAgIC0gcGFja2V0IGVuY3J5cHRlZCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiICAgIC0gcGFja2V0IG5vdCBlbmNyeXB0ZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIHptX2RlYnVnX21zZzEoImtleUxlbiA9ICIsIGtleUxlbik7CisgICAgICAgIHptX2RlYnVnX21zZzEoImtleURhdGFMZW4gPSAiLCBrZXlEYXRhTGVuKTsKKyAgICB9CisgICAgZWxzZSBpZiggcGFja2V0VHlwZSA9PSA0ICkKKyAgICB7CisgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUE9MLUVuY2Fwc3VsYXRlZC1BU0YtQWxlcnQiKTsKKyAgICB9Cit9CisKK3ZvaWQgemZTaG93VHhFQVBPTCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCkKK3sKKyAgICB1OF90ICAgcGFja2V0VHlwZSwga2V5VHlwZSwgY29kZSwgaWRlbnRpZmllciwgdHlwZSwgZmxhZ3M7CisgICAgdTE2X3QgIHBhY2tldExlbiwga2V5SW5mbywga2V5TGVuLCBrZXlEYXRhTGVuLCBsZW5ndGgsIE9wX0NvZGU7CisgICAgdTMyX3QgIHJlcGxheUNvdW50ZXJILCByZXBsYXlDb3VudGVyTCwgdmVuZG9ySWQsIFZlbmRvclR5cGU7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bV9kZWJ1Z19tc2cxKCJFQVBPTCBQYWNrZXQgc2l6ZSA9ICIsIHpmd0J1ZkdldFNpemUoZGV2LCBidWYpKTsKKworICAgIC8qIEVBUE9MIHBhY2tldCB0eXBlICovCisgICAgLy8gMDogRUFQLVBhY2tldAorICAgIC8vIDE6IEVBUE9MLVN0YXJ0CisgICAgLy8gMjogRUFQT0wtTG9nb2ZmCisgICAgLy8gMzogRUFQT0wtS2V5CisgICAgLy8gNDogRUFQT0wtRW5jYXBzdWxhdGVkLUFTRi1BbGVydAorCisgICAgLyogRUFQT0wgZnJhbWUgZm9ybWF0ICovCisgICAgLyogIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUgICAqLworICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgKi8KKyAgICAvKiAgICAgICAgICAgIFBBRSBFdGhlcm5ldCBUeXBlICgweDg4OGUpICAgICAgICAgICAgICovCisgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gMiAqLworICAgIC8qICAgICBQcm90b2NvbCBWZXJzaW9uICAgIHwgICAgICAgICBUeXBlICAgICAgICAgICAgKi8KKyAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA0ICovCisgICAgLyogICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIDYgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgICAgUGFja2V0IEJvZHkgICAgICAgICAgICAgICAgICAgICovCisgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTiAqLworCisgICAgcGFja2V0VHlwZSA9IHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxKTsKKyAgICAvKiBFQVBPTCBib2R5IGxlbmd0aCAqLworICAgIHBhY2tldExlbiA9ICgoKHUxNl90KSB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMikpIDw8IDgpICsKKyAgICAgICAgICAgICAgICB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMyk7CisKKyAgICBpZiggcGFja2V0VHlwZSA9PSAwICkKKyAgICB7IC8vIEVBUC1QYWNrZXQKKyAgICAgICAgLyogRUFQLVBhY2tldCBDb2RlICovCisgICAgICAgIGNvZGUgPSB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNCk7IC8vIDEgOiBSZXF1ZXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIgOiBSZXNwb25zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzIDogU3VjY2VzcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA0IDogRmFpbHVyZQorCisgICAgICAgIC8vIEFuIEVBUCBwYWNrZXQgb2YgdGhlIHR5cGUgb2YgU3VjY2VzcyBhbmQgRmFpbHVyZSBoYXMgbm8gRGF0YSBmaWVsZCwgYW5kIGhhcyBhIGxlbmd0aCBvZiA0LgorCisgICAgICAgIC8qIEVBUCBQYWNrZXQgZm9ybWF0ICovCisgICAgICAgIC8qICAwICAxICAyICAzICA0ICA1ICA2ICA3ICA4ICA5IDEwIDExIDEyIDEzIDE0IDE1ICAgKi8KKyAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAqLworICAgICAgICAvKiAgICAgICAgICAgQ29kZSAgICAgICAgICB8ICAgICAgICBJZGVudGlmaWVyICAgICAgICovCisgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIDIgKi8KKyAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA0ICovCisgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTiAqLworCisgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUC1QYWNrZXQiKTsKKyAgICAgICAgem1fZGVidWdfbXNnMSgiUGFja2V0IExlbmd0aCA9ICIsIHBhY2tldExlbik7CisgICAgICAgIHptX2RlYnVnX21zZzEoIkVBUC1QYWNrZXQgQ29kZSA9ICIsIGNvZGUpOworCisgICAgICAgIGlmKCBjb2RlID09IDEgKQorICAgICAgICB7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJFQVAtUGFja2V0IFJlcXVlc3QiKTsKKworICAgICAgICAgICAgLyogRUFQLVBhY2tldCBJZGVudGlmaWVyICovCisgICAgICAgICAgICBpZGVudGlmaWVyID0gem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzUpOworICAgICAgICAgICAgLyogRUFQLVBhY2tldCBMZW5ndGggKi8KKyAgICAgICAgICAgIGxlbmd0aCA9ICgoKHUxNl90KSB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNikpIDw8IDgpICsKKyAgICAgICAgICAgICAgICAgICAgICB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNyk7CisgICAgICAgICAgICAvKiBFQVAtUGFja2V0IFR5cGUgKi8KKyAgICAgICAgICAgIHR5cGUgPSB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrOCk7IC8vIDEgICA6IElkZW50aXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyICAgOiBOb3RpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgICA6IE5hayAoUmVzcG9uc2UgT25seSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDQgICA6IE1ENS1DaGFsbGVuZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDUgICA6IE9uZSBUaW1lIFBhc3N3b3JkIChPVFApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA2ICAgOiBHZW5lcmljIFRva2VuIENhcmQgKEdUQykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDI1NCA6IChFeHBhbmRlZCBUeXBlcylXaS1GaSBQcm90ZWN0ZWQgU2V0dXAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDI1NSA6IEV4cGVyaW1lbnRhbCBVc2UKKworICAgICAgICAgICAgLyogVGhlIGRhdGEgZmllbGQgaW4gYW4gRUFQIHBhY2tldCBvZiB0aGUgdHlwZSBvZiBSZXF1ZXN0IG9yIFJlc3BvbnNlIGlzIGluIHRoZSBmb3JtYXQgc2hvd24gYmVsbG93aW5nICovCisgICAgICAgICAgICAvKiAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgICAgICAgICAgICBOICAgICAgICAgICAgICovCisgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICovCisgICAgICAgICAgICAvKiAgICAgICAgICAgVHlwZSAgICAgICAgICB8ICAgICAgICBUeXBlIERhdGEgICAgICAgICovCisgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgICovCisKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzEoIkVBUC1QYWNrZXQgSWRlbnRpZmllciA9ICIsIGlkZW50aWZpZXIpOworICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiRUFQLVBhY2tldCBMZW5ndGggPSAiLCBsZW5ndGgpOworICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiRUFQLVBhY2tldCBUeXBlID0gIiwgdHlwZSk7CisKKyAgICAgICAgICAgIGlmKCB0eXBlID09IDEgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUC1QYWNrZXQgUmVxdWVzdCBJZGVudGl0eSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggdHlwZSA9PSAyICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJFQVAtUGFja2V0IFJlcXVlc3QgTm90aWZpY2F0aW9uIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCB0eXBlID09IDQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUC1QYWNrZXQgUmVxdWVzdCBNRDUtQ2hhbGxlbmdlIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCB0eXBlID09IDUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUC1QYWNrZXQgUmVxdWVzdCBPbmUgVGltZSBQYXNzd29yZCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggdHlwZSA9PSA2ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJFQVAtUGFja2V0IFJlcXVlc3QgR2VuZXJpYyBUb2tlbiBDYXJkIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCB0eXBlID09IDI1NCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiRUFQLVBhY2tldCBSZXF1ZXN0IFdpLUZpIFByb3RlY3RlZCBTZXR1cCIpOworCisgICAgICAgICAgICAgICAgLyogMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMyAgICovCisgICAgICAgICAgICAgICAgLyogMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxICovCisgICAgICAgICAgICAgICAgLyorLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyovCisgICAgICAgICAgICAgICAgLyp8ICAgICBUeXBlICAgICAgfCAgICAgICAgICAgICAgIFZlbmRvci1JZCAgICAgICAgICAgICAgICAgICAgICAgfCovCisgICAgICAgICAgICAgICAgLyorLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyovCisgICAgICAgICAgICAgICAgLyp8ICAgICAgICAgICAgICAgICAgICAgICAgICBWZW5kb3ItVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCovCisgICAgICAgICAgICAgICAgLyorLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyovCisgICAgICAgICAgICAgICAgLyp8ICAgICAgICAgICAgICBWZW5kb3IgZGF0YS4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgLyorLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgICAgICAvKiBFQVAtUGFja2V0IFZlbmRvciBJRCAqLworICAgICAgICAgICAgICAgIHZlbmRvcklkID0gKCgodTMyX3QpIHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs5KSkgPDwgMTYpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHUzMl90KSB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTApKSA8PCA4KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTEpOworICAgICAgICAgICAgICAgIC8qIEVBUC1QYWNrZXQgVmVuZG9yIFR5cGUgKi8KKyAgICAgICAgICAgICAgICBWZW5kb3JUeXBlID0gKCgodTMyX3QpIHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxMikpIDw8IDI0KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHUzMl90KSB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTMpKSA8PCAxNikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1MzJfdCkgem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzE0KSkgPDwgOCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTUpOworICAgICAgICAgICAgICAgIC8qIEVBUC1QYWNrZXQgT3AgQ29kZSAqLworICAgICAgICAgICAgICAgIE9wX0NvZGUgPSAoKCh1MTZfdCkgem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzE2KSkgPDwgOCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTcpOworICAgICAgICAgICAgICAgIC8qIEVBUC1QYWNrZXQgRmxhZ3MgKi8KKyAgICAgICAgICAgICAgICBmbGFncyA9IHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxOCk7CisKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJFQVAtUGFja2V0IFZlbmRvciBJRCA9ICIsIHZlbmRvcklkKTsKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJFQVAtUGFja2V0IFZlbm9kciBUeXBlID0gIiwgVmVuZG9yVHlwZSk7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiRUFQLVBhY2tldCBPcCBDb2RlID0gIiwgT3BfQ29kZSk7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiRUFQLVBhY2tldCBGbGFncyA9ICIsIGZsYWdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBjb2RlID09IDIgKQorICAgICAgICB7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJFQVAtUGFja2V0IFJlc3BvbnNlIik7CisKKyAgICAgICAgICAgIC8qIEVBUC1QYWNrZXQgSWRlbnRpZmllciAqLworICAgICAgICAgICAgaWRlbnRpZmllciA9IHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs1KTsKKyAgICAgICAgICAgIC8qIEVBUC1QYWNrZXQgTGVuZ3RoICovCisgICAgICAgICAgICBsZW5ndGggPSAoKCh1MTZfdCkgem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzYpKSA8PCA4KSArCisgICAgICAgICAgICAgICAgICAgICAgem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzcpOworICAgICAgICAgICAgLyogRUFQLVBhY2tldCBUeXBlICovCisgICAgICAgICAgICB0eXBlID0gem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzgpOworCisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJFQVAtUGFja2V0IElkZW50aWZpZXIgPSAiLCBpZGVudGlmaWVyKTsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzEoIkVBUC1QYWNrZXQgTGVuZ3RoID0gIiwgbGVuZ3RoKTsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzEoIkVBUC1QYWNrZXQgVHlwZSA9ICIsIHR5cGUpOworCisgICAgICAgICAgICBpZiggdHlwZSA9PSAxICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJFQVAtUGFja2V0IFJlc3BvbnNlIElkZW50aXR5Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKCB0eXBlID09IDIgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUC1QYWNrZXQgUmVxdWVzdCBOb3RpZmljYXRpb24iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoIHR5cGUgPT0gMyApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiRUFQLVBhY2tldCBSZXF1ZXN0IE5hayIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggdHlwZSA9PSA0ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJFQVAtUGFja2V0IFJlcXVlc3QgTUQ1LUNoYWxsZW5nZSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggdHlwZSA9PSA1ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJFQVAtUGFja2V0IFJlcXVlc3QgT25lIFRpbWUgUGFzc3dvcmQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYoIHR5cGUgPT0gNiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiRUFQLVBhY2tldCBSZXF1ZXN0IEdlbmVyaWMgVG9rZW4gQ2FyZCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiggdHlwZSA9PSAyNTQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUC1QYWNrZXQgUmVzcG9uc2UgV2ktRmkgUHJvdGVjdGVkIFNldHVwIik7CisKKyAgICAgICAgICAgICAgICAvKiBFQVAtUGFja2V0IFZlbmRvciBJRCAqLworICAgICAgICAgICAgICAgIHZlbmRvcklkID0gKCgodTMyX3QpIHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs5KSkgPDwgMTYpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHUzMl90KSB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTApKSA8PCA4KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTEpOworICAgICAgICAgICAgICAgIC8qIEVBUC1QYWNrZXQgVmVuZG9yIFR5cGUgKi8KKyAgICAgICAgICAgICAgICBWZW5kb3JUeXBlID0gKCgodTMyX3QpIHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxMikpIDw8IDI0KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHUzMl90KSB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTMpKSA8PCAxNikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh1MzJfdCkgem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzE0KSkgPDwgOCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTUpOworICAgICAgICAgICAgICAgIC8qIEVBUC1QYWNrZXQgT3AgQ29kZSAqLworICAgICAgICAgICAgICAgIE9wX0NvZGUgPSAoKCh1MTZfdCkgem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzE2KSkgPDwgOCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTcpOworICAgICAgICAgICAgICAgIC8qIEVBUC1QYWNrZXQgRmxhZ3MgKi8KKyAgICAgICAgICAgICAgICBmbGFncyA9IHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxOCk7CisKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJFQVAtUGFja2V0IFZlbmRvciBJRCA9ICIsIHZlbmRvcklkKTsKKyAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJFQVAtUGFja2V0IFZlbm9kciBUeXBlID0gIiwgVmVuZG9yVHlwZSk7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiRUFQLVBhY2tldCBPcCBDb2RlID0gIiwgT3BfQ29kZSk7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiRUFQLVBhY2tldCBGbGFncyA9ICIsIGZsYWdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKCBjb2RlID09IDMgKQorICAgICAgICB7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJFQVAtUGFja2V0IFN1Y2Nlc3MiKTsKKworICAgICAgICAgICAgLyogRUFQLVBhY2tldCBJZGVudGlmaWVyICovCisgICAgICAgICAgICBpZGVudGlmaWVyID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzUpOworICAgICAgICAgICAgLyogRUFQLVBhY2tldCBMZW5ndGggKi8KKyAgICAgICAgICAgIGxlbmd0aCA9ICgoKHUxNl90KSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNikpIDw8IDgpICsKKyAgICAgICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNyk7CisKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzEoIkVBUC1QYWNrZXQgSWRlbnRpZmllciA9ICIsIGlkZW50aWZpZXIpOworICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiRUFQLVBhY2tldCBMZW5ndGggPSAiLCBsZW5ndGgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoIGNvZGUgPT0gNCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUC1QYWNrZXQgRmFpbHVyZSIpOworCisgICAgICAgICAgICAvKiBFQVAtUGFja2V0IElkZW50aWZpZXIgKi8KKyAgICAgICAgICAgIGlkZW50aWZpZXIgPSB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNSk7CisgICAgICAgICAgICAvKiBFQVAtUGFja2V0IExlbmd0aCAqLworICAgICAgICAgICAgbGVuZ3RoID0gKCgodTE2X3QpIHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs2KSkgPDwgOCkgKworICAgICAgICAgICAgICAgICAgICAgIHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs3KTsKKworICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiRUFQLVBhY2tldCBJZGVudGlmaWVyID0gIiwgaWRlbnRpZmllcik7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJFQVAtUGFja2V0IExlbmd0aCA9ICIsIGxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiggcGFja2V0VHlwZSA9PSAxICkKKyAgICB7IC8vIEVBUE9MLVN0YXJ0CisgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUE9MLVN0YXJ0Iik7CisgICAgfQorICAgIGVsc2UgaWYoIHBhY2tldFR5cGUgPT0gMiApCisgICAgeyAvLyBFQVBPTC1Mb2dvZmYKKyAgICAgICAgem1fZGVidWdfbXNnMCgiRUFQT0wtTG9nb2ZmIik7CisgICAgfQorICAgIGVsc2UgaWYoIHBhY2tldFR5cGUgPT0gMyApCisgICAgeyAvLyBFQVBPTC1LZXkKKyAgICAgICAgLyogRUFQT0wtS2V5IHR5cGUgKi8KKyAgICAgICAga2V5VHlwZSA9IHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs0KTsKKyAgICAgICAgLyogRUFQT0wtS2V5IGluZm9ybWF0aW9uICovCisgICAgICAgIGtleUluZm8gPSAoKCh1MTZfdCkgem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzUpKSA8PCA4KSArCisgICAgICAgICAgICAgICAgICB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrNik7CisgICAgICAgIC8qIEVBUE9MLUtleSBsZW5ndGggKi8KKyAgICAgICAga2V5TGVuID0gKCgodTE2X3QpIHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCs3KSkgPDwgOCkgKworICAgICAgICAgICAgICAgICB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrOCk7CisgICAgICAgIC8qIEVBUE9MLUtleSByZXBsYXkgY291bnRlciAoaGlnaCBkb3VibGUgd29yZCkgKi8KKyAgICAgICAgcmVwbGF5Q291bnRlckggPSAoKCh1MzJfdCkgem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzkpKSA8PCAyNCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICgoKHUzMl90KSB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTApKSA8PCAxNikgKworICAgICAgICAgICAgICAgICAgICAgICAgICgoKHUzMl90KSB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTEpKSA8PCA4KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KzEyKTsKKyAgICAgICAgLyogRUFQT0wtS2V5IHJlcGxheSBjb3VudGVyIChsb3cgZG91YmxlIHdvcmQpICovCisgICAgICAgIHJlcGxheUNvdW50ZXJMID0gKCgodTMyX3QpIHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxMykpIDw8IDI0KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgodTMyX3QpIHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxNCkpIDw8IDE2KSArCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgodTMyX3QpIHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsxNSkpIDw8IDgpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrMTYpOworICAgICAgICAvKiBFQVBPTC1LZXkgZGF0YSBsZW5ndGggKi8KKyAgICAgICAga2V5RGF0YUxlbiA9ICgoKHUxNl90KSB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrOTcpKSA8PCA4KSArCisgICAgICAgICAgICAgICAgICAgICB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQrOTgpOworCisgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUE9MLUtleSIpOworICAgICAgICB6bV9kZWJ1Z19tc2cxKCJwYWNrZXQgbGVuZ3RoID0gIiwgcGFja2V0TGVuKTsKKworICAgICAgICBpZiAoIGtleVR5cGUgPT0gMjU0ICkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgia2V5IHR5cGUgPSAyNTQgKFNTTiBrZXkgZGVzY3JpcHRvcikiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzIoImtleSB0eXBlID0gMHgiLCBrZXlUeXBlKTsKKyAgICAgICAgfQorCisgICAgICAgIHptX2RlYnVnX21zZzIoInJlcGxheSBjb3VudGVyKEwpID0gIiwgcmVwbGF5Q291bnRlckwpOworCisgICAgICAgIHptX2RlYnVnX21zZzIoImtleSBpbmZvcm1hdGlvbiA9ICIsIGtleUluZm8pOworCisgICAgICAgIGlmICgga2V5SW5mbyAmIFpNX0JJVF8zICkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiICAgIC0gcGFpcndpc2Uga2V5Iik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCIgICAgLSBncm91cCBrZXkiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgga2V5SW5mbyAmIFpNX0JJVF82ICkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiICAgIC0gVHgga2V5IGluc3RhbGxlZCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiICAgIC0gVHgga2V5IG5vdCBzZXQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgga2V5SW5mbyAmIFpNX0JJVF83ICkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiICAgIC0gQWNrIG5lZWRlZCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiICAgIC0gQWNrIG5vdCBuZWVkZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgga2V5SW5mbyAmIFpNX0JJVF84ICkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiICAgIC0gTUlDIHNldCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiICAgIC0gTUlDIG5vdCBzZXQiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgga2V5SW5mbyAmIFpNX0JJVF85ICkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiICAgIC0gcGFja2V0IGVuY3J5cHRlZCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiICAgIC0gcGFja2V0IG5vdCBlbmNyeXB0ZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIHptX2RlYnVnX21zZzEoImtleUxlbiA9ICIsIGtleUxlbik7CisgICAgICAgIHptX2RlYnVnX21zZzEoImtleURhdGFMZW4gPSAiLCBrZXlEYXRhTGVuKTsKKyAgICB9CisgICAgZWxzZSBpZiggcGFja2V0VHlwZSA9PSA0ICkKKyAgICB7CisgICAgICAgIHptX2RlYnVnX21zZzAoIkVBUE9MLUVuY2Fwc3VsYXRlZC1BU0YtQWxlcnQiKTsKKyAgICB9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmaVJlY3Y4MDIxMSAgICAgICAgICAgICAgICAqLworLyogICAgICBDYWxsZWQgdG8gcmVjZWl2ZSA4MDIuMTEgZnJhbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmIDogcmVjZWl2ZWQgODAyLjExIGZyYW1lIGJ1ZmZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiAgICAgICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDUuNSAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgemZpUmVjdjgwMjExKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Ziwgc3RydWN0IHpzQWRkaXRpb25JbmZvKiBhZGRJbmZvKQoreworICAgIHU4X3Qgc25hcENhc2U9MCwgZW5jcnlNb2RlOworICAgIHUxNl90IGZyYW1lVHlwZSwgdHlwZUxlbmd0aEZpZWxkOworICAgIHUxNl90IGZyYW1lQ3RybDsKKyAgICB1MTZfdCBmcmFtZVN1YnR5cGU7CisgICAgdTE2X3QgcmV0OworICAgIHUxNl90IGxlbjsKKyAgICB1OF90IGJJc0RlZnJhZyA9IDA7CisgICAgdTE2X3Qgb2Zmc2V0LCB0YWlsTGVuOworICAgIHU4X3QgdmFwID0gMDsKKyAgICB1MTZfdCBkYVszXSwgc2FbM107CisgICAgdTE2X3QgaWk7CisgICAgdThfdCB1YXBzZFRyaWcgPSAwOworICAgIHpidWZfdCogcHNCdWY7CisjaWZkZWYgWk1fRU5BQkxFX05BVElWRV9XSUZJCisgICAgdThfdCBpOworI2VuZGlmCisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBaTV9CVUZGRVJfVFJBQ0UoZGV2LCBidWYpCisKKyAgICAvL3ptX21zZzJfcngoWk1fTFZfMiwgInpmaVJlY3Y4MDIxMSgpLCBidWY9IiwgYnVmKTsKKworICAgIC8vem1fbXNnMl9yeChaTV9MVl8wLCAiaFswXT0iLCB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAwKSk7CisgICAgLy96bV9tc2cyX3J4KFpNX0xWXzAsICJoWzJdPSIsIHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDIpKTsKKyAgICAvL3ptX21zZzJfcngoWk1fTFZfMCwgImhbNF09Iiwgem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgNCkpOworCisgICAgZnJhbWVDdHJsID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMCk7CisgICAgZnJhbWVUeXBlID0gZnJhbWVDdHJsICYgMHhmOworICAgIGZyYW1lU3VidHlwZSA9IGZyYW1lQ3RybCAmIDB4ZjA7CisKKyNpZiAwICAgLy8gTW92ZSB0byBQcm9jZXNzQmVhY29uIHRvIGp1ZGdlIGlmIHRoZXJlJ3MgYSBuZXcgcGVlciBzdGF0aW9uCisgICAgaWYgKCAod2QtPndsYW5Nb2RlID09IFpNX01PREVfSUJTUykmJgorICAgICAgICAgKHdkLT5zdGEuaWJzc1BhcnRuZXJTdGF0dXMgIT0gWk1fSUJTU19QQVJUTkVSX0FMSVZFKSApCisgICAgeworICAgICAgICB6ZlN0YUlic3NNb25pdG9yaW5nKGRldiwgYnVmKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIElmIGRhdGEgZnJhbWUgKi8KKyAgICBpZiAoZnJhbWVUeXBlID09IFpNX1dMQU5fREFUQV9GUkFNRSkKKyAgICB7CisgICAgICAgIHdkLT5zdGEuVG90YWxOdW1iZXJPZlJlY2VpdmVQYWNrZXRzKys7CisgICAgICAgIHdkLT5zdGEuVG90YWxOdW1iZXJPZlJlY2VpdmVCeXRlcyArPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsKKyAgICAgICAgLy96bV9kZWJ1Z19tc2cxKCJSZWNlaXZlIHBhY2tldHMgICAgID0gIiwgd2QtPnN0YS5Ub3RhbE51bWJlck9mUmVjZWl2ZVBhY2tldHMpOworCisgICAgICAgIC8vem1fbXNnMF9yeChaTV9MVl8wLCAiUnggZGF0YSIpOworICAgICAgICBpZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgocmV0ID0gemZBcFVwZGF0ZVBzQml0KGRldiwgYnVmLCAmdmFwLCAmdWFwc2RUcmlnKSkgIT0gWk1fU1VDQ0VTUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgoKHVhcHNkVHJpZyYweGYpICE9IDApICYmICgoZnJhbWVTdWJ0eXBlICYgMHg4MCkgIT0gMCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdThfdCBhYyA9IHpjVXBUb0FjW3ptd19idWZfcmVhZGIoZGV2LCBidWYsIDI0KSYweDddOworICAgICAgICAgICAgICAgIHU4X3QgcGt0TnVtOworICAgICAgICAgICAgICAgIHU4X3QgbWI7CisgICAgICAgICAgICAgICAgdTE2X3QgZmxhZzsKKyAgICAgICAgICAgICAgICB1OF90IHNyY1s2XTsKKworICAgICAgICAgICAgICAgIC8vcHJpbnRrKCJRb1MgY3RybD0lZFxuIiwgem13X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMjQpKTsKKyAgICAgICAgICAgICAgICAvL3ByaW50aygiVUFQU0QgdHJpZ2dlciwgYWM9JWRcbiIsIGFjKTsKKworICAgICAgICAgICAgICAgIGlmICgoKDB4OD4+YWMpICYgdWFwc2RUcmlnKSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcGt0TnVtID0gemNNYXhzcFRvUGt0TnVtWyh1YXBzZFRyaWc+PjQpICYgMHgzXTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGlpPTA7IGlpPDY7IGlpKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpaV0gPSB6bXdfYnVmX3JlYWRiKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BMl9PRkZTRVQraWkpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpaT0wOyBpaTxwa3ROdW07IGlpKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgKChwc0J1ZiA9IHpmUXVldWVHZXQoZGV2LCB3ZC0+YXAudWFwc2RRKSkgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocHNCdWYgPSB6ZlF1ZXVlR2V0V2l0aE1hYyhkZXYsIHdkLT5hcC51YXBzZFEsIHNyYywgJm1iKSkgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGlpKzEpID09IHBrdE51bSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRU9TUCBhbnl3YXkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDB4MTAwIHwgKG1iPDw1KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1iICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbW9yZSBkYXRhLCBub3QgRU9TUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDB4MjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL25vIG1vcmUgZGF0YSwgRU9TUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZyA9IDB4MTAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmVHhTZW5kRXRoKGRldiwgcHNCdWYsIDAsIFpNX0VYVEVSTkFMX0FMTE9DX0JVRiwgZmxhZyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocHNCdWYgPT0gTlVMTCkgfHwgKG1iID09IDApKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaWkgPT0gMCkgJiYgKHBzQnVmID09IE5VTEwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemZTZW5kTW1GcmFtZShkZXYsIFpNX1dMQU5fRlJBTUVfVFlQRV9RT1NfTlVMTCwgKHUxNl90KilzcmMsIDAsIDAsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHUxNl90IGZyYW1lQ3RybE1TQjsKKyAgICAJCXU4X3QgICBic3NpZFs2XTsKKworICAgICAgICAgICAgLyogQ2hlY2sgSXMgUklGUyBmcmFtZSBhbmQgZGVjaWRlIHRvIGVuYWJsZSBSSUZTIG9yIG5vdCAqLworICAgICAgICAgICAgaWYoIHdkLT5zdGEuRW5hYmxlSFQgKQorICAgICAgICAgICAgICAgIHpmQ2hlY2tJc1JJRlNGcmFtZShkZXYsIGJ1ZiwgZnJhbWVTdWJ0eXBlKTsKKworICAgICAgICAgICAgaWYgKCB6ZlBvd2VyU2F2aW5nTWdySXNTbGVlcGluZyhkZXYpIHx8IHdkLT5zdGEucHNNZ3IudGVtcFdha2VVcCA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZyYW1lQ3RybE1TQiA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDEpOworCisgICAgICAgICAgICAgICAgLyogY2hlY2sgbW9yZSBkYXRhICovCisgICAgICAgICAgICAgICAgaWYgKCBmcmFtZUN0cmxNU0IgJiBaTV9CSVRfNSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvL2lmIHJ4IGZyYW1lJ3MgQUMgaXMgbm90IGRlbGl2ZXJ5LWVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh3ZC0+c3RhLnFvc0luZm8mMHhmKSAhPSAweGYpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHU4X3QgcnhBYyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZyYW1lU3VidHlwZSAmIDB4ODApICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnhBYyA9IHpjVXBUb0FjW3ptd19idWZfcmVhZGIoZGV2LCBidWYsIDI0KSYweDddOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgweDg+PnJ4QWMpICYgd2QtPnN0YS5xb3NJbmZvKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmU2VuZFBTUG9sbChkZXYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEucHNNZ3IudGVtcFdha2VVcCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisJCQkvKmluY3JlYXNlIGJlYWNvbiBjb3VudCB3aGVuIHJlY2VpdmUgdmFpbGQgZGF0YSBmcmFtZSBmcm9tIEFQKi8KKyAgICAgICAgCVpNX01BQ19XT1JEX1RPX0JZVEUod2QtPnN0YS5ic3NpZCwgYnNzaWQpOworCisJCQlpZiAoemZTdGFJc0Nvbm5lY3RlZChkZXYpJiYKKwkJCQl6ZlJ4QnVmZmVyRXF1YWxUb1N0cihkZXYsIGJ1ZiwgYnNzaWQsIFpNX1dMQU5fSEVBREVSX0EyX09GRlNFVCwgNikpCisJCQl7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5yeEJlYWNvbkNvdW50Kys7CisJCQl9CisgICAgICAgIH0KKworICAgICAgICB6bV9tc2cxX3J4KFpNX0xWXzIsICJSeCBWQVA9IiwgdmFwKTsKKworICAgICAgICAvKiBoYW5kbGUgSVYsIEVYVC1JViwgSUNWLCBhbmQgRVhULUlDViAqLworICAgICAgICB6ZkdldFJ4SXZJY3ZMZW5ndGgoZGV2LCBidWYsIHZhcCwgJm9mZnNldCwgJnRhaWxMZW4sIGFkZEluZm8pOworCisgICAgICAgIHpmU3RhSWJzc1BTQ2hlY2tTdGF0ZShkZXYsIGJ1Zik7CisgICAgICAgIC8vUW9TIGRhdGEgZnJhbWUKKyAgICAgICAgaWYgKChmcmFtZVN1YnR5cGUgJiAweDgwKSA9PSAweDgwKQorICAgICAgICB7CisgICAgICAgICAgICBvZmZzZXQgKz0gMjsKKyAgICAgICAgfQorCisgICAgICAgIGxlbiA9IHpmd0J1ZkdldFNpemUoZGV2LCBidWYpOworICAgICAgICAvKiByZW1vdmUgSUNWICovCisgICAgICAgIGlmICh0YWlsTGVuID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxlbiA+IHRhaWxMZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGVuIC09IHRhaWxMZW47CisgICAgICAgICAgICAgICAgemZ3QnVmU2V0U2l6ZShkZXYsIGJ1ZiwgbGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIEZpbHRlciBOVUxMIGRhdGEgKi8KKyAgICAgICAgaWYgKCgoZnJhbWVTdWJ0eXBlJjB4NDApICE9IDApIHx8ICgobGVuID0gemZ3QnVmR2V0U2l6ZShkZXYsIGJ1ZikpPD0yNCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHptX21zZzFfcngoWk1fTFZfMSwgIkZyZWUgUnggTlVMTCBkYXRhLCBsZW49IiwgbGVuKTsKKyAgICAgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIDApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLyogY2hlY2sgYW5kIGhhbmRsZSBkZWZyYWdtZW50YXRpb24gKi8KKyAgICAgICAgaWYgKCB3ZC0+c3RhLmJTYWZlTW9kZSAmJiAod2QtPnN0YS53ZXBTdGF0dXMgPT0gWk1fRU5DUllQVElPTl9BRVMpICYmIHdkLT5zdGEuU1dFbmNyeXB0RW5hYmxlICkKKyAgICAgICAgeworICAgICAgICAgICAgem1fbXNnMF9yeChaTV9MVl8xLCAiQnlwYXNzIGRlZnJhZ21lbnRhdGlvbiBwYWNrZXRzIGluIHNhZmUgbW9kZSIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCAoYnVmID0gemZEZWZyYWdtZW50KGRldiwgYnVmLCAmYklzRGVmcmFnLCBhZGRJbmZvKSkgPT0gTlVMTCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogSW4gdGhpcyBjYXNlLCB0aGUgYnVmZmVyIGhhcyBiZWVuIGZyZWVkIGluIHpmRGVmcmFnbWVudCAqLworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IFpNX01JQ19TVUNDRVNTOworCisgICAgICAgIC8qIElmIFNXIFdFUC9US0lQIGFyZSBub3QgdHVybmVkIG9uICovCisgICAgICAgIGlmICgod2QtPnN0YS5TV0VuY3J5cHRFbmFibGUgJiBaTV9TV19US0lQX0RFQ1JZX0VOKSA9PSAwICYmCisgICAgICAgICAgICAod2QtPnN0YS5TV0VuY3J5cHRFbmFibGUgJiBaTV9TV19XRVBfREVDUllfRU4pID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVuY3J5TW9kZSA9IHpmR2V0RW5jcnlNb2RlRnJvbVJ4U3RhdHVzKGFkZEluZm8pOworCisgICAgICAgICAgICAvKiBjaGVjayBpZiBUS0lQICovCisgICAgICAgICAgICBpZiAoIGVuY3J5TW9kZSA9PSBaTV9US0lQICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIGJJc0RlZnJhZyApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXQgPSB6Zk1pY1J4VmVyaWZ5KGRldiwgYnVmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogY2hlY2sgTUlDIGZhaWx1cmUgYml0ICovCisgICAgICAgICAgICAgICAgICAgIGlmICggWk1fUlhfU1RBVFVTX0lTX01JQ19GQUlMKGFkZEluZm8pICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gWk1fTUlDX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIHJldCA9PSBaTV9NSUNfRkFJTFVSRSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1OF90IFVuaWNhc3RfUGt0ID0gMHgwOworCisgICAgICAgICAgICAgICAgICAgIGlmICgoem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTFfT0ZGU0VUKSAmIDB4MSkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPmNvbW1UYWxseS5zd1J4VW5pY2FzdE1pY0ZhaWxDb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgVW5pY2FzdF9Qa3QgPSAweDE7CisgICAgICAgICAgICAgICAgICAgIH0vKgorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BMV9PRkZTRVQpID09IDB4ZmZmZikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPmNvbW1UYWxseS5zd1J4TXVsdGljYXN0TWljRmFpbENvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIH0qLworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5jb21tVGFsbHkuc3dSeE11bHRpY2FzdE1pY0ZhaWxDb3VudCsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfQVAgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB1MTZfdCBpZHg7CisgICAgICAgICAgICAgICAgICAgICAgICB1OF90IGFkZHJbNl07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaWR4PTA7IGlkeDw2OyBpZHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyW2lkeF0gPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BMl9PRkZTRVQraWR4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdkLT56ZmNiQXBNaWNGYWlsdXJlTm90aWZ5ICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnpmY2JBcE1pY0ZhaWx1cmVOb3RpZnkoZGV2LCBhZGRyLCBidWYpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYoVW5pY2FzdF9Qa3QpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiQ291bnRlcm1lYXN1cmUgOiBVbmljYXN0X1BrdCAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJDb3VudGVybWVhc3VyZSA6IE5vbi1VbmljYXN0X1BrdCAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYoKHdkLT5US0lQX0dyb3VwX0tleUNoYW5naW5nID09IDB4MCkgfHwgKFVuaWNhc3RfUGt0ID09IDB4MSkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiQ291bnRlcm1lYXN1cmUgOiBEbyBNSUMgQ2hlY2sgIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgemZTdGFNaWNGYWlsdXJlSGFuZGxpbmcoZGV2LCBidWYpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIkNvdW50ZXJtZWFzdXJlIDogU0tJUCBNSUMgQ2hlY2sgZHVlIHRvIEdyb3VwIEtleWNoYW5naW5nICIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qIERpc2NhcmQgTUlDIGZhaWxlZCBmcmFtZSAqLworICAgICAgICAgICAgICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHU4X3QgSXNFbmNyeUZyYW1lOworCisgICAgICAgICAgICAvKiBUT0RPOiBDaGVjayB3aGV0aGVyIFdFUCBiaXQgaXMgdHVybmVkIG9uIGluIE1BQyBoZWFkZXIgKi8KKyAgICAgICAgICAgIGVuY3J5TW9kZSA9IFpNX05PX1dFUDsKKworICAgICAgICAgICAgSXNFbmNyeUZyYW1lID0gKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDEpICYgMHg0MCk7CisKKyAgICAgICAgICAgIGlmIChJc0VuY3J5RnJhbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogU29mdHdhcmUgZGVjcnlwdGlvbiBmb3IgVEtJUCAqLworICAgICAgICAgICAgICAgIGlmICh3ZC0+c3RhLlNXRW5jcnlwdEVuYWJsZSAmIFpNX1NXX1RLSVBfREVDUllfRU4pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1MTZfdCBpdjE2OworICAgICAgICAgICAgICAgICAgICB1MTZfdCBpdjMyOworICAgICAgICAgICAgICAgICAgICB1OF90IFJDNEtleVsxNl07CisgICAgICAgICAgICAgICAgICAgIHUxNl90IEl2T2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgenNUa2lwU2VlZCAqcnhTZWVkOworCisgICAgICAgICAgICAgICAgICAgIEl2T2Zmc2V0ID0gb2Zmc2V0ICsgWk1fU0laRV9PRl9XTEFOX0RBVEFfSEVBREVSOworCisgICAgICAgICAgICAgICAgICAgIHJ4U2VlZCA9IHpmU3RhR2V0UnhTZWVkKGRldiwgYnVmKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocnhTZWVkID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoInJ4U2VlZCBpcyBOVUxMIik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc2NhcmQgdGhpcyBmcmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpdjE2ID0gKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIEl2T2Zmc2V0KSA8PCA4KSArIHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIEl2T2Zmc2V0KzIpOworICAgICAgICAgICAgICAgICAgICBpdjMyID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgSXZPZmZzZXQrNCkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIEl2T2Zmc2V0KzUpIDw8IDgpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBJdk9mZnNldCs2KSA8PCAxNikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIEl2T2Zmc2V0KzcpIDw8IDI0KTsKKworICAgICAgICAgICAgICAgICAgICAvKiBUS0lQIEtleSBNaXhpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgemZUa2lwUGhhc2UxS2V5TWl4KGl2MzIsIHJ4U2VlZCk7CisgICAgICAgICAgICAgICAgICAgIHpmVGtpcFBoYXNlMktleU1peChpdjE2LCByeFNlZWQpOworICAgICAgICAgICAgICAgICAgICB6ZlRraXBHZXRzZWVkcyhpdjE2LCBSQzRLZXksIHJ4U2VlZCk7CisKKyAgICAgICAgICAgICAgICAgICAgLyogRGVjcnlwdCBEYXRhICovCisgICAgICAgICAgICAgICAgICAgIHJldCA9IHpmVEtJUERlY3J5cHQoZGV2LCBidWYsIEl2T2Zmc2V0K1pNX1NJWkVfT0ZfSVYrWk1fU0laRV9PRl9FWFRfSVYsIDE2LCBSQzRLZXkpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPT0gWk1fSUNWX0ZBSUxVUkUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIlRLSVAgSUNWIGZhaWwiKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogRGlzY2FyZCBJQ1YgZmFpbGVkIGZyYW1lICovCisgICAgICAgICAgICAgICAgICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8qIFJlbW92ZSBJQ1YgZnJvbSBidWZmZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgemZ3QnVmU2V0U2l6ZShkZXYsIGJ1ZiwgbGVuLTQpOworCisgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIE1JQyAqLworICAgICAgICAgICAgICAgICAgICByZXQgPSB6Zk1pY1J4VmVyaWZ5KGRldiwgYnVmKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID09IFpNX01JQ19GQUlMVVJFKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIFpNX1dMQU5fSEVBREVSX0ExX09GRlNFVCkgJiAweDEpID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPmNvbW1UYWxseS5zd1J4VW5pY2FzdE1pY0ZhaWxDb3VudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTFfT0ZGU0VUKSA9PSAweGZmZmYpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPmNvbW1UYWxseS5zd1J4TXVsdGljYXN0TWljRmFpbENvdW50Kys7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPmNvbW1UYWxseS5zd1J4TXVsdGljYXN0TWljRmFpbENvdW50Kys7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTZfdCBpZHg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdThfdCBhZGRyWzZdOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpZHg9MDsgaWR4PDY7IGlkeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcltpZHhdID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTJfT0ZGU0VUK2lkeCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdkLT56ZmNiQXBNaWNGYWlsdXJlTm90aWZ5ICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+emZjYkFwTWljRmFpbHVyZU5vdGlmeShkZXYsIGFkZHIsIGJ1Zik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmU3RhTWljRmFpbHVyZUhhbmRsaW5nKGRldiwgYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiTUlDIGZhaWwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc2NhcmQgTUlDIGZhaWxlZCBmcmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBlbmNyeU1vZGUgPSBaTV9US0lQOworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gWk1fU0laRV9PRl9JViArIFpNX1NJWkVfT0ZfRVhUX0lWOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKHdkLT5zdGEuU1dFbmNyeXB0RW5hYmxlICYgWk1fU1dfV0VQX0RFQ1JZX0VOKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdTE2X3QgSXZPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIHU4X3Qga2V5TGVuID0gNTsKKyAgICAgICAgICAgICAgICAgICAgdThfdCBpdlszXTsKKyAgICAgICAgICAgICAgICAgICAgdThfdCAqd2VwS2V5OworICAgICAgICAgICAgICAgICAgICB1OF90IGtleUlkeDsKKworICAgICAgICAgICAgICAgICAgICBJdk9mZnNldCA9IG9mZnNldCArIFpNX1NJWkVfT0ZfV0xBTl9EQVRBX0hFQURFUjsKKworICAgICAgICAgICAgICAgICAgICAvKiBSZXRyaWV2ZSBJViAqLworICAgICAgICAgICAgICAgICAgICBpdlswXSA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIEl2T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgaXZbMV0gPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBJdk9mZnNldCsxKTsKKyAgICAgICAgICAgICAgICAgICAgaXZbMl0gPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBJdk9mZnNldCsyKTsKKworICAgICAgICAgICAgICAgICAgICBrZXlJZHggPSAoKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIEl2T2Zmc2V0KzMpID4+IDYpICYgMHgwMyk7CisKKyAgICAgICAgICAgICAgICAgICAgSXZPZmZzZXQgKz0gWk1fU0laRV9PRl9JVjsKKworICAgICAgICAgICAgICAgICAgICBpZiAod2QtPnN0YS5TV0VuY3J5TW9kZVtrZXlJZHhdID09IFpNX1dFUDY0KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBrZXlMZW4gPSA1OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdkLT5zdGEuU1dFbmNyeU1vZGVba2V5SWR4XSA9PSBaTV9XRVAxMjgpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleUxlbiA9IDEzOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdkLT5zdGEuU1dFbmNyeU1vZGVba2V5SWR4XSA9PSBaTV9XRVAyNTYpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleUxlbiA9IDI5OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgemZXRVBEZWNyeXB0KGRldiwgYnVmLCBJdk9mZnNldCwga2V5TGVuLCB3ZC0+c3RhLndlcEtleVtrZXlJZHhdLCBpdik7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA9PSBaTV9JQ1ZfRkFJTFVSRSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiV0VQIElDViBmYWlsIik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc2NhcmQgSUNWIGZhaWxlZCBmcmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBlbmNyeU1vZGUgPSB3ZC0+c3RhLlNXRW5jcnlNb2RlW2tleUlkeF07CisKKyAgICAgICAgICAgICAgICAgICAgLyogUmVtb3ZlIElDViBmcm9tIGJ1ZmZlciAqLworICAgICAgICAgICAgICAgICAgICB6ZndCdWZTZXRTaXplKGRldiwgYnVmLCBsZW4tNCk7CisKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IFpNX1NJWkVfT0ZfSVY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQworICAgICAgICAvL2Vsc2UgaWYgKCBlbmNyeU1vZGUgPT0gWk1fQ0VOQyApIC8qIGNoZWNrIGlmIENFTkMgKi8KKyAgICAgICAgaWYgKCBlbmNyeU1vZGUgPT0gWk1fQ0VOQyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHUzMl90IHJ4SVZbNF07CisKKyAgICAgICAgICAgIHJ4SVZbMF0gPSAoem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMjgpIDw8IDE2KQorICAgICAgICAgICAgICAgICAgICAgKyB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAyNik7CisgICAgICAgICAgICByeElWWzFdID0gKHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDMyKSA8PCAxNikKKyAgICAgICAgICAgICAgICAgICAgICsgem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMzApOworICAgICAgICAgICAgcnhJVlsyXSA9ICh6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAzNikgPDwgMTYpCisgICAgICAgICAgICAgICAgICAgICArIHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDM0KTsKKyAgICAgICAgICAgIHJ4SVZbM10gPSAoem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgNDApIDw8IDE2KQorICAgICAgICAgICAgICAgICAgICAgKyB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAzOCk7CisKKyAgICAgICAgICAgIC8vem1fZGVidWdfbXNnMigicnhJVlswXSA9IDB4IiwgcnhJVlswXSk7CisgICAgICAgICAgICAvL3ptX2RlYnVnX21zZzIoInJ4SVZbMV0gPSAweCIsIHJ4SVZbMV0pOworICAgICAgICAgICAgLy96bV9kZWJ1Z19tc2cyKCJyeElWWzJdID0gMHgiLCByeElWWzJdKTsKKyAgICAgICAgICAgIC8vem1fZGVidWdfbXNnMigicnhJVlszXSA9IDB4IiwgcnhJVlszXSk7CisKKyAgICAgICAgICAgIC8qIGRlc3RpbmF0aW9uIGFkZHJlc3MqLworICAgICAgICAgICAgZGFbMF0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BMV9PRkZTRVQpOworICAgICAgICAgICAgZGFbMV0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BMV9PRkZTRVQrMik7CisgICAgICAgICAgICBkYVsyXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIFpNX1dMQU5fSEVBREVSX0ExX09GRlNFVCs0KTsKKworICAgICAgICAgICAgaWYgKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChkYVswXSAmIDB4MSkpCisgICAgICAgICAgICAgICAgeyAvL211bHRpY2FzdCBmcmFtZQorICAgICAgICAgICAgICAgICAgICAvKiBBY2N1bWxhdGUgdGhlIFBOIHNlcXVlbmNlICovCisgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEucnhpdkdLWzBdICsrOworCisgICAgICAgICAgICAgICAgICAgIGlmICh3ZC0+c3RhLnJ4aXZHS1swXSA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnJ4aXZHS1sxXSsrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdkLT5zdGEucnhpdkdLWzFdID09IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEucnhpdkdLWzJdKys7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAod2QtPnN0YS5yeGl2R0tbMl0gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5yeGl2R0tbM10rKzsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICh3ZC0+c3RhLnJ4aXZHS1szXSA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnJ4aXZHS1swXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnJ4aXZHS1sxXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnJ4aXZHS1syXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvL3ptX2RlYnVnX21zZzIoIndkLT5zdGEucnhpdkdLWzBdID0gMHgiLCB3ZC0+c3RhLnJ4aXZHS1swXSk7CisgICAgICAgICAgICAgICAgICAgIC8vem1fZGVidWdfbXNnMigid2QtPnN0YS5yeGl2R0tbMV0gPSAweCIsIHdkLT5zdGEucnhpdkdLWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgLy96bV9kZWJ1Z19tc2cyKCJ3ZC0+c3RhLnJ4aXZHS1syXSA9IDB4Iiwgd2QtPnN0YS5yeGl2R0tbMl0pOworICAgICAgICAgICAgICAgICAgICAvL3ptX2RlYnVnX21zZzIoIndkLT5zdGEucnhpdkdLWzNdID0gMHgiLCB3ZC0+c3RhLnJ4aXZHS1szXSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAhKCh3ZC0+c3RhLnJ4aXZHS1swXSA9PSByeElWWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHdkLT5zdGEucnhpdkdLWzFdID09IHJ4SVZbMV0pCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAod2QtPnN0YS5yeGl2R0tbMl0gPT0gcnhJVlsyXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICh3ZC0+c3RhLnJ4aXZHS1szXSA9PSByeElWWzNdKSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHU4X3QgUGFja2V0RGlzY2FyZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBEaXNjYXJkIFBOIENvZGUgRXJyb3IgZnJhbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyeElWWzBdIDwgd2QtPnN0YS5yeGl2R0tbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFja2V0RGlzY2FyZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2QtPnN0YS5yeGl2R0tbMF0gPiAweGZmZmZmZmYwKQorICAgICAgICAgICAgICAgICAgICAgICAgeyAvL2JvdW5kYXJ5IGNhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJ4SVZbMF0gPCAweGZmZmZmZmYwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKCgweGZmZmZmZmZmIC0gd2QtPnN0YS5yeGl2R0tbMF0pICsgcnhJVlswXSkgPiAxNikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrZXREaXNjYXJkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7IC8vbm9ybWFsIGNhc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJ4SVZbMF0gLSB3ZC0+c3RhLnJ4aXZHS1swXSkgPiAxNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2tldERpc2NhcmQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN5bmMgc3RhIHBuIGNvZGUgd2l0aCBhcCBiZWNhdXNlIG9mIGxvc3Rpbmcgc29tZSBwYWNrZXRzCisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnJ4aXZHS1swXSA9IHJ4SVZbMF07CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnJ4aXZHS1sxXSA9IHJ4SVZbMV07CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnJ4aXZHS1syXSA9IHJ4SVZbMl07CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnJ4aXZHS1szXSA9IHJ4SVZbM107CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUGFja2V0RGlzY2FyZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJEaXNjYXJkIFBOIENvZGUgbG9zdCB0b28gbXVjaCBtdWx0aWNhc3QgZnJhbWUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsgLy91bmljYXN0IGZyYW1lCisgICAgICAgICAgICAgICAgICAgIC8qIEFjY3VtbGF0ZSB0aGUgUE4gc2VxdWVuY2UgKi8KKyAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5yeGl2WzBdICs9IDI7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdkLT5zdGEucnhpdlswXSA9PSAwIHx8IHdkLT5zdGEucnhpdlswXSA9PSAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnJ4aXZbMV0rKzsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICh3ZC0+c3RhLnJ4aXZbMV0gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5yeGl2WzJdKys7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAod2QtPnN0YS5yeGl2WzJdID09IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEucnhpdlszXSsrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdkLT5zdGEucnhpdlszXSA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnJ4aXZbMF0gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5yeGl2WzFdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEucnhpdlsyXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvL3ptX2RlYnVnX21zZzIoIndkLT5zdGEucnhpdlswXSA9IDB4Iiwgd2QtPnN0YS5yeGl2WzBdKTsKKyAgICAgICAgICAgICAgICAgICAgLy96bV9kZWJ1Z19tc2cyKCJ3ZC0+c3RhLnJ4aXZbMV0gPSAweCIsIHdkLT5zdGEucnhpdlsxXSk7CisgICAgICAgICAgICAgICAgICAgIC8vem1fZGVidWdfbXNnMigid2QtPnN0YS5yeGl2WzJdID0gMHgiLCB3ZC0+c3RhLnJ4aXZbMl0pOworICAgICAgICAgICAgICAgICAgICAvL3ptX2RlYnVnX21zZzIoIndkLT5zdGEucnhpdlszXSA9IDB4Iiwgd2QtPnN0YS5yeGl2WzNdKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoICEoKHdkLT5zdGEucnhpdlswXSA9PSByeElWWzBdKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHdkLT5zdGEucnhpdlsxXSA9PSByeElWWzFdKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHdkLT5zdGEucnhpdlsyXSA9PSByeElWWzJdKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHdkLT5zdGEucnhpdlszXSA9PSByeElWWzNdKSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIlBOIENvZGUgbWlzbWF0Y2gsIGxvc3QgdW5pY2FzdCBmcmFtZSwgc3luYyBwbiBjb2RlIHRvIHJlY3YgcGFja2V0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzeW5jIHN0YSBwbiBjb2RlIHdpdGggYXAgYmVjYXVzZSBvZiBsb3N0aW5nIHNvbWUgcGFja2V0cworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5yeGl2WzBdID0gcnhJVlswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEucnhpdlsxXSA9IHJ4SVZbMV07CisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnJ4aXZbMl0gPSByeElWWzJdOworICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5yeGl2WzNdID0gcnhJVlszXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIERpc2NhcmQgUE4gQ29kZSBFcnJvciBmcmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgLy96bV9kZWJ1Z19tc2cwKCJEaXNjYXJkIFBOIENvZGUgbWlzbWF0Y2ggdW5pY2FzdCBmcmFtZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgLy96ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworCisgICAgICAgIC8qIGZvciB0YWxseSAqLworICAgICAgICBpZiAoKHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIFpNX1dMQU5fSEVBREVSX0ExX09GRlNFVCkgJiAweDEpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIGZvciBBQ1UgdG8gZGlzcGxheSBSeFJhdGUgKi8KKyAgICAgICAgICAgIHpmV2xhblVwZGF0ZVJ4UmF0ZShkZXYsIGFkZEluZm8pOworCisgICAgICAgICAgICB3ZC0+Y29tbVRhbGx5LnJ4VW5pY2FzdEZybSsrOworICAgICAgICAgICAgd2QtPmNvbW1UYWxseS5yeFVuaWNhc3RPY3RldHMgKz0gKGxlbi0yNCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTFfT0ZGU0VUKSA9PSAweGZmZmYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdkLT5jb21tVGFsbHkucnhCcm9hZGNhc3RGcm0rKzsKKyAgICAgICAgICAgIHdkLT5jb21tVGFsbHkucnhCcm9hZGNhc3RPY3RldHMgKz0gKGxlbi0yNCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+Y29tbVRhbGx5LnJ4TXVsdGljYXN0RnJtKys7CisgICAgICAgICAgICB3ZC0+Y29tbVRhbGx5LnJ4TXVsdGljYXN0T2N0ZXRzICs9IChsZW4tMjQpOworICAgICAgICB9CisgICAgICAgIHdkLT5sZWRTdHJ1Y3QucnhUcmFmZmljKys7CisKKyAgICAgICAgaWYgKChmcmFtZVN1YnR5cGUgJiAweDgwKSA9PSAweDgwKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBpZiBRb1MgY29udHJvbCBiaXQtNyBpcyAxID0+IEEtTVNEVSBmcmFtZSAqLworICAgICAgICAgICAgaWYgKCh6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAyNCkgJiAweDgwKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmRGVBbXNkdShkZXYsIGJ1ZiwgdmFwLCBlbmNyeU1vZGUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFJlbW92ZSBNSUMgb2YgVEtJUAorICAgICAgICBpZiAoIGVuY3J5TW9kZSA9PSBaTV9US0lQICkKKyAgICAgICAgeworICAgICAgICAgICAgemZ3QnVmU2V0U2l6ZShkZXYsIGJ1ZiwgemZ3QnVmR2V0U2l6ZShkZXYsIGJ1ZikgLSA4KTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENvbnZlcnQgODAyLjExIGFuZCBTTkFQIGhlYWRlciB0byBldGhlcm5ldCBoZWFkZXIgKi8KKyAgICAgICAgaWYgKCAod2QtPndsYW5Nb2RlID09IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUpfHwKKyAgICAgICAgICAgICAod2QtPndsYW5Nb2RlID09IFpNX01PREVfSUJTUykgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBkZXN0aW5hdGlvbiBhZGRyZXNzKi8KKyAgICAgICAgICAgIGRhWzBdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTFfT0ZGU0VUKTsKKyAgICAgICAgICAgIGRhWzFdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTFfT0ZGU0VUKzIpOworICAgICAgICAgICAgZGFbMl0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BMV9PRkZTRVQrNCk7CisKKyAgICAgICAgICAgIC8qIGNoZWNrIGJyb2FkY2FzdCBmcmFtZSAqLworICAgICAgICAgICAgaWYgKCAoZGFbMF0gPT0gMHhmZmZmKSAmJiAoZGFbMV0gPT0gMHhmZmZmKSAmJiAoZGFbMl0gPT0gMHhmZmZmKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gQXAgc2VuZCBicm9hZGNhc3QgZnJhbWUgdG8gdGhlIERVVCAhCisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBjaGVjayBtdWx0aWNhc3QgZnJhbWUgKi8KKyAgICAgICAgICAgIC8qIFRPRE8gOiBSZW1vdmUgdGhlc2UgY29kZSwgaGFyZHdhcmUgc2hvdWxkIGJlIGFibGUgdG8gYmxvY2sgKi8KKyAgICAgICAgICAgIC8qICAgICAgICBtdWx0aWNhc3QgZnJhbWUgb24gdGhlIG11bHRpY2FzdCBhZGRyZXNzIGxpc3QgICAgICAgKi8KKyAgICAgICAgICAgIC8qICAgICAgICBvciBieXBhc3MgYWxsIG11bHRpY2FzdCBwYWNrZXQgYnkgZmxhZyBiQWxsTXVsdGljYXN0ICovCisgICAgICAgICAgICBlbHNlIGlmICgoZGFbMF0gJiAweDAxKSAmJiAod2QtPnN0YS5iQWxsTXVsdGljYXN0ID09IDApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvcihpaT0wOyBpaTx3ZC0+c3RhLm11bHRpY2FzdExpc3Quc2l6ZTsgaWkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICggemZNZW1vcnlJc0VxdWFsKHdkLT5zdGEubXVsdGljYXN0TGlzdC5tYWNBZGRyW2lpXS5hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodThfdCopIGRhLCA2KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIGlpID09IHdkLT5zdGEubXVsdGljYXN0TGlzdC5zaXplICkKKyAgICAgICAgICAgICAgICB7ICAgLyogbm90IGZvdW5kICovCisgICAgICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoImRpc2NhcmQgdW5rbm93biBtdWx0aWNhc3QgZnJhbWUiKTsKKworICAgICAgICAgICAgICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworI2lmZGVmIFpNX0VOQUJMRV9OQVRJVkVfV0lGSSAvL05hdGl2ZSBXaWZpIDogMSwgRXRoZXJuZXQgZm9ybWF0IDogMAorICAgICAgICAgICAgLy9UbyByZW1vdmUgSVYKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaT0xMjsgaT4wOyBpLS0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgKChpLTEpKjIpK29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAoaS0xKSoyKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHpmd0J1ZlJlbW92ZUhlYWQoZGV2LCBidWYsIG9mZnNldCk7CisgICAgICAgICAgICB9CisjZWxzZQorCisgICAgICAgICAgICBpZiAoemZSeEJ1ZmZlckVxdWFsVG9TdHIoZGV2LCBidWYsIHpnU25hcEJyaWRnZVR1bm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNCtvZmZzZXQsIDYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNuYXBDYXNlID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCB6ZlJ4QnVmZmVyRXF1YWxUb1N0cihkZXYsIGJ1ZiwgemdTbmFwODAyMWgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQrb2Zmc2V0LCA2KSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHlwZUxlbmd0aEZpZWxkID0KKyAgICAgICAgICAgICAgICAgICAgKCgodTE2X3QpIHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDMwK29mZnNldCkpIDw8IDgpICsKKyAgICAgICAgICAgICAgICAgICAgem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMzErb2Zmc2V0KTsKKworICAgICAgICAgICAgICAgIC8vem1fZGVidWdfbXNnMigidHB5ZUxlbmd0aEZpZWxkID0gIiwgdHlwZUxlbmd0aEZpZWxkKTsKKworICAgICAgICAgICAgICAgIC8vODEzNyA6IElQWCwgODBGMyA6IEFwcGxldGFsaworICAgICAgICAgICAgICAgIGlmICggKHR5cGVMZW5ndGhGaWVsZCAhPSAweDgxMzcpJiYKKyAgICAgICAgICAgICAgICAgICAgICh0eXBlTGVuZ3RoRmllbGQgIT0gMHg4MEYzKSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzbmFwQ2FzZSA9IDI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCB0eXBlTGVuZ3RoRmllbGQgPT0gMHg4ODhFICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHpmU2hvd1J4RUFQT0woZGV2LCBidWYsIDMyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy96ZndEdW1wQnVmKGRldiwgYnVmKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogc291cmNlIGFkZHJlc3MgKi8KKyAgICAgICAgICAgIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNBID0gQWRkcmVzcyAzICovCisgICAgICAgICAgICAgICAgc2FbMF0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BM19PRkZTRVQpOworICAgICAgICAgICAgICAgIHNhWzFdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTNfT0ZGU0VUKzIpOworICAgICAgICAgICAgICAgIHNhWzJdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTNfT0ZGU0VUKzQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNBID0gQWRkcmVzcyAyICovCisgICAgICAgICAgICAgICAgc2FbMF0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBaTV9XTEFOX0hFQURFUl9BMl9PRkZTRVQpOworICAgICAgICAgICAgICAgIHNhWzFdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTJfT0ZGU0VUKzIpOworICAgICAgICAgICAgICAgIHNhWzJdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fV0xBTl9IRUFERVJfQTJfT0ZGU0VUKzQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHNuYXBDYXNlICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBTQSAqLworICAgICAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAyNCtvZmZzZXQsIHNhWzBdKTsKKyAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMjYrb2Zmc2V0LCBzYVsxXSk7CisgICAgICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDI4K29mZnNldCwgc2FbMl0pOworCisgICAgICAgICAgICAgICAgLyogREEgPSBBZGRyZXNzIDEgKi8KKyAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMTgrb2Zmc2V0LCBkYVswXSk7CisgICAgICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDIwK29mZnNldCwgZGFbMV0pOworICAgICAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAyMitvZmZzZXQsIGRhWzJdKTsKKyAgICAgICAgICAgICAgICB6ZndCdWZSZW1vdmVIZWFkKGRldiwgYnVmLCAxOCtvZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFNBICovCisgICAgICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDE2K29mZnNldCwgc2FbMF0pOworICAgICAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAxOCtvZmZzZXQsIHNhWzFdKTsKKyAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMjArb2Zmc2V0LCBzYVsyXSk7CisKKyAgICAgICAgICAgICAgICAvKiBEQSA9IEFkZHJlc3MgMSAqLworICAgICAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAxMCtvZmZzZXQsIGRhWzBdKTsKKyAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMTIrb2Zmc2V0LCBkYVsxXSk7CisgICAgICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDE0K29mZnNldCwgZGFbMl0pOworICAgICAgICAgICAgICAgIHpmd0J1ZlJlbW92ZUhlYWQoZGV2LCBidWYsIDEwK29mZnNldCk7CisgICAgICAgICAgICAgICAgLyogRXRoZXJuZXQgcGF5bG9hZCBsZW5ndGggKi8KKyAgICAgICAgICAgICAgICB0eXBlTGVuZ3RoRmllbGQgPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKSAtIDE0OworICAgICAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAxMiwgKHR5cGVMZW5ndGhGaWVsZDw8OCkrKHR5cGVMZW5ndGhGaWVsZD4+OCkpOworICAgICAgICAgICAgfQorI2VuZGlmICAvLyBaTV9FTkFCTEVfTkFUSVZFX1dJRkkKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCkKKyAgICAgICAgeworICAgICAgICAgICAgLy9pZiAoKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDEpICYgMHgzKSAhPSAzKQorICAgICAgICAgICAgaWYgKHZhcCA8IFpNX01BWF9BUF9TVVBQT1JUKQorICAgICAgICAgICAgLyogQVAgbW9kZSAqLworICAgICAgICAgICAgeworI2lmZGVmIFpNX0VOQUJMRV9OQVRJVkVfV0lGSSAvL05hdGl2ZSBXaWZpIDogMSwgRXRoZXJuZXQgZm9ybWF0IDogMAorICAgICAgICAgICAgICAgIC8vVG8gcmVtb3ZlIElWCisgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA+IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MTI7IGk+MDsgaS0tKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgKChpLTEpKjIpK29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgKGktMSkqMikpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHpmd0J1ZlJlbW92ZUhlYWQoZGV2LCBidWYsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgICAvKiBTQSA9IEFkZHJlc3MgMiAqLworICAgICAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAyNCtvZmZzZXQsIHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICBaTV9XTEFOX0hFQURFUl9BMl9PRkZTRVQpKTsKKyAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMjYrb2Zmc2V0LCB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgWk1fV0xBTl9IRUFERVJfQTJfT0ZGU0VUKzIpKTsKKyAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMjgrb2Zmc2V0LCB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgWk1fV0xBTl9IRUFERVJfQTJfT0ZGU0VUKzQpKTsKKyAgICAgICAgICAgICAgICAvKiBEQSA9IEFkZHJlc3MgMyAqLworICAgICAgICAgICAgICAgIC8qIFNlcSA6IFJlYWQgMjAgd3JpdGUgMjIsIHJlYWQgMTggd3JpdGUgMjAsIHJlYWQgMTYgd3JpdGUgMTggKi8KKyAgICAgICAgICAgICAgICAvKiBzZXF1ZW5jZSBtdXN0IG5vdCBiZSBpbnZlcnRlZCAqLworICAgICAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAyMitvZmZzZXQsIHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICBaTV9XTEFOX0hFQURFUl9BM19PRkZTRVQrNCkpOworICAgICAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAyMCtvZmZzZXQsIHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICBaTV9XTEFOX0hFQURFUl9BM19PRkZTRVQrMikpOworICAgICAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAxOCtvZmZzZXQsIHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICBaTV9XTEFOX0hFQURFUl9BM19PRkZTRVQpKTsKKyAgICAgICAgICAgICAgICB6ZndCdWZSZW1vdmVIZWFkKGRldiwgYnVmLCAxOCtvZmZzZXQpOworI2VuZGlmICAvLyBaTV9FTkFCTEVfTkFUSVZFX1dJRkkKKyAgICAgICAgICAgICAgICAjaWYgMQorICAgICAgICAgICAgICAgIGlmICgocmV0ID0gemZJbnRyYWJzc0ZvcndhcmQoZGV2LCBidWYsIHZhcCkpID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBGcmVlIFJ4IGJ1ZmZlciBpZiBpbnRyYS1CU1MgdW5pY2FzdCBmcmFtZSAqLworICAgICAgICAgICAgICAgICAgICB6bV9tc2cwX3J4KFpNX0xWXzIsICJGcmVlIGludHJhLUJTUyB1bmljYXN0IGZyYW1lIik7CisgICAgICAgICAgICAgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIDApOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgLyogV0RTIG1vZGUgKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6bV9tc2cwX3J4KFpNX0xWXzIsICJSeCBXRFMgZGF0YSIpOworCisgICAgICAgICAgICAgICAgLyogU0EgPSBBZGRyZXNzIDQgKi8KKyAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMzArb2Zmc2V0LCB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgWk1fV0xBTl9IRUFERVJfQTRfT0ZGU0VUKSk7CisgICAgICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDMyK29mZnNldCwgem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFpNX1dMQU5fSEVBREVSX0E0X09GRlNFVCsyKSk7CisgICAgICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDM0K29mZnNldCwgem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFpNX1dMQU5fSEVBREVSX0E0X09GRlNFVCs0KSk7CisgICAgICAgICAgICAgICAgLyogREEgPSBBZGRyZXNzIDMgKi8KKyAgICAgICAgICAgICAgICAvKiBTZXEgOiBSZWFkIDIwIHdyaXRlIDIyLCByZWFkIDE4IHdyaXRlIDIwLCByZWFkIDE2IHdyaXRlIDE4ICovCisgICAgICAgICAgICAgICAgLyogc2VxdWVuY2UgbXVzdCBub3QgYmUgaW52ZXJ0ZWQgKi8KKyAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMjgrb2Zmc2V0LCB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgWk1fV0xBTl9IRUFERVJfQTNfT0ZGU0VUKzQpKTsKKyAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMjYrb2Zmc2V0LCB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgWk1fV0xBTl9IRUFERVJfQTNfT0ZGU0VUKzIpKTsKKyAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMjQrb2Zmc2V0LCB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgWk1fV0xBTl9IRUFERVJfQTNfT0ZGU0VUKSk7CisgICAgICAgICAgICAgICAgemZ3QnVmUmVtb3ZlSGVhZChkZXYsIGJ1ZiwgMjQrb2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9QU0VVRE8pCisgICAgICAgIHsKKwkJCS8qIFdEUyB0ZXN0OiByZW1vdmUgYWRkNCAqLworICAgICAgICAgICAgaWYgKHdkLT5lbmFibGVXRFMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDY7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIFNBID0gQWRkcmVzcyAyICovCisgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMjQrb2Zmc2V0LCB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWk1fV0xBTl9IRUFERVJfQTJfT0ZGU0VUKSk7CisgICAgICAgICAgICB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1ZiwgMjYrb2Zmc2V0LCB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWk1fV0xBTl9IRUFERVJfQTJfT0ZGU0VUKzIpKTsKKyAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAyOCtvZmZzZXQsIHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTV9XTEFOX0hFQURFUl9BMl9PRkZTRVQrNCkpOworICAgICAgICAgICAgLyogREEgPSBBZGRyZXNzIDEgKi8KKyAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAxOCtvZmZzZXQsIHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTV9XTEFOX0hFQURFUl9BMV9PRkZTRVQpKTsKKyAgICAgICAgICAgIHptd19yeF9idWZfd3JpdGVoKGRldiwgYnVmLCAyMCtvZmZzZXQsIHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTV9XTEFOX0hFQURFUl9BMV9PRkZTRVQrMikpOworICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDIyK29mZnNldCwgem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpNX1dMQU5fSEVBREVSX0ExX09GRlNFVCs0KSk7CisgICAgICAgICAgICB6ZndCdWZSZW1vdmVIZWFkKGRldiwgYnVmLCAxOCtvZmZzZXQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgem1fYXNzZXJ0KDApOworICAgICAgICB9CisKKyAgICAgICAgLyogQ2FsbCB6ZndSZWN2RXRoKCkgdG8gbm90aWZ5IHVwcGVyIGxheWVyICovCisgICAgICAgIC8vem1fbXNnMl9yeChaTV9MVl8yLCAiQ2FsbCB6ZndSZWN2RXRoKCksIGJ1Zj0iLCBidWYpOworICAgICAgICAvL3pmd0R1bXBCdWYoZGV2LCBidWYpOworCisgICAgICAgICNpZiBaTV9QUk9UT0NPTF9SRVNQT05TRV9TSU1VTEFUSU9OID09IDEKKyAgICAgICAgemZQcm90UnNwU2ltKGRldiwgYnVmKTsKKyAgICAgICAgI2VuZGlmCisgICAgICAgIC8vemZ3RHVtcEJ1ZihkZXYsIGJ1Zik7CisKKyAgICAgICAgLyogdGFsbHkgKi8KKyAgICAJd2QtPmNvbW1UYWxseS5Ob3RpZnlORElTUnhGcm1DbnQrKzsKKworICAgIAlpZiAod2QtPnpmY2JSZWN2RXRoICE9IE5VTEwpCisgICAgCXsKKyAgICAgICAgICAgIHdkLT56ZmNiUmVjdkV0aChkZXYsIGJ1ZiwgdmFwKTsKKyAgICAgICAgICAgIFpNX1BFUkZPUk1BTkNFX1JYX01TRFUoZGV2LCB3ZC0+dGljaykKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBpZiBtYW5hZ2VtZW50IGZyYW1lICovCisgICAgZWxzZSBpZiAoZnJhbWVUeXBlID09IFpNX1dMQU5fTUFOQUdFTUVOVF9GUkFNRSkKKyAgICB7CisgICAgICAgIHptX21zZzJfcngoWk1fTFZfMiwgIlJ4IG1hbmFnZW1lbnQsRkM9IiwgZnJhbWVDdHJsKTsKKyAgICAgICAgLyogQ2FsbCB6ZlByb2Nlc3NNYW5hZ2VtZW50KCkgdG8gaGFuZGxlIG1hbmFnZW1lbnQgZnJhbWUgKi8KKyAgICAgICAgemZQcm9jZXNzTWFuYWdlbWVudChkZXYsIGJ1ZiwgYWRkSW5mbyk7IC8vQ1dZYW5nKG0pCisgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIDApOworICAgIH0KKyAgICAvKiBQc1BvbGwgKi8KKyAgICBlbHNlIGlmICgod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApICYmIChmcmFtZUN0cmwgPT0gMHhhNCkpCisgICAgeworICAgICAgICB6bV9tc2cwX3J4KFpNX0xWXzAsICJSeCBQc1BvbGwiKTsKKyAgICAgICAgemZBcFByb2Nlc3NQc1BvbGwoZGV2LCBidWYpOworICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgem1fbXNnMF9yeChaTV9MVl8xLCAiUnggZGlzY2FyZCEhIik7CisgICAgICAgIHdkLT5jb21tVGFsbHkuRHJpdmVyRGlzY2FyZGVkRnJtKys7CisKKyAgICAgICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CisgICAgfQorICAgIHJldHVybjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZXbGFuUnhWYWxpZGF0ZSAgICAgICAgICAgICovCisvKiAgICAgIFZhbGlkYXRlIFJ4IGZyYW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBidWYgOiByZWNlaXZlZCA4MDIuMTEgZnJhbWUgYnVmZmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBFcnJvciBjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuICAgICAgICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNS4xMCAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZXbGFuUnhWYWxpZGF0ZSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgdTE2X3QgZnJhbWVUeXBlOworICAgIHUxNl90IGZyYW1lQ3RybDsKKyAgICB1MTZfdCBmcmFtZUxlbjsKKyAgICB1MTZfdCByZXQ7CisgICAgdThfdCAgZnJhbWVTdWJUeXBlOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgZnJhbWVDdHJsID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMCk7CisgICAgZnJhbWVUeXBlID0gZnJhbWVDdHJsICYgMHhDOworICAgIGZyYW1lU3ViVHlwZSA9IChmcmFtZUN0cmwgJiAweEYwKSA+PiA0OworCisgICAgZnJhbWVMZW4gPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsKKworICAgIC8qIEFjY2VwdCBEYXRhL01hbmFnZW1lbnQgZnJhbWUgd2l0aCBwcm90b2NvbCB2ZXJzaW9uID0gMCAqLworICAgIGlmICgoZnJhbWVUeXBlID09IDB4OCkgfHwgKGZyYW1lVHlwZSA9PSAweDApKQorICAgIHsKKworICAgICAgICAvKiBUT0RPIDogY2hlY2sgcnggc3RhdHVzID0+IGVycm8gYml0ICovCisKKyAgICAgICAgLyogQ2hlY2sgTWluaW11bSBMZW5ndGggd2l0aCBXZXAgKi8KKyAgICAgICAgaWYgKChmcmFtZUN0cmwgJiAweDQwMDApICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE1pbmltdW0gTGVuZ3RoID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgLyogICAgIFBMQ1AoNSkrSGVhZGVyKDI0KStJVig0KStJQ1YoNCkrQ1JDKDQpK1J4U3RhdHVzKDgpICovCisgICAgICAgICAgICBpZiAoZnJhbWVMZW4gPCAzMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gWk1fRVJSX01JTl9SWF9FTkNSWVBUX0ZSQU1FX0xFTkdUSDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggZnJhbWVTdWJUeXBlID09IDB4NSB8fCBmcmFtZVN1YlR5cGUgPT0gMHg4ICkKKyAgICAgICAgeworICAgICAgICAgICAgLyogTWluaW11bSBMZW5ndGggPSBQTENQKDUpK01BQ0hlYWRlcigyNCkrVGltZXN0YW1wKDgpK0JlYWNvbkludGVydmFsKDIpK0NhcCgyKStDUkMoNCkrUnhTdGF0dXMoOCkgKi8KKyAgICAgICAgICAgIGlmIChmcmFtZUxlbiA8IDM2KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBaTV9FUlJfTUlOX1JYX0ZSQU1FX0xFTkdUSDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE1pbmltdW0gTGVuZ3RoID0gUExDUCg1KStNQUNIZWFkZXIoMjQpK0NSQyg0KStSeFN0YXR1cyg4KSAqLworICAgICAgICAgICAgaWYgKGZyYW1lTGVuIDwgMjQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFpNX0VSUl9NSU5fUlhfRlJBTUVfTEVOR1RIOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogQ2hlY2sgaWYgZnJhbWUgTGVuZ3RoID4gWk1fV0xBTl9NQVhfUlhfU0laRS4gKi8KKyAgICAgICAgaWYgKGZyYW1lTGVuID4gWk1fV0xBTl9NQVhfUlhfU0laRSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFpNX0VSUl9NQVhfUlhfRlJBTUVfTEVOR1RIOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKChmcmFtZUN0cmwmMHhmZikgPT0gMHhhNCkKKyAgICB7CisgICAgICAgIC8qIFBzUG9sbCAqLworICAgICAgICAvL3ptX21zZzBfcngoWk1fTFZfMCwgInJ4IHBzcG9sbCIpOworICAgIH0KKyAgICBlbHNlIGlmICgoZnJhbWVDdHJsJjB4ZmYpID09IFpNX1dMQU5fRlJBTUVfVFlQRV9CQVIpCisgICAgeworICAgICAgICBpZiAod2QtPnN0YS5lbmFibGVEcnZCQSA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICB6ZkFnZ1JlY3ZCQVIoZGV2LCBidWYpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFpNX0VSUl9SWF9CQVJfRlJBTUU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBaTV9FUlJfUlhfRlJBTUVfVFlQRTsKKyAgICB9CisKKyAgICBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQICkKKyAgICB7CisgICAgfQorICAgIGVsc2UgaWYgKCB3ZC0+d2xhbk1vZGUgIT0gWk1fTU9ERV9QU0VVRE8gKQorICAgIHsKKyAgICAgICAgaWYgKCAocmV0PXpmU3RhUnhWYWxpZGF0ZUZyYW1lKGRldiwgYnVmKSkhPVpNX1NVQ0NFU1MgKQorICAgICAgICB7CisgICAgICAgICAgICAvL3ptX2RlYnVnX21zZzEoImRpc2NhcmQgZnJhbWUsIGNvZGUgPSAiLCByZXQpOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBaTV9TVUNDRVNTOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZldsYW5SeEZpbHRlciAgICAgICAgICAgICAgKi8KKy8qICAgICAgRmlsdGVyIGR1cGxpY2F0ZWQgZnJhbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZiA6IHJlY2VpdmVkIDgwMi4xMSBmcmFtZSBidWZmZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIEVycm9yIGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFN0ZXBoZW4gICAgICAgICAgICAgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAgICAyMDA1LjEwICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MTZfdCB6ZldsYW5SeEZpbHRlcih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgdTE2X3Qgc3JjWzNdOworICAgIHUxNl90IGRzdDA7CisgICAgdTE2X3QgZnJhbWVUeXBlOworICAgIHUxNl90IHNlcTsKKyAgICB1MTZfdCBvZmZzZXQ7CisgICAgdTE2X3QgaW5kZXg7CisgICAgdTE2X3QgY29sOworICAgIHUxNl90IGk7CisgICAgdThfdCB1cCA9IDA7IC8qIFVzZXIgcHJpb3JpdHkgKi8KKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICBaTV9CVUZGRVJfVFJBQ0UoZGV2LCBidWYpCisKKyAgICAvKiBSWCBQUkVGSVggKi8KKyAgICBvZmZzZXQgPSAwOworCisgICAgZnJhbWVUeXBlID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1Ziwgb2Zmc2V0KTsKKworICAgIC8vIERvbid0IGRpdmlkZSAyXjQgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSBmcmFnZW1lbnRhdGlvbiBwa3QgdG8gYmUgdHJlYXRlZCBhcworICAgIC8vIGR1cGxpY2F0ZWQgZnJhbWVzCisgICAgc2VxID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1Ziwgb2Zmc2V0KzIyKTsKKyAgICBkc3QwID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1Ziwgb2Zmc2V0KzQpOworICAgIHNyY1swXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIG9mZnNldCsxMCk7CisgICAgc3JjWzFdID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1Ziwgb2Zmc2V0KzEyKTsKKyAgICBzcmNbMl0gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBvZmZzZXQrMTQpOworCisgICAgLyogUW9TIGRhdGEgZnJhbWUgKi8KKyAgICBpZiAoKGZyYW1lVHlwZSAmIDB4ODgpID09IDB4ODgpCisgICAgeworICAgICAgICB1cCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCsyNCk7CisgICAgICAgIHVwICY9IDB4NzsKKyAgICB9CisKKyAgICBpbmRleCA9IChzcmNbMl0rdXApICYgKFpNX0ZJTFRFUl9UQUJMRV9ST1ctMSk7CisKKyAgICAvKiBUQkQgOiBmaWx0ZXIgZnJhbWUgd2l0aCBzb3VyY2UgYWRkcmVzcyA9PSBvd24gTUFDIGFkcmVzcyAqLworICAgIGlmICgod2QtPm1hY0FkZHJbMF0gPT0gc3JjWzBdKSAmJiAod2QtPm1hY0FkZHJbMV0gPT0gc3JjWzFdKQorICAgICAgICAgICAgJiYgKHdkLT5tYWNBZGRyWzJdID09IHNyY1syXSkpCisgICAgeworICAgICAgICAvL3ptX21zZzBfcngoWk1fTFZfMCwgIlJ4IGZpbHRlcj0+c3JjIGlzIG93biBNQUMiKTsKKyAgICAgICAgd2QtPnRyYWZUYWxseS5yeFNyY0lzT3duTWFjKys7CisjaWYgMAorICAgICAgICByZXR1cm4gWk1fRVJSX1JYX1NSQ19BRERSX0lTX09XTl9NQUM7CisjZW5kaWYKKyAgICB9CisKKyAgICB6bV9tc2cyX3J4KFpNX0xWXzIsICJSeCBzZXE9Iiwgc2VxKTsKKworICAgIC8qIEZpbHRlciB1bmljYXN0IGZyYW1lIG9ubHkgKi8KKyAgICBpZiAoKGRzdDAgJiAweDEpID09IDApCisgICAgeworICAgICAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgIGZvcihpPTA7IGk8Wk1fRklMVEVSX1RBQkxFX0NPTDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHdkLT5yeEZpbHRlclRibFtpXVtpbmRleF0uYWRkclswXSA9PSBzcmNbMF0pCisgICAgICAgICAgICAgICAgICAgICYmICh3ZC0+cnhGaWx0ZXJUYmxbaV1baW5kZXhdLmFkZHJbMV0gPT0gc3JjWzFdKQorICAgICAgICAgICAgICAgICAgICAmJiAod2QtPnJ4RmlsdGVyVGJsW2ldW2luZGV4XS5hZGRyWzJdID09IHNyY1syXSkKKyAgICAgICAgICAgICAgICAgICAgJiYgKHdkLT5yeEZpbHRlclRibFtpXVtpbmRleF0udXAgPT0gdXApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgoKGZyYW1lVHlwZSYweDgwMCk9PTB4ODAwKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYod2QtPnJ4RmlsdGVyVGJsW2ldW2luZGV4XS5zZXE9PXNlcSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICAgICAgICAgICAgICAvKiBoaXQgOiBkdXBsaWNhdGVkIGZyYW1lICovCisgICAgICAgICAgICAgICAgICAgIHptX21zZzBfcngoWk1fTFZfMSwgIlJ4IGZpbHRlciBoaXQ9PmR1cGxpY2F0ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgd2QtPnRyYWZUYWxseS5yeER1cGxpY2F0ZSsrOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gWk1fRVJSX1JYX0RVUExJQ0FURTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogaGl0IDogbm90IGR1cGxpY2F0ZWQgZnJhbWUsIHVwZGF0ZSBzZXF1ZW5jZSBudW1iZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgd2QtPnJ4RmlsdGVyVGJsW2ldW2luZGV4XS5zZXEgPSBzZXE7CisgICAgICAgICAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICAgICAgICAgIHptX21zZzBfcngoWk1fTFZfMiwgIlJ4IGZpbHRlciBoaXQiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFpNX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IC8qIGZvcihpPTA7IGk8Wk1fRklMVEVSX1RBQkxFX0NPTDsgaSsrKSAqLworCisgICAgICAgIC8qIG1pc3MgOiBhZGQgdG8gdGFibGUgKi8KKyAgICAgICAgem1fbXNnMF9yeChaTV9MVl8xLCAiUnggZmlsdGVyIG1pc3MiKTsKKyAgICAgICAgLyogVE9ETyA6IFJhbmRvbSBzZWxlY3QgYSBjb2x1bW4gKi8KKyAgICAgICAgY29sID0gKHUxNl90KSh3ZC0+dGljayAmIChaTV9GSUxURVJfVEFCTEVfQ09MLTEpKTsKKyAgICAgICAgd2QtPnJ4RmlsdGVyVGJsW2NvbF1baW5kZXhdLmFkZHJbMF0gPSBzcmNbMF07CisgICAgICAgIHdkLT5yeEZpbHRlclRibFtjb2xdW2luZGV4XS5hZGRyWzFdID0gc3JjWzFdOworICAgICAgICB3ZC0+cnhGaWx0ZXJUYmxbY29sXVtpbmRleF0uYWRkclsyXSA9IHNyY1syXTsKKyAgICAgICAgd2QtPnJ4RmlsdGVyVGJsW2NvbF1baW5kZXhdLnNlcSA9IHNlcTsKKyAgICAgICAgd2QtPnJ4RmlsdGVyVGJsW2NvbF1baW5kZXhdLnVwID0gdXA7CisKKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICB9IC8qIGlmICgoZHN0MCAmIDB4MSkgPT0gMCkgKi8KKworICAgIHJldHVybiBaTV9TVUNDRVNTOworfQorCisKKwordTE2X3QgemZUeEdlbldsYW5UYWlsKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QqIHNuYXAsIHUxNl90IHNuYXBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgdTE2X3QqIG1pYykKK3sKKyAgICBzdHJ1Y3QgenNNaWNWYXIqICBwTWljS2V5OworICAgIHUxNl90ICBpLCBsZW5ndGgsIHBheWxvYWRPZmZzZXQ7CisgICAgdThfdCAgIGJWYWx1ZSwgcW9zVHlwZSA9IDA7CisgICAgdThfdCAgIHNuYXBCeXRlWzEyXTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGlmICggd2QtPndsYW5Nb2RlID09IFpNX01PREVfQVAgKQorICAgIHsKKyAgICAgICAgcE1pY0tleSA9IHpmQXBHZXRUeE1pY0tleShkZXYsIGJ1ZiwgJnFvc1R5cGUpOworCisgICAgICAgIGlmICggcE1pY0tleSA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFICkKKyAgICB7CisgICAgICAgIHBNaWNLZXkgPSB6ZlN0YUdldFR4TWljS2V5KGRldiwgYnVmKTsKKworICAgICAgICBpZiAoIHBNaWNLZXkgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGxlbmd0aCA9IHpmd0J1ZkdldFNpemUoZGV2LCBidWYpOworCisgICAgemZNaWNDbGVhcihwTWljS2V5KTsKKworICAgIC8qIGFwcGVuZCBEQSBhbmQgU0EgKi8KKyNpZmRlZiBaTV9FTkFCTEVfTkFUSVZFX1dJRkkKKyAgICBmb3IoaT0xNjsgaTwyMjsgaSsrKQorICAgIHsgLy8gVklTVEEgREEKKyAgICAgICAgYlZhbHVlID0gem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgaSk7CisgICAgICAgIHpmTWljQXBwZW5kQnl0ZShiVmFsdWUsIHBNaWNLZXkpOworICAgIH0KKyAgICBmb3IoaT0xMDsgaTwxNjsgaSsrKQorICAgIHsgLy8gVklTVEEgU0EKKyAgICAgICAgYlZhbHVlID0gem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgaSk7CisgICAgICAgIHpmTWljQXBwZW5kQnl0ZShiVmFsdWUsIHBNaWNLZXkpOworICAgIH0KKyNlbHNlCisgICAgZm9yKGk9MDsgaTwxMjsgaSsrKQorICAgIHsKKyAgICAgICAgYlZhbHVlID0gem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgaSk7CisgICAgICAgIHpmTWljQXBwZW5kQnl0ZShiVmFsdWUsIHBNaWNLZXkpOworICAgIH0KKyNlbmRpZgorCisgICAgLyogYXBwZW5kIGZvciBhbGlnbm1lbnQgKi8KKyAgICBpZiAoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFICkKKyAgICB7CisgICAgICAgIGlmICh3ZC0+c3RhLndtZUNvbm5lY3RlZCAhPSAwKQorICAgICAgICAgICAgemZNaWNBcHBlbmRCeXRlKHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIFpNXzgwMjExX0ZSQU1FX0lQX09GRlNFVCArIDEpID4+IDUsIHBNaWNLZXkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB6Zk1pY0FwcGVuZEJ5dGUoMCwgcE1pY0tleSk7CisgICAgfQorICAgIGVsc2UgaWYgKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCApCisgICAgeworICAgICAgICBpZiAocW9zVHlwZSA9PSAxKQorICAgICAgICAgICAgemZNaWNBcHBlbmRCeXRlKHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIFpNXzgwMjExX0ZSQU1FX0lQX09GRlNFVCArIDEpID4+IDUsIHBNaWNLZXkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB6Zk1pY0FwcGVuZEJ5dGUoMCwgcE1pY0tleSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIFRPRE8gOiBRb3MgU29mdHdhcmUgTUlDIGluIElCU1MgTW9kZSAqLworICAgICAgICB6Zk1pY0FwcGVuZEJ5dGUoMCwgcE1pY0tleSk7CisgICAgfQorICAgIHpmTWljQXBwZW5kQnl0ZSgwLCBwTWljS2V5KTsKKyAgICB6Zk1pY0FwcGVuZEJ5dGUoMCwgcE1pY0tleSk7CisgICAgemZNaWNBcHBlbmRCeXRlKDAsIHBNaWNLZXkpOworCisgICAgaWYgKCBzbmFwbGVuID09IDAgKQorICAgIHsKKyAgICAgICAgcGF5bG9hZE9mZnNldCA9IFpNXzgwMjExX0ZSQU1FX0lQX09GRlNFVDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcGF5bG9hZE9mZnNldCA9IFpNXzgwMjExX0ZSQU1FX1RZUEVfT0ZGU0VUOworCisgICAgICAgIGZvcihpPTA7IGk8KHNuYXBsZW4+PjEpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHNuYXBCeXRlW2kqMl0gPSAodThfdCkgKHNuYXBbaV0gJiAweGZmKTsKKyAgICAgICAgICAgIHNuYXBCeXRlW2kqMisxXSA9ICh1OF90KSAoKHNuYXBbaV0gPj4gOCkgJiAweGZmKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvcihpPTA7IGk8c25hcGxlbjsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB6Zk1pY0FwcGVuZEJ5dGUoc25hcEJ5dGVbaV0sIHBNaWNLZXkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yKGk9cGF5bG9hZE9mZnNldDsgaTxsZW5ndGg7IGkrKykKKyAgICB7CisgICAgICAgIGJWYWx1ZSA9IHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIGkpOworICAgICAgICB6Zk1pY0FwcGVuZEJ5dGUoYlZhbHVlLCBwTWljS2V5KTsKKyAgICB9CisKKyAgICB6Zk1pY0dldE1pYyggKHU4X3QqKSBtaWMsIHBNaWNLZXkpOworCisgICAgcmV0dXJuIFpNX1NJWkVfT0ZfTUlDOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZlR4R2V0SXBUb3NBbmRGcmFnICAgICAgICAgKi8KKy8qICAgICAgR2V0IElQIFRPUyBhbmQgZnJhZyBvZmZzZXQgZnJvbSBUeCBidWZmZXIgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZiA6IFR4IGJ1ZmZlciBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICB1cCA6IHBvaW50ZXIgZm9yIHJldHVybmluZyB1c2VyIHByaW9yaXR5ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZnJhZ09mZiA6IHBvaW50ZXIgZm9yIHJldHVybmluZyBpcCBmcmFnIG9mZnNldCAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDYuNiAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgemZUeEdldElwVG9zQW5kRnJhZyh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHU4X3QqIHVwLCB1MTZfdCogZnJhZ09mZikKK3sKKyAgICB1OF90IGlwdjsKKyAgICB1MTZfdCBsZW47CisJdTE2X3QgZXRoZXJUeXBlOworICAgIHU4X3QgdG9zOworCisgICAgKnVwID0gMDsKKyAgICAqZnJhZ09mZiA9IDA7CisKKyAgICBsZW4gPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsKKworICAgIGlmIChsZW4gPj0gMzQpIC8vTWluaW11bSBJUHY0IHBhY2tldCBzaXplLCAxNChFdGhlciBoZWFkZXIpKzIwKElQdjQgaGVhZGVyKQorICAgIHsKKyAgICAgICAgZXRoZXJUeXBlID0gKCgodTE2X3Qpem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgWk1fODAyMTFfRlJBTUVfVFlQRV9PRkZTRVQpKTw8OCkKKyAgICAgICAgICAgICAgICAgICAgKyB6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCBaTV84MDIxMV9GUkFNRV9UWVBFX09GRlNFVCArIDEpOworCisgICAgICAgIC8qIHByb3RvY29sIHR5cGUgPSBJUCAqLworICAgICAgICBpZiAoZXRoZXJUeXBlID09IDB4MDgwMCkKKyAgICAgICAgeworICAgICAgICAgICAgaXB2ID0gem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgWk1fODAyMTFfRlJBTUVfSVBfT0ZGU0VUKSA+PiA0OworICAgICAgICAgICAgaWYgKGlwdiA9PSAweDQpIC8vSVB2NAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRvcyA9IHptd190eF9idWZfcmVhZGIoZGV2LCBidWYsIFpNXzgwMjExX0ZSQU1FX0lQX09GRlNFVCArIDEpOworICAgICAgICAgICAgICAgICp1cCA9ICh0b3MgPj4gNSk7CisgICAgICAgICAgICAgICAgKmZyYWdPZmYgPSB6bXdfdHhfYnVmX3JlYWRoKGRldiwgYnVmLCBaTV84MDIxMV9GUkFNRV9JUF9PRkZTRVQgKyA2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIFRPRE8gOiBoYW5kbGUgVkxBTiB0YWcgYW5kIElQdjYgcGFja2V0ICovCisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuOworfQorCisjaWZkZWYgWk1fRU5BQkxFX05BVElWRV9XSUZJCit1MTZfdCB6ZlR4R2VuV2xhblNuYXAoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCogc25hcCwgdTE2X3QqIHNuYXBsZW4pCit7CisgICAgc25hcFswXSA9IHptd19idWZfcmVhZGgoZGV2LCBidWYsIFpNXzgwMjExX0ZSQU1FX0hFQURFUl9MRU4gKyAwKTsKKyAgICBzbmFwWzFdID0gem13X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgWk1fODAyMTFfRlJBTUVfSEVBREVSX0xFTiArIDIpOworICAgIHNuYXBbMl0gPSB6bXdfYnVmX3JlYWRoKGRldiwgYnVmLCBaTV84MDIxMV9GUkFNRV9IRUFERVJfTEVOICsgNCk7CisgICAgKnNuYXBsZW4gPSA2OworCisgICAgcmV0dXJuIFpNXzgwMjExX0ZSQU1FX0hFQURFUl9MRU4gKyAqc25hcGxlbjsKK30KKyNlbHNlCit1MTZfdCB6ZlR4R2VuV2xhblNuYXAoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCogc25hcCwgdTE2X3QqIHNuYXBsZW4pCit7CisgICAgdTE2X3QgcmVtb3ZlZDsKKwkgICB1MTZfdCBldGhlclR5cGU7CisgICAJdTE2X3QgbGVuOworCisJICAgbGVuID0gemZ3QnVmR2V0U2l6ZShkZXYsIGJ1Zik7CisgICAgaWYgKGxlbiA8IDE0KSAvL01pbmltdW0gRXRoZXJuZXQgcGFja2V0IHNpemUsIDE0KEV0aGVyIGhlYWRlcikKKyAgICB7CisgICAgICAgIC8qIFRPRE8gOiBBc3NlcnQ/ICovCisgICAgICAgICpzbmFwbGVuID0gMDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogR2VuZXJhdGUgUkZDMTA0MiBoZWFkZXIgKi8KKyAgICBldGhlclR5cGUgPSAoKCh1MTZfdCl6bXdfdHhfYnVmX3JlYWRiKGRldiwgYnVmLCAxMikpPDw4KQorICAgICAgICAgICAgICAgICsgem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMTMpOworCisgICAgLy96bV9kZWJ1Z19tc2cyKCJldGhlcm5ldCB0eXBlIG9yIGxlbmd0aCA9ICIsIGV0aGVyVHlwZSk7CisKKyAgICBpZiAoZXRoZXJUeXBlID4gMTUwMCkKKyAgICB7CisgICAgICAgIC8qIEVUSEVSTkVUIGZvcm1hdCAqLworICAgICAgICByZW1vdmVkID0gMTI7CisgICAgICAgIHNuYXBbMF0gPSAweGFhYWE7CisgICAgICAgIHNuYXBbMV0gPSAweDAwMDM7CisgICAgICAgIGlmICgoZXRoZXJUeXBlID09MHg4MTM3KSB8fCAoZXRoZXJUeXBlID09IDB4ODBmMykpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEJyaWRnZSBUdW5uZWwgKi8KKyAgICAgICAgICAgIHNuYXBbMl0gPSAweEY4MDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBSRkMgMTA0MiAqLworICAgICAgICAgICAgc25hcFsyXSA9IDB4MDAwMDsKKyAgICAgICAgfQorICAgICAgICAqc25hcGxlbiA9IDY7CisKKyAgICAgICAgaWYgKCBldGhlclR5cGUgPT0gMHg4ODhFICkKKyAgICAgICAgeworICAgICAgICAgICAgemZTaG93VHhFQVBPTChkZXYsIGJ1ZiwgMTQpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIDgwMi4zIGZvcm1hdCAqLworICAgICAgICByZW1vdmVkID0gMTQ7CisgICAgICAgICpzbmFwbGVuID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gcmVtb3ZlZDsKK30KKyNlbmRpZgorCit1OF90IHpmSXNWdHhxRW1wdHkoemRldl90KiBkZXYpCit7CisgICAgdThfdCBpc0VtcHR5ID0gVFJVRTsKKyAgICB1OF90IGk7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlmICh3ZC0+dm1tcUhlYWQgIT0gd2QtPnZtbXFUYWlsKQorICAgIHsKKyAgICAgICAgaXNFbXB0eSA9IEZBTFNFOworICAgICAgICBnb3RvIGNoZWNrX2RvbmU7CisgICAgfQorCisgICAgZm9yKGk9MDsgaSA8IDQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmICh3ZC0+dnR4cUhlYWRbaV0gIT0gd2QtPnZ0eHFUYWlsW2ldKQorICAgICAgICB7CisgICAgICAgICAgICBpc0VtcHR5ID0gRkFMU0U7CisgICAgICAgICAgICBnb3RvIGNoZWNrX2RvbmU7CisgICAgICAgIH0KKyAgICB9CisKK2NoZWNrX2RvbmU6CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICByZXR1cm4gaXNFbXB0eTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmUHV0VnR4cSAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBQdXQgVHggYnVmZmVyIHRvIHZpcnR1YWwgVHhRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmIDogVHggYnVmZmVyIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgWk1fU1VDQ0VTUyBvciBlcnJvciBjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDYuNiAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90IHpmUHV0VnR4cSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgdThfdCBhYzsKKyAgICB1OF90IHVwOworICAgIHUxNl90IGZyYWdPZmY7CisjaWZkZWYgWk1fQUdHX1RBTExZCisgICAgc3RydWN0IGFnZ1RhbGx5ICphZ2dfdGFsOworI2VuZGlmCisjaWZkZWYgWk1fRU5BQkxFX0FHR1JFR0FUSU9OCisgICAgI2lmbmRlZiBaTV9CWVBBU1NfQUdHUl9TQ0hFRFVMSU5HCisJdTE2X3QgcmV0OworICAgIHUxNl90IHRpZDsKKyAgICAjZW5kaWYKKyNlbmRpZgorCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHpmVHhHZXRJcFRvc0FuZEZyYWcoZGV2LCBidWYsICZ1cCwgJmZyYWdPZmYpOworCisgICAgaWYgKCB3ZC0+emZjYkNsYXNzaWZ5VHhQYWNrZXQgIT0gTlVMTCApCisgICAgeworICAgICAgICBhYyA9IHdkLT56ZmNiQ2xhc3NpZnlUeFBhY2tldChkZXYsIGJ1Zik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFjID0gemNVcFRvQWNbdXAmMHg3XSAmIDB4MzsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGFkZCBieSBob25kYQorICAgICAqIG1haW4gQS1NUERVIGFnZ3JlZ2F0aW9uIGZ1bmN0aW9uCisgICAgICovCisjaWZkZWYgWk1fQUdHX1RBTExZCisgICAgYWdnX3RhbCA9ICZ3ZC0+YWdnX3RhbDsKKyAgICBhZ2dfdGFsLT5nb3RfcGFja2V0c19zdW0rKzsKKworI2VuZGlmCisKKyNpZmRlZiBaTV9FTkFCTEVfQUdHUkVHQVRJT04KKyAgICAjaWZuZGVmIFpNX0JZUEFTU19BR0dSX1NDSEVEVUxJTkcKKyAgICB0aWQgPSB1cCYweDc7CisgICAgaWYod2QtPmVuYWJsZUFnZ3JlZ2F0aW9uPT0wKQorICAgIHsKKyAgICAgICAgaWYoICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCkgfHwKKyAgICAgICAgICAgICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSAmJiB3ZC0+c3RhLkVuYWJsZUhUKSB8fAorICAgICAgICAgICAgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX1BTRVVETykgKSB7CisgICAgICAgICAgICAvLyAoaW5mcmFzdHJ1Y3R1cmVfbW9kZSAmJiBjb25uZWN0X3RvXzExbl9hcCkgfHwgKGFwX21vZGUgJiYgaXNfMTFuX2FwKQorICAgICAgICAgICAgLy9yZXQgPSB6ZkFnZ1B1dFZ0eHEoZGV2LCBidWYpOworCisKKyAgICAgICAgICAgIHJldCA9IHpmQWdnVHgoZGV2LCBidWYsIHRpZCk7CisgICAgICAgICAgICBpZiAoWk1fU1VDQ0VTUyA9PSByZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy96ZndCdWZGcmVlKGRldiwgYnVmLCBaTV9TVUNDRVNTKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBaTV9TVUNDRVNTOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFpNX0VSUl9FWENFRURfUFJJT1JJVFlfVEhSRVNIT0xEID09IHJldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+Y29tbVRhbGx5LnR4UW9zRHJvcENvdW50W2FjXSsrOworICAgICAgICAgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIFpNX1NVQ0NFU1MpOworCisgICAgICAgICAgICAgICAgem1fbXNnMV90eChaTV9MVl8xLCAiUGFja2V0IGRpc2NhcmRlZCwgVlRYUSBmdWxsLCBhYz0iLCBhYyk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gWk1fRVJSX0VYQ0VFRF9QUklPUklUWV9USFJFU0hPTEQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoWk1fRVJSX1RYX0JVRkZFUl9VTkFWQUlMQUJMRSA9PSByZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAqIGRvIG5vdGhpbmcKKyAgICAgICAgICAgICAgICAqIGNvbnRpbnVlIGZvbGxvd2luZyBwcm9jZXNzaW9uLCBwdXQgaW50byBWVFhRCisgICAgICAgICAgICAgICAgKiByZXR1cm4gWk1fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgICNlbmRpZgorI2VuZGlmCisgICAgLyoKKyAgICAgKiBlbmQgb2YgYWRkIGJ5IGhvbmRhCisgICAgICovCisKKyAgICAvKiBGaXJzdCBJcCBmcmFnICovCisgICAgaWYgKChmcmFnT2ZmICYgMHhmZjNmKSA9PSAweDAwMjApCisgICAgeworICAgICAgICAvKiBEb24ndCBsZXQgaXAgZnJhZyBpbiBpZiBWVFhRIHVuYWJsZSB0byBob2xkICovCisgICAgICAgIC8qIHdob2xlIGlwIGZyYWcgYnVyc3QoYXNzdW1lIDIwIGZyYWcpICAgICAgICAgKi8KKyAgICAgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgaWYgKCgod2QtPnZ0eHFIZWFkW2FjXSAtIHdkLT52dHhxVGFpbFthY10pJiBaTV9WVFhRX1NJWkVfTUFTSykKKyAgICAgICAgICAgICAgICA+IChaTV9WVFhRX1NJWkUtMjApKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+cW9zRHJvcElwRnJhZ1thY10gPSAxOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPnFvc0Ryb3BJcEZyYWdbYWNdID0gMDsKKyAgICAgICAgfQorICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgIGlmICh3ZC0+cW9zRHJvcElwRnJhZ1thY10gPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgLy96bV9kZWJ1Z19tc2cyKCJ2dFEgZnVsbCwgZHJvcCBidWYgPSAiLCBidWYpOworICAgICAgICAgICAgd2QtPmNvbW1UYWxseS50eFFvc0Ryb3BDb3VudFthY10rKzsKKyAgICAgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIFpNX1NVQ0NFU1MpOworICAgICAgICAgICAgem1fbXNnMV90eChaTV9MVl8xLCAiUGFja2V0IGRpc2NhcmRlZCwgZmlyc3QgaXAgZnJhZywgYWM9IiwgYWMpOworICAgICAgICAgICAgLy9WVFhRW10gY2FuIG5vdCBob2xkIHdob2xkIGlwIGZyYWcgYnVyc3QoYXNzdW1lIDIwIGZyYWdzKQorICAgICAgICAgICAgcmV0dXJuIFpNX0VSUl9FWENFRURfUFJJT1JJVFlfVEhSRVNIT0xEOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKChmcmFnT2ZmICYgMHhmZjNmKSA9PSAwKQorICAgIHsKKyAgICAgICAgd2QtPnFvc0Ryb3BJcEZyYWdbYWNdID0gMDsKKyAgICB9CisKKyAgICBpZiAoKChmcmFnT2ZmICY9IDB4ZmYxZikgIT0gMCkgJiYgKHdkLT5xb3NEcm9wSXBGcmFnW2FjXSA9PSAxKSkKKyAgICB7CisgICAgICAgIHdkLT5jb21tVGFsbHkudHhRb3NEcm9wQ291bnRbYWNdKys7CisgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIFpNX1NVQ0NFU1MpOworICAgICAgICB6bV9tc2cxX3R4KFpNX0xWXzEsICJQYWNrZXQgZGlzY2FyZGVkLCBpcCBmcmFnLCBhYz0iLCBhYyk7CisgICAgICAgIC8vRGlzY2FyZCBmb2xsb3dpbmcgaXAgZnJhZ3MKKyAgICAgICAgcmV0dXJuIFpNX0VSUl9FWENFRURfUFJJT1JJVFlfVEhSRVNIT0xEOworICAgIH0KKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgaWYgKCgod2QtPnZ0eHFIZWFkW2FjXSArIDEpICYgWk1fVlRYUV9TSVpFX01BU0spICE9IHdkLT52dHhxVGFpbFthY10pCisgICAgeworICAgICAgICB3ZC0+dnR4cVthY11bd2QtPnZ0eHFIZWFkW2FjXV0gPSBidWY7CisgICAgICAgIHdkLT52dHhxSGVhZFthY10gPSAoKHdkLT52dHhxSGVhZFthY10gKyAxKSAmIFpNX1ZUWFFfU0laRV9NQVNLKTsKKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgcmV0dXJuIFpNX1NVQ0NFU1M7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgd2QtPmNvbW1UYWxseS50eFFvc0Ryb3BDb3VudFthY10rKzsKKyAgICAgICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgWk1fU1VDQ0VTUyk7CisgICAgICAgIHptX21zZzFfdHgoWk1fTFZfMSwgIlBhY2tldCBkaXNjYXJkZWQsIFZUWFEgZnVsbCwgYWM9IiwgYWMpOworICAgICAgICByZXR1cm4gWk1fRVJSX0VYQ0VFRF9QUklPUklUWV9USFJFU0hPTEQ7IC8vVlRYUVtdIEZ1bGwKKyAgICB9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmR2V0VnR4cSAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBHZXQgVHggYnVmZmVyIGZyb20gdmlydHVhbCBUeFEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBUeCBidWZmZXIgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNi42ICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworemJ1Zl90KiB6ZkdldFZ0eHEoemRldl90KiBkZXYsIHU4X3QgYWMpCit7CisgICAgemJ1Zl90KiBidWY7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgYWMgJj0gMHgzOworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgaWYgKHdkLT52dHhxSGVhZFthY10gIT0gd2QtPnZ0eHFUYWlsW2FjXSkKKyAgICB7CisgICAgICAgIGJ1ZiA9IHdkLT52dHhxW2FjXVt3ZC0+dnR4cVRhaWxbYWNdXTsKKyAgICAgICAgd2QtPnZ0eHFUYWlsW2FjXSA9ICgod2QtPnZ0eHFUYWlsW2FjXSArIDEpICYgWk1fVlRYUV9TSVpFX01BU0spOworICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICByZXR1cm4gYnVmOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICByZXR1cm4gMDsgLy9WVFhRW10gZW1wdHkKKyAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZlB1dFZtbXEgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgUHV0IFR4IGJ1ZmZlciB0byB2aXJ0dWFsIE1tUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGJ1ZiA6IFR4IGJ1ZmZlciBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFpNX1NVQ0NFU1Mgb3IgZXJyb3IgY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFN0ZXBoZW4gQ2hlbiAgICAgICAgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAgICAyMDA2LjEyICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MTZfdCB6ZlB1dFZtbXEoemRldl90KiBkZXYsIHpidWZfdCogYnVmKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICBpZiAoKCh3ZC0+dm1tcUhlYWQgKyAxKSAmIFpNX1ZNTVFfU0laRV9NQVNLKSAhPSB3ZC0+dm1tcVRhaWwpCisgICAgeworICAgICAgICB3ZC0+dm1tcVt3ZC0+dm1tcUhlYWRdID0gYnVmOworICAgICAgICB3ZC0+dm1tcUhlYWQgPSAoKHdkLT52bW1xSGVhZCArIDEpICYgWk1fVk1NUV9TSVpFX01BU0spOworICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICByZXR1cm4gWk1fU1VDQ0VTUzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCBaTV9TVUNDRVNTKTsKKyAgICAgICAgem1fbXNnMF9tbShaTV9MVl8wLCAiUGFja2V0IGRpc2NhcmRlZCwgVk1tUSBmdWxsIik7CisgICAgICAgIHJldHVybiBaTV9FUlJfVk1NUV9GVUxMOyAvL1ZUWFFbXSBGdWxsCisgICAgfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkdldFZtbXEgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgR2V0IFR4IGJ1ZmZlciBmcm9tIHZpcnR1YWwgTW1RICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgVHggYnVmZmVyIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDYuMTIgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3pidWZfdCogemZHZXRWbW1xKHpkZXZfdCogZGV2KQoreworICAgIHpidWZfdCogYnVmOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICBpZiAod2QtPnZtbXFIZWFkICE9IHdkLT52bW1xVGFpbCkKKyAgICB7CisgICAgICAgIGJ1ZiA9IHdkLT52bW1xW3dkLT52bW1xVGFpbF07CisgICAgICAgIHdkLT52bW1xVGFpbCA9ICgod2QtPnZtbXFUYWlsICsgMSkgJiBaTV9WTU1RX1NJWkVfTUFTSyk7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHJldHVybiBidWY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHJldHVybiAwOyAvL1ZUWFFbXSBlbXB0eQorICAgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmUHVzaFZ0eHEgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTZXJ2aWNlIFZpcnR1YWwgVHhRICh3ZWlnaHRlZCByb3VuZCByb2JpbikgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgR2V0IFR4IGJ1ZmZlciBmb3JtIHZpcnR1YWwgVHhRIGFuZCBwdXQgdG8gaGFyZHdhcmUgVHhEIHF1ZXVlICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDYuNiAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgemZQdXNoVnR4cSh6ZGV2X3QqIGRldikKK3sKKyAgICB6YnVmX3QqIGJ1ZjsKKyAgICB1MTZfdCBpOworICAgIHUxNl90IHR4ZWQ7CisgICAgdTMyX3QgZnJlZVR4ZDsKKyAgICB1MTZfdCBlcnI7CisgICAgdTE2X3Qgc2tpcEZsYWcgPSAwOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisKKworICAgIC8vem1fZGVidWdfbXNnMSgiemZIcEdldEZyZWVUeGRDb3VudCA9ICIsIHpmSHBHZXRGcmVlVHhkQ291bnQoZGV2KSk7CisKKyAgICBpZiAod2QtPmhhbFN0YXRlID09IFpNX0hBTF9TVEFURV9JTklUKQorICAgIHsKKyAgICAgICAgaWYgKCF3ZC0+bW9kZU1ES0VuYWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiSEFMIGlzIG5vdCByZWFkeSBmb3IgVHgiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKHdkLT5zdGEuREZTRGlzYWJsZVR4KQorICAgIHsKKyAgICAgICAgem1fZGVidWdfbXNnMCgicmV0dXJuIGJlY2F1c2UgODAyLjExaCBERlMgRGlzYWJsZSBUeCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKHdkLT5zdGEuZmxhZ0ZyZXFDaGFuZ2luZyAhPSAwKQorICAgIHsKKyAgICAgICAgLy9Ib2xkIHVudGlsIFJGIGZyZXF1ZW5jeSBjaGFuZ2VkCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZWxzZSBpZiAoKCB3ZC0+c3RhLmZsYWdLZXlDaGFuZ2luZyApICYmICggd2QtPndsYW5Nb2RlICE9IFpNX01PREVfQVAgKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWZkZWYgWk1fRU5BQkxFX1BPV0VSX1NBVkUKKyAgICBlbHNlIGlmICggemZQb3dlclNhdmluZ01ncklzU2xlZXBpbmcoZGV2KSApCisgICAgeworICAgICAgICAvL3ptX2RlYnVnX21zZzAoIlBhY2tldHMgcXVldWVkIHNpbmNlIHRoZSBNQUMgaXMgaW4gcG93ZXItc2F2aW5nIG1vZGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIGlmICh3ZC0+dnR4cVB1c2hpbmcgIT0gMCkKKyAgICB7CisgICAgICAgIHNraXBGbGFnID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgd2QtPnZ0eHFQdXNoaW5nID0gMTsKKyAgICB9CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlmIChza2lwRmxhZyA9PSAxKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHdoaWxlICgxKQorICAgIHsKKyAgICAgICAgdHhlZCA9IDA7CisKKyAgICAgICAgLyogMjAwNi4xMi4yMCwgU2VydmUgTWFuYWdlbWVudCBxdWV1ZSAqLworICAgICAgICB3aGlsZSggemZIcEdldEZyZWVUeGRDb3VudChkZXYpID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgoYnVmID0gemZHZXRWbW1xKGRldikpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHhlZCA9IDE7CisgICAgICAgICAgICAgICAgLy96bV9kZWJ1Z19tc2cyKCJzZW5kIGJ1ZiA9ICIsIGJ1Zik7CisgICAgICAgICAgICAgICAgaWYgKChlcnIgPSB6ZkhwU2VuZChkZXYsIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwsIDAsIGJ1ZiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFpNX0lOVEVSTkFMX0FMTE9DX0JVRiwgMCwgMHhmZikpICE9IFpNX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh3ZC0+c3RhLmJTY2hlZHVsZVNjYW4pIHx8ICgod2QtPnN0YS5iQ2hhbm5lbFNjYW4gPT0gVFJVRSkgJiYgKHpmU3RhSXNDb25uZWN0ZWQoZGV2KSkpKQorICAgICAgICB7CisgICAgICAgICAgICAvL0hvbGQgdW50aWwgU2NhbiBTdG9wCisgICAgICAgICAgICB3ZC0+dnR4cVB1c2hpbmcgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyNpZmRlZiBaTV9FTkFCTEVfQUdHUkVHQVRJT04KKyAgICAjaWZuZGVmIFpNX0JZUEFTU19BR0dSX1NDSEVEVUxJTkcKKyAgICAgICAgaWYoICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9BUCkgfHwKKyAgICAgICAgICAgICh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSAmJiB3ZC0+c3RhLkVuYWJsZUhUKSB8fAorICAgICAgICAgICAgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX1BTRVVETykgKSB7CisKKyAgICAgICAgICAgIHpmQWdnVHhTY2hlZHVsZXIoZGV2LCAwKTsKKworICAgICAgICAgICAgaWYgKHR4ZWQgPT0gMCkgeworICAgICAgICAgICAgICAgIHdkLT52dHhxUHVzaGluZyA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAjZW5kaWYKKyNlbmRpZgorCisgICAgICAgIC8qIFNlcnZpY2UgVlR4UVszXSAqLworICAgICAgICBmb3IgKGk9MDsgaTw0OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgoZnJlZVR4ZCA9IHpmSHBHZXRGcmVlVHhkQ291bnQoZGV2KSkgPj0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKGJ1ZiA9IHpmR2V0VnR4cShkZXYsIDMpKSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdHhlZCA9IDE7CisgICAgICAgICAgICAgICAgICAgIC8vem1fZGVidWdfbXNnMigic2VuZCBidWYgPSAiLCBidWYpOworICAgICAgICAgICAgICAgICAgICB6ZlR4U2VuZEV0aChkZXYsIGJ1ZiwgMCwgWk1fRVhURVJOQUxfQUxMT0NfQlVGLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgWk1fUEVSRk9STUFOQ0VfVFhfTVBEVShkZXYsIHdkLT50aWNrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBTZXJ2aWNlIFZUeFFbMl0gKi8KKyAgICAgICAgZm9yIChpPTA7IGk8MzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKGZyZWVUeGQgPSB6ZkhwR2V0RnJlZVR4ZENvdW50KGRldikpID49ICh6ZkhwR2V0TWF4VHhkQ291bnQoZGV2KSoxLzQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgoYnVmID0gemZHZXRWdHhxKGRldiwgMikpICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0eGVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgemZUeFNlbmRFdGgoZGV2LCBidWYsIDAsIFpNX0VYVEVSTkFMX0FMTE9DX0JVRiwgMCk7CisgICAgICAgICAgICAgICAgICAgIFpNX1BFUkZPUk1BTkNFX1RYX01QRFUoZGV2LCB3ZC0+dGljayk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh3ZC0+c3RhLmFjMFByaW9yaXR5SGlnaGVyVGhhbkFjMiA9PSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChidWYgPSB6ZkdldFZ0eHEoZGV2LCAwKSkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdHhlZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB6ZlR4U2VuZEV0aChkZXYsIGJ1ZiwgMCwgWk1fRVhURVJOQUxfQUxMT0NfQlVGLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFpNX1BFUkZPUk1BTkNFX1RYX01QRFUoZGV2LCB3ZC0+dGljayk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBTZXJ2aWNlIFZUeFFbMF0gKi8KKyAgICAgICAgZm9yIChpPTA7IGk8MjsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKGZyZWVUeGQgPSB6ZkhwR2V0RnJlZVR4ZENvdW50KGRldikpID49ICh6ZkhwR2V0TWF4VHhkQ291bnQoZGV2KSoyLzQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgoYnVmID0gemZHZXRWdHhxKGRldiwgMCkpICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0eGVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgemZUeFNlbmRFdGgoZGV2LCBidWYsIDAsIFpNX0VYVEVSTkFMX0FMTE9DX0JVRiwgMCk7CisgICAgICAgICAgICAgICAgICAgIFpNX1BFUkZPUk1BTkNFX1RYX01QRFUoZGV2LCB3ZC0+dGljayk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKworICAgICAgICAvKiBTZXJ2aWNlIFZUeFFbMV0gKi8KKyAgICAgICAgaWYgKChmcmVlVHhkID0gemZIcEdldEZyZWVUeGRDb3VudChkZXYpKSA+PSAoemZIcEdldE1heFR4ZENvdW50KGRldikqMy80KSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChidWYgPSB6ZkdldFZ0eHEoZGV2LCAxKSkgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0eGVkID0gMTsKKyAgICAgICAgICAgICAgICB6ZlR4U2VuZEV0aChkZXYsIGJ1ZiwgMCwgWk1fRVhURVJOQUxfQUxMT0NfQlVGLCAwKTsKKyAgICAgICAgICAgICAgICBaTV9QRVJGT1JNQU5DRV9UWF9NUERVKGRldiwgd2QtPnRpY2spOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogQWxsIFZUeFFzIGFyZSBlaXRoZXIgZW1wdHkgb3IgZXhjZWVkIHRoZWlyIHRocmVzaG9sZCAqLworICAgICAgICBpZiAodHhlZCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+dnR4cVB1c2hpbmcgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSAvL3doaWxlICgxKQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkZsdXNoVnR4cSAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgRmx1c2ggVmlydHVhbCBUeFEgYW5kIE1tUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJTkMuICAgIDIwMDcuMSAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgemZGbHVzaFZ0eHEoemRldl90KiBkZXYpCit7CisgICAgemJ1Zl90KiBidWY7CisgICAgdThfdCBpOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8qIEZsdXNoIE1tUSAqLworICAgIHdoaWxlICgoYnVmID0gemZHZXRWbW1xKGRldikpICE9IDApCisgICAgeworICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKyAgICAgICAgem1fZGVidWdfbXNnMCgiemZGbHVzaFZ0eHE6IFtWbW1xXSIpOworICAgICAgICB3ZC0+cXVldWVGbHVzaGVkICB8PSAweDEwOworICAgIH0KKworICAgIC8qIEZsdXNoIFZUeFEgKi8KKyAgICBmb3IgKGk9MDsgaTw0OyBpKyspCisgICAgeworICAgICAgICB3aGlsZSAoKGJ1ZiA9IHpmR2V0VnR4cShkZXYsIGkpKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzEoInpmRmx1c2hWdHhxOiBbemZHZXRWdHhxXS0gIiwgaSk7CisgICAgICAgICAgICB3ZC0+cXVldWVGbHVzaGVkIHw9ICgxPDxpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB6ZjgwMjExRnJhbWVTZW5kKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QqIGhlYWRlciwgdTE2X3Qgc25hcExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNl90KiBkYSwgdTE2X3QqIHNhLCB1OF90IHVwLCB1MTZfdCBoZWFkZXJMZW4sIHUxNl90KiBzbmFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2X3QqIHRhaWwsIHUxNl90IHRhaWxMZW4sIHUxNl90IG9mZnNldCwgdTE2X3QgYnVmVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4X3QgYWMsIHU4X3Qga2V5SWR4KQoreworICAgIHUxNl90IGVycjsKKyAgICB1MTZfdCBmcmFnTGVuOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgZnJhZ0xlbiA9IHpmd0J1ZkdldFNpemUoZGV2LCBidWYpOworICAgIGlmICgoZGFbMF0mMHgxKSA9PSAwKQorICAgIHsKKyAgICAgICAgd2QtPmNvbW1UYWxseS50eFVuaWNhc3RGcm0rKzsKKyAgICAgICAgd2QtPmNvbW1UYWxseS50eFVuaWNhc3RPY3RldHMgKz0gKGZyYWdMZW4rc25hcExlbik7CisgICAgfQorICAgIGVsc2UgaWYgKGRhWzBdID09IDB4ZmZmZikKKyAgICB7CisgICAgICAgIHdkLT5jb21tVGFsbHkudHhCcm9hZGNhc3RGcm0rKzsKKyAgICAgICAgd2QtPmNvbW1UYWxseS50eEJyb2FkY2FzdE9jdGV0cyArPSAoZnJhZ0xlbitzbmFwTGVuKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgd2QtPmNvbW1UYWxseS50eE11bHRpY2FzdEZybSsrOworICAgICAgICB3ZC0+Y29tbVRhbGx5LnR4TXVsdGljYXN0T2N0ZXRzICs9IChmcmFnTGVuK3NuYXBMZW4pOworICAgIH0KKyAgICB3ZC0+bGVkU3RydWN0LnR4VHJhZmZpYysrOworCisgICAgaWYgKChlcnIgPSB6ZkhwU2VuZChkZXYsIGhlYWRlciwgaGVhZGVyTGVuLCBzbmFwLCBzbmFwTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgdGFpbCwgdGFpbExlbiwgYnVmLCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBidWZUeXBlLCBhYywga2V5SWR4KSkgIT0gWk1fU1VDQ0VTUykKKyAgICB7CisgICAgICAgIGlmIChidWZUeXBlID09IFpNX0VYVEVSTkFMX0FMTE9DX0JVRikKKyAgICAgICAgeworICAgICAgICAgICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgZXJyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChidWZUeXBlID09IFpNX0lOVEVSTkFMX0FMTE9DX0JVRikKKyAgICAgICAgeworICAgICAgICAgICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB6bV9hc3NlcnQoMCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgemZDaGVja0lzUklGU0ZyYW1lKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgZnJhbWVTdWJ0eXBlKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8qICMyIFJlY29yZCB0aGUgc2VxdWVuY2UgbnVtYmVyIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSB1bmljYXN0IGZyYW1lIGlzIHNlcGFyYXRlZCBieSBSSUZTIG9yIG5vdCAqLworICAgIGlmIChmcmFtZVN1YnR5cGUgJiAweDgwKQorICAgIHsgICAvL1FvUyBkYXRhIGZyYW1lCisgICAgICAgIHUxNl90IHNlcXVlbmNlTnVtOworICAgICAgICB1MTZfdCBxb3NDb250cm9sRmllbGQ7CisKKyAgICAgICAgc2VxdWVuY2VOdW0gPSAoIHptd19idWZfcmVhZGgoZGV2LCBidWYsIDIyKSA+PiA0ICk7IC8vIERpc2NhcmQgZnJhZ21lbnQgbnVtYmVyICEKKyAgICAgICAgcW9zQ29udHJvbEZpZWxkID0gem13X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMjQpOyAvLyBEb24ndCBjb25zaWRlciBXRFMgKFdpcmVsZXNzIERpc3RyaWJ1dGlvbiBTeXN0ZW0pCisgICAgICAgIC8vRGJnUHJpbnQoIlRoZSBRb1MgQ29udHJvbCBGaWVsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJWQiLCBxb3NDb250cm9sRmllbGQpOworICAgICAgICAvL0RiZ1ByaW50KCJUaGUgUklGUyBDb3VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICVkIiwgd2QtPnN0YS5yaWZzQ291bnQpOworCisgICAgICAgIGlmKCBxb3NDb250cm9sRmllbGQgJiBaTV9CSVRfNSApCisgICAgICAgIHsvLyBBQ0sgcG9saWN5IGlzICJObyBBQ0siCisgICAgICAgICAgICAvKiBSSUZTLUxpa2UgZnJhbWUgKi8KKyAgICAgICAgICAgIHdkLT5zdGEucmlmc0xpa2VGcmFtZVNlcXVlbmNlW3dkLT5zdGEucmlmc0xpa2VGcmFtZUNudF0gICA9IHNlcXVlbmNlTnVtOworCisgICAgICAgICAgICBpZiggd2QtPnN0YS5yaWZzU3RhdGUgPT0gWk1fUklGU19TVEFURV9ERVRFQ1RJTkcgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCB3ZC0+c3RhLnJpZnNMaWtlRnJhbWVTZXF1ZW5jZVsyXSAhPSAwICkKKyAgICAgICAgICAgICAgICB7Ly8gUklGUy1saWtlIFBhdHRlcm4gY29sbGVjdGVkCisgICAgICAgICAgICAgICAgICAgIGlmKCAoIHdkLT5zdGEucmlmc0xpa2VGcmFtZVNlcXVlbmNlWzJdIC0gd2QtPnN0YS5yaWZzTGlrZUZyYW1lU2VxdWVuY2VbMV0gPT0gMiApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAoIHdkLT5zdGEucmlmc0xpa2VGcmFtZVNlcXVlbmNlWzFdIC0gd2QtPnN0YS5yaWZzTGlrZUZyYW1lU2VxdWVuY2VbMF0gPT0gMiApICkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogUklGUyBwYXR0ZXJuIG1hdGNoZWQgKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgLyogIzMgRW5hYmxlIFJJRlMgZnVuY3Rpb24gaWYgdGhlIFJJRlMgcGF0dGVybiBtYXRjaGVkICAqLworICAgICAgICAgICAgICAgICAgICAgICAgemZIcEVuYWJsZVJpZnMoZGV2LCAoKHdkLT5zdGEuY3VycmVudEZyZXF1ZW5jeTwzMDAwKT8xOjApLCB3ZC0+c3RhLkVuYWJsZUhULCB3ZC0+c3RhLkhUMjA0MCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBSSUZTIHRpbWVyCisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnJpZnNUaW1lciA9IHdkLT50aWNrOworCisgICAgICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnJpZnNDb3VudCsrOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgc3RhdGUgdG8gYmUgRGV0ZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEucmlmc1N0YXRlID0gWk1fUklGU19TVEFURV9ERVRFQ1RFRDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsvLyBzdGF0ZSA9IERldGVjdGVkCisgICAgICAgICAgICAgICAgLy8gUmVzZXQgUklGUyB0aW1lcgorICAgICAgICAgICAgICAgIGlmKCAod2QtPnRpY2sgLSB3ZC0+c3RhLnJpZnNUaW1lcikgPCBaTV9SSUZTX1RJTUVSX1RJTUVPVVQgKQorICAgICAgICAgICAgICAgICAgICB3ZC0+c3RhLnJpZnNUaW1lciA9IHdkLT50aWNrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvL0RiZ1ByaW50KCJTTjEgPSAlZCwgU04yID0gJWQsIFNOMyA9ICVkXG4iLCB3ZC0+c3RhLnJpZnNMaWtlRnJhbWVTZXF1ZW5jZVswXSwKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5zdGEucmlmc0xpa2VGcmFtZVNlcXVlbmNlWzFdLAorICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnN0YS5yaWZzTGlrZUZyYW1lU2VxdWVuY2VbMl0pOworCisgICAgICAgICAgICAvLyBVcGRhdGUgUklGUy1saWtlIHNlcXVlbmNlIG51bWJlcgorICAgICAgICAgICAgaWYoIHdkLT5zdGEucmlmc0xpa2VGcmFtZVNlcXVlbmNlWzJdICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT5zdGEucmlmc0xpa2VGcmFtZVNlcXVlbmNlWzBdID0gd2QtPnN0YS5yaWZzTGlrZUZyYW1lU2VxdWVuY2VbMV07CisgICAgICAgICAgICAgICAgd2QtPnN0YS5yaWZzTGlrZUZyYW1lU2VxdWVuY2VbMV0gPSB3ZC0+c3RhLnJpZnNMaWtlRnJhbWVTZXF1ZW5jZVsyXTsKKyAgICAgICAgICAgICAgICB3ZC0+c3RhLnJpZnNMaWtlRnJhbWVTZXF1ZW5jZVsyXSA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE9ubHkgcmVjb3JkIHRocmVlIGFkamFjZW50IGZyYW1lCisgICAgICAgICAgICBpZiggd2QtPnN0YS5yaWZzTGlrZUZyYW1lQ250IDwgMiApCisgICAgICAgICAgICAgICAgd2QtPnN0YS5yaWZzTGlrZUZyYW1lQ250Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiAjNCBEaXNhYmxlIFJJRlMgZnVuY3Rpb24gaWYgdGhlIHRpbWVyIFRJTUVPVVQgICovCisgICAgaWYoIHdkLT5zdGEucmlmc1N0YXRlID09IFpNX1JJRlNfU1RBVEVfREVURUNURUQgKQorICAgIHsKKyAgICAgICAgaWYoICggd2QtPnRpY2sgLSB3ZC0+c3RhLnJpZnNUaW1lciApID4gWk1fUklGU19USU1FUl9USU1FT1VUICkKKyAgICAgICAgey8vIFRJTUVPVVQKKyAgICAgICAgICAgIC8vIERpc2FibGUgUklGUworICAgICAgICAgICAgemZIcERpc2FibGVSaWZzKGRldik7CisKKyAgICAgICAgICAgIC8vIFJlc2V0IFJJRlMtbGlrZSBzZXF1ZW5jZSBudW1iZXIgRklGTworICAgICAgICAgICAgd2QtPnN0YS5yaWZzTGlrZUZyYW1lU2VxdWVuY2VbMF0gPSAwOworICAgICAgICAgICAgd2QtPnN0YS5yaWZzTGlrZUZyYW1lU2VxdWVuY2VbMV0gPSAwOworICAgICAgICAgICAgd2QtPnN0YS5yaWZzTGlrZUZyYW1lU2VxdWVuY2VbMl0gPSAwOworICAgICAgICAgICAgd2QtPnN0YS5yaWZzTGlrZUZyYW1lQ250ID0gMDsKKworICAgICAgICAgICAgLy8gU2V0IHN0YXRlIHRvIGJlIERldGVjdGluZworICAgICAgICAgICAgd2QtPnN0YS5yaWZzU3RhdGUgPSBaTV9SSUZTX1NUQVRFX0RFVEVDVElORzsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jd2VwLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3dlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMzFiYjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3dlcC5jCkBAIC0wLDAgKzEsMjk5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTW9kdWxlIE5hbWUgOiBjd2VwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBBYnN0cmFjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFRoaXMgbW9kdWxlIGNvbnRhaW5zIFR4IGFuZCBSeCBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBOT1RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiY3ByZWNvbXAuaCIKKwordTMyX3QgY3JjMzJfdGFiW10gPQoreworICAgICAgIDB4MDAwMDAwMDBMLCAweDc3MDczMDk2TCwgMHhlZTBlNjEyY0wsIDB4OTkwOTUxYmFMLCAweDA3NmRjNDE5TCwKKyAgICAgICAweDcwNmFmNDhmTCwgMHhlOTYzYTUzNUwsIDB4OWU2NDk1YTNMLCAweDBlZGI4ODMyTCwgMHg3OWRjYjhhNEwsCisgICAgICAgMHhlMGQ1ZTkxZUwsIDB4OTdkMmQ5ODhMLCAweDA5YjY0YzJiTCwgMHg3ZWIxN2NiZEwsIDB4ZTdiODJkMDdMLAorICAgICAgIDB4OTBiZjFkOTFMLCAweDFkYjcxMDY0TCwgMHg2YWIwMjBmMkwsIDB4ZjNiOTcxNDhMLCAweDg0YmU0MWRlTCwKKyAgICAgICAweDFhZGFkNDdkTCwgMHg2ZGRkZTRlYkwsIDB4ZjRkNGI1NTFMLCAweDgzZDM4NWM3TCwgMHgxMzZjOTg1NkwsCisgICAgICAgMHg2NDZiYThjMEwsIDB4ZmQ2MmY5N2FMLCAweDhhNjVjOWVjTCwgMHgxNDAxNWM0ZkwsIDB4NjMwNjZjZDlMLAorICAgICAgIDB4ZmEwZjNkNjNMLCAweDhkMDgwZGY1TCwgMHgzYjZlMjBjOEwsIDB4NGM2OTEwNWVMLCAweGQ1NjA0MWU0TCwKKyAgICAgICAweGEyNjc3MTcyTCwgMHgzYzAzZTRkMUwsIDB4NGIwNGQ0NDdMLCAweGQyMGQ4NWZkTCwgMHhhNTBhYjU2YkwsCisgICAgICAgMHgzNWI1YThmYUwsIDB4NDJiMjk4NmNMLCAweGRiYmJjOWQ2TCwgMHhhY2JjZjk0MEwsIDB4MzJkODZjZTNMLAorICAgICAgIDB4NDVkZjVjNzVMLCAweGRjZDYwZGNmTCwgMHhhYmQxM2Q1OUwsIDB4MjZkOTMwYWNMLCAweDUxZGUwMDNhTCwKKyAgICAgICAweGM4ZDc1MTgwTCwgMHhiZmQwNjExNkwsIDB4MjFiNGY0YjVMLCAweDU2YjNjNDIzTCwgMHhjZmJhOTU5OUwsCisgICAgICAgMHhiOGJkYTUwZkwsIDB4MjgwMmI4OWVMLCAweDVmMDU4ODA4TCwgMHhjNjBjZDliMkwsIDB4YjEwYmU5MjRMLAorICAgICAgIDB4MmY2ZjdjODdMLCAweDU4Njg0YzExTCwgMHhjMTYxMWRhYkwsIDB4YjY2NjJkM2RMLCAweDc2ZGM0MTkwTCwKKyAgICAgICAweDAxZGI3MTA2TCwgMHg5OGQyMjBiY0wsIDB4ZWZkNTEwMmFMLCAweDcxYjE4NTg5TCwgMHgwNmI2YjUxZkwsCisgICAgICAgMHg5ZmJmZTRhNUwsIDB4ZThiOGQ0MzNMLCAweDc4MDdjOWEyTCwgMHgwZjAwZjkzNEwsIDB4OTYwOWE4OGVMLAorICAgICAgIDB4ZTEwZTk4MThMLCAweDdmNmEwZGJiTCwgMHgwODZkM2QyZEwsIDB4OTE2NDZjOTdMLCAweGU2NjM1YzAxTCwKKyAgICAgICAweDZiNmI1MWY0TCwgMHgxYzZjNjE2MkwsIDB4ODU2NTMwZDhMLCAweGYyNjIwMDRlTCwgMHg2YzA2OTVlZEwsCisgICAgICAgMHgxYjAxYTU3YkwsIDB4ODIwOGY0YzFMLCAweGY1MGZjNDU3TCwgMHg2NWIwZDljNkwsIDB4MTJiN2U5NTBMLAorICAgICAgIDB4OGJiZWI4ZWFMLCAweGZjYjk4ODdjTCwgMHg2MmRkMWRkZkwsIDB4MTVkYTJkNDlMLCAweDhjZDM3Y2YzTCwKKyAgICAgICAweGZiZDQ0YzY1TCwgMHg0ZGIyNjE1OEwsIDB4M2FiNTUxY2VMLCAweGEzYmMwMDc0TCwgMHhkNGJiMzBlMkwsCisgICAgICAgMHg0YWRmYTU0MUwsIDB4M2RkODk1ZDdMLCAweGE0ZDFjNDZkTCwgMHhkM2Q2ZjRmYkwsIDB4NDM2OWU5NmFMLAorICAgICAgIDB4MzQ2ZWQ5ZmNMLCAweGFkNjc4ODQ2TCwgMHhkYTYwYjhkMEwsIDB4NDQwNDJkNzNMLCAweDMzMDMxZGU1TCwKKyAgICAgICAweGFhMGE0YzVmTCwgMHhkZDBkN2NjOUwsIDB4NTAwNTcxM2NMLCAweDI3MDI0MWFhTCwgMHhiZTBiMTAxMEwsCisgICAgICAgMHhjOTBjMjA4NkwsIDB4NTc2OGI1MjVMLCAweDIwNmY4NWIzTCwgMHhiOTY2ZDQwOUwsIDB4Y2U2MWU0OWZMLAorICAgICAgIDB4NWVkZWY5MGVMLCAweDI5ZDljOTk4TCwgMHhiMGQwOTgyMkwsIDB4YzdkN2E4YjRMLCAweDU5YjMzZDE3TCwKKyAgICAgICAweDJlYjQwZDgxTCwgMHhiN2JkNWMzYkwsIDB4YzBiYTZjYWRMLCAweGVkYjg4MzIwTCwgMHg5YWJmYjNiNkwsCisgICAgICAgMHgwM2I2ZTIwY0wsIDB4NzRiMWQyOWFMLCAweGVhZDU0NzM5TCwgMHg5ZGQyNzdhZkwsIDB4MDRkYjI2MTVMLAorICAgICAgIDB4NzNkYzE2ODNMLCAweGUzNjMwYjEyTCwgMHg5NDY0M2I4NEwsIDB4MGQ2ZDZhM2VMLCAweDdhNmE1YWE4TCwKKyAgICAgICAweGU0MGVjZjBiTCwgMHg5MzA5ZmY5ZEwsIDB4MGEwMGFlMjdMLCAweDdkMDc5ZWIxTCwgMHhmMDBmOTM0NEwsCisgICAgICAgMHg4NzA4YTNkMkwsIDB4MWUwMWYyNjhMLCAweDY5MDZjMmZlTCwgMHhmNzYyNTc1ZEwsIDB4ODA2NTY3Y2JMLAorICAgICAgIDB4MTk2YzM2NzFMLCAweDZlNmIwNmU3TCwgMHhmZWQ0MWI3NkwsIDB4ODlkMzJiZTBMLCAweDEwZGE3YTVhTCwKKyAgICAgICAweDY3ZGQ0YWNjTCwgMHhmOWI5ZGY2ZkwsIDB4OGViZWVmZjlMLCAweDE3YjdiZTQzTCwgMHg2MGIwOGVkNUwsCisgICAgICAgMHhkNmQ2YTNlOEwsIDB4YTFkMTkzN2VMLCAweDM4ZDhjMmM0TCwgMHg0ZmRmZjI1MkwsIDB4ZDFiYjY3ZjFMLAorICAgICAgIDB4YTZiYzU3NjdMLCAweDNmYjUwNmRkTCwgMHg0OGIyMzY0YkwsIDB4ZDgwZDJiZGFMLCAweGFmMGExYjRjTCwKKyAgICAgICAweDM2MDM0YWY2TCwgMHg0MTA0N2E2MEwsIDB4ZGY2MGVmYzNMLCAweGE4NjdkZjU1TCwgMHgzMTZlOGVlZkwsCisgICAgICAgMHg0NjY5YmU3OUwsIDB4Y2I2MWIzOGNMLCAweGJjNjY4MzFhTCwgMHgyNTZmZDJhMEwsIDB4NTI2OGUyMzZMLAorICAgICAgIDB4Y2MwYzc3OTVMLCAweGJiMGI0NzAzTCwgMHgyMjAyMTZiOUwsIDB4NTUwNTI2MmZMLCAweGM1YmEzYmJlTCwKKyAgICAgICAweGIyYmQwYjI4TCwgMHgyYmI0NWE5MkwsIDB4NWNiMzZhMDRMLCAweGMyZDdmZmE3TCwgMHhiNWQwY2YzMUwsCisgICAgICAgMHgyY2Q5OWU4YkwsIDB4NWJkZWFlMWRMLCAweDliNjRjMmIwTCwgMHhlYzYzZjIyNkwsIDB4NzU2YWEzOWNMLAorICAgICAgIDB4MDI2ZDkzMGFMLCAweDljMDkwNmE5TCwgMHhlYjBlMzYzZkwsIDB4NzIwNzY3ODVMLCAweDA1MDA1NzEzTCwKKyAgICAgICAweDk1YmY0YTgyTCwgMHhlMmI4N2ExNEwsIDB4N2JiMTJiYWVMLCAweDBjYjYxYjM4TCwgMHg5MmQyOGU5YkwsCisgICAgICAgMHhlNWQ1YmUwZEwsIDB4N2NkY2VmYjdMLCAweDBiZGJkZjIxTCwgMHg4NmQzZDJkNEwsIDB4ZjFkNGUyNDJMLAorICAgICAgIDB4NjhkZGIzZjhMLCAweDFmZGE4MzZlTCwgMHg4MWJlMTZjZEwsIDB4ZjZiOTI2NWJMLCAweDZmYjA3N2UxTCwKKyAgICAgICAweDE4Yjc0Nzc3TCwgMHg4ODA4NWFlNkwsIDB4ZmYwZjZhNzBMLCAweDY2MDYzYmNhTCwgMHgxMTAxMGI1Y0wsCisgICAgICAgMHg4ZjY1OWVmZkwsIDB4Zjg2MmFlNjlMLCAweDYxNmJmZmQzTCwgMHgxNjZjY2Y0NUwsIDB4YTAwYWUyNzhMLAorICAgICAgIDB4ZDcwZGQyZWVMLCAweDRlMDQ4MzU0TCwgMHgzOTAzYjNjMkwsIDB4YTc2NzI2NjFMLCAweGQwNjAxNmY3TCwKKyAgICAgICAweDQ5Njk0NzRkTCwgMHgzZTZlNzdkYkwsIDB4YWVkMTZhNGFMLCAweGQ5ZDY1YWRjTCwgMHg0MGRmMGI2NkwsCisgICAgICAgMHgzN2Q4M2JmMEwsIDB4YTliY2FlNTNMLCAweGRlYmI5ZWM1TCwgMHg0N2IyY2Y3ZkwsIDB4MzBiNWZmZTlMLAorICAgICAgIDB4YmRiZGYyMWNMLCAweGNhYmFjMjhhTCwgMHg1M2IzOTMzMEwsIDB4MjRiNGEzYTZMLCAweGJhZDAzNjA1TCwKKyAgICAgICAweGNkZDcwNjkzTCwgMHg1NGRlNTcyOUwsIDB4MjNkOTY3YmZMLCAweGIzNjY3YTJlTCwgMHhjNDYxNGFiOEwsCisgICAgICAgMHg1ZDY4MWIwMkwsIDB4MmE2ZjJiOTRMLCAweGI0MGJiZTM3TCwgMHhjMzBjOGVhMUwsIDB4NWEwNWRmMWJMLAorICAgICAgIDB4MmQwMmVmOGRMCit9OworCit2b2lkIHpmV0VQRW5jcnlwdCh6ZGV2X3QgKmRldiwgemJ1Zl90ICpidWYsIHU4X3QgKnNuYXAsIHUxNl90IHNuYXBMZW4sIHUxNl90IG9mZnNldCwgdThfdCBrZXlMZW4sIHU4X3QqIFdlcEtleSwgdThfdCAqaXYpCit7CisgICAgdThfdCAgICBTWzI1Nl0sUzJbMjU2XTsKKyAgICB1MTZfdCAgIHVpOworICAgIHUxNl90ICAgaTsKKyAgICB1MTZfdCAgIGo7CisgICAgdThfdCAgICB0ZW1wOworICAgIHU4X3QgICAgSzsKKyAgICB1MzJfdCAgIGx0ZW1wOworICAgIHUxNl90ICAgbGVuOworICAgIHUzMl90ICAgaWN2OworICAgIHU4X3QgICAga2V5WzMyXTsKKworICAgIGtleVswXSA9IGl2WzBdOworICAgIGtleVsxXSA9IGl2WzFdOworICAgIGtleVsyXSA9IGl2WzJdOworCisgICAgLyogQXBwZW5kIFdlcCBLZXkgYWZ0ZXIgSVYgKi8KKyAgICB6Zk1lbW9yeUNvcHkoJmtleVszXSwgV2VwS2V5LCBrZXlMZW4pOworCisgICAga2V5TGVuICs9IDM7CisKKyAgICBmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICB7CisgICAgICAgIFNbaV0gPSAodThfdClpOworICAgICAgICBTMltpXSA9IGtleVtpJihrZXlMZW4tMSldOworICAgIH0KKworICAgIGogPSAwOworICAgIGZvcihpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgIHsKKyAgICAgICAgaiA9IChqICsgU1tpXSArIFMyW2ldKSA7CisgICAgICAgIGomPTI1NSA7CisKKyAgICAgICAgLy8gU3dhcCBTW2ldIGFuZCBTW2pdCisgICAgICAgIHRlbXAgPSBTW2ldOworICAgICAgICBTW2ldID0gU1tqXTsKKyAgICAgICAgU1tqXSA9IHRlbXA7CisgICAgfQorCisgICAgaSA9IGogPSAwOworICAgIGljdiA9IC0xOworCisgICAgLyogRm9yIFNuYXAgSGVhZGVyICovCisgICAgZm9yICh1aSA9IDA7IHVpIDwgc25hcExlbjsgdWkrKykKKyAgICB7CisgICAgICAgIHU4X3QgSW47CisKKyAgICAgICAgaSsrOworICAgICAgICBpICY9IDI1NTsKKyAgICAgICAgaiArPSBTW2ldOworICAgICAgICBqICY9IDI1NTsKKworICAgICAgICAvLyBTd2FwIFNbaV0gYW5kIFNbal0KKyAgICAgICAgdGVtcCA9IFNbaV07CisgICAgICAgIFNbaV0gPSBTW2pdOworICAgICAgICBTW2pdID0gdGVtcDsKKy8vICAgICAgICAgIHRlbXAgPSAoU1tpXSArIHRlbXApICYgMjU1OworICAgICAgICB0ZW1wICs9IFNbaV07CisgICAgICAgIHRlbXAgJj0yNTU7CisgICAgICAgIEsgPSBTW3RlbXBdOyAgICAgICAgLy8gS2V5IHVzZWQgdG8gWG9yIHdpdGggaW5wdXQgZGF0YQorCisgICAgICAgIEluID0gc25hcFt1aV07CisgICAgICAgIGljdiA9ICAoaWN2Pj44KSBeIGNyYzMyX3RhYlsoaWN2XkluKSYweGZmXTsKKworICAgICAgICBzbmFwW3VpXSA9IEluIF4gSzsKKyAgICAgICAgLy96bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1ZiwgdWksIEluIF4gSyk7CisgICAgfQorCisgICAgbGVuID0gemZ3QnVmR2V0U2l6ZShkZXYsIGJ1Zik7CisKKyAgICBmb3IgKHVpID0gb2Zmc2V0OyB1aSA8IGxlbjsgdWkrKykKKyAgICB7CisgICAgICAgIHU4X3QgSW47CisKKyAgICAgICAgaSsrOworICAgICAgICBpICY9IDI1NTsKKyAgICAgICAgaiArPSBTW2ldOworICAgICAgICBqICY9IDI1NTsKKworICAgICAgICAvLyBTd2FwIFNbaV0gYW5kIFNbal0KKyAgICAgICAgdGVtcCA9IFNbaV07CisgICAgICAgIFNbaV0gPSBTW2pdOworICAgICAgICBTW2pdID0gdGVtcDsKKy8vICAgICAgICAgIHRlbXAgPSAoU1tpXSArIHRlbXApICYgMjU1OworICAgICAgICB0ZW1wICs9IFNbaV07CisgICAgICAgIHRlbXAgJj0yNTU7CisgICAgICAgIEsgPSBTW3RlbXBdOyAgICAgICAgLy8gS2V5IHVzZWQgdG8gWG9yIHdpdGggaW5wdXQgZGF0YQorCisgICAgICAgIEluID0gem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgdWkpOworICAgICAgICBpY3YgPSAgKGljdj4+OCkgXiBjcmMzMl90YWJbKGljdl5JbikmMHhmZl07CisKKyAgICAgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIHVpLCBJbiBeIEspOworICAgIH0gLy9FbmQgb2YgZm9yICh1aSA9IDA7IHVpIDwgTnVtX0J5dGVzOyB1aSsrKQorCisgICAgaWN2ID0gfihpY3YpOworICAgIGx0ZW1wID0gKHUzMl90KSBpY3Y7CisKKyAgICBmb3IgKHVpID0gMDsgdWkgPCA0OyB1aSsrKQorICAgIHsKKyAgICAgICAgaSArKzsKKyAgICAgICAgaSAmPSAyNTU7CisgICAgICAgIGogKz0gU1tpXTsKKyAgICAgICAgaiAmPSAyNTU7CisKKyAgICAgICAgLy8gU3dhcCBTW2ldIGFuZCBTW2pdCisgICAgICAgIHRlbXAgPSBTW2ldOworICAgICAgICBTW2ldID0gU1tqXTsKKyAgICAgICAgU1tqXSA9IHRlbXA7CisgICAgICAgIHRlbXAgKz0gU1tpXTsKKyAgICAgICAgdGVtcCAmPSAyNTU7CisgICAgICAgIEsgPSBTW3RlbXBdOyAgICAgICAgLy8gS2V5IHVzZWQgdG8gWG9yIHdpdGggaW5wdXQgZGF0YQorCisgICAgICAgIC8vKk91dCsrID0gKHU4X3QpKGx0ZW1wIF4gSykmMHhmZjsKKyAgICAgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIGxlbit1aSwgKHU4X3QpKGx0ZW1wIF4gSykmMHhmZik7CisgICAgICAgIGx0ZW1wID4+PSA4OworICAgIH0KKworICAgIHpmd0J1ZlNldFNpemUoZGV2LCBidWYsIGxlbis0KTsKK30KKwordTE2X3QgemZXRVBEZWNyeXB0KHpkZXZfdCAqZGV2LCB6YnVmX3QgKmJ1ZiwgdTE2X3Qgb2Zmc2V0LCB1OF90IGtleUxlbiwgdThfdCogV2VwS2V5LCB1OF90ICppdikKK3sKKyAgICB1OF90ICAgIFNbMjU2XTsKKyAgICB1OF90ICAgIFMyWzI1Nl07CisgICAgdTE2X3QgICB1aTsKKyAgICB1MTZfdCAgIGk7CisgICAgdTE2X3QgICBqOworICAgIHUzMl90ICAgaWN2X3RtcDsKKyAgICB1MzJfdCAgICppY3Y7CisgICAgdTMyX3QgICByeGJ1Zl9pY3Y7CisgICAgdThfdCAgICB0ZW1wOworICAgIHU4X3QgICAgSzsKKyAgICB1MTZfdCAgIGxlbjsKKyAgICB1OF90ICAgIGtleVszMl07CisKKyAgICAvKiBSZXRyaWV2ZSBJViAqLworICAgIGtleVswXSA9IGl2WzBdOworICAgIGtleVsxXSA9IGl2WzFdOworICAgIGtleVsyXSA9IGl2WzJdOworCisgICAgLyogQXBwZW5kIFdlcCBLZXkgYWZ0ZXIgSVYgKi8KKyAgICB6Zk1lbW9yeUNvcHkoJmtleVszXSwgV2VwS2V5LCBrZXlMZW4pOworCisgICAga2V5TGVuICs9IDM7CisKKyAgICBmb3IoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICB7CisgICAgICAgIFNbaV0gPSAodThfdClpOworICAgICAgICBTMltpXSA9IGtleVtpJihrZXlMZW4tMSldOworICAgIH0KKworICAgIGogPSAwOworICAgIGZvcihpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgIHsKKyAgICAgICAgaiA9IChqICsgU1tpXSArIFMyW2ldKTsKKyAgICAgICAgaiY9MjU1IDsKKworICAgICAgICAvLyBTd2FwIFNbaV0gYW5kIFNbal0KKyAgICAgICAgdGVtcCA9IFNbaV07CisgICAgICAgIFNbaV0gPSBTW2pdOworICAgICAgICBTW2pdID0gdGVtcDsKKyAgICB9CisKKyAgICBpID0gaiA9IDA7CisKKyAgICBsZW4gPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsKKworICAgIGZvciAodWkgPSBvZmZzZXQ7IHVpIDwgbGVuOyB1aSsrKQorICAgIHsKKyAgICAgICAgdThfdCBJbjsKKworICAgICAgICBpKys7CisgICAgICAgIGkgJj0gMjU1OworICAgICAgICBqICs9IFNbaV07CisgICAgICAgIGogJj0gMjU1OworCisgICAgICAgIC8vIFN3YXAgU1tpXSBhbmQgU1tqXQorICAgICAgICB0ZW1wID0gU1tpXTsKKyAgICAgICAgU1tpXSA9IFNbal07CisgICAgICAgIFNbal0gPSB0ZW1wOworLy8gICAgICAgICAgdGVtcCA9IChTW2ldICsgdGVtcCkgJiAyNTU7CisgICAgICAgIHRlbXAgKz0gU1tpXTsKKyAgICAgICAgdGVtcCAmPTI1NTsKKyAgICAgICAgSyA9IFNbdGVtcF07ICAgICAgICAvLyBLZXkgdXNlZCB0byBYb3Igd2l0aCBpbnB1dCBkYXRhCisKKyAgICAgICAgSW4gPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCB1aSk7CisKKyAgICAgICAgem13X3J4X2J1Zl93cml0ZWIoZGV2LCBidWYsIHVpLCBJbiBeIEspOworICAgIH0gLy9FbmQgb2YgZm9yICh1aSA9IDA7IHVpIDwgTnVtX0J5dGVzOyB1aSsrKQorCisgICAgaWN2ID0gJmljdl90bXA7CisgICAgKmljdiA9IC0xOworCisgICAgZm9yICh1aSA9IG9mZnNldDsgdWkgPCBsZW4gLSA0OyB1aSsrKQorICAgIHsKKyAgICAgICAgdThfdCBJbjsKKworICAgICAgICBJbiA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIHVpKTsKKyAgICAgICAgKmljdiA9ICAoKmljdj4+OCkgXiBjcmMzMl90YWJbKCppY3ZeSW4pJjB4ZmZdOworICAgIH0KKworICAgICppY3YgPSB+KmljdjsKKworICAgIHJ4YnVmX2ljdiA9ICh6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBsZW4tNCkgfAorICAgICAgICAgem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgbGVuLTMpIDw8IDggfAorICAgICAgICAgem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgbGVuLTIpIDw8IDE2IHwKKyAgICAgICAgIHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIGxlbi0xKSA8PCAyNCk7CisKKyAgICBpZiAoKmljdiAhPSByeGJ1Zl9pY3YpCisgICAgeworICAgICAgICByZXR1cm4gWk1fSUNWX0ZBSUxVUkU7CisgICAgfQorCisgICAgcmV0dXJuIFpNX0lDVl9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2N3bS5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2N3bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZjExNDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3dtLmMKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBNb2R1bGUgTmFtZSA6IGN3bS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEFic3RyYWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgVGhpcyBtb2R1bGUgY29udGFpbnMgY2hhbm5lbCB3aWR0aCByZWxhdGVkIGZ1bmN0aW9ucy4gICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE5PVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImNwcmVjb21wLmgiCisKKworCit2b2lkIHpmQ3dtSW5pdCh6ZGV2X3QqIGRldikgeworICAgIC8vdTE2X3QgaTsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBzd2l0Y2ggKHdkLT53bGFuTW9kZSkgeworICAgIGNhc2UgWk1fTU9ERV9BUDoKKyAgICAgICAgd2QtPmN3bS5jd19tb2RlID0gQ1dNX01PREUyMDQwOworICAgICAgICB3ZC0+Y3dtLmN3X3dpZHRoID0gQ1dNX1dJRFRINDA7CisgICAgICAgIHdkLT5jd20uY3dfZW5hYmxlID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFOgorICAgIGNhc2UgWk1fTU9ERV9QU0VVRE86CisgICAgY2FzZSBaTV9NT0RFX0lCU1M6CisgICAgZGVmYXVsdDoKKyAgICAgICAgd2QtPmN3bS5jd19tb2RlID0gQ1dNX01PREUyMDQwOworICAgICAgICB3ZC0+Y3dtLmN3X3dpZHRoID0gQ1dNX1dJRFRIMjA7CisgICAgICAgIHdkLT5jd20uY3dfZW5hYmxlID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisKK3ZvaWQgemZDb3JlQ3dtQnVzeSh6ZGV2X3QqIGRldiwgdTE2X3QgYnVzeSkKK3sKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptX21zZzFfbW0oWk1fTFZfMCwgIkN3bUJ1c3k9IiwgYnVzeSk7CisKKyAgICBpZih3ZC0+Y3dtLmN3X21vZGUgPT0gQ1dNX01PREUyMCkgeworICAgICAgICB3ZC0+Y3dtLmN3X3dpZHRoID0gQ1dNX1dJRFRIMjA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZih3ZC0+Y3dtLmN3X21vZGUgPT0gQ1dNX01PREU0MCkgeworICAgICAgICB3ZC0+Y3dtLmN3X3dpZHRoID0gQ1dNX1dJRFRINDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoYnVzeSkgeworICAgICAgICB3ZC0+Y3dtLmN3X3dpZHRoID0gQ1dNX1dJRFRIMjA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKworICAgIGlmKCh3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSB8fCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9QU0VVRE8gfHwKKyAgICAgICAgd2QtPndsYW5Nb2RlID09IFpNX01PREVfSUJTUykpIHsKKyAgICAgICAgaWYgKHdkLT5zdGEuaWUuSHRDYXAuSHRDYXBJbmZvICYmIEhUQ0FQX1N1cENoYW5uZWxXaWR0aFNldCAhPSAwICYmCisgICAgICAgICAgICB3ZC0+c3RhLmllLkh0SW5mby5DaGFubmVsSW5mbyAmJiBFeHRIdENhcF9SZWNvbVR4V2lkdGhTZXQgIT0gMCAmJgorICAgICAgICAgICAgKHdkLT5zdGEuaWUuSHRJbmZvLkNoYW5uZWxJbmZvICYmIEV4dEh0Q2FwX0V4dENoYW5uZWxPZmZzZXRBYm92ZSkgPT0gMSkgeworCisgICAgICAgICAgICB3ZC0+Y3dtLmN3X3dpZHRoID0gQ1dNX1dJRFRINDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB3ZC0+Y3dtLmN3X3dpZHRoID0gQ1dNX1dJRFRIMjA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApIHsKKyAgICAgICAgd2QtPmN3bS5jd193aWR0aCA9IENXTV9XSURUSDQwOworICAgIH0KKworfQorCisKKworCit1MTZfdCB6ZkN3bUlzRXh0Q2hhbkJ1c3kodTMyX3QgY3RsQnVzeSwgdTMyX3QgZXh0QnVzeSkKK3sKKyAgICB1MzJfdCBidXN5OyAvKiBwZXJjZW50YWdlICovCisgICAgdTMyX3QgY3ljbGVUaW1lLCBjdGxDbGVhcjsKKworICAgIGN5Y2xlVGltZSA9IDEyODAwMDA7IC8vMS4yOCBzZWNvbmRzCisKKyAgICBpZiAoY3ljbGVUaW1lID4gY3RsQnVzeSkgeworICAgICAgICBjdGxDbGVhciA9IGN5Y2xlVGltZSAtIGN0bEJ1c3k7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGN0bENsZWFyID0gMDsKKyAgICB9CisKKyAgICAvKiBDb21wdXRlIHJhdGlvIG9mIGV4dGVuc2lvbiBjaGFubmVsIGJ1c3kgdG8gY29udHJvbCBjaGFubmVsIGNsZWFyCisgICAgICogYXMgYW4gYXBwcm94aW1hdGlvbiB0byBleHRlbnNpb24gY2hhbm5lbCBjbGVhbmxpbmVzcy4KKyAgICAgKgorICAgICAqIEFjY29yZGluZyB0byB0aGUgaGFyZHdhcmUgZm9sa3MsIGV4dCByeGNsZWFyIGlzIHVuZGVmaW5lZAorICAgICAqIGlmIHRoZSBjdHJsIHJ4Y2xlYXIgaXMgZGUtYXNzZXJ0ZWQgKGkuZS4gYnVzeSkKKyAgICAgKi8KKyAgICBpZiAoY3RsQ2xlYXIpIHsKKyAgICAgICAgYnVzeSA9IChleHRCdXN5ICogMTAwKSAvIGN0bENsZWFyOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1c3kgPSAwOworICAgIH0KKyAgICBpZiAoYnVzeSA+IEFUSF9DV01fRVhUQ0hfQlVTWV9USFJFU0hPTEQpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgcmV0dXJuIEZBTFNFOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2N3bS5oIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2N3bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYzM5ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3dtLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBNb2R1bGUgTmFtZSA6IGN3bS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQWJzdHJhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgVGhpcyBtb2R1bGUgY29udGFpbnMgY2hhbm5lbCB3aWR0aCByZWxhdGl2ZWQgZnVuY3Rpb25zLiAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTk9URVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qUmV2aXNpb24gSGlzdG9yeTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgV2hvICAgICAgICAgV2hlbiAgICAgICAgV2hhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAtLS0tLS0tLSAgICAtLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSG9uZGEgICAgICAgMy0xOS0wNyAgICAgY3JlYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9DV01fSAorI2RlZmluZSBfQ1dNX0gKKworI2RlZmluZSBBVEhfQ1dNX0VYVENIX0JVU1lfVEhSRVNIT0xEICAzMCAgLyogRXh0ZW5zaW9uIENoYW5uZWwgQnVzeSBUaHJlc2hvbGQgKDAtMTAwJSkgKi8KKwordm9pZCB6ZkN3bUluaXQoemRldl90KiBkZXYpOwordm9pZCB6ZkNvcmVDd21CdXN5KHpkZXZfdCogZGV2LCB1MTZfdCBidXN5KTsKK3UxNl90IHpmQ3dtSXNFeHRDaGFuQnVzeSh1MzJfdCBjdGxCdXN5LCB1MzJfdCBleHRCdXN5KTsKKworCisKKyNlbmRpZiAvKiAjaWZuZGVmIF9DV01fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2ZyZXFjdHJsLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvZnJlcWN0cmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWIwZGYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2ZyZXFjdHJsLmMKQEAgLTAsMCArMSwyNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiY3ByZWNvbXAuaCIKKworLyogemZBZGRGcmVxQ2hhbmdlUmVxIHNob3VsZCBiZSBjYWxsZWQgaW5zaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uICovCitzdGF0aWMgdm9pZCB6ZkFkZEZyZXFDaGFuZ2VSZXEoemRldl90KiBkZXYsIHUxNl90IGZyZXF1ZW5jeSwgdThfdCBidzQwLAorICAgICAgICB1OF90IGV4dE9mZnNldCwgemZwRnJlcUNoYW5nZUNvbXBsZXRlQ2IgY2IpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisvL3ByaW50aygiemZBZGRGcmVxQ2hhbmdlUmVxICBmcmVxUmVxUXVldWVUYWlsJWRcbiIsIHdkLT5mcmVxQ3RybC5mcmVxUmVxUXVldWVUYWlsKTsKKyAgICB3ZC0+ZnJlcUN0cmwuZnJlcVJlcVF1ZXVlW3dkLT5mcmVxQ3RybC5mcmVxUmVxUXVldWVUYWlsXSA9IGZyZXF1ZW5jeTsKKyAgICB3ZC0+ZnJlcUN0cmwuZnJlcVJlcUJ3NDBbd2QtPmZyZXFDdHJsLmZyZXFSZXFRdWV1ZVRhaWxdID0gYnc0MDsKKyAgICB3ZC0+ZnJlcUN0cmwuZnJlcVJlcUV4dE9mZnNldFt3ZC0+ZnJlcUN0cmwuZnJlcVJlcVF1ZXVlVGFpbF0gPSBleHRPZmZzZXQ7CisgICAgd2QtPmZyZXFDdHJsLmZyZXFDaGFuZ2VDb21wQ2Jbd2QtPmZyZXFDdHJsLmZyZXFSZXFRdWV1ZVRhaWxdID0gY2I7CisgICAgd2QtPmZyZXFDdHJsLmZyZXFSZXFRdWV1ZVRhaWwrKzsKKyAgICBpZiAoIHdkLT5mcmVxQ3RybC5mcmVxUmVxUXVldWVUYWlsID49IFpNX01BWF9GUkVRX1JFUV9RVUVVRSApCisgICAgeworICAgICAgICB3ZC0+ZnJlcUN0cmwuZnJlcVJlcVF1ZXVlVGFpbCA9IDA7CisgICAgfQorfQorCit2b2lkIHpmQ29yZVNldEZyZXF1ZW5jeVYyKHpkZXZfdCogZGV2LCB1MTZfdCBmcmVxdWVuY3ksIHpmcEZyZXFDaGFuZ2VDb21wbGV0ZUNiIGNiKQoreworICAgIHpmQ29yZVNldEZyZXF1ZW5jeUV4KGRldiwgZnJlcXVlbmN5LCAwLCAwLCBjYik7Cit9CisKK3ZvaWQgemZDb3JlU2V0RnJlcXVlbmN5RXhWMih6ZGV2X3QqIGRldiwgdTE2X3QgZnJlcXVlbmN5LCB1OF90IGJ3NDAsCisgICAgICAgIHU4X3QgZXh0T2Zmc2V0LCB6ZnBGcmVxQ2hhbmdlQ29tcGxldGVDYiBjYiwgdThfdCBmb3JjZVNldEZyZXEpCit7CisgICAgdThfdCBzZXRGcmVxSW1tZWQgPSAwOworICAgIHU4X3QgaW5pdFJGID0gMDsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptX21zZzFfc2NhbihaTV9MVl8xLCAiRnJlcT0iLCBmcmVxdWVuY3kpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICBpZiAoKHdkLT5zdGEuY3VycmVudEZyZXF1ZW5jeSA9PSBmcmVxdWVuY3kpCisgICAgICAgICYmICh3ZC0+c3RhLmN1cnJlbnRCdzQwID09IGJ3NDApCisgICAgICAgICYmICh3ZC0+c3RhLmN1cnJlbnRFeHRPZmZzZXQgPT0gZXh0T2Zmc2V0KSkKKyAgICB7CisgICAgICAgIGlmICggZm9yY2VTZXRGcmVxID09IDAgJiYgd2QtPnN0YS5mbGFnRnJlcUNoYW5naW5nID09IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0KKyAgICB9CisjaWZkZWYgWk1fRkI1MAorICAgIC8qaWYoZnJlcXVlbmN5IT0yNDM3KSB7CisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIHJldHVybjsKKyAgICB9Ki8KKyNlbmRpZgorCisgICAgemZBZGRGcmVxQ2hhbmdlUmVxKGRldiwgZnJlcXVlbmN5LCBidzQwLCBleHRPZmZzZXQsIGNiKTsKKworLy8gICAgem1fYXNzZXJ0KCB3ZC0+c3RhLmZsYWdGcmVxQ2hhbmdpbmcgPT0gMCApOworICAgIC8vd2QtPnN0YS5mbGFnRnJlcUNoYW5naW5nID0gMTsKKyAgICBpZiAoIHdkLT5zdGEuZmxhZ0ZyZXFDaGFuZ2luZyA9PSAwICkKKyAgICB7CisgICAgICAgIGlmICgod2QtPnN0YS5jdXJyZW50Qnc0MCAhPSBidzQwKSB8fCAod2QtPnN0YS5jdXJyZW50RXh0T2Zmc2V0ICE9IGV4dE9mZnNldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluaXRSRiA9IDE7CisgICAgICAgIH0KKyAgICAgICAgd2QtPnN0YS5jdXJyZW50RnJlcXVlbmN5ID0gZnJlcXVlbmN5OworICAgICAgICB3ZC0+c3RhLmN1cnJlbnRCdzQwID0gYnc0MDsKKyAgICAgICAgd2QtPnN0YS5jdXJyZW50RXh0T2Zmc2V0ID0gZXh0T2Zmc2V0OworICAgICAgICBzZXRGcmVxSW1tZWQgPSAxOworICAgIH0KKyAgICB3ZC0+c3RhLmZsYWdGcmVxQ2hhbmdpbmcrKzsKKworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBpZiAoIHNldEZyZXFJbW1lZCApCisgICAgeworICAgICAgICAvL3pmSHBTZXRGcmVxdWVuY3koZGV2LCBmcmVxdWVuY3ksIDApOworICAgICAgICBpZiAoIGZvcmNlU2V0RnJlcSApCisgICAgICAgIHsgLy8gQ29sZCByZXNldCB0byByZXNldCB0aGUgZnJlcXVlbmN5IGFmdGVyIHNjYW5uaW5nICEKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIiM2XzEgMjAwNzA5MTciKTsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIkl0IGlzIGhhcHBlbiEhISBObyBlcnJvciBtZXNzYWdlIik7CisgICAgICAgICAgICB6ZkhwU2V0RnJlcXVlbmN5RXgoZGV2LCBmcmVxdWVuY3ksIGJ3NDAsIGV4dE9mZnNldCwgMik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIHpmSHBTZXRGcmVxdWVuY3lFeChkZXYsIGZyZXF1ZW5jeSwgYnc0MCwgZXh0T2Zmc2V0LCBpbml0UkYpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAgICB6ZlN0YUlzQ29ubmVjdGVkKGRldikKKyAgICAgICAgICAgICAmJiAoZnJlcXVlbmN5ID09IHdkLT5mcmVxdWVuY3kpKSB7CisgICAgICAgICAgICB3ZC0+c3RhLmNvbm5Qb3dlckluSGFsZkRibSA9IHpmSHBHZXRUcmFuc21pdFBvd2VyKGRldik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuOworCitkb25lOgorICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBpZiAoIGNiICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgY2IoZGV2KTsKKyAgICB9CisgICAgemZQdXNoVnR4cShkZXYpOworICAgIHJldHVybjsKK30KKwordm9pZCB6ZkNvcmVTZXRGcmVxdWVuY3lFeCh6ZGV2X3QqIGRldiwgdTE2X3QgZnJlcXVlbmN5LCB1OF90IGJ3NDAsCisgICAgICAgIHU4X3QgZXh0T2Zmc2V0LCB6ZnBGcmVxQ2hhbmdlQ29tcGxldGVDYiBjYikKK3sKKyAgICB6ZkNvcmVTZXRGcmVxdWVuY3lFeFYyKGRldiwgZnJlcXVlbmN5LCBidzQwLCBleHRPZmZzZXQsIGNiLCAwKTsKK30KKwordm9pZCB6ZkNvcmVTZXRGcmVxdWVuY3koemRldl90KiBkZXYsIHUxNl90IGZyZXF1ZW5jeSkKK3sKKyAgICB6ZkNvcmVTZXRGcmVxdWVuY3lWMihkZXYsIGZyZXF1ZW5jeSwgTlVMTCk7Cit9CisKKy8qIHpmUmVtb3ZlRnJlcUNoYW5nZVJlcSBTSE9VTEQgTk9UIGJlIGNhbGxlZCBpbnNpZGUgdGhlIGNyaXRpY2FsIHNlY3Rpb24gKi8KK3N0YXRpYyB2b2lkIHpmUmVtb3ZlRnJlcUNoYW5nZVJlcSh6ZGV2X3QqIGRldikKK3sKKyAgICB6ZnBGcmVxQ2hhbmdlQ29tcGxldGVDYiBjYiA9IE5VTEw7CisgICAgdTE2X3QgZnJlcXVlbmN5OworICAgIHU4X3QgYnc0MDsKKyAgICB1OF90IGV4dE9mZnNldDsKKyAgICB1MTZfdCBjb21wRnJlcSA9IDA7CisgICAgdThfdCBjb21wQnc0MCA9IDA7CisgICAgdThfdCBjb21wRXh0T2Zmc2V0ID0gMDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlmICh3ZC0+ZnJlcUN0cmwuZnJlcVJlcVF1ZXVlSGVhZCAhPSB3ZC0+ZnJlcUN0cmwuZnJlcVJlcVF1ZXVlVGFpbCkKKyAgICB7CisgICAgICAgIHptX21zZzFfc2NhbihaTV9MVl8xLCAiRnJlcT0iLAorICAgICAgICAgICAgICAgIHdkLT5mcmVxQ3RybC5mcmVxUmVxUXVldWVbd2QtPmZyZXFDdHJsLmZyZXFSZXFRdWV1ZUhlYWRdKTsKKyAgICAgICAgY29tcEZyZXEgPSB3ZC0+ZnJlcUN0cmwuZnJlcVJlcVF1ZXVlW3dkLT5mcmVxQ3RybC5mcmVxUmVxUXVldWVIZWFkXTsKKyAgICAgICAgY29tcEJ3NDAgPSB3ZC0+ZnJlcUN0cmwuZnJlcVJlcUJ3NDBbd2QtPmZyZXFDdHJsLmZyZXFSZXFRdWV1ZUhlYWRdOworICAgICAgICBjb21wRXh0T2Zmc2V0ID0gd2QtPmZyZXFDdHJsLmZyZXFSZXFFeHRPZmZzZXRbd2QtPmZyZXFDdHJsLmZyZXFSZXFRdWV1ZUhlYWRdOworCisgICAgICAgIHdkLT5mcmVxQ3RybC5mcmVxUmVxUXVldWVbd2QtPmZyZXFDdHJsLmZyZXFSZXFRdWV1ZUhlYWRdID0gMDsKKyAgICAgICAgY2IgPSB3ZC0+ZnJlcUN0cmwuZnJlcUNoYW5nZUNvbXBDYlt3ZC0+ZnJlcUN0cmwuZnJlcVJlcVF1ZXVlSGVhZF07CisgICAgICAgIHdkLT5mcmVxQ3RybC5mcmVxUmVxUXVldWVIZWFkKys7CisgICAgICAgIGlmICggd2QtPmZyZXFDdHJsLmZyZXFSZXFRdWV1ZUhlYWQgPj0gWk1fTUFYX0ZSRVFfUkVRX1FVRVVFICkKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPmZyZXFDdHJsLmZyZXFSZXFRdWV1ZUhlYWQgPSAwOworICAgICAgICB9CisgICAgfQorICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBpZiAoIGNiICE9IE5VTEwgKQorICAgIHsKKyAgICAgICAgY2IoZGV2KTsKKyAgICB9CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIHdoaWxlICh3ZC0+ZnJlcUN0cmwuZnJlcVJlcVF1ZXVlW3dkLT5mcmVxQ3RybC5mcmVxUmVxUXVldWVIZWFkXSAhPSAwKQorICAgIHsKKyAgICAgICAgZnJlcXVlbmN5ID0gd2QtPmZyZXFDdHJsLmZyZXFSZXFRdWV1ZVt3ZC0+ZnJlcUN0cmwuZnJlcVJlcVF1ZXVlSGVhZF07CisgICAgICAgIGJ3NDAgPSB3ZC0+ZnJlcUN0cmwuZnJlcVJlcUJ3NDBbd2QtPmZyZXFDdHJsLmZyZXFSZXFRdWV1ZUhlYWRdOworICAgICAgICBleHRPZmZzZXQ9d2QtPmZyZXFDdHJsLmZyZXFSZXFFeHRPZmZzZXRbd2QtPmZyZXFDdHJsLmZyZXFSZXFRdWV1ZUhlYWRdOworICAgICAgICBpZiAoKGNvbXBGcmVxID09IGZyZXF1ZW5jeSkKKyAgICAgICAgICAgICYmIChjb21wQnc0MCA9PSBidzQwKQorICAgICAgICAgICAgJiYgKGNvbXBFeHRPZmZzZXQgPT0gZXh0T2Zmc2V0KSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogRHVwbGljYXRlZCBmcmVxdWVuY3kgY29tbWFuZCAqLworICAgICAgICAgICAgem1fbXNnMV9zY2FuKFpNX0xWXzEsICJEdXBsaWNhdGVkIEZyZXE9IiwgZnJlcXVlbmN5KTsKKworICAgICAgICAgICAgY2IgPSB3ZC0+ZnJlcUN0cmwuZnJlcUNoYW5nZUNvbXBDYlt3ZC0+ZnJlcUN0cmwuZnJlcVJlcVF1ZXVlSGVhZF07CisgICAgICAgICAgICB3ZC0+ZnJlcUN0cmwuZnJlcVJlcVF1ZXVlW3dkLT5mcmVxQ3RybC5mcmVxUmVxUXVldWVIZWFkXSA9IDA7CisgICAgICAgICAgICB3ZC0+ZnJlcUN0cmwuZnJlcVJlcVF1ZXVlSGVhZCsrOworCisgICAgICAgICAgICBpZiAoIHdkLT5mcmVxQ3RybC5mcmVxUmVxUXVldWVIZWFkID49IFpNX01BWF9GUkVRX1JFUV9RVUVVRSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPmZyZXFDdHJsLmZyZXFSZXFRdWV1ZUhlYWQgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHdkLT5zdGEuZmxhZ0ZyZXFDaGFuZ2luZyAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+c3RhLmZsYWdGcmVxQ2hhbmdpbmctLTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgIGlmICggY2IgIT0gTlVMTCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2IoZGV2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1OF90ICAgIGluaXRSRiA9IDA7CisgICAgICAgICAgICBpZiAoKHdkLT5zdGEuY3VycmVudEJ3NDAgIT0gYnc0MCkgfHwgKHdkLT5zdGEuY3VycmVudEV4dE9mZnNldCAhPSBleHRPZmZzZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluaXRSRiA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3ZC0+c3RhLmN1cnJlbnRGcmVxdWVuY3kgPSBmcmVxdWVuY3k7CisgICAgICAgICAgICB3ZC0+c3RhLmN1cnJlbnRCdzQwID0gYnc0MDsKKyAgICAgICAgICAgIHdkLT5zdGEuY3VycmVudEV4dE9mZnNldCA9IGV4dE9mZnNldDsKKyAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgICAgIHpmSHBTZXRGcmVxdWVuY3lFeChkZXYsIGZyZXF1ZW5jeSwgYnc0MCwgZXh0T2Zmc2V0LCBpbml0UkYpOworICAgICAgICAgICAgaWYgKCAgICB6ZlN0YUlzQ29ubmVjdGVkKGRldikKKyAgICAgICAgICAgICAgICAmJiAoZnJlcXVlbmN5ID09IHdkLT5mcmVxdWVuY3kpKSB7CisgICAgICAgICAgICAgICAgd2QtPnN0YS5jb25uUG93ZXJJbkhhbGZEYm0gPSB6ZkhwR2V0VHJhbnNtaXRQb3dlcihkZXYpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHJldHVybjsKK30KKwordm9pZCB6ZkNvcmVTZXRGcmVxdWVuY3lDb21wbGV0ZSh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptX21zZzFfc2NhbihaTV9MVl8xLCAiZmxhZ0ZyZXFDaGFuZ2luZz0iLCB3ZC0+c3RhLmZsYWdGcmVxQ2hhbmdpbmcpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAvL3dkLT5zdGEuZmxhZ0ZyZXFDaGFuZ2luZyA9IDA7CisgICAgaWYgKCB3ZC0+c3RhLmZsYWdGcmVxQ2hhbmdpbmcgIT0gMCApCisgICAgeworICAgICAgICB3ZC0+c3RhLmZsYWdGcmVxQ2hhbmdpbmctLTsKKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgemZSZW1vdmVGcmVxQ2hhbmdlUmVxKGRldik7CisKKyAgICB6ZlB1c2hWdHhxKGRldik7CisgICAgcmV0dXJuOworfQorCit2b2lkIHpmUmVTZXRDdXJyZW50RnJlcXVlbmN5KHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptX2RlYnVnX21zZzAoIkl0IGlzIGhhcHBlbiEhISBObyBlcnJvciBtZXNzYWdlIik7CisKKyAgICB6ZkNvcmVTZXRGcmVxdWVuY3lFeFYyKGRldiwgd2QtPmZyZXF1ZW5jeSwgMCwgMCwgTlVMTCwgMSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvbGVkbWdyLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvbGVkbWdyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUxMDRhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9sZWRtZ3IuYwpAQCAtMCwwICsxLDU1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJjcHJlY29tcC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZMZWRDdHJsVHlwZTEgICAgICAgICAgICAgICovCisvKiAgICAgIFRyYWRpdGlvbmFsIHNpbmdsZS1MRUQgc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFN0ZXBoZW4gQ2hlbiAgICAgICAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSU5DLiAgICAyMDA3LjYgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBiaXQgMTUtMTIgOiBUb2ZmIGZvciBTY2FuIHN0YXRlCisvLyAgICAgMTEtOCA6IFRvbiBmb3IgU2NhbiBzdGF0ZQorLy8gICAgIDcgOiBSZXNlcnZlZAorLy8gICAgIDYgOiBtb2RlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICAgYml0IDYgPSAwCisvLyAgICAgNS00IDogQ29ubmVjdCBzdGF0ZQorLy8gICAgICAgICAgIDAwID0+IGFsd2F5cyBvZmYKKy8vICAgICAgICAgICAwMSA9PiBhbHdheXMgb24KKy8vICAgICAgICAgICAxMCA9PiBJZGxlIG9mZiwgYWNpdHZlIG9uCisvLyAgICAgICAgICAgMTEgPT4gSWRsZSBvbiwgYWN0aXZlIG9mZgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgIGJpdCA2ID0gMQorLy8gICAgIDUtNCA6IGZyZXEKKy8vICAgICAgICAgICAwMCA9PiAxSHoKKy8vICAgICAgICAgICAwMSA9PiAwLjVIegorLy8gICAgICAgICAgIDEwID0+IDAuMjVIegorLy8gICAgICAgICAgIDExID0+IDAuMTI1SHoKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgICAzIDogUG93ZXIgc2F2ZSBzdGF0ZQorLy8gICAgICAgICAwID0+IGFsd2F5cyBvZmYgaW4gcG93ZXIgc2F2ZSBzdGF0ZQorLy8gICAgICAgICAxID0+IHdvcmtzIGFzIGNvbm5lY3Qgc3RhdGUKKy8vICAgICAyIDogRGlzYWJsZSBzdGF0ZQorLy8gICAgIDEgOiBSZXNlcnZlZAorLy8gICAgIDAgOiBQb3dlci1vbiBzdGF0ZQordm9pZCB6ZkxlZEN0cmxUeXBlMSh6ZGV2X3QqIGRldikKK3sKKyAgICB1MTZfdCBpOworICAgIHUzMl90IHRvbiwgdG9mZiwgdG1wLCBwZXJpb2Q7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgZm9yIChpPTA7IGk8Wk1fTUFYX0xFRF9OVU1CRVI7IGkrKykKKyAgICB7CisgICAgICAgIGlmICh6ZlN0YUlzQ29ubmVjdGVkKGRldikgIT0gVFJVRSkKKyAgICAgICAgeworICAgICAgICAgICAgLy9TY2FuIHN0YXRlCisgICAgICAgICAgICB0b24gPSAoKHdkLT5sZWRTdHJ1Y3QubGVkTW9kZVtpXSAmIDB4ZjAwKSA+PiA4KSAqIDU7CisgICAgICAgICAgICB0b2ZmID0gKCh3ZC0+bGVkU3RydWN0LmxlZE1vZGVbaV0gJiAweGYwMDApID4+IDEyKSAqIDU7CisKKyAgICAgICAgICAgIGlmICgodG9uICsgdG9mZikgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0bXAgPSB3ZC0+bGVkU3RydWN0LmNvdW50ZXIgLyAodG9uK3RvZmYpOworICAgICAgICAgICAgICAgIHRtcCA9IHdkLT5sZWRTdHJ1Y3QuY291bnRlciAtICh0bXAgKiAodG9uK3RvZmYpKTsKKyAgICAgICAgICAgICAgICBpZiAodG1wIDwgdG9uKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgemZIcExlZEN0cmwoZGV2LCBpLCAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgemZIcExlZEN0cmwoZGV2LCBpLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHpmUG93ZXJTYXZpbmdNZ3JJc1NsZWVwaW5nKGRldikpICYmICgod2QtPmxlZFN0cnVjdC5sZWRNb2RlW2ldICYgMHg4KSA9PSAwKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6ZkhwTGVkQ3RybChkZXYsIGksIDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vQ29ubmVjdCBzdGF0ZQorICAgICAgICAgICAgICAgIGlmICgod2QtPmxlZFN0cnVjdC5sZWRNb2RlW2ldICYgMHg0MCkgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICgod2QtPmxlZFN0cnVjdC5jb3VudGVyICYgMSkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgemZIcExlZEN0cmwoZGV2LCBpLCAod2QtPmxlZFN0cnVjdC5sZWRNb2RlW2ldICYgMHgxMCkgPj4gNCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHdkLT5sZWRTdHJ1Y3QudHhUcmFmZmljID4gMCkgfHwgKHdkLT5sZWRTdHJ1Y3QucnhUcmFmZmljID4gMCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPmxlZFN0cnVjdC50eFRyYWZmaWMgPSB3ZC0+bGVkU3RydWN0LnJ4VHJhZmZpYyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh3ZC0+bGVkU3RydWN0LmxlZE1vZGVbaV0gJiAweDIwKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemZIcExlZEN0cmwoZGV2LCBpLCAoKHdkLT5sZWRTdHJ1Y3QubGVkTW9kZVtpXSAmIDB4MTApID4+IDQpXjEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0vLyBpZiAoKHdkLT5sZWRTdHJ1Y3QubGVkTW9kZVtpXSAmIDB4NDApID09IDApCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcGVyaW9kID0gNSAqICgxIDw8ICgod2QtPmxlZFN0cnVjdC5sZWRNb2RlW2ldICYgMHgzMCkgPj4gNCkpOworICAgICAgICAgICAgICAgICAgICB0bXAgPSB3ZC0+bGVkU3RydWN0LmNvdW50ZXIgLyAocGVyaW9kKjIpOworICAgICAgICAgICAgICAgICAgICB0bXAgPSB3ZC0+bGVkU3RydWN0LmNvdW50ZXIgLSAodG1wICogKHBlcmlvZCoyKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAgPCBwZXJpb2QpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgod2QtPmxlZFN0cnVjdC5jb3VudGVyICYgMSkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZkhwTGVkQ3RybChkZXYsIGksIDApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgod2QtPmxlZFN0cnVjdC50eFRyYWZmaWMgPiAwKSB8fCAod2QtPmxlZFN0cnVjdC5yeFRyYWZmaWMgPiAwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5sZWRTdHJ1Y3QudHhUcmFmZmljID0gd2QtPmxlZFN0cnVjdC5yeFRyYWZmaWMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZkhwTGVkQ3RybChkZXYsIGksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgod2QtPmxlZFN0cnVjdC5jb3VudGVyICYgMSkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZkhwTGVkQ3RybChkZXYsIGksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgod2QtPmxlZFN0cnVjdC50eFRyYWZmaWMgPiAwKSB8fCAod2QtPmxlZFN0cnVjdC5yeFRyYWZmaWMgPiAwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkLT5sZWRTdHJ1Y3QudHhUcmFmZmljID0gd2QtPmxlZFN0cnVjdC5yeFRyYWZmaWMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZkhwTGVkQ3RybChkZXYsIGksIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gLy9lbHNlLCBpZiAoKHdkLT5sZWRTdHJ1Y3QubGVkTW9kZVtpXSAmIDB4NDApID09IDApCisgICAgICAgICAgICB9IC8vZWxzZSwgaWYgKHpmUG93ZXJTYXZpbmdNZ3JJc1NsZWVwaW5nKGRldikpCisgICAgICAgIH0gLy9lbHNlIDogaWYgKHpmU3RhSXNDb25uZWN0ZWQoZGV2KSAhPSBUUlVFKQorICAgIH0gLy9mb3IgKGk9MDsgaTxaTV9NQVhfTEVEX05VTUJFUjsgaSsrKQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZMZWRDdHJsVHlwZTIgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIEN1c3RvbWl6ZSBmb3IgTmV0Z2VhciBEdWFsLUxFRCBzdGF0ZSAoKGJ1ZyMzMTI5MikpICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgMS4gU3RhdHVzOiAgV2hlbiBkb25nbGUgZG9lcyBub3QgY29ubmVjdCB0byAyLjRHIG9yIDVHIGJ1dCBpbiBzaXRlICAgICovCisvKiAgICAgICAgICAgICAgICAgIHN1cnZleS9hc3NvY2lhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICBMRUQgc3RhdHVzOiBTbG93IGJsaW5raW5nLCBBbWJlciB0aGVuIEJsdWUgcGVyIDUwMG1zICAgICAgICAgICAgICAgKi8KKy8qICAgICAgMi4gU3RhdHVzOglDb25uZWN0aW9uIGF0IDIuNEcgaW4gc2l0ZSBzdXJ2ZXkvYXNzb2NpYXRpb24gICAgICAgICAgICAgKi8KKy8qICAgICAgICAgTEVEIHN0YXR1czogU2xvdyBibGlua2luZywgQW1iZXIvb2ZmIHBlciA1MDBtcyAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIDMuIFN0YXR1czoJQ29ubmVjdGlvbiBhdCA1RyBpbiBzaXRlIHN1cnZleS9hc3NvY2lhdGlvbiAgICAgICAgICAgICAgICovCisvKiAgICAgICAgIExFRCBzdGF0dXM6IFNsb3cgYmxpbmtpbmcsIEJsdWUvb2ZmIHBlciA1MDBtcyAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICA0LiBTdGF0dXM6CVdoZW4gdHJhbnNmZXIgdGhlIHBhY2tldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICBMRUQgc3RhdHVzOiBCbGluayBwZXIgcGFja2V0LCBpbmNsdWRpbmcgVFggYW5kIFJYICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgNS4gU3RhdHVzOglXaGVuIGxpbmtpbmcgaXMgZXN0YWJsaXNoZWQgYnV0IG5vIHRyYWZmaWMgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgTEVEIHN0YXR1czogQWx3YXlzIG9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIDYuIFN0YXR1czoJV2hlbiBsaW5raW5nIGlzIGRyb3BwZWQgYnV0IG5vIHJlLWNvbm5lY3Rpb24gICAgICAgICAgICAgICovCisvKiAgICAgICAgIExFRCBzdGF0dXM6IEFsd2F5cyBvZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICA3LiBTdGF0dXM6CUZyb20gb25lIGNvbm5lY3Rpb24oMi40RyBvciA1RykgdG8gY2hhbmdlIHRvIGFub3RoZXIgYmFuZCAqLworLyogICAgICAgICBMRUQgc3RhdHVzOiBBbWJlci9CbHVlID0+U2xvdyBibGlua2luZywgQW1iZXIgdGhlbiBCbHVlIHBlciA1MDBtcyAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTaGFuZy1DaHVuIExpdSAgICAgICAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSU5DLiAgICAyMDA3LjExICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB6ZkxlZEN0cmxUeXBlMl9zY2FuKHpkZXZfdCogZGV2KTsKKwordm9pZCB6ZkxlZEN0cmxUeXBlMih6ZGV2X3QqIGRldikKK3sKKyAgICB1MzJfdCB0b24sIHRvZmYsIHRtcCwgcGVyaW9kOworICAgIHUxNl90IE9wZXJhdGVMRUQ7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYgKHpmU3RhSXNDb25uZWN0ZWQoZGV2KSAhPSBUUlVFKQorICAgIHsKKyAgICAgICAgLy8gRGlzY29ubmVjdCBzdGF0ZQorICAgICAgICBpZih3ZC0+bGVkU3RydWN0LmNvdW50ZXIgJSA0ICE9IDApCisgICAgCXsKKyAgICAgIAkgICAgLy8gVXBkYXRlIExFRCBlYWNoIDQwMG1zKDQqMTAwKQorICAgICAgCSAgICAvLyBQcmV2ZW50IHRoaXMgc2l0dWF0aW9uCisgICAgICAgICAgICAvLyAgICAgICAgICAgICAgX19fX19fXyAgICAgICAgIF9fXworICAgICAgICAgICAgLy8gTEVEWzBdIE9OICAgfCAgICAgICB8ICAgICAgIHwgeCB8CisgICAgICAgICAgICAvLyAtLS0tLS0gT0ZGLT4rLSstKy0rLSstKy0rLSstKy0rLSstKy0+Pj4uLi4KKyAgICAgICAgICAgIC8vIExFRFsxXSBPTgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoKHdkLT5zdGF0ZSA9PSBaTV9XTEFOX1NUQVRFX0RJU0FCTEVEKSAmJiAod2QtPnN0YS5iQ2hhbm5lbFNjYW4pKQorICAgICAgICAgICAgfHwgKCh3ZC0+c3RhdGUgIT0gWk1fV0xBTl9TVEFURV9ESVNBQkxFRCkgJiYgKHdkLT5zdGEuYkF1dG9SZWNvbm5lY3QpKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU2Nhbi9BdXRvUmVjb25uZWN0IHN0YXRlCisgICAgICAgICAgICB6ZkxlZEN0cmxUeXBlMl9zY2FuKGRldik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBOZWl0aGVyIENvbm5lY3RlZCBub3IgU2NhbgorICAgICAgICAgICAgemZIcExlZEN0cmwoZGV2LCAwLCAwKTsKKyAgICAgICAgICAgIHpmSHBMZWRDdHJsKGRldiwgMSwgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYoIHdkLT5zdGEuYkNoYW5uZWxTY2FuICkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU2NhbiBzdGF0ZQorICAgICAgICAgICAgaWYod2QtPmxlZFN0cnVjdC5jb3VudGVyICUgNCAhPSAwKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHpmTGVkQ3RybFR5cGUyX3NjYW4oZGV2KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmKHdkLT5mcmVxdWVuY3kgPCAzMDAwKQorICAgICAgICB7CisgICAgICAgICAgICBPcGVyYXRlTEVEID0gMDsgICAgIC8vIExFRFswXTogd29yayBvbiAyLjRHIChiL2cgYmFuZCkKKyAgICAgICAgICAgIHpmSHBMZWRDdHJsKGRldiwgMSwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBPcGVyYXRlTEVEID0gMTsgICAgIC8vIExFRFsxXTogd29yayBvbiA1RyAoYSBiYW5kKQorICAgICAgICAgICAgemZIcExlZEN0cmwoZGV2LCAwLCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoemZQb3dlclNhdmluZ01ncklzU2xlZXBpbmcoZGV2KSkgJiYgKCh3ZC0+bGVkU3RydWN0LmxlZE1vZGVbT3BlcmF0ZUxFRF0gJiAweDgpID09IDApKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJZiBTbGVlcGluZywgdHVybiBPRkYKKyAgICAgICAgICAgIHpmSHBMZWRDdHJsKGRldiwgT3BlcmF0ZUxFRCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvL0Nvbm5lY3Qgc3RhdGUKKyAgICAgICAgICAgIGlmICgod2QtPmxlZFN0cnVjdC5jb3VudGVyICYgMSkgPT0gMCkgICAvLyBldmVuCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gTm8gdHJhZmZpYywgYWx3YXlzIE9OCisgICAgICAgICAgICAgICAgemZIcExlZEN0cmwoZGV2LCBPcGVyYXRlTEVELCAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgICAgICAgLy8gb2RkCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCh3ZC0+bGVkU3RydWN0LnR4VHJhZmZpYyA+IDApIHx8ICh3ZC0+bGVkU3RydWN0LnJ4VHJhZmZpYyA+IDApKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgaGF2ZSB0cmFmZmljLCB0dXJuIE9GRgorCQkgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBfX19fXyAgIF8gICBfICAgXyAgIF9fX19fCisJCSAgICAgICAgICAgIC8vIExFRFtPcGVyYXRlXSBPTiAgICAgICAgfCB8IHwgfCB8IHwgfCB8CisJCSAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLSBPRkYtPi0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLT4+Pi4uLgorCQkgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICB3ZC0+bGVkU3RydWN0LnR4VHJhZmZpYyA9IHdkLT5sZWRTdHJ1Y3QucnhUcmFmZmljID0gMDsKKyAgICAgICAgICAgICAgICAgICAgemZIcExlZEN0cmwoZGV2LCBPcGVyYXRlTEVELCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgemZMZWRDdHJsVHlwZTJfc2Nhbih6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvLyBXaGVuIGRvaW5nIHNjYW4sIGJsaW5rKEFtYmVyL0JsdWUpIGFuZCBvZmYgcGVyIDUwMG1zIChhYm91dCA0MDBtcyBpbiBvdXIgZHJpdmVyKQorICAgIC8vICAgICAgICAgICAgICAgX19fX19fXyAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fCisgICAgLy8gTEVEWzBdIE9OICAgIHwgICAgICAgfCAgICAgICA4ICAgICAgIDEyICAgICAgfCAgICAgICB8CisgICAgLy8gLS0tLS0tIE9GRi0+LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLT4+Pi4uLgorICAgIC8vIExFRFsxXSBPTiAgICAwICAgICAgIDQgICAgICAgfF9fX19fX198ICAgICAgIDAgICAgICAgMworICAgIC8vCisKKyAgICBzd2l0Y2god2QtPmxlZFN0cnVjdC5jb3VudGVyICUgMTYpCisgICAgeworICAgICAgICBjYXNlIDA6ICAgLy8gY2FzZSAwfjMsIExFRFswXSBvbgorICAgICAgICAgICAgaWYod2QtPnN1cHBvcnRNb2RlICYgWk1fV0lSRUxFU1NfTU9ERV8yNCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6ZkhwTGVkQ3RybChkZXYsIDAsIDEpOworICAgICAgICAgICAgICAgIHpmSHBMZWRDdHJsKGRldiwgMSwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZIcExlZEN0cmwoZGV2LCAxLCAxKTsKKyAgICAgICAgICAgICAgICB6ZkhwTGVkQ3RybChkZXYsIDAsIDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSA4OiAgIC8vIGNhc2UgOH4xMSwgTEVEWzFdIG9uCisgICAgICAgICAgICBpZih3ZC0+c3VwcG9ydE1vZGUgJiBaTV9XSVJFTEVTU19NT0RFXzUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZIcExlZEN0cmwoZGV2LCAxLCAxKTsKKyAgICAgICAgICAgICAgICB6ZkhwTGVkQ3RybChkZXYsIDAsIDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmSHBMZWRDdHJsKGRldiwgMCwgMSk7CisgICAgICAgICAgICAgICAgemZIcExlZEN0cmwoZGV2LCAxLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6ICAvLyBvdGhlcnMsIGFsbCBvZmYKKyAgICAgICAgICAgIHpmSHBMZWRDdHJsKGRldiwgMCwgMCk7CisgICAgICAgICAgICB6ZkhwTGVkQ3RybChkZXYsIDEsIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkxlZEN0cmxUeXBlMyAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIEN1c3RvbWl6ZSBmb3IgTmV0Z2VhciBTaW5nbGUtTEVEIHN0YXRlICgoYnVnIzMyMjQzKSkgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIKFFT2ZmOiB3aGVuIHRoZSBhZGFwdGVyIGlzIGRpc2FibGVkIG9yIGhhc24ndCBzdGFydGVkIHRvIGFzc29jaWF0ZSB3aXRoIEFQICAgICovCisvKiAgICAgICAgIHlldC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgoUVPbjogT25jZSBhZHBhdGVyIGFzc29jaWF0ZSB3aXRoIEFQIHN1Y2Nlc3NmdWxseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICChRVNsb3cgYmxpbmtpbmc6IHdoZW5ldmVyIGFkYXB0ZXJzIGRvIHNpdGUtc3VydmV5IG9yIHRyeSB0byBhc3NvY2lhdGUgd2l0aCBBUCAqLworLyogICAgLSBJZiB0aGVyZSBpcyBhIGNvbm5lY3Rpb24gYWxyZWFkeSwgYW5kIGFkYXB0ZXJzIGRvIHNpdGUtc3VydmV5IG9yICAgICAgICAgICovCisvKiAgICAgIHJlLWFzc29jaWF0ZSBhY3Rpb24sIHRoZSBMRUQgc2hvdWxkIGtlZXAgTEVEIGJhY2tncmFvdWQgYXMgT04sIHRodXMgICAgICAgKi8KKy8qICAgICAgdGhlIGJsaW5raW5nIGJlaGF2aW9yIFNIT1VMRCBiZSBPRkYgKDIwMG1zKSAtIE9OICg4MDBtcykgYW5kIGNvbnRpbnVlIHRoaXMqLworLyogICAgICBjeWNsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAtIElmIHRoZXJlIGlzIG5vIGNvbm5lY3Rpb24geWV0LCBhbmQgYWRhcHRlcnMgc3RhcnQgdG8gZG8gc2l0ZS1zdXJ2ZXkgb3IgICAgKi8KKy8qICAgICAgYXNzb2NpYXRlIGFjdGlvbiwgdGhlIExFRCBzaG91bGQga2VlcCBMRUQgYmFja2dyb3VuZCBhcyBPRkYsIHRodXMgdGhlICAgICAqLworLyogICAgICBibGlua2luZyBiZWhhdmlvciBTSE9VTEQgYmUgT04gKDIwMG1zKSAtIE9GRiAoODAwbXMpIGFuZCBjb250aW51ZSB0aGlzICAgICovCisvKiAgICAgIGN5Y2xlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIC0gRm9yIHRoZSBjYXNlIHRoYXQgYXNzb2NpYXRlIGZhaWwsIGFkcGF0ZXIgc2hvdWxkIGtlZXAgYXNzb2NpYXRpbmcsIGFuZCB0aGUqLworLyogICAgICBMRUQgc2hvdWxkIGFsc28ga2VlcCBzbG93IGJsaW5raW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgoUVRdWljayBibGlua2luZzogdG8gYmxpbmsgT0ZGLU9OIGN5Y2xlIGZvciBlYWNoIHRpbWUgdGhhdCB0cmFmZmljIHBhY2tldCBpcyAgKi8KKy8qICAgIHJlY2VpdmVkIG9yIGlzIHRyYW5zbWl0dGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU2hhbmctQ2h1biBMaXUgICAgICAgIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIElOQy4gICAgMjAwOC4wMSAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgemZMZWRDdHJsVHlwZTNfc2Nhbih6ZGV2X3QqIGRldiwgdTE2X3QgaXNDb25uZWN0KTsKKwordm9pZCB6ZkxlZEN0cmxUeXBlMyh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAoemZTdGFJc0Nvbm5lY3RlZChkZXYpICE9IFRSVUUpCisgICAgeworICAgICAgICAvLyBEaXNjb25uZWN0IHN0YXRlCisgICAgICAgIGlmKHdkLT5sZWRTdHJ1Y3QuY291bnRlciAlIDIgIT0gMCkKKyAgICAJeworICAgICAgCSAgICAvLyBVcGRhdGUgTEVEIGVhY2ggMjAwbXMoMioxMDApCisgICAgICAJICAgIC8vIFByZXZlbnQgdGhpcyBzaXR1YXRpb24KKyAgICAgICAgICAgIC8vICAgICAgICAgICAgICBfX18gICAgIF8KKyAgICAgICAgICAgIC8vIExFRFswXSBPTiAgIHwgICB8ICAgfHh8CisgICAgICAgICAgICAvLyAtLS0tLS0gT0ZGLT4rLSstKy0rLSstKy0rLT4+Pi4uLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoKHdkLT5zdGF0ZSA9PSBaTV9XTEFOX1NUQVRFX0RJU0FCTEVEKSAmJiAod2QtPnN0YS5iQ2hhbm5lbFNjYW4pKQorICAgICAgICAgICAgfHwgKCh3ZC0+c3RhdGUgIT0gWk1fV0xBTl9TVEFURV9ESVNBQkxFRCkgJiYgKHdkLT5zdGEuYkF1dG9SZWNvbm5lY3QpKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU2Nhbi9BdXRvUmVjb25uZWN0IHN0YXRlCisgICAgICAgICAgICB6ZkxlZEN0cmxUeXBlM19zY2FuKGRldiwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBOZWl0aGVyIENvbm5lY3RlZCBub3IgU2NhbgorICAgICAgICAgICAgemZIcExlZEN0cmwoZGV2LCAwLCAwKTsKKyAgICAgICAgICAgIHpmSHBMZWRDdHJsKGRldiwgMSwgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYoIHdkLT5zdGEuYkNoYW5uZWxTY2FuICkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU2NhbiBzdGF0ZQorICAgICAgICAgICAgaWYod2QtPmxlZFN0cnVjdC5jb3VudGVyICUgMiAhPSAwKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHpmTGVkQ3RybFR5cGUzX3NjYW4oZGV2LCAxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoemZQb3dlclNhdmluZ01ncklzU2xlZXBpbmcoZGV2KSkgJiYgKCh3ZC0+bGVkU3RydWN0LmxlZE1vZGVbMF0gJiAweDgpID09IDApKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJZiBTbGVlcGluZywgdHVybiBPRkYKKyAgICAgICAgICAgIHpmSHBMZWRDdHJsKGRldiwgMCwgMCk7CisgICAgICAgICAgICB6ZkhwTGVkQ3RybChkZXYsIDEsIDApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy9Db25uZWN0IHN0YXRlCisgICAgICAgICAgICBpZiAoKHdkLT5sZWRTdHJ1Y3QuY291bnRlciAmIDEpID09IDApICAgLy8gZXZlbgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIE5vIHRyYWZmaWMsIGFsd2F5cyBPTgorICAgICAgICAgICAgICAgIHpmSHBMZWRDdHJsKGRldiwgMCwgMSk7CisgICAgICAgICAgICAgICAgemZIcExlZEN0cmwoZGV2LCAxLCAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgICAgICAgLy8gb2RkCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCh3ZC0+bGVkU3RydWN0LnR4VHJhZmZpYyA+IDApIHx8ICh3ZC0+bGVkU3RydWN0LnJ4VHJhZmZpYyA+IDApKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgaGF2ZSB0cmFmZmljLCB0dXJuIE9GRgorCQkgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBfX19fXyAgIF8gICBfICAgXyAgIF9fX19fCisJCSAgICAgICAgICAgIC8vIExFRFtPcGVyYXRlXSBPTiAgICAgICAgfCB8IHwgfCB8IHwgfCB8CisJCSAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLSBPRkYtPi0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLT4+Pi4uLgorCQkgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICB3ZC0+bGVkU3RydWN0LnR4VHJhZmZpYyA9IHdkLT5sZWRTdHJ1Y3QucnhUcmFmZmljID0gMDsKKyAgICAgICAgICAgICAgICAgICAgemZIcExlZEN0cmwoZGV2LCAwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgemZIcExlZEN0cmwoZGV2LCAxLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgemZMZWRDdHJsVHlwZTNfc2Nhbih6ZGV2X3QqIGRldiwgdTE2X3QgaXNDb25uZWN0KQoreworICAgIHUzMl90IHRvbiwgdG9mZiwgdG1wOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8vIERvaW5nIHNjYW4gd2hlbiA6CisgICAgLy8gMS4gRGlzY29ubmVjdGVkOiBPTiAoMjAwbXMpIC0gT0ZGICg4MDBtcykgKDIwMG1zLTYwMG1zIGluIG91ciBkcml2ZXIpCisgICAgLy8gICAgICAgICAgICAgICBfX18gICAgICAgICAgICAgX19fICAgICAgICAgICAgIF9fXworICAgIC8vIExFRFswXSBPTiAgICB8ICAgfCAgICAgICAgICAgfCAgIHwgICAgICAgICAgIHwgICB8CisgICAgLy8gLS0tLS0tIE9GRi0+LSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0+Pj4uLi4KKyAgICAvLyAgICAgICAgICAgICAgMCAgIDIgICA0ICAgNiAgIDggIDEwICAxMiAgMTQgIDE2CisgICAgLy8gMi4gQ29ubmVjdGVkOiAgIE9OICg4MDBtcykgLSBPRkYgKDIwMG1zKSAoNjAwbXMtMjAwbXMgaW4gb3VyIGRyaXZlcikKKyAgICAvLyAgICAgICAgICAgICAgIF9fX19fX19fX19fICAgICBfX19fX19fX19fXyAgICAgX19fX19fCisgICAgLy8gTEVEWzBdIE9OICAgIHwgICAgICAgICAgIHwgICB8ICAgICAgICAgICB8ICAgfAorICAgIC8vIC0tLS0tLSBPRkYtPi0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstPj4+Li4uCisgICAgLy8gICAgICAgICAgICAgIDAgICAyICAgNCAgIDYgICA4ICAxMCAgMTIgIDE0ICAxNgorCisgICAgLy9TY2FuIHN0YXRlCisgICAgaWYoIWlzQ29ubmVjdCkKKyAgICAgICAgdG9uID0gMiwgdG9mZiA9IDY7CisgICAgZWxzZQorICAgICAgICB0b24gPSA2LCB0b2ZmID0gMjsKKworICAgIGlmICgodG9uICsgdG9mZikgIT0gMCkKKyAgICB7CisgICAgICAgIHRtcCA9IHdkLT5sZWRTdHJ1Y3QuY291bnRlciAlICh0b24rdG9mZik7CisgICAgICAgaWYgKHRtcCA8IHRvbikKKyAgICAgICAgeworICAgICAgICAgICAgemZIcExlZEN0cmwoZGV2LCAwLCAxKTsKKyAgICAgICAgICAgIHpmSHBMZWRDdHJsKGRldiwgMSwgMSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB6ZkhwTGVkQ3RybChkZXYsIDAsIDApOworICAgICAgICAgICAgemZIcExlZEN0cmwoZGV2LCAxLCAwKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmTGVkQ3RybF9CbGlua1doZW5TY2FuX0FscGhhICAgICAqLworLyogICAgICBDdXN0b21pemUgZm9yIEFscGhhL0RMaW5rIExFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgLSBCbGluayBMRUQgMTIgdGltZXMgd2l0aGluIDMgc2Vjb25kcyB3aGVuIGRvaW5nIEFjdGl2ZSBTY2FuICAgICAgICAgICovCisvKgkgICAgICAgICAgICAgICAgICAgICAgX19fICAgX19fICAgX19fICAgX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKgkgICAgICBMRURbMF0gT04gICAgICB8ICAgfCB8ICAgfCB8ICAgfCB8ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKgkgICAgICAtLS0tLS0tT0ZGLT4tKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0tKy0tPj4+Li4uICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU2hhbmctQ2h1biBMaXUgICAgICAgIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIElOQy4gICAgMjAwNy4xMSAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgemZMZWRDdHJsX0JsaW5rV2hlblNjYW5fQWxwaGEoemRldl90KiBkZXYpCit7CisgICAgc3RhdGljIHUzMl90IGNvdW50ZXIgPSAwOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGlmKGNvdW50ZXIgPiAzNCkgICAgICAgIC8vIGNvdW50ZXIgZm9yIDMgc2VjCisgICAgeworICAgICAgICB3ZC0+bGVkU3RydWN0LkxFREN0cmxGbGFnICY9IH4odThfdClaTV9MRURfQ1RSTF9GTEFHX0FMUEhBOworICAgICAgICBjb3VudGVyID0gMDsKKyAgICB9CisKKyAgICBpZiggKGNvdW50ZXIgJSAzKSA8IDIpCisgICAgICAgIHpmSHBMZWRDdHJsKGRldiwgMCwgMSk7CisgICAgZWxzZQorICAgICAgICB6ZkhwTGVkQ3RybChkZXYsIDAsIDApOworCisgICAgY291bnRlcisrOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkxlZDEwMG1zQ3RybCAgICAgICAgICAgICAgKi8KKy8qICAgICAgTEVEIDEwMCBtaWxsaXNlY29uZHMgdGltZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJTkMuICAgIDIwMDcuNiAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgemZMZWQxMDBtc0N0cmwoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgd2QtPmxlZFN0cnVjdC5jb3VudGVyKys7CisKKyAgICBpZih3ZC0+bGVkU3RydWN0LkxFREN0cmxGbGFnKQorICAgIHsKKyAgICAgICAgc3dpdGNoKHdkLT5sZWRTdHJ1Y3QuTEVEQ3RybEZsYWcpIHsKKyAgICAgICAgY2FzZSBaTV9MRURfQ1RSTF9GTEFHX0FMUEhBOgorICAgICAgICAgICAgemZMZWRDdHJsX0JsaW5rV2hlblNjYW5fQWxwaGEoZGV2KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3dpdGNoKHdkLT5sZWRTdHJ1Y3QuTEVEQ3RybFR5cGUpIHsKKyAgICAgICAgY2FzZSAxOgkJCS8vIFRyYWRpdGlvbmFsIDEgTEVECisgICAgICAgICAgICB6ZkxlZEN0cmxUeXBlMShkZXYpOworICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDI6CQkJLy8gRHVhbC1MRURzIGZvciBOZXRnZWFyCisgICAgICAgICAgICB6ZkxlZEN0cmxUeXBlMihkZXYpOworICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDM6CQkJLy8gU2luZ2xlLUxFRCBmb3IgTmV0Z2VhciAoV04xMTF2MikKKyAgICAgICAgICAgIHpmTGVkQ3RybFR5cGUzKGRldik7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB6ZkxlZEN0cmxUeXBlMShkZXYpOworICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL3BlcmZvcm1hbmNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvcGVyZm9ybWFuY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWI0MmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL3BlcmZvcm1hbmNlLmMKQEAgLTAsMCArMSw0MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBNb2R1bGUgTmFtZSA6IHBlcmZvcm1hbmNlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEFic3RyYWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgVGhpcyBtb2R1bGUgcGVyZm9ybWFuY2UgZXZhbHVhdGlvbiBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE5PVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlICJjcHJlY29tcC5oIgorI2lmZGVmIFpNX0VOQUJMRV9QRVJGT1JNQU5DRV9FVkFMVUFUSU9OCisKKyNkZWZpbmUgWk1fVFBfU0laRSA1MAorc3RydWN0IHpzU3VtbWFyeSB6bV9zdW1tYXJ5Oworc3RydWN0IHpzVmFyaWF0aW9uIHptX3ZhcjsKK3N0cnVjdCB6c1Rocm91Z2hwdXQgem1fdHA7CisKK3ZvaWQgemZpUGVyZm9ybWFuY2VJbml0KHpkZXZfdCogZGV2KQoreworICAgIHUxNl90ICAgaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptX3N1bW1hcnkudGlja19iYXNlID0gd2QtPnRpY2s7CisgICAgem1fc3VtbWFyeS50eF9tc2R1X2NvdW50ID0gMDsKKyAgICB6bV9zdW1tYXJ5LnR4X21wZHVfY291bnQgPSAwOworICAgIHptX3N1bW1hcnkucnhfbXNkdV9jb3VudCA9IDA7CisgICAgem1fc3VtbWFyeS5yeF9tcGR1X2NvdW50ID0gMDsKKyAgICB6bV9zdW1tYXJ5LnJ4X2Jyb2tlbl9zZXEgPSAwOworICAgIHptX3N1bW1hcnkucnhfYnJva2VuX3N1bSA9IDA7CisgICAgem1fc3VtbWFyeS5yeF9zZXFfYmFzZSA9IDA7CisgICAgem1fc3VtbWFyeS5yeF9icm9rZW5fc2VxX2RpcyA9IDA7CisgICAgem1fc3VtbWFyeS5yeF9kdXBsaWNhdGVfc2VxID0gMDsKKyAgICB6bV9zdW1tYXJ5LnJ4X29sZF9zZXEgPSAwOworICAgIHptX3N1bW1hcnkucmVzZXRfY291bnQgPSAwOworICAgIHptX3N1bW1hcnkucmVzZXRfc3VtID0gMDsKKyAgICB6bV9zdW1tYXJ5LnJ4X2xvc3Rfc3VtID0gMDsKKyAgICB6bV9zdW1tYXJ5LnJ4X2R1cGxpY2F0ZV9lcnJvciA9IDA7CisgICAgem1fc3VtbWFyeS5yeF9mcmVlID0gMDsKKyAgICB6bV9zdW1tYXJ5LnJ4X2Ftc2R1X2xlbiA9IDA7CisgICAgem1fc3VtbWFyeS5yeF9mbHVzaCA9IDA7CisgICAgem1fc3VtbWFyeS5yeF9jbGVhciA9IDA7CisgICAgem1fc3VtbWFyeS5yeF9yZW9yZGVyID0gMDsKKworICAgIGZvciAoaT0wOyBpPDEwMDsgaSsrKQorICAgIHsKKyAgICAgICAgem1fdmFyLnR4X21zZHVfdGlja1tpXSA9IHptX3Zhci50eF9tcGR1X3RpY2tbaV0gPSAwOworICAgICAgICB6bV92YXIucnhfbXNkdV90aWNrW2ldID0gem1fdmFyLnJ4X21wZHVfdGlja1tpXSA9IDA7CisgICAgfQorCisgICAgemZUaW1lclNjaGVkdWxlKGRldiwgWk1fRVZFTlRfVElNRU9VVF9QRVJGT1JNQU5DRSwgMTAwKTsKKworICAgIHptX3RwLnNpemUgPSBaTV9UUF9TSVpFOworICAgIHptX3RwLmhlYWQgPSB6bV90cC5zaXplIC0gMTsKKyAgICB6bV90cC50YWlsID0gMDsKKyAgICBmb3IgKGk9MDsgaTx6bV90cC5zaXplOyBpKyspCisgICAgeworICAgICAgICB6bV90cC50eFtpXT0wOworICAgICAgICB6bV90cC5yeFtpXT0wOworICAgIH0KK30KKwordm9pZCB6ZmlQZXJmb3JtYW5jZUdyYXBoKHpkZXZfdCogZGV2KQoreworICAgIHMxNl90ICAgaSxqOworICAgIHU4X3QgICAgc1taTV9UUF9TSVpFKzVdOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGZvciAoaT0wOyBpPCh6bV90cC5zaXplLTEpOyBpKyspCisgICAgeworICAgICAgICB6bV90cC50eFtpXSA9IHptX3RwLnR4W2krMV07CisgICAgICAgIHptX3RwLnJ4W2ldID0gem1fdHAucnhbaSsxXTsKKyAgICB9CisgICAgem1fdHAudHhbem1fdHAuc2l6ZS0xXSA9IHptX3N1bW1hcnkudHhfbXBkdV9jb3VudCoxNTAwKjgvMTAwMDAwMDsKKyAgICB6bV90cC5yeFt6bV90cC5zaXplLTFdID0gem1fc3VtbWFyeS5yeF9tc2R1X2NvdW50KjE1MDAqOC8xMDAwMDAwOworCisgICAgZm9yIChpPTE1OyBpPjA7IGktLSkKKyAgICB7CisgICAgICAgIHNbMF0gPSAoaS8xMCkgKyAnMCc7CisgICAgICAgIHNbMV0gPSAoaSUxMCkgKyAnMCc7CisgICAgICAgIHNbMl0gPSAnMCc7CisgICAgICAgIHNbM10gPSAnfCc7CisgICAgICAgIGZvciAoaj0wOyBqPHptX3RwLnNpemU7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCh6bV90cC50eFtqXS8xMCA9PSBpKSAmJiAoem1fdHAucnhbal0vMTAgPT0gaSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc1s0K2pdID0gJ1gnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoem1fdHAudHhbal0vMTAgPT0gaSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzWzQral0gPSAnVCc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh6bV90cC5yeFtqXS8xMCA9PSBpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNbNCtqXSA9ICdSJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzWzQral0gPSAnICc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc1t6bV90cC5zaXplKzRdID0gJ1wwJzsKKyAgICAgICAgRGJnUHJpbnQoIiVzIixzKTsKKyAgICB9CisgICAgRGJnUHJpbnQoIjAwMHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyIpOworCit9CisKKwordm9pZCB6ZmlQZXJmb3JtYW5jZVJlZnJlc2goemRldl90KiBkZXYpCit7CisgICAgdTE2X3QgICBpOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgemZpRGJnUmVhZFJlZyhkZXYsIDB4MTE3NzJjKTsKKworICAgIHptX3Zhci50eF9tc2R1X21lYW4gPSB6bV9zdW1tYXJ5LnR4X21zZHVfY291bnQgLyAxMDA7CisgICAgem1fdmFyLnR4X21wZHVfbWVhbiA9IHptX3N1bW1hcnkudHhfbXBkdV9jb3VudCAvIDEwMDsKKyAgICB6bV92YXIucnhfbXNkdV9tZWFuID0gem1fc3VtbWFyeS5yeF9tc2R1X2NvdW50IC8gMTAwOworICAgIHptX3Zhci5yeF9tcGR1X21lYW4gPSB6bV9zdW1tYXJ5LnJ4X21wZHVfY291bnQgLyAxMDA7CisKKyAgICB6bV92YXIudHhfbXNkdV9zdW0gPSB6bV92YXIudHhfbXBkdV9zdW0gPSAwOworICAgIHptX3Zhci5yeF9tc2R1X3N1bSA9IHptX3Zhci5yeF9tcGR1X3N1bSA9IDA7CisgICAgem1fc3VtbWFyeS50eF9pZGxlX2NvdW50ID0gem1fc3VtbWFyeS5yeF9pZGxlX2NvdW50ID0gMDsKKyAgICBmb3IgKGk9MDsgaTwxMDA7IGkrKykKKyAgICB7CisgICAgICAgIHptX3Zhci50eF9tc2R1X3N1bSArPSAoem1fdmFyLnR4X21zZHVfdGlja1tpXSAqIHptX3Zhci50eF9tc2R1X3RpY2tbaV0pOworICAgICAgICB6bV92YXIudHhfbXBkdV9zdW0gKz0gKHptX3Zhci50eF9tcGR1X3RpY2tbaV0gKiB6bV92YXIudHhfbXBkdV90aWNrW2ldKTsKKyAgICAgICAgem1fdmFyLnJ4X21zZHVfc3VtICs9ICh6bV92YXIucnhfbXNkdV90aWNrW2ldICogem1fdmFyLnJ4X21zZHVfdGlja1tpXSk7CisgICAgICAgIHptX3Zhci5yeF9tcGR1X3N1bSArPSAoem1fdmFyLnJ4X21wZHVfdGlja1tpXSAqIHptX3Zhci5yeF9tcGR1X3RpY2tbaV0pOworCisgICAgICAgIGlmICghem1fdmFyLnR4X21wZHVfdGlja1tpXSkgem1fc3VtbWFyeS50eF9pZGxlX2NvdW50Kys7CisgICAgICAgIGlmICghem1fdmFyLnJ4X21wZHVfdGlja1tpXSkgem1fc3VtbWFyeS5yeF9pZGxlX2NvdW50Kys7CisgICAgfQorICAgIHptX3Zhci50eF9tc2R1X3ZhciA9ICh6bV92YXIudHhfbXNkdV9zdW0gLyAxMDApIC0gKHptX3Zhci50eF9tc2R1X21lYW4gKiB6bV92YXIudHhfbXNkdV9tZWFuKTsKKyAgICB6bV92YXIudHhfbXBkdV92YXIgPSAoem1fdmFyLnR4X21wZHVfc3VtIC8gMTAwKSAtICh6bV92YXIudHhfbXBkdV9tZWFuICogem1fdmFyLnR4X21wZHVfbWVhbik7CisgICAgem1fdmFyLnJ4X21zZHVfdmFyID0gKHptX3Zhci5yeF9tc2R1X3N1bSAvIDEwMCkgLSAoem1fdmFyLnJ4X21zZHVfbWVhbiAqIHptX3Zhci5yeF9tc2R1X21lYW4pOworICAgIHptX3Zhci5yeF9tcGR1X3ZhciA9ICh6bV92YXIucnhfbXBkdV9zdW0gLyAxMDApIC0gKHptX3Zhci5yeF9tcGR1X21lYW4gKiB6bV92YXIucnhfbXBkdV9tZWFuKTsKKworICAgIHptX3N1bW1hcnkudGlja19iYXNlID0gd2QtPnRpY2s7CisgICAgem1fc3VtbWFyeS5yeF9icm9rZW5fc3VtICs9IHptX3N1bW1hcnkucnhfYnJva2VuX3NlcTsKKyAgICB6bV9zdW1tYXJ5LnJ4X2xvc3Rfc3VtICs9ICh6bV9zdW1tYXJ5LnJ4X2Jyb2tlbl9zZXEgLSB6bV9zdW1tYXJ5LnJ4X2R1cGxpY2F0ZV9zZXEgLSB6bV9zdW1tYXJ5LnJ4X29sZF9zZXEpOworCisgICAgemZpUGVyZm9ybWFuY2VHcmFwaChkZXYpOworCisgICAgRGJnUHJpbnQoIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisgICAgRGJnUHJpbnQoIiogVFg6IE1TRFU9JTVkLCBWQVI9JTVkOyBNUERVPSU1ZCwgVkFSPSU1ZFxuIiwgem1fc3VtbWFyeS50eF9tc2R1X2NvdW50LAorICAgICAgICB6bV92YXIudHhfbXNkdV92YXIsIHptX3N1bW1hcnkudHhfbXBkdV9jb3VudCwgem1fdmFyLnR4X21wZHVfdmFyKTsKKyAgICBEYmdQcmludCgiKiBUWDogaWRsZT0lNWQsVHhSYXRlPSUzZCwgIFBFUj0lNWRcbiIsIHptX3N1bW1hcnkudHhfaWRsZV9jb3VudCwKKyAgICAgICAgd2QtPkN1cnJlbnRUeFJhdGVLYnBzLzEwMDAsCisgICAgICAgICh1MTZfdCl3ZC0+UEVSW3dkLT5zdGEub3Bwb3NpdGVJbmZvWzBdLnJjQ2VsbC5jdXJyZW50UmF0ZV0pOworICAgIERiZ1ByaW50KCIqIFJYOiBNU0RVPSU1ZCwgVkFSPSU1ZDsgTVBEVT0lNWQsIFZBUj0lNWRcbiIsIHptX3N1bW1hcnkucnhfbXNkdV9jb3VudCwKKyAgICAgICAgem1fdmFyLnJ4X21zZHVfdmFyLCB6bV9zdW1tYXJ5LnJ4X21wZHVfY291bnQsIHptX3Zhci5yeF9tcGR1X3Zhcik7CisgICAgRGJnUHJpbnQoIiogUlg6IGlkbGU9JTVkLFJ4UmF0ZT0lM2QsQU1TRFU9JTVkXG4iLCB6bV9zdW1tYXJ5LnJ4X2lkbGVfY291bnQsCisgICAgICAgIHdkLT5DdXJyZW50UnhSYXRlS2Jwcy8xMDAwLCB6bV9zdW1tYXJ5LnJ4X2Ftc2R1X2xlbik7CisgICAgRGJnUHJpbnQoIiogUlggYnJva2VuIHNlcT0lNGQsIGRpc3RhbmNlcz0lNGQsIGR1cGxpY2F0ZXM9JTRkXG4iLCB6bV9zdW1tYXJ5LnJ4X2Jyb2tlbl9zZXEsCisgICAgICAgIHptX3N1bW1hcnkucnhfYnJva2VuX3NlcV9kaXMsIHptX3N1bW1hcnkucnhfZHVwbGljYXRlX3NlcSk7CisgICAgRGJnUHJpbnQoIiogUlggICAgb2xkIHNlcT0lNGQsICAgICAgbG9zdD0lNGQsIGJyb2tlbiBzdW09JTRkXG4iLCB6bV9zdW1tYXJ5LnJ4X29sZF9zZXEsCisgICAgICAgICh6bV9zdW1tYXJ5LnJ4X2Jyb2tlbl9zZXEgLSB6bV9zdW1tYXJ5LnJ4X2R1cGxpY2F0ZV9zZXEgLSB6bV9zdW1tYXJ5LnJ4X29sZF9zZXEpLAorICAgICAgICB6bV9zdW1tYXJ5LnJ4X2Jyb2tlbl9zdW0pOworICAgIERiZ1ByaW50KCIqIFJ4ICAgbG9zdCBzdW09JTRkLGR1cC4gZXJyb3I9JTRkLCBmcmVlIGNvdW50PSU0ZFxuIiwgem1fc3VtbWFyeS5yeF9sb3N0X3N1bSwKKyAgICAgICAgem1fc3VtbWFyeS5yeF9kdXBsaWNhdGVfZXJyb3IsIHptX3N1bW1hcnkucnhfZnJlZSk7CisgICAgRGJnUHJpbnQoIiogUnggIGZsdXNoIHN1bT0lNGQsIGNsZWFyIHN1bT0lNGQsIHJlb3JkZXI9JTdkXG4iLCB6bV9zdW1tYXJ5LnJ4X2ZsdXNoLAorICAgICAgICB6bV9zdW1tYXJ5LnJ4X2NsZWFyLCB6bV9zdW1tYXJ5LnJ4X3Jlb3JkZXIpOworICAgIERiZ1ByaW50KCIqIEZpcm13YXJlIHJlc2V0PSUzZCwgcmVzZXQgc3VtPSU0ZFxuIiwgem1fc3VtbWFyeS5yZXNldF9jb3VudCwKKyAgICAgICAgem1fc3VtbWFyeS5yZXNldF9zdW0pOworICAgIERiZ1ByaW50KCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuIik7CisgICAgLy9yZXNldCBjb3VudCAxMTc3MmMKKyAgICB6bV9zdW1tYXJ5LnR4X21zZHVfY291bnQgPSAwOworICAgIHptX3N1bW1hcnkudHhfbXBkdV9jb3VudCA9IDA7CisgICAgem1fc3VtbWFyeS5yeF9tc2R1X2NvdW50ID0gMDsKKyAgICB6bV9zdW1tYXJ5LnJ4X21wZHVfY291bnQgPSAwOworICAgIHptX3N1bW1hcnkucnhfYnJva2VuX3NlcSA9IDA7CisgICAgem1fc3VtbWFyeS5yeF9icm9rZW5fc2VxX2RpcyA9IDA7CisgICAgem1fc3VtbWFyeS5yeF9kdXBsaWNhdGVfc2VxID0gMDsKKyAgICB6bV9zdW1tYXJ5LnJ4X29sZF9zZXEgPSAwOworICAgIHptX3N1bW1hcnkucmVzZXRfY291bnQgPSAwOworICAgIHptX3N1bW1hcnkucnhfYW1zZHVfbGVuID0gMDsKKworICAgIGZvciAoaT0wOyBpPDEwMDsgaSsrKQorICAgIHsKKyAgICAgICAgem1fdmFyLnR4X21zZHVfdGlja1tpXSA9IHptX3Zhci50eF9tcGR1X3RpY2tbaV0gPSAwOworICAgICAgICB6bV92YXIucnhfbXNkdV90aWNrW2ldID0gem1fdmFyLnJ4X21wZHVfdGlja1tpXSA9IDA7CisgICAgfQorCisgICAgemZUaW1lclNjaGVkdWxlKGRldiwgWk1fRVZFTlRfVElNRU9VVF9QRVJGT1JNQU5DRSwgMTAwKTsKK30KKwordm9pZCB6ZmlUeFBlcmZvcm1hbmNlTVNEVSh6ZGV2X3QqIGRldiwgdTMyX3QgdGljaykKK3sKKyAgICB1MzJfdCAgIGluZGV4OworICAgIHptX3N1bW1hcnkudHhfbXNkdV9jb3VudCsrOworCisgICAgaW5kZXggPSB0aWNrIC0gem1fc3VtbWFyeS50aWNrX2Jhc2U7CisKKyAgICBpZiAoaW5kZXggPCAxMDApCisgICAgeworICAgICAgICB6bV92YXIudHhfbXNkdV90aWNrW2luZGV4XSsrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvL0RiZ1ByaW50KCJ3ZC0+dGljayBleGNlZWRlZCB0aWNrX2Jhc2UrMTAwIVxuIik7CisgICAgfQorfQorCit2b2lkIHpmaVJ4UGVyZm9ybWFuY2VNU0RVKHpkZXZfdCogZGV2LCB1MzJfdCB0aWNrKQoreworICAgIHUzMl90ICAgaW5kZXg7CisgICAgem1fc3VtbWFyeS5yeF9tc2R1X2NvdW50Kys7CisKKyAgICBpbmRleCA9IHRpY2sgLSB6bV9zdW1tYXJ5LnRpY2tfYmFzZTsKKworICAgIGlmIChpbmRleCA8IDEwMCkKKyAgICB7CisgICAgICAgIHptX3Zhci5yeF9tc2R1X3RpY2tbaW5kZXhdKys7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vRGJnUHJpbnQoIndkLT50aWNrIGV4Y2VlZGVkIHRpY2tfYmFzZSsxMDAhXG4iKTsKKyAgICB9Cit9CisKK3ZvaWQgemZpVHhQZXJmb3JtYW5jZU1QRFUoemRldl90KiBkZXYsIHUzMl90IHRpY2spCit7CisgICAgdTMyX3QgICBpbmRleDsKKyAgICB6bV9zdW1tYXJ5LnR4X21wZHVfY291bnQrKzsKKworICAgIGluZGV4ID0gdGljayAtIHptX3N1bW1hcnkudGlja19iYXNlOworCisgICAgaWYgKGluZGV4IDwgMTAwKQorICAgIHsKKyAgICAgICAgem1fdmFyLnR4X21wZHVfdGlja1tpbmRleF0rKzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy9EYmdQcmludCgid2QtPnRpY2sgZXhjZWVkZWQgdGlja19iYXNlKzEwMCFcbiIpOworICAgIH0KK30KKworI2lmbmRlZiBaTV9JTlRfVVNFX0VQMl9IRUFERVJfU0laRQorI2RlZmluZSBaTV9JTlRfVVNFX0VQMl9IRUFERVJfU0laRSAgIDEyCisjZW5kaWYKK3ZvaWQgemZpUnhQZXJmb3JtYW5jZU1QRFUoemRldl90KiBkZXYsIHpidWZfdCogYnVmKQoreworICAgIHUzMl90ICAgaW5kZXg7CisgICAgdTE2X3QgICBmcmFtZVR5cGU7CisgICAgdTE2X3QgICBmcmFtZUN0cmw7CisgICAgdThfdCAgICBtcGR1SW5kOworICAgIHUxNl90ICAgcGxjcEhkckxlbjsKKyAgICB1MTZfdCAgIGxlbjsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGxlbiA9IHpmd0J1ZkdldFNpemUoZGV2LCBidWYpOworICAgIG1wZHVJbmQgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBsZW4tMSk7CisgICAgLyogRmlyc3QgTVBEVSBvciBTaW5nbGUgTVBEVSAqLworICAgIGlmKCgobXBkdUluZCAmIDB4MzApID09IDB4MDApIHx8ICgobXBkdUluZCAmIDB4MzApID09IDB4MjApKQorICAgIC8vaWYgKChtcGR1SW5kICYgMHgxMCkgPT0gMHgwMCkKKyAgICB7CisgICAgICAgIHBsY3BIZHJMZW4gPSAxMjsgICAgICAgIC8vIFBMQ1AgaGVhZGVyIGxlbmd0aAorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgNCkgPT0gd2QtPm1hY0FkZHJbMF0gJiYKKyAgICAgICAgICAgIHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDYpID09IHdkLT5tYWNBZGRyWzFdICYmCisgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCA4KSA9PSB3ZC0+bWFjQWRkclsyXSkgeworICAgICAgICAgICAgcGxjcEhkckxlbiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMTYpID09IHdkLT5tYWNBZGRyWzBdICYmCisgICAgICAgICAgICAgICAgIHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDE4KSA9PSB3ZC0+bWFjQWRkclsxXSAmJgorICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAyMCkgPT0gd2QtPm1hY0FkZHJbMl0peworICAgICAgICAgICAgcGxjcEhkckxlbiA9IDEyOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGxjcEhkckxlbiA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmcmFtZUN0cmwgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBwbGNwSGRyTGVuICsgMCk7CisgICAgZnJhbWVUeXBlID0gZnJhbWVDdHJsICYgMHhmOworCisgICAgaWYgKGZyYW1lVHlwZSAhPSBaTV9XTEFOX0RBVEFfRlJBTUUpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgem1fc3VtbWFyeS5yeF9tcGR1X2NvdW50Kys7CisKKyAgICBpbmRleCA9IHdkLT50aWNrIC0gem1fc3VtbWFyeS50aWNrX2Jhc2U7CisKKyAgICBpZiAoaW5kZXggPCAxMDApCisgICAgeworICAgICAgICB6bV92YXIucnhfbXBkdV90aWNrW2luZGV4XSsrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvL0RiZ1ByaW50KCJ3ZC0+dGljayBleGNlZWRlZCB0aWNrX2Jhc2UrMTAwIVxuIik7CisgICAgfQorfQorCit2b2lkIHpmaVJ4UGVyZm9ybWFuY2VTZXEoemRldl90KiBkZXYsIHpidWZfdCogYnVmKQoreworICAgIHUxNl90ICAgc2VxX25vOworICAgIHUxNl90ICAgb2Zmc2V0ID0gMDsKKyAgICB1MTZfdCAgIG9sZF9kaXMgPSB6bV9zdW1tYXJ5LnJ4X2Jyb2tlbl9zZXFfZGlzOworICAgIC8vc3lzX3RpbWUgPSBLZVF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKCZmcmVxKTsKKworICAgIHNlcV9ubyA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIG9mZnNldCsyMikgPj4gNDsKKworICAgIFpNX1NFUV9ERUJVRygiT3V0ICAgJTVkXG4iLCBzZXFfbm8pOworCisgICAgaWYgKHNlcV9ubyA8IHptX3N1bW1hcnkucnhfc2VxX2Jhc2UpCisgICAgeworICAgICAgICBpZiAoc2VxX25vID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh6bV9zdW1tYXJ5LnJ4X3NlcV9iYXNlICE9IDQwOTUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem1fc3VtbWFyeS5yeF9icm9rZW5fc2VxKys7CisgICAgICAgICAgICAgICAgWk1fU0VRX0RFQlVHKCJCcm9rZW4gc2VxIik7CisgICAgICAgICAgICAgICAgem1fc3VtbWFyeS5yeF9icm9rZW5fc2VxX2Rpcys9KDQwOTYgLSB6bV9zdW1tYXJ5LnJ4X3NlcV9iYXNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgoc2VxX25vIDwgMzAwKSAmJiAoem1fc3VtbWFyeS5yeF9zZXFfYmFzZSA+IDM4MDApKQorICAgICAgICB7CisgICAgICAgICAgICB6bV9zdW1tYXJ5LnJ4X2Jyb2tlbl9zZXErKzsKKyAgICAgICAgICAgIFpNX1NFUV9ERUJVRygiQnJva2VuIHNlcSIpOworICAgICAgICAgICAgem1fc3VtbWFyeS5yeF9icm9rZW5fc2VxX2Rpcys9KDQwOTYgLSB6bV9zdW1tYXJ5LnJ4X3NlcV9iYXNlICsgc2VxX25vKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHptX3N1bW1hcnkucnhfYnJva2VuX3NlcSsrOworICAgICAgICAgICAgWk1fU0VRX0RFQlVHKCJCcm9rZW4gc2VxIik7CisgICAgICAgICAgICB6bV9zdW1tYXJ5LnJ4X2Jyb2tlbl9zZXFfZGlzKz0oem1fc3VtbWFyeS5yeF9zZXFfYmFzZSAtIHNlcV9ubyk7CisgICAgICAgICAgICB6bV9zdW1tYXJ5LnJ4X29sZF9zZXErKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoc2VxX25vICE9ICh6bV9zdW1tYXJ5LnJ4X3NlcV9iYXNlICsgMSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgoc2VxX25vID4gMzgwMCkgJiYgKHptX3N1bW1hcnkucnhfc2VxX2Jhc2UgPCAzMDApKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHptX3N1bW1hcnkucnhfYnJva2VuX3NlcSsrOworICAgICAgICAgICAgICAgIFpNX1NFUV9ERUJVRygiQnJva2VuIHNlcSIpOworICAgICAgICAgICAgICAgIHptX3N1bW1hcnkucnhfYnJva2VuX3NlcV9kaXMrPSg0MDk2IC0gc2VxX25vICsgem1fc3VtbWFyeS5yeF9zZXFfYmFzZSk7CisgICAgICAgICAgICAgICAgem1fc3VtbWFyeS5yeF9vbGRfc2VxKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem1fc3VtbWFyeS5yeF9icm9rZW5fc2VxKys7CisgICAgICAgICAgICAgICAgWk1fU0VRX0RFQlVHKCJCcm9rZW4gc2VxIik7CisgICAgICAgICAgICAgICAgem1fc3VtbWFyeS5yeF9icm9rZW5fc2VxX2Rpcys9KHNlcV9ubyAtIHptX3N1bW1hcnkucnhfc2VxX2Jhc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChzZXFfbm8gPT0gem1fc3VtbWFyeS5yeF9zZXFfYmFzZSkKKyAgICB7CisgICAgICAgIHptX3N1bW1hcnkucnhfZHVwbGljYXRlX3NlcSsrOworICAgIH0KKworICAgIGlmICgoem1fc3VtbWFyeS5yeF9icm9rZW5fc2VxX2RpcyAtIG9sZF9kaXMpID4gMTAwKQorICAgIHsKKyAgICAgICAgRGJnUHJpbnQoIiogc2VxX25vPSU0ZCwgYmFzZV9zZXE9JTRkLCBkaXNfZGlmZj0lNGQiLCBzZXFfbm8sCisgICAgICAgICAgICB6bV9zdW1tYXJ5LnJ4X3NlcV9iYXNlLCB6bV9zdW1tYXJ5LnJ4X2Jyb2tlbl9zZXFfZGlzIC0gb2xkX2Rpcyk7CisgICAgfQorICAgIHptX3N1bW1hcnkucnhfc2VxX2Jhc2UgPSBzZXFfbm87Cit9CisKK3ZvaWQgemZpUnhQZXJmb3JtYW5jZVJlZyh6ZGV2X3QqIGRldiwgdTMyX3QgcmVnLCB1MzJfdCByc3ApCit7CisgICAgem1fc3VtbWFyeS5yZXNldF9jb3VudCA9ICh1MTZfdClyc3AgLSB6bV9zdW1tYXJ5LnJlc2V0X3N1bTsKKyAgICB6bV9zdW1tYXJ5LnJlc2V0X3N1bSA9ICh1MTZfdClyc3A7Cit9CisKK3ZvaWQgemZpUnhQZXJmb3JtYW5jZUR1cCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYxLCB6YnVmX3QqIGJ1ZjIpCit7CisgICAgdTE2X3QgICBzZXFfbm8xLCBzZXFfbm8yOworCisgICAgc2VxX25vMSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYxLCAyMikgPj4gNDsKKyAgICBzZXFfbm8yID0gem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZjIsIDIyKSA+PiA0OworICAgIGlmIChzZXFfbm8xICE9IHNlcV9ubzIpCisgICAgeworICAgICAgICB6bV9zdW1tYXJ5LnJ4X2R1cGxpY2F0ZV9lcnJvcisrOworICAgIH0KK30KKwordm9pZCB6ZmlSeFBlcmZvcm1hbmNlRnJlZSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgem1fc3VtbWFyeS5yeF9mcmVlKys7Cit9CisKK3ZvaWQgemZpUnhQZXJmb3JtYW5jZUFNU0RVKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgbGVuKQoreworICAgIGlmICh6bV9zdW1tYXJ5LnJ4X2Ftc2R1X2xlbiA8IGxlbikKKyAgICB7CisgICAgICAgIHptX3N1bW1hcnkucnhfYW1zZHVfbGVuID0gbGVuOworICAgIH0KK30KK3ZvaWQgemZpUnhQZXJmb3JtYW5jZUZsdXNoKHpkZXZfdCogZGV2KQoreworICAgIHptX3N1bW1hcnkucnhfZmx1c2grKzsKK30KKwordm9pZCB6ZmlSeFBlcmZvcm1hbmNlQ2xlYXIoemRldl90KiBkZXYpCit7CisgICAgem1fc3VtbWFyeS5yeF9jbGVhcisrOworICAgIFpNX1NFUV9ERUJVRygiUnhDbGVhciIpOworfQorCit2b2lkIHpmaVJ4UGVyZm9ybWFuY2VSZW9yZGVyKHpkZXZfdCogZGV2KQoreworICAgIHptX3N1bW1hcnkucnhfcmVvcmRlcisrOworfQorI2VuZGlmIC8qIGVuZCBvZiBaTV9FTkFCTEVfUEVSRk9STUFOQ0VfRVZBTFVBVElPTiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL3BlcmZvcm1hbmNlLmggYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvcGVyZm9ybWFuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWY2NThhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL3BlcmZvcm1hbmNlLmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisjaWZuZGVmIF9QRVJGT1JNQU5DRV9ICisjZGVmaW5lIF9QRVJGT1JNQU5DRV9ICisKKyNpZmRlZiBaTV9FTkFCTEVfUEVSRk9STUFOQ0VfRVZBTFVBVElPTgorCitzdHJ1Y3QgenNTdW1tYXJ5Cit7CisgICAgdTMyX3QgdHhfbXNkdV9jb3VudDsKKyAgICB1MzJfdCB0eF9tcGR1X2NvdW50OworICAgIHUzMl90IHJ4X21zZHVfY291bnQ7CisgICAgdTMyX3QgcnhfbXBkdV9jb3VudDsKKyAgICB1MzJfdCB0aWNrX2Jhc2U7CisgICAgdTE2X3Qgcnhfc2VxX2Jhc2U7CisgICAgdTE2X3QgcnhfYnJva2VuX3NlcTsKKyAgICB1MTZfdCByeF9icm9rZW5fc3VtOworICAgIHUxNl90IHJ4X2Jyb2tlbl9zZXFfZGlzOworICAgIHUxNl90IHJ4X2R1cGxpY2F0ZV9zZXE7CisgICAgdTE2X3QgcnhfZHVwbGljYXRlX2Vycm9yOworICAgIHUxNl90IHJ4X29sZF9zZXE7CisgICAgdTE2X3QgcnhfbG9zdF9zdW07CisgICAgdTE2X3QgdHhfaWRsZV9jb3VudDsKKyAgICB1MTZfdCByeF9pZGxlX2NvdW50OworICAgIHUxNl90IHJlc2V0X2NvdW50OworICAgIHUxNl90IHJlc2V0X3N1bTsKKyAgICB1MTZfdCByeF9mcmVlOworICAgIHUxNl90IHJ4X2Ftc2R1X2xlbjsKKyAgICB1MTZfdCByeF9mbHVzaDsKKyAgICB1MTZfdCByeF9jbGVhcjsKKyAgICB1MzJfdCByeF9yZW9yZGVyOworfTsKKworc3RydWN0IHpzVmFyaWF0aW9uCit7CisgICAgdTMyX3QgdHhfbXNkdV90aWNrWzEwMF07CisgICAgdTMyX3QgdHhfbXBkdV90aWNrWzEwMF07CisgICAgdTMyX3QgcnhfbXNkdV90aWNrWzEwMF07CisgICAgdTMyX3QgcnhfbXBkdV90aWNrWzEwMF07CisKKyAgICB1MzJfdCB0eF9tc2R1X21lYW47CisgICAgdTMyX3QgdHhfbXBkdV9tZWFuOworICAgIHUzMl90IHJ4X21zZHVfbWVhbjsKKyAgICB1MzJfdCByeF9tcGR1X21lYW47CisKKyAgICB1MzJfdCB0eF9tc2R1X3N1bTsKKyAgICB1MzJfdCB0eF9tcGR1X3N1bTsKKyAgICB1MzJfdCByeF9tc2R1X3N1bTsKKyAgICB1MzJfdCByeF9tcGR1X3N1bTsKKworICAgIHUzMl90IHR4X21zZHVfdmFyOworICAgIHUzMl90IHR4X21wZHVfdmFyOworICAgIHUzMl90IHJ4X21zZHVfdmFyOworICAgIHUzMl90IHJ4X21wZHVfdmFyOworfTsKKworc3RydWN0IHpzVGhyb3VnaHB1dAoreworICAgIHUzMl90IHR4WzUwXTsKKyAgICB1MzJfdCByeFs1MF07CisgICAgdTE2X3QgaGVhZDsKKyAgICB1MTZfdCB0YWlsOworICAgIHUxNl90IHNpemU7CisgICAgTEFSR0VfSU5URUdFUiBzeXNfdGltZTsKKyAgICBMQVJHRV9JTlRFR0VSIGZyZXE7Cit9OworCit2b2lkIHpmaVBlcmZvcm1hbmNlSW5pdCh6ZGV2X3QqIGRldik7Cit2b2lkIHpmaVBlcmZvcm1hbmNlUmVmcmVzaCh6ZGV2X3QqIGRldik7CisKK3ZvaWQgemZpVHhQZXJmb3JtYW5jZU1TRFUoemRldl90KiBkZXYsIHUzMl90IHRpY2spOwordm9pZCB6ZmlSeFBlcmZvcm1hbmNlTVNEVSh6ZGV2X3QqIGRldiwgdTMyX3QgdGljayk7Cit2b2lkIHpmaVR4UGVyZm9ybWFuY2VNUERVKHpkZXZfdCogZGV2LCB1MzJfdCB0aWNrKTsKK3ZvaWQgemZpUnhQZXJmb3JtYW5jZU1QRFUoemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKK3ZvaWQgemZpUnhQZXJmb3JtYW5jZVNlcSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOwordm9pZCB6ZmlSeFBlcmZvcm1hbmNlUmVnKHpkZXZfdCogZGV2LCB1MzJfdCByZWcsIHUzMl90IHJzcCk7Cit2b2lkIHpmaVJ4UGVyZm9ybWFuY2VEdXAoemRldl90KiBkZXYsIHpidWZfdCogYnVmMSwgemJ1Zl90KiBidWYyKTsKK3ZvaWQgemZpUnhQZXJmb3JtYW5jZUZyZWUoemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKK3ZvaWQgemZpUnhQZXJmb3JtYW5jZUFNU0RVKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgbGVuKTsKK3ZvaWQgemZpUnhQZXJmb3JtYW5jZUZsdXNoKHpkZXZfdCogZGV2KTsKK3ZvaWQgemZpUnhQZXJmb3JtYW5jZUNsZWFyKHpkZXZfdCogZGV2KTsKK3ZvaWQgemZpUnhQZXJmb3JtYW5jZVJlb3JkZXIoemRldl90KiBkZXYpOworI2VuZGlmIC8qIGVuZCBvZiBaTV9FTkFCTEVfUEVSRk9STUFOQ0VfRVZBTFVBVElPTiAqLworI2VuZGlmIC8qIGVuZCBvZiBfUEVSRk9STUFOQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL3B1Yl91c2IuaCBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9wdWJfdXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiNGJkMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9wdWJfdXNiLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9QVUJfVVNCX0gKKyNkZWZpbmUgX1BVQl9VU0JfSAorCisjaW5jbHVkZSAiLi4vb2FsX2R0LmgiCisKKyNkZWZpbmUgWk1fSEFMXzgwMjExX01PREVfQVAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgWk1fSEFMXzgwMjExX01PREVfU1RBICAgICAgICAgICAgIDEKKyNkZWZpbmUgWk1fSEFMXzgwMjExX01PREVfSUJTU19HRU5FUkFMICAgIDIKKyNkZWZpbmUgWk1fSEFMXzgwMjExX01PREVfSUJTU19XUEEyUFNLICAgIDMKKworLyogVVNCIG1vZHVsZSBkZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFF1ZXVlIE1hbmFnZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA4MDIxMWNvcmUgcmVxdWlyZXMgT0FMIHRvIGltcGxlbWVudCBhIHRyYW5zbWlzc2lvbiBxdWV1ZSBpbiBPQUwncyAgICAqLworLyogVVNCIG1vZHVsZS4gQmVjYXVzZSB0aGVyZSBpcyBvbmx5IGxpbWl0ZWQgb24tY2hpcCBtZW1vcnksIHNvIFVTQiAgICAgKi8KKy8qIGRhdGEgdHJhbnNmZXIgbWF5IGJlIHBlbmRpbmcgdW50aWwgb24tY2hpcCBtZW1vcnkgaXMgYXZhaWxhYmxlLiAgICAgICovCisvKiA4MDIxMWNvcmUgYWxzbyByZXF1aXJlcyBPQUwncyBVU0IgbW9kdWxlIHRvIHByb3ZpZGUgdHdvIGZ1bmN0aW9ucyAgICAqLworLyogemZ3VXNiR2V0RnJlZVR4UVNpemUoKSBhbmQgemZ3VXNiR2V0TWF4VHhRU2l6ZSgpIGZvciA4MDIxMWNvcmUgdG8gICAgKi8KKy8qIHF1ZXJ5IHRoZSBzdGF0dXMgb2YgdGhpcyB0cmFuc21pc3Npb24gcXVldWUuIFRoZSBtYWluIHB1cnBvc2Ugb2YgICAgICovCisvKiB0aGlzIHF1ZXVlIGlzIGZvciBRb1MvV01NLiBUaG91Z2ggdGhlcmUgYXJlIGhhcmR3YXJlIHByaW9yaXR5ICAgICAgICAqLworLyogcXVldWVzIG9uIHRoZSBjaGlwLCBhbmQgYWxzbyBzb2Z0d2FyZSBwcmlvcml0eSBxdWV1ZXMgaW4gdGhlICAgICAgICAgKi8KKy8qIDgwMjExY29yZS4gVGhlcmUgaXMgc3RpbGwgb25lIGFuZCBvbmx5IG9uZSBVU0IgY2hhbm5lbC4gU28gICAgICAgICAgICovCisvKiA4MDIxMWNvcmUgd2lsbCB1c2UgdGhlIGluZm9ybWF0aW9uIHRoYXQgemZ3VXNiR2V0RnJlZVR4UVNpemUoKSAgICAgICAqLworLyogcmV0dXJuZWQgdG8gc2NoZWR1bGUgdGhlIHRyYWZmaWMgZnJvbSB0aGUgc29mdHdhcmUgcHJpb3JpdHkgICAgICAgICAgKi8KKy8qIHF1ZXVlcyB0byB0aGUgaGFyZHdhcmUgcHJpb3JpdHkgcXVldWVzLiBGb3IgZXhhbXBsZSwgaWYgODAyMTFjb3JlICAgICovCisvKiBmb3VuZCB0aGF0IFVTQiB0cmFuc21pc3Npb24gcXVldWUgaXMgZ29pbmcgdG8gYmUgZnVsbCwgaXQgd2lsbCAgICAgICAqLworLyogbm90IGFsbG93IHBhY2tldHMgd2l0aCBsb3dlciBwcmlvcml0eSB0byBlbnRlciB0aGUgVVNCIGNoYW5uZWwuICAgICAgKi8KKworCisvKiBTdHJ1Y3R1cmUgZm9yIFVTQiBjYWxsIGJhY2sgZnVuY3Rpb25zICovCitzdHJ1Y3QgemZDYlVzYkZ1bmNUYmwgeworICAgIHZvaWQgKCp6ZmNiVXNiUmVjdikoemRldl90ICpkZXYsIHpidWZfdCAqYnVmKTsKKyAgICB2b2lkICgqemZjYlVzYlJlZ0luKSh6ZGV2X3QqIGRldiwgdTMyX3QqIHJzcCwgdTE2X3QgcnNwTGVuKTsKKyAgICB2b2lkICgqemZjYlVzYk91dENvbXBsZXRlKSh6ZGV2X3QqIGRldiwgemJ1Zl90ICpidWYsIHU4X3Qgc3RhdHVzLCB1OF90ICpoZHIpOworICAgIHZvaWQgKCp6ZmNiVXNiUmVnT3V0Q29tcGxldGUpKHpkZXZfdCogZGV2KTsKK307CisKKy8qIENhbGwgYmFjayBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBCZWxvdyBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlIE9BTCAgICAgICAgICAgICAqLworCisvKiBXaGVuIGRhdGEgaXMgYXZhaWxhYmxlIGluIGVuZHBvaW50IDMsIE9BTCBzaGFsbCBlbWJlZCB0aGUgZGF0YSBpbiAqLworLyogemJ1Zl90IGFuZCBzdXBwbHkgdG8gODAyMTFjb3JlIGJ5IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiAgICAgICAgICAgKi8KKy8qIHZvaWQgKCp6ZmNiVXNiUmVjdikoemRldl90ICpkZXYsIHpidWZfdCAqYnVmKTsgKi8KKworLyogV2hlbiBkYXRhIGlzIGF2YWlsYWJsZSBpbiBlbmRwb2ludCAyLCBPQUwgc2hhbGwgY2FsbCB0aGlzIGZ1bmN0aW9uICovCisvKiB2b2lkICgqemZjYlVzYlJlZ0luKSh6ZGV2X3QqIGRldiwgdTMyX3QqIHJzcCwgdTE2X3QgcnNwTGVuKTsgKi8KKworLyogV2hlbiBVU0IgZGF0YSB0cmFuc2ZlciBjb21wbGV0ZWQgaW4gZW5kcG9pbnQgMSwgT0FMIHNoYWxsIGNhbGwgdGhpcyBmdW5jdGlvbiAqLworLyogdm9pZCAoKnpmY2JVc2JPdXRDb21wbGV0ZSkoemRldl90KiBkZXYsIHpidWZfdCAqYnVmLCB1OF90IHN0YXR1cywgdThfdCAqaGRyKTsgKi8KKworCisvKiBDYWxsIG91dCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogQmVsb3cgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBzdXBwbHkgYnkgdGhlIE9BTCBmb3IgODAyMTFjb3JlIHRvICAgICAgKi8KKy8qIG1hbmlwdWxhdGUgdGhlIFVTQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIFJldHVybiBPQUwncyBVU0IgVHhRIHNpemUgKi8KK2V4dGVybiB1MzJfdCB6ZndVc2JHZXRNYXhUeFFTaXplKHpkZXZfdCogZGV2KTsKKworLyogUmV0dXJuIE9BTCdzIFR4USBhdmFpbGFibGUgc2l6ZSAqLworZXh0ZXJuIHUzMl90IHpmd1VzYkdldEZyZWVUeFFTaXplKHpkZXZfdCogZGV2KTsKKworLyogUmVnaXN0ZXIgY2FsbCBiYWNrIGZ1bmN0aW9uICovCitleHRlcm4gdm9pZCB6ZndVc2JSZWdpc3RlckNhbGxCYWNrKHpkZXZfdCogZGV2LCBzdHJ1Y3QgemZDYlVzYkZ1bmNUYmwgKnpmVXNiRnVuYyk7CisKKy8qIEVuYWJsZSBVU0IgaW50ZXJydXB0IGVuZHBvaW50ICovCitleHRlcm4gdTMyX3QgemZ3VXNiRW5hYmxlSW50RXB0KHpkZXZfdCAqZGV2LCB1OF90IGVuZHB0KTsKKworLyogRW5hYmxlIFVTQiBSeCBlbmRwb2ludCAqLworZXh0ZXJuIGludCB6ZndVc2JFbmFibGVSeEVwdCh6ZGV2X3QqIGRldiwgdThfdCBlbmRwdCk7CisKKy8qIDgwMjExY29yZSBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gc2VuZCBhIFVTQiByZXF1ZXN0IG92ZXIgZW5kcG9pbnQgMCAqLworZXh0ZXJuIHUzMl90IHpmd1VzYlN1Ym1pdENvbnRyb2woemRldl90KiBkZXYsIHU4X3QgcmVxLCB1MTZfdCB2YWx1ZSwKKyAgICAgICAgdTE2X3QgaW5kZXgsIHZvaWQgKmRhdGEsIHUzMl90IHNpemUpOworZXh0ZXJuIHUzMl90IHpmd1VzYlN1Ym1pdENvbnRyb2xJbyh6ZGV2X3QqIGRldiwgdThfdCByZXEsIHU4X3QgcmVxdHlwZSwKKyAgICAgICAgdTE2X3QgdmFsdWUsIHUxNl90IGluZGV4LCB2b2lkICpkYXRhLCB1MzJfdCBzaXplKTsKKworLyogODAyMTFjb3JlIGNhbGwgdGhpcyBmdW5jdGlvbiB0byB0cmFuc2ZlciBkYXRhIG91dCBvdmVyIGVuZHBvaW50IDEgKi8KK2V4dGVybiB2b2lkIHpmd1VzYkNtZCh6ZGV2X3QqIGRldiwgdThfdCBlbmRwdCwgdTMyX3QqIGNtZCwgdTE2X3QgY21kTGVuKTsKKworLyogODAyMTFjb3JlIGNhbGwgdGhpcyBmdW5jdGlvbiB0byB0cmFuc2ZlciBkYXRhIG91dCBvdmVyIGVuZHBvaW50IDQgKi8KK2V4dGVybiB1MzJfdCB6ZndVc2JTZW5kKHpkZXZfdCogZGV2LCB1OF90IGVuZHB0LCB1OF90ICpoZHIsIHUxNl90IGhkcmxlbiwgdThfdCAqc25hcCwgdTE2X3Qgc25hcExlbiwKKyAgICAgICAgICAgICAgICB1OF90ICp0YWlsLCB1MTZfdCB0YWlsTGVuLCB6YnVmX3QgKmJ1ZiwgdTE2X3Qgb2Zmc2V0KTsKKworLyogODAyMTFjb3JlIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBzZXQgVVNCIGNvbmZpZ3VyYXRpb24gKi8KK2V4dGVybiB1MzJfdCB6ZndVc2JTZXRDb25maWd1cmF0aW9uKHpkZXZfdCAqZGV2LCB1MTZfdCB2YWx1ZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL3B1Yl96ZmkuaCBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9wdWJfemZpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM1YmQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9wdWJfemZpLmgKQEAgLTAsMCArMSw4MjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9QVUJfREVGU19ICisjZGVmaW5lIF9QVUJfREVGU19ICisKKyNpbmNsdWRlICIuLi9vYWxfZHQuaCIKKworLyoqKioqIFNlY3Rpb24gMSA6IFR1bmFibGUgUGFyYW1ldGVycyAqKioqKi8KKy8qIFRoZSBkZWZpbnRpb25zIGluIHRoaXMgc2VjdGlvbiBhcmUgdHVuYWJlbCBwYXJhbWV0ZXJzICovCisKKy8qIE1heGltdW0gbnVtYmVyIG9mIEJTUyB0aGF0IGNvdWxkIGJlIHNjYW5lZCAqLworI2RlZmluZSBaTV9NQVhfQlNTICAgICAgICAgICAgICAgICAgICAgICAgICAxMjgKKworLyogTWF4aW11bSBudW1iZXIgb2YgV1BBMiBQTUtJRCB0aGF0IHN1cHBvcnRlZCAqLworI2RlZmluZSBaTV9QTUtJRF9NQVhfQlNTX0NOVCAgICAgICAgICAgICAgIDgKKworLyogRW5hYmxlIGFnZ3JlZ2F0aW9uIGFuZCBkZWFnZ3JlZ2F0aW9uICovCisjZGVmaW5lIFpNX0VOQUJMRV9BR0dSRUdBVElPTgorCisjaWZkZWYgWk1fRU5BQkxFX0FHR1JFR0FUSU9OCisgICAgLyogRW5hYmxlIEJBIGZhaWxlZCByZXRyYW5zbWlzc2lvbiBpbiBmaXJtd2FyZSAqLworICAgICNkZWZpbmUgWk1fRU5BQkxFX0ZXX0JBX1JFVFJBTlNNSVNTSU9OCisgICAgI2RlZmluZSBaTV9CWVBBU1NfQUdHUl9TQ0hFRFVMSU5HCisgICAgLy8jZGVmaW5lIFpNX0FHR1JfQklUX09OCisjZW5kaWYKKworCisjaWZuZGVmIFpNX0ZCNTAKKy8vI2RlZmluZSBaTV9GQjUwCisjZW5kaWYKKworI2lmbmRlZiBaTV9BUF9ERUJVRworLy8jZGVmaW5lIFpNX0FQX0RFQlVHCisjZW5kaWYKKworLy8jZGVmaW5lIFpNX0VOQUJMRV9CQV9SQVRFQ1RSTAorCisvKioqKiogRW5kIG9mIHNlY3Rpb24gMSAqKioqKi8KKworCisvKioqKiogU2VjdGlvbiAyIDogUHVibGljIERlZmluaXRpb25zLCBkYXRhIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMgKioqKiovCisvKiBmdW5jdGlvbiByZXR1cm4gc3RhdHVzICovCisjZGVmaW5lIFpNX1NUQVRVU19TVUNDRVNTICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgWk1fU1RBVFVTX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgMQorCisvLyBtZWRpYSBjb25uZWN0IHN0YXR1cworI2RlZmluZSBaTV9TVEFUVVNfTUVESUFfQ09OTkVDVCAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFpNX1NUQVRVU19NRURJQV9ESVNDT05ORUNUICAgICAgICAgIDB4MDEKKyNkZWZpbmUgWk1fU1RBVFVTX01FRElBX0RJU0NPTk5FQ1RfTk9UX0ZPVU5EICAgIDB4MDIKKyNkZWZpbmUgWk1fU1RBVFVTX01FRElBX0RJU0FCTEVEICAgICAgICAgICAgMHgwMworI2RlZmluZSBaTV9TVEFUVVNfTUVESUFfQ09OTkVDVElPTl9ESVNBQkxFRCAweDA0CisjZGVmaW5lIFpNX1NUQVRVU19NRURJQV9DT05ORUNUSU9OX1JFU0VUICAgIDB4MDUKKyNkZWZpbmUgWk1fU1RBVFVTX01FRElBX1JFU0VUICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBaTV9TVEFUVVNfTUVESUFfRElTQ09OTkVDVF9ERUFVVEggICAweDA3CisjZGVmaW5lIFpNX1NUQVRVU19NRURJQV9ESVNDT05ORUNUX0RJU0FTT0MgIDB4MDgKKyNkZWZpbmUgWk1fU1RBVFVTX01FRElBX0RJU0NPTk5FQ1RfVElNRU9VVCAgMHgwOQorI2RlZmluZSBaTV9TVEFUVVNfTUVESUFfRElTQ09OTkVDVF9BVVRIX0ZBSUxFRCAgMHgwYQorI2RlZmluZSBaTV9TVEFUVVNfTUVESUFfRElTQ09OTkVDVF9BU09DX0ZBSUxFRCAgMHgwYgorI2RlZmluZSBaTV9TVEFUVVNfTUVESUFfRElTQ09OTkVDVF9NSUNfRkFJTCAgIDB4MGMKKyNkZWZpbmUgWk1fU1RBVFVTX01FRElBX0RJU0NPTk5FQ1RfVU5SRUFDSEFCTEUgMHgwZAorI2RlZmluZSBaTV9TVEFUVVNfTUVESUFfRElTQ09OTkVDVF9CRUFDT05fTUlTUyAgMHgwZQorCisvLyBQYWNrZXQgRmlsdGVyCisjZGVmaW5lIFpNX1BBQ0tFVF9UWVBFX0RJUkVDVEVEICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgWk1fUEFDS0VUX1RZUEVfTVVMVElDQVNUICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBaTV9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFpNX1BBQ0tFVF9UWVBFX0JST0FEQ0FTVCAgICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgWk1fUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMgICAgICAgICAgMHgwMDAwMDAyMAorCisvKiBCU1MgbW9kZSBkZWZpbml0aW9uICovCisvKiBUT0RPIDogVGhlIGRlZmluaXRpb25zIGhlcmUgYXJlIGNvdXBsZWQgd2l0aCBYUCdzIE5ESVMgT0lELiAqLworLyogICAgICAgIFdlIGNhbid0IGJlIGNoYW5nZWQgdGhlbSBmcmVlbHksIG5lZWQgdG8gZGlzYXJtIHRoaXMgbWluZSAqLworI2RlZmluZSBaTV9NT0RFX0lCU1MgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFpNX01PREVfSU5GUkFTVFJVQ1RVUkUgICAgICAgICAgICAgIDEKKyNkZWZpbmUgWk1fTU9ERV9VTktOT1dOICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFX01BWCAgICAgICAgICAzCisjZGVmaW5lIFpNX01PREVfQVAgICAgICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgWk1fTU9ERV9QU0VVRE8gICAgICAgICAgICAgICAgICAgICAgNQorCisKKy8qIEF1dGhlbnRpY2F0aW9uIG1vZGUgKi8KKyNkZWZpbmUgWk1fQVVUSF9NT0RFX09QRU4gICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBaTV9BVVRIX01PREVfU0hBUkVEX0tFWSAgICAgICAgICAgICAxCisjZGVmaW5lIFpNX0FVVEhfTU9ERV9BVVRPICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgWk1fQVVUSF9NT0RFX1dQQSAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBaTV9BVVRIX01PREVfV1BBUFNLICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFpNX0FVVEhfTU9ERV9XUEFfTk9ORSAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgWk1fQVVUSF9NT0RFX1dQQTIgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBaTV9BVVRIX01PREVfV1BBMlBTSyAgICAgICAgICAgICAgICA3CisjaWZkZWYgWk1fRU5BQkxFX0NFTkMKKyNkZWZpbmUgWk1fQVVUSF9NT0RFX0NFTkMgICAgICAgICAgICAgICAgICAgOAorI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKKyNkZWZpbmUgWk1fQVVUSF9NT0RFX1dQQV9BVVRPICAgICAgICAgICAgICAgOQorI2RlZmluZSBaTV9BVVRIX01PREVfV1BBUFNLX0FVVE8gICAgICAgICAgICAxMAorCisvLyBFbmNyeXB0aW9uIG1vZGUKKyNkZWZpbmUgWk1fTk9fV0VQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIFpNX0FFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NAorI2RlZmluZSBaTV9US0lQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgWk1fV0VQNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lIFpNX1dFUDEyOCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NQorI2RlZmluZSBaTV9XRVAyNTYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYKKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQworI2RlZmluZSBaTV9DRU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcKKyNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCisKKy8qIEVuY3J5cHRpb24gdHlwZSBmb3Igd2VwIHN0YXR1cyAqLworI2RlZmluZSBaTV9FTkNSWVBUSU9OX1dFUF9ESVNBQkxFRCAgICAgICAgICAwCisjZGVmaW5lIFpNX0VOQ1JZUFRJT05fV0VQX0VOQUJMRUQgICAgICAgICAgIDEKKyNkZWZpbmUgWk1fRU5DUllQVElPTl9XRVBfS0VZX0FCU0VOVCAgICAgICAgMgorI2RlZmluZSBaTV9FTkNSWVBUSU9OX05PVF9TVVBQT1JURUQgICAgICAgICAzCisjZGVmaW5lIFpNX0VOQ1JZUFRJT05fVEtJUCAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgWk1fRU5DUllQVElPTl9US0lQX0tFWV9BQlNFTlQgICAgICAgNQorI2RlZmluZSBaTV9FTkNSWVBUSU9OX0FFUyAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFpNX0VOQ1JZUFRJT05fQUVTX0tFWV9BQlNFTlQgICAgICAgIDcKKworI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisjZGVmaW5lIFpNX0VOQ1JZUFRJT05fQ0VOQyAgICAgICAgICAgICAgICAgIDgKKyNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCisKKy8qIHNlY3VyaXR5IHR5cGUgKi8KKyNkZWZpbmUgWk1fU0VDVVJJVFlfVFlQRV9OT05FICAgICAgICAgICAgICAgMAorI2RlZmluZSBaTV9TRUNVUklUWV9UWVBFX1dFUCAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFpNX1NFQ1VSSVRZX1RZUEVfV1BBICAgICAgICAgICAgICAgIDIKKworI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisjZGVmaW5lIFpNX1NFQ1VSSVRZX1RZUEVfQ0VOQyAgICAgICAgICAgICAgIDMKKyNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCisKKy8qIEVuY3J5cHRpb24gRXhlbXB0aW9uIEFjdGlvbiBUeXBlICAqLworI2RlZmluZSBaTV9FTkNSWVBUSU9OX0VYRU1QVF9OT19FWEVNUFRJT04gICAwCisjZGVmaW5lIFpNX0VOQ1JZUFRJT05fRVhFTVBUX0FMV0FZUyAgICAgICAgIDEKKworLyogTUlDIGZhaWx1cmUgKi8KKyNkZWZpbmUgWk1fTUlDX1BBSVJXSVNFX0VSUk9SICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBaTV9NSUNfR1JPVVBfRVJST1IgICAgICAgICAgICAgICAgICAweDBFCisKKworLyogcG93ZXIgc2F2ZSBtb2RlICovCisjZGVmaW5lIFpNX1NUQV9QU19OT05FICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFpNX1NUQV9QU19NQVggICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFpNX1NUQV9QU19GQVNUICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFpNX1NUQV9QU19MSUdIVCAgICAgICAgICAgICAgICAgICAzCisKKy8qIFdNRSBBQyBUeXBlICovCisjZGVmaW5lIFpNX1dNRV9BQ19CSyAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgLyogQmFja2dyb3VuZCBBQyAqLworI2RlZmluZSBaTV9XTUVfQUNfQkUgICAgICAgICAgICAgICAgICAgICAgICAxICAgICAgIC8qIEJlc3QtZWZmb3J0IEFDICovCisjZGVmaW5lIFpNX1dNRV9BQ19WSURFTyAgICAgICAgICAgICAgICAgICAgIDIgICAgICAgLyogVmlkZW8gQUMgKi8KKyNkZWZpbmUgWk1fV01FX0FDX1ZPSUNFICAgICAgICAgICAgICAgICAgICAgMyAgICAgICAvKiBWb2ljZSBBQyAqLworCisvKiBQcmVhbWJsZSB0eXBlICovCisjZGVmaW5lIFpNX1BSRUFNQkxFX1RZUEVfQVVUTyAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgWk1fUFJFQU1CTEVfVFlQRV9MT05HICAgICAgICAgICAgICAgMQorI2RlZmluZSBaTV9QUkVBTUJMRV9UWVBFX1NIT1JUICAgICAgICAgICAgICAyCisKKy8qIHdpcmVsZXNzIG1vZGVzIGNvbnN0YW50cyAqLworI2RlZmluZSBaTV9XSVJFTEVTU19NT0RFXzVfNTQgICAgICAgIDB4MDEgICAvLy88IDUgR0h6IDU0IE1icHMKKyNkZWZpbmUgWk1fV0lSRUxFU1NfTU9ERV81XzEwOCAgICAgICAweDAyICAgLy8vPCA1IEdIeiAxMDggTWJwcworI2RlZmluZSBaTV9XSVJFTEVTU19NT0RFXzI0XzExICAgICAgIDB4MDQgICAvLy88IDIuNCBHSHogMTEgTWJwcworI2RlZmluZSBaTV9XSVJFTEVTU19NT0RFXzI0XzU0ICAgICAgIDB4MDggICAvLy88IDIuNCBHSHogNTQgTWJwcworI2RlZmluZSBaTV9XSVJFTEVTU19NT0RFXzI0XzEwOCAgICAgIDB4MTAgICAvLy88IDIuNCBHSHogMTA4IE1icHMKKyNkZWZpbmUgWk1fV0lSRUxFU1NfTU9ERV80OV8xMyAgICAgIDB4MTAwICAgLy8vPCA0LjkgR0h6IDEzLjUgTWJwcywgcXVhcnRlciByYXRlIGNobi1iYW5kd2lkdGggPSA1CisjZGVmaW5lIFpNX1dJUkVMRVNTX01PREVfNDlfMjcgICAgICAweDIwMCAgIC8vLzwgNC45IEdIeiAyNyBNYnBzLCBoYWxmIHJhdGUgY2huLWJhbmR3aWR0aCA9IDEwCisjZGVmaW5lIFpNX1dJUkVMRVNTX01PREVfNDlfNTQgICAgICAweDQwMCAgIC8vLzwgNC45IEdIeiA1NCBNYnBzLCBmdWxsIHJhdGUgY2huLWJhbmR3aWR0aCA9IDIwCisjZGVmaW5lIFpNX1dJUkVMRVNTX01PREVfNV8zMDAgICAgIDB4MTAwMCAgIC8vLzwgNSBHSHogMzAwIE1icHMKKyNkZWZpbmUgWk1fV0lSRUxFU1NfTU9ERV8yNF8zMDAgICAgMHgyMDAwICAgLy8vPCAyLjQgR0h6IDMwMCBNYnBzCisjZGVmaW5lIFpNX1dJUkVMRVNTX01PREVfNV8xMzAgICAgIDB4NDAwMCAgIC8vLzwgNSBHSHogMTMwIE1icHMKKyNkZWZpbmUgWk1fV0lSRUxFU1NfTU9ERV8yNF8xMzAgICAgMHg4MDAwICAgLy8vPCAyLjQgR0h6IDEzMCBNYnBzCisKKyNkZWZpbmUgWk1fV0lSRUxFU1NfTU9ERV8yNF9OICAgICAgKFpNX1dJUkVMRVNTX01PREVfMjRfMTMwfFpNX1dJUkVMRVNTX01PREVfMjRfMzAwKQorI2RlZmluZSBaTV9XSVJFTEVTU19NT0RFXzVfTiAgICAgICAoWk1fV0lSRUxFU1NfTU9ERV81XzEzMHxaTV9XSVJFTEVTU19NT0RFXzVfMzAwKQorI2RlZmluZSBaTV9XSVJFTEVTU19NT0RFXzI0ICAgICAgICAoWk1fV0lSRUxFU1NfTU9ERV8yNF8xMXxaTV9XSVJFTEVTU19NT0RFXzI0XzU0fFpNX1dJUkVMRVNTX01PREVfMjRfTikKKyNkZWZpbmUgWk1fV0lSRUxFU1NfTU9ERV81ICAgICAgICAgKFpNX1dJUkVMRVNTX01PREVfNV81NHxaTV9XSVJFTEVTU19NT0RFXzVfTikKKworLyogQWRIb2MgTW9kZSB3aXRoIGRpZmZlcmVudCBiYW5kICovCisjZGVmaW5lIFpNX0FESE9DQkFORF9BICAgICAgICAgMQorI2RlZmluZSBaTV9BREhPQ0JBTkRfQiAgICAgICAgIDIKKyNkZWZpbmUgWk1fQURIT0NCQU5EX0cgICAgICAgICAzCisjZGVmaW5lIFpNX0FESE9DQkFORF9CRyAgICAgICAgNAorI2RlZmluZSBaTV9BREhPQ0JBTkRfQUJHICAgICAgIDUKKworLyogQXV0aGVudGljYXRpb24gYWxnb3JpdGhtIGluIHRoZSBmaWVsZCBhbGdObyBvZiBhdXRoZW50aWNhdGlvbiBmcmFtZXMgKi8KKyNkZWZpbmUgWk1fQVVUSF9BTEdPX09QRU5fU1lTVEVNICAgICAgMHgxMDAwMCAgICAvKiBPcGVuIHN5c3RlbSAqLworI2RlZmluZSBaTV9BVVRIX0FMR09fU0hBUkVEX0tFWSAgICAgICAweDEwMDAxICAgIC8qIFNoYXJlZCBLZXkgKi8KKyNkZWZpbmUgWk1fQVVUSF9BTEdPX0xFQVAgICAgICAgICAgICAgMHgxMDA4MCAgICAvKiBMZWFwICovCisKK3N0cnVjdCB6c1NjYW5SZXN1bHQKK3sKKyAgICB1MzJfdCByZXNlcnZlZDsKK307CisKKworc3RydWN0IHpzU3Rhc3RpY3MKK3sKKyAgICB1MzJfdCByZXNlcnZlZDsKK307CisKKyNkZWZpbmUgWk1fTUFYX1NVUFBfUkFURVNfSUVfU0laRSAgICAgICAxMgorI2RlZmluZSBaTV9NQVhfSUVfU0laRSAgICAgICAgICAgICAgICAgIDUwIC8vMTAwCisjZGVmaW5lIFpNX01BWF9XUFNfSUVfU0laRSAgICAgICAgICAgICAgMTUwCisjZGVmaW5lIFpNX01BWF9QUk9CRV9GUkFNRV9CT0RZX1NJWkUgICAgNTEyLy8zMDAKKyNkZWZpbmUJWk1fTUFYX0NPVU5UUllfSU5GT19TSVpFCQkyMAorCisjZGVmaW5lIFpNX01BWF9TU0lEX0xFTkdUSCAgICAgICAgICAzMgorc3RydWN0IHpzQnNzSW5mbworeworICAgIHU4X3QgICBtYWNhZGRyWzZdOworICAgIHU4X3QgICBic3NpZFs2XTsKKyAgICB1OF90ICAgYmVhY29uSW50ZXJ2YWxbMl07CisgICAgdThfdCAgIGNhcGFiaWxpdHlbMl07CisgICAgdThfdCAgIHRpbWVTdGFtcFs4XTsKKyAgICB1OF90ICAgc3NpZFtaTV9NQVhfU1NJRF9MRU5HVEggKyAyXTsgICAvLyBFSUQoMSkgKyBMZW5ndGgoMSkgKyBTU0lEKDMyKQorICAgIHU4X3QgICBzdXBwb3J0ZWRSYXRlc1taTV9NQVhfU1VQUF9SQVRFU19JRV9TSVpFICsgMl07IC8vIEVJRCgxKSArIExlbmd0aCgxKSArIHN1cHBvcnRlZCByYXRlcyBbMTJdCisgICAgdThfdCAgIGNoYW5uZWw7CisgICAgdTE2X3QgIGZyZXF1ZW5jeTsKKyAgICB1MTZfdCAgYXRpbVdpbmRvdzsKKyAgICB1OF90ICAgZXJwOworICAgIHU4X3QgICBleHRTdXBwb3J0ZWRSYXRlc1taTV9NQVhfU1VQUF9SQVRFU19JRV9TSVpFICsgMl07IC8vIEVJRCgxKSArIExlbmd0aCgxKSArIGV4dGVuZGVkIHN1cHBvcnRlZCByYXRlcyBbMTJdCisgICAgdThfdCAgIHdwYUllW1pNX01BWF9JRV9TSVpFICsgMl07CisgICAgdThfdCAgIHdzY0llW1pNX01BWF9XUFNfSUVfU0laRSArIDJdOworICAgIHU4X3QgICByc25JZVtaTV9NQVhfSUVfU0laRSArIDJdOworI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisgICAgdThfdCAgIGNlbmNJZVtaTV9NQVhfSUVfU0laRSArIDJdOyAvKiBDRU5DICovIC8qIGhhbGYgc2l6ZSBiZWNhdXNlIG9mIG1lbW9yeSBleGNlZWQgNjRrIGJvdW5kYXJ5ICovCisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworICAgIHU4X3QgICBzZWN1cml0eVR5cGU7CisgICAgdThfdCAgIHNpZ25hbFN0cmVuZ3RoOworICAgIHU4X3QgICBzaWduYWxRdWFsaXR5OworICAgIHUxNl90ICBzb3J0VmFsdWU7CisgICAgdThfdCAgIHdtZVN1cHBvcnQ7CisgICAgdThfdCAgIGZsYWc7CisgICAgdThfdCAgIEVuYWJsZUhUOworICAgIHU4X3QgICBlbmFibGVIVDQwOworICAgIHU4X3QgICBTRzQwOworICAgIHU4X3QgICBleHRDaE9mZnNldDsKKyAgICB1OF90ICAgYXBDYXA7IC8vIGJpdDA6MTFOIEFQCisgICAgdTE2X3QgIGZyYW1lQm9keXNpemU7CisgICAgdThfdCAgIGZyYW1lQm9keVtaTV9NQVhfUFJPQkVfRlJBTUVfQk9EWV9TSVpFXTsKKyAgICB1OF90ICAgY291bnRyeUluZm9bWk1fTUFYX0NPVU5UUllfSU5GT19TSVpFICsgMl07CisgICAgdTE2X3QgIGF0aE93bEFwOworICAgIHUxNl90ICBtYXJ2ZWxBcDsKKyAgICB1MTZfdCAgYnJvYWRjb21IVEFwOworICAgIHUzMl90ICB0aWNrOworICAgIHN0cnVjdCB6c0Jzc0luZm8qIG5leHQ7Cit9OworCitzdHJ1Y3QgenNCc3NMaXN0Cit7CisgICAgdThfdCBic3NDb3VudDsKKyAgICBzdHJ1Y3QgenNCc3NJbmZvKiBoZWFkOworICAgIHN0cnVjdCB6c0Jzc0luZm8qIHRhaWw7Cit9OworCitzdHJ1Y3QgenNCc3NMaXN0VjEKK3sKKyAgICB1OF90IGJzc0NvdW50OworICAgIHN0cnVjdCB6c0Jzc0luZm8gYnNzSW5mb1taTV9NQVhfQlNTXTsKK307CisKKyNkZWZpbmUgWk1fS0VZX0ZMQUdfR0sgICAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBaTV9LRVlfRkxBR19QSyAgICAgICAgICAgICAgICAgMFgwMDAyCisjZGVmaW5lIFpNX0tFWV9GTEFHX0FVVEhFTlRJQ0FUT1IgICAgICAweDAwMDQKKyNkZWZpbmUgWk1fS0VZX0ZMQUdfSU5JVF9JViAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBaTV9LRVlfRkxBR19ERUZBVUxUX0tFWSAgICAgICAgMHgwMDEwCisKKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQworI2RlZmluZSBaTV9LRVlfRkxBR19DRU5DICAgICAgICAgICAgICAgMHgwMDIwCisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworCisvLyBDb21tZW50OiBGb3IgVEtJUCwga2V5WzBdfmtleVsxNV0gID0+IFRLSVAga2V5CisvLyAgICAgICAgICAgICAgICAgICAga2V5WzE2XX5rZXlbMjNdID0+IFR4IE1JQyBrZXkKKy8vICAgICAgICAgICAgICAgICAgICBrZXlbMjRdfmtleVszMV0gPT4gUnggTUlDIGtleQorc3RydWN0IHpzS2V5SW5mbworeworICAgIHU4X3QqICAga2V5OworICAgIHU4X3QgICAga2V5TGVuZ3RoOworICAgIHU4X3QgICAga2V5SW5kZXg7CisgICAgdThfdCogICBpbml0SXY7CisgICAgdTE2X3QgICBmbGFnOworICAgIHU4X3QgICAgdmFwSWQ7CisgICAgdTE2X3QgICAgdmFwQWRkclszXTsKKyAgICB1MTZfdCogICBtYWNBZGRyOworfTsKKworCisKKy8qCisgKiBDaGFubmVscyBhcmUgc3BlY2lmaWVkIGJ5IGZyZXF1ZW5jeS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXUxNl90CWNoYW5uZWw7CS8qIHNldHRpbmcgaW4gTWh6ICovCisJdTMyX3QJY2hhbm5lbEZsYWdzOwkvKiBzZWUgYmVsb3cgKi8KKwl1OF90CXByaXZGbGFnczsKKwlzOF90CW1heFJlZ1R4UG93ZXI7CS8qIG1heCByZWd1bGF0b3J5IHR4IHBvd2VyIGluIGRCbSAqLworCXM4X3QJbWF4VHhQb3dlcjsJLyogbWF4IHRydWUgdHggcG93ZXIgaW4gMC4yNSBkQm0gKi8KKwlzOF90CW1pblR4UG93ZXI7CS8qIG1pbiB0cnVlIHR4IHBvd2VyIGluIDAuMjUgZEJtICovCit9IFpNX0hBTF9DSEFOTkVMOworCitzdHJ1Y3QgenNSZWd1bGF0aW9uVGFibGUKK3sKKyAgICB1MTZfdCAgIHJlZ2lvbkNvZGU7CisgICAgdTE2X3QgICBDdXJDaEluZGV4OworICAgIHUxNl90ICAgYWxsb3dDaGFubmVsQ250OworICAgIFpNX0hBTF9DSEFOTkVMICAgYWxsb3dDaGFubmVsWzYwXTsgICAvKiAyLjRHSHo6IDE0IGNoYW5uZWxzLCA1IEdIejogMzEgY2hhbm5lbHMgKi8KK307CisKK3N0cnVjdCB6c1BhcnRuZXJOb3RpZnlFdmVudAoreworICAgIHU4X3QgYnNzaWRbNl07ICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBCU1NJRCBvZiBJQlNTCisgICAgdThfdCBwZWVyTWFjQWRkcls2XTsgICAgICAgICAgICAgICAgLy8gVGhlIE1BQyBhZGRyZXNzIG9mIHBlZXIgc3RhdGlvbgorfTsKKworI2RlZmluZSBaTV9SQ19UUkFJTkVEX0JJVCAgIDB4MQorc3RydWN0IHpzUmNDZWxsCit7CisgICAgdTMyX3QgdHhDb3VudDsKKyAgICB1MzJfdCBmYWlsQ291bnQ7CisgICAgdThfdCBjdXJyZW50UmF0ZTsKKyAgICB1OF90IGN1cnJlbnRSYXRlSW5kZXg7CisgICAgdTMyX3QgcHJvYmluZ1RpbWU7CisgICAgdThfdCBvcGVyYXRpb25SYXRlU2V0WzI0XTsKKyAgICB1OF90IG9wZXJhdGlvblJhdGVDb3VudDsKKyAgICB1MTZfdCByeFJzc2k7CisgICAgdThfdCBmbGFnOworICAgIHUzMl90ICBsYXN0dHhDb3VudDsKKyAgICB1MzJfdCAgbGFzdFRpbWU7Cit9OworCitzdHJ1Y3QgenNPcHBvc2l0ZUluZm8KK3sKKyAgICB1OF90ICAgICAgICAgICAgbWFjQWRkcls2XTsKKyAgICBzdHJ1Y3QgenNSY0NlbGwgcmNDZWxsOworICAgIHU4X3QgICAgICAgICAgICB2YWxpZDsgICAgICAgICAgICAgIC8vIFRoaXMgaW5kaWNhdGUgaWYgdGhpcyBvcHBvc2l0ZSBpcyBzdGlsbCB2YWxpZAorICAgIHU4X3QgICAgICAgICAgICBhbGl2ZUNvdW50ZXI7CisgICAgdThfdCAgICAgICAgICAgIHBrSW5zdGFsbGVkOworCisjaWZkZWYgWk1fRU5BQkxFX0lCU1NfV1BBMlBTSworICAgIC8qIEZvciBXUEEyUFNLICEgKi8KKyAgICB1OF90IAkJCXdwYVN0YXRlOworICAgIHU4X3QgICAgICAgICAgICBjYW1JZHg7CisgICAgdThfdCAgICAgICAgICAgIGVuY3J5TW9kZTsKKyAgICB1MTZfdCAgICAgICAgICAgaXYxNjsKKyAgICB1MzJfdCAgICAgICAgICAgaXYzMjsKKyNlbmRpZgorfTsKKwordHlwZWRlZiB2b2lkICgqemZwSUJTU0l0ZXJhdGVQZWVyU3RhdGlvbkNiKSgKKyAgICB6ZGV2X3QqIGRldiwgc3RydWN0IHpzT3Bwb3NpdGVJbmZvICpwZWVySW5mbywgdm9pZCAqY3R4LCB1OF90IGluZGV4KTsKKwordHlwZWRlZiB1MTZfdCAoKnpmcFN0YVJ4U2VjdXJpdHlDaGVja0NiKSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOworCisKKy8qIENvbW11bmljYXRpb24gVGFsbHkgZGF0YSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCB6c0NvbW1UYWxseQoreworICAgIHUzMl90IHR4VW5pY2FzdEZybTsJCSAgICAvLyAgMCB0eFVuaWNhc3RGcmFtZXMKKyAgICB1MzJfdCB0eE11bHRpY2FzdEZybTsJCS8vICAxIHR4TXVsdGljYXN0RnJhbWVzCisgICAgdTMyX3QgdHhVbmljYXN0T2N0ZXRzOwkgICAgLy8gIDIgdHhVbmlPY3RldHMgIGJ5dGUgc2l6ZQorICAgIHUzMl90IHR4TXVsdGljYXN0T2N0ZXRzOwkvLyAgMyB0eE11bHRpT2N0ZXRzICBieXRlIHNpemUKKyAgICB1MzJfdCB0eEZybVVwcGVyTkRJUzsgICAgICAgLy8gIDQKKyAgICB1MzJfdCB0eEZybURydk1ndDsgICAgICAgICAgLy8gIDUKKyAgICB1MzJfdCBSZXRyeUZhaWxDbnQ7CQkgICAgLy8gIDYKKyAgICB1MzJfdCBId19Ub3RhbFR4RnJtOwkJLy8gIDcgSGFyZHdhcmUgdG90YWwgVHggRnJhbWUKKyAgICB1MzJfdCBId19SZXRyeUNudDsJCSAgICAvLyAgOCB0eE11bHRpcGxlUmV0cmllc0ZyYW1lcworICAgIHUzMl90IEh3X1VuZGVycnVuQ250OyAgICAgICAvLyAgOQorCisgICAgdTMyX3QgRHJpdmVyUnhGcm1DbnQ7ICAgICAgIC8vIDEwCisgICAgdTMyX3QgcnhVbmljYXN0RnJtOwkJICAgIC8vIDExIHJ4VW5pY2FzdEZyYW1lcworICAgIHUzMl90IHJ4TXVsdGljYXN0RnJtOwkgICAgLy8gMTJyeE11bHRpY2FzdEZyYW1lcworCisgICAgdTMyX3QgTm90aWZ5TkRJU1J4RnJtQ250OyAgIC8vIDE0CisgICAgdTMyX3QgcnhVbmljYXN0T2N0ZXRzOwkvLyAxNSByeFVuaU9jdGV0cyAgYnl0ZSBzaXplCisgICAgdTMyX3QgcnhNdWx0aWNhc3RPY3RldHM7CSAgICAvLyAxNiByeE11bHRpT2N0ZXRzICBieXRlIHNpemUKKyAgICB1MzJfdCBEcml2ZXJEaXNjYXJkZWRGcm07ICAgICAgIC8vIDE3IERpc2NhcmQgYnkgVmFsaWRhdGVGcmFtZQorICAgIHUzMl90IExlc3NUaGFuRGF0YU1pbkxlbjsgICAgICAgLy8gMTgKKyAgICB1MzJfdCBHcmVhdGVyVGhhbk1heExlbjsgICAgICAgIC8vIDE5CisgICAgdTMyX3QgRHJpdmVyRGlzY2FyZGVkRnJtQ2F1c2VCeU11bHRpY2FzdExpc3Q7CisgICAgdTMyX3QgRHJpdmVyRGlzY2FyZGVkRnJtQ2F1c2VCeUZybUN0cmw7CisgICAgdTMyX3QgcnhOZWVkRnJnRnJtOwkJICAgIC8vIDIyIG5lZWQgbW9yZSBmcmcgZnJtCisgICAgdTMyX3QgRHJpdmVyUnhNZ3RGcm1DbnQ7CisgICAgdTMyX3QgcnhCcm9hZGNhc3RGcm07CSAgICAvLyAyNCBSZWNlaXZlIGJyb2FkY2FzdCBmcmFtZSBjb3VudAorICAgIHUzMl90IHJ4QnJvYWRjYXN0T2N0ZXRzOwkvLyAyNSBSZWNlaXZlIGJyb2FkY2FzdCBmcmFtZSBieXRlIHNpemUKKyAgICB1MzJfdCByeDExYkRhdGFGcmFtZTsJCS8vIDI2IE1lYXN1cmVkIHF1YWxpdHkgMTFiIGRhdGEgZnJhbWUgY291bnQKKyAgICB1MzJfdCByeE9GRE1EYXRhRnJhbWU7CSAgICAvLyAyNyBNZWFzdXJlZCBxdWFsaXR5IDExZyBkYXRhIGZyYW1lIGNvdW50CisKKworICAgIHUzMl90IEh3X1RvdGFsUnhGcm07ICAgICAgICAvLyAyOAorICAgIHUzMl90IEh3X0NSQzE2Q250OwkJICAgIC8vIDI5IHJ4UExDUENSQ0VyckNudAorICAgIHUzMl90IEh3X0NSQzMyQ250OwkJICAgIC8vIDMwIHJ4Q1JDMzJFcnJDbnQKKyAgICB1MzJfdCBId19EZWNyeXBFcnJfVU5JOyAgICAgLy8gMzEKKyAgICB1MzJfdCBId19EZWNyeXBFcnJfTXVsOyAgICAgLy8gMzIKKworICAgIHUzMl90IEh3X1J4RklGT092ZXJydW47ICAgICAvLyAzNAorICAgIHUzMl90IEh3X1J4VGltZU91dDsgICAgICAgICAvLyAzNQorICAgIHUzMl90IExvc3NBUDsgICAgICAgICAgICAgICAvLyAzNgorCisgICAgdTMyX3QgVHhfTVBEVTsgICAgICAgICAgICAgIC8vIDM3CisgICAgdTMyX3QgQkFfRmFpbDsgICAgICAgICAgICAgIC8vIDM4CisgICAgdTMyX3QgSHdfVHhfQU1QRFU7ICAgICAgICAgIC8vIDM5CisgICAgdTMyX3QgSHdfVHhfTVBEVTsgICAgICAgICAgIC8vIDQwCisKKyAgICB1MzJfdCBSYXRlQ3RybFR4TVBEVTsKKyAgICB1MzJfdCBSYXRlQ3RybEJBRmFpbDsKKworICAgIHUzMl90IHR4UW9zRHJvcENvdW50WzVdOyAgICAvLzQxIDQyIDQzIDQ0IDQ1CisKKwl1MzJfdCBId19SeE1QRFU7ICAgICAgICAgICAgLy8gNDYKKwl1MzJfdCBId19SeERyb3BNUERVOyAgICAgICAgLy8gNDcKKwl1MzJfdCBId19SeERlbE1QRFU7ICAgICAgICAgLy8gNDgKKworCXUzMl90IEh3X1J4UGh5TWlzY0Vycm9yOyAgICAvLyA0OQorCXUzMl90IEh3X1J4UGh5WFJFcnJvcjsgICAgICAvLyA1MAorICAgIHUzMl90IEh3X1J4UGh5T0ZETUVycm9yOyAgICAvLyA1MQorICAgIHUzMl90IEh3X1J4UGh5Q0NLRXJyb3I7ICAgICAvLyA1MgorICAgIHUzMl90IEh3X1J4UGh5SFRFcnJvcjsgICAgICAvLyA1MworICAgIHUzMl90IEh3X1J4UGh5VG90YWxDb3VudDsgICAvLyA1NAorCisgICAgdTMyX3Qgc3dSeEZyYWdtZW50Q291bnQ7ICAgICAgICAgLy8gNTUKKyAgICB1MzJfdCBzd1J4VW5pY2FzdE1pY0ZhaWxDb3VudDsgICAvLyA1NgorICAgIHUzMl90IHN3UnhNdWx0aWNhc3RNaWNGYWlsQ291bnQ7IC8vIDU3CisgICAgdTMyX3Qgc3dSeERyb3BVbmVuY3J5cHRlZENvdW50OyAgLy8gNTgKKworICAgIHUzMl90IHR4QnJvYWRjYXN0RnJtOworICAgIHUzMl90IHR4QnJvYWRjYXN0T2N0ZXRzOworfTsKKworLyogVHJhZmZpYyBNb25pdG9yIFRhbGx5IGRhdGEgc3RydWN0dXJlICovCitzdHJ1Y3QgenNUcmFmVGFsbHkKK3sKKyAgICB1MzJfdCByeER1cGxpY2F0ZTsKKyAgICB1MzJfdCByeFNyY0lzT3duTWFjOworICAgIC8vdTMyX3QgcnhEYXRhRnJhbWVDb3VudDsKKyAgICAvL3UzMl90IHJ4RGF0YUJ5dGVDb3VudDsKKyAgICAvL3UzMl90IHJ4RGF0YUJ5dGVzSW4xMDAwbXM7CisgICAgLy91MzJfdCByeERhdGFUbXBGb3IxMDAwbXM7CisgICAgLy91MzJfdCByeERhdGFCeXRlc0luMjAwMG1zOworICAgIC8vdTMyX3QgcnhEYXRhVG1wRm9yMjAwMG1zOworCisgICAgLy91MzJfdCB0eERhdGFGcmFtZUNvdW50OworICAgIC8vdTMyX3QgdHhEYXRhQnl0ZUNvdW50OworICAgIC8vdTMyX3QgdHhEYXRhQnl0ZXNJbjEwMDBtczsKKyAgICAvL3UzMl90IHR4RGF0YVRtcEZvcjEwMDBtczsKKyAgICB1MzJfdCB0eERhdGFCeXRlc0luMjAwMG1zOworICAgIHUzMl90IHR4RGF0YVRtcEZvcjIwMDBtczsKK307CisKKy8qIEhhbCByeCBwYWNrZXQgbW9uaXRlciBpbmZvcm1hdGlvbiAqLworc3RydWN0IHpzTW9uSGFsUnhJbmZvCit7CisgICAgdTMyX3QgY3VycmVudFJTU0lbN107CisgICAgdTMyX3QgY3VycmVudFJ4RVZNWzE0XTsKKyAgICB1MzJfdCBjdXJyZW50UnhEYXRhTVQ7CisgICAgdTMyX3QgY3VycmVudFJ4RGF0YU1DUzsKKyAgICB1MzJfdCBjdXJyZW50UnhEYXRhQlc7CisgICAgdTMyX3QgY3VycmVudFJ4RGF0YVNHOworfTsKKworc3RydWN0IHpzVGFpbAoreworICAgIHU4X3QgU2lnbmFsU3RyZW5ndGgxOworICAgIHU4X3QgU2lnbmFsU3RyZW5ndGgyOworICAgIHU4X3QgU2lnbmFsU3RyZW5ndGgzOworICAgIHU4X3QgU2lnbmFsUXVhbGl0eTsKKyAgICB1OF90IFNBSW5kZXg7CisgICAgdThfdCBEQUluZGV4OworICAgIHU4X3QgRXJyb3JJbmRpY2F0aW9uOworICAgIHU4X3QgUnhNYWNTdGF0dXM7Cit9OworCit1bmlvbiB6dVRhaWwKK3sKKyAgICBzdHJ1Y3QgenNUYWlsIERhdGE7CisgICAgdThfdCBCeXRlWzhdOworfTsKKworc3RydWN0IHpzQWRkaXRpb25JbmZvCit7CisgICAgdThfdCBQbGNwSGVhZGVyWzEyXTsKKyAgICB1bmlvbiB6dVRhaWwgICBUYWlsOworfTsKKworCitzdHJ1Y3QgenNQbWtpZEJzc2lkSW5mbworeworICAgIHUxNl90ICAgICAgYnNzaWRbM107CisgICAgdThfdCAgICAgICBwbWtpZFsxNl07Cit9OworCitzdHJ1Y3QgenNQbWtpZEluZm8KK3sKKwkgICB1MzJfdAkJYnNzaWRDb3VudDsKKwkgICBzdHJ1Y3QgenNQbWtpZEJzc2lkSW5mbwlic3NpZEluZm9bWk1fUE1LSURfTUFYX0JTU19DTlRdOworfTsKKworCitzdHJ1Y3QgenNDYkZ1bmNUYmwKK3sKKyAgICB1MTZfdCAoKnpmY2JBdXRoTm90aWZ5KSh6ZGV2X3QqIGRldiwgdTE2X3QqIG1hY0FkZHIpOworICAgIHUxNl90ICgqemZjYkFzb2NOb3RpZnkpKHpkZXZfdCogZGV2LCB1MTZfdCogbWFjQWRkciwgdThfdCogYm9keSwKKyAgICAgICAgICAgIHUxNl90IGJvZHlTaXplLCB1MTZfdCBwb3J0KTsKKyAgICB1MTZfdCAoKnpmY2JEaXNBc29jTm90aWZ5KSh6ZGV2X3QqIGRldiwgdThfdCogbWFjQWRkciwgdTE2X3QgcG9ydCk7CisgICAgdTE2X3QgKCp6ZmNiQXBDb25uZWN0Tm90aWZ5KSh6ZGV2X3QqIGRldiwgdThfdCogbWFjQWRkciwgdTE2X3QgcG9ydCk7CisgICAgdm9pZCAoKnpmY2JDb25uZWN0Tm90aWZ5KSh6ZGV2X3QqIGRldiwgdTE2X3Qgc3RhdHVzLCB1MTZfdCogYnNzaWQpOworICAgIHZvaWQgKCp6ZmNiU2Nhbk5vdGlmeSkoemRldl90KiBkZXYsIHN0cnVjdCB6c1NjYW5SZXN1bHQqIHJlc3VsdCk7CisgICAgdm9pZCAoKnpmY2JNaWNGYWlsdXJlTm90aWZ5KSh6ZGV2X3QqIGRldiwgdTE2X3QqIGFkZHIsIHUxNl90IHN0YXR1cyk7CisgICAgdm9pZCAoKnpmY2JBcE1pY0ZhaWx1cmVOb3RpZnkpKHpkZXZfdCogZGV2LCB1OF90KiBhZGRyLCB6YnVmX3QqIGJ1Zik7CisgICAgdm9pZCAoKnpmY2JJYnNzUGFydG5lck5vdGlmeSkoemRldl90KiBkZXYsIHUxNl90IHN0YXR1cywKKyAgICAgICAgICAgIHN0cnVjdCB6c1BhcnRuZXJOb3RpZnlFdmVudCAqZXZlbnQpOworICAgIHZvaWQgKCp6ZmNiTWFjQWRkcmVzc05vdGlmeSkoemRldl90KiBkZXYsIHU4X3QqIGFkZHIpOworICAgIHZvaWQgKCp6ZmNiU2VuZENvbXBsZXRlSW5kaWNhdGlvbikoemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKKyAgICB2b2lkICgqemZjYlJlY3ZFdGgpKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgcG9ydCk7CisgICAgdm9pZCAoKnpmY2JSZWN2ODAyMTEpKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Ziwgc3RydWN0IHpzQWRkaXRpb25JbmZvKiBhZGRJbmZvKTsKKyAgICB2b2lkICgqemZjYlJlc3RvcmVCdWZEYXRhKSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOworI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisgICAgdTE2X3QgKCp6ZmNiQ2VuY0Fzb2NOb3RpZnkpKHpkZXZfdCogZGV2LCB1MTZfdCogbWFjQWRkciwgdThfdCogYm9keSwKKyAgICAgICAgICAgIHUxNl90IGJvZHlTaXplLCB1MTZfdCBwb3J0KTsKKyNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCisgICAgdThfdCAoKnpmY2JDbGFzc2lmeVR4UGFja2V0KSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOworCisgICAgdm9pZCAoKnpmY2JId1dhdGNoRG9nTm90aWZ5KSh6ZGV2X3QqIGRldik7Cit9OworCitleHRlcm4gdm9pZCB6Zlplcm9NZW1vcnkodThfdCogdmEsIHUxNl90IGxlbmd0aCk7CisjZGVmaW5lIFpNX0lOSVRfQ0JfRlVOQ19UQUJMRShwKSAgICAgICAgemZaZXJvTWVtb3J5KCh1OF90ICopcCwgc2l6ZW9mKHN0cnVjdCB6c0NiRnVuY1RibCkpOworCisvL2V4dGVybiBzdHJ1Y3QgenNXbGFuRGV2IHpnV2xhbkRldjsKKworLyogSW5pdGlhbGl6ZSBXTEFOIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSwgcmVzb3VyY2Ugd2lsbCBiZSBhbGxvY2F0ZWQgKi8KKy8qIGZvciBXTEFOIG9wZXJhdGlvbiwgbXVzdCBiZSBjYWxsZWQgZmlyc3QgYmVmb3JlIG90aGVyIGZ1bmN0aW9uLiAgICovCitleHRlcm4gdTE2X3QgemZpV2xhbk9wZW4oemRldl90KiBkZXYsIHN0cnVjdCB6c0NiRnVuY1RibCogY2JGdW5jVGJsKTsKKworLyogV0xBTiBoYXJkd2FyZSB3aWxsIGJlIHNodXRkb3duIGFuZCBhbGwgcmVzb3VyY2Ugd2lsbCBiZSByZWxlYXNlICovCitleHRlcm4gdTE2X3QgemZpV2xhbkNsb3NlKHpkZXZfdCogZGV2KTsKKworLyogRW5hYmxlL2Rpc2FibGUgV2xhbiBvcGVyYXRpb24gKi8KK2V4dGVybiB1MTZfdCB6ZmlXbGFuRW5hYmxlKHpkZXZfdCogZGV2KTsKK2V4dGVybiB1MTZfdCB6ZmlXbGFuRGlzYWJsZSh6ZGV2X3QqIGRldiwgdThfdCBSZXNldEtleUNhY2hlKTsKK2V4dGVybiB1MTZfdCB6ZmlXbGFuUmVzdW1lKHpkZXZfdCogZGV2LCB1OF90IGRvUmVjb25uKTsKK2V4dGVybiB1MTZfdCB6ZmlXbGFuU3VzcGVuZCh6ZGV2X3QqIGRldik7CisKKy8qIEVuYWJsZS9kaXNhYmxlIElTUiBpbnRlcnJ1cHQgKi8KK2V4dGVybiB1MTZfdCB6ZmlXbGFuSW50ZXJydXB0RW5hYmxlKHpkZXZfdCogZGV2KTsKK2V4dGVybiB1MTZfdCB6ZmlXbGFuSW50ZXJydXB0RGlzYWJsZSh6ZGV2X3QqIGRldik7CisKKy8qIERvIFdMQU4gc2l0ZSBzdXJ2ZXkgKi8KK2V4dGVybiB1MTZfdCB6ZmlXbGFuU2Nhbih6ZGV2X3QqIGRldik7CisKKy8qIEdldCBXTEFOIHN0YXN0aWNzICovCitleHRlcm4gdTE2X3QgemZpV2xhbkdldFN0YXRpc3RpY3MoemRldl90KiBkZXYpOworCisvKiBSZXNldCBXTEFOICovCitleHRlcm4gdTE2X3QgemZpV2xhblJlc2V0KHpkZXZfdCogZGV2KTsKKworLyogRGVhdXRoZW50aWNhdGUgYSBTVEEgKi8KK2V4dGVybiB1MTZfdCB6ZmlXbGFuRGVhdXRoKHpkZXZfdCogZGV2LCB1MTZfdCogbWFjQWRkciwgdTE2X3QgcmVhc29uKTsKKworZXh0ZXJuIHUxNl90IHpmaVR4U2VuZEV0aCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IHBvcnQpOworZXh0ZXJuIHU4X3QgemZpSXNUeFF1ZXVlRnVsbCh6ZGV2X3QqIGRldik7CitleHRlcm4gdTE2X3QgemZpVHhTZW5kODAyMTFNZ210KHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgcG9ydCk7CisKK2V4dGVybiB2b2lkIHpmaUlzclBjaSh6ZGV2X3QqIGRldik7CisKK2V4dGVybiB1OF90IHpmaVdsYW5JQlNTR2V0UGVlclN0YXRpb25zQ291bnQoemRldl90KiBkZXYpOworZXh0ZXJuIHU4X3QgemZpV2xhbklCU1NJdGVyYXRlUGVlclN0YXRpb25zKHpkZXZfdCogZGV2LCB1OF90IG51bVRvSXRlcmF0ZSwgemZwSUJTU0l0ZXJhdGVQZWVyU3RhdGlvbkNiIGNhbGxiYWNrLCB2b2lkICpjdHgpOworZXh0ZXJuIHZvaWQgemZpV2xhbkZsdXNoQWxsUXVldWVkQnVmZmVycyh6ZGV2X3QqIGRldik7CisKKy8qIGNvaWQuYyAqLworZXh0ZXJuIHZvaWQgemZpV2xhblF1ZXJ5TWFjQWRkcmVzcyh6ZGV2X3QqIGRldiwgdThfdCogYWRkcik7CisKK2V4dGVybiB1MTZfdCB6ZmlHbG9iYWxEYXRhU2l6ZSh6ZGV2X3QqIGRldik7CisKK2V4dGVybiB2b2lkIHpmaUhlYXJ0QmVhdCh6ZGV2X3QqIGRldik7CisKK2V4dGVybiB2b2lkIHpmaVdsYW5TZXRXbGFuTW9kZSh6ZGV2X3QqIGRldiwgdThfdCB3bGFuTW9kZSk7CitleHRlcm4gdm9pZCB6ZmlXbGFuU2V0QXV0aGVudGljYXRpb25Nb2RlKHpkZXZfdCogZGV2LCB1OF90IGF1dGhNb2RlKTsKK2V4dGVybiB2b2lkIHpmaVdsYW5TZXRXZXBTdGF0dXMoemRldl90KiBkZXYsIHU4X3Qgd2VwU3RhdHVzKTsKK2V4dGVybiB2b2lkIHpmaVdsYW5TZXRTU0lEKHpkZXZfdCogZGV2LCB1OF90KiBzc2lkLCB1OF90IHNzaWRMZW5ndGgpOworZXh0ZXJuIHZvaWQgemZpV2xhblNldEZyYWdUaHJlc2hvbGQoemRldl90KiBkZXYsIHUxNl90IGZyYWdUaHJlc2hvbGQpOworZXh0ZXJuIHZvaWQgemZpV2xhblNldFJ0c1RocmVzaG9sZCh6ZGV2X3QqIGRldiwgdTE2X3QgcnRzVGhyZXNob2xkKTsKK2V4dGVybiB2b2lkIHpmaVdsYW5TZXRGcmVxdWVuY3koemRldl90KiBkZXYsIHUzMl90IGZyZXF1ZW5jeSwgdThfdCBiSW1tZWRpYXRlKTsKK2V4dGVybiB2b2lkIHpmaVdsYW5TZXRCc3NpZCh6ZGV2X3QqIGRldiwgdThfdCogYnNzaWQpOworZXh0ZXJuIHZvaWQgemZpV2xhblNldEJlYWNvbkludGVydmFsKHpkZXZfdCogZGV2LCB1MTZfdCBiZWFjb25JbnRlcnZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4X3QgYkltbWVkaWF0ZSk7CitleHRlcm4gdm9pZCB6ZmlXbGFuU2V0RHRpbUNvdW50KHpkZXZfdCogZGV2LCB1OF90ICBkdGltKTsKK2V4dGVybiB2b2lkIHpmaVdsYW5TZXRBdGltV2luZG93KHpkZXZfdCogZGV2LCB1MTZfdCBhdGltV2luZG93LCB1OF90IGJJbW1lZGlhdGUpOworZXh0ZXJuIHZvaWQgemZpV2xhblNldEVuY3J5TW9kZSh6ZGV2X3QqIGRldiwgdThfdCBlbmNyeU1vZGUpOworZXh0ZXJuIHU4X3QgemZpV2xhblNldEtleSh6ZGV2X3QqIGRldiwgc3RydWN0IHpzS2V5SW5mbyBrZXlJbmZvKTsKK2V4dGVybiB1OF90IHpmaVdsYW5QU0VVRE9TZXRLZXkoemRldl90KiBkZXYsIHN0cnVjdCB6c0tleUluZm8ga2V5SW5mbyk7CitleHRlcm4gdm9pZCB6ZmlXbGFuU2V0UG93ZXJTYXZlTW9kZSh6ZGV2X3QqIGRldiwgdThfdCBtb2RlKTsKK2V4dGVybiB2b2lkIHpmaVdsYW5RdWVyeUJzc0xpc3RWMSh6ZGV2X3QqIGRldiwgc3RydWN0IHpzQnNzTGlzdFYxKiBic3NMaXN0VjEpOworZXh0ZXJuIHZvaWQgemZpV2xhblF1ZXJ5QnNzTGlzdCh6ZGV2X3QqIGRldiwgc3RydWN0IHpzQnNzTGlzdCogcEJzc0xpc3QpOworZXh0ZXJuIHZvaWQgemZpV2xhblNldFByb3RlY3Rpb25Nb2RlKHpkZXZfdCogZGV2LCB1OF90IG1vZGUpOworZXh0ZXJuIHZvaWQgemZpV2xhbkZsdXNoQnNzTGlzdCh6ZGV2X3QqIGRldik7CisKK3ZvaWQgemZpV2xhbkRpc2FibGVEZnNDaGFubmVsKHpkZXZfdCogZGV2LCB1OF90IGRpc2FibGVGbGFnKTsKKworZXh0ZXJuIHU4X3QgemZpV2xhblF1ZXJ5V2xhbk1vZGUoemRldl90KiBkZXYpOworZXh0ZXJuIHUxNl90IHpmaVdsYW5DaGFubmVsVG9GcmVxdWVuY3koemRldl90KiBkZXYsIHU4X3QgY2hhbm5lbCk7CitleHRlcm4gdThfdCB6ZmlXbGFuRnJlcXVlbmN5VG9DaGFubmVsKHpkZXZfdCogZGV2LCB1MTZfdCBmcmVxKTsKKworI2RlZmluZSBaTV9XTEFOX1NUQVRFX09QRU5FRCAgICAgICAgMAorI2RlZmluZSBaTV9XTEFOX1NUQVRFX0VOQUJMRUQgICAgICAgMQorI2RlZmluZSBaTV9XTEFOX1NUQVRFX0RJU0FCTEVEICAgICAgMgorI2RlZmluZSBaTV9XTEFOX1NUQVRFX0NMT1NFREVEICAgICAgMworZXh0ZXJuIHU4X3QgemZpV2xhblF1ZXJ5QWRhcHRlclN0YXRlKHpkZXZfdCogZGV2KTsKK2V4dGVybiB1OF90IHpmaVdsYW5RdWVyeUF1dGhlbnRpY2F0aW9uTW9kZSh6ZGV2X3QqIGRldiwgdThfdCBiV3JhcHBlcik7CitleHRlcm4gdThfdCB6ZmlXbGFuUXVlcnlXZXBTdGF0dXMoemRldl90KiBkZXYsIHU4X3QgYldyYXBwZXIpOworZXh0ZXJuIHZvaWQgemZpV2xhblF1ZXJ5U1NJRCh6ZGV2X3QqIGRldiwgdThfdCogc3NpZCwgdThfdCogcFNzaWRMZW5ndGgpOworZXh0ZXJuIHUxNl90IHpmaVdsYW5RdWVyeUZyYWdUaHJlc2hvbGQoemRldl90KiBkZXYpOworZXh0ZXJuIHUxNl90IHpmaVdsYW5RdWVyeVJ0c1RocmVzaG9sZCh6ZGV2X3QqIGRldik7CitleHRlcm4gdTMyX3QgemZpV2xhblF1ZXJ5RnJlcXVlbmN5KHpkZXZfdCogZGV2KTsKK2V4dGVybiB1MzJfdCB6ZmlXbGFuUXVlcnlDdXJyZW50RnJlcXVlbmN5KHpkZXZfdCogZGV2LCB1OF90IHFtb2RlKTsKK2V4dGVybiB1MzJfdCB6ZmlXbGFuUXVlcnlGcmVxdWVuY3lBdHRyaWJ1dGUoemRldl90KiBkZXYsIHUzMl90IGZyZXF1ZW5jeSk7CitleHRlcm4gdm9pZCB6ZmlXbGFuUXVlcnlGcmVxdWVuY3lIVCh6ZGV2X3QqIGRldiwgdTMyX3QgKmJhbmRXaWR0aCwgdTMyX3QgKmV4dE9mZnNldCk7CitleHRlcm4gdThfdCB6ZmlXbGFuUXVlcnlDV01vZGUoemRldl90KiBkZXYpOworZXh0ZXJuIHUzMl90IHpmaVdsYW5RdWVyeUNXRW5hYmxlKHpkZXZfdCogZGV2KTsKK2V4dGVybiB2b2lkIHpmaVdsYW5RdWVyeUJzc2lkKHpkZXZfdCogZGV2LCB1OF90KiBic3NpZCk7CitleHRlcm4gdTE2X3QgemZpV2xhblF1ZXJ5QmVhY29uSW50ZXJ2YWwoemRldl90KiBkZXYpOworZXh0ZXJuIHUzMl90IHpmaVdsYW5RdWVyeVJ4QmVhY29uVG90YWwoemRldl90KiBkZXYpOworZXh0ZXJuIHUxNl90IHpmaVdsYW5RdWVyeUF0aW1XaW5kb3coemRldl90KiBkZXYpOworZXh0ZXJuIHU4X3QgemZpV2xhblF1ZXJ5RW5jcnlNb2RlKHpkZXZfdCogZGV2KTsKK2V4dGVybiB1MTZfdCB6ZmlXbGFuUXVlcnlDYXBhYmlsaXR5KHpkZXZfdCogZGV2KTsKK2V4dGVybiB1MTZfdCB6ZmlXbGFuUXVlcnlBaWQoemRldl90KiBkZXYpOworZXh0ZXJuIHZvaWQgemZpV2xhblF1ZXJ5U3VwcG9ydFJhdGUoemRldl90KiBkZXYsIHU4X3QqIHJhdGVBcnJheSwgdThfdCogcExlbmd0aCk7CitleHRlcm4gdm9pZCB6ZmlXbGFuUXVlcnlFeHRTdXBwb3J0UmF0ZSh6ZGV2X3QqIGRldiwgdThfdCogcmF0ZUFycmF5LCB1OF90KiBwTGVuZ3RoKTsKK2V4dGVybiB2b2lkIHpmaVdsYW5RdWVyeVJzbkllKHpkZXZfdCogZGV2LCB1OF90KiBpZSwgdThfdCogcExlbmd0aCk7CitleHRlcm4gdm9pZCB6ZmlXbGFuUXVlcnlXcGFJZSh6ZGV2X3QqIGRldiwgdThfdCogaWUsIHU4X3QqIHBMZW5ndGgpOworZXh0ZXJuIHU4X3QgemZpV2xhblF1ZXJ5SFRNb2RlKHpkZXZfdCogZGV2KTsKK2V4dGVybiB1OF90IHpmaVdsYW5RdWVyeUJhbmRXaWR0aDQwKHpkZXZfdCogZGV2KTsKK2V4dGVybiB1OF90IHpmaVdsYW5RdWVyeU11bHRpY2FzdENpcGhlckFsZ28oemRldl90ICpkZXYpOworZXh0ZXJuIHUxNl90IHpmaVdsYW5RdWVyeVJlZ2lvbkNvZGUoemRldl90KiBkZXYpOworZXh0ZXJuIHZvaWQgemZpV2xhblNldFdwYUllKHpkZXZfdCogZGV2LCB1OF90KiBpZSwgdThfdCBMZW5ndGgpOworZXh0ZXJuIHZvaWQgemZpV2xhblNldFdwYVN1cHBvcnQoemRldl90KiBkZXYsIHU4X3QgV3BhU3VwcG9ydCk7CitleHRlcm4gdm9pZCB6ZmlXbGFuQ2hlY2tTdGFXcGFJZSh6ZGV2X3QqIGRldik7CitleHRlcm4gdm9pZCB6ZmlXbGFuU2V0QmFzaWNSYXRlKHpkZXZfdCogZGV2LCB1OF90IGJSYXRlU2V0LCB1OF90IGdSYXRlU2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHUzMl90IG5SYXRlU2V0KTsKK2V4dGVybiB2b2lkIHpmaVdsYW5TZXRCR01vZGUoemRldl90KiBkZXYsIHU4X3QgbW9kZSk7CitleHRlcm4gdm9pZCB6ZmlXbGFuU2V0cHJlYW1ibGVUeXBlKHpkZXZfdCogZGV2LCB1OF90IHR5cGUpOworZXh0ZXJuIHU4X3QgemZpV2xhblF1ZXJ5cHJlYW1ibGVUeXBlKHpkZXZfdCogZGV2KTsKK2V4dGVybiB1OF90IHpmaVdsYW5RdWVyeVBvd2VyU2F2ZU1vZGUoemRldl90KiBkZXYpOworZXh0ZXJuIHZvaWQgemZpV2xhblNldE1hY0FkZHJlc3MoemRldl90KiBkZXYsIHUxNl90KiBtYWMpOworZXh0ZXJuIHUxNl90IHpmaVdsYW5TZXRUeFJhdGUoemRldl90KiBkZXYsIHUxNl90IHJhdGUpOworZXh0ZXJuIHUzMl90IHpmaVdsYW5RdWVyeVR4UmF0ZSh6ZGV2X3QqIGRldik7CitleHRlcm4gdm9pZCB6ZldsYW5VcGRhdGVSeFJhdGUoemRldl90KiBkZXYsIHN0cnVjdCB6c0FkZGl0aW9uSW5mbyogYWRkSW5mbyk7CitleHRlcm4gdTMyX3QgemZpV2xhblF1ZXJ5UnhSYXRlKHpkZXZfdCogZGV2KTsKK2V4dGVybiB1OF90IHpmaVdsYW5TZXRQbWtpZEluZm8oemRldl90KiBkZXYsIHUxNl90KiBic3NpZCwgdThfdCogcG1raWQpOworZXh0ZXJuIHUzMl90IHpmaVdsYW5RdWVyeVBta2lkSW5mbyh6ZGV2X3QqIGRldiwgdThfdCogYnVmLCB1MzJfdCBsZW4pOworZXh0ZXJuIHZvaWQgemZpV2xhblNldEFsbE11bHRpY2FzdCh6ZGV2X3QqIGRldiwgdTMyX3Qgc2V0dGluZyk7CitleHRlcm4gdm9pZCB6ZmlXbGFuU2V0SFRDdHJsKHpkZXZfdCogZGV2LCB1MzJfdCAqc2V0dGluZywgdTMyX3QgZm9yY2VUeFRQQyk7CitleHRlcm4gdm9pZCB6ZmlXbGFuUXVlcnlIVEN0cmwoemRldl90KiBkZXYsIHUzMl90ICpzZXR0aW5nLCB1MzJfdCAqZm9yY2VUeFRQQyk7CitleHRlcm4gdm9pZCB6ZmlXbGFuRGJnKHpkZXZfdCogZGV2LCB1OF90IHNldHRpbmcpOworCitleHRlcm4gdm9pZCB6ZmlXbGFuUmVzZXRUYWxseSh6ZGV2X3QqIGRldik7CitleHRlcm4gdm9pZCB6ZmlXbGFuUXVlcnlUYWxseSh6ZGV2X3QqIGRldiwgc3RydWN0IHpzQ29tbVRhbGx5ICp0YWxseSk7CitleHRlcm4gdm9pZCB6ZmlXbGFuUXVlcnlUcmFmVGFsbHkoemRldl90KiBkZXYsIHN0cnVjdCB6c1RyYWZUYWxseSAqdGFsbHkpOworZXh0ZXJuIHZvaWQgemZpV2xhblF1ZXJ5TW9uSGFsUnhJbmZvKHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNNb25IYWxSeEluZm8gKmhhbFJ4SW5mbyk7CisKK2V4dGVybiB1MzJfdCB6ZmlGV0NvbmZpZyh6ZGV2X3QqIGRldiwgdTMyX3Qgc2l6ZSk7CisKK2V4dGVybiB2b2lkIHpmaURLRW5hYmxlKHpkZXZfdCogZGV2LCB1MzJfdCBlbmFibGUpOworCitleHRlcm4gdm9pZCB6ZmlXbGFuU2V0TXVsdGljYXN0TGlzdCh6ZGV2X3QqIGRldiwgdThfdCBzaXplLCB1OF90KiBwTGlzdCk7CitleHRlcm4gdm9pZCB6ZmlXbGFuUmVtb3ZlS2V5KHpkZXZfdCogZGV2LCB1OF90IGtleVR5cGUsIHU4X3Qga2V5SWQpOworZXh0ZXJuIHU4X3QgemZpV2xhblF1ZXJ5SXNQS0luc3RhbGxlZCh6ZGV2X3QgKmRldiwgdThfdCAqc3RhTWFjQWRkcik7CitleHRlcm4gdTMyX3QgemZpV2xhblF1ZXJ5UGFja2V0VHlwZVByb21pc2N1b3VzKHpkZXZfdCogZGV2KTsKK2V4dGVybiB2b2lkIHpmaVdsYW5TZXRQYWNrZXRUeXBlUHJvbWlzY3VvdXMoemRldl90KiBkZXYsIHUzMl90IHNldFZhbHVlKTsKK2V4dGVybiB2b2lkIHpmaVNldENoYW5uZWxNYW5hZ2VtZW50KHpkZXZfdCogZGV2LCB1MzJfdCBzZXR0aW5nKTsKK2V4dGVybiB2b2lkIHpmaVNldFJpZnMoemRldl90KiBkZXYsIHUxNl90IHNldHRpbmcpOworZXh0ZXJuIHZvaWQgemZpQ2hlY2tSaWZzKHpkZXZfdCogZGV2KTsKK2V4dGVybiB2b2lkIHpmaVNldFJlb3JkZXIoemRldl90KiBkZXYsIHUxNl90IHZhbHVlKTsKK2V4dGVybiB2b2lkIHpmaVNldFNlcURlYnVnKHpkZXZfdCogZGV2LCB1MTZfdCB2YWx1ZSk7CisKK2V4dGVybiB1MTZfdCB6ZmlDb25maWdXZHNQb3J0KHpkZXZfdCogZGV2LCB1OF90IHdkc1BvcnRJZCwgdTE2X3QgZmxhZywgdTE2X3QqIHdkc0FkZHIsCisgICAgICAgIHUxNl90IGVuY1R5cGUsIHUzMl90KiB3ZHNLZXkpOworZXh0ZXJuIHZvaWQgemZpV2xhblF1ZXJ5UmVndWxhdGlvblRhYmxlKHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNSZWd1bGF0aW9uVGFibGUqIHBFbnRyeSk7CitleHRlcm4gdm9pZCB6ZmlXbGFuU2V0U2NhblRpbWVyUGVyQ2hhbm5lbCh6ZGV2X3QqIGRldiwgdTE2X3QgdGltZSk7CitleHRlcm4gdm9pZCB6ZmlXbGFuU2V0QXV0b1JlY29ubmVjdCh6ZGV2X3QqIGRldiwgdThfdCBlbmFibGUpOworZXh0ZXJuIHUzMl90IHpmaURlYnVnQ21kKHpkZXZfdCogZGV2LCB1MzJfdCBjbWQsIHUzMl90IHZhbHVlKTsKK2V4dGVybiB2b2lkIHpmaVdsYW5TZXRQcm9iaW5nSGlkZGVuU3NpZCh6ZGV2X3QqIGRldiwgdThfdCogc3NpZCwgdThfdCBzc2lkTGVuLAorICAgIHUxNl90IGVudHJ5KTsKK2V4dGVybiB2b2lkIHpmaVdsYW5TZXREcm9wVW5lbmNyeXB0ZWRQYWNrZXRzKHpkZXZfdCogZGV2LCB1OF90IGVuYWJsZSk7CitleHRlcm4gdm9pZCB6ZmlXbGFuU2V0SUJTU0pvaW5Pbmx5KHpkZXZfdCogZGV2LCB1OF90IGpvaW5Pbmx5KTsKK2V4dGVybiB2b2lkIHpmaVdsYW5TZXREZWZhdWx0S2V5SWQoemRldl90KiBkZXYsIHU4X3Qga2V5SWQpOworZXh0ZXJuIHZvaWQgemZpV2xhblNldERpc2FibGVQcm9iaW5nV2l0aFNzaWQoemRldl90KiBkZXYsIHU4X3QgbW9kZSk7CitleHRlcm4gdm9pZCB6ZmlXbGFuUXVlcnlHU04oemRldl90KiBkZXYsIHU4X3QgKmdzbiwgdTE2X3QgdmFwSWQpOworZXh0ZXJuIHUxNl90IHpmaVN0YUFkZEllV3BhUnNuKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3Qgb2Zmc2V0LCB1OF90IGZyYW1lVHlwZSk7CitleHRlcm4gdThfdCB6ZmlXbGFuU2V0RG90MTFETW9kZSh6ZGV2X3QqIGRldiwgdThfdCBtb2RlKTsKK2V4dGVybiB1OF90IHpmaVdsYW5TZXREb3QxMUhERlNNb2RlKHpkZXZfdCogZGV2LCB1OF90IG1vZGUpOworZXh0ZXJuIHU4X3QgemZpV2xhblNldERvdDExSFRQQ01vZGUoemRldl90KiBkZXYsIHU4X3QgbW9kZSk7CitleHRlcm4gdThfdCB6ZmlXbGFuU2V0QW5pTW9kZSh6ZGV2X3QqIGRldiwgdThfdCBtb2RlKTsKK2V4dGVybiB2b2lkIHpmaVdsYW5TZXRTdGFXbWUoemRldl90KiBkZXYsIHU4X3QgZW5hYmxlLCB1OF90IHVhcHNkSW5mbyk7CitleHRlcm4gdm9pZCB6ZmlXbGFuU2V0QXBXbWUoemRldl90KiBkZXYsIHU4X3QgZW5hYmxlKTsKK2V4dGVybiB1OF90IHpmaVdsYW5RdWVyeXdtZUVuYWJsZSh6ZGV2X3QqIGRldik7CisjaWZkZWYgWk1fT1NfTElOVVhfRlVOQworZXh0ZXJuIHZvaWQgemZpV2xhblNob3dUYWxseSh6ZGV2X3QqIGRldik7CisjZW5kaWYKKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQworLyogQ0VOQyAqLworZXh0ZXJuIHU4X3QgemZpV2xhblNldENlbmNQYWlyd2lzZUtleSh6ZGV2X3QqIGRldiwgdThfdCBrZXlpZCwgdTMyX3QgKnR4aXYsIHUzMl90ICpyeGl2LAorICAgICAgICB1OF90ICprZXksIHU4X3QgKm1pYyk7CitleHRlcm4gdThfdCB6ZmlXbGFuU2V0Q2VuY0dyb3VwS2V5KHpkZXZfdCogZGV2LCB1OF90IGtleWlkLCB1MzJfdCAqcnhpdiwKKyAgICAgICAgdThfdCAqa2V5LCB1OF90ICptaWMpOworI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKK2V4dGVybiB2b2lkIHpmaVdsYW5RdWVyeVNpZ25hbEluZm8oemRldl90KiBkZXYsIHU4X3QgKmJ1ZmZlcik7CitleHRlcm4gdm9pZCB6ZmlXbGFuUXVlcnlBZEhvY0NyZWF0ZWRCc3NEZXNjKHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNCc3NJbmZvICpwQnNzSW5mbyk7CitleHRlcm4gdThfdCB6ZmlXbGFuUXVlcnlBZEhvY0lzQ3JlYXRvcih6ZGV2X3QqIGRldik7CitleHRlcm4gdTMyX3QgemZpV2xhblF1ZXJ5U3VwcG9ydE1vZGUoemRldl90KiBkZXYpOworZXh0ZXJuIHUzMl90IHpmaVdsYW5RdWVyeVRyYW5zbWl0UG93ZXIoemRldl90KiBkZXYpOworZXh0ZXJuIHZvaWQgemZpV2xhbkVuYWJsZUxlYXBDb25maWcoemRldl90KiBkZXYsIHU4X3QgbGVhcEVuYWJsZWQpOworCisvKiByZXR1cm5lZCBidWZmZXIgYWxsb2NhdGVkIGJ5IGRyaXZlciBjb3JlICovCitleHRlcm4gdm9pZCB6ZmlSZWN2RXRoQ29tcGxldGUoemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKKworZXh0ZXJuIHZvaWQgemZpUmVjdjgwMjExKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Ziwgc3RydWN0IHpzQWRkaXRpb25JbmZvKiBhZGRJbmZvKTsKKworZXh0ZXJuIHZvaWQgemZpV2xhblNldE1heFR4UG93ZXIoemRldl90KiBkZXYsIHU4X3QgcG93ZXIyLCB1OF90IHBvd2VyNSk7CitleHRlcm4gdm9pZCB6ZmlXbGFuUXVlcnlNYXhUeFBvd2VyKHpkZXZfdCogZGV2LCB1OF90ICpwb3dlcjIsIHU4X3QgKnBvd2VyNSk7CitleHRlcm4gdm9pZCB6ZmlXbGFuU2V0Q29ubmVjdE1vZGUoemRldl90KiBkZXYsIHU4X3QgbW9kZSk7CitleHRlcm4gdm9pZCB6ZmlXbGFuU2V0U3VwcG9ydE1vZGUoemRldl90KiBkZXYsIHUzMl90IG1vZGUpOworZXh0ZXJuIHZvaWQgemZpV2xhblNldEFkaG9jTW9kZSh6ZGV2X3QqIGRldiwgdTMyX3QgbW9kZSk7CitleHRlcm4gdTMyX3QgemZpV2xhblF1ZXJ5QWRob2NNb2RlKHpkZXZfdCogZGV2LCB1OF90IGJXcmFwcGVyKTsKK2V4dGVybiB1OF90IHpmaVdsYW5TZXRDb3VudHJ5SXNvTmFtZSh6ZGV2X3QqIGRldiwgdThfdCAqY291bnRyeUlzb05hbWUsIHU4X3QgbGVuZ3RoKTsKK2V4dGVybiBjb25zdCBjaGFyKiB6ZmlXbGFuUXVlcnlDb3VudHJ5SXNvTmFtZSh6ZGV2X3QqIGRldik7CitleHRlcm4gdThfdCB6ZmlXbGFuUXVlcnlyZWd1bGF0b3J5RG9tYWluKHpkZXZfdCogZGV2KTsKK2V4dGVybiB1OF90IHpmaVdsYW5RdWVyeUNDUyh6ZGV2X3QqIGRldik7CitleHRlcm4gdm9pZCB6ZmlXbGFuU2V0Q0NTKHpkZXZfdCogZGV2LCB1OF90IG1vZGUpOworZXh0ZXJuIHZvaWQgemZpV2xhblNldFJlZ3VsYXRvcnkoemRldl90KiBkZXYsIHU4X3QgQ0NTLCB1MTZfdCBDb2RlLCB1OF90IGJmaXJzdENoYW5uZWwpOworZXh0ZXJuIGNvbnN0IGNoYXIqIHpmaUhwR2V0aXNvTmFtZWZyb21yZWdpb25Db2RlKHpkZXZfdCogZGV2LCB1MTZfdCByZWdpb25Db2RlKTsKK2V4dGVybiB2b2lkICB6ZmlXbGFuU2V0TEVEQ3RybFBhcmFtKHpkZXZfdCogZGV2LCB1OF90IHR5cGUsIHU4X3QgZmxhZyk7CitleHRlcm4gdTMyX3QgemZpV2xhblF1ZXJ5UmVjZWl2ZWRQYWNrZXQoemRldl90KiBkZXYpOworZXh0ZXJuIHZvaWQgemZpV2xhbkNoZWNrU1dFbmNyeXB0aW9uKHpkZXZfdCogZGV2KTsKK2V4dGVybiB1MTZfdCB6ZmlXbGFuUXVlcnlBbGxvd0NoYW5uZWxzKHpkZXZfdCAqZGV2LCB1MTZfdCAqY2hhbm5lbHMpOworZXh0ZXJuIHUxNl90IHpmaVdsYW5HZXRNdWx0aWNhc3RBZGRyZXNzQ291bnQoemRldl90KiBkZXYpOworZXh0ZXJuIHZvaWQgemZpV2xhbkdldE11bHRpY2FzdExpc3QoemRldl90KiBkZXYsIHU4X3QqIHBNQ0xpc3QpOworZXh0ZXJuIHZvaWQgemZpV2xhblNldFBhY2tldEZpbHRlcih6ZGV2X3QqIGRldiwgdTMyX3QgUGFja2V0RmlsdGVyKTsKK2V4dGVybiB1OF90IHpmaUNvbXBhcmVXaXRoTXVsdGljYXN0TGlzdEFkZHJlc3MoemRldl90KiBkZXYsIHUxNl90KiBkc3RNYWNBZGRyKTsKK2V4dGVybiB2b2lkIHpmaVdsYW5TZXRTYWZlTW9kZUVuYWJsZWQoemRldl90KiBkZXYsIHU4X3Qgc2FmZU1vZGUpOworZXh0ZXJuIHZvaWQgemZpV2xhblNldElCU1NBZGRpdGlvbmFsSUVMZW5ndGgoemRldl90KiBkZXYsIHUzMl90IGlic3NBZGRpdGlvbmFsSUVTaXplLCAgdThfdCogaWJzc0FkZGl0aW9uYWxJRSk7CitleHRlcm4gdm9pZCB6ZmlXbGFuU2V0WExpbmtNb2RlKHpkZXZfdCogZGV2LCB1MzJfdCBzZXRWYWx1ZSk7CisKKy8qIGhwcncuYyAqLworZXh0ZXJuIHUzMl90IHpmaURiZ1dyaXRlRmxhc2goemRldl90KiBkZXYsIHUzMl90IGFkZHIsIHUzMl90IHZhbCk7CitleHRlcm4gdTMyX3QgemZpRGJnV3JpdGVSZWcoemRldl90KiBkZXYsIHUzMl90IGFkZHIsIHUzMl90IHZhbCk7CitleHRlcm4gdTMyX3QgemZpRGJnUmVhZFJlZyh6ZGV2X3QqIGRldiwgdTMyX3QgYWRkcik7CisKK2V4dGVybiB1MzJfdCB6ZmlEYmdXcml0ZUVlcHJvbSh6ZGV2X3QqIGRldiwgdTMyX3QgYWRkciwgdTMyX3QgdmFsKTsKK2V4dGVybiB1MzJfdCB6ZmlEYmdCbG9ja1dyaXRlRWVwcm9tKHpkZXZfdCogZGV2LCB1MzJfdCBhZGRyLCB1MzJfdCogYnVmKTsKK2V4dGVybiB1MzJfdCB6ZmlEYmdCbG9ja1dyaXRlRWVwcm9tX3YyKHpkZXZfdCogZGV2LCB1MzJfdCBhZGRyLCB1MzJfdCogYnVmLCB1MzJfdCB3cmxlbik7CisKK2V4dGVybiB1MTZfdCB6ZmlEYmdDaGlwRXJhc2VGbGFzaCh6ZGV2X3QgKmRldik7CitleHRlcm4gdTE2X3QgemZpRGJnUHJvZ3JhbUZsYXNoKHpkZXZfdCAqZGV2LCB1MzJfdCBvZmZzZXQsIHUzMl90IGxlbiwgdTMyX3QgKmRhdGEpOworZXh0ZXJuIHUzMl90IHpmaURiZ0dldEZsYXNoQ2hlY2tTdW0oemRldl90ICpkZXYsIHUzMl90IGFkZHIsIHUzMl90IGxlbik7CitleHRlcm4gdTMyX3QgemZpRGJnUmVhZEZsYXNoKHpkZXZfdCAqZGV2LCB1MzJfdCBhZGRyLCB1MzJfdCBsZW4pOworZXh0ZXJuIHUzMl90IHpmaURvd25sb2FkRndTZXQoemRldl90ICpkZXYpOworCitleHRlcm4gdTMyX3QgemZpRGJnRGVsYXlXcml0ZVJlZyh6ZGV2X3QqIGRldiwgdTMyX3QgYWRkciwgdTMyX3QgdmFsKTsKK2V4dGVybiB1MzJfdCB6ZmlEYmdGbHVzaERlbGF5V3JpdGUoemRldl90KiBkZXYpOworCitleHRlcm4gdTMyX3QgemZpRGJnU2V0SUZTeW50aGVzaXplcih6ZGV2X3QqIGRldiwgdTMyX3QgdmFsdWUpOworZXh0ZXJuIHUzMl90IHpmaURiZ1JlYWRUYWxseSh6ZGV2X3QqIGRldik7CisKK2V4dGVybiB1MzJfdCB6ZmlEYmdRdWVyeUh3VHhCdXN5KHpkZXZfdCogZGV2KTsKKworZXh0ZXJuIHU4X3QgemZpV2xhbkdldERlc3RBZGRyRnJvbUJ1Zih6ZGV2X3QgKmRldiwgemJ1Zl90ICpidWYsIHUxNl90ICptYWNBZGRyKTsKKworZXh0ZXJuIHUzMl90IHpmaVdsYW5RdWVyeUh3Q2FwYWJpbGl0eSh6ZGV2X3QqIGRldik7CisKK2V4dGVybiB2b2lkIHpmaVdsYW5TZXREeW5hbWljU0lGU1BhcmFtKHpkZXZfdCogZGV2LCB1OF90IHZhbCk7CisKKy8qKioqKiBFbmQgb2Ygc2VjdGlvbiAyICoqKioqLworCisvKioqKiogc2VjdGlvbiAzIHBlcmZvcm1hY2UgZXZhbHVhdGlvbiAqKioqKi8KKyNpZmRlZiBaTV9FTkFCTEVfUEVSRk9STUFOQ0VfRVZBTFVBVElPTgorZXh0ZXJuIHZvaWQgemZpVHhQZXJmb3JtYW5jZU1TRFUoemRldl90KiBkZXYsIHUzMl90IHRpY2spOworZXh0ZXJuIHZvaWQgemZpUnhQZXJmb3JtYW5jZU1QRFUoemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKK2V4dGVybiB2b2lkIHpmaVJ4UGVyZm9ybWFuY2VSZWcoemRldl90KiBkZXYsIHUzMl90IHJlZywgdTMyX3QgcnNwKTsKKyNkZWZpbmUgWk1fUEVSRk9STUFOQ0VfSU5JVChkZXYpICAgICAgICAgICAgICAgIHpmaVBlcmZvcm1hbmNlSW5pdChkZXYpOworI2RlZmluZSBaTV9QRVJGT1JNQU5DRV9UWF9NU0RVKGRldiwgdGljaykgICAgICAgemZpVHhQZXJmb3JtYW5jZU1TRFUoZGV2LCB0aWNrKTsKKyNkZWZpbmUgWk1fUEVSRk9STUFOQ0VfUlhfTVNEVShkZXYsIHRpY2spICAgICAgIHpmaVJ4UGVyZm9ybWFuY2VNU0RVKGRldiwgdGljayk7CisjZGVmaW5lIFpNX1BFUkZPUk1BTkNFX1RYX01QRFUoZGV2LCB0aWNrKSAgICAgICB6ZmlUeFBlcmZvcm1hbmNlTVBEVShkZXYsIHRpY2spOworI2RlZmluZSBaTV9QRVJGT1JNQU5DRV9SWF9NUERVKGRldiwgYnVmKSAgICAgICAgemZpUnhQZXJmb3JtYW5jZU1QRFUoZGV2LCBidWYpOworI2RlZmluZSBaTV9QRVJGT1JNQU5DRV9SWF9TRVEoZGV2LCBidWYpICAgICAgICAgemZpUnhQZXJmb3JtYW5jZVNlcShkZXYsIGJ1Zik7CisjZGVmaW5lIFpNX1BFUkZPUk1BTkNFX1JFRyhkZXYsIHJlZywgcnNwKSAgICB7aWYoY21kWzFdID09IHJlZykgemZpUnhQZXJmb3JtYW5jZVJlZyhkZXYsIHJlZywgcnNwKTt9CisjZGVmaW5lIFpNX1BFUkZPUk1BTkNFX0RVUChkZXYsIGJ1ZjEsIGJ1ZjIpICAgICB6ZmlSeFBlcmZvcm1hbmNlRHVwKGRldiwgYnVmMSwgYnVmMik7CisjZGVmaW5lIFpNX1BFUkZPUk1BTkNFX0ZSRUUoZGV2LCBidWYpICAgICAgICAgICB6ZmlSeFBlcmZvcm1hbmNlRnJlZShkZXYsIGJ1Zik7CisjZGVmaW5lIFpNX1BFUkZPUk1BTkNFX1JYX0FNU0RVKGRldiwgYnVmLCBsZW4pICB6ZmlSeFBlcmZvcm1hbmNlQU1TRFUoZGV2LCBidWYsIGxlbik7CisjZGVmaW5lIFpNX1BFUkZPUk1BTkNFX1JYX0ZMVVNIKGRldikgICAgICAgICAgICB6ZmlSeFBlcmZvcm1hbmNlRmx1c2goZGV2KTsKKyNkZWZpbmUgWk1fUEVSRk9STUFOQ0VfUlhfQ0xFQVIoZGV2KSAgICAgICAgICAgIHpmaVJ4UGVyZm9ybWFuY2VDbGVhcihkZXYpOworI2RlZmluZSBaTV9TRVFfREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdkLT5zZXFfZGVidWcpIERiZ1ByaW50CisjZGVmaW5lIFpNX1BFUkZPUk1BTkNFX1JYX1JFT1JERVIoZGV2KSAgICAgICAgICB6ZmlSeFBlcmZvcm1hbmNlUmVvcmRlcihkZXYpOworI2Vsc2UKKyNkZWZpbmUgWk1fUEVSRk9STUFOQ0VfSU5JVChkZXYpCisjZGVmaW5lIFpNX1BFUkZPUk1BTkNFX1RYX01TRFUoZGV2LCB0aWNrKQorI2RlZmluZSBaTV9QRVJGT1JNQU5DRV9SWF9NU0RVKGRldiwgdGljaykKKyNkZWZpbmUgWk1fUEVSRk9STUFOQ0VfVFhfTVBEVShkZXYsIHRpY2spCisjZGVmaW5lIFpNX1BFUkZPUk1BTkNFX1JYX01QRFUoZGV2LCBidWYpCisjZGVmaW5lIFpNX1BFUkZPUk1BTkNFX1JYX1NFUShkZXYsIGJ1ZikKKyNkZWZpbmUgWk1fUEVSRk9STUFOQ0VfUkVHKGRldiwgcmVnLCByc3ApCisjZGVmaW5lIFpNX1BFUkZPUk1BTkNFX0RVUChkZXYsIGJ1ZjEsIGJ1ZjIpCisjZGVmaW5lIFpNX1BFUkZPUk1BTkNFX0ZSRUUoZGV2LCBidWYpCisjZGVmaW5lIFpNX1BFUkZPUk1BTkNFX1JYX0FNU0RVKGRldiwgYnVmLCBsZW4pCisjZGVmaW5lIFpNX1BFUkZPUk1BTkNFX1JYX0ZMVVNIKGRldikKKyNkZWZpbmUgWk1fUEVSRk9STUFOQ0VfUlhfQ0xFQVIoZGV2KQorI2RlZmluZSBaTV9TRVFfREVCVUcKKyNkZWZpbmUgWk1fUEVSRk9STUFOQ0VfUlhfUkVPUkRFUihkZXYpCisjZW5kaWYKKy8qKioqKiBFbmQgb2Ygc2VjdGlvbiAzICoqKioqLworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvcHViX3pmdy5oIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL3B1Yl96ZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWEyMjcyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL3B1Yl96ZncuaApAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfUFVCX1pGV19ICisjZGVmaW5lIF9QVUJfWkZXX0gKKworI2luY2x1ZGUgIi4uL29hbF9kdC5oIgorCisKKy8qIEJ1ZmZlciBtYW5hZ2VtZW50ICovCisjaWZkZWYgWk1fRU5BQkxFX0JVRkZFUl9ERUJVRworZXh0ZXJuIHpidWZfdCogemZ3QnVmQWxsb2NhdGVXaXRoQ29udGV4dCh6ZGV2X3QqIGRldiwgdTE2X3QgbGVuLCB1OF90ICpmdW5jdGlvbk5hbWUsIFVMT05HIGxpbmUpOworI2RlZmluZSB6ZndCdWZBbGxvY2F0ZShkZXYsIGxlbikgIHpmd0J1ZkFsbG9jYXRlV2l0aENvbnRleHQoZGV2LCBsZW4sICh1OF90ICopX19GVU5DVElPTl9fLCBfX0xJTkVfXykKKyNlbHNlCitleHRlcm4gemJ1Zl90KiB6ZndCdWZBbGxvY2F0ZSh6ZGV2X3QqIGRldiwgdTE2X3QgbGVuKTsKKyNlbmRpZgorZXh0ZXJuIHZvaWQgemZ3QnVmRnJlZSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IGVyckNvZGUpOworZXh0ZXJuIHUxNl90IHpmd0J1ZkNoYWluKHpkZXZfdCogZGV2LCB6YnVmX3QqKiBoZWFkLCB6YnVmX3QqIHRhaWwpOworZXh0ZXJuIHUxNl90IHpmd0J1ZkNvcHkoemRldl90KiBkZXYsIHpidWZfdCogZHN0LCB6YnVmX3QqIHNyYyk7CitleHRlcm4gdTE2X3QgemZ3QnVmU2V0U2l6ZSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IHNpemUpOworZXh0ZXJuIHUxNl90IHpmd0J1ZlJlbW92ZUhlYWQoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBzaXplKTsKK2V4dGVybiB1MTZfdCB6ZndCdWZHZXRTaXplKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Zik7CitleHRlcm4gdm9pZCAgemZ3Q29weUJ1ZkNvbnRleHQoemRldl90KiBkZXYsIHpidWZfdCogc291cmNlLCB6YnVmX3QqIGRlc3QpOworCisvKiBNZW1vcnkgbWFuYWdlbWVudCAqLworZXh0ZXJuIHZvaWQqIHpmd01lbUFsbG9jYXRlKHpkZXZfdCogZGV2LCB1MzJfdCBzaXplKTsKK2V4dGVybiB2b2lkIHpmd01lbUZyZWUoemRldl90KiBkZXYsIHZvaWQqIG1lbSwgdTMyX3Qgc2l6ZSk7CitleHRlcm4gdm9pZCB6ZndNZW1vcnlDb3B5KHU4X3QqIGRzdCwgdThfdCogc3JjLCB1MTZfdCBsZW5ndGgpOworZXh0ZXJuIHZvaWQgemZ3TWVtb3J5TW92ZSh1OF90KiBkc3QsIHU4X3QqIHNyYywgdTE2X3QgbGVuZ3RoKTsKK2V4dGVybiB2b2lkIHpmd1plcm9NZW1vcnkodThfdCogdmEsIHUxNl90IGxlbmd0aCk7CitleHRlcm4gdThfdCB6ZndNZW1vcnlJc0VxdWFsKHU4X3QqIG0xLCB1OF90KiBtMiwgdTE2X3QgbGVuZ3RoKTsKKworLyogT3RoZXJzICovCitleHRlcm4gdm9pZCB6ZndTbGVlcCh6ZGV2X3QqIGRldiwgdTMyX3QgbXMpOworZXh0ZXJuIHUxNl90IHpmd0dldFZhcElkKHpkZXZfdCogZGV2KTsKK2V4dGVybiB1MTZfdCB6ZndTdGFBZGRJZVdwYVJzbih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCwgdThfdCBmcmFtZVR5cGUpOworZXh0ZXJuIHUzMl90IHpmd1dhaXRGb3JFdmVudCh6ZGV2X3QgKmRldiwgdTMyX3QgZXZlbnQsIHUzMl90IHRpbWVvdXQpOworZXh0ZXJuIHZvaWQgemZ3U2VuZEV2ZW50KHpkZXZfdCogZGV2KTsKK2V4dGVybiB2b2lkIHpmd0dldEFjdGl2ZVNjYW5EdXIoemRldl90KiBkZXYsIHU4X3QqIER1ciApOworZXh0ZXJuIHZvaWQgemZ3R2V0U2hvd1plcm9MZW5ndGhTU0lEKHpkZXZfdCogZGV2LCB1OF90KiBEdXIgKTsKKy8qIEZvciBkZWJ1Z2dpbmcgKi8KK2V4dGVybiB2b2lkIHpmd0R1bXBCdWYoemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKK2V4dGVybiB2b2lkIHpmd0RiZ1JlYWRSZWdEb25lKHpkZXZfdCogZGV2LCB1MzJfdCBhZGRyLCB1MzJfdCB2YWwpOworLyogRm9yIEV2bCAqLworZXh0ZXJuIHZvaWQgemZ3RGJnRG93bmxvYWRGd0luaXREb25lKHpkZXZfdCogZGV2KTsKK2V4dGVybiB2b2lkIHpmd0RiZ1JlYWRGbGFzaERvbmUoemRldl90KiBkZXYsIHUzMl90IGFkZHIsIHUzMl90KiByc3BkYXRhLCB1MzJfdCBkYXRhbGVuKTsKK2V4dGVybiB2b2lkIHpmd0RiZ0dldEZsYXNoQ2hrU3VtRG9uZSh6ZGV2X3QqIGRldiwgdTMyX3QqIHJzcGRhdGEpOworZXh0ZXJuIHZvaWQgemZ3RGJnUHJvZ3JhbWVGbGFzaERvbmUoemRldl90KiBkZXYpOworZXh0ZXJuIHZvaWQgemZ3RGJnUHJvZ3JhbWVGbGFzaENoa0RvbmUoemRldl90KiBkZXYpOworZXh0ZXJuIHZvaWQgemZ3RGJnV3JpdGVSZWdEb25lKHpkZXZfdCogZGV2LCB1MzJfdCBhZGRyLCB1MzJfdCB2YWwpOworZXh0ZXJuIHZvaWQgemZ3RGJnV3JpdGVFZXByb21Eb25lKHpkZXZfdCogZGV2LCB1MzJfdCBhZGRyLCB1MzJfdCB2YWwpOworZXh0ZXJuIHZvaWQgemZ3RGJnUmVhZFRhbGx5RG9uZSh6ZGV2X3QqIGRldik7CitleHRlcm4gdm9pZCB6ZndXbGFuUmVhZFJlZ0RvbmUoemRldl90KiBkZXYsIHUzMl90IGFkZHIsIHUzMl90IHZhbCk7CitleHRlcm4gdm9pZCB6ZndXbGFuV3JpdGVSZWdEb25lKHpkZXZfdCogZGV2LCB1MzJfdCBhZGRyLCB1MzJfdCB2YWwpOworZXh0ZXJuIHZvaWQgemZ3V2xhblJlYWRUYWxseURvbmUoemRldl90KiBkZXYpOworZXh0ZXJuIHZvaWQgemZ3RGJnUXVlcnlId1R4QnVzeURvbmUoemRldl90KiBkZXYsIHUzMl90IHZhbCk7CitleHRlcm4gdTMyX3QgemZ3UmVhZFJlZyh6ZGV2X3QqIGRldiwgdTMyX3Qgb2Zmc2V0KTsKK2V4dGVybiB1MzJfdCB6ZndSZWFkRWVwcm9tKHpkZXZfdCogZGV2LCB1MzJfdCBhZGRyKTsKKworLyogUmVzZXJ2ZWQgZm9yIFZpc3RhLCBwbGVhc2UgcmV0dXJuIDAgKi8KK2V4dGVybiB1OF90IHpmd0dldFBrdEVuY0V4ZW1wdGlvbkFjdGlvblR5cGUoemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKKworI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisvKiBSZXNlcnZlZCBmb3IgQ0VOQywgcGxlYXNlIHJldHVybiAwICovCitleHRlcm4gdThfdCB6ZndDZW5jSGFuZGxlQmVhY29uUHJvYnJlc3Bvbih6ZGV2X3QqIGRldiwgdThfdCAqcFdJRWMsCisgICAgICAgIHU4X3QgKnBQZWVyU1NJRGMsIHU4X3QgKnBQZWVyQWRkcmMpOworI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKKworI2lmZGVmIFpNX0hBTFBMVVNfTE9DSworZXh0ZXJuIGFzbWxpbmthZ2Ugc3RydWN0IHpzV2xhbkRldiAqemZ3R2V0V2xhbkRldih6ZGV2X3QqIGRldik7CitleHRlcm4gYXNtbGlua2FnZSB2b2lkIHpmd0VudGVyQ3JpdGljYWxTZWN0aW9uKHpkZXZfdCogZGV2KTsKK2V4dGVybiBhc21saW5rYWdlIHZvaWQgemZ3TGVhdmVDcml0aWNhbFNlY3Rpb24oemRldl90KiBkZXYpOworZXh0ZXJuIGFzbWxpbmthZ2UgdThfdCB6ZndCdWZSZWFkQnl0ZSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCk7CitleHRlcm4gYXNtbGlua2FnZSB1MTZfdCB6ZndCdWZSZWFkSGFsZldvcmQoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCB6ZndCdWZXcml0ZUJ5dGUoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQsIHU4X3QgdmFsdWUpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCB6ZndCdWZXcml0ZUhhbGZXb3JkKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3Qgb2Zmc2V0LCB1MTZfdCB2YWx1ZSk7CitleHRlcm4gYXNtbGlua2FnZSB1OF90ICp6ZndHZXRCdWZmZXIoemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKKyNlbmRpZgorCisjZW5kaWYgLy9fUFVCX1pGV19ICmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvcXVldWUuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9xdWV1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyOTQ4MzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvcXVldWUuYwpAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE1vZHVsZSBOYW1lIDogcXVldWUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQWJzdHJhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBUaGlzIG1vZHVsZSBjb250YWlucyBxdWV1ZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTk9URVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgImNwcmVjb21wLmgiCisjaW5jbHVkZSAicXVldWUuaCIKKworCitzdHJ1Y3QgenNRdWV1ZSogemZRdWV1ZUNyZWF0ZSh6ZGV2X3QqIGRldiwgdTE2X3Qgc2l6ZSkKK3sKKyAgICBzdHJ1Y3QgenNRdWV1ZSogcTsKKworICAgIGlmICgocSA9IChzdHJ1Y3QgenNRdWV1ZSopemZ3TWVtQWxsb2NhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHpzUXVldWUpCisgICAgICAgICAgICArIChzaXplb2Yoc3RydWN0IHpzUXVldWVDZWxsKSooc2l6ZS0xKSkpKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgcS0+c2l6ZSA9IHNpemU7CisgICAgICAgIHEtPnNpemVNYXNrID0gc2l6ZS0xOworICAgICAgICBxLT5oZWFkID0gMDsKKyAgICAgICAgcS0+dGFpbCA9IDA7CisgICAgfQorICAgIHJldHVybiBxOworfQorCit2b2lkIHpmUXVldWVEZXN0cm95KHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNRdWV1ZSogcSkKK3sKKyAgICB1MTZfdCBzaXplID0gc2l6ZW9mKHN0cnVjdCB6c1F1ZXVlKSArIChzaXplb2Yoc3RydWN0IHpzUXVldWVDZWxsKSoocS0+c2l6ZS0xKSk7CisKKyAgICB6ZlF1ZXVlRmx1c2goZGV2LCBxKTsKKyAgICB6ZndNZW1GcmVlKGRldiwgcSwgc2l6ZSk7CisKKyAgICByZXR1cm47Cit9CisKK3UxNl90IHpmUXVldWVQdXROY3MoemRldl90KiBkZXYsIHN0cnVjdCB6c1F1ZXVlKiBxLCB6YnVmX3QqIGJ1ZiwgdTMyX3QgdGljaykKK3sKKyAgICB1MTZfdCByZXQgPSBaTV9FUlJfUVVFVUVfRlVMTDsKKworICAgIHptX21zZzBfbW0oWk1fTFZfMSwgInpmUXVldWVQdXROY3MoKSIpOworCisgICAgaWYgKCgocS0+dGFpbCsxKSZxLT5zaXplTWFzaykgIT0gcS0+aGVhZCkKKyAgICB7CisgICAgICAgIHEtPmNlbGxbcS0+dGFpbF0uYnVmID0gYnVmOworICAgICAgICBxLT5jZWxsW3EtPnRhaWxdLnRpY2sgPSB0aWNrOworICAgICAgICBxLT50YWlsID0gKHEtPnRhaWwrMSkgJiBxLT5zaXplTWFzazsKKyAgICAgICAgcmV0ID0gWk1fU1VDQ0VTUzsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCit1MTZfdCB6ZlF1ZXVlUHV0KHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNRdWV1ZSogcSwgemJ1Zl90KiBidWYsIHUzMl90IHRpY2spCit7CisgICAgdTE2X3QgcmV0OworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgcmV0ID0gemZRdWV1ZVB1dE5jcyhkZXYsIHEsIGJ1ZiwgdGljayk7CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgcmV0dXJuIHJldDsKK30KKworemJ1Zl90KiB6ZlF1ZXVlR2V0KHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNRdWV1ZSogcSkKK3sKKyAgICB6YnVmX3QqIGJ1ZiA9IE5VTEw7CisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBpZiAocS0+aGVhZCAhPSBxLT50YWlsKQorICAgIHsKKyAgICAgICAgYnVmID0gcS0+Y2VsbFtxLT5oZWFkXS5idWY7CisgICAgICAgIHEtPmhlYWQgPSAocS0+aGVhZCsxKSAmIHEtPnNpemVNYXNrOworICAgIH0KKworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICByZXR1cm4gYnVmOworfQorCit1MTZfdCB6ZkNvbXBhcmVEc3R3aXRoQnVmKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdThfdCogYWRkcikKK3sKKyAgICB1MTZfdCBpOworICAgIHU4X3QgZHN0WzZdOworCisgICAgZm9yIChpPTA7IGk8NjsgaSsrKQorICAgIHsKKyAgICAgICAgZHN0W2ldID0gem13X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgaSk7CisgICAgICAgIGlmIChkc3RbaV0gIT0gYWRkcltpXSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDEraTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCisKK3pidWZfdCogemZRdWV1ZUdldFdpdGhNYWMoemRldl90KiBkZXYsIHN0cnVjdCB6c1F1ZXVlKiBxLCB1OF90KiBhZGRyLCB1OF90KiBtYikKK3sKKyAgICB6YnVmX3QqIGJ1ZjsKKyAgICB6YnVmX3QqIHJldEJ1ZiA9IE5VTEw7CisgICAgdTE2X3QgaW5kZXgsIG5leHQ7CisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgICptYiA9IDA7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgaW5kZXggPSBxLT5oZWFkOworCisgICAgd2hpbGUgKDEpCisgICAgeworICAgICAgICBpZiAoaW5kZXggIT0gcS0+dGFpbCkKKyAgICAgICAgeworICAgICAgICAgICAgYnVmID0gcS0+Y2VsbFtpbmRleF0uYnVmOworCisgICAgICAgICAgICAvL2lmIGJ1ZidzIGRldGluYXRpb24gYWRkcmVzcyA9PSBpbnB1dCBhZGRyCisgICAgICAgICAgICBpZiAoemZDb21wYXJlRHN0d2l0aEJ1ZihkZXYsIGJ1ZiwgYWRkcikgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXRCdWYgPSBidWY7CisgICAgICAgICAgICAgICAgLy9HZXQgaXQsIGFuZCB0cmFjZSB0aGUgd2hvbGUgcXVldWUgdG8gY2FsY3VsYXRlIG1vcmUgYml0CisgICAgICAgICAgICAgICAgd2hpbGUgKChuZXh0ID0oKGluZGV4KzEpJnEtPnNpemVNYXNrKSkgIT0gcS0+dGFpbCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHEtPmNlbGxbaW5kZXhdLmJ1ZiA9IHEtPmNlbGxbbmV4dF0uYnVmOworICAgICAgICAgICAgICAgICAgICBxLT5jZWxsW2luZGV4XS50aWNrID0gcS0+Y2VsbFtuZXh0XS50aWNrOworCisgICAgICAgICAgICAgICAgICAgIGlmICgoKm1iID09IDApICYmICh6ZkNvbXBhcmVEc3R3aXRoQnVmKGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBxLT5jZWxsW25leHRdLmJ1ZiwgYWRkcikgPT0gMCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICptYiA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpbmRleCA9IG5leHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHEtPnRhaWwgPSAocS0+dGFpbC0xKSAmIHEtPnNpemVNYXNrOworCisgICAgICAgICAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0QnVmOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIHEtPnNpemVNYXNrOworICAgICAgICB9IC8vaWYgKGluZGV4ICE9IHEtPnRhaWwpCisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgcmV0dXJuIHJldEJ1ZjsKKworfQorCit2b2lkIHpmUXVldWVGbHVzaCh6ZGV2X3QqIGRldiwgc3RydWN0IHpzUXVldWUqIHEpCit7CisgICAgemJ1Zl90KiBidWY7CisKKyAgICB3aGlsZSAoKGJ1ZiA9IHpmUXVldWVHZXQoZGV2LCBxKSkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIDApOworICAgIH0KKworICAgIHJldHVybjsKK30KKwordm9pZCB6ZlF1ZXVlQWdlKHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNRdWV1ZSogcSwgdTMyX3QgdGljaywgdTMyX3QgbXNBZ2UpCit7CisgICAgemJ1Zl90KiBidWY7CisgICAgdTMyX3QgICBidWZ0aWNrOworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB3aGlsZSAoMSkKKyAgICB7CisgICAgICAgIGJ1ZiA9IE5VTEw7CisgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgaWYgKHEtPmhlYWQgIT0gcS0+dGFpbCkKKyAgICAgICAgeworICAgICAgICAgICAgYnVmdGljayA9IHEtPmNlbGxbcS0+aGVhZF0udGljazsKKyAgICAgICAgICAgIGlmICgoKHRpY2sgLSBidWZ0aWNrKSpaTV9NU19QRVJfVElDSykgPiBtc0FnZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBidWYgPSBxLT5jZWxsW3EtPmhlYWRdLmJ1ZjsKKyAgICAgICAgICAgICAgICBxLT5oZWFkID0gKHEtPmhlYWQrMSkgJiBxLT5zaXplTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgaWYgKGJ1ZiAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICB6bV9tc2cwX21tKFpNX0xWXzAsICJBZ2UgZnJhbWUgaW4gcXVldWUhIik7CisgICAgICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybjsKK30KKworCit1OF90IHpmUXVldWVSZW1vdmV3aXRoSW5kZXgoemRldl90KiBkZXYsIHN0cnVjdCB6c1F1ZXVlKiBxLCB1MTZfdCBpbmRleCwgdThfdCogYWRkcikKK3sKKyAgICB1MTZfdCBuZXh0OworICAgIHU4X3QgbWIgPSAwOworCisgICAgLy90cmFjZSB0aGUgd2hvbGUgcXVldWUgdG8gY2FsY3VsYXRlIG1vcmUgYml0CisgICAgd2hpbGUgKChuZXh0ID0oKGluZGV4KzEpJnEtPnNpemVNYXNrKSkgIT0gcS0+dGFpbCkKKyAgICB7CisgICAgICAgIHEtPmNlbGxbaW5kZXhdLmJ1ZiA9IHEtPmNlbGxbbmV4dF0uYnVmOworICAgICAgICBxLT5jZWxsW2luZGV4XS50aWNrID0gcS0+Y2VsbFtuZXh0XS50aWNrOworCisgICAgICAgIGlmICgobWIgPT0gMCkgJiYgKHpmQ29tcGFyZURzdHdpdGhCdWYoZGV2LAorICAgICAgICAgICAgICAgIHEtPmNlbGxbbmV4dF0uYnVmLCBhZGRyKSA9PSAwKSkKKyAgICAgICAgeworICAgICAgICAgICAgbWIgPSAxOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSBuZXh0OworICAgIH0KKyAgICBxLT50YWlsID0gKHEtPnRhaWwtMSkgJiBxLT5zaXplTWFzazsKKworICAgIHJldHVybiBtYjsKKworfQorCit2b2lkIHpmUXVldWVHZW5lcmF0ZVVhcHNkVGltKHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNRdWV1ZSogcSwKKyAgICAgICAgdThfdCogdW5pQml0TWFwLCB1MTZfdCogaGlnaGVzdEJ5dGUpCit7CisgICAgemJ1Zl90KiBwc0J1ZjsKKyAgICB1OF90IGRzdFs2XTsKKyAgICB1MTZfdCBpZCwgYWlkLCBpbmRleCwgaTsKKyAgICB1MTZfdCBiaXRQb3NpdGlvbjsKKyAgICB1MTZfdCBieXRlUG9zaXRpb247CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgaW5kZXggPSBxLT5oZWFkOworCisgICAgd2hpbGUgKGluZGV4ICE9IHEtPnRhaWwpCisgICAgeworICAgICAgICBwc0J1ZiA9IHEtPmNlbGxbaW5kZXhdLmJ1ZjsKKyAgICAgICAgZm9yIChpPTA7IGk8NjsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBkc3RbaV0gPSB6bXdfYnVmX3JlYWRiKGRldiwgcHNCdWYsIGkpOworICAgICAgICB9CisgICAgICAgIC8qIFRPRE8gOiB1c2UgdThfdCogZm90IE1BQyBhZGRyZXNzICovCisgICAgICAgIGlmICgoKGlkID0gemZBcEZpbmRTdGEoZGV2LCAodTE2X3QqKWRzdCkpICE9IDB4ZmZmZikKKyAgICAgICAgICAgICAgICAmJiAod2QtPmFwLnN0YVRhYmxlW2lkXS5wc01vZGUgIT0gMCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENhbGN1bGF0ZSBQVkIgb25seSB3aGVuIGFsbCBBQyBhcmUgZGVsaXZlcnktZW5hYmxlZCAqLworICAgICAgICAgICAgaWYgKCh3ZC0+YXAuc3RhVGFibGVbaWRdLnFvc0luZm8gJiAweGYpID09IDB4ZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhaWQgPSBpZCArIDE7CisgICAgICAgICAgICAgICAgYml0UG9zaXRpb24gPSAoMSA8PCAoYWlkICYgMHg3KSk7CisgICAgICAgICAgICAgICAgYnl0ZVBvc2l0aW9uID0gKGFpZCA+PiAzKTsKKyAgICAgICAgICAgICAgICB1bmlCaXRNYXBbYnl0ZVBvc2l0aW9uXSB8PSBiaXRQb3NpdGlvbjsKKworICAgICAgICAgICAgICAgIGlmIChieXRlUG9zaXRpb24+KmhpZ2hlc3RCeXRlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKmhpZ2hlc3RCeXRlID0gYnl0ZVBvc2l0aW9uOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4KzEpICYgcS0+c2l6ZU1hc2s7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBGcmVlIGdhcmJhZ2UgVUFQU0QgZnJhbWUgKi8KKyAgICAgICAgICAgIHpmUXVldWVSZW1vdmV3aXRoSW5kZXgoZGV2LCBxLCBpbmRleCwgZHN0KTsKKyAgICAgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCBwc0J1ZiwgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9xdWV1ZS5oIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL3F1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUyNmI4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9xdWV1ZS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9RVUVVRV9ICisjZGVmaW5lIF9RVUVVRV9ICisKKyNpbmNsdWRlICIuLi9vYWxfZHQuaCIKKworc3RydWN0IHpzUXVldWVDZWxsCit7CisgICAgdTMyX3QgICB0aWNrOworICAgIHpidWZfdCogYnVmOworfTsKKworc3RydWN0IHpzUXVldWUKK3sKKyAgICB1MTZfdCAgIHNpemU7CisgICAgdTE2X3QgICBzaXplTWFzazsKKyAgICB1MTZfdCAgIGhlYWQ7CisgICAgdTE2X3QgICB0YWlsOworICAgIHN0cnVjdCB6c1F1ZXVlQ2VsbCBjZWxsWzFdOworfTsKKworI2VuZGlmIC8vI2lmbmRlZiBfUVVFVUVfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL3JhdGVjdHJsLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvcmF0ZWN0cmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDMxMDRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL3JhdGVjdHJsLmMKQEAgLTAsMCArMSw4NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiY3ByZWNvbXAuaCIKKyNpbmNsdWRlICJyYXRlY3RybC5oIgorCitjb25zdCB1MzJfdCB6Y1JhdGVUb1BoeUN0cmxbXSA9CisgICAgeworICAgICAgICAvKiAxTSwgICAgICAgIDJNLCAgICAgICAgIDVNLCAgICAgICAgMTFNICwgIDAgIDEgIDIgIDMqLworICAgICAgICAweDAwMDAwLCAgICAweDEwMDAwLCAgICAweDIwMDAwLCAgICAweDMwMDAwLAorICAgICAgICAvKiA2TSAgICAgICAgIDlNICAgICAgICAgIDEyTSAgICAgICAgMThNICwgIDQgIDUgIDYgIDcqLworICAgICAgICAweGIwMDAxLCAgICAweGYwMDAxLCAgICAweGEwMDAxLCAgICAweGUwMDAxLAorICAgICAgICAvKiAyNE0gICAgICAgICAzNk0gICAgICAgIDQ4TSAgICAgICAgNTRNICwgIDggIDkgIDEwIDExKi8KKyAgICAgICAgMHg5MDAwMSwgICAgMHhkMDAwMSwgICAgMHg4MDAwMSwgICAgMHhjMDAwMSwKKyAgICAgICAgLyogTUNTMCAgICAgIE1DUzEgICAgICAgIE1DUzIgICAgICAgIE1DUzMsICAxMiAxMyAxNCAxNSovCisgICAgICAgIDB4MDAwMDIsICAgIDB4MTAwMDIsICAgIDB4MjAwMDIsICAgIDB4MzAwMDIsCisgICAgICAgIC8qIE1DUzQgICAgICBNQ1M1ICAgICAgICBNQ1M2ICAgICAgICBNQ1M3LCAgMTYgMTcgMTggMTkqLworICAgICAgICAweDQwMDAyLCAgICAweDUwMDAyLCAgICAweDYwMDAyLCAgICAweDcwMDAyLAorICAgICAgICAvKiBNQ1M4ICAgICAgTUNTOSAgICAgICAgTUNTMTAgICAgICAgTUNTMTEsIDIwIDIxIDIyIDIzKi8KKyAgICAgICAgMHg4MDAwMiwgICAgMHg5MDAwMiwgICAgMHhhMDAwMiwgICAgMHhiMDAwMiwKKyAgICAgICAgLyogTUNTMTIgICAgIE1DUzEzICAgICAgIE1DUzE0ICAgICAgIE1DUzE1LCAyNCAyNSAyNiAyNyovCisgICAgICAgIDB4YzAwMDIsICAgIDB4ZDAwMDIsICAgIDB4ZTAwMDIsICAgIDB4ZjAwMDIsCisgICAgICAgIC8qIE1DUzE0U0csICBNQ1MxNVNHICAgICBNQ1M3U0cgICAgICAgICAgICwgMjggMjksIDMwKi8KKyAgICAgICAgMHg4MDBlMDAwMiwgMHg4MDBmMDAwMiwgMHg4MDA3MDAwMgorICAgIH07CisKKworY29uc3QgdThfdCB6Y0h0UmF0ZVRhYmxlWzE1XVs0XSA9CisgICAgeyAvKls1RyAyME1Iel0gIFs1RyA0ME1Iel0gWzIuNEcgMjBNSHpdICBbMi40RyA0ME1Iel0qLworICAgICAgICB7ICA0LCAgICAgICAgICA0LCAgICAgICAgICAwLCAgICAgICAgICAwfSwgICAvKk9GRE02TSBPRkRNNk0gIENDSzFNICBDQ0sxTSAgKi8KKyAgICAgICAgeyAgNSwgICAgICAgICAgNSwgICAgICAgICAgMSwgICAgICAgICAgMX0sICAgLypPRkRNOU0gT0ZETTlNICBDQ0syTSAgQ0NLMk0gICovCisgICAgICAgIHsgIDEzLCAgICAgICAgIDEyLCAgICAgICAgIDIsICAgICAgICAgIDJ9LCAgIC8qTUNTMSAgIE1DUzAgICAgQ0NLNU0gIENDSzVNICAqLworICAgICAgICB7ICAxNCwgICAgICAgICAxMywgICAgICAgICAzLCAgICAgICAgICAzfSwgICAvKk1DUzIgICBNQ1MxICAgIENDSzExTSBDQ0sxMU0gKi8KKyAgICAgICAgeyAgMTUsICAgICAgICAgMTQsICAgICAgICAgMTMsICAgICAgICAgMTJ9LCAgLypNQ1MzICAgTUNTMiAgICBNQ1MxICAgTUNTMCAgICovCisgICAgICAgIHsgIDE2LCAgICAgICAgIDE1LCAgICAgICAgIDE0LCAgICAgICAgIDEzfSwgIC8qTUNTNCAgIE1DUzMgICAgTUNTMiAgIE1DUzEgICAqLworICAgICAgICB7ICAyMywgICAgICAgICAxNiwgICAgICAgICAxNSwgICAgICAgICAxNH0sICAvKk1DUzExICBNQ1M0ICAgIE1DUzMgICBNQ1MyICAgKi8KKyAgICAgICAgeyAgMjQsICAgICAgICAgMjMsICAgICAgICAgMTYsICAgICAgICAgMTV9LCAgLypNQ1MxMiAgTUNTMTEgICBNQ1M0ICAgTUNTMyAgICovCisgICAgICAgIHsgIDI1LCAgICAgICAgIDI0LCAgICAgICAgIDIzLCAgICAgICAgIDE2fSwgIC8qTUNTMTMgIE1DUzEyICAgTUNTMTEgIE1DUzQgICAqLworICAgICAgICB7ICAyNiwgICAgICAgICAyNSwgICAgICAgICAyNCwgICAgICAgICAyM30sICAvKk1DUzE0ICBNQ1MxMyAgIE1DUzEyICBNQ1MxMSAgKi8KKyAgICAgICAgeyAgMjcsICAgICAgICAgMjYsICAgICAgICAgMjUsICAgICAgICAgMjR9LCAgLypNQ1MxNSAgTUNTMTQgICBNQ1MxMyAgTUNTMTIgICovCisgICAgICAgIHsgIDAsICAgICAgICAgIDI3LCAgICAgICAgIDI2LCAgICAgICAgIDI1fSwgIC8qMCAgICAgIE1DUzE1ICAgTUNTMTQgIE1DUzEzICAqLworICAgICAgICB7ICAwLCAgICAgICAgICAyOSwgICAgICAgICAyNywgICAgICAgICAyNn0sICAvKjAgICAgICBNQ1MxNVNHIE1DUzE1ICBNQ1MxNCAgKi8KKyAgICAgICAgeyAgMCwgICAgICAgICAgMCwgICAgICAgICAgMCwgICAgICAgICAgMjh9LCAgLyowICAgICAgMCAgICAgICAwICAgICAgTUNTMTRTRyovCisgICAgICAgIHsgIDAsICAgICAgICAgIDAsICAgICAgICAgIDAsICAgICAgICAgIDI5fSAgIC8qMCAgICAgIDAgICAgICAgMCAgICAgIE1DUzE1U0cqLworICAgIH07CisKK2NvbnN0IHU4X3QgemNIdE9uZVR4U3RyZWFtUmF0ZVRhYmxlWzE1XVs0XSA9CisgICAgeyAvKls1RyAyME1Iel0gIFs1RyA0ME1Iel0gWzIuNEcgMjBNSHpdICBbMi40RyA0ME1Iel0qLworICAgICAgICB7ICA0LCAgICAgICAgICA0LCAgICAgICAgICAwLCAgICAgICAgICAwfSwgICAvKk9GRE02TSBPRkRNNk0gIENDSzFNICBDQ0sxTSAgKi8KKyAgICAgICAgeyAgNSwgICAgICAgICAgNSwgICAgICAgICAgMSwgICAgICAgICAgMX0sICAgLypPRkRNOU0gT0ZETTlNICBDQ0syTSAgQ0NLMk0gICovCisgICAgICAgIHsgIDEzLCAgICAgICAgIDEyLCAgICAgICAgIDIsICAgICAgICAgIDJ9LCAgIC8qTUNTMSAgIE1DUzAgICAgQ0NLNU0gIENDSzVNICAqLworICAgICAgICB7ICAxNCwgICAgICAgICAxMywgICAgICAgICAzLCAgICAgICAgICAzfSwgICAvKk1DUzIgICBNQ1MxICAgIENDSzExTSBDQ0sxMU0gKi8KKyAgICAgICAgeyAgMTUsICAgICAgICAgMTQsICAgICAgICAgMTMsICAgICAgICAgMTJ9LCAgLypNQ1MzICAgTUNTMiAgICBNQ1MxICAgTUNTMCAgICovCisgICAgICAgIHsgIDE2LCAgICAgICAgIDE1LCAgICAgICAgIDE0LCAgICAgICAgIDEzfSwgIC8qTUNTNCAgIE1DUzMgICAgTUNTMiAgIE1DUzEgICAqLworICAgICAgICB7ICAxNywgICAgICAgICAxNiwgICAgICAgICAxNSwgICAgICAgICAxNH0sICAvKk1DUzUgICBNQ1M0ICAgIE1DUzMgICBNQ1MyICAgKi8KKyAgICAgICAgeyAgMTgsICAgICAgICAgMTcsICAgICAgICAgMTYsICAgICAgICAgMTV9LCAgLypNQ1M2ICAgTUNTNSAgICBNQ1M0ICAgTUNTMyAgICovCisgICAgICAgIHsgIDE5LCAgICAgICAgIDE4LCAgICAgICAgIDE3LCAgICAgICAgIDE2fSwgIC8qTUNTNyAgIE1DUzYgICAgTUNTNSAgIE1DUzQgICAqLworICAgICAgICB7ICAwLCAgICAgICAgICAxOSwgICAgICAgICAxOCwgICAgICAgICAxN30sICAvKjAgICAgICBNQ1M3ICAgIE1DUzYgICBNQ1M1ICAgKi8KKyAgICAgICAgeyAgMCwgICAgICAgICAgMzAsICAgICAgICAgMTksICAgICAgICAgMTh9LCAgLyowICAgICAgTUNTN1NHICBNQ1M3ICAgTUNTNiAgICovCisgICAgICAgIHsgIDAsICAgICAgICAgIDAsICAgICAgICAgIDAsICAgICAgICAgIDE5fSwgIC8qMCAgICAgIDAgICAgICAgMCAgICAgIE1DUzcgICAqLworICAgICAgICB7ICAwLCAgICAgICAgICAwLCAgICAgICAgICAwLCAgICAgICAgICAzMH0sICAvKjAgICAgICAwICAgICAgIDAgICAgICBNQ1M3U0cgKi8KKyAgICAgICAgeyAgMCwgICAgICAgICAgMCwgICAgICAgICAgMCwgICAgICAgICAgMCB9LCAgLyowICAgICAgMCAgICAgICAwICAgICAgMCAgICAgICovCisgICAgICAgIHsgIDAsICAgICAgICAgIDAsICAgICAgICAgIDAsICAgICAgICAgIDAgfSAgIC8qMCAgICAgIDAgICAgICAgMCAgICAgIDAgICAgICAqLworICAgIH07CisKK2NvbnN0IHUxNl90IHpjUmF0ZVtdID0KKyAgICB7CisgICAgICAgIDEsIDIsIDUsIDExLCAgICAgICAgICAgICAgICAgIC8qIDFNLCAyTSwgNU0sIDExTSAgICAgICAgICAsICAwICAxICAyICAzKi8KKyAgICAgICAgNiwgOSwgMTIsIDE4LCAgICAgICAgICAgICAgICAgLyogNk0gIDlNICAxMk0gIDE4TSAgICAgICAgICwgIDQgIDUgIDYgIDcqLworICAgICAgICAyNCwgMzYsIDQ4LCA1NCwgICAgICAgICAgICAgICAvKiAyNE0gIDM2TSAgNDhNICA1NE0gICAgICAgLCAgOCAgOSAxMCAxMSovCisgICAgICAgIDEzLCAyNywgNDAsIDU0LCAgICAgICAgICAgICAgIC8qIE1DUzAgTUNTMSBNQ1MyIE1DUzMgICAgICAsIDEyIDEzIDE0IDE1Ki8KKyAgICAgICAgODEsIDEwOCwgMTIxLCAxMzUsICAgICAgICAgICAgLyogTUNTNCBNQ1M1IE1DUzYgTUNTNyAgICAgICwgMTYgMTcgMTggMTkqLworICAgICAgICAyNywgNTQsIDgxLCAxMDgsICAgICAgICAgICAgICAvKiBNQ1M4IE1DUzkgTUNTMTAgTUNTMTEgICAgLCAyMCAyMSAyMiAyMyovCisgICAgICAgIDE2MiwgMjE2LCAyNDMsIDI3MCwgICAgICAgICAgIC8qIE1DUzEyIE1DUzEzIE1DUzE0IE1DUzE1ICAsIDI0IDI1IDI2IDI3Ki8KKyAgICAgICAgMjcwLCAzMDAsIDE1MCAgICAgICAgICAgICAgICAgLyogTUNTMTRTRywgTUNTMTVTRywgTUNTN1NHICwgMjggMjkgMzAqLworICAgIH07CisKK2NvbnN0IHUxNl90IFBFUlRocmVzaG9sZFtdID0KKyAgICB7CisgICAgICAgIDEwMCwgNTAsIDUwLCA1MCwgICAgLyogMU0sIDJNLCA1TSwgMTFNICAgICAgICAgICwgIDAgIDEgIDIgIDMqLworICAgICAgICA1MCwgNTAsIDMwLCAzMCwgICAgIC8qIDZNICA5TSAgMTJNICAxOE0gICAgICAgICAsICA0ICA1ICA2ICA3Ki8KKyAgICAgICAgMjUsIDI1LCAyNSwgMjAsICAgICAvKiAyNE0gIDM2TSAgNDhNICA1NE0gICAgICAgLCAgOCAgOSAxMCAxMSovCisgICAgICAgIDUwLCA1MCwgNTAsIDQwLCAgICAvKiBNQ1MwIE1DUzEgTUNTMiBNQ1MzICAgICAgLCAxMiAxMyAxNCAxNSovCisgICAgICAgIDMwLCAzMCwgMzAsIDMwLCAgICAvKiBNQ1M0IE1DUzUgTUNTNiBNQ1M3ICAgICAgLCAxNiAxNyAxOCAxOSovCisgICAgICAgIDMwLCAzMCwgMjUsIDI1LCAgICAvKiBNQ1M4IE1DUzkgTUNTMTAgTUNTMTEgICAgLCAyMCAyMSAyMiAyMyovCisgICAgICAgIDI1LCAyNSwgMTUsIDE1LCAgICAgLyogTUNTMTIgTUNTMTMgTUNTMTQgTUNTMTUgICwgMjQgMjUgMjYgMjcqLworICAgICAgICAxNSwgMTUsIDEwICAgICAgICAgIC8qIE1DUzE0U0csIE1DUzE1U0cgICAgICAgICAsIDI4IDI5Ki8KKyAgICB9OworCitjb25zdCB1MTZfdCBGYWlsRGlmZltdID0KKyAgICB7CisgICAgICAgIDQwLCA0NiwgNDAsIDAsICAgICAgICAgIC8qIDFNLCAyTSwgNU0sIDExTSAgICAgICAgICAsICAwICAxICAyICAzKi8KKyAgICAgICAgMjQsIDE3LCAyMiwgMTYsICAgICAgICAgLyogNk0gIDlNICAxMk0gIDE4TSAgICAgICAgICwgIDQgIDUgIDYgIDcqLworICAgICAgICAxOSwgMTMsIDUsIDAsICAgICAgICAgICAvKiAyNE0gIDM2TSAgNDhNICA1NE0gICAgICAgLCAgOCAgOSAxMCAxMSovCisgICAgICAgIDM2LCAyMiwgMTUsIDE5LCAgICAgICAgIC8qIE1DUzAgTUNTMSBNQ1MyIE1DUzMgICAgICAsIDEyIDEzIDE0IDE1Ki8KKyAgICAgICAgMTIsIDUsIDQsIDcsICAgICAgICAgICAgLyogTUNTNCBNQ1M1IE1DUzYgTUNTNyAgICAgICwgMTYgMTcgMTggMTkqLworICAgICAgICAwLCAwLCAwLCAwLCAgICAgICAgICAgICAvKiBNQ1M4IE1DUzkgTUNTMTAgTUNTMTEgICAgLCAyMCAyMSAyMiAyMyovCisgICAgICAgIDksIDQsIDMsIDMsICAgICAgICAgICAgIC8qIE1DUzEyIE1DUzEzIE1DUzE0IE1DUzE1ICAsIDI0IDI1IDI2IDI3Ki8KKyAgICAgICAgMywgMCwgMCAgICAgICAgICAgICAgICAgLyogTUNTMTRTRywgTUNTMTVTRyAgICAgICAgICwgMjggMjkqLworICAgIH07CisKKworI2lmZGVmIFpNX0VOQUJMRV9CQV9SQVRFQ1RSTAordTMyX3QgVHhNUERVWzI5XTsKK3UzMl90IEJBRmFpbFsyOV07Cit1MzJfdCBCQVBFUlsyOV07Citjb25zdCB1MTZfdCBCQURpZmZbXSA9CisgICAgeworICAgICAgICAwLCAwLCAwLCAwLAorICAgICAgICAwLCAwLCAwLCAwLAorICAgICAgICAwLCAwLCAwLCAwLAorICAgICAgICAzNjEsIDIyMCwgMTUxLCAxODcsCisgICAgICAgIDEyMiwgNDgsIDQxLCA2NSwKKyAgICAgICAgMCwgMCwgMCwgMCwKKyAgICAgICAgODgsIDMzLCAyNywgMjUsCisgICAgICAgIDAKKyAgICB9OworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZlJhdGVDdHJsSW5pdENlbGwgICAgICAgICAgKi8KKy8qICAgICAgSW5pdGlhbGl6ZSByYXRlIGNvbnRyb2wgY2VsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHR5cGUgOiAwPT4xMWIsIDE9PjExYS9nLCAyPT4xMW4sIDM9PjExbiBvbmUgVHggc3RyZWFtICAgICAgICAgICAqLworLyogICAgICBnQmFuZCA6IDE9PjIuNEcsIDA9PjVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIElOQy4gICAgMjAwNy4yICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB6ZlJhdGVDdHJsSW5pdENlbGwoemRldl90KiBkZXYsIHN0cnVjdCB6c1JjQ2VsbCogcmNDZWxsLCB1OF90IHR5cGUsCisgICAgICAgIHU4X3QgZ0JhbmQsIHU4X3QgU0c0MCkKK3sKKyAgICB1OF90IGk7CisgICAgdThfdCBtYXhyYXRlOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGlmIChTRzQwKSBTRzQwID0gMTsKKworICAgIGlmIChnQmFuZCAhPSAwKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gMSkgLy8xMWcKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpPTA7IGk8NDsgaSsrKSAvLzFNIDJNIDVNIDExTQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJjQ2VsbC0+b3BlcmF0aW9uUmF0ZVNldFtpXSA9ICh1OF90KWk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGk9NDsgaTwxMDsgaSsrKSAvLzEyTSAxOE0gMjRNIDM2TSA0OE0gNTRNCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmNDZWxsLT5vcGVyYXRpb25SYXRlU2V0W2ldID0gMitpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmNDZWxsLT5vcGVyYXRpb25SYXRlQ291bnQgPSAxMDsKKyAgICAgICAgICAgIHJjQ2VsbC0+Y3VycmVudFJhdGVJbmRleCA9IDU7IC8vMThNCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlwZSA9PSAyKSAvLzExbmcKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKSAvL0FQIDExbmcgNDBNCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8MTU7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJjQ2VsbC0+b3BlcmF0aW9uUmF0ZVNldFtpXSA9IHpjSHRSYXRlVGFibGVbaV1bM107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKCFTRzQwKSByY0NlbGwtPm9wZXJhdGlvblJhdGVTZXRbMTNdID0gMjc7CisgICAgICAgICAgICAgICAgcmNDZWxsLT5vcGVyYXRpb25SYXRlQ291bnQgPSAxNCtTRzQwOworICAgICAgICAgICAgICAgIHJjQ2VsbC0+Y3VycmVudFJhdGVJbmRleCA9IDEwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSAvL1NUQQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh3ZC0+c3RhLmh0Q3RybEJhbmR3aWR0aCA9PSBaTV9CQU5EV0lEVEhfNDBNSFopIC8vMTFuZyA0ME0KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPDE1OyBpKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjQ2VsbC0+b3BlcmF0aW9uUmF0ZVNldFtpXSA9IHpjSHRSYXRlVGFibGVbaV1bM107CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYoIVNHNDApIHJjQ2VsbC0+b3BlcmF0aW9uUmF0ZVNldFsxM10gPSAyNzsKKyAgICAgICAgICAgICAgICAgICAgcmNDZWxsLT5vcGVyYXRpb25SYXRlQ291bnQgPSAxNCtTRzQwOworICAgICAgICAgICAgICAgICAgICByY0NlbGwtPmN1cnJlbnRSYXRlSW5kZXggPSAxMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSAgICAvLzExbmcgMjBNCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTwxMzsgaSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByY0NlbGwtPm9wZXJhdGlvblJhdGVTZXRbaV0gPSB6Y0h0UmF0ZVRhYmxlW2ldWzJdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJjQ2VsbC0+b3BlcmF0aW9uUmF0ZUNvdW50ID0gMTM7CisgICAgICAgICAgICAgICAgICAgIHJjQ2VsbC0+Y3VycmVudFJhdGVJbmRleCA9IDk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMykgLy8xMW5nIG9uZSBUeCBzdHJlYW0KKyAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh3ZC0+c3RhLmh0Q3RybEJhbmR3aWR0aCA9PSBaTV9CQU5EV0lEVEhfNDBNSFopIC8vMTFuZyA0ME0gb25lIFR4IHN0cmVhbQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoU0c0MCAhPSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXhyYXRlID0gMTM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXhyYXRlID0gMTI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8bWF4cmF0ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByY0NlbGwtPm9wZXJhdGlvblJhdGVTZXRbaV0gPSB6Y0h0T25lVHhTdHJlYW1SYXRlVGFibGVbaV1bM107CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmNDZWxsLT5vcGVyYXRpb25SYXRlQ291bnQgPSBpOworICAgICAgICAgICAgICAgICAgICByY0NlbGwtPmN1cnJlbnRSYXRlSW5kZXggPSAoKGkrMSkqMykvNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSAgICAvLzExbmcgMjBNCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTwxMTsgaSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByY0NlbGwtPm9wZXJhdGlvblJhdGVTZXRbaV0gPSB6Y0h0T25lVHhTdHJlYW1SYXRlVGFibGVbaV1bMl07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmNDZWxsLT5vcGVyYXRpb25SYXRlQ291bnQgPSBpOworICAgICAgICAgICAgICAgICAgICByY0NlbGwtPmN1cnJlbnRSYXRlSW5kZXggPSAoKGkrMSkqMykvNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAvL2lmICh0eXBlID09IDApIC8vMTFiCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByY0NlbGwtPm9wZXJhdGlvblJhdGVTZXRbaV0gPSAodThfdClpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmNDZWxsLT5vcGVyYXRpb25SYXRlQ291bnQgPSA0OworICAgICAgICAgICAgcmNDZWxsLT5jdXJyZW50UmF0ZUluZGV4ID0gcmNDZWxsLT5vcGVyYXRpb25SYXRlQ291bnQtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAodHlwZSA9PSAyKSAvLzExbmEKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKSAvL0FQIDExbmEgNDBNCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8KDEyK1NHNDApOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByY0NlbGwtPm9wZXJhdGlvblJhdGVTZXRbaV0gPSB6Y0h0UmF0ZVRhYmxlW2ldWzFdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByY0NlbGwtPm9wZXJhdGlvblJhdGVDb3VudCA9IDEyK1NHNDA7CisgICAgICAgICAgICAgICAgcmNDZWxsLT5jdXJyZW50UmF0ZUluZGV4ID0gODsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgLy9TVEEKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAod2QtPnN0YS5odEN0cmxCYW5kd2lkdGggPT0gWk1fQkFORFdJRFRIXzQwTUhaKSAvLzExbmEgNDBNCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTwoMTIrU0c0MCk7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmNDZWxsLT5vcGVyYXRpb25SYXRlU2V0W2ldID0gemNIdFJhdGVUYWJsZVtpXVsxXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByY0NlbGwtPm9wZXJhdGlvblJhdGVDb3VudCA9IDEyK1NHNDA7CisgICAgICAgICAgICAgICAgICAgIHJjQ2VsbC0+Y3VycmVudFJhdGVJbmRleCA9IDg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgICAgLy8xMW5hIDIwTQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8MTE7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmNDZWxsLT5vcGVyYXRpb25SYXRlU2V0W2ldID0gemNIdFJhdGVUYWJsZVtpXVswXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByY0NlbGwtPm9wZXJhdGlvblJhdGVDb3VudCA9IDExOworICAgICAgICAgICAgICAgICAgICByY0NlbGwtPmN1cnJlbnRSYXRlSW5kZXggPSA3OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlID09IDMpIC8vMTFuYSBvbmUgVHggc3RyZWFtCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAod2QtPnN0YS5odEN0cmxCYW5kd2lkdGggPT0gWk1fQkFORFdJRFRIXzQwTUhaKSAvLzExbmEgNDBNIG9uZSBUeCBzdHJlYW0KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmKFNHNDAgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbWF4cmF0ZSA9IDExOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbWF4cmF0ZSA9IDEwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPG1heHJhdGU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmNDZWxsLT5vcGVyYXRpb25SYXRlU2V0W2ldID0gemNIdE9uZVR4U3RyZWFtUmF0ZVRhYmxlW2ldWzFdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJjQ2VsbC0+b3BlcmF0aW9uUmF0ZUNvdW50ID0gaTsKKyAgICAgICAgICAgICAgICAgICAgcmNDZWxsLT5jdXJyZW50UmF0ZUluZGV4ID0gKChpKzEpKjMpLzQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgICAgLy8xMW5nIDIwTQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8OTsgaSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByY0NlbGwtPm9wZXJhdGlvblJhdGVTZXRbaV0gPSB6Y0h0T25lVHhTdHJlYW1SYXRlVGFibGVbaV1bMF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmNDZWxsLT5vcGVyYXRpb25SYXRlQ291bnQgPSBpOworICAgICAgICAgICAgICAgICAgICByY0NlbGwtPmN1cnJlbnRSYXRlSW5kZXggPSAoKGkrMSkqMykvNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAvL2lmICh0eXBlID09IDEpIC8vMTFhCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaT0wOyBpPDg7IGkrKykgLy82TSA5TSAxMk0gMThNIDI0TSAzNk0gNDhNIDU0TQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJjQ2VsbC0+b3BlcmF0aW9uUmF0ZVNldFtpXSA9IGkrNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJjQ2VsbC0+b3BlcmF0aW9uUmF0ZUNvdW50ID0gODsKKyAgICAgICAgICAgIHJjQ2VsbC0+Y3VycmVudFJhdGVJbmRleCA9IDQ7ICAvLzI0TQorICAgICAgICB9CisgICAgfQorCisgICAgcmNDZWxsLT5mbGFnID0gMDsKKyAgICByY0NlbGwtPnR4Q291bnQgPSAwOworICAgIHJjQ2VsbC0+ZmFpbENvdW50ID0gMDsKKyAgICByY0NlbGwtPmN1cnJlbnRSYXRlID0gcmNDZWxsLT5vcGVyYXRpb25SYXRlU2V0W3JjQ2VsbC0+Y3VycmVudFJhdGVJbmRleF07CisgICAgcmNDZWxsLT5sYXN0dHhDb3VudCA9IDA7CisgICAgcmNDZWxsLT5sYXN0VGltZSAgICA9IHdkLT50aWNrOworICAgIHJjQ2VsbC0+cHJvYmluZ1RpbWUgPSB3ZC0+dGljazsKKyAgICBmb3IgKGk9MDsgaTxaTV9SQVRFX1RBQkxFX1NJWkU7IGkrKykgeworICAgICAgICB3ZC0+UEVSW2ldID0gMDsKKyAgICAgICAgd2QtPnR4TVBEVVtpXSA9IHdkLT50eEZhaWxbaV0gPSAwOworICAgIH0KKyAgICB3ZC0+cHJvYmVDb3VudCA9IDA7CisgICAgd2QtPnByb2JlSW50ZXJ2YWwgPSAwOworI2lmZGVmIFpNX0VOQUJMRV9CQV9SQVRFQ1RSTAorICAgIGZvciAoaT0wOyBpPDI5OyBpKyspIHsKKyAgICAgICAgVHhNUERVW2ldPTA7CisgICAgICAgIEJBRmFpbFtpXT0wOworICAgICAgICBCQVBFUltpXT0wOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZSYXRlQ3RybEdldEhpZ2hlclJhdGUgICAgICovCisvKiAgICAgIEdldCBhIGhpZ2hlciByYXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHJjQ2VsbCA6IHJhdGUgY29udHJvbCBjZWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHJhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFN0ZXBoZW4gQ2hlbiAgICAgICAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSU5DLiAgICAyMDA3LjIgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1OF90IHpmUmF0ZUN0cmxHZXRIaWdoZXJSYXRlKHN0cnVjdCB6c1JjQ2VsbCogcmNDZWxsKQoreworICAgIHU4X3QgcmF0ZUluZGV4OworCisgICAgcmF0ZUluZGV4ID0gcmNDZWxsLT5jdXJyZW50UmF0ZUluZGV4CisgICAgICAgICAgICArICgoKHJjQ2VsbC0+Y3VycmVudFJhdGVJbmRleCsxKSA8IHJjQ2VsbC0+b3BlcmF0aW9uUmF0ZUNvdW50KT8xOjApOworICAgIHJldHVybiByY0NlbGwtPm9wZXJhdGlvblJhdGVTZXRbcmF0ZUluZGV4XTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZSYXRlQ3RybE5leHRMb3dlclJhdGUgICAgICovCisvKiAgICAgIEdldCBhIGxvd2VyIHJhdGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHJjQ2VsbCA6IHJhdGUgY29udHJvbCBjZWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHJhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFN0ZXBoZW4gQ2hlbiAgICAgICAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSU5DLiAgICAyMDA3LjIgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1OF90IHpmUmF0ZUN0cmxOZXh0TG93ZXJSYXRlKHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNSY0NlbGwqIHJjQ2VsbCkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgaWYgKHJjQ2VsbC0+Y3VycmVudFJhdGVJbmRleCA+IDApCisgICAgeworICAgICAgICByY0NlbGwtPmN1cnJlbnRSYXRlSW5kZXgtLTsKKyAgICAgICAgcmNDZWxsLT5jdXJyZW50UmF0ZSA9IHJjQ2VsbC0+b3BlcmF0aW9uUmF0ZVNldFtyY0NlbGwtPmN1cnJlbnRSYXRlSW5kZXhdOworICAgIH0KKyAgICB6bV9tc2cxX3R4KFpNX0xWXzAsICJMb3dlciBUeCBSYXRlPSIsIHJjQ2VsbC0+Y3VycmVudFJhdGUpOworICAgIC8vRGJnUHJpbnQoIkxvd2VyIFR4IFJhdGU9JWQiLCByY0NlbGwtPmN1cnJlbnRSYXRlKTsKKyAgICByY0NlbGwtPmZhaWxDb3VudCA9IHJjQ2VsbC0+dHhDb3VudCA9IDA7CisgICAgcmNDZWxsLT5sYXN0dHhDb3VudCA9IDA7CisgICAgcmNDZWxsLT5sYXN0VGltZSAgPSB3ZC0+dGljazsKKyAgICByZXR1cm4gcmNDZWxsLT5jdXJyZW50UmF0ZTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZSYXRlQ3RybFJhdGVEaWZmICAgICAgICAgICovCisvKiAgICAgIFJhdGUgZGlmZmVyZW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHJjQ2VsbCA6IHJhdGUgY29udHJvbCBjZWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICByZXRyeVJhdGUgOiByZXRyeSByYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICByYXRlIGRpZmZlcmVuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIElOQy4gICAgMjAwNy4yICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordThfdCB6ZlJhdGVDdHJsUmF0ZURpZmYoc3RydWN0IHpzUmNDZWxsKiByY0NlbGwsIHU4X3QgcmV0cnlSYXRlKQoreworICAgIHUxNl90IGk7CisKKyAgICAvKiBGaW5kIHJldHJ5UmF0ZSBpbiBvcGVyYXRpb25SYXRlU2V0W10gKi8KKyAgICBmb3IgKGk9MDsgaTxyY0NlbGwtPm9wZXJhdGlvblJhdGVDb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKHJldHJ5UmF0ZSA9PSByY0NlbGwtPm9wZXJhdGlvblJhdGVTZXRbaV0pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpIDwgcmNDZWxsLT5jdXJyZW50UmF0ZUluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAoKHJjQ2VsbC0+Y3VycmVudFJhdGVJbmRleCAtIGkpKzEpPj4xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaSA9PSByY0NlbGwtPmN1cnJlbnRSYXRlSW5kZXggPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBUT0RPIDogcmV0cnkgcmF0ZSBub3QgaW4gb3BlcmF0aW9uIHJhdGUgc2V0ICovCisgICAgem1fbXNnMV90eChaTV9MVl8wLCAiTm90IGluIG9wZXJhdGlvbiByYXRlIHNldDoiLCByZXRyeVJhdGUpOworICAgIHJldHVybiAxOworCit9CisKK3UzMl90IHpmUmF0ZUN0cmxVRFBUUCh6ZGV2X3QqIGRldiwgdTE2X3QgUmF0ZSwgdTMyX3QgUEVSKSB7CisgICAgaWYgKChQRVIgPCAxMDApICYmIChSYXRlID4gMCkgJiYgUEVSKQorICAgICAgICByZXR1cm4gMTE2ODAwMC8oKCgxMjMwNC9SYXRlKSsxOTcpKigxMDArMTAwKlBFUi8oMTAwLVBFUikpKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCit1OF90IHpmUmF0ZUN0cmxGaW5kTWF4VURQVFAoemRldl90KiBkZXYsIHN0cnVjdCB6c1JjQ2VsbCogcmNDZWxsKSB7CisgICAgdThfdCBpLCBtYXhJbmRleD0wLCByYXRlSW5kZXg7CisgICAgdTMyX3QgbWF4PTAsIFVEUFRocm91Z2hwdXQ7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICByYXRlSW5kZXggPSB6bV9hZ2dfbWluKHJjQ2VsbC0+Y3VycmVudFJhdGVJbmRleCszLCByY0NlbGwtPm9wZXJhdGlvblJhdGVDb3VudC0xKTsKKyAgICBmb3IgKGk9cmNDZWxsLT5jdXJyZW50UmF0ZUluZGV4OyBpIDwgcmF0ZUluZGV4OyBpKyspIHsKKyAgICAgICAgVURQVGhyb3VnaHB1dCA9IHpmUmF0ZUN0cmxVRFBUUChkZXYsIHpjUmF0ZVtyY0NlbGwtPm9wZXJhdGlvblJhdGVTZXRbaV1dLAorICAgICAgICAgICAgd2QtPlBFUltyY0NlbGwtPm9wZXJhdGlvblJhdGVTZXRbaV1dKTsKKyAgICAgICAgaWYgKG1heCA8IFVEUFRocm91Z2hwdXQpIHsKKyAgICAgICAgICAgIG1heCA9IFVEUFRocm91Z2hwdXQ7CisgICAgICAgICAgICBtYXhJbmRleCA9IGk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmNDZWxsLT5vcGVyYXRpb25SYXRlU2V0W21heEluZGV4XTsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZlJhdGVDdHJsR2V0VHhSYXRlICAgICAgICAgKi8KKy8qICAgICAgR2V0IHRyYW5zbWlzc2lvbiByYXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHJjQ2VsbCA6IHJhdGUgY29udHJvbCBjZWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBwcm9iaW5nIDogcmF0ZSBwcm9iaW5nIGZsYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBUeCByYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIElOQy4gICAgMjAwNy4yICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZSYXRlQ3RybEdldFR4UmF0ZSh6ZGV2X3QqIGRldiwgc3RydWN0IHpzUmNDZWxsKiByY0NlbGwsIHUxNl90KiBwcm9iaW5nKQoreworICAgIHU4X3QgbmV3UmF0ZSwgaGlnaFJhdGU7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem1fbXNnMV90eChaTV9MVl8zLCAidHhDb3VudD0iLCByY0NlbGwtPnR4Q291bnQpOworICAgIHptX21zZzFfdHgoWk1fTFZfMywgInByb2JpbmdUaW1lPSIsIHJjQ2VsbC0+cHJvYmluZ1RpbWUpOworICAgIHptX21zZzFfdHgoWk1fTFZfMywgInRpY2s9Iiwgd2QtPnRpY2spOworICAgICpwcm9iaW5nID0gMDsKKyAgICBuZXdSYXRlID0gcmNDZWxsLT5jdXJyZW50UmF0ZTsKKworICAgIGlmICh3ZC0+cHJvYmVDb3VudCAmJiAod2QtPnByb2JlQ291bnQgPCB3ZC0+c3VjY2Vzc19wcm9iaW5nKSkKKyAgICB7CisgICAgICAgIGlmICh3ZC0+cHJvYmVJbnRlcnZhbCA8IDUwKQorICAgICAgICB7CisgICAgICAgICAgICB3ZC0+cHJvYmVJbnRlcnZhbCsrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPnByb2JlSW50ZXJ2YWwrKzsKKyAgICAgICAgICAgIGlmICh3ZC0+cHJvYmVJbnRlcnZhbCA+IDUyKSAvL3Byb2JlIDUxLCA1MiwgNTMgdGhyZWUgcGFja2V0cyBldmVyeSA1MCBwYWNrZXRzCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd2QtPnByb2JlSW50ZXJ2YWwgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV3UmF0ZT16ZlJhdGVDdHJsR2V0SGlnaGVyUmF0ZShyY0NlbGwpOworICAgICAgICAgICAgKnByb2JpbmcgPSAxOworICAgICAgICAgICAgd2QtPnByb2JlQ291bnQrKzsKKyAgICAgICAgICAgIHJjQ2VsbC0+cHJvYmluZ1RpbWUgPSB3ZC0+dGljazsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiBBY2N1bXVsYXRlIGF0IGxlYXN0IDEwMDBtcyBhbmQgOCBwYWNrZXRzIG9yIEFjY3VtdWxhdGUgb3ZlciAxSyBwYWNrZXRzICovCisgICAgZWxzZSBpZiAoKCgod2QtPnRpY2sgLSByY0NlbGwtPnByb2JpbmdUaW1lKSA+IChaTV9SQVRFX0NUUkxfUFJPQklOR19JTlRFUlZBTF9NUy9aTV9NU19QRVJfVElDSykpCisgICAgICAgICAgICAgICAgJiYgKHJjQ2VsbC0+dHhDb3VudCA+PSBaTV9SQVRFX0NUUkxfTUlOX1BST0JJTkdfUEFDS0VUKSkKKyAgICAgICAgfHwgKHJjQ2VsbC0+dHhDb3VudCA+PSAxMDAwKSkKKyAgICB7CisjaWZuZGVmIFpNX0RJU0FCTEVfUkFURV9DVFJMCisgICAgICAgIC8qIFBFUiA9IGZhaWwvdG90YWwgKi8KKyAgICAgICAgd2QtPnByb2JlQ291bnQgPSAwOworICAgICAgICB3ZC0+cHJvYmVTdWNjZXNzQ291bnQgPSAwOworICAgICAgICBpZiAod2QtPnR4TVBEVVtyY0NlbGwtPmN1cnJlbnRSYXRlXSAhPSAwKSB7CisgICAgICAgICAgICB3ZC0+UEVSW3JjQ2VsbC0+Y3VycmVudFJhdGVdID0gem1fYWdnX21pbigxMDAsCisgICAgICAgICAgICAgICAgKHdkLT50eEZhaWxbcmNDZWxsLT5jdXJyZW50UmF0ZV0qMTAwKS93ZC0+dHhNUERVW3JjQ2VsbC0+Y3VycmVudFJhdGVdKTsKKyAgICAgICAgICAgIGlmICghd2QtPlBFUltyY0NlbGwtPmN1cnJlbnRSYXRlXSkgd2QtPlBFUltyY0NlbGwtPmN1cnJlbnRSYXRlXSArKzsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGlmIFBFUiA8IHRocmVzaG9sZCwgZG8gcmF0ZSBwcm9iaW5nLCByZXR1cm4gcHJvYmluZyByYXRlICovCisgICAgICAgIGlmICgod2QtPlBFUltyY0NlbGwtPmN1cnJlbnRSYXRlXSA8PSAoWk1fUkFURV9QUk9CSU5HX1RIUkVTSE9MRCsxNSkpIHx8CisgICAgICAgICAgICAoKHJjQ2VsbC0+Y3VycmVudFJhdGUgPD0gMTYpICYmCisgICAgICAgICAgICAoKHdkLT5QRVJbcmNDZWxsLT5jdXJyZW50UmF0ZV0vMikgPD0gWk1fUkFURV9QUk9CSU5HX1RIUkVTSE9MRCkpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKG5ld1JhdGU9emZSYXRlQ3RybEdldEhpZ2hlclJhdGUocmNDZWxsKSkgIT0gcmNDZWxsLT5jdXJyZW50UmF0ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcHJvYmluZyA9IDE7CisgICAgICAgICAgICAgICAgd2QtPnByb2JlQ291bnQrKzsKKyAgICAgICAgICAgICAgICB3ZC0+cHJvYmVJbnRlcnZhbCA9IDA7CisgICAgICAgICAgICAgICAgd2QtPnN1Y2Nlc3NfcHJvYmluZyA9CisgICAgICAgICAgICAgICAgICAgIChyY0NlbGwtPmN1cnJlbnRSYXRlIDw9IDE2KT8gKFpNX1JBVEVfU1VDQ0VTU19QUk9CSU5HLzIpIDogWk1fUkFURV9TVUNDRVNTX1BST0JJTkc7CisgICAgICAgICAgICAgICAgLy9EYmdQcmludCgiU3RhcnQgUHJvYmluZyIpOworICAgICAgICAgICAgICAgIHptX21zZzFfdHgoWk1fTFZfMCwgIlByb2JpbmcgUmF0ZT0iLCBuZXdSYXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgem1fbXNnMF90eChaTV9MVl8xLCAiRGltaW5pc2ggY291bnRlciIpOworICAgICAgICByY0NlbGwtPmZhaWxDb3VudCA9IHJjQ2VsbC0+ZmFpbENvdW50Pj4xOworICAgICAgICByY0NlbGwtPnR4Q291bnQgPSByY0NlbGwtPnR4Q291bnQ+PjE7CisgICAgICAgIHdkLT50eEZhaWxbcmNDZWxsLT5jdXJyZW50UmF0ZV0gPSB3ZC0+dHhGYWlsW3JjQ2VsbC0+Y3VycmVudFJhdGVdID4+IDE7CisgICAgICAgIHdkLT50eE1QRFVbcmNDZWxsLT5jdXJyZW50UmF0ZV0gPSB3ZC0+dHhNUERVW3JjQ2VsbC0+Y3VycmVudFJhdGVdID4+IDE7CisKKworICAgICAgICBpZiAocmNDZWxsLT5jdXJyZW50UmF0ZSA+IDE1KSB7CisgICAgICAgICAgICBoaWdoUmF0ZSA9IHpmUmF0ZUN0cmxHZXRIaWdoZXJSYXRlKHJjQ2VsbCk7CisgICAgICAgICAgICBpZiAoKGhpZ2hSYXRlICE9IHJjQ2VsbC0+Y3VycmVudFJhdGUpICYmIHdkLT5QRVJbaGlnaFJhdGVdICYmCisgICAgICAgICAgICAgICAgKCh3ZC0+UEVSW3JjQ2VsbC0+Y3VycmVudFJhdGVdICsgRmFpbERpZmZbcmNDZWxsLT5jdXJyZW50UmF0ZV0pID4KKyAgICAgICAgICAgICAgICB3ZC0+UEVSW2hpZ2hSYXRlXSkpIHsKKyAgICAgICAgICAgICAgICAvL0RiZ1ByaW50KCJQRVIgY29tcGFyZSBmb3JjZSByYWlzZSByYXRlIHRvICVkIiwgaGlnaFJhdGUpOworICAgICAgICAgICAgICAgIHdkLT5wcm9iZVN1Y2Nlc3NDb3VudCA9IHdkLT5wcm9iZUNvdW50ID0gWk1fUkFURV9TVUNDRVNTX1BST0JJTkc7CisgICAgICAgICAgICAgICAgemZSYXRlQ3RybFR4U3VjY2Vzc0V2ZW50KGRldiwgcmNDZWxsLCBoaWdoUmF0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBoaWdoUmF0ZSA9IHpmUmF0ZUN0cmxGaW5kTWF4VURQVFAoZGV2LCByY0NlbGwpOworICAgICAgICAgICAgaWYgKHJjQ2VsbC0+Y3VycmVudFJhdGUgPCBoaWdoUmF0ZSkgeworICAgICAgICAgICAgICAgIC8vRGJnUHJpbnQoIlVEUCBUaHJvdWdocHV0IGNvbXBhcmUgZm9yY2UgcmFpc2UgcmF0ZSB0byAlZCIsIGhpZ2hSYXRlKTsKKyAgICAgICAgICAgICAgICB3ZC0+cHJvYmVTdWNjZXNzQ291bnQgPSB3ZC0+cHJvYmVDb3VudCA9IFpNX1JBVEVfU1VDQ0VTU19QUk9CSU5HOworICAgICAgICAgICAgICAgIHpmUmF0ZUN0cmxUeFN1Y2Nlc3NFdmVudChkZXYsIHJjQ2VsbCwgaGlnaFJhdGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJjQ2VsbC0+cHJvYmluZ1RpbWUgPSB3ZC0+dGljazsKKyAgICB9CisKKyAgICBpZiggKHdkLT50aWNrID4gMTAwMCkKKyAgICAgICAgJiYgKCh3ZC0+dGljayAtIHJjQ2VsbC0+bGFzdFRpbWUpID4gMzg0MCkgKQorICAgIHsKKyAgICAgICAgaWYgKHJjQ2VsbC0+bGFzdHR4Q291bnQgPCA3MCkKKyAgICAgICAgeworICAgICAgICAgICAgcmNDZWxsLT5mYWlsQ291bnQgPSByY0NlbGwtPmZhaWxDb3VudD4+MTsKKyAgICAgICAgICAgIHJjQ2VsbC0+dHhDb3VudCA9IHJjQ2VsbC0+dHhDb3VudD4+MTsKKyAgICAgICAgICAgIHdkLT50eEZhaWxbcmNDZWxsLT5jdXJyZW50UmF0ZV0gPSB3ZC0+dHhGYWlsW3JjQ2VsbC0+Y3VycmVudFJhdGVdID4+IDE7CisgICAgICAgICAgICB3ZC0+dHhNUERVW3JjQ2VsbC0+Y3VycmVudFJhdGVdID0gd2QtPnR4TVBEVVtyY0NlbGwtPmN1cnJlbnRSYXRlXSA+PiAxOworCisgICAgICAgICAgICByY0NlbGwtPmZhaWxDb3VudCA9IChyY0NlbGwtPmZhaWxDb3VudCA8IHJjQ2VsbC0+dHhDb3VudCk/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjQ2VsbC0+ZmFpbENvdW50IDogcmNDZWxsLT50eENvdW50OworICAgICAgICAgICAgd2QtPnR4RmFpbFtyY0NlbGwtPmN1cnJlbnRSYXRlXSA9ICh3ZC0+dHhGYWlsW3JjQ2VsbC0+Y3VycmVudFJhdGVdIDwgd2QtPnR4TVBEVVtyY0NlbGwtPmN1cnJlbnRSYXRlXSk/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2QtPnR4RmFpbFtyY0NlbGwtPmN1cnJlbnRSYXRlXSA6IHdkLT50eE1QRFVbcmNDZWxsLT5jdXJyZW50UmF0ZV07CisgICAgICAgIH0KKworICAgICAgICByY0NlbGwtPmxhc3RUaW1lICAgID0gd2QtPnRpY2s7CisgICAgICAgIHJjQ2VsbC0+bGFzdHR4Q291bnQgPSAwOworICAgIH0KKworICAgIHJjQ2VsbC0+dHhDb3VudCsrOworICAgIHJjQ2VsbC0+bGFzdHR4Q291bnQrKzsKKyAgICB3ZC0+dHhNUERVW3JjQ2VsbC0+Y3VycmVudFJhdGVdKys7CisgICAgem1fbXNnMV90eChaTV9MVl8xLCAiR2V0IFR4IFJhdGU9IiwgbmV3UmF0ZSk7CisgICAgcmV0dXJuIG5ld1JhdGU7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmUmF0ZUN0cmxUeEZhaWxFdmVudCAgICAgICAqLworLyogICAgICBUeCBmYWlsIGV2ZW50LiBDYWxjdWxhdGUgUEVSIGFuZCBsb3dlciBUeCByYXRlIGlmIHVuZGVyICAgICAgICAgKi8KKy8qICAgICAgUEVSIHVuZGVyIHRocmVzaG9sZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgcmNDZWxsIDogcmF0ZSBjb250cm9sIGNlbGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHJldHJ5UmF0ZSA6IHJldHJ5IHJhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFN0ZXBoZW4gQ2hlbiAgICAgICAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSU5DLiAgICAyMDA3LjIgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHpmUmF0ZUN0cmxUeEZhaWxFdmVudCh6ZGV2X3QqIGRldiwgc3RydWN0IHpzUmNDZWxsKiByY0NlbGwsIHU4X3QgYWdnUmF0ZSwgdTMyX3QgcmV0cnlSYXRlKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyNpZm5kZWYgWk1fRElTQUJMRV9SQVRFX0NUUkwKKyAgICAvL0RiZ1ByaW50KCJhZ2dSYXRlPSVkLCByZXRyeVJhdGU9JWQiLCBhZ2dSYXRlLCByZXRyeVJhdGUpOworICAgIGlmIChhZ2dSYXRlICYmIChhZ2dSYXRlICE9IHJjQ2VsbC0+Y3VycmVudFJhdGUpKSB7CisgICAgICAgIHdkLT50eEZhaWxbYWdnUmF0ZV0gKz0gcmV0cnlSYXRlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFhZ2dSYXRlKSB7CisgICAgICAgIHJldHJ5UmF0ZSA9ICh6ZlJhdGVDdHJsUmF0ZURpZmYocmNDZWxsLCAodThfdClyZXRyeVJhdGUpKzEpPj4xOworICAgICAgICBpZiAocmNDZWxsLT5jdXJyZW50UmF0ZSA8MTIpIC8vbGVnYWN5IHJhdGUKKyAgICAgICAgeworICAgICAgICAgICAgcmV0cnlSYXRlKj0yOworICAgICAgICB9CisgICAgfQorICAgIHJjQ2VsbC0+ZmFpbENvdW50ICs9IHJldHJ5UmF0ZTsKKyAgICB3ZC0+dHhGYWlsW3JjQ2VsbC0+Y3VycmVudFJhdGVdICs9IHJldHJ5UmF0ZTsKKworICAgIC8vRGJnUHJpbnQoImZhaWxDb3VudD0lZCIsIHJjQ2VsbC0+ZmFpbENvdW50KTsKKyAgICBpZiAocmNDZWxsLT5mYWlsQ291bnQgPiBaTV9NSU5fUkFURV9GQUlMX0NPVU5UKQorICAgIHsKKyAgICAgICAgaWYgKHdkLT50eE1QRFVbcmNDZWxsLT5jdXJyZW50UmF0ZV0gIT0gMCkgeworICAgICAgICAgICAgd2QtPlBFUltyY0NlbGwtPmN1cnJlbnRSYXRlXSA9IHptX2FnZ19taW4oMTAwLAorICAgICAgICAgICAgICAgICh3ZC0+dHhGYWlsW3JjQ2VsbC0+Y3VycmVudFJhdGVdKjEwMCkvd2QtPnR4TVBEVVtyY0NlbGwtPmN1cnJlbnRSYXRlXSk7CisgICAgICAgICAgICBpZiAoIXdkLT5QRVJbcmNDZWxsLT5jdXJyZW50UmF0ZV0pIHdkLT5QRVJbcmNDZWxsLT5jdXJyZW50UmF0ZV0gKys7CisgICAgICAgIH0KKyAgICAgICAgLy96bV9tc2cxX3R4KFpNX0xWXzEsICJQRVI9IiwgcGVyKTsKKyAgICAgICAgLy9EYmdQcmludCgiUEVSPSVkLCB0eEZhaWw9JWQsIHR4TVBEVT0lZCIsIHdkLT5QRVJbcmNDZWxsLT5jdXJyZW50UmF0ZV0sIHdkLT50eEZhaWxbcmNDZWxsLT5jdXJyZW50UmF0ZV0sIHdkLT50eE1QRFVbcmNDZWxsLT5jdXJyZW50UmF0ZV0pOworICAgICAgICBpZiAod2QtPlBFUltyY0NlbGwtPmN1cnJlbnRSYXRlXSA+IFBFUlRocmVzaG9sZFtyY0NlbGwtPmN1cnJlbnRSYXRlXSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogTG93ZXIgVHggUmF0ZSBpZiBQRVIgPCBUSFJFU0hPTEQgKi8KKyAgICAgICAgICAgIHpmUmF0ZUN0cmxOZXh0TG93ZXJSYXRlKGRldiwgcmNDZWxsKTsKKyAgICAgICAgICAgIHJjQ2VsbC0+ZmxhZyB8PSBaTV9SQ19UUkFJTkVEX0JJVDsKKworICAgICAgICAgICAgLy8gUmVzb2x2ZSBjb21wYXRpYmlsaXR5IHByb2JsZW0gd2l0aCBNYXJ2ZWxsCisgICAgICAgICAgICBpZihyY0NlbGwtPmN1cnJlbnRSYXRlID09IDE1KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICAgICAgemZIcFNldEFnZ1BrdE51bShkZXYsIDgpOworICAgICAgICAgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdkLT50eEZhaWxbcmNDZWxsLT5jdXJyZW50UmF0ZV0gPSB3ZC0+dHhGYWlsW3JjQ2VsbC0+Y3VycmVudFJhdGVdID4+IDE7CisgICAgICAgICAgICB3ZC0+dHhNUERVW3JjQ2VsbC0+Y3VycmVudFJhdGVdID0gd2QtPnR4TVBEVVtyY0NlbGwtPmN1cnJlbnRSYXRlXSA+PiAxOworCisgICAgICAgICAgICB3ZC0+cHJvYmVDb3VudCA9IHdkLT5wcm9iZVN1Y2Nlc3NDb3VudCA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyNlbmRpZgorICAgIHJldHVybjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZSYXRlQ3RybFR4U3VjY2Vzc0V2ZW50ICAgICovCisvKiAgICAgIFR4IHN1Y2Nlc3MgZXZlbnQuIFJhaXNlIFR4IHJhdGUgYmVjYXVzZSByYXRlIHByb2Jpbmcgc3VjY2Vzcy4gICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHJjQ2VsbCA6IHJhdGUgY29udHJvbCBjZWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBzdWNjZXNzUmF0ZSA6IHN1Y2Nlc3MgcmF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIElOQy4gICAgMjAwNy4yICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB6ZlJhdGVDdHJsVHhTdWNjZXNzRXZlbnQoemRldl90KiBkZXYsIHN0cnVjdCB6c1JjQ2VsbCogcmNDZWxsLCB1OF90IHN1Y2Nlc3NSYXRlKQoreworICAgIC8qIFJhaXNlIFR4IFJhdGUgKi8KKyAgICB1MTZfdCBpLCBQRVJQcm9iZTsKKyAgICB1MTZfdCBwY291bnQ7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIC8vRGJnUHJpbnQoIlByb2Jpbmcgc3VjY2Vzc1JhdGU9JWQiLCBzdWNjZXNzUmF0ZSk7CisgICAgLyogRmluZCBzdWNjZXNzUmF0ZSBpbiBvcGVyYXRpb25SYXRlU2V0W10gKi8KKyAgICB3ZC0+cHJvYmVTdWNjZXNzQ291bnQrKzsKKyAgICBpZiAod2QtPnByb2JlQ291bnQgPCB3ZC0+c3VjY2Vzc19wcm9iaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHBjb3VudCA9IHdkLT5wcm9iZUNvdW50OworICAgIGlmIChwY291bnQgIT0gMCkKKyAgICB7CisgICAgICAgIFBFUlByb2JlID0gd2QtPnByb2JlU3VjY2Vzc0NvdW50ICogMTAwIC8gcGNvdW50OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBQRVJQcm9iZSA9IDE7CisgICAgfQorCisgICAgaWYgKFBFUlByb2JlIDwgKChyY0NlbGwtPmN1cnJlbnRSYXRlIDwgMTYpPyA4MDoxMDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvL0RiZ1ByaW50KCJ3ZC0+cHJvYmVDb3VudD0lZCwgd2QtPnByb2JlU3VjY2Vzc0NvdW50PSVkIiwgd2QtPnByb2JlQ291bnQsIHdkLT5wcm9iZVN1Y2Nlc3NDb3VudCk7CisgICAgd2QtPnByb2JlQ291bnQgPSB3ZC0+cHJvYmVTdWNjZXNzQ291bnQgPSAwOworICAgIGZvciAoaT0wOyBpPHJjQ2VsbC0+b3BlcmF0aW9uUmF0ZUNvdW50OyBpKyspCisgICAgeworICAgICAgICBpZiAoc3VjY2Vzc1JhdGUgPT0gcmNDZWxsLT5vcGVyYXRpb25SYXRlU2V0W2ldKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaSA+IHJjQ2VsbC0+Y3VycmVudFJhdGVJbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBSYWlzZSBjdXJyZW50IFR4IHJhdGUgKi8KKyAgICAgICAgICAgICAgICB6bV9tc2cxX3R4KFpNX0xWXzAsICJSYWlzZSBUeCBSYXRlPSIsIHN1Y2Nlc3NSYXRlKTsKKyAgICAgICAgICAgICAgICAvL0RiZ1ByaW50KCJSYWlzZSBUeCBSYXRlPSVkIiwgc3VjY2Vzc1JhdGUpOworCisgICAgICAgICAgICAgICAgLy8gUmVzb2x2ZSBjb21wYXRpYmlsaXR5IHByb2JsZW0gd2l0aCBNYXJ2ZWxsCisgICAgICAgICAgICAgICAgaWYoKHJjQ2VsbC0+Y3VycmVudFJhdGUgPD0gMTUpICYmIChzdWNjZXNzUmF0ZSA+IDE1KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICAgICAgICAgIHpmSHBTZXRBZ2dQa3ROdW0oZGV2LCAxNik7CisgICAgICAgICAgICAgICAgICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmNDZWxsLT5jdXJyZW50UmF0ZSA9IHN1Y2Nlc3NSYXRlOworICAgICAgICAgICAgICAgIHJjQ2VsbC0+Y3VycmVudFJhdGVJbmRleCA9ICh1OF90KWk7CisgICAgICAgICAgICAgICAgcmNDZWxsLT5mYWlsQ291bnQgPSByY0NlbGwtPnR4Q291bnQgPSAwOworICAgICAgICAgICAgICAgIHJjQ2VsbC0+bGFzdHR4Q291bnQgPSAwOworICAgICAgICAgICAgICAgIHJjQ2VsbC0+bGFzdFRpbWUgID0gd2QtPnRpY2s7CisgICAgICAgICAgICAgICAgd2QtPnR4RmFpbFtyY0NlbGwtPmN1cnJlbnRSYXRlXSA9IHdkLT50eEZhaWxbcmNDZWxsLT5jdXJyZW50UmF0ZV0gPj4gMTsKKyAgICAgICAgICAgICAgICB3ZC0+dHhNUERVW3JjQ2VsbC0+Y3VycmVudFJhdGVdID0gd2QtPnR4TVBEVVtyY0NlbGwtPmN1cnJlbnRSYXRlXSA+PiAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZlJhdGVDdHJsUnhSc3NpRXZlbnQgICAgICAgKi8KKy8qICAgICAgUnggUlNTSSBldmVudC4gQ2FsY3VsYXRlIFJTU0kgbW92aW5nIGF2ZXJhZ2UsIGFjY2VsYXJhdGUgICAgICAgICovCisvKiAgICAgIHJhdGUgcHJvYmluZyBpZiBSU1NJIHZhcmlhdGlvbiBvdmVyIHRocmVzaG9sZC4gICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHJjQ2VsbCA6IHJhdGUgY29udHJvbCBjZWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBzdWNjZXNzUmF0ZSA6IHN1Y2Nlc3MgcmF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIElOQy4gICAgMjAwNy4yICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB6ZlJhdGVDdHJsUnhSc3NpRXZlbnQoc3RydWN0IHpzUmNDZWxsKiByY0NlbGwsIHUxNl90IHJ4UnNzaSkKK3sKKyAgICAvKiBpZiBkZWx0YShyY0NlbGwtPnJ4UnNzaSwgcnhSc3NpKSA+IFpNX1JBVEVfQ1RSTF9SU1NJX1ZBUklBVElPTiAqLworICAgIGlmICgocmNDZWxsLT5yeFJzc2kgLSByeFJzc2kpID4gWk1fUkFURV9DVFJMX1JTU0lfVkFSSUFUSU9OKQorICAgIHsKKyAgICAgICAgLyogQWNjZWxlcmF0ZSByYXRlIHByb2JpbmcgdmlhIGRlY3JlYWluZyByY0NlbGwtPnByb2JpbmdUaW1lICovCisgICAgICAgIHJjQ2VsbC0+cHJvYmluZ1RpbWUgLT0gWk1fUkFURV9DVFJMX1BST0JJTkdfSU5URVJWQUxfTVMvWk1fTVNfUEVSX1RJQ0s7CisgICAgfQorCisgICAgLyogVXBkYXRlIFJTU0kgbW92aW5nIGF2ZXJhZ2UgKi8KKyAgICByY0NlbGwtPnJ4UnNzaSA9ICgoKHJjQ2VsbC0+cnhSc3NpKjcpICsgcnhSc3NpKSs0KSA+PiAzOworICAgIHJldHVybjsKK30KKworCisjaWZkZWYgWk1fRU5BQkxFX0JBX1JBVEVDVFJMCit1OF90IEhpZ2hlclJhdGUodThfdCBSYXRlKSB7CisgICAgaWYgKFJhdGUgPCAyOCkgUmF0ZSsrOyAvLzI4PU1DUzE1U0csIDI3PU1DUzE1LCAyNj1NQ1MxNCwgMjU9TUNTMTMKKyAgICBpZiAoUmF0ZSA+IDI4KSBSYXRlID0gMjg7CisgICAgd2hpbGUgKChSYXRlID49IDIwKSAmJiAoUmF0ZSA8PSAyMykpIHsKKyAgICAgICAgUmF0ZSArKzsKKyAgICB9CisgICAgcmV0dXJuIFJhdGU7Cit9CisKK3U4X3QgTG93ZXJSYXRlKHU4X3QgUmF0ZSkgeworICAgIGlmIChSYXRlID4gMSkgUmF0ZS0tOworICAgIHdoaWxlICgoUmF0ZSA+PSAyMCkgJiYgKFJhdGUgPD0gMjMpKSB7CisgICAgICAgIFJhdGUgLS07CisgICAgfQorICAgIHJldHVybiBSYXRlOworfQorCit1OF90IFJhdGVNYXBUb1JhdGVJbmRleCh1OF90IFJhdGUsIHN0cnVjdCB6c1JjQ2VsbCogcmNDZWxsKSB7CisgICAgdThfdCBpOworICAgIGZvciAoaT0wOyBpPHJjQ2VsbC0+b3BlcmF0aW9uUmF0ZUNvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKFJhdGUgPT0gcmNDZWxsLT5vcGVyYXRpb25SYXRlU2V0W2ldKSB7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCB6ZlJhdGVDdHJsQWdnclN0YSh6ZGV2X3QqIGRldikgeworICAgIHU4X3QgUmF0ZUluZGV4LCBSYXRlOworICAgIHU4X3QgSFJhdGU7CisgICAgdThfdCBMUmF0ZTsKKyAgICB1MzJfdCBSYXRlQ3RybFR4TVBEVSwgUmF0ZUN0cmxCQUZhaWw7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgUmF0ZUluZGV4ID0gd2QtPnN0YS5vcHBvc2l0ZUluZm9bMF0ucmNDZWxsLmN1cnJlbnRSYXRlSW5kZXg7CisgICAgUmF0ZSA9IHdkLT5zdGEub3Bwb3NpdGVJbmZvWzBdLnJjQ2VsbC5vcGVyYXRpb25SYXRlU2V0W1JhdGVJbmRleF07CisKKyAgICBUeE1QRFVbUmF0ZV0gPSAoVHhNUERVW1JhdGVdIC8gNSkgKyAod2QtPmNvbW1UYWxseS5SYXRlQ3RybFR4TVBEVSAqIDQgLyA1KTsKKyAgICBCQUZhaWxbUmF0ZV0gPSAoQkFGYWlsW1JhdGVdIC8gNSkgKyAod2QtPmNvbW1UYWxseS5SYXRlQ3RybEJBRmFpbCAqIDQgLyA1KTsKKyAgICBSYXRlQ3RybFR4TVBEVSA9IHdkLT5jb21tVGFsbHkuUmF0ZUN0cmxUeE1QRFU7CisgICAgUmF0ZUN0cmxCQUZhaWwgPSB3ZC0+Y29tbVRhbGx5LlJhdGVDdHJsQkFGYWlsOworICAgIHdkLT5jb21tVGFsbHkuUmF0ZUN0cmxUeE1QRFUgPSAwOworICAgIHdkLT5jb21tVGFsbHkuUmF0ZUN0cmxCQUZhaWwgPSAwOworICAgIGlmIChUeE1QRFVbUmF0ZV0gPiAwKSB7CisgICAgICAgIEJBUEVSW1JhdGVdID0gQkFGYWlsW1JhdGVdICogMTAwMCAvIFR4TVBEVVtSYXRlXTsgLy9QRVIqMTAwMAorICAgICAgICBCQVBFUltSYXRlXSA9IChCQVBFUltSYXRlXT4wKT8gQkFQRVJbUmF0ZV06MTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBIUmF0ZSA9IEhpZ2hlclJhdGUoUmF0ZSk7CisgICAgTFJhdGUgPSBMb3dlclJhdGUoUmF0ZSk7CisgICAgaWYgKEJBUEVSW1JhdGVdPjIwMCkgeworICAgICAgICBpZiAoKFJhdGVDdHJsVHhNUERVID4gMTAwKSAmJiAoQkFQRVJbUmF0ZV08MzAwKSAmJiAoSFJhdGUgIT0gUmF0ZSkgJiYgQkFQRVJbSFJhdGVdICYmCisgICAgICAgICAgICAoQkFQRVJbSFJhdGVdIDwgQkFQRVJbUmF0ZV0gKyBCQURpZmZbUmF0ZV0pKSB7CisgICAgICAgICAgICBSYXRlID0gSFJhdGU7CisgICAgICAgICAgICAvL0RiZ1ByaW50KCJSYXRlIGltcHJvdmVkIHRvICVkIiwgUmF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBSYXRlID0gTFJhdGU7CisgICAgICAgICAgICAvL0RiZ1ByaW50KCJSYXRlIGRlY3JlYXNlZCB0byAlZCIsIFJhdGUpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKEJBUEVSW1JhdGVdICYmIEJBUEVSW1JhdGVdPDEwMCkgeworICAgICAgICBpZiAoUmF0ZUN0cmxUeE1QRFUgPiAxMDApIHsKKyAgICAgICAgICAgIFJhdGUgPSBIUmF0ZTsKKyAgICAgICAgICAgIC8vRGJnUHJpbnQoIlJhdGUgaW1wcm92ZWQgdG8gJWQiLCBSYXRlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB3ZC0+c3RhLm9wcG9zaXRlSW5mb1swXS5yY0NlbGwuY3VycmVudFJhdGUgPSBSYXRlOworICAgIHdkLT5zdGEub3Bwb3NpdGVJbmZvWzBdLnJjQ2VsbC5jdXJyZW50UmF0ZUluZGV4ID0gUmF0ZU1hcFRvUmF0ZUluZGV4KFJhdGUsICZ3ZC0+c3RhLm9wcG9zaXRlSW5mb1swXS5yY0NlbGwpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvcmF0ZWN0cmwuaCBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9yYXRlY3RybC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNDExZDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvcmF0ZWN0cmwuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfUkFURUNUUkxfSAorI2RlZmluZSBfUkFURUNUUkxfSAorCisjZGVmaW5lIFpNX1JBVEVfQ1RSTF9QUk9CSU5HX0lOVEVSVkFMX01TICAgIDEwMDAgLy8xMDAwbXMKKyNkZWZpbmUgWk1fUkFURV9DVFJMX01JTl9QUk9CSU5HX1BBQ0tFVCAgICAgOAorCisjZGVmaW5lIFpNX01JTl9SQVRFX0ZBSUxfQ09VTlQgICAgICAgICAgICAgIDIwCisKKyNkZWZpbmUgWk1fUkFURV9QUk9CSU5HX1RIUkVTSE9MRCAgICAgICAgICAgMTUgIC8vNiUKKyNkZWZpbmUgWk1fUkFURV9TVUNDRVNTX1BST0JJTkcgICAgICAgICAgICAgMTAKKworI2RlZmluZSBaTV9SQVRFX0NUUkxfUlNTSV9WQVJJQVRJT04gICAgICAgICA1ICAvL1RCRAorCitleHRlcm4gY29uc3QgdTMyX3QgemNSYXRlVG9QaHlDdHJsW107CisKK2V4dGVybiB2b2lkIHpmUmF0ZUN0cmxJbml0Q2VsbCh6ZGV2X3QqIGRldiwgc3RydWN0IHpzUmNDZWxsKiByY0NlbGwsIHU4X3QgdHlwZSwgdThfdCBnQmFuZCwgdThfdCBTRzQwKTsKK2V4dGVybiB1MTZfdCB6ZlJhdGVDdHJsR2V0VHhSYXRlKHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNSY0NlbGwqIHJjQ2VsbCwgdTE2X3QqIHByb2JpbmcpOworZXh0ZXJuIHZvaWQgemZSYXRlQ3RybFR4RmFpbEV2ZW50KHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNSY0NlbGwqIHJjQ2VsbCwgdThfdCBhZ2dSYXRlLCB1MzJfdCByZXRyeVJhdGUpOworZXh0ZXJuIHZvaWQgemZSYXRlQ3RybFR4U3VjY2Vzc0V2ZW50KHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNSY0NlbGwqIHJjQ2VsbCwgdThfdCBzdWNjZXNzUmF0ZSk7CitleHRlcm4gdm9pZCB6ZlJhdGVDdHJsQWdnclN0YSh6ZGV2X3QqIGRldik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9zdHJ1Y3QuaCBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzYzMWM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL3N0cnVjdC5oCkBAIC0wLDAgKzEsMTMxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX1NUUlVDVF9ICisjZGVmaW5lIF9TVFJVQ1RfSAorCisjaW5jbHVkZSAiLi4vb2FsX21hcmMuaCIKKworI2RlZmluZSBaTV9TV19MT09QX0JBQ0sgICAgICAgICAgICAgICAgICAgICAwIC8qIDE9PmVuYWJsZSwgMD0+ZGlzYWJsZSAqLworI2RlZmluZSBaTV9QQ0lfTE9PUF9CQUNLICAgICAgICAgICAgICAgICAgICAwIC8qIDE9PmVuYWJsZSwgMD0+ZGlzYWJsZSAqLworI2RlZmluZSBaTV9QUk9UT0NPTF9SRVNQT05TRV9TSU1VTEFUSU9OICAgICAwCisKKyNkZWZpbmUgWk1fUlhfRlJBTUVfU0laRSAgICAgICAgICAgICAgIDE2MDAKKworZXh0ZXJuIGNvbnN0IHU4X3QgemcxMWJSYXRlVGJsWzRdOworZXh0ZXJuIGNvbnN0IHU4X3QgemcxMWdSYXRlVGJsWzhdOworCisjZGVmaW5lIFpNX0RSSVZFUl9DT1JFX01BSk9SX1ZFUlNJT04gICAgICAgIDEKKyNkZWZpbmUgWk1fRFJJVkVSX0NPUkVfTUlOT1JfVkVSU0lPTiAgICAgICAgMQorI2RlZmluZSBaTV9EUklWRVJfQ09SRV9CUkFOQ0hfTUFKT1JfVkVSU0lPTiAzCisjZGVmaW5lIFpNX0RSSVZFUl9DT1JFX0JSQU5DSF9NSU5PUl9WRVJTSU9OIDM5CisKKyNpZm5kZWYgWk1fVlRYUV9TSVpFCisjZGVmaW5lIFpNX1ZUWFFfU0laRSAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQgLy8yXk4KKyNlbmRpZgorCisjZGVmaW5lIFpNX1ZUWFFfU0laRV9NQVNLICAgICAgICAgICAgICAgICAgIChaTV9WVFhRX1NJWkUtMSkKKyNkZWZpbmUgWk1fVk1NUV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgOCAvLzJeTgorI2RlZmluZSBaTV9WTU1RX1NJWkVfTUFTSyAgICAgICAgICAgICAgICAgICAoWk1fVk1NUV9TSVpFLTEpCisKKyNpbmNsdWRlICJjYWdnLmgiCisKKyNkZWZpbmUgWk1fQUdHX1BPT0xfU0laRSAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgWk1fUkFURV9UQUJMRV9TSVpFICAgICAgICAgICAgICAgICAgMzIKKworI2RlZmluZSBaTV9NQVhfQlVGX0RJU0NSRVRFX05VTUJFUiAgICAgICAgICA1CisKKworCisKKworCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIElCU1MgbWFjcm9zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFpNX0lCU1NfUEVFUl9BTElWRV9DT1VOVEVSICAgICA0CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQklUIG1hcHBpbmcgcmVsYXRlZCBtYWNyb3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBaTV9CSVRfMCAgICAgICAweDEKKyNkZWZpbmUgWk1fQklUXzEgICAgICAgMHgyCisjZGVmaW5lIFpNX0JJVF8yICAgICAgIDB4NAorI2RlZmluZSBaTV9CSVRfMyAgICAgICAweDgKKyNkZWZpbmUgWk1fQklUXzQgICAgICAgMHgxMAorI2RlZmluZSBaTV9CSVRfNSAgICAgICAweDIwCisjZGVmaW5lIFpNX0JJVF82ICAgICAgIDB4NDAKKyNkZWZpbmUgWk1fQklUXzcgICAgICAgMHg4MAorI2RlZmluZSBaTV9CSVRfOCAgICAgICAweDEwMAorI2RlZmluZSBaTV9CSVRfOSAgICAgICAweDIwMAorI2RlZmluZSBaTV9CSVRfMTAgICAgICAweDQwMAorI2RlZmluZSBaTV9CSVRfMTEgICAgICAweDgwMAorI2RlZmluZSBaTV9CSVRfMTIgICAgICAweDEwMDAKKyNkZWZpbmUgWk1fQklUXzEzICAgICAgMHgyMDAwCisjZGVmaW5lIFpNX0JJVF8xNCAgICAgIDB4NDAwMAorI2RlZmluZSBaTV9CSVRfMTUgICAgICAweDgwMDAKKyNkZWZpbmUgWk1fQklUXzE2ICAgICAgMHgxMDAwMAorI2RlZmluZSBaTV9CSVRfMTcgICAgICAweDIwMDAwCisjZGVmaW5lIFpNX0JJVF8xOCAgICAgIDB4NDAwMDAKKyNkZWZpbmUgWk1fQklUXzE5ICAgICAgMHg4MDAwMAorI2RlZmluZSBaTV9CSVRfMjAgICAgICAweDEwMDAwMAorI2RlZmluZSBaTV9CSVRfMjEgICAgICAweDIwMDAwMAorI2RlZmluZSBaTV9CSVRfMjIgICAgICAweDQwMDAwMAorI2RlZmluZSBaTV9CSVRfMjMgICAgICAweDgwMDAwMAorI2RlZmluZSBaTV9CSVRfMjQgICAgICAweDEwMDAwMDAKKyNkZWZpbmUgWk1fQklUXzI1ICAgICAgMHgyMDAwMDAwCisjZGVmaW5lIFpNX0JJVF8yNiAgICAgIDB4NDAwMDAwMAorI2RlZmluZSBaTV9CSVRfMjcgICAgICAweDgwMDAwMDAKKyNkZWZpbmUgWk1fQklUXzI4ICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBaTV9CSVRfMjkgICAgICAweDIwMDAwMDAwICAgLy9XUEEgc3VwcG9ydAorI2RlZmluZSBaTV9CSVRfMzAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFpNX0JJVF8zMSAgICAgIDB4ODAwMDAwMDAKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1BQyBhZGRyZXNzIHJlbGF0ZWQgbWFjcm9zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFpNX01BQ19CWVRFX1RPX1dPUkQobWFjYiwgbWFjdykgICBtYWN3WzBdID0gbWFjYlswXSArIChtYWNiWzFdIDw8IDgpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWN3WzFdID0gbWFjYlsyXSArIChtYWNiWzNdIDw8IDgpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWN3WzJdID0gbWFjYls0XSArIChtYWNiWzVdIDw8IDgpOworCisjZGVmaW5lIFpNX01BQ19XT1JEX1RPX0JZVEUobWFjdywgbWFjYikgICBtYWNiWzBdID0gKHU4X3QpIChtYWN3WzBdICYgMHhmZik7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2JbMV0gPSAodThfdCkgKG1hY3dbMF0gPj4gOCk7ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjYlsyXSA9ICh1OF90KSAobWFjd1sxXSAmIDB4ZmYpOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNiWzNdID0gKHU4X3QpIChtYWN3WzFdID4+IDgpOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2JbNF0gPSAodThfdCkgKG1hY3dbMl0gJiAweGZmKTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjYls1XSA9ICh1OF90KSAobWFjd1syXSA+PiA4KTsKKworI2RlZmluZSBaTV9NQUNfMChtYWN3KSAgICgodThfdCkobWFjd1swXSAmIDB4ZmYpKQorI2RlZmluZSBaTV9NQUNfMShtYWN3KSAgICgodThfdCkobWFjd1swXSA+PiA4KSkKKyNkZWZpbmUgWk1fTUFDXzIobWFjdykgICAoKHU4X3QpKG1hY3dbMV0gJiAweGZmKSkKKyNkZWZpbmUgWk1fTUFDXzMobWFjdykgICAoKHU4X3QpKG1hY3dbMV0gPj4gOCkpCisjZGVmaW5lIFpNX01BQ180KG1hY3cpICAgKCh1OF90KShtYWN3WzJdICYgMHhmZikpCisjZGVmaW5lIFpNX01BQ181KG1hY3cpICAgKCh1OF90KShtYWN3WzJdID4+IDgpKQorCisjZGVmaW5lIFpNX0lTX01VTFRJQ0FTVF9PUl9CUk9BRENBU1QobWFjKSAobWFjWzBdICYgMHgwMSkKKyNkZWZpbmUgWk1fSVNfTVVMVElDQVNUKG1hYykgKChtYWNbMF0gJiAweDAxKSAmJiAoKCh1OF90KW1hY1swXSkgIT0gMHhGRikpCisKKyNkZWZpbmUgWk1fTUFDX0VRVUFMKG1hYzEsIG1hYzIpICAgKChtYWMxWzBdPT1tYWMyWzBdKSYmKG1hYzFbMV09PW1hYzJbMV0pJiYobWFjMVsyXT09bWFjMlsyXSkpCisjZGVmaW5lIFpNX01BQ19OT1RfRVFVQUwobWFjMSwgbWFjMikgICAoKG1hYzFbMF0hPW1hYzJbMF0pfHwobWFjMVsxXSE9bWFjMlsxXSl8fChtYWMxWzJdIT1tYWMyWzJdKSkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTUFDIGFkZHJlc3MgcmVsYXRlZCBtYWMncm9zIChlbmQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFpNX0JZVEVfVE9fV09SRChBLCBCKSAgICgoQTw8OCkrQikKKyNkZWZpbmUgWk1fUk9MMzIoIEEsIG4gKSBcCisgICAgICAgICggKChBKSA8PCAobikpIHwgKCAoKEEpPj4oMzItKG4pKSkgICYgKCAoMVVMIDw8IChuKSkgLSAxICkgKSApCisjZGVmaW5lIFpNX1JPUjMyKCBBLCBuICkgWk1fUk9MMzIoIChBKSwgMzItKG4pICkKKyNkZWZpbmUgWk1fTE84KHYxNikgICgodThfdCkoKHYxNikgJiAweEZGKSkKKyNkZWZpbmUgWk1fSEk4KHYxNikgICgodThfdCkoKCh2MTYpPj44KSYweEZGKSkKKworI2lmZGVmIFpNX0VOQUJMRV9CVUZGRVJfVFJBQ0UKK2V4dGVybiB2b2lkIHpmd0J1ZlRyYWNlKHpkZXZfdCogZGV2LCB6YnVmX3QgKmJ1ZiwgdThfdCAqZnVuY3Rpb25OYW1lKTsKKyNkZWZpbmUgWk1fQlVGRkVSX1RSQUNFKGRldiwgYnVmKSAgICAgICB6ZndCdWZUcmFjZShkZXYsIGJ1ZiwgX19GVU5DVElPTl9fKTsKKyNlbHNlCisjZGVmaW5lIFpNX0JVRkZFUl9UUkFDRShkZXYsIGJ1ZikKKyNlbmRpZgorCisvKiBub3RpZmljYXRpb24gZXZlbnRzIHRvIGhlYXJ0IGJlYXQgZnVuY3Rpb24gKi8KKyNkZWZpbmUgWk1fQlNTSURfTElTVF9TQ0FOICAgICAgICAgMHgwMQorCisvKiBDQU0gbW9kZSAqLworI2RlZmluZSBaTV9DQU1fQVAgICAgICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSBaTV9DQU1fU1RBICAgICAgICAgICAgICAgICAgICAgIDB4MgorI2RlZmluZSBaTV9DQU1fSE9TVCAgICAgICAgICAgICAgICAgICAgIDB4NAorCisvKiBmaW5pdGUgc3RhdGUgbWFjaGluZSBmb3IgYWRhcHRlciAqLworI2RlZmluZSBaTV9TVEFfU1RBVEVfRElTQ09OTkVDVCAgICAgICAgICAgMQorI2RlZmluZSBaTV9TVEFfU1RBVEVfQ09OTkVDVElORyAgICAgICAgICAgMgorI2RlZmluZSBaTV9TVEFfU1RBVEVfQ09OTkVDVEVEICAgICAgICAgICAgMworCisvKiBFdmVudCBkZWZpbml0aW9ucyBmb3IgIGZpbml0ZSBzdGF0ZSBtYWNoaW5lICovCisjZGVmaW5lIFpNX0VWRU5UX1RJTUVPVVRfU0NBTiAgICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUgWk1fRVZFTlRfVElNRU9VVF9CR19TQ0FOICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBaTl9FVkVOVF9USU1FT1VUX1JFQ09OTkVDVCAgICAgICAgMHgwMDAyCisjZGVmaW5lIFpNX0VWRU5UX1RJTUVPVVRfSU5JVF9TQ0FOICAgICAgICAweDAwMDMKKyNkZWZpbmUgWk1fRVZFTlRfVElNRU9VVF9BVVRIICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBaTV9FVkVOVF9USU1FT1VUX0FTU08gICAgICAgICAgICAgMHgwMDA1CisjZGVmaW5lIFpNX0VWRU5UX1RJTUVPVVRfQVVUT19TQ0FOICAgICAgICAweDAwMDYKKyNkZWZpbmUgWk1fRVZFTlRfVElNRU9VVF9NSUNfRkFJTCAgICAgICAgIDB4MDAwNworI2RlZmluZSBaTV9FVkVOVF9USU1FT1VUX0NIRUNLX0FQICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFpNX0VWRU5UX0NPTk5FQ1QgICAgICAgICAgICAgICAgICAweDAwMDkKKyNkZWZpbmUgWk1fRVZFTlRfSU5JVF9TQ0FOICAgICAgICAgICAgICAgIDB4MDAwYQorI2RlZmluZSBaTV9FVkVOVF9TQ0FOICAgICAgICAgICAgICAgICAgICAgMHgwMDBiCisjZGVmaW5lIFpNX0VWRU5UX0JHX1NDQU4gICAgICAgICAgICAgICAgICAweDAwMGMKKyNkZWZpbmUgWk1fRVZFTlRfRElTQ09OTkVDVCAgICAgICAgICAgICAgIDB4MDAwZAorI2RlZmluZSBaTV9FVkVOVF9XUEFfTUlDX0ZBSUwgICAgICAgICAgICAgMHgwMDBlCisjZGVmaW5lIFpNX0VWRU5UX0FQX0FMSVZFICAgICAgICAgICAgICAgICAweDAwMGYKKyNkZWZpbmUgWk1fRVZFTlRfQ0hBTkdFX1RPX0FQICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBaTV9FVkVOVF9DSEFOR0VfVE9fU1RBICAgICAgICAgICAgMHgwMDExCisjZGVmaW5lIFpNX0VWRU5UX0lETEUgICAgICAgICAgICAgICAgICAgICAweDAwMTIKKyNkZWZpbmUgWk1fRVZFTlRfQVVUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAxMworI2RlZmluZSBaTV9FVkVOVF9BU1NPX1JTUCAgICAgICAgICAgICAgICAgMHgwMDE0CisjZGVmaW5lIFpNX0VWRU5UX1dQQV9QS19PSyAgICAgICAgICAgICAgICAweDAwMTUKKyNkZWZpbmUgWk1fRVZFTlRfV1BBX0dLX09LICAgICAgICAgICAgICAgIDB4MDAxNgorI2RlZmluZSBaTV9FVkVOVF9SQ1ZfQkVBQ09OICAgICAgICAgICAgICAgMHgwMDE3CisjZGVmaW5lIFpNX0VWRU5UX1JDVl9QUk9CRV9SU1AgICAgICAgICAgICAweDAwMTgKKyNkZWZpbmUgWk1fRVZFTlRfU0VORF9EQVRBICAgICAgICAgICAgICAgIDB4MDAxOQorI2RlZmluZSBaTV9FVkVOVF9BVVRPX1NDQU4gICAgICAgICAgICAgICAgMHgwMDFhCisjZGVmaW5lIFpNX0VWRU5UX01JQ19GQUlMMSAgICAgICAgICAgICAgICAweDAwMWQKKyNkZWZpbmUgWk1fRVZFTlRfTUlDX0ZBSUwyICAgICAgICAgICAgICAgIDB4MDAxZQorI2RlZmluZSBaTV9FVkVOVF9JQlNTX01PTklUT1IgICAgICAgICAgICAgMHgwMDFmCisjZGVmaW5lIFpNX0VWRU5UX0lOX1NDQU4gICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgWk1fRVZFTlRfQ01fVElNRVIgICAgICAgICAgICAgICAgIDB4MDAyMQorI2RlZmluZSBaTV9FVkVOVF9DTV9ESVNDT05ORUNUICAgICAgICAgICAgMHgwMDIyCisjZGVmaW5lIFpNX0VWRU5UX0NNX0JMT0NLX1RJTUVSICAgICAgICAgICAweDAwMjMKKyNkZWZpbmUgWk1fRVZFTlRfVElNRU9VVF9BRERCQSAgICAgICAgICAgIDB4MDAyNAorI2RlZmluZSBaTV9FVkVOVF9USU1FT1VUX1BFUkZPUk1BTkNFICAgICAgMHgwMDI1CisjZGVmaW5lIFpNX0VWRU5UX1NLSVBfQ09VTlRFUk1FQVNVUkUJICAweDAwMjYKKyNkZWZpbmUgWk1fRVZFTlRfTk9ORSAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZgorCisvKiBBY3Rpb25zIGFmdGVyIGNhbGwgZmluaXRlIHN0YXRlIG1hY2hpbmUgKi8KKyNkZWZpbmUgWk1fQUNUSU9OX05PTkUgICAgICAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBaTV9BQ1RJT05fUVVFVUVfREFUQSAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFpNX0FDVElPTl9EUk9QX0RBVEEgICAgICAgICAgICAgICAweDAwMDIKKworLyogVGltZXJzIGZvciBmaW5pdGUgc3RhdGUgbWFjaGluZSAqLworI2RlZmluZSBaTV9USUNLX1pFUk8gICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBaTV9USUNLX0lOSVRfU0NBTl9FTkQgICAgICAgICAgICAgOAorI2RlZmluZSBaTV9USUNLX05FWFRfQkdfU0NBTiAgICAgICAgICAgICAgNTAKKyNkZWZpbmUgWk1fVElDS19CR19TQ0FOX0VORCAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgWk1fVElDS19BVVRIX1RJTUVPVVQgICAgICAgICAgICAgIDQKKyNkZWZpbmUgWk1fVElDS19BU1NPX1RJTUVPVVQgICAgICAgICAgICAgIDQKKyNkZWZpbmUgWk1fVElDS19BVVRPX1NDQU4gICAgICAgICAgICAgICAgIDMwMAorI2RlZmluZSBaTV9USUNLX01JQ19GQUlMX1RJTUVPVVQgICAgICAgICAgNjAwMAorI2RlZmluZSBaTV9USUNLX0NIRUNLX0FQMSAgICAgICAgICAgICAgICAgMTUwCisjZGVmaW5lIFpNX1RJQ0tfQ0hFQ0tfQVAyICAgICAgICAgICAgICAgICAzNTAKKyNkZWZpbmUgWk1fVElDS19DSEVDS19BUDMgICAgICAgICAgICAgICAgIDI1MAorI2RlZmluZSBaTV9USUNLX0lCU1NfTU9OSVRPUiAgICAgICAgICAgICAgMTYwCisjZGVmaW5lIFpNX1RJQ0tfSU5fU0NBTiAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFpNX1RJQ0tfQ01fVElNRU9VVCAgICAgICAgICAgICAgICA2MDAwCisjZGVmaW5lIFpNX1RJQ0tfQ01fRElTQ09OTkVDVCAgICAgICAgICAgICAyMDAKKyNkZWZpbmUgWk1fVElDS19DTV9CTE9DS19USU1FT1VUICAgICAgICAgIDYwMDAKKworLyogRml4IGJ1ZyMzMzMzOCBDb3VudGVyIE1lYXN1cmUgSXNzdXIgKi8KKyNpZmRlZiBORElTX0NNX0ZPUl9YUAorI2RlZmluZSBaTV9USUNLX0NNX1RJTUVPVVRfT0ZGU0VUICAgICAgICAyMTYwCisjZGVmaW5lIFpNX1RJQ0tfQ01fRElTQ09OTkVDVF9PRkZTRVQgICAgIDcyCisjZGVmaW5lIFpNX1RJQ0tfQ01fQkxPQ0tfVElNRU9VVF9PRkZTRVQgIDIxNjAKKyNlbHNlCisjZGVmaW5lIFpNX1RJQ0tfQ01fVElNRU9VVF9PRkZTRVQgICAgICAgIDAKKyNkZWZpbmUgWk1fVElDS19DTV9ESVNDT05ORUNUX09GRlNFVCAgICAgMAorI2RlZmluZSBaTV9USUNLX0NNX0JMT0NLX1RJTUVPVVRfT0ZGU0VUICAwCisjZW5kaWYKKworI2RlZmluZSBaTV9USU1FX0FDVElWRV9TQ0FOICAgICAgICAgICAgICAgMzAgLy9tcworI2RlZmluZSBaTV9USU1FX1BBU1NJVkVfU0NBTiAgICAgICAgICAgICAgMTEwIC8vbXMKKworLyogZmluaXRlIHN0YXRlIG1hY2hpbmUgZm9yIEJTUyBjb25uZWN0ICovCisjZGVmaW5lIFpNX1NUQV9DT05OX1NUQVRFX05PTkUgICAgICAgICAgICAwCisjZGVmaW5lIFpNX1NUQV9DT05OX1NUQVRFX0FVVEhfT1BFTiAgICAgICAxCisjZGVmaW5lIFpNX1NUQV9DT05OX1NUQVRFX0FVVEhfU0hBUkVfMSAgICAyCisjZGVmaW5lIFpNX1NUQV9DT05OX1NUQVRFX0FVVEhfU0hBUkVfMiAgICAzCisjZGVmaW5lIFpNX1NUQV9DT05OX1NUQVRFX0FTU09DSUFURSAgICAgICA0CisjZGVmaW5lIFpNX1NUQV9DT05OX1NUQVRFX1NTSURfTk9UX0ZPVU5EICA1CisjZGVmaW5lIFpNX1NUQV9DT05OX1NUQVRFX0FVVEhfQ09NUExFVEVEICA2CisKKy8qIGZpbml0ZSBzdGF0ZSBtYWNoaW5lIGZvciBXUEEgaGFuZHNoYWtpbmcgKi8KKyNkZWZpbmUgWk1fU1RBX1dQQV9TVEFURV9JTklUICAgICAgICAgICAgIDAKKyNkZWZpbmUgWk1fU1RBX1dQQV9TVEFURV9QS19PSyAgICAgICAgICAgIDEKKyNkZWZpbmUgWk1fU1RBX1dQQV9TVEFURV9HS19PSyAgICAgICAgICAgIDIKKworLyogdmFyaW91cyB0aW1lcnMgKi8KKyNkZWZpbmUgWk1fSU5URVJWQUxfQ09OTkVDVF9USU1FT1VUICAgICAgICAgIDIwICAgLyogMjAwIG1pbGlzZWNvbmQgKi8KKworLyogSUJTUyBkZWZpbml0aW9ucyAqLworI2RlZmluZSBaTV9JQlNTX1BBUlRORVJfTE9TVCAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBaTV9JQlNTX1BBUlRORVJfQUxJVkUgICAgICAgICAgICAgICAgMQorI2RlZmluZSBaTV9JQlNTX1BBUlRORVJfQ0hFQ0sgICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIFpNX0JDTUNfQVJSQVlfU0laRSAgICAgICAgICAgICAgICAgIDE2IC8qIE11c3QgYmUgMl5OICovCisjZGVmaW5lIFpNX1VOSV9BUlJBWV9TSVpFICAgICAgICAgICAgICAgICAgIDE2IC8qIE11c3QgYmUgMl5OICovCisKKyNkZWZpbmUgWk1fTUFYX0RFRlJBR19FTlRSSUVTICAgICAgICAgICAgICAgNCAgLyogMl5OICovCisjZGVmaW5lIFpNX0RFRlJBR19BR0lOR19USU1FX1NFQyAgICAgICAgICAgIDUgIC8qIDUgc2Vjb25kcyAqLworCisjZGVmaW5lIFpNX01BWF9XUEFJRV9TSVpFICAgICAgICAgICAgICAgICAgIDEyOAorLyogV0VQIHJlbGF0ZWQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgWk1fVVNFUl9LRVlfREVGQVVMVCAgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgWk1fVVNFUl9LRVlfUEsgICAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAvKiBQYWlyd2lzZSBLZXkgKi8KKyNkZWZpbmUgWk1fVVNFUl9LRVlfR0sgICAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAvKiBHcm91cCBLZXkgKi8KKy8qIEFQIFdMQU4gVHlwZSAqLworI2RlZmluZSBaTV9XTEFOX1RZUEVfUFVSRV9CICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFpNX1dMQU5fVFlQRV9QVVJFX0cgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgWk1fV0xBTl9UWVBFX01JWEVEICAgICAgICAgICAgICAgICAgMAorCisvKiBIQUwgU3RhdGUgKi8KKyNkZWZpbmUgWk1fSEFMX1NUQVRFX0lOSVQgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBaTV9IQUxfU1RBVEVfUlVOTklORyAgICAgICAgICAgICAgICAxCisKKy8qIEFQIENhcGFiaWxpdHkgKi8KKyNkZWZpbmUgWk1fQWxsMTFOX0FQICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBaTV9YUl9BUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIFpNX1N1cGVyR19BUCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQKKworLyogTVBEVSBEZW5zaXR5ICovCisjZGVmaW5lIFpNX01QRFVfREVOU0lUWV9OT05FICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgWk1fTVBEVV9ERU5TSVRZXzFfOFVTICAgICAgICAgICAgICAgMQorI2RlZmluZSBaTV9NUERVX0RFTlNJVFlfMV80VVMgICAgICAgICAgICAgICAyCisjZGVmaW5lIFpNX01QRFVfREVOU0lUWV8xXzJVUyAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgWk1fTVBEVV9ERU5TSVRZXzFVUyAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBaTV9NUERVX0RFTlNJVFlfMlVTICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFpNX01QRFVfREVOU0lUWV80VVMgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgWk1fTVBEVV9ERU5TSVRZXzhVUyAgICAgICAgICAgICAgICAgNworCisvKiBTb2Z0d2FyZSBFbmNyeXB0aW9uICovCisjZGVmaW5lIFpNX1NXX1RLSVBfRU5DUllfRU4gICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBaTV9TV19US0lQX0RFQ1JZX0VOICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgWk1fU1dfV0VQX0VOQ1JZX0VOICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFpNX1NXX1dFUF9ERUNSWV9FTiAgICAgICAgICAgICAgICAgMHgwOAorCisvKiBEZWZhdWx0IFN1cHBvcnQgUmF0ZSAqLworI2RlZmluZSBaTV9ERUZBVUxUX1NVUFBPUlRfUkFURV9aRVJPICAgICAgIDB4MAorI2RlZmluZSBaTV9ERUZBVUxUX1NVUFBPUlRfUkFURV9ESVNDT05ORUNUIDB4MQorI2RlZmluZSBaTV9ERUZBVUxUX1NVUFBPUlRfUkFURV9JQlNTX0IgICAgIDB4MgorI2RlZmluZSBaTV9ERUZBVUxUX1NVUFBPUlRfUkFURV9JQlNTX0FHICAgIDB4MworCisvKiBzZWN1cml0eSByZWxhdGVkIGRlZmluaXRpb25zICovCitzdHJ1Y3QgenNUa2lwU2VlZAoreworICAgIHU4X3QgICB0a1szMl07ICAgICAvKiBrZXkgKi8KKyAgICB1OF90ICAgdGFbNl07CisgICAgdTE2X3QgIHR0YWtbNV07CisgICAgdTE2X3QgIHBwa1s2XTsKKyAgICB1MTZfdCAgaXYxNixpdjE2dG1wOworICAgIHUzMl90ICBpdjMyLGl2MzJ0bXA7Cit9OworCitzdHJ1Y3QgenNNaWNWYXIKK3sKKyAgICB1MzJfdCAgazAsIGsxOyAgICAgICAgLy8gS2V5CisgICAgdTMyX3QgIGxlZnQsIHJpZ2h0OyAgIC8vIEN1cnJlbnQgc3RhdGUKKyAgICB1MzJfdCAgbTsgICAgICAgICAgICAgLy8gTWVzc2FnZSBhY2N1bXVsYXRvciAoc2luZ2xlIHdvcmQpCisgICAgdTE2X3QgIG5CeXRlczsgICAgICAgIC8vICMgYnl0ZXMgaW4gTQorfTsKKworc3RydWN0IHpzRGVmcmFnRW50cnkKK3sKKyAgICB1OF90ICAgIGZyYWdDb3VudDsKKyAgICB1OF90ICAgIGFkZHJbNl07CisgICAgdTE2X3QgICBzZXFOdW07CisgICAgemJ1Zl90KiBmcmFnbWVudFs4XTsKKyAgICB1MzJfdCAgIHRpY2s7Cit9OworCitzdHJ1Y3QgenNEZWZyYWdMaXN0Cit7CisgICAgc3RydWN0IHpzRGVmcmFnRW50cnkgICBkZWZyYWdFbnRyeVtaTV9NQVhfREVGUkFHX0VOVFJJRVNdOworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgcmVwbGFjZU51bTsKK307CisKKyNkZWZpbmUgWk1fTUFYX09QUE9TSVRFX0NPVU5UICAgICAgMTYKKyNkZWZpbmUgWk1fTUFYX1RYX1NBTVBMRVMgICAgICAgICAgMTUKKyNkZWZpbmUgWk1fVFhfUkFURV9ET1dOX0NSSVRFUklBICAgODAKKyNkZWZpbmUgWk1fVFhfUkFURV9VUF9DUklURVJJQSAgICAyMDAKKworCisjZGVmaW5lIFpNX01BWF9QUk9CRV9ISURERU5fU1NJRF9TSVpFIDIKK3N0cnVjdCB6c1NzaWRMaXN0Cit7CisgICAgdThfdCAgICAgICAgICAgIHNzaWRbMzJdOworICAgIHU4X3QgICAgICAgICAgICBzc2lkTGVuOworfTsKKworc3RydWN0IHpzV3JhcHBlclNldHRpbmcKK3sKKyAgICB1OF90ICAgICAgICAgICAgYkRlc2lyZWRCc3NpZDsKKyAgICB1OF90ICAgICAgICAgICAgZGVzaXJlZEJzc2lkWzZdOworICAgIHUxNl90ICAgICAgICAgICBic3NpZFszXTsKKyAgICB1OF90ICAgICAgICAgICAgc3NpZFszMl07CisgICAgdThfdCAgICAgICAgICAgIHNzaWRMZW47CisgICAgdThfdCAgICAgICAgICAgIGF1dGhNb2RlOworICAgIHU4X3QgICAgICAgICAgICB3ZXBTdGF0dXM7CisgICAgdThfdCAgICAgICAgICAgIGVuY3J5TW9kZTsKKyAgICB1OF90ICAgICAgICAgICAgd2xhbk1vZGU7CisgICAgdTE2X3QgICAgICAgICAgIGZyZXF1ZW5jeTsKKyAgICB1MTZfdCAgICAgICAgICAgYmVhY29uSW50ZXJ2YWw7CisgICAgdThfdCAgICAgICAgICAgIGR0aW07CisgICAgdThfdCAgICAgICAgICAgIHByZWFtYmxlVHlwZTsKKyAgICB1MTZfdCAgICAgICAgICAgYXRpbVdpbmRvdzsKKworICAgIHN0cnVjdCB6c1NzaWRMaXN0IHByb2JpbmdTc2lkTGlzdFtaTV9NQVhfUFJPQkVfSElEREVOX1NTSURfU0laRV07CisKKyAgICB1OF90ICAgICAgICAgICAgZHJvcFVuZW5jcnlwdGVkUGt0czsKKyAgICB1OF90ICAgICAgICAgICAgaWJzc0pvaW5Pbmx5OworICAgIHUzMl90ICAgICAgICAgICBhZGhvY01vZGU7CisgICAgdThfdCAgICAgICAgICAgIGNvdW50cnlJc29OYW1lWzRdOworICAgIHUxNl90ICAgICAgICAgICBhdXRvU2V0RnJlcXVlbmN5OworCisgICAgLyogQVAgKi8KKyAgICB1OF90ICAgICAgICAgICAgYlJhdGVCYXNpYzsKKyAgICB1OF90ICAgICAgICAgICAgZ1JhdGVCYXNpYzsKKyAgICB1MzJfdCAgICAgICAgICAgblJhdGVCYXNpYzsKKyAgICB1OF90ICAgICAgICAgICAgYmdNb2RlOworCisgICAgLyogQ29tbW9uICovCisgICAgdThfdCAgICAgICAgICAgIHN0YVdtZUVuYWJsZWQ7CisgICAgdThfdCAgICAgICAgICAgIHN0YVdtZVFvc0luZm87CisgICAgdThfdCAgICAgICAgICAgIGFwV21lRW5hYmxlZDsKKworCisgICAgLyogcmF0ZSBpbmZvcm1hdGlvbjogYWRkZWQgaW4gdGhlIGZ1dHVyZSAqLworfTsKKworc3RydWN0IHpzV3JhcHBlckZlYXR1cmVDdHJsCit7CisgICAgdThfdCAgICAgICAgICAgYklic3NHTW9kZTsKK307CisKKyNkZWZpbmUgIFpNX01BWF9QU19TVEEgICAgICAgICAgICAxNgorI2RlZmluZSAgWk1fUFNfUVVFVUVfU0laRSAgICAgICAgIDMyCisKK3N0cnVjdCB6c1N0YVBTRW50aXR5Cit7CisgICAgdThfdCAgICAgICAgICAgYlVzZWQ7CisgICAgdThfdCAgICAgICAgICAgbWFjQWRkcls2XTsKKyAgICB1OF90ICAgICAgICAgICBiRGF0YVF1ZXVlZDsKK307CisKK3N0cnVjdCB6c1N0YVBTTGlzdAoreworICAgIHU4X3QgICAgICAgICAgIGNvdW50OworICAgIHN0cnVjdCB6c1N0YVBTRW50aXR5ICAgIGVudGl0eVtaTV9NQVhfUFNfU1RBXTsKK307CisKKyNkZWZpbmUgWk1fTUFYX1RJTUVSX0NPVU5UICAgMzIKKworLyogZG91YmxlIGxpbmtlZCBsaXN0ICovCitzdHJ1Y3QgenNUaW1lckVudHJ5Cit7CisgICAgdTE2X3QgICBldmVudDsKKyAgICB1MzJfdCAgIHRpbWVyOworICAgIHN0cnVjdCB6c1RpbWVyRW50cnkgKnByZTsKKyAgICBzdHJ1Y3QgenNUaW1lckVudHJ5ICpuZXh0OworfTsKKworc3RydWN0IHpzVGltZXJMaXN0Cit7CisgICAgdThfdCAgIGZyZWVDb3VudDsKKyAgICBzdHJ1Y3QgenNUaW1lckVudHJ5IGxpc3RbWk1fTUFYX1RJTUVSX0NPVU5UXTsKKyAgICBzdHJ1Y3QgenNUaW1lckVudHJ5ICpoZWFkOworICAgIHN0cnVjdCB6c1RpbWVyRW50cnkgKnRhaWw7Cit9OworCisvKiBNdWx0aWNhc3QgbGlzdCAqLworI2RlZmluZSBaTV9NQVhfTVVMVElDQVNUX0xJU1RfU0laRSAgICAgNjQKKworc3RydWN0IHpzTXVsdGljYXN0QWRkcgoreworICAgIHU4X3QgYWRkcls2XTsKK307CisKK3N0cnVjdCB6c011bHRpY2FzdExpc3QKK3sKKyAgICB1OF90ICAgc2l6ZTsKKyAgICBzdHJ1Y3QgenNNdWx0aWNhc3RBZGRyIG1hY0FkZHJbWk1fTUFYX01VTFRJQ0FTVF9MSVNUX1NJWkVdOworfTsKKworZW51bSBpZWVlODAyMTFfY3dtX21vZGUgeworICAgIENXTV9NT0RFMjAsCisgICAgQ1dNX01PREUyMDQwLAorICAgIENXTV9NT0RFNDAsCisgICAgQ1dNX01PREVNQVgKKworfTsKKworZW51bSBpZWVlODAyMTFfY3dtX2V4dHByb3RzcGFjaW5nIHsKKyAgICBDV01fRVhUUFJPVFNQQUNJTkcyMCwKKyAgICBDV01fRVhUUFJPVFNQQUNJTkcyNSwKKyAgICBDV01fRVhUUFJPVFNQQUNJTkdNQVgKK307CisKK2VudW0gaWVlZTgwMjExX2N3bV93aWR0aCB7CisgICAgQ1dNX1dJRFRIMjAsCisgICAgQ1dNX1dJRFRINDAKK307CisKK2VudW0gaWVlZTgwMjExX2N3bV9leHRwcm90bW9kZSB7CisgICAgQ1dNX0VYVFBST1ROT05FLCAgLyogbm8gcHJvdGVjdGlvbiAqLworICAgIENXTV9FWFRQUk9UQ1RTT05MWSwgICAvKiBDVFMgdG8gc2VsZiAqLworICAgIENXTV9FWFRQUk9UUlRTQ1RTLCAgICAvKiBSVFMtQ1RTICovCisgICAgQ1dNX0VYVFBST1RNQVgKK307CisKK3N0cnVjdCBpZWVlODAyMTFfY3dtIHsKKworICAgIC8qIENvbmZpZ3VyYXRpb24gKi8KKyAgICBlbnVtIGllZWU4MDIxMV9jd21fbW9kZSAgICAgICAgIGN3X21vZGU7ICAgICAgICAgICAgLyogQ1dNIG1vZGUgKi8KKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3X2V4dG9mZnNldDsgICAgICAgLyogQ1dNIEV4dGVuc2lvbiBDaGFubmVsIE9mZnNldCAqLworICAgIGVudW0gaWVlZTgwMjExX2N3bV9leHRwcm90bW9kZSAgY3dfZXh0cHJvdG1vZGU7ICAgICAvKiBDV00gRXh0ZW5zaW9uIENoYW5uZWwgUHJvdGVjdGlvbiBNb2RlICovCisgICAgZW51bSBpZWVlODAyMTFfY3dtX2V4dHByb3RzcGFjaW5nIGN3X2V4dHByb3RzcGFjaW5nOy8qIENXTSBFeHRlbnNpb24gQ2hhbm5lbCBQcm90ZWN0aW9uIFNwYWNpbmcgKi8KKyAgICB1MzJfdCAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3X2VuYWJsZTsgICAgICAgICAgLyogQ1dNIFN0YXRlIE1hY2hpbmUgRW5hYmxlZCAqLworICAgIHUzMl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dfZXh0YnVzeXRocmVzaG9sZDsvKiBDV00gRXh0ZW5zaW9uIENoYW5uZWwgQnVzeSBUaHJlc2hvbGQgKi8KKworICAgIC8qIFN0YXRlICovCisgICAgZW51bSBpZWVlODAyMTFfY3dtX3dpZHRoICAgICAgICBjd193aWR0aDsgICAgICAgICAgIC8qIENXTSBjaGFubmVsIHdpZHRoICovCit9OworCisKKy8qIEFQIDogU1RBIGRhdGFiYXNlIHN0cnVjdHVyZSAqLworc3RydWN0IHpzU3RhVGFibGUKK3sKKyAgICB1MzJfdCB0aW1lOyAgICAgLyogdGljayB0aW1lICovCisgICAgLy91MzJfdCBwaHlDdHJsOyAgIC8qIFR4IFBIWSBDVFJMICovCisgICAgdTE2X3QgYWRkclszXTsgIC8qIFNUQSBNQUMgYWRkcmVzcyAqLworICAgIHUxNl90IHN0YXRlOyAgICAvKiBhdXQvYXNvYyAqLworICAgIC8vdTE2X3QgcmV0cnk7ICAgIC8qIFJldHJ5IGNvdW50ICovCisgICAgc3RydWN0IHpzUmNDZWxsIHJjQ2VsbDsKKworICAgIHU4X3QgdmFsaWQ7ICAgICAvKiBWYWxpZCBmbGFnIDogMT0+dmFsaWQgKi8KKyAgICB1OF90IHBzTW9kZTsgICAgLyogU1RBIHBvd2VyIHNhdmluZyBtb2RlICovCisgICAgdThfdCBzdGFUeXBlOyAgIC8qIDA9PjExYiwgMT0+MTFnLCAyPT4xMW4gKi8KKyAgICB1OF90IHFvc1R5cGU7ICAgLyogMD0+TGVnYWN5LCAxPT5XTUUgKi8KKyAgICB1OF90IHFvc0luZm87ICAgLyogV01FIFFvUyBpbmZvICovCisgICAgdThfdCB2YXA7ICAgICAgIC8qIFZpcnR1YWwgQVAgSUQgKi8KKyAgICB1OF90IGVuY3J5TW9kZTsgLyogRW5jcnlwdGlvbiB0eXBlIGZvciB0aGlzIFNUQSAqLworICAgIHU4X3Qga2V5SWR4OworICAgIHN0cnVjdCB6c01pY1ZhciAgICAgdHhNaWNLZXk7CisgICAgc3RydWN0IHpzTWljVmFyICAgICByeE1pY0tleTsKKyAgICB1MTZfdCBpdjE2OworICAgIHUzMl90IGl2MzI7CisjaWZkZWYgWk1fRU5BQkxFX0NFTkMKKyAgICAvKiBDRU5DICovCisgICAgdThfdCBjZW5jS2V5SWR4OworICAgIHUzMl90IHR4aXZbNF07CisgICAgdTMyX3Qgcnhpdls0XTsKKyNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCit9OworCitzdHJ1Y3QgemRTdHJ1Y3RXZHMKK3sKKyAgICB1OF90ICAgIHdkc0JpdG1hcDsgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGJpdC1OIHRvIDEgdG8gZW5hYmxlIFdEUyAqLworICAgIHU4X3QgICAgZW5jcnlNb2RlW1pNX01BWF9XRFNfU1VQUE9SVF07ICAvKiBXRFMgZW5jcnlwdGlvbiBtb2RlICovCisgICAgdTE2X3QgICBtYWNBZGRyW1pNX01BWF9XRFNfU1VQUE9SVF1bM107IC8qIFdEUyBuZWlnaGJvciBNQUMgYWRkcmVzcyAqLworfTsKKworICAgIC8vIGh0Y2FwaW5mbyAxNmJpdHMKKyNkZWZpbmUgSFRDQVBfQWR2Q29kaW5nQ2FwICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBIVENBUF9TdXBDaGFubmVsV2lkdGhTZXQgICAgMHgwMDAyCisjZGVmaW5lIEhUQ0FQX0R5bmFtaWNTTVBTICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgSFRDQVBfU01FbmFibGVkICAgICAgICAgICAgIDB4MDAwQworI2RlZmluZSBIVENBUF9HcmVlbkZpZWxkICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEhUQ0FQX1Nob3J0R0lmb3IyME1IeiAgICAgICAweDAwMjAKKyNkZWZpbmUgSFRDQVBfU2hvcnRHSWZvcjQwTUh6ICAgICAgIDB4MDA0MAorI2RlZmluZSBIVENBUF9UeFNUQkMgICAgICAgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIEhUQ0FQX1J4T25lU3RyZWFtICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgSFRDQVBfUnhUd29TdHJlYW0gICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBIVENBUF9SeFRocmVlU3RyZWFtICAgICAgICAgMHgwMzAwCisjZGVmaW5lIEhUQ0FQX0RlbGF5ZWRCbG9ja0FDSyAgICAgICAweDA0MDAKKyNkZWZpbmUgSFRDQVBfTWF4QU1TRFVMZW5ndGggICAgICAgIDB4MDgwMAorI2RlZmluZSBIVENBUF9EU1NTYW5kQ0NLaW40ME1IeiAgICAgMHgxMDAwCisjZGVmaW5lIEhUQ0FQX1BTTVBTdXAgICAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgSFRDQVBfU1RCQ0NvbnRyb2xGcmFtZVN1cCAgIDB4NDAwMAorI2RlZmluZSBIVENBUF9MU0lHVFhPUFByb3RlY3Rpb25TVVAgMHg4MDAwCisgICAgLy8gQW1wZHUgSFQgUGFyYW1ldGVyIEluZm8gOGJpdHMKKyNkZWZpbmUgSFRDQVBfTWF4UnhBTVBEVTAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgSFRDQVBfTWF4UnhBTVBEVTEgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgSFRDQVBfTWF4UnhBTVBEVTIgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgSFRDQVBfTWF4UnhBTVBEVTMgICAgICAgICAgIDB4MDMKKyAgICAvLyBQQ08gOGJpdHMKKyNkZWZpbmUgSFRDQVBfUENPICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgSFRDQVBfVHJhbnNtaXNzaW9uVGltZTEgICAgIDB4MDIKKyNkZWZpbmUgSFRDQVBfVHJhbnNtaXNzaW9uVGltZTIgICAgIDB4MDQKKyNkZWZpbmUgSFRDQVBfVHJhbnNtaXNzaW9uVGltZTMgICAgIDB4MDYKKyAgICAvLyBNQ1MgRmVlZEJhY2sgOGJpdHMKKyNkZWZpbmUgSFRDQVBfUGx1c0hUQ1N1cHBvcnQgICAgICAgIDB4MDQKKyNkZWZpbmUgSFRDQVBfUkRSZXNwb25kZXIgICAgICAgICAgIDB4MDgKKyAgICAvLyBUWCBCZWFtZm9ybWluZyAwIDhiaXRzCisjZGVmaW5lIEhUQ0FQX1R4QkZDYXBhYmxlICAgICAgICAgICAweDAxCisjZGVmaW5lIEhUQ0FQX1J4U3RhZ2dlcmVkU291bmRDYXAgICAweDAyCisjZGVmaW5lIEhUQ0FQX1R4U3RhZ2dlcmVkU291bmRDYXAgICAweDA0CisjZGVmaW5lIEhUQ0FQX1J4WkxGQ2FwYWJsZSAgICAgICAgICAweDA4CisjZGVmaW5lIEhUQ0FQX1R4WkxGQ2FwYWJsZSAgICAgICAgICAweDEwCisjZGVmaW5lIEhUQ0FQX0ltcGxpY2l0VHhCRkNhcGFibGUgICAweDIwCisgICAgLy8gVHggQmVhbWZvcm1pbmcgMSA4Yml0cworI2RlZmluZSBIVENBUF9FeHBsaWNpdENTSVR4QkZDYXAgICAgMHgwMQorI2RlZmluZSBIVENBUF9FeHBVbmNvbXBTdGVlck1hdHJDYXAgMHgwMgorICAgIC8vIEFudGVubmEgU2VsZWN0aW9uIENhcGFiaWxpdGllcyA4Yml0cworI2RlZmluZSBIVENBUF9BbnRlbm5hU2VsZWN0aW9uQ2FwICAgICAgIDB4MDEKKyNkZWZpbmUgSFRDQVBfRXhwbGljaXRDU0lUeEFTQ2FwICAgICAgICAweDAyCisjZGVmaW5lIEhUQ0FQX0FudGVubmFJbmRGZWVUeEFTQ2FwICAgICAgMHgwNAorI2RlZmluZSBIVENBUF9FeHBsaWNpdENTSUZlZWRiYWNrQ2FwICAgIDB4MDgKKyNkZWZpbmUgSFRDQVBfQW50ZW5uYUluZEZlZWRiYWNrQ2FwICAgICAweDEwCisjZGVmaW5lIEhUQ0FQX1J4QVNDYXAgICAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBIVENBUF9UeFNvdW5kUFBEVXNDYXAgICAgICAgICAgIDB4NDAKKworCisKK3N0cnVjdCB6c0hUQ2FwYWJpbGl0eQoreworICAgIHU4X3QgRWxlbWVudElEOworICAgIHU4X3QgTGVuZ3RoOworICAgIC8vIEhUIENhcGFiaWxpdHkgSW5mbworICAgIHUxNl90IEh0Q2FwSW5mbzsKKyAgICB1OF90IEFNUERVUGFyYW07CisgICAgdThfdCBNQ1NTZXRbMTZdOyAgICAvLzE2IGJ5dGVzCisgICAgLy8gRXh0ZW5kZWQgSFQgQ2FwYWJpbGl0eSBJbmZvCisgICAgdThfdCBQQ087CisgICAgdThfdCBNQ1NGZWVkQmFjazsKKworICAgIHU4X3QgVHhCRkNhcFs0XTsKKyAgICB1OF90IEFzZWxDYXA7Cit9OworCit1bmlvbiB6dUhUQ2FwYWJpbGl0eQoreworICAgIHN0cnVjdCB6c0hUQ2FwYWJpbGl0eSBEYXRhOworICAgIHU4X3QgQnl0ZVsyOF07Cit9OworCisgICAgLy9jaGFubmVsaW5mbyA4Yml0cworI2RlZmluZSBFeHRIdENhcF9FeHRDaGFubmVsT2Zmc2V0QWJvdmUgIDB4MDEKKyNkZWZpbmUgRXh0SHRDYXBfRXh0Q2hhbm5lbE9mZnNldEJlbG93ICAweDAzCisjZGVmaW5lIEV4dEh0Q2FwX1JlY29tVHhXaWR0aFNldCAgICAgICAgMHgwNAorI2RlZmluZSBFeHRIdENhcF9SSUZTTW9kZSAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgRXh0SHRDYXBfQ29udHJvbEFjY2Vzc09ubHkgICAgICAweDEwCisgICAgLy9vcGVyYXRpbmdpbmZvIDE2Yml0cworI2RlZmluZSBFeHRIdENhcF9Ob25HRkRldmljZVByZXNlbnQgICAgIDB4MDAwNAorICAgIC8vYmVhY29uaW5mbyAxNmJpdHMKKyNkZWZpbmUgRXh0SHRDYXBfRHVhbEJlYWNvbiAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgRXh0SHRDYXBfRHVhbFNUQkNQcm90ZWN0aW9uICAgICAweDAwODAKKyNkZWZpbmUgRXh0SHRDYXBfU2Vjb25kYXJ5QmVhY29uICAgICAgICAweDAxMDAKKyNkZWZpbmUgRXh0SHRDYXBfTFNJR1RYT1BQcm90ZWN0RnVsbFN1cCAweDAyMDAKKyNkZWZpbmUgRXh0SHRDYXBfUENPQWN0aXZlICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgRXh0SHRDYXBfUENPUGhhc2UgICAgICAgICAgICAgICAweDA4MDAKKworCitzdHJ1Y3QgenNFeHRIVENhcGFiaWxpdHkKK3sKKyAgICB1OF90ICAgIEVsZW1lbnRJRDsKKyAgICB1OF90ICAgIExlbmd0aDsKKyAgICB1OF90ICAgIENvbnRyb2xDaGFubmVsOworICAgIHU4X3QgICAgQ2hhbm5lbEluZm87CisgICAgdTE2X3QgICBPcGVyYXRpbmdJbmZvOworICAgIHUxNl90ICAgQmVhY29uSW5mbzsKKyAgICAvLyBTdXBwb3J0ZWQgTUNTIFNldAorICAgIHU4X3QgICAgTUNTU2V0WzE2XTsKK307CisKK3VuaW9uIHp1RXh0SFRDYXBhYmlsaXR5Cit7CisgICAgc3RydWN0IHpzRXh0SFRDYXBhYmlsaXR5IERhdGE7CisgICAgdThfdCBCeXRlWzI0XTsKK307CisKK3N0cnVjdCBJbmZvcm1hdGlvbkVsZW1lbnRTdGEgeworICAgIHN0cnVjdCB6c0hUQ2FwYWJpbGl0eSAgICAgICBIdENhcDsKKyAgICBzdHJ1Y3QgenNFeHRIVENhcGFiaWxpdHkgICAgSHRJbmZvOworfTsKKworc3RydWN0IEluZm9ybWF0aW9uRWxlbWVudEFwIHsKKyAgICBzdHJ1Y3QgenNIVENhcGFiaWxpdHkgICAgICAgSHRDYXA7Cit9OworCisjZGVmaW5lIFpNX01BWF9GUkVRX1JFUV9RVUVVRSAgMzIKK3R5cGVkZWYgdm9pZCAoKnpmcEZyZXFDaGFuZ2VDb21wbGV0ZUNiKSh6ZGV2X3QqIGRldik7CisKK3N0cnVjdCB6c1dsYW5EZXZGcmVxQ29udHJvbAoreworICAgIHUxNl90ICAgICAgICAgICAgICAgICAgICAgZnJlcVJlcVF1ZXVlW1pNX01BWF9GUkVRX1JFUV9RVUVVRV07CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgIGZyZXFSZXFCdzQwW1pNX01BWF9GUkVRX1JFUV9RVUVVRV07CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgIGZyZXFSZXFFeHRPZmZzZXRbWk1fTUFYX0ZSRVFfUkVRX1FVRVVFXTsKKyAgICB6ZnBGcmVxQ2hhbmdlQ29tcGxldGVDYiAgIGZyZXFDaGFuZ2VDb21wQ2JbWk1fTUFYX0ZSRVFfUkVRX1FVRVVFXTsKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICAgIGZyZXFSZXFRdWV1ZUhlYWQ7CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgICBmcmVxUmVxUXVldWVUYWlsOworfTsKKworc3RydWN0IHpzV2xhbkRldkFwCit7CisgICAgdTE2X3QgICBwcm90ZWN0ZWRPYnNzOyAgICAvKiBwcm90ZWN0ZWQgb3ZlcmxhcCBCU1MgKi8KKyAgICB1MTZfdCAgIHN0YUFnaW5nVGltZVNlYzsgIC8qIGluIHNlY29uZCwgU1RBIHdpbGwgYmUgZGVhdGhlZCBpZiBpdCBkb2VzIG5vdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWN0aXZlIGZvciB0aGlzIGxvbmcgdGltZSAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTE2X3QgICBzdGFQcm9iaW5nVGltZVNlYzsvKiBpbiBzZWNvbmQsIFNUQSB3aWxsIGJlIHByb2JlZCBpZiBpdCBkb2VzIG5vdCAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFjdGl2ZSBmb3IgdGhpcyBsb25nIHRpbWUgICAgICAgICAgICAgICAgICAgICAqLworICAgIHU4X3QgICAgYXV0aFNoYXJpbmc7ICAgICAgLyogYXV0aGVudGljYXRpb24gb24gZ29pbmcqLworICAgIHU4X3QgICAgYlN0YUFzc29jaWF0ZWQ7ICAgLyogMTFiIFNUQSBhc3NvY2lhdGVkICovCisgICAgdThfdCAgICBnU3RhQXNzb2NpYXRlZDsgICAvKiAxMWcgU1RBIGFzc29jaWF0ZWQgKi8KKyAgICB1OF90ICAgIG5TdGFBc3NvY2lhdGVkOyAgIC8qIDExbiBTVEEgYXNzb2NpYXRlZCAqLworICAgIHUxNl90ICAgcHJvdGVjdGlvbk1vZGU7ICAgLyogQVAgcHJvdGVjdGlvbiBtb2RlIGZsYWcgKi8KKyAgICB1MTZfdCAgIHN0YVBvd2VyU2F2aW5nOyAgIC8qIFNldCBhc3NvY2lhdGVkIHBvd2VyIHNhdmluZyBTVEEgY291bnQgKi8KKworCisKKyAgICB6YnVmX3QqICB1bmlBcnJheVtaTV9VTklfQVJSQVlfU0laRV07IC8qIGFycmF5IHRvIHN0b3JlIHVuaWNhc3QgZnJhbWVzICovCisgICAgdTE2X3QgICB1bmlIZWFkOworICAgIHUxNl90ICAgdW5pVGFpbDsKKworICAgIC8qIEhUIENhcGFiaWxpdHkgSW5mbyAqLworICAgIHVuaW9uIHp1SFRDYXBhYmlsaXR5IEhUQ2FwOyAvL0NXWWFuZygrKQorCisgICAgLyogRXh0ZW5kZWQgSFQgQ2FwYWJpbGl0eSBJbmZvICovCisgICAgdW5pb24genVFeHRIVENhcGFiaWxpdHkgRXh0SFRDYXA7IC8vQ1dZYW5nKCspCisKKyAgICAvKiBTVEEgdGFibGUgKi8KKyAgICBzdHJ1Y3QgenNTdGFUYWJsZSBzdGFUYWJsZVtaTV9NQVhfU1RBX1NVUFBPUlRdOworCisgICAgLyogV0RTICovCisgICAgc3RydWN0IHpkU3RydWN0V2RzIHdkczsKKyAgICAvKiBXUEEgKi8KKyAgICB1OF90IHdwYUllW1pNX01BWF9BUF9TVVBQT1JUXVtaTV9NQVhfV1BBSUVfU0laRV07CisgICAgdThfdCB3cGFMZW5bWk1fTUFYX0FQX1NVUFBPUlRdOworICAgIHU4X3Qgc3Rhd3BhSWVbWk1fTUFYX0FQX1NVUFBPUlRdW1pNX01BWF9XUEFJRV9TSVpFXTsKKyAgICB1OF90IHN0YXdwYUxlbltaTV9NQVhfQVBfU1VQUE9SVF07CisgICAgdThfdCB3cGFTdXBwb3J0W1pNX01BWF9BUF9TVVBQT1JUXTsKKworICAgIC8vc3RydWN0IHpzVGtpcFNlZWQgICBiY1NlZWQ7CisgICAgdThfdCBiY0tleUluZGV4W1pNX01BWF9BUF9TVVBQT1JUXTsKKyAgICB1OF90IGJjSGFsS2V5SWR4W1pNX01BWF9BUF9TVVBQT1JUXTsKKyAgICBzdHJ1Y3QgenNNaWNWYXIgICAgIGJjTWljS2V5W1pNX01BWF9BUF9TVVBQT1JUXTsKKyAgICB1MTZfdCBpdjE2W1pNX01BWF9BUF9TVVBQT1JUXTsKKyAgICB1MzJfdCBpdjMyW1pNX01BWF9BUF9TVVBQT1JUXTsKKworI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisgICAgLyogQ0VOQyAqLworICAgIHUzMl90IHR4aXZbWk1fTUFYX0FQX1NVUFBPUlRdWzRdOworI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKKworICAgIC8qIFZpcnR1YWwgQVAgKi8KKyAgICB1OF90ICAgIGJlYWNvbkNvdW50ZXI7CisgICAgdThfdCAgICB2YXBOdW1iZXI7CisgICAgdThfdCAgICBhcEJpdG1hcDsgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IGJpdC1OIHRvIDEgdG8gZW5hYmxlIFZBUCAqLworICAgIHU4X3QgICAgaGlkZVNzaWRbWk1fTUFYX0FQX1NVUFBPUlRdOworICAgIHU4X3QgICAgYXV0aEFsZ29bWk1fTUFYX0FQX1NVUFBPUlRdOworICAgIHU4X3QgICAgc3NpZFtaTV9NQVhfQVBfU1VQUE9SVF1bMzJdOyAgICAgIC8qIFNTSUQgKi8KKyAgICB1OF90ICAgIHNzaWRMZW5bWk1fTUFYX0FQX1NVUFBPUlRdOyAgICAgICAvKiBTU0lEIGxlbmd0aCAqLworICAgIHU4X3QgICAgZW5jcnlNb2RlW1pNX01BWF9BUF9TVVBQT1JUXTsKKyAgICB1OF90ICAgIHdlcFN0YXR1c1taTV9NQVhfQVBfU1VQUE9SVF07CisgICAgdTE2X3QgICBjYXBhYltaTV9NQVhfQVBfU1VQUE9SVF07ICAgICAgICAgLyogQ2FwYWJpbGl0eSAqLworICAgIHU4X3QgICAgdGltQmNtY0JpdFtaTV9NQVhfQVBfU1VQUE9SVF07ICAgIC8qIEJNQ00gYml0IG9mIFRJTSAqLworICAgIHU4X3QgICAgd2xhblR5cGVbWk1fTUFYX0FQX1NVUFBPUlRdOworCisgICAgLyogQXJyYXkgdG8gc3RvcmUgQkMgb3IgTUMgZnJhbWVzICovCisgICAgemJ1Zl90KiAgYmNtY0FycmF5W1pNX01BWF9BUF9TVVBQT1JUXVtaTV9CQ01DX0FSUkFZX1NJWkVdOworICAgIHUxNl90ICAgYmNtY0hlYWRbWk1fTUFYX0FQX1NVUFBPUlRdOworICAgIHUxNl90ICAgYmNtY1RhaWxbWk1fTUFYX0FQX1NVUFBPUlRdOworCisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgcW9zTW9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDE9PldNRSAqLworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIHVhcHNkRW5hYmxlZDsKKyAgICBzdHJ1Y3QgenNRdWV1ZSogICAgICAgICB1YXBzZFE7CisKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBjaGFsbGVuZ2VUZXh0WzEyOF07CisKKyAgICBzdHJ1Y3QgSW5mb3JtYXRpb25FbGVtZW50QXAgaWVbWk1fTUFYX1NUQV9TVVBQT1JUXTsKKworCit9OworCisjZGVmaW5lIFpNX01BWF9CTE9DS0lOR19BUF9MSVNUX1NJWkUgICAgNCAvKiAyXk4gKi8KK3N0cnVjdCB6c0Jsb2NraW5nQXAKK3sKKyAgICB1OF90IGFkZHJbNl07CisgICAgdThfdCB3ZWlnaHQ7Cit9OworCisjZGVmaW5lIFpNX1NDQU5fTUdSX1NDQU5fTk9ORSAgICAgICAgICAgMAorI2RlZmluZSBaTV9TQ0FOX01HUl9TQ0FOX0lOVEVSTkFMICAgICAgIDEKKyNkZWZpbmUgWk1fU0NBTl9NR1JfU0NBTl9FWFRFUk5BTCAgICAgICAyCisKK3N0cnVjdCB6c1dsYW5EZXZTdGFTY2FuTWdyCit7CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgc2NhblJlcXNbMl07CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgY3VyclNjYW5UeXBlOworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIHNjYW5TdGFydERlbGF5OworfTsKKworI2RlZmluZSBaTV9QU19NU0dfU1RBVEVfQUNUSVZFICAgICAgICAgIDAKKyNkZWZpbmUgWk1fUFNfTVNHX1NUQVRFX1NMRUVQICAgICAgICAgICAxCisjZGVmaW5lIFpNX1BTX01TR19TVEFURV9UMSAgICAgICAgICAgICAgMgorI2RlZmluZSBaTV9QU19NU0dfU1RBVEVfVDIgICAgICAgICAgICAgIDMKKyNkZWZpbmUgWk1fUFNfTVNHX1NUQVRFX1MxICAgICAgICAgICAgICA0CisKKyNkZWZpbmUgWk1fUFNfTUFYX1NMRUVQX1BFUklPRFMgICAgICAgICAzICAgICAgIC8vIFRoZSBudW1iZXIgb2YgYmVhY29uIHBlcmlvZHMKKworc3RydWN0IHpzV2xhbkRldlN0YVBTTWdyCit7CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgc3RhdGU7CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgaXNTbGVlcEFsbG93ZWQ7CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgbWF4U2xlZXBQZXJpb2RzOworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIHRpY2tzOworICAgIHUzMl90ICAgICAgICAgICAgICAgICAgIGxhc3RUeFVuaWNhc3RGcm07CisgICAgdTMyX3QgICAgICAgICAgICAgICAgICAgbGFzdFR4TXVsdGljYXN0RnJtOworICAgIHUzMl90ICAgICAgICAgICAgICAgICAgIGxhc3RUeEJyb2FkY2FzdEZybTsKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICB0ZW1wV2FrZVVwOyAvKmVuYWJsZSB3aGVuIHdha2UgdXAgYnV0IHN0aWxsIGluIHBzIG1vZGUgKi8KKyAgICB1MTZfdCAgICAgICAgICAgICAgICAgICBzbGVlcEFsbG93ZWR0aWNrOworfTsKKworc3RydWN0IHpzV2xhbkRldlN0YQoreworICAgIHUzMl90ICAgICAgICAgICAgICAgICAgIGJlYWNvblR4Q250OyAgLyogVHJhbnNtaXR0ZWQgYmVhY29uIGNvdW50ZXIgKGluIElCU1MpICovCisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgdHhCZWFjb25JbmQ7ICAvKiBJbiBJQlNTIG1vZGUsIHRydWUgbWVhbnMgdGhhdCB3ZSBqdXN0IHRyYW5zbWl0IGEgYmVhY29uIGR1cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBiZWFjb24gcGVyaW9kLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgdTE2X3QgICAgICAgICAgICAgICAgICAgYmVhY29uQ250OyAgICAvKiByZWNlaXZlIGJlYWNvbiBjb3VudCwgd2lsbCBiZSBwZXJvZGljYWxseSByZXNldCAqLworICAgIHUxNl90ICAgICAgICAgICAgICAgICAgIGJzc2lkWzNdOyAgICAgLyogQlNTSUQgb2YgY29ubmVjdGVkIEFQICovCisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgc3NpZFszMl07ICAgICAvKiBTU0lEICovCisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgc3NpZExlbjsgICAgICAvKiBTU0lEIGxlbmd0aCAqLworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIG1UeFJhdGU7ICAgICAgLyogVHggcmF0ZSBmb3IgbXVsdGljYXN0ICovCisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgdVR4UmF0ZTsgICAgICAvKiBUeCByYXRlIGZvciB1bmljYXN0ICovCisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgbW1UeFJhdGU7ICAgICAvKiBUeCByYXRlIGZvciBtYW5hZ2VtZW50IGZyYW1lICovCisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgYkNoYW5uZWxTY2FuOworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIGJTY2hlZHVsZVNjYW47CisKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbFNjYW5SZXE7CisgICAgdTE2X3QgICAgICAgICAgICAgICAgICAgYWN0aXZlc2NhblRpY2tQZXJDaGFubmVsOworICAgIHUxNl90ICAgICAgICAgICAgICAgICAgIHBhc3NpdmVTY2FuVGlja1BlckNoYW5uZWw7CisgICAgdTE2X3QgICAgICAgICAgICAgICAgICAgc2NhbkZyZXF1ZW5jeTsKKyAgICB1MzJfdCAgICAgICAgICAgICAgICAgICBjb25uUG93ZXJJbkhhbGZEYm07CisKKyAgICB1MTZfdCAgICAgICAgICAgICAgICAgICBjdXJyZW50RnJlcXVlbmN5OworICAgIHUxNl90ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCdzQwOworICAgIHUxNl90ICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFeHRPZmZzZXQ7CisKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBiUGFzc2l2ZVNjYW47CisKKyAgICBzdHJ1Y3QgenNCbG9ja2luZ0FwICAgICBibG9ja2luZ0FwTGlzdFtaTV9NQVhfQkxPQ0tJTkdfQVBfTElTVF9TSVpFXTsKKworICAgIC8vc3RydWN0IHpzQnNzSW5mbyAgICAgICAgYnNzSW5mb1Bvb2xbWk1fTUFYX0JTU107CisgICAgc3RydWN0IHpzQnNzSW5mbyogICAgICAgYnNzSW5mb0FycmF5W1pNX01BWF9CU1NdOworICAgIHN0cnVjdCB6c0Jzc0xpc3QgICAgICAgIGJzc0xpc3Q7CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgYnNzSW5mb0FycmF5SGVhZDsKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBic3NJbmZvQXJyYXlUYWlsOworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIGJzc0luZm9GcmVlQ291bnQ7CisKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBhdXRoTW9kZTsKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBjdXJyZW50QXV0aE1vZGU7CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgd2VwU3RhdHVzOworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIGVuY3J5TW9kZTsKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBrZXlJZDsKKyNpZmRlZiBaTV9FTkFCTEVfSUJTU19XUEEyUFNLCisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgaWJzc1dwYTJQc2s7CisjZW5kaWYKKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIGNlbmNLZXlJZDsgLy9DRU5DCisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIGRyb3BVbmVuY3J5cHRlZFBrdHM7CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgaWJzc0pvaW5Pbmx5OworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXJTdGF0ZTsKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBvbGRBZGFwdGVyU3RhdGU7CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgY29ubmVjdFN0YXRlOworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RSZXRyeTsKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICB3cGFTdGF0ZTsKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICB3cGFJZVtaTV9NQVhfSUVfU0laRSArIDJdOworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIHJzbkllW1pNX01BWF9JRV9TSVpFICsgMl07CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgY2hhbGxlbmdlVGV4dFsyNTUrMl07CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eVsyXTsKKyAgICAvL3U4X3QgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RpbmdIaWRkZW5BUDsKKyAgICAvL3U4X3QgICAgICAgICAgICAgICAgICAgIHNjYW5XaXRoU1NJRDsKKyAgICB1MTZfdCAgICAgICAgICAgICAgICAgICBhaWQ7CisgICAgdTMyX3QgICAgICAgICAgICAgICAgICAgbWd0RnJhbWVDb3VudDsKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBiUHJvdGVjdGlvbk1vZGU7CisJdTMyX3QJCQkJCU5vbk5BUGNvdW50OworCXU4X3QJCQkJCVJUU0luQUdHTW9kZTsKKyAgICB1MzJfdCAgICAgICAgICAgICAgICAgICBjb25uZWN0VGltZXI7CisgICAgdTE2X3QgICAgICAgICAgICAgICAgICAgYXRpbVdpbmRvdzsKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBkZXNpcmVkQnNzaWRbNl07CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgYkRlc2lyZWRCc3NpZDsKKyAgICBzdHJ1Y3QgenNUa2lwU2VlZCAgICAgICB0eFNlZWQ7CisgICAgc3RydWN0IHpzVGtpcFNlZWQgICAgICAgcnhTZWVkWzRdOworICAgIHN0cnVjdCB6c01pY1ZhciAgICAgICAgIHR4TWljS2V5OworICAgIHN0cnVjdCB6c01pY1ZhciAgICAgICAgIHJ4TWljS2V5WzRdOworICAgIHUxNl90ICAgICAgICAgICAgICAgICAgIGl2MTY7CisgICAgdTMyX3QgICAgICAgICAgICAgICAgICAgaXYzMjsKKyAgICBzdHJ1Y3QgenNPcHBvc2l0ZUluZm8gICBvcHBvc2l0ZUluZm9bWk1fTUFYX09QUE9TSVRFX0NPVU5UXTsKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBvcHBvc2l0ZUNvdW50OworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIGJzc05vdEZvdW5kQ291bnQ7ICAgICAvKiBzaXRlc3VydmV5IGZvciBzZWFyY2ggZGVzaXJlZCBJU0JCIHRocmVzaG9sZCAqLworICAgIHUxNl90ICAgICAgICAgICAgICAgICAgIHJ4QmVhY29uQ291bnQ7CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgYmVhY29uTWlzc1N0YXRlOworICAgIHUzMl90ICAgICAgICAgICAgICAgICAgIHJ4QmVhY29uVG90YWw7CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgYklzU2hhcmVkS2V5OworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RUaW1lb3V0Q291bnQ7CisKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICByZWN2QXRpbTsKKworICAgIC8qIFNjYW5NZ3IgQ29udHJvbCBibG9jayAqLworICAgIHN0cnVjdCB6c1dsYW5EZXZTdGFTY2FuTWdyIHNjYW5NZ3I7CisgICAgc3RydWN0IHpzV2xhbkRldlN0YVBTTWdyICAgcHNNZ3I7CisKKyAgICAvLyBUaGUgY2FsbGJhY2sgd291bGQgYmUgY2FsbGVkIGlmIHJlY2VpdmluZyBhbiB1bmVuY3J5cHRlZCBwYWNrZXRzIGJ1dAorICAgIC8vIHRoZSBzdGF0aW9uIGlzIGluIGVuY3J5cHRlZCBtb2RlLiBUaGUgd3JhcHBlciBjb3VsZCBkZWNpZGUgd2hldGhlcgorICAgIC8vIHRvIGRyb3AgdGhlIHBhY2tldCBieSBpdHMgT1Mgc2V0dGluZy4KKyAgICB6ZnBTdGFSeFNlY3VyaXR5Q2hlY2tDYiBwU3RhUnhTZWN1cml0eUNoZWNrQ2I7CisKKyAgICAvKiBXTUUgKi8KKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBhcFdtZUNhcGFiaWxpdHk7IC8vYml0LTAgPT4gYSBXTUUgQVAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYml0LTcgPT4gYSBVQVBTRCBBUAorICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIHdtZVBhcmFtZXRlclNldENvdW50OworCisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgd21lRW5hYmxlZDsKKyAgICAjZGVmaW5lIFpNX1NUQV9XTUVfRU5BQkxFX0JJVCAgICAgICAweDEKKyAgICAjZGVmaW5lIFpNX1NUQV9VQVBTRF9FTkFCTEVfQklUICAgICAweDIKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICB3bWVRb3NJbmZvOworCisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgd21lQ29ubmVjdGVkOworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIHFvc0luZm87CisgICAgc3RydWN0IHpzUXVldWUqICAgICAgICAgdWFwc2RROworCisgICAgLyogY291bnRlcm1lYXN1cmVzICovCisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgY21NaWNGYWlsdXJlQ291bnQ7CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgY21EaXNhbGxvd1NzaWRMZW5ndGg7CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgY21EaXNhbGxvd1NzaWRbMzJdOworCisgICAgLyogcG93ZXItc2F2aW5nIG1vZGUgKi8KKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBwb3dlclNhdmVNb2RlOworICAgIHpidWZfdCogICAgICAgICAgICAgICAgIHN0YVBTRGF0YVF1ZXVlW1pNX1BTX1FVRVVFX1NJWkVdOworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIHN0YVBTRGF0YUNvdW50OworCisgICAgLyogSUJTUyBwb3dlci1zYXZpbmcgbW9kZSAqLworICAgIC8qIHJlY29yZCB0aGUgU1RBIHdoaWNoIGhhcyBlbnRlcmVkIHRoZSBQUyBtb2RlICovCisgICAgc3RydWN0IHpzU3RhUFNMaXN0ICAgICAgc3RhUFNMaXN0OworICAgIC8qIHF1ZXVlIHRoZSBkYXRhIG9mIHRoZSBQUyBTVEFzICovCisgICAgemJ1Zl90KiAgICAgICAgICAgICAgICAgIGlic3NQU0RhdGFRdWV1ZVtaTV9QU19RVUVVRV9TSVpFXTsKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBpYnNzUFNEYXRhQ291bnQ7CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgaWJzc1ByZXZQU0RhdGFDb3VudDsKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBiSWJzc1BTRW5hYmxlOworICAgIC8qIEJJVF8xNTogT04vT0ZGLCBCSVRfMH4xNDogQXRpbSBUaW1lciAqLworICAgIHUxNl90ICAgICAgICAgICAgICAgICAgIGlic3NBdGltVGltZXI7CisKKyAgICAvKiBXUEEyICovCisgICAgc3RydWN0IHpzUG1raWRJbmZvICAgICAgcG1raWRJbmZvOworCisgICAgLyogTXVsdGljYXN0IGxpc3QgcmVsYXRlZCBvYmplY3RzICovCisgICAgc3RydWN0IHpzTXVsdGljYXN0TGlzdCAgbXVsdGljYXN0TGlzdDsKKworICAgIC8qIFhQIHBhY2tldCBmaWx0ZXIgZmVhdHVyZSA6ICovCisgICAgLyogMT0+ZW5hYmxlOiBBbGwgbXVsdGljYXN0IGFkZHJlc3MgcGFja2V0cywgbm90IGp1c3QgdGhlIG9uZXMgZW51bWVyYXRlZCBpbiB0aGUgbXVsdGljYXN0IGFkZHJlc3MgbGlzdC4gKi8KKyAgICAvKiAwPT5kaXNhYmxlICovCisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgYkFsbE11bHRpY2FzdDsKKworICAgIC8qIHJlYXNzb2NpYXRpb24gZmxhZyAqLworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RCeVJlYXNzbzsKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBmYWlsQ250T2ZSZWFzc287CisKKwkvKiBmb3IgSFQgY29uZmlndXJlIGNvbnRyb2wgc2V0dGluZyAqLworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIHByZWFtYmxlVHlwZUhUOyAgLyogSFQ6IDAgTWl4ZWQgbW9kZSAgICAxIEdyZWVuIGZpZWxkICovCisJdThfdCAgICAgICAgICAgICAgICAgICAgaHRDdHJsQmFuZHdpZHRoOworCXU4X3QgICAgICAgICAgICAgICAgICAgIGh0Q3RybFNUQkM7CisJdThfdCAgICAgICAgICAgICAgICAgICAgaHRDdHJsU0c7CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRBOworCisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbl8xMWI7CisKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBFbmFibGVIVDsKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBTRzQwOworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIEhUMjA0MDsKKyAgICAvKiBmb3IgV1BBIHNldHRpbmcgKi8KKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICB3cGFTdXBwb3J0OworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIHdwYUxlbjsKKworICAgIC8qIElCU1MgcmVsYXRlZCBvYmplY3RzICovCisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgaWJzc0RlbGF5ZWRJbmQ7CisgICAgc3RydWN0IHpzUGFydG5lck5vdGlmeUV2ZW50IGlic3NEZWxheWVkSW5kRXZlbnQ7CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgaWJzc1BhcnRuZXJTdGF0dXM7CisKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBiQXV0b1JlY29ubmVjdDsKKworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIGZsYWdGcmVxQ2hhbmdpbmc7CisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgZmxhZ0tleUNoYW5naW5nOworICAgIHN0cnVjdCB6c0Jzc0luZm8gICAgICAgIGlic3NCc3NEZXNjOworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIGlic3NCc3NJc0NyZWF0b3I7CisgICAgdTE2X3QgICAgICAgICAgICAgICAgICAgaWJzc1JlY2VpdmVCZWFjb25Db3VudDsKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBpYnNzU2l0ZVN1cnZleVN0YXR1czsKKworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIGRpc2FibGVQcm9iaW5nV2l0aFNzaWQ7CisjaWZkZWYgWk1fRU5BQkxFX0NFTkMKKyAgICAvKiBDRU5DICovCisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgY2VuY0llW1pNX01BWF9JRV9TSVpFICsgMl07CisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworICAgIHUzMl90IHR4aXZbNF07ICAvL1R4IFBOIFNlcXVlbmNlCisgICAgdTMyX3Qgcnhpdls0XTsgIC8vUnggUE4gU2VxdWVuY2UKKyAgICB1MzJfdCByeGl2R0tbNF07Ly9Ccm9hZGNhc3QgUnggUE4gU2VxdWVuY2UKKyAgICB1OF90ICB3ZXBLZXlbNF1bMzJdOyAgICAvLyBGb3IgU29mdHdhcmUgV0VQCisJdThfdCAgU1dFbmNyeU1vZGVbNF07CisKKyAgICAvKiA4MDIuMTFkICovCisgICAgdThfdCBiODAyXzExRDsKKworICAgIC8qIDgwMi4xMWggKi8KKyAgICB1OF90IFRQQ0VuYWJsZTsKKyAgICB1OF90IERGU0VuYWJsZTsKKyAgICB1OF90IERGU0Rpc2FibGVUeDsKKworICAgIC8qIE93bCBBUCAqLworICAgIHU4X3QgYXRoT3dsQXA7CisKKyAgICAvKiBFbmFibGUgQkEgcmVzcG9uc2UgaW4gZHJpdmVyICovCisgICAgdThfdCBlbmFibGVEcnZCQTsKKworICAgIC8qIEhUIENhcGFiaWxpdHkgSW5mbyAqLworICAgIHVuaW9uIHp1SFRDYXBhYmlsaXR5IEhUQ2FwOyAvL0NXWWFuZygrKQorCisgICAgLyogRXh0ZW5kZWQgSFQgQ2FwYWJpbGl0eSBJbmZvICovCisgICAgdW5pb24genVFeHRIVENhcGFiaWxpdHkgRXh0SFRDYXA7IC8vQ1dZYW5nKCspCisKKyAgICBzdHJ1Y3QgSW5mb3JtYXRpb25FbGVtZW50U3RhICAgaWU7CisKKyNkZWZpbmUgWk1fQ0FDSEVEX0ZSQU1FQk9EWV9TSVpFICAgMjAwCisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgYXNvY1JlcUZyYW1lQm9keVtaTV9DQUNIRURfRlJBTUVCT0RZX1NJWkVdOworICAgIHUxNl90ICAgICAgICAgICAgICAgICAgIGFzb2NSZXFGcmFtZUJvZHlTaXplOworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIGFzb2NSc3BGcmFtZUJvZHlbWk1fQ0FDSEVEX0ZSQU1FQk9EWV9TSVpFXTsKKyAgICB1MTZfdCAgICAgICAgICAgICAgICAgICBhc29jUnNwRnJhbWVCb2R5U2l6ZTsKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICBiZWFjb25GcmFtZUJvZHlbWk1fQ0FDSEVEX0ZSQU1FQk9EWV9TSVpFXTsKKyAgICB1MTZfdCAgICAgICAgICAgICAgICAgICBiZWFjb25GcmFtZUJvZHlTaXplOworCisgICAgdThfdCAgICAgICAgICAgICAgICAgICAgYWMwUHJpb3JpdHlIaWdoZXJUaGFuQWMyOworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIFNXRW5jcnlwdEVuYWJsZTsKKworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIGxlYXBFbmFibGVkOworCisgICAgdTMyX3QgICAgICAgICAgICAgICAgICAgIFRvdGFsTnVtYmVyT2ZSZWNlaXZlUGFja2V0czsKKyAgICB1MzJfdCAgICAgICAgICAgICAgICAgICAgVG90YWxOdW1iZXJPZlJlY2VpdmVCeXRlczsKKyAgICB1MzJfdCAgICAgICAgICAgICAgICAgICAgYXZnU2l6ZU9mUmVjZWl2ZVBhY2tldHM7CisKKyAgICB1MzJfdCAgICAgICAgICAgICAgICAgICAgUmVjZWl2ZWRQYWNrZXRSYXRlQ291bnRlcjsKKyAgICB1MzJfdCAgICAgICAgICAgICAgICAgICAgUmVjZWl2ZWRQa3RSYXRlUGVyU2Vjb25kOworCisgICAgLyogIzIgUmVjb3JkIHRoZSBzZXF1ZW5jZSBudW1iZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHVuaWNhc3QgZnJhbWUgaXMgc2VwYXJhdGVkIGJ5IFJJRlMgb3Igbm90ICovCisjZGVmaW5lICAgIFpNX1JJRlNfU1RBVEVfREVURUNUSU5HICAgIDAKKyNkZWZpbmUgICAgWk1fUklGU19TVEFURV9ERVRFQ1RFRCAgICAgMQorI2RlZmluZSAgICBaTV9SSUZTX1RJTUVSX1RJTUVPVVQgICAgICA0NDgwICAgICAgICAgIC8vIDxEcml2ZXIgdGltZT40NDgwbXMgPFJlYWwgdGltZT43cworICAgIHU4X3QgICAgICAgICAgICAgICAgICAgIHJpZnNTdGF0ZTsKKyAgICB1OF90ICAgICAgICAgICAgICAgICAgICByaWZzTGlrZUZyYW1lQ250OworICAgIHUxNl90ICAgICAgICAgICAgICAgICAgIHJpZnNMaWtlRnJhbWVTZXF1ZW5jZVszXTsKKyAgICB1MzJfdCAgICAgICAgICAgICAgICAgICByaWZzVGltZXI7CisgICAgdTMyX3QgICAgICAgICAgICAgICAgICAgcmlmc0NvdW50OworCisgICAgLyogUlggZmlsdGVyIGRlc2lyZWQgYnkgdXBwZXIgbGF5ZXJzLiAgTm90ZSB0aGlzIGNvbnRhaW5zIHNvbWUgYml0cyB3aGljaCBtdXN0IGJlIGZpbHRlcmVkCisgICAgICAgYnkgc3cgc2luY2UgdGhlIGh3IHN1cHBvcnRzIG9ubHkgYSBzdWJzZXQgb2YgcG9zc2libGUgZmlsdGVyIGFjdGlvbnMuPSAqLworICAgIHUzMl90ICBvc1J4RmlsdGVyOworCisgICAgdThfdCAgIGJTYWZlTW9kZTsKKworICAgIHUzMl90ICBpYnNzQWRkaXRpb25hbElFU2l6ZTsKKyAgICB1OF90ICAgaWJzc0FkZGl0aW9uYWxJRVsyNTZdOworfTsgLy9zdHJ1Y3QgenNXbGFuRGV2U3RhCisKKyNkZWZpbmUgWk1fQ01EX1FVRVVFX1NJWkUgICAgICAgICAgICAgICAgICAgMjU2ICAvL1JvZ2VyIENoZWNrLCB0ZXN0IDY0IHdoZW4gcmVhZHkKKworI2RlZmluZSBaTV9PSURfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFpNX09JRF9XUklURSAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgWk1fT0lEX0lOVEVSTkFMX1dSSVRFICAgICAgICAgICAgICAgMworI2RlZmluZSBaTV9DTURfU0VUX0ZSRVFVRU5DWSAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFpNX0NNRF9TRVRfS0VZICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgWk1fQ1dNX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBaTV9NQUNfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIFpNX0FOSV9SRUFEICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgWk1fRUVQUk9NX1JFQUQgICAgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBaTV9FRVBST01fV1JJVEUgICAgICAgICAgICAgICAgICAgICAweDBBCisjZGVmaW5lIFpNX09JRF9DSEFOCQkJCQkJCTB4MzAKKyNkZWZpbmUgWk1fT0lEX1NZTlRICQkJCQkJMHgzMgorI2RlZmluZSBaTV9PSURfVEFMTFkJCQkJCQkweDgxCisjZGVmaW5lIFpNX09JRF9UQUxMWV9BUEQJCQkJCTB4ODIKKworI2RlZmluZSBaTV9PSURfREtUWF9TVEFUVVMgICAgICAgICAgICAgICAgICAweDkyCisjZGVmaW5lIFpNX09JRF9GTEFTSF9DSEtTVU0gICAgICAgICAgICAgICAgIDB4RDAKKyNkZWZpbmUgWk1fT0lEX0ZMQVNIX1JFQUQgICAgICAgICAgICAgICAgICAgMHhEMQorI2RlZmluZSBaTV9PSURfRkxBU0hfUFJPR1JBTSAgICAgICAgICAgICAgICAweEQyCisjZGVmaW5lIFpNX09JRF9GV19ETF9JTklUICAgICAgICAgICAgICAgICAgIDB4RDMKKworLyogRHJpdmVyIHRvIEZpcm13YXJlIE9JRCAqLworI2RlZmluZSBaTV9DTURfRUNITyAgICAgICAgIDB4ODAKKyNkZWZpbmUgWk1fQ01EX1RBTExZICAgICAgICAweDgxCisjZGVmaW5lIFpNX0NNRF9UQUxMWV9BUEQgICAgMHg4MgorI2RlZmluZSBaTV9DTURfQ09ORklHICAgICAgIDB4ODMKKyNkZWZpbmUgWk1fQ01EX1JSRUcgICAgICAgICAweDAwCisjZGVmaW5lIFpNX0NNRF9XUkVHICAgICAgICAgMHgwMQorI2RlZmluZSBaTV9DTURfUk1FTSAgICAgICAgIDB4MDIKKyNkZWZpbmUgWk1fQ01EX1dNRU0gICAgICAgICAweDAzCisjZGVmaW5lIFpNX0NNRF9CSVRBTkQgICAgICAgMHgwNAorI2RlZmluZSBaTV9DTURfQklUT1IgICAgICAgIDB4MDUKKyNkZWZpbmUgWk1fQ01EX0VLRVkgICAgICAgICAweDI4CisjZGVmaW5lIFpNX0NNRF9ES0VZICAgICAgICAgMHgyOQorI2RlZmluZSBaTV9DTURfRlJFUVVFTkNZICAgIDB4MzAKKyNkZWZpbmUgWk1fQ01EX1JGX0lOSVQgICAgICAweDMxCisjZGVmaW5lIFpNX0NNRF9TWU5USCAgICAgICAgMHgzMgorI2RlZmluZSBaTV9DTURfRlJFUV9TVFJBVCAgIDB4MzMKKyNkZWZpbmUgWk1fQ01EX1JFU0VUICAgICAgICAweDkwCisjZGVmaW5lIFpNX0NNRF9ES1JFU0VUICAgICAgMHg5MQorI2RlZmluZSBaTV9DTURfREtUWF9TVEFUVVMgIDB4OTIKKyNkZWZpbmUgWk1fQ01EX0ZEQyAgICAgICAgICAweEEwCisjZGVmaW5lIFpNX0NNRF9XUkVFUFJPTSAgICAgMHhCMAorI2RlZmluZSBaTV9DTURfV0ZMQVNIICAgICAgIDB4QjAKKyNkZWZpbmUgWk1fQ01EX0ZMQVNIX0VSQVNFICAweEIxCisjZGVmaW5lIFpNX0NNRF9GTEFTSF9QUk9HICAgMHhCMgorI2RlZmluZSBaTV9DTURfRkxBU0hfQ0hLU1VNIDB4QjMKKyNkZWZpbmUgWk1fQ01EX0ZMQVNIX1JFQUQgICAweEI0CisjZGVmaW5lIFpNX0NNRF9GV19ETF9JTklUICAgMHhCNQorI2RlZmluZSBaTV9DTURfTUVNX1dSRUVQUk9NIDB4QkIKKworCisvKiBkdXBsaWNhdGUgZmlsdGVyIHRhYmxlIGNvbHVtbiAqLworI2RlZmluZSBaTV9GSUxURVJfVEFCTEVfQ09MICAgICAgICAgICAgICAgICAyIC8qIDJebiAqLworLyogZHVwbGljYXRlIGZpbHRlciB0YWJsZSBSb3cgKi8KKyNkZWZpbmUgWk1fRklMVEVSX1RBQkxFX1JPVyAgICAgICAgICAgICAgICAgOCAvKiAyXm4gKi8KKworLyogZHVwbGljYXRlIGZpbHRlciB0YWJsZSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCB6c1J4RmlsdGVyCit7CisgICAgdTE2X3QgYWRkclszXTsKKyAgICB1MTZfdCBzZXE7CisgICAgdThfdCB1cDsKK307CisKK3N0cnVjdCB6c1dsYW5EZXYKK3sKKyAgICAvKiBBUCBnbG9iYWwgdmFyaWFibGVzICovCisgICAgc3RydWN0IHpzV2xhbkRldkFwIGFwOworICAgIC8qIFNUQSBnbG9iYWwgdmFyaWFibGVzICovCisgICAgc3RydWN0IHpzV2xhbkRldlN0YSBzdGE7CisgICAgLyogc2F2ZSB3cmFwcGVyIHNldHRpbmcgKi8KKyAgICBzdHJ1Y3QgenNXcmFwcGVyU2V0dGluZyB3czsKKyAgICAvKiBmZWF0dXJlcyBkZXRlcm1pbmVkIGJ5IHdyYXBwZXIgKHZlbmRvcikgKi8KKyAgICBzdHJ1Y3QgenNXcmFwcGVyRmVhdHVyZUN0cmwgd2ZjOworICAgIC8qIFRyYWZmaWMgTW9uaXRvciB0YWxseSAqLworICAgIHN0cnVjdCB6c1RyYWZUYWxseSB0cmFmVGFsbHk7CisgICAgLyogQ29tbXVuaWNhdGlvbiB0YWxseSAqLworICAgIHN0cnVjdCB6c0NvbW1UYWxseSBjb21tVGFsbHk7CisgICAgLyogRHVwbGljYXRlIGZyYW1lIGZpbHRlciB0YWJsZSAqLworICAgIHN0cnVjdCB6c1J4RmlsdGVyIHJ4RmlsdGVyVGJsW1pNX0ZJTFRFUl9UQUJMRV9DT0xdW1pNX0ZJTFRFUl9UQUJMRV9ST1ddOworICAgIC8qIFJlZ3VsYXRvcnkgdGFibGUgKi8KKyAgICBzdHJ1Y3QgenNSZWd1bGF0aW9uVGFibGUgIHJlZ3VsYXRpb25UYWJsZTsKKworICAgIC8qICovCisgICAgc3RydWN0IHpzV2xhbkRldkZyZXFDb250cm9sIGZyZXFDdHJsOworCisgICAgZW51bSBkZXZTdGF0ZSBzdGF0ZTsKKworICAgIHU4X3QgIGhhbFN0YXRlOworICAgIHU4X3QgIHdsYW5Nb2RlOyAgICAgICAgIC8qIEFQL0lORlJBU1RSVUNUVVJFL0lCU1MvUFNFVURPICovCisgICAgdTE2X3QgbWFjQWRkclszXTsgICAgICAgLyogTUFDIGFkZHJlc3MgKi8KKyAgICB1MTZfdCBiZWFjb25JbnRlcnZhbDsgICAvKiBiZWFjb24gSW50ZXJ2YWwgKi8KKyAgICB1OF90IGR0aW07ICAgICAgICAgICAgICAvKiBEVElNIHBlcmlvZCAqLworICAgIHU4X3QgICAgICAgICAgICBDdXJyZW50RHRpbUNvdW50OworICAgIHU4X3QgIHByZWFtYmxlVHlwZTsKKyAgICB1OF90ICBwcmVhbWJsZVR5cGVJblVzZWQ7CisgICAgdThfdCAgbWF4VHhQb3dlcjI7CSAgICAvKiAyLjQgR0h6IE1heCBUeCBwb3dlciAoVW5pdDogMC41IGRCbSkgKi8KKyAgICB1OF90ICBtYXhUeFBvd2VyNTsJICAgIC8qIDUgR0h6IE1heCBUeCBwb3dlciAoVW5pdDogMC41IGRCbSkgKi8KKyAgICB1OF90ICBjb25uZWN0TW9kZTsKKyAgICB1MzJfdCBzdXBwb3J0TW9kZTsKKworICAgIHU4X3QgYlJhdGU7ICAgICAgICAgICAgIC8qIDExYiBTdXBwb3J0IFJhdGUgYml0IG1hcCAqLworICAgIHU4X3QgYlJhdGVCYXNpYzsgICAgICAgIC8qIDExYiBCYXNpYyBSYXRlIGJpdCBtYXAgKi8KKyAgICB1OF90IGdSYXRlOyAgICAgICAgICAgICAvKiAxMWcgU3VwcG9ydCBSYXRlIGJpdCBtYXAgKi8KKyAgICB1OF90IGdSYXRlQmFzaWM7ICAgICAgICAvKiAxMWcgQmFzaWMgUmF0ZSBiaXQgbWFwICovCisgICAgLyogY2hhbm5lbCBpbmRleCBwb2ludCB0byB0aGUgaXRlbSBpbiByZWd1bGF0aW9uIHRhYmxlICovCisgICAgdThfdCBjaGFubmVsSW5kZXg7CisKKyAgICAvKiBjaGFubmVsIG1hbmFnZW1lbnQgKi8KKyAgICB1OF90ICAgIEJhbmRXaWR0aDQwOworICAgIHU4X3QgICAgRXh0T2Zmc2V0OyAgICAgIC8vMSBhYm92ZSwgMyBiZWxvdywgMCBub3QgcHJlc2VudAorICAgIHUxNl90ICAgZnJlcXVlbmN5OyAgICAgIC8qIG9wZXJhdGlvbiBmcmVxdWVuY3kgKi8KKworICAgIHU4X3QgZXJwRWxlbWVudDsgICAgICAgIC8qIEVSUCBpbmZvcm1hdGlvbiBlbGVtZW50IGRhdGEgKi8KKworICAgIHU4X3QgZGlzYWJsZVNlbGZDdHM7ICAgIC8qIHNldCB0byAxIHRvIGRpc2FibGUgU2VsZi1DVFMgKi8KKyAgICB1OF90IGJnTW9kZTsKKworCS8qIHByaXZhdGUgdGVzdCBmbGFnICovCisgICAgdTMyX3QgZW5hYmxlUHJvdGVjdGlvbk1vZGU7ICAgLyogZm9yY2UgZW5hYmxlL2Rpc2FibGUgc2VsZiBjdHMgKi8KKwl1MzJfdCBjaGVja3N1bVRlc3Q7ICAgICAvKiBPVFVTIGNoZWNrc3VtIHRlc3QgMT0+emVybyBjaGVja3N1bSAwPT5ub3JtYWwgKi8KKwl1MzJfdCByeFBhY2tldER1bXA7ICAgICAvKiByeCBwYWNrZXQgZHVtcCAqLworCisgICAgdThfdCBlbmFibGVBZ2dyZWdhdGlvbjsgLyogZm9yY2UgZW5hYmxlL2Rpc2FibGUgQS1NU1BVICovCisgICAgdThfdCBlbmFibGVXRFM7ICAgICAgICAgLyogZm9yY2UgZW5hYmxlL2Rpc2FibGUgV0RTIHRlc3RpbmcgKi8KKwl1OF90IGVuYWJsZVR4UGF0aE1vZGU7ICAvKiBPVFVTIHNwZWNpYWwgdGVzdGluZyBtb2RlIDE9PmRpYWJsZSwgMD0+ZW5hYmxlOiBaTV9TWVNURU1fVEVTVF9NT0RFICovCisgICAgdThfdCBlbmFibGVIQUxEYmdJbmZvOyAgLyogICovCisKKyAgICB1MzJfdCBmb3JjZVR4VFBDOyAgICAgICAvKiBmb3JjZSB0eCBwYWNrZXQgc2VuZCBUUEMgKi8KKworICAgIHUxNl90IHNlcVs0XTsKKyAgICB1MTZfdCBtbXNlcTsKKworICAgIC8qIGRyaXZlciBjb3JlIHRpbWUgdGljayAqLworICAgIHUzMl90IHRpY2s7CisgICAgdTE2X3QgdGlja0lic3NTZW5kQmVhY29uOworICAgIHUxNl90IHRpY2tJYnNzUmVjZWl2ZUJlYWNvbjsKKworICAgIC8qIFJUUyB0aHJlc2hvbGQgKi8KKyAgICB1MTZfdCBydHNUaHJlc2hvbGQ7CisKKyAgICAvKiBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCwgIDI1NiA8PSB2YWx1ZSA8PSAyMzQ2LCAwPWRpc2FibGVkICovCisgICAgdTE2X3QgZnJhZ1RocmVzaG9sZDsKKworICAgIC8qIFR4IFJhdGUgKi8KKyAgICB1MTZfdCB0eE1DUzsKKyAgICB1MTZfdCB0eE1UOworICAgIHUzMl90IEN1cnJlbnRUeFJhdGVLYnBzOyAvL0NXWWFuZygrKQorICAgIC8qIFJ4IFJhdGUgKi8KKyAgICB1MzJfdCBDdXJyZW50UnhSYXRlS2JwczsgLy9KYW5ldCgrKQorICAgIHU4X3QgQ3VycmVudFJ4UmF0ZVVwZGF0ZWQ7CisgICAgdThfdCBtb2R1bGF0aW9uVHlwZTsKKyAgICB1OF90IHJ4SW5mbzsKKyAgICB1MTZfdCByYXRlRmllbGQ7CisKKyAgICAvKiB0aW1lciByZWxhdGVkIG9iamVjdHMgKi8KKyAgICBzdHJ1Y3QgenNUaW1lckxpc3QgIHRpbWVyTGlzdDsKKyAgICB1OF90ICAgICAgICAgICAgICAgIGJUaW1lclJlYWR5OworCisgICAgLyogZm9yIGRlZnJhZ21lbnRhdGlvbiAqLworICAgIHN0cnVjdCB6c0RlZnJhZ0xpc3QgZGVmcmFnVGFibGU7CisKKyAgICAvKiBEYXRhIHN0cnVjdCBmb3IgSW50ZXJmYWNlIERlcGVuZGVudCBMYXllciAqLworICAgIC8vc3RydWN0IHpzSWRsU3RydWN0IGlkbFN0cnVjdDsKKworICAgIC8qIFNpZ25hbCBTdHJlbmd0aC9RdWFsaXR5IFJlbGF0ZWQgUGFyYW1ldGVycyAqLworICAgIHU4X3QgU2lnbmFsU3RyZW5ndGg7IC8vQ1dZYW5nKCspCisgICAgdThfdCBTaWduYWxRdWFsaXR5OyAgLy9DV1lhbmcoKykKKworCisKKyAgICAvKiBRb1MgKi8KKyAgICB6YnVmX3QqIHZ0eHFbNF1bWk1fVlRYUV9TSVpFXTsKKyAgICB1MTZfdCB2dHhxSGVhZFs0XTsKKyAgICB1MTZfdCB2dHhxVGFpbFs0XTsKKyAgICB1MTZfdCBxb3NEcm9wSXBGcmFnWzRdOworCisgICAgLyogTWFuYWdlbWVudCBUeCBxdWV1ZSAqLworICAgIHpidWZfdCogdm1tcVtaTV9WTU1RX1NJWkVdOworICAgIHUxNl90IHZtbXFIZWFkOworICAgIHUxNl90IHZtbXFUYWlsOworCisgICAgdThfdCAgICAgICAgICAgICAgICB2dHhxUHVzaGluZzsKKworICAgIC8qCisgICAgICogYWRkIGJ5IGhvbmRhCisgICAgICogMS4gQWdncmVnYXRlIHF1ZXVlcworICAgICAqIDIuIFNUQSdzIGFzc29jaWF0ZWQgaW5mb3JtYXRpb24gYW5kIHF1ZXVlIG51bWJlcgorICAgICAqIDMuIHJ4IGFnZ3JlZ2F0aW9uIHJlLW9yZGVyaW5nIHF1ZXVlCisgICAgICovCisgICAgc3RydWN0IGFnZ1F1ZXVlICAgICphZ2dRUG9vbFtaTV9BR0dfUE9PTF9TSVpFXTsKKyAgICB1OF90ICAgICAgICAgICAgICAgIGFnZ0luaXRpYXRlZDsKKyAgICB1OF90ICAgICAgICAgICAgICAgIGFkZGJhQ29tcGxldGU7CisgICAgdThfdCAgICAgICAgICAgICAgICBhZGRiYUNvdW50OworICAgIHU4X3QgICAgICAgICAgICAgICAgYWdnU3RhdGU7CisgICAgdThfdCAgICAgICAgICAgICAgICBkZXN0TG9jazsKKyAgICBzdHJ1Y3QgYWdnU3RhICAgICAgIGFnZ1N0YVtaTV9NQVhfU1RBX1NVUFBPUlRdOworICAgIHN0cnVjdCBhZ2dfdGlkX3J4ICAqdGlkX3J4W1pNX0FHR19QT09MX1NJWkVdOworICAgIHN0cnVjdCBhZ2dUYWxseSAgICAgYWdnX3RhbDsKKyAgICBzdHJ1Y3QgZGVzdFEgICAgICAgIGRlc3RROworICAgIHN0cnVjdCBiYXdfZW5hYmxlciAqYmF3X2VuYWJsZXI7CisgICAgc3RydWN0IGllZWU4MDIxMV9jd20gICAgY3dtOworICAgIHUxNl90ICAgICAgICAgICAgICAgcmVvcmRlcjsKKyAgICB1MTZfdCAgICAgICAgICAgICAgIHNlcV9kZWJ1ZzsKKyAgICAvKiByYXRlIGNvbnRyb2wgKi8KKyAgICB1MzJfdCB0eE1QRFVbWk1fUkFURV9UQUJMRV9TSVpFXTsKKyAgICB1MzJfdCB0eEZhaWxbWk1fUkFURV9UQUJMRV9TSVpFXTsKKyAgICB1MzJfdCBQRVJbWk1fUkFURV9UQUJMRV9TSVpFXTsKKyAgICB1MTZfdCBwcm9iZUNvdW50OworICAgIHUxNl90IHByb2JlU3VjY2Vzc0NvdW50OworICAgIHUxNl90IHByb2JlSW50ZXJ2YWw7CisgICAgdTE2X3Qgc3VjY2Vzc19wcm9iaW5nOworICAgIC8qCisgICAgICogZW5kIG9mIGFkZCBieSBob25kYQorICAgICAqLworCisgICAgLyogYWlyb3BlZWsgc25pZmZlciBtb2RlIGZvciB1cHBlciBzdyAqLworICAgIHUzMl90ICAgICAgICAgICAgICAgc3dTbmlmZmVyOyAgIC8qIHdpbmRvdzogYWlyb1BlZWsgKi8KKyAgICB1MzJfdCAgICAgICAgICAgICAgIFhMaW5rTW9kZTsKKworICAgIC8qIE1ESyBtb2RlICovCisgICAgLyogaW5pdCBieSAwPT5ub3JtYWwgZHJpdmVyIDE9Pk1ESyBkcml2ZXIgKi8KKyAgICB1MzJfdCAgICAgICAgICAgICAgIG1vZGVNREtFbmFibGU7CisKKyAgICB1MzJfdCAgICAgICAgICAgICAgIGhlYXJ0QmVhdE5vdGlmaWNhdGlvbjsKKworICAgIC8qIHBvaW50ZXIgZm9yIEhBTCBQbHVzIHByaXZhdGUgbWVtb3J5ICovCisgICAgdm9pZCogaHBQcml2YXRlOworCisgICAgLyogZm9yIFdQQSBzZXR0aW5nICovCisgICAgLy91OF90ICAgICAgICAgICAgICAgICAgICB3cGFTdXBwb3J0W1pNX01BWF9BUF9TVVBQT1JUXTsKKyAgICAvL3U4X3QgICAgICAgICAgICAgICAgICAgIHdwYUxlbltaTV9NQVhfQVBfU1VQUE9SVF07CisgICAgLy91OF90ICAgICAgICAgICAgICAgICAgICB3cGFJZVtaTV9NQVhfQVBfU1VQUE9SVF1bWk1fTUFYX0lFX1NJWkVdOworCisgICAgc3RydWN0IHpzTGVkU3RydWN0ICAgICAgbGVkU3RydWN0OworCisgICAgLyogYW5pIGZsYWcgKi8KKyAgICB1OF90IGFuaUVuYWJsZTsKKyAgICB1MTZfdCB0eHFfdGhyZXNob2xkOworCisJLy9Ta2lwIE1pYyBFcnJvciBDaGVjaworCXU4X3QJVEtJUF9Hcm91cF9LZXlDaGFuZ2luZzsKKworCXU4X3QgICAgZHluYW1pY1NJRlNFbmFibGU7CisKKwl1OF90ICAgIHF1ZXVlRmx1c2hlZDsKKworICAgIHUxNl90ICgqemZjYkF1dGhOb3RpZnkpKHpkZXZfdCogZGV2LCB1MTZfdCogbWFjQWRkcik7CisgICAgdTE2X3QgKCp6ZmNiQXNvY05vdGlmeSkoemRldl90KiBkZXYsIHUxNl90KiBtYWNBZGRyLCB1OF90KiBib2R5LCB1MTZfdCBib2R5U2l6ZSwgdTE2X3QgcG9ydCk7CisgICAgdTE2X3QgKCp6ZmNiRGlzQXNvY05vdGlmeSkoemRldl90KiBkZXYsIHU4X3QqIG1hY0FkZHIsIHUxNl90IHBvcnQpOworICAgIHUxNl90ICgqemZjYkFwQ29ubmVjdE5vdGlmeSkoemRldl90KiBkZXYsIHU4X3QqIG1hY0FkZHIsIHUxNl90IHBvcnQpOworICAgIHZvaWQgKCp6ZmNiQ29ubmVjdE5vdGlmeSkoemRldl90KiBkZXYsIHUxNl90IHN0YXR1cywgdTE2X3QqIGJzc2lkKTsKKyAgICB2b2lkICgqemZjYlNjYW5Ob3RpZnkpKHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNTY2FuUmVzdWx0KiByZXN1bHQpOworICAgIHZvaWQgKCp6ZmNiTWljRmFpbHVyZU5vdGlmeSkoemRldl90KiBkZXYsIHUxNl90KiBhZGRyLCB1MTZfdCBzdGF0dXMpOworICAgIHZvaWQgKCp6ZmNiQXBNaWNGYWlsdXJlTm90aWZ5KSh6ZGV2X3QqIGRldiwgdThfdCogYWRkciwgemJ1Zl90KiBidWYpOworICAgIHZvaWQgKCp6ZmNiSWJzc1BhcnRuZXJOb3RpZnkpKHpkZXZfdCogZGV2LCB1MTZfdCBzdGF0dXMsIHN0cnVjdCB6c1BhcnRuZXJOb3RpZnlFdmVudCAqZXZlbnQpOworICAgIHZvaWQgKCp6ZmNiTWFjQWRkcmVzc05vdGlmeSkoemRldl90KiBkZXYsIHU4X3QqIGFkZHIpOworICAgIHZvaWQgKCp6ZmNiU2VuZENvbXBsZXRlSW5kaWNhdGlvbikoemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKKyAgICB2b2lkICgqemZjYlJlY3ZFdGgpKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgcG9ydCk7CisgICAgdm9pZCAoKnpmY2JSZWN2ODAyMTEpKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Ziwgc3RydWN0IHpzQWRkaXRpb25JbmZvKiBhZGRJbmZvKTsKKyAgICB2b2lkICgqemZjYlJlc3RvcmVCdWZEYXRhKSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOworI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisgICAgdTE2X3QgKCp6ZmNiQ2VuY0Fzb2NOb3RpZnkpKHpkZXZfdCogZGV2LCB1MTZfdCogbWFjQWRkciwgdThfdCogYm9keSwKKyAgICAgICAgICAgIHUxNl90IGJvZHlTaXplLCB1MTZfdCBwb3J0KTsKKyNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCisgICAgdThfdCAoKnpmY2JDbGFzc2lmeVR4UGFja2V0KSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpOworICAgIHZvaWQgKCp6ZmNiSHdXYXRjaERvZ05vdGlmeSkoemRldl90KiBkZXYpOworfTsKKworCitzdHJ1Y3QgenNXbGFuS2V5Cit7CisgICAgdThfdCBrZXk7Cit9OworCisKKy8qIFRoZXNlIG1hY3JvcyBhcmUgZGVmaW5lZCBoZXJlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisvKiBQbGVhc2UgbGVhdmUgdGhlbSBhbG9uZSAqLworLyogRm9yIFR4IHBhY2tldCBhbGxvY2F0ZWQgaW4gdXBwZXIgbGF5ZXIgbGF5ZXIgKi8KKyNkZWZpbmUgem13X3R4X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KSB6bXdfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQpCisjZGVmaW5lIHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIG9mZnNldCkgem13X2J1Zl9yZWFkaChkZXYsIGJ1Ziwgb2Zmc2V0KQorI2RlZmluZSB6bXdfdHhfYnVmX3dyaXRlYihkZXYsIGJ1Ziwgb2Zmc2V0LCB2YWx1ZSkgem13X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCwgdmFsdWUpCisjZGVmaW5lIHptd190eF9idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIHZhbHVlKSB6bXdfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0LCB2YWx1ZSkKKworLyogRm9yIFJ4IHBhY2tldCBhbGxvY2F0ZWQgaW4gZHJpdmVyICovCisjZGVmaW5lIHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCkgem13X2J1Zl9yZWFkYihkZXYsIGJ1Ziwgb2Zmc2V0KQorI2RlZmluZSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCBvZmZzZXQpIHptd19idWZfcmVhZGgoZGV2LCBidWYsIG9mZnNldCkKKyNkZWZpbmUgem13X3J4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCwgdmFsdWUpIHptd19idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQsIHZhbHVlKQorI2RlZmluZSB6bXdfcnhfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0LCB2YWx1ZSkgem13X2J1Zl93cml0ZWgoZGV2LCBidWYsIG9mZnNldCwgdmFsdWUpCisKKyNlbmRpZiAvKiAjaWZuZGVmIF9TVFJVQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL3dsYW4uaCBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS93bGFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjMThiOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS93bGFuLmgKQEAgLTAsMCArMSw1OTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBNb2R1bGUgTmFtZSA6IHdsYW5fZGVmcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEFic3RyYWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgVGhpcyBtb2R1bGUgY29udGFpbnMgV0xBTiBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE5PVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfV0xBTl9ICisjZGVmaW5lIF9XTEFOX0gKKworCisjZGVmaW5lIFpNX0VYVEVSTkFMX0FMTE9DX0JVRiAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgWk1fSU5URVJOQUxfQUxMT0NfQlVGICAgICAgICAgICAgICAgMQorCisjZGVmaW5lIFpNX1NJWkVfT0ZfQ1RSTF9TRVQgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgWk1fU0laRV9PRl9JViAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBaTV9TSVpFX09GX0VYVF9JViAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFpNX1NJWkVfT0ZfTUlDICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgWk1fU0laRV9PRl9DQ1hfTUlDICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBaTV9TSVpFX09GX1dMQU5fREFUQV9IRUFERVIgICAgICAgICAyNAorI2RlZmluZSBaTV9TSVpFX09GX1FPU19DVFJMICAgICAgICAgICAgICAgICAyCisKKy8qIEhlYWRlciBkZWZpbml0aW9uICovCisjZGVmaW5lIFpNX1NJWkVfT0ZfV0xBTl9XRFNfSEVBREVSICAgICAgICAgIDMyCisjZGVmaW5lIFpNX1NJWkVfT0ZfU05BUF9IRUFERVIgICAgICAgICAgICAgIDgKKworI2RlZmluZSBaTV9XTEFOX0hFQURFUl9BMV9PRkZTRVQgICAgICAgICAgICA0CisjZGVmaW5lIFpNX1dMQU5fSEVBREVSX0EyX09GRlNFVCAgICAgICAgICAgIDEwCisjZGVmaW5lIFpNX1dMQU5fSEVBREVSX0EzX09GRlNFVCAgICAgICAgICAgIDE2CisjZGVmaW5lIFpNX1dMQU5fSEVBREVSX0E0X09GRlNFVCAgICAgICAgICAgIDI0CisjZGVmaW5lIFpNX1dMQU5fSEVBREVSX0lWX09GRlNFVCAgICAgICAgICAgIDI0CisjZGVmaW5lIFpNX1NJWkVfT0ZfV0xBTl9EQVRBX0hFQURFUiAgICAgICAgIDI0CisKKy8qIFBvcnQgZGVmaW5pdGlvbiAqLworI2RlZmluZSBaTV9QT1JUX0RJU0FCTEVEICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFpNX1BPUlRfRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgIDEKKworLyogRnJhbWUgVHlwZSAqLworI2RlZmluZSBaTV9XTEFOX01BTkFHRU1FTlRfRlJBTUUgICAgICAgICAgICAweDAKKyNkZWZpbmUgWk1fV0xBTl9DT05UUk9MX0ZSQU1FICAgICAgICAgICAgICAgMHg0CisjZGVmaW5lIFpNX1dMQU5fREFUQV9GUkFNRSAgICAgICAgICAgICAgICAgIDB4OAorCisvKiBGcmFtZSBTdWJ0eXBlICovCisjZGVmaW5lIFpNX1dMQU5fRlJBTUVfVFlQRV9BU09DUkVRICAgICAgICAgIDB4MDAKKyNkZWZpbmUgWk1fV0xBTl9GUkFNRV9UWVBFX0FTT0NSU1AgICAgICAgICAgMHgxMAorI2RlZmluZSBaTV9XTEFOX0ZSQU1FX1RZUEVfUkVBU09DUkVRICAgICAgICAweDIwCisjZGVmaW5lIFpNX1dMQU5fRlJBTUVfVFlQRV9SRUFTT0NSU1AgICAgICAgIDB4MzAKKyNkZWZpbmUgWk1fV0xBTl9GUkFNRV9UWVBFX1BST0JFUkVRICAgICAgICAgMHg0MAorI2RlZmluZSBaTV9XTEFOX0ZSQU1FX1RZUEVfUFJPQkVSU1AgICAgICAgICAweDUwCisvKiAweDYwLCAweDcwID0+IFJlc2VydmVkICovCisjZGVmaW5lIFpNX1dMQU5fRlJBTUVfVFlQRV9CRUFDT04gICAgICAgICAgIDB4ODAKKyNkZWZpbmUgWk1fV0xBTl9GUkFNRV9UWVBFX0FUSU0gICAgICAgICAgICAgMHg5MAorI2RlZmluZSBaTV9XTEFOX0ZSQU1FX1RZUEVfRElTQVNPQyAgICAgICAgICAweEEwCisjZGVmaW5lIFpNX1dMQU5fRlJBTUVfVFlQRV9BVVRIICAgICAgICAgICAgIDB4QjAKKyNkZWZpbmUgWk1fV0xBTl9GUkFNRV9UWVBFX0RFQVVUSCAgICAgICAgICAgMHhDMAorI2RlZmluZSBaTV9XTEFOX0ZSQU1FX1RZUEVfQUNUSU9OCQkJMHhEMAorCisvKiBGcmFtZSB0eXBlIGFuZCBzdWJ0eXBlICovCisjZGVmaW5lIFpNX1dMQU5fRlJBTUVfVFlQRV9OVUxMICAgICAgICAgICAgIDB4NDgKKyNkZWZpbmUgWk1fV0xBTl9GUkFNRV9UWVBFX0JBUiAgICAgICAgICAgICAgMHg4NAorI2RlZmluZSBaTV9XTEFOX0ZSQU1FX1RZUEVfQkEgICAgICAgICAgICAgICAweDk0CisjZGVmaW5lIFpNX1dMQU5fRlJBTUVfVFlQRV9QU1BPTEwgICAgICAgICAgIDB4QTQKKyNkZWZpbmUgWk1fV0xBTl9GUkFNRV9UWVBFX1JUUyAgICAgICAgICAgICAgMHhCNAorI2RlZmluZSBaTV9XTEFOX0ZSQU1FX1RZUEVfQ1RTICAgICAgICAgICAgICAweEM0CisjZGVmaW5lIFpNX1dMQU5fRlJBTUVfVFlQRV9RT1NfTlVMTCAgICAgICAgIDB4QzgKKworLyogYWN0aW9uIGZyYW1lICovCisjZGVmaW5lIFpNX1dMQU5fU1BFQ1RSVU1fTUFOQUdFTUVOVF9BQ1RJT05fRlJBTUUgICAgMAorI2RlZmluZSBaTV9XTEFOX1FPU19BQ1RJT05fRlJBTUUgICAgICAgICAgICAxCisjZGVmaW5lIFpNX1dMQU5fRExTX0FDVElPTl9GUkFNRSAgICAgICAgICAgIDIKKyNkZWZpbmUgWk1fV0xBTl9CTE9DS19BQ0tfQUNUSU9OX0ZSQU1FICAgICAgMworLyogYmxvY2sgYWNrIGFjdGlvbiBmcmFtZSovCisjZGVmaW5lIFpNX1dMQU5fQUREQkFfUkVRVUVTVF9GUkFNRSAgICAgICAgIDAKKyNkZWZpbmUgWk1fV0xBTl9BRERCQV9SRVNQT05TRV9GUkFNRSAgICAgICAgMQorI2RlZmluZSBaTV9XTEFOX0RFTEJBX0ZSQU1FICAgICAgICAgICAgICAgICAyCisKKy8qIEVsZW1lbnQgSUQgKi8KKyNkZWZpbmUgWk1fV0xBTl9FSURfU1NJRCAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBaTV9XTEFOX0VJRF9TVVBQT1JUX1JBVEUgICAgICAgICAgICAxCisjZGVmaW5lIFpNX1dMQU5fRUlEX0ZIICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgWk1fV0xBTl9FSURfRFMgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBaTV9XTEFOX0VJRF9DRlMgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFpNX1dMQU5fRUlEX1RJTSAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgWk1fV0xBTl9FSURfSUJTUyAgICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBaTV9XTEFOX0VJRF9DT1VOVFJZICAgICAgICAgICAgICAgICA3CisvKiByZXNlcnZlZCA4LTE1ICovCisjZGVmaW5lIFpNX1dMQU5fRUlEX0NIQUxMRU5HRSAgICAgICAgICAgICAgIDE2CisvKiByZXNlcnZlZCAxNy0zMSAqLworI2RlZmluZSBaTV9XTEFOX0VJRF9QT1dFUl9DT05TVFJBSU5UICAgICAgICAzMgorI2RlZmluZSBaTV9XTEFOX0VJRF9QT1dFUl9DQVBBQklMSVRZICAgICAgICAzMworI2RlZmluZSBaTV9XTEFOX0VJRF9UUENfUkVRVUVTVCAgICAgICAgICAgICAzNAorI2RlZmluZSBaTV9XTEFOX0VJRF9UUENfUkVQT1JUICAgICAgICAgICAgICAzNQorI2RlZmluZSBaTV9XTEFOX0VJRF9TVVBQT1JURURfQ0hBTk5FTFMgICAgICAzNgorI2RlZmluZSBaTV9XTEFOX0VJRF9DSEFOTkVMX1NXSVRDSF9BTk5PVU5DRSAzNworI2RlZmluZSBaTV9XTEFOX0VJRF9NRUFTVVJFTUVOVF9SRVFVRVNUICAgICAzOAorI2RlZmluZSBaTV9XTEFOX0VJRF9NRUFTVVJFTUVOVF9SRVBPUlQgICAgICAzOQorI2RlZmluZSBaTV9XTEFOX0VJRF9RVUlFVCAgICAgICAgICAgICAgICAgICA0MAorI2RlZmluZSBaTV9XTEFOX0VJRF9JQlNTX0RGUyAgICAgICAgICAgICAgICA0MQorI2RlZmluZSBaTV9XTEFOX0VJRF9FUlAgICAgICAgICAgICAgICAgICAgICA0MgorI2RlZmluZSBaTV9XTEFOX1BSRU4yX0VJRF9IVENBUEFCSUxJVFkgICAgICA0NQorI2RlZmluZSBaTV9XTEFOX0VJRF9SU05fSUUgICAgICAgICAgICAgICAgICA0OAorI2RlZmluZSBaTV9XTEFOX0VJRF9FWFRFTkRFRF9SQVRFICAgICAgICAgICA1MAorI2RlZmluZSBaTV9XTEFOX0VJRF9IVF9DQVBBQklMSVRZICAgICAgICAgICA1MQorI2RlZmluZSBaTV9XTEFOX0VJRF9FWFRFTkRFRF9IVF9DQVBBQklMSVRZICA1MgorI2RlZmluZSBaTV9XTEFOX0VJRF9ORVdfRVhUX0NIQU5ORUxfT0ZGU0VUICA1MworI2RlZmluZSBaTV9XTEFOX1BSRU4yX0VJRF9IVElORk9STUFUSU9OICAgICA2MQorI2RlZmluZSBaTV9XTEFOX1BSRU4yX0VJRF9TRUNPTkRDSE9GRlNFVCAgICA2MgorI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisjZGVmaW5lIFpNX1dMQU5fRUlEX0NFTkNfSUUgICAgICAgICAgICAgICAgIDY4CisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworI2RlZmluZSBaTV9XTEFOX0VJRF9WRU5ET1JfUFJJVkFURSAgICAgICAgICAyMjEgICAgIC8qIFZlbmRvciBwcml2YXRlIHNwYWNlOyBtdXN0IGRlbXV4IE9VSSAqLworI2RlZmluZSBaTV9XTEFOX0VJRF9XUEFfSUUgICAgICAgICAgICAgICAgICAyMjEKKyNkZWZpbmUgWk1fV0xBTl9FSURfV1BTX0lFICAgICAgICAgICAgICAgICAgMjIxCisjZGVmaW5lIFpNX1dMQU5fRUlEX1dJRklfSUUgICAgICAgICAgICAgICAgIDIyMQorCisvKiBFUlAgaW5mb3JtYXRpb24gZWxlbWVudCAqLworI2RlZmluZSBaTV9XTEFOX05PTl9FUlBfUFJFU0VOVF9CSVQgICAgICAgICAweDEKKyNkZWZpbmUgWk1fV0xBTl9VU0VfUFJPVEVDVElPTl9CSVQgICAgICAgICAgMHgyCisjZGVmaW5lIFpNX1dMQU5fQkFSS0VSX1BSRUFNQkxFX01PREVfQklUICAgIDB4NAorCisvKiBDaGFubmVsIGZyZXF1ZW5jeSwgaW4gTUh6ICovCisjZGVmaW5lIFpNX0NIX0dfMSAgICAgICAgICAgICAgICAgICAgICAgICAgMjQxMgorI2RlZmluZSBaTV9DSF9HXzIgICAgICAgICAgICAgICAgICAgICAgICAgIDI0MTcKKyNkZWZpbmUgWk1fQ0hfR18zICAgICAgICAgICAgICAgICAgICAgICAgICAyNDIyCisjZGVmaW5lIFpNX0NIX0dfNCAgICAgICAgICAgICAgICAgICAgICAgICAgMjQyNworI2RlZmluZSBaTV9DSF9HXzUgICAgICAgICAgICAgICAgICAgICAgICAgIDI0MzIKKyNkZWZpbmUgWk1fQ0hfR182ICAgICAgICAgICAgICAgICAgICAgICAgICAyNDM3CisjZGVmaW5lIFpNX0NIX0dfNyAgICAgICAgICAgICAgICAgICAgICAgICAgMjQ0MgorI2RlZmluZSBaTV9DSF9HXzggICAgICAgICAgICAgICAgICAgICAgICAgIDI0NDcKKyNkZWZpbmUgWk1fQ0hfR185ICAgICAgICAgICAgICAgICAgICAgICAgICAyNDUyCisjZGVmaW5lIFpNX0NIX0dfMTAgICAgICAgICAgICAgICAgICAgICAgICAgMjQ1NworI2RlZmluZSBaTV9DSF9HXzExICAgICAgICAgICAgICAgICAgICAgICAgIDI0NjIKKyNkZWZpbmUgWk1fQ0hfR18xMiAgICAgICAgICAgICAgICAgICAgICAgICAyNDY3CisjZGVmaW5lIFpNX0NIX0dfMTMgICAgICAgICAgICAgICAgICAgICAgICAgMjQ3MgorI2RlZmluZSBaTV9DSF9HXzE0ICAgICAgICAgICAgICAgICAgICAgICAgIDI0ODQKKyNkZWZpbmUgWk1fQ0hfQV8xODQgICAgICAgICAgICAgICAgICAgICAgICA0OTIwCisjZGVmaW5lIFpNX0NIX0FfMTg4ICAgICAgICAgICAgICAgICAgICAgICAgNDk0MAorI2RlZmluZSBaTV9DSF9BXzE5MiAgICAgICAgICAgICAgICAgICAgICAgIDQ5NjAKKyNkZWZpbmUgWk1fQ0hfQV8xOTYgICAgICAgICAgICAgICAgICAgICAgICA0OTgwCisjZGVmaW5lIFpNX0NIX0FfOCAgICAgICAgICAgICAgICAgICAgICAgICAgNTA0MAorI2RlZmluZSBaTV9DSF9BXzEyICAgICAgICAgICAgICAgICAgICAgICAgIDUwNjAKKyNkZWZpbmUgWk1fQ0hfQV8xNiAgICAgICAgICAgICAgICAgICAgICAgICA1MDgwCisjZGVmaW5lIFpNX0NIX0FfMzYgICAgICAgICAgICAgICAgICAgICAgICAgNTE4MAorI2RlZmluZSBaTV9DSF9BXzQwICAgICAgICAgICAgICAgICAgICAgICAgIDUyMDAKKyNkZWZpbmUgWk1fQ0hfQV80NCAgICAgICAgICAgICAgICAgICAgICAgICA1MjIwCisjZGVmaW5lIFpNX0NIX0FfNDggICAgICAgICAgICAgICAgICAgICAgICAgNTI0MAorI2RlZmluZSBaTV9DSF9BXzUyICAgICAgICAgICAgICAgICAgICAgICAgIDUyNjAKKyNkZWZpbmUgWk1fQ0hfQV81NiAgICAgICAgICAgICAgICAgICAgICAgICA1MjgwCisjZGVmaW5lIFpNX0NIX0FfNjAgICAgICAgICAgICAgICAgICAgICAgICAgNTMwMAorI2RlZmluZSBaTV9DSF9BXzY0ICAgICAgICAgICAgICAgICAgICAgICAgIDUzMjAKKyNkZWZpbmUgWk1fQ0hfQV8xMDAgICAgICAgICAgICAgICAgICAgICAgICA1NTAwCisjZGVmaW5lIFpNX0NIX0FfMTA0ICAgICAgICAgICAgICAgICAgICAgICAgNTUyMAorI2RlZmluZSBaTV9DSF9BXzEwOCAgICAgICAgICAgICAgICAgICAgICAgIDU1NDAKKyNkZWZpbmUgWk1fQ0hfQV8xMTIgICAgICAgICAgICAgICAgICAgICAgICA1NTYwCisjZGVmaW5lIFpNX0NIX0FfMTE2ICAgICAgICAgICAgICAgICAgICAgICAgNTU4MAorI2RlZmluZSBaTV9DSF9BXzEyMCAgICAgICAgICAgICAgICAgICAgICAgIDU2MDAKKyNkZWZpbmUgWk1fQ0hfQV8xMjQgICAgICAgICAgICAgICAgICAgICAgICA1NjIwCisjZGVmaW5lIFpNX0NIX0FfMTI4ICAgICAgICAgICAgICAgICAgICAgICAgNTY0MAorI2RlZmluZSBaTV9DSF9BXzEzMiAgICAgICAgICAgICAgICAgICAgICAgIDU2NjAKKyNkZWZpbmUgWk1fQ0hfQV8xMzYgICAgICAgICAgICAgICAgICAgICAgICA1NjgwCisjZGVmaW5lIFpNX0NIX0FfMTQwICAgICAgICAgICAgICAgICAgICAgICAgNTcwMAorI2RlZmluZSBaTV9DSF9BXzE0OSAgICAgICAgICAgICAgICAgICAgICAgIDU3NDUKKyNkZWZpbmUgWk1fQ0hfQV8xNTMgICAgICAgICAgICAgICAgICAgICAgICA1NzY1CisjZGVmaW5lIFpNX0NIX0FfMTU3ICAgICAgICAgICAgICAgICAgICAgICAgNTc4NQorI2RlZmluZSBaTV9DSF9BXzE2MSAgICAgICAgICAgICAgICAgICAgICAgIDU4MDUKKyNkZWZpbmUgWk1fQ0hfQV8xNjUgICAgICAgICAgICAgICAgICAgICAgICA1ODI1CisKKworLyogQVAgOiBTVEEgdGFibGUgPT4gU1RBIFR5cGUgKi8KKyNkZWZpbmUgWk1fMTFCX1NUQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIFpNXzExR19TVEEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MgorI2RlZmluZSBaTV8xMU5fU1RBICAgICAgICAgICAgICAgICAgICAgICAgICAweDQKKworLyogQVAgOiB0aW1lb3V0ICovCisjZGVmaW5lIFpNX01TX1BFUl9USUNLICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFpNX1RJQ0tfUEVSX1NFQ09ORCAgICAgICAgICAgICAgICAgICgxMDAwL1pNX01TX1BFUl9USUNLKQorI2RlZmluZSBaTV9USUNLX1BFUl9NSU5VVEUgICAgICAgICAgICAgICAgICAoNjAqMTAwMC9aTV9NU19QRVJfVElDSykKKyNkZWZpbmUgWk1fUFJFQVVUSF9USU1FT1VUX01TICAgICAgICAgICAgICAgMTAwMCAvKiAxIHNlYyAqLworI2RlZmluZSBaTV9BVVRIX1RJTUVPVVRfTVMgICAgICAgICAgICAgICAgICAxMDAwIC8qIDEgc2VjICovCisKKy8qIEVycm9yIGNvZGUgKi8KKyNkZWZpbmUgWk1fU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBaTV9FUlJfVFhfUE9SVF9ESVNBQkxFRCAgICAgICAgICAgICAxCisjZGVmaW5lIFpNX0VSUl9CVUZGRVJfRE1BX0FERFIgICAgICAgICAgICAgIDIKKyNkZWZpbmUgWk1fRVJSX0ZSRUVfVFhEX0VYSEFVU1RFRCAgICAgICAgICAgMworI2RlZmluZSBaTV9FUlJfVFhfQlVGRkVSX1VOQVZBSUxBQkxFICAgICAgICA0CisjZGVmaW5lIFpNX0VSUl9CQ01DX1BTX0JVRkZFUl9VTkFWQUlMQUJMRSAgIDUKKyNkZWZpbmUgWk1fRVJSX1VOSV9QU19CVUZGRVJfVU5BVkFJTEFCTEUgICAgNgorI2RlZmluZSBaTV9FUlJfRVhDRUVEX1BSSU9SSVRZX1RIUkVTSE9MRCAgICA3CisjZGVmaW5lIFpNX0VSUl9WTU1RX0ZVTEwgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgWk1fRVJSX0ZMVVNIX1BTX1FVRVVFICAgICAgICAgICAgICAgOQorI2RlZmluZSBaTV9FUlJfQ01EX0lOVF9NSVNTRUQgICAgICAgICAgICAgICAxNSAvKiBQb2xsaW5nIGNtZCBpbnQgdGltZW91dCovCisvKiBSeCAqLworI2RlZmluZSBaTV9FUlJfUlhfRlJBTUVfVFlQRSAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBaTV9FUlJfTUlOX1JYX0VOQ1JZUFRfRlJBTUVfTEVOR1RIICAyMQorI2RlZmluZSBaTV9FUlJfTUlOX1JYX0ZSQU1FX0xFTkdUSCAgICAgICAgICAyMgorI2RlZmluZSBaTV9FUlJfTUFYX1JYX0ZSQU1FX0xFTkdUSCAgICAgICAgICAyMworI2RlZmluZSBaTV9FUlJfUlhfRFVQTElDQVRFICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBaTV9FUlJfUlhfU1JDX0FERFJfSVNfT1dOX01BQyAgICAgICAyNQorI2RlZmluZSBaTV9FUlJfTUlOX1JYX1BST1RPQ09MX1ZFUlNJT04gICAgICAyNgorI2RlZmluZSBaTV9FUlJfV1BBX0dLX05PVF9JTlNUQUxMRUQgICAgICAgICAyNworI2RlZmluZSBaTV9FUlJfU1RBX05PVF9BU1NPQ0lBVEVEICAgICAgICAgICAyOAorI2RlZmluZSBaTV9FUlJfREFUQV9CRUZPUkVfQ09OTkVDVEVEICAgICAgICAyOQorI2RlZmluZSBaTV9FUlJfREFUQV9OT1RfRU5DUllQVEVEICAgICAgICAgICAzMAorI2RlZmluZSBaTV9FUlJfREFUQV9CU1NJRF9OT1RfTUFUQ0hFRCAgICAgICAzMQorI2RlZmluZSBaTV9FUlJfUlhfQkFSX0ZSQU1FICAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBaTV9FUlJfT1VUX09GX09SREVSX05VTExfREFUQSAgICAgICAzMworCisvKiBaRkkgKi8KKyNkZWZpbmUgWk1fRVJSX0lOVkFMSURfVFhfUkFURSAgICAgICAgICAgICAgNDAKKyNkZWZpbmUgWk1fRVJSX1dEU19QT1JUX0lEICAgICAgICAgICAgICAgICAgNDEKKworLyogUVVFVUUgKi8KKyNkZWZpbmUgWk1fRVJSX1FVRVVFX0ZVTEwgICAgICAgICAgICAgICAgICAgNTAKKyNkZWZpbmUgWk1fRVJSX1NUQV9VQVBTRF9RVUVVRV9GVUxMICAgICAgICAgNTEKKyNkZWZpbmUgWk1fRVJSX0FQX1VBUFNEX1FVRVVFX0ZVTEwgICAgICAgICAgNTIKKworLyogTWF4aW11bSBSeCBmcmFtZSBsZW5ndGggKi8KKyNpZiBaTV9MQVJHRVBBWUxPQURfVEVTVCA9PSAxCisjZGVmaW5lIFpNX1dMQU5fTUFYX1JYX1NJWkUgICAgICAgICAgICAgICAgIDE2Mzg0CisjZWxzZQorI2RlZmluZSBaTV9XTEFOX01BWF9SWF9TSVpFICAgICAgICAgICAgICAgICA4MTkyCisjZW5kaWYKKworLyogUENJIERNQSB0ZXN0IGVycm9yIGNvZGUgKi8KKyNkZWZpbmUgWk1fRVJSX0lOVEVSUlVQVF9NSVNTRUQgICAgICAgICAgICAgMTAwCisjZGVmaW5lIFpNX0VSUl9PV05fQklUX05PVF9DTEVBUkVEICAgICAgICAgIDEwMQorI2RlZmluZSBaTV9FUlJfUlhfU0VRX05VTUJFUiAgICAgICAgICAgICAgICAxMDIKKyNkZWZpbmUgWk1fRVJSX1JYX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgMTAzCisjZGVmaW5lIFpNX0VSUl9SWF9EQVRBICAgICAgICAgICAgICAgICAgICAgIDEwNAorI2RlZmluZSBaTV9FUlJfUlhfREVTQ1JJUFRPUl9OVU0gICAgICAgICAgICAxMDUKKy8qIENvbW1vbiByZWdpc3RlciB0ZXN0IGVycm9yIGNvZGUgKi8KKyNkZWZpbmUgWk1fRVJSX1JFR0lTVEVSX0FDQ0VTUyAgICAgICAgICAgICAgMTEwIC8qIFJlZ2lzdGVyIFIvVyB0ZXN0IGZhaWwqLworI2RlZmluZSBaTV9FUlJfQ0xFQVJfSU5URVJSVVBUX0ZMQUcgICAgICAgICAxMTEKKyNkZWZpbmUgWk1fRVJSX0NPTU1BTkRfUkVTUE9OU0UgICAgICAgICAgICAgMTEyCisjZGVmaW5lIFpNX0VSUl9JTlRFUlJVUFRfR0VORVJBVEUgICAgICAgICAgIDExMworI2RlZmluZSBaTV9FUlJfSU5URVJSVVBUX0FDSyAgICAgICAgICAgICAgICAxMTQKKyNkZWZpbmUgWk1fRVJSX1NDUkFUQ0hfQUNDRVNTICAgICAgICAgICAgICAgMTE1CisjZGVmaW5lIFpNX0VSUl9JTlRFUlJVUFRfTUFTS19BQ0NFU1MgICAgICAgIDExNgorI2RlZmluZSBaTV9FUlJfU0hBUkVfTUVNT1JZX1BDSV9BQ0NFU1MgICAgICAxMTcKKyNkZWZpbmUgWk1fRVJSX1NIQVJFX01FTU9SWV9GV19BQ0NFU1MgICAgICAgMTE4CisjZGVmaW5lIFpNX0VSUl9TSEFSRV9NRU1PUllfRElTQUJMRSAgICAgICAgIDExOQorI2RlZmluZSBaTV9FUlJfU0hBUkVfTUVNT1JZX1RFU1RfUkVTUE9OU0UgICAxMjAKKworLyogRmlybXdhcmUgRG93bmxvYWQgZXJyb3IgY29kZSAqLworI2RlZmluZSBaTV9FUlJfRklSTVdBUkVfRE9XTkxPQURfVElNRU9VVCAgICAxNTAKKyNkZWZpbmUgWk1fRVJSX0ZJUk1XQVJFX0RPV05MT0FEX0lOVF9GTEFHICAgMTUxCisjZGVmaW5lIFpNX0VSUl9GSVJNV0FSRV9SRUFEWV9USU1FT1VUICAgICAgIDE1MgorI2RlZmluZSBaTV9FUlJfRklSTVdBUkVfV1JPTkdfVFlQRSAgICAgICAgICAxNTMKKworLyogRGVidWcgKi8KKyNkZWZpbmUgWk1fTFZfMCAgICAgMC8vRGVidWcgbGV2ZWwgMCwgRGlzYWJsZSBkZWJ1ZyBtZXNzYWdlCisjZGVmaW5lIFpNX0xWXzEgICAgIDEvL0RlYnVnIGxldmVsIDEsIFNob3cgbWluaW11bSBpbmZvcm1hdGlvbgorI2RlZmluZSBaTV9MVl8yICAgICAyLy9EZWJ1ZyBsZXZlbCAyLCBTaG93IG1lZGl1bSBtZXNzYWdlCisjZGVmaW5lIFpNX0xWXzMgICAgIDMvL0RlYnVnIGxldmVsIDMsIFNob3cgYWxsCisKKyNkZWZpbmUgWk1fU0NBTk1TR19MRVYgIFpNX0xWXzEKKyNkZWZpbmUgWk1fVFhNU0dfTEVWICAgIFpNX0xWXzAvL1pNX0xWXzAKKyNkZWZpbmUgWk1fUlhNU0dfTEVWICAgIFpNX0xWXzAKKyNkZWZpbmUgWk1fTU1NU0dfTEVWICAgIFpNX0xWXzAKKyNkZWZpbmUgWk1fREVTTVNHX0xFViAgIFpNX0xWXzAvL1pNX0xWXzAKKyNkZWZpbmUgWk1fQlVGTVNHX0xFViAgIFpNX0xWXzAvL1pNX0xWXzEKKyNkZWZpbmUgWk1fSU5JVE1TR19MRVYgIFpNX0xWXzAKKworI2RlZmluZSB6bV9tc2cwX3NjYW4obHYsIG1zZykgaWYgKFpNX1NDQU5NU0dfTEVWID49IGx2KSBcCisgICAgICAgIHt6bV9kZWJ1Z19tc2cwKG1zZyk7fQorI2RlZmluZSB6bV9tc2cxX3NjYW4obHYsIG1zZywgdmFsKSBpZiAoWk1fU0NBTk1TR19MRVYgPj0gbHYpIFwKKyAgICAgICAge3ptX2RlYnVnX21zZzEobXNnLCB2YWwpO30KKyNkZWZpbmUgem1fbXNnMl9zY2FuKGx2LCBtc2csIHZhbCkgaWYgKFpNX1NDQU5NU0dfTEVWID49IGx2KSBcCisgICAgICAgIHt6bV9kZWJ1Z19tc2cyKG1zZywgdmFsKTt9CisKKyNkZWZpbmUgem1fbXNnMF90eChsdiwgbXNnKSBpZiAoWk1fVFhNU0dfTEVWID49IGx2KSBcCisgICAgICAgIHt6bV9kZWJ1Z19tc2cwKG1zZyk7fQorI2RlZmluZSB6bV9tc2cxX3R4KGx2LCBtc2csIHZhbCkgaWYgKFpNX1RYTVNHX0xFViA+PSBsdikgXAorICAgICAgICB7em1fZGVidWdfbXNnMShtc2csIHZhbCk7fQorI2RlZmluZSB6bV9tc2cyX3R4KGx2LCBtc2csIHZhbCkgaWYgKFpNX1RYTVNHX0xFViA+PSBsdikgXAorICAgICAgICB7em1fZGVidWdfbXNnMihtc2csIHZhbCk7fQorCisjZGVmaW5lIHptX21zZzBfcngobHYsIG1zZykgaWYgKFpNX1JYTVNHX0xFViA+PSBsdikgXAorICAgICAgICB7em1fZGVidWdfbXNnMChtc2cpO30KKyNkZWZpbmUgem1fbXNnMV9yeChsdiwgbXNnLCB2YWwpIGlmIChaTV9SWE1TR19MRVYgPj0gbHYpIFwKKyAgICAgICAge3ptX2RlYnVnX21zZzEobXNnLCB2YWwpO30KKyNkZWZpbmUgem1fbXNnMl9yeChsdiwgbXNnLCB2YWwpIGlmIChaTV9SWE1TR19MRVYgPj0gbHYpIFwKKyAgICAgICAge3ptX2RlYnVnX21zZzIobXNnLCB2YWwpO30KKworI2RlZmluZSB6bV9tc2cwX21tKGx2LCBtc2cpIGlmIChaTV9NTU1TR19MRVYgPj0gbHYpIFwKKyAgICAgICAge3ptX2RlYnVnX21zZzAobXNnKTt9CisjZGVmaW5lIHptX21zZzFfbW0obHYsIG1zZywgdmFsKSBpZiAoWk1fTU1NU0dfTEVWID49IGx2KSBcCisgICAgICAgIHt6bV9kZWJ1Z19tc2cxKG1zZywgdmFsKTt9CisjZGVmaW5lIHptX21zZzJfbW0obHYsIG1zZywgdmFsKSBpZiAoWk1fTU1NU0dfTEVWID49IGx2KSBcCisgICAgICAgIHt6bV9kZWJ1Z19tc2cyKG1zZywgdmFsKTt9CisKKyNkZWZpbmUgem1fbXNnMF9kZXMobHYsIG1zZykgaWYgKFpNX0RFU01TR19MRVYgPj0gbHYpIFwKKyAgICAgICAge3ptX2RlYnVnX21zZzAobXNnKTt9CisjZGVmaW5lIHptX21zZzFfZGVzKGx2LCBtc2csIHZhbCkgaWYgKFpNX0RFU01TR19MRVYgPj0gbHYpIFwKKyAgICAgICAge3ptX2RlYnVnX21zZzEobXNnLCB2YWwpO30KKyNkZWZpbmUgem1fbXNnMl9kZXMobHYsIG1zZywgdmFsKSBpZiAoWk1fREVTTVNHX0xFViA+PSBsdikgXAorICAgICAgICB7em1fZGVidWdfbXNnMihtc2csIHZhbCk7fQorCisjZGVmaW5lIHptX21zZzBfYnVmKGx2LCBtc2cpIGlmIChaTV9CVUZNU0dfTEVWID49IGx2KSBcCisgICAgICAgIHt6bV9kZWJ1Z19tc2cwKG1zZyk7fQorI2RlZmluZSB6bV9tc2cxX2J1ZihsdiwgbXNnLCB2YWwpIGlmIChaTV9CVUZNU0dfTEVWID49IGx2KSBcCisgICAgICAgIHt6bV9kZWJ1Z19tc2cxKG1zZywgdmFsKTt9CisjZGVmaW5lIHptX21zZzJfYnVmKGx2LCBtc2csIHZhbCkgaWYgKFpNX0JVRk1TR19MRVYgPj0gbHYpIFwKKyAgICAgICAge3ptX2RlYnVnX21zZzIobXNnLCB2YWwpO30KKworI2RlZmluZSB6bV9tc2cwX2luaXQobHYsIG1zZykgaWYgKFpNX0lOSVRNU0dfTEVWID49IGx2KSBcCisgICAgICAgIHt6bV9kZWJ1Z19tc2cwKG1zZyk7fQorI2RlZmluZSB6bV9tc2cxX2luaXQobHYsIG1zZywgdmFsKSBpZiAoWk1fSU5JVE1TR19MRVYgPj0gbHYpIFwKKyAgICAgICAge3ptX2RlYnVnX21zZzEobXNnLCB2YWwpO30KKyNkZWZpbmUgem1fbXNnMl9pbml0KGx2LCBtc2csIHZhbCkgaWYgKFpNX0lOSVRNU0dfTEVWID49IGx2KSBcCisgICAgICAgIHt6bV9kZWJ1Z19tc2cyKG1zZywgdmFsKTt9CisKKyNkZWZpbmUgWk1fTUFYX0FQX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgMiAgLyogTXVzdCA8PSA4ICovCisjZGVmaW5lIFpNX01BWF9XRFNfU1VQUE9SVCAgICAgICAgICAgICAgICAgIDYgIC8qIE11c3QgPD0gNiAqLworI2RlZmluZSBaTV9NQVhfU1RBX1NVUFBPUlQgICAgICAgICAgICAgICAgICAxNiAvKiBNdXN0IDw9IDY0ICovCisKKy8qIFNUQSB0YWJsZSBzdGF0ZSAqLworI2RlZmluZSBaTV9TVEFURV9BVVRIICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFpNX1NUQVRFX1BSRUFVVEggICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgWk1fU1RBVEVfQVNPQyAgICAgICAgICAgICAgICAgICAgICAgMworCisvKiBSYXRlIHNldCAqLworI2RlZmluZSBaTV9SQVRFX1NFVF9DQ0sgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFpNX1JBVEVfU0VUX09GRE0gICAgICAgICAgICAgICAgICAgIDEKKworLyogSFQgUFQgKi8KKyNkZWZpbmUgWk1fUFJFQU1CTEVfVFlQRV9NSVhFRF9NT0RFICAgICAgICAgMAorI2RlZmluZSBaTV9QUkVBTUJMRV9UWVBFX0dSRUVOX0ZJRUxEICAgICAgICAxCisKKy8qIEhUIGJhbmR3aWR0aCAqLworI2RlZmluZSBaTV9CQU5EV0lEVEhfMjBNSFogICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFpNX0JBTkRXSURUSF80ME1IWiAgICAgICAgICAgICAgICAgIDEKKworLyogTUlDIHN0YXR1cyAqLworI2RlZmluZSBaTV9NSUNfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFpNX01JQ19GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgIDEKKworLyogSUNWIHN0YXR1cyAqLworI2RlZmluZSBaTV9JQ1ZfU1VDQ0VTUyAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFpNX0lDVl9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgIDEKKworLyogZGVmaW5pdGlvbiBjaGVjayAqLworI2lmIChaTV9NQVhfQVBfU1VQUE9SVCA+IDgpCitkZWZpbml0aW9uIGVycm9yLCBaTV9NQVhfQVBfU1VQUE9SVCA+IDgKKyNlbmRpZgorI2lmIChaTV9NQVhfQVBfU1VQUE9SVCA+IDY0KQorZGVmaW5pdGlvbiBlcnJvciwgWk1fTUFYX1NUQV9TVVBQT1JUID4gNjQKKyNlbmRpZgorCisvKiAgVHJhbnNtaXNzaW9uIFJhdGUgaW5mb3JtYXRpb24gKi8KKworLyogV0xBTiBmcmFtZSBmb3JtYXQgKi8KKyNkZWZpbmUgWk1fUExDUF9IRUFERVJfU0laRSAgICAgICAgICA1CisjZGVmaW5lIFpNX0VUSEVSTkVUX0FERFJFU1NfTEVOR1RIICAgNgorI2RlZmluZSBaTV9USU1FU1RBTVBfT0ZGU0VUICAgICAgICAgIDAKKyNkZWZpbmUgWk1fQkVBQ09OX0lOVEVSVkFMX09GRlNFVCAgICA4CisjZGVmaW5lIFpNX0NBUEFCSUxJVFlfT0ZGU0VUICAgICAgICAxMAorCisvKiBSZWFzb24gQ29kZSAqLworLyogQW4gdW5zb2xpY2l0ZWQgbm90aWZpY2F0aW9uIG1hbmFnZW1lbnQgZnJhbWUgb2YgICAgICAgKi8KKy8qIHR5cGUgRGlzYXNzb2NhdGlvbiBvciBEZWF1dGhlbnRpY2F0aW9uIHdhcyBnZW5lcmF0ZWQuICovCisjaWZkZWYgWk1fUkVBU09OX0NPREUKKyNkZWZpbmUgWk1fV0xBTl9SRUFTT05fQ09ERV9VTlNQRUNJRklFRCAgIDEKKyNkZWZpbmUgWk1fV0xBTl9GUkFNRV9ESVNBU09DX0RFQVVUSF9SRUFTT05fQ09ERSAgMjQKKyNlbmRpZgorCitzdHJ1Y3QgenNXbGFuTWFuYWdlbWVudEZyYW1lSGVhZGVyCit7CisgICAgLy91OF90ICAgICAgcGxjcEhkcltaTV9QTENQX0hFQURFUl9TSVpFXTsKKyAgICB1OF90ICAgICAgICBmcmFtZUN0cmxbMl07CisgICAgdThfdCAgICAgICAgZHVyYXRpb25bMl07CisgICAgdThfdCAgICAgICAgZGFbWk1fRVRIRVJORVRfQUREUkVTU19MRU5HVEhdOworICAgIHU4X3QgICAgICAgIHNhW1pNX0VUSEVSTkVUX0FERFJFU1NfTEVOR1RIXTsKKyAgICB1OF90ICAgICAgICBic3NpZFtaTV9FVEhFUk5FVF9BRERSRVNTX0xFTkdUSF07CisgICAgdThfdCAgICAgICAgc2VxQ3RybFsyXTsKKyAgICB1OF90ICAgICAgICBib2R5WzFdOworfTsKKworc3RydWN0IHpzV2xhblByb2JlUnNwRnJhbWVIZWFkZXIKK3sKKyAgICAvL3U4X3QgICAgICBwbGNwSGRyW1pNX1BMQ1BfSEVBREVSX1NJWkVdOworICAgIHU4X3QgICAgICAgIGZyYW1lQ3RybFsyXTsKKyAgICB1OF90ICAgICAgICBkdXJhdGlvblsyXTsKKyAgICB1OF90ICAgICAgICBkYVtaTV9FVEhFUk5FVF9BRERSRVNTX0xFTkdUSF07CisgICAgdThfdCAgICAgICAgc2FbWk1fRVRIRVJORVRfQUREUkVTU19MRU5HVEhdOworICAgIHU4X3QgICAgICAgIGJzc2lkW1pNX0VUSEVSTkVUX0FERFJFU1NfTEVOR1RIXTsKKyAgICB1OF90ICAgICAgICBzZXFDdHJsWzJdOworICAgIHU4X3QgICAgICAgIHRpbWVTdGFtcFs4XTsKKyAgICB1OF90ICAgICAgICBiZWFjb25JbnRlcnZhbFsyXTsKKyAgICB1OF90ICAgICAgICBjYXBhYmlsaXR5WzJdOworICAgIHU4X3QgICAgICAgIHNzaWRbWk1fTUFYX1NTSURfTEVOR1RIICsgMl07ICAgLy8gRUlEKDEpICsgTGVuZ3RoKDEpICsgU1NJRCgzMikKK30gOworCisjZGVmaW5lIHpzV2xhbkJlYWNvbkZyYW1lSGVhZGVyIHpzV2xhblByb2JlUnNwRnJhbWVIZWFkZXIKKworc3RydWN0IHpzV2xhbkF1dGhGcmFtZUhlYWRlcgoreworICAgIC8vdThfdCAgICAgIHBsY3BIZHJbWk1fUExDUF9IRUFERVJfU0laRV07CisgICAgdThfdCAgICAgICAgZnJhbWVDdHJsWzJdOworICAgIHU4X3QgICAgICAgIGR1cmF0aW9uWzJdOworICAgIHU4X3QgICAgICAgIGFkZHJlc3MxW1pNX0VUSEVSTkVUX0FERFJFU1NfTEVOR1RIXTsKKyAgICB1OF90ICAgICAgICBhZGRyZXNzMltaTV9FVEhFUk5FVF9BRERSRVNTX0xFTkdUSF07CisgICAgdThfdCAgICAgICAgYWRkcmVzczNbWk1fRVRIRVJORVRfQUREUkVTU19MRU5HVEhdOworICAgIHU4X3QgICAgICAgIHNlcUN0cmxbMl07CisgICAgdTE2X3QgICAgICAgYWxnbzsKKyAgICB1MTZfdCAgICAgICBzZXE7CisgICAgdTE2X3QgICAgICAgc3RhdHVzOworICAgIHU4X3QgICAgICAgIGNoYWxsZW5nZVRleHRbMjU1XTsgLy8gdGhlIGZpcnN0IDIgYnl0ZXMgYXJlIGluZm9ybWF0aW9uIElELCBsZW5ndGgKK307CisKK3N0cnVjdCB6c1dsYW5Bc3NvRnJhbWVIZWFkZXIKK3sKKyAgICAvL3U4X3QgICAgICBwbGNwSGRyW1BMQ1BfSEVBREVSX1NJWkVdOworICAgIHU4X3QgICAgICAgIGZyYW1lQ3RybFsyXTsKKyAgICB1OF90ICAgICAgICBkdXJhdGlvblsyXTsKKyAgICB1OF90ICAgICAgICBhZGRyZXNzMVtaTV9FVEhFUk5FVF9BRERSRVNTX0xFTkdUSF07CisgICAgdThfdCAgICAgICAgYWRkcmVzczJbWk1fRVRIRVJORVRfQUREUkVTU19MRU5HVEhdOworICAgIHU4X3QgICAgICAgIGFkZHJlc3MzW1pNX0VUSEVSTkVUX0FERFJFU1NfTEVOR1RIXTsKKyAgICB1OF90ICAgICAgICBzZXFDdHJsWzJdOworICAgIHU4X3QgICAgICAgIGNhcGFiaWxpdHlbMl07CisgICAgdTE2X3QgICAgICAgc3RhdHVzOworICAgIHUxNl90ICAgICAgIGFpZDsKKyAgICAvL3U4X3QgICAgICAgIHN1cHBvcnRlZFJhdGVzWzEwXTsKK307CisKK3N0cnVjdCB6c0ZyYWcKK3sKKyAgICB6YnVmX3QqIGJ1ZlsxNl07CisgICAgdTE2X3QgYnVmVHlwZVsxNl07CisgICAgdTE2X3Qgc2VxWzE2XTsKKyAgICB1OF90IGZsYWdbMTZdOworCit9OworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBIYXJkd2FyZSByZWxhdGVkIGRlZmluaXRpb25zCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjZGVmaW5lIFpNX01BQ19SRUdfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAweDFjMzAwMAorCisjZGVmaW5lIFpNX01BQ19SRUdfQVRJTV9XSU5ET1cgICAgICAgICAgICAgICAgICAoWk1fTUFDX1JFR19CQVNFICsgMHg1MUMpCisjZGVmaW5lIFpNX01BQ19SRUdfQkNOX1BFUklPRCAgICAgICAgICAgICAgICAgICAoWk1fTUFDX1JFR19CQVNFICsgMHg1MjApCisjZGVmaW5lIFpNX01BQ19SRUdfUFJFVEJUVCAgICAgICAgICAgICAgICAgICAgICAoWk1fTUFDX1JFR19CQVNFICsgMHg1MjQpCisKKyNkZWZpbmUgWk1fTUFDX1JFR19NQUNfQUREUl9MICAgICAgICAgICAgICAgICAgIChaTV9NQUNfUkVHX0JBU0UgKyAweDYxMCkKKyNkZWZpbmUgWk1fTUFDX1JFR19NQUNfQUREUl9IICAgICAgICAgICAgICAgICAgIChaTV9NQUNfUkVHX0JBU0UgKyAweDYxNCkKKworI2RlZmluZSBaTV9NQUNfUkVHX0dST1VQX0hBU0hfVEJMX0wgICAgICAgICAgICAgKFpNX01BQ19SRUdfQkFTRSArIDB4NjI0KQorI2RlZmluZSBaTV9NQUNfUkVHX0dST1VQX0hBU0hfVEJMX0ggICAgICAgICAgICAgKFpNX01BQ19SRUdfQkFTRSArIDB4NjI4KQorCisjZGVmaW5lIFpNX01BQ19SRUdfQkFTSUNfUkFURSAgICAgICAgICAgICAgICAgICAoWk1fTUFDX1JFR19CQVNFICsgMHg2MzApCisjZGVmaW5lIFpNX01BQ19SRUdfTUFOREFUT1JZX1JBVEUgICAgICAgICAgICAgICAoWk1fTUFDX1JFR19CQVNFICsgMHg2MzQpCisjZGVmaW5lIFpNX01BQ19SRUdfUlRTX0NUU19SQVRFICAgICAgICAgICAgICAgICAoWk1fTUFDX1JFR19CQVNFICsgMHg2MzgpCisjZGVmaW5lIFpNX01BQ19SRUdfQkFDS09GRl9QUk9URUNUICAgICAgICAgICAgICAoWk1fTUFDX1JFR19CQVNFICsgMHg2M2MpCisjZGVmaW5lIFpNX01BQ19SRUdfUlhfVEhSRVNIT0xEICAgICAgICAgICAgICAgICAoWk1fTUFDX1JFR19CQVNFICsgMHg2NDApCisjZGVmaW5lIFpNX01BQ19SRUdfUlhfUEVfREVMQVkgICAgICAgICAgICAgICAgICAoWk1fTUFDX1JFR19CQVNFICsgMHg2NEMpCisKKyNkZWZpbmUgWk1fTUFDX1JFR19EWU5BTUlDX1NJRlNfQUNLICAgICAgICAgICAgIChaTV9NQUNfUkVHX0JBU0UgKyAweDY1OCkKKyNkZWZpbmUgWk1fTUFDX1JFR19TTklGRkVSICAgICAgICAgICAgICAgICAgICAgIChaTV9NQUNfUkVHX0JBU0UgKyAweDY3NCkKKyNkZWZpbmUgWk1fTUFDX1JFR19UWF9VTkRFUlJVTgkJICAgICAgICAgICAgKFpNX01BQ19SRUdfQkFTRSArIDB4Njg4KQorI2RlZmluZSBaTV9NQUNfUkVHX1JYX1RPVEFMCQkJICAgICAgICAgICAgKFpNX01BQ19SRUdfQkFTRSArIDB4NkEwKQorI2RlZmluZSBaTV9NQUNfUkVHX1JYX0NSQzMyCQkJICAgICAgICAgICAgKFpNX01BQ19SRUdfQkFTRSArIDB4NkE0KQorI2RlZmluZSBaTV9NQUNfUkVHX1JYX0NSQzE2CQkJICAgICAgICAgICAgKFpNX01BQ19SRUdfQkFTRSArIDB4NkE4KQorI2RlZmluZSBaTV9NQUNfUkVHX1JYX0VSUl9VTkkJCSAgICAgICAgICAgIChaTV9NQUNfUkVHX0JBU0UgKyAweDZBQykKKyNkZWZpbmUgWk1fTUFDX1JFR19SWF9PVkVSUlVOCQkgICAgICAgICAgICAoWk1fTUFDX1JFR19CQVNFICsgMHg2QjApCisjZGVmaW5lIFpNX01BQ19SRUdfUlhfRVJSX01VTAkJICAgICAgICAgICAgKFpNX01BQ19SRUdfQkFTRSArIDB4NkJDKQorI2RlZmluZSBaTV9NQUNfUkVHX1RYX1JFVFJZCQkJICAgICAgICAgICAgKFpNX01BQ19SRUdfQkFTRSArIDB4NkNDKQorI2RlZmluZSBaTV9NQUNfUkVHX1RYX1RPVEFMCQkJICAgICAgICAgICAgKFpNX01BQ19SRUdfQkFTRSArIDB4NkY0KQorCisKKyNkZWZpbmUgWk1fTUFDX1JFR19BQ0tfRVhURU5TSU9OICAgICAgICAgICAgICAgIChaTV9NQUNfUkVHX0JBU0UgKyAweDY5MCkKKyNkZWZpbmUgWk1fTUFDX1JFR19FSUZTX0FORF9TSUZTICAgICAgICAgICAgICAgIChaTV9NQUNfUkVHX0JBU0UgKyAweDY5OCkKKworI2RlZmluZSBaTV9NQUNfUkVHX1NMT1RfVElNRSAgICAgICAgICAgICAgICAgICAgKFpNX01BQ19SRUdfQkFTRSArIDB4NkYwKQorCisjZGVmaW5lIFpNX01BQ19SRUdfUk9MTF9DQUxMX1RCTF9MICAgICAgICAgICAgICAoWk1fTUFDX1JFR19CQVNFICsgMHg3MDQpCisjZGVmaW5lIFpNX01BQ19SRUdfUk9MTF9DQUxMX1RCTF9IICAgICAgICAgICAgICAoWk1fTUFDX1JFR19CQVNFICsgMHg3MDgpCisKKyNkZWZpbmUgWk1fTUFDX1JFR19BQzBfQ1cgICAgICAgICAgICAgICAgICAgICAgIChaTV9NQUNfUkVHX0JBU0UgKyAweEIwMCkKKyNkZWZpbmUgWk1fTUFDX1JFR19BQzFfQ1cgICAgICAgICAgICAgICAgICAgICAgIChaTV9NQUNfUkVHX0JBU0UgKyAweEIwNCkKKyNkZWZpbmUgWk1fTUFDX1JFR19BQzJfQ1cgICAgICAgICAgICAgICAgICAgICAgIChaTV9NQUNfUkVHX0JBU0UgKyAweEIwOCkKKyNkZWZpbmUgWk1fTUFDX1JFR19BQzNfQ1cgICAgICAgICAgICAgICAgICAgICAgIChaTV9NQUNfUkVHX0JBU0UgKyAweEIwQykKKyNkZWZpbmUgWk1fTUFDX1JFR19BQzRfQ1cgICAgICAgICAgICAgICAgICAgICAgIChaTV9NQUNfUkVHX0JBU0UgKyAweEIxMCkKKyNkZWZpbmUgWk1fTUFDX1JFR19BQzFfQUMwX0FJRlMgICAgICAgICAgICAgICAgIChaTV9NQUNfUkVHX0JBU0UgKyAweEIxNCkKKyNkZWZpbmUgWk1fTUFDX1JFR19BQzNfQUMyX0FJRlMgICAgICAgICAgICAgICAgIChaTV9NQUNfUkVHX0JBU0UgKyAweEIxOCkKKworI2RlZmluZSBaTV9NQUNfUkVHX1JFVFJZX01BWCAgICAgICAgICAgICAgICAgICAgKFpNX01BQ19SRUdfQkFTRSArIDB4QjI4KQorCisjZGVmaW5lIFpNX01BQ19SRUdfVFhPUF9OT1RfRU5PVUdIX0lORElDQVRJT04gICAoWk1fTUFDX1JFR19CQVNFICsgMHhCMzApCisKKyNkZWZpbmUgWk1fTUFDX1JFR19BQzFfQUMwX1RYT1AgICAgICAgICAgICAgICAgIChaTV9NQUNfUkVHX0JBU0UgKyAweEI0NCkKKyNkZWZpbmUgWk1fTUFDX1JFR19BQzNfQUMyX1RYT1AgICAgICAgICAgICAgICAgIChaTV9NQUNfUkVHX0JBU0UgKyAweEI0OCkKKworI2RlZmluZSBaTV9NQUNfUkVHX0FDS19UQUJMRSAgICAgICAgICAgICAgICAgICAgKFpNX01BQ19SRUdfQkFTRSArIDB4QzAwKQorCisjZGVmaW5lIFpNX01BQ19SRUdfQkNOX0FERFIgICAgICAgICAgICAgICAgICAgICAoWk1fTUFDX1JFR19CQVNFICsgMHhEODQpCisjZGVmaW5lIFpNX01BQ19SRUdfQkNOX0xFTkdUSCAgICAgICAgICAgICAgICAgICAoWk1fTUFDX1JFR19CQVNFICsgMHhEODgpCisKKyNkZWZpbmUgWk1fTUFDX1JFR19CQ05fUExDUCAgICAgICAgICAgICAgICAgICAgIChaTV9NQUNfUkVHX0JBU0UgKyAweEQ5MCkKKyNkZWZpbmUgWk1fTUFDX1JFR19CQ05fQ1RSTCAgICAgICAgICAgICAgICAgICAgIChaTV9NQUNfUkVHX0JBU0UgKyAweEQ5NCkKKworI2RlZmluZSBaTV9NQUNfUkVHX0JDTl9IVDEgICAgICAgICAgICAgICAgICAgICAgKFpNX01BQ19SRUdfQkFTRSArIDB4REEwKQorI2RlZmluZSBaTV9NQUNfUkVHX0JDTl9IVDIgICAgICAgICAgICAgICAgICAgICAgKFpNX01BQ19SRUdfQkFTRSArIDB4REE0KQorCisKKyNkZWZpbmUgWk1fUlhfU1RBVFVTX0lTX01JQ19GQUlMKHJ4U3RhdHVzKSByeFN0YXR1cy0+VGFpbC5EYXRhLkVycm9ySW5kaWNhdGlvbiAmIFpNX0JJVF82CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworI2lmZGVmIFpNX0VOQUJMRV9OQVRJVkVfV0lGSQorI2RlZmluZSBaTV84MDIxMV9GUkFNRV9IRUFERVJfTEVOICAgICAgICAgICAyNAorI2RlZmluZSBaTV84MDIxMV9GUkFNRV9UWVBFX09GRlNFVCAgICAgICAgICAzMCAgICAvLyBaTV84MDIxMV9GUkFNRV9IRUFERVJfTEVOICsgU05BUAorI2RlZmluZSBaTV84MDIxMV9GUkFNRV9JUF9PRkZTRVQgICAgICAgICAgICAzMiAgICAvLyBaTV84MDIxMV9GUkFNRV9IRUFERVJfTEVOICsgU05BUCArIFRZUEUKKyNlbHNlCisjZGVmaW5lIFpNXzgwMjExX0ZSQU1FX0hFQURFUl9MRU4gICAgICAgICAgIDE0CisjZGVmaW5lIFpNXzgwMjExX0ZSQU1FX1RZUEVfT0ZGU0VUICAgICAgICAgIDEyICAgIC8vIFpNXzgwMjExX0ZSQU1FX0hFQURFUl9MRU4gKyBTTkFQCisjZGVmaW5lIFpNXzgwMjExX0ZSQU1FX0lQX09GRlNFVCAgICAgICAgICAgIDE0ICAgIC8vIFpNXzgwMjExX0ZSQU1FX0hFQURFUl9MRU4gKyBTTkFQICsgVFlQRQorI2VuZGlmCisKKyNkZWZpbmUgWk1fQlNTX0lORk9fVkFMSURfQklUICAgICAgMHgwMQorI2RlZmluZSBaTV9CU1NfSU5GT19VUERBVEVEX0JJVCAgICAweDAyCisKKworCisKKworI2RlZmluZSBaTV9FUlJPUl9JTkRJQ0FUSU9OX1JYX1RJTUVPVVQgICAgICAweDAxCisjZGVmaW5lIFpNX0VSUk9SX0lORElDQVRJT05fT1ZFUlJVTiAgICAgICAgIDB4MDIKKyNkZWZpbmUgWk1fRVJST1JfSU5ESUNBVElPTl9ERUNSWVBUX0VSUk9SICAgMHgwNAorI2RlZmluZSBaTV9FUlJPUl9JTkRJQ0FUSU9OX0NSQzMyX0VSUk9SICAgICAweDA4CisjZGVmaW5lIFpNX0VSUk9SX0lORElDQVRJT05fQUREUl9OT1RfTUFUQ0ggIDB4MTAKKyNkZWZpbmUgWk1fRVJST1JfSU5ESUNBVElPTl9DUkMxNl9FUlJPUiAgICAgMHgyMAorI2RlZmluZSBaTV9FUlJPUl9JTkRJQ0FUSU9OX01JQ19FUlJPUiAgICAgICAweDQwCisKKyNkZWZpbmUgWk1fUlhNQUNfU1RBVFVTX01PRF9UWVBFX0NDSyAgICAgICAgMHgwMAorI2RlZmluZSBaTV9SWE1BQ19TVEFUVVNfTU9EX1RZUEVfT0ZETSAgICAgICAweDAxCisjZGVmaW5lIFpNX1JYTUFDX1NUQVRVU19NT0RfVFlQRV9IVF9PRkRNICAgIDB4MDIKKyNkZWZpbmUgWk1fUlhNQUNfU1RBVFVTX01PRF9UWVBFX0RMX09GRE0gICAgMHgwMworI2RlZmluZSBaTV9SWE1BQ19TVEFUVVNfVE9UQUxfRVJST1IgICAgICAgICAweDgwCisKKworCisKKworI2RlZmluZSBaTV9NQVhfTEVEX05VTUJFUiAgICAgICAyCisKKyNkZWZpbmUgWk1fTEVEX0RJU0FCTEVfTU9ERSAgICAgMHgwCisjZGVmaW5lIFpNX0xFRF9MSU5LX01PREUgICAgICAgIDB4MQorI2RlZmluZSBaTV9MRURfTElOS19UUl9NT0RFICAgICAweDIKKyNkZWZpbmUgWk1fTEVEX1RSX09OX01PREUgICAgICAgMHgzCisjZGVmaW5lIFpNX0xFRF9UUl9PRkZfTU9ERSAgICAgIDB4NAorCisjZGVmaW5lIFpNX0xFRF9DVFJMX0ZMQUdfQUxQSEEgICAgICAweDEKKworc3RydWN0IHpzTGVkU3RydWN0Cit7CisgICAgdTMyX3QgICBjb3VudGVyOworICAgIHUzMl90ICAgY291bnRlcjEwMG1zOworICAgIHUxNl90ICAgbGVkTGlua1N0YXRlOworICAgIHUxNl90ICAgbGVkTW9kZVtaTV9NQVhfTEVEX05VTUJFUl07CisgICAgdTMyX3QgICB0eFRyYWZmaWM7CisgICAgdTMyX3QgICByeFRyYWZmaWM7CisgICAgdThfdCAgICBMRURDdHJsVHlwZTsKKyAgICB1OF90ICAgIExFREN0cmxGbGFnOyAgICAgICAgIC8vIENvbnRyb2wgRmxhZyBmb3IgdmVuZG9ycworICAgIHU4X3QgICAgTEVEQ3RybEZsYWdGcm9tUmVnOyAgLy8gQ29udHJvbCBGbGFnIGZvciB2ZW5kb3JzIGluIHJlZ2lzdHJ5Cit9OworCisKKy8vSEFMKyBjYXBhYmlsaXR5IGJpdHMgZGVmaW5pdGlvbgorI2RlZmluZSBaTV9IUF9DQVBfMTFOICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSBaTV9IUF9DQVBfMTFOX09ORV9UWF9TVFJFQU0gICAgIDB4MgorI2RlZmluZSBaTV9IUF9DQVBfMkcgICAgICAgICAgICAgICAgICAgIDB4NAorI2RlZmluZSBaTV9IUF9DQVBfNUcgICAgICAgICAgICAgICAgICAgIDB4OAorCisjZW5kaWYgLyogI2lmbmRlZiBfV0xBTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL290dXMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTQ5ZDA4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvS2NvbmZpZwpAQCAtMCwwICsxLDMyIEBACitjb25maWcgT1RVUworCXRyaXN0YXRlICJBdGhlcm9zIE9UVVMgODAyLjExbiBVU0Igd2lyZWxlc3Mgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBXTEFOXzgwMjExICYmIE1BQzgwMjExCisJZGVmYXVsdCBOCisJLS0taGVscC0tLQorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIEF0aGVyb3MgODAyLjExbiBVU0IgaGFyZHdhcmU6CisJICAgICogVUI4MSAtIDJ4MiAyLjQgR0h6CisJICAgICogVUI4MiAtIDJ4MiAyLjQgR0h6IGFuZCA1IEdIegorCSAgICAqIFVCODMgLSAxeDIgMi40IEdIegorCisJICBUaGlzIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZGV2aWNlcyBjdXJyZW50bHkgb24gdGhlIG1hcmtldDoKKwkgIERsaW5rIERXQS0xNjBBMSwgTmV0Z2VhciBXTkRBMzEwMCBhbmQgV04xMTF2MiwgVFAtTGluaworCSAgVEwtV044MjFOLCBhbmQgQVZNIEZSSVRaIVdMQU4gTiBVU0IgU3RpY2suCisKKwkgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGl0cyBvd24gc3VwcGxpY2FudCBkcml2ZXIgZm9yCisJICB3cGFfc3VwcGxpY2FudCAwLjQuOC4gRm9yIHlvdXIgY29udmVuaWVuY2UgeW91IGNhbiBmaW5kIHRoZQorCSAgdGFyYmFsbCBoZXJlOgorCisJICBodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvbWNncm9mL290dXMvd3BhX3N1cHBsaWNhbnQtMC40Ljhfb3R1cy50YXIuYnoyCisKKwkgIEJlZm9yZSBjb21waWxpbmcgd3BhX3N1cHBsaWNhbnQsIGVuc3VyZSB5b3VyIC5jb25maWcgaGFzIGF0CisJICBsZWFzdCB0aGUgZm9sbG93aW5nOgorCQlDT05GSUdfV0lSRUxFU1NfRVhURU5TSU9OPXkKKwkJQ09ORklHX0VBUF9XU0M9eQorCQlDT05GSUdfV1NDX0lFPXkKKwkJQ09ORklHX0RSSVZFUl9XRVhUPXkKKwkJQ09ORklHX0RSSVZFUl9PVFVTPXkKKworCSAgQWZ0ZXIgYSBzdWNjZXNzZnVsIGNvbXBpbGUsIHlvdSBjYW4gdXNlIHRoZSBBdGhlcm9zIGRldmljZSBhcworCSAgc2hvd24gaW4gdGhlIGV4YW1wbGU6CisJICAkIHdwYV9zdXBwbGljYW50IC1Eb3R1cyAtaSA8YXRoZXJvcyBkZXZpY2UgZnJvbSBpZmNvbmZpZz4gLWMgL3BhdGgvdG8vd3BhX3N1cHBsaWNhbnQuY29uZiAtZAorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYmNjNWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9NYWtlZmlsZQpAQCAtMCwwICsxLDY3IEBACitvYmotJChDT05GSUdfT1RVUykJKz0gYXJ1c2JfbG54Lm8KKworRVhUUkFfQ0ZMQUdTICs9IC1EQU1BQworRVhUUkFfQ0ZMQUdTICs9IC1ER0NDSworRVhUUkFfQ0ZMQUdTICs9IC1ET0ZETQorRVhUUkFfQ0ZMQUdTICs9IC1EVFhRX0lOX0lTUgorRVhUUkFfQ0ZMQUdTICs9IC1EV0xBTl9IT1NUSUY9MCAjMDpVU0IsIDE6UENJCisKKyNUZXN0IE1vZGUKK0VYVFJBX0NGTEFHUyArPSAtRFpNX1VTQl9TVFJFQU1fTU9ERT0xCitFWFRSQV9DRkxBR1MgKz0gLURaTV9VU0JfVFhfU1RSRUFNX01PREU9MAorRVhUUkFfQ0ZMQUdTICs9IC1EWk1fUENJX0RNQV9URVNUPTAKK0VYVFJBX0NGTEFHUyArPSAtRFpNX0xBUkdFUEFZTE9BRF9URVNUPTAKK0VYVFJBX0NGTEFHUyArPSAtRFpNX0ZXX0xPT1BfQkFDSz0wCitFWFRSQV9DRkxBR1MgKz0gLURaTV9MSU5VWF9UUEM9MQorI0VYVFJBX0NGTEFHUyArPSAtRFpNX0RPTlRfQ09QWV9SWF9CVUZGRVIKKworRVhUUkFfQ0ZMQUdTICs9IC1EWk1fSE9TVEFQRF9TVVBQT1JUCisjRVhUUkFfQ0ZMQUdTICs9IC1EZlRYX0dBSU5fT0ZETT0wCisjRVhUUkFfQ0ZMQUdTICs9IC1EWk1fQ09ORklHX0JJR19FTkRJQU4gLURCSUdfRU5ESUFOCitFWFRSQV9DRkxBR1MgKz0gLURaTV9IQUxQTFVTX0xPQ0sKK0VYVFJBX0NGTEFHUyArPSAtRFpNX09UVVNfTElOVVhfUEhBU0VfMgorCithcnVzYl9sbngtb2JqcyA6PSBcCisJdXNiZHJ2Lm8gXAorCXpkdXNiLm8gXAorCWlvY3RsLm8gXAorCXdyYXBfYnVmLm8gXAorCXdyYXBfbWVtLm8gXAorCXdyYXBfZXYubyBcCisJd3JhcF91c2IubyBcCisJd3JhcF9wa3QubyBcCisJd3JhcF9kYmcubyBcCisJd3JhcF9taXMubyBcCisJd3JhcF9zZWMubyBcCisJd3dyYXAubyBcCisJODAyMTFjb3JlL2NjbWQubyBcCisJODAyMTFjb3JlL2NoYi5vIFwKKwk4MDIxMWNvcmUvY2luaXQubyBcCisJODAyMTFjb3JlL2NtbS5vIFwKKwk4MDIxMWNvcmUvY21tYXAubyBcCisJODAyMTFjb3JlL2NtbXN0YS5vIFwKKwk4MDIxMWNvcmUvY2Z1bmMubyBcCisJODAyMTFjb3JlL2NvaWQubyBcCisJODAyMTFjb3JlL2N0a2lwLm8gXAorCTgwMjExY29yZS9jdHhyeC5vIFwKKwk4MDIxMWNvcmUvY2ljLm8gXAorCTgwMjExY29yZS9jcHNtZ3IubyBcCisJODAyMTFjb3JlL2NzY2FubWdyLm8gXAorCTgwMjExY29yZS9yYXRlY3RybC5vIFwKKwk4MDIxMWNvcmUvbGVkbWdyLm8gXAorCTgwMjExY29yZS9hbXNkdS5vIFwKKwk4MDIxMWNvcmUvY3dtLm8gXAorCTgwMjExY29yZS9jYWdnLm8gXAorCTgwMjExY29yZS9xdWV1ZS5vIFwKKwk4MDIxMWNvcmUvZnJlcWN0cmwubyBcCisJODAyMTFjb3JlL2N3ZXAubyBcCisJaGFsL2hwcncubyBcCisJaGFsL2hwbWFpbi5vIFwKKwloYWwvaHB1c2IubyBcCisJaGFsL2hwcmVnLm8gXAorCWhhbC9ocGZ3dWluaXQubyBcCisJaGFsL2hwZndidS5vIFwKKwloYWwvaHBmdzIubyBcCisJaGFsL2hwREtmd3UubyBcCisJaGFsL2hwZndzcGl1Lm8gXAorCWhhbC9ocGFuaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL290dXMvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTEyMjkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvVE9ETwpAQCAtMCwwICsxLDkgQEAKK1RPRE86CisJLSBjaGVja3BhdGNoLnBsIGNsZWFudXBzCisJLSBzcGFyc2UgY2xlYW51cHMKKwktIHBvcnQgdG8gaW4ta2VybmVsIDgwMjExIHN0YWNrCisJLSBwcm9wZXIgbmV0d29yayBkZXZlbG9wZXIgbWFpbnRhaW5lcgorCitQbGVhc2Ugc2VuZCBhbnkgcGF0Y2hlcyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiBhbmQKK0x1aXMgUm9kcmlndWV6IDxMdWlzLlJvZHJpZ3VlekBBdGhlcm9zLmNvbT4gYW5kIHRoZQorb3R1cy1kZXZlbEBsaXN0cy5tYWR3aWZpLXByb2plY3Qub3JnIG1haWxpbmcgbGlzdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2FwZGJnLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9hcGRiZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZTJmNjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9hcGRiZy5jCkBAIC0wLDAgKzEsNDU3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTW9kdWxlIE5hbWUgOiBhcGRiZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBBYnN0cmFjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIERlYnVnIHRvb2xzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBOT1RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCisjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgorCisjZGVmaW5lIFpNX0lPQ1RMX1JFR19SRUFEICAgICAgICAgICAweDAxCisjZGVmaW5lIFpNX0lPQ1RMX1JFR19XUklURSAgICAgICAgICAweDAyCisjZGVmaW5lIFpNX0lPQ1RMX01FTV9EVU1QICAgICAgICAgICAweDAzCisjZGVmaW5lIFpNX0lPQ1RMX1JFR19EVU1QICAgICAgICAgICAweDA1CisjZGVmaW5lIFpNX0lPQ1RMX1RYRF9EVU1QICAgICAgICAgICAweDA2CisjZGVmaW5lIFpNX0lPQ1RMX1JYRF9EVU1QICAgICAgICAgICAweDA3CisjZGVmaW5lIFpNX0lPQ1RMX01FTV9SRUFEICAgICAgICAgICAweDBCCisjZGVmaW5lIFpNX0lPQ1RMX01FTV9XUklURSAgICAgICAgICAweDBDCisjZGVmaW5lIFpNX0lPQ1RMX0RNQV9URVNUICAgICAgICAgICAweDEwCisjZGVmaW5lIFpNX0lPQ1RMX1JFR19URVNUICAgICAgICAgICAweDExCisjZGVmaW5lIFpNX0lPQ1RMX1RFU1QgICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIFpNX0lPQ1RMX1RBTExZICAgICAgICAgICAgICAweDgxIC8vQ1dZYW5nKCspCisjZGVmaW5lIFpNX0lPQ1RMX1JUUyAgICAgICAgICAgICAgICAweEEwCisjZGVmaW5lIFpNX0lPQ1RMX01JWF9NT0RFICAgICAgICAgICAweEExCisjZGVmaW5lIFpNX0lPQ1RMX0ZSQUcgICAgICAgICAgICAgICAweEEyCisjZGVmaW5lIFpNX0lPQ1RMX1NDQU4gICAgICAgICAgICAgICAweEEzCisjZGVmaW5lIFpNX0lPQ1RMX0tFWSAgICAgICAgICAgICAgICAweEE0CisjZGVmaW5lIFpNX0lPQ1RMX1JBVEUgICAgICAgICAgICAgICAweEE1CisjZGVmaW5lIFpNX0lPQ1RMX0VOQ1JZUFRJT05fTU9ERSAgICAweEE2CisjZGVmaW5lIFpNX0lPQ1RMX0dFVF9UWENOVCAgICAgICAgICAweEE3CisjZGVmaW5lIFpNX0lPQ1RMX0dFVF9ERUFHR19DTlQgICAgICAweEE4CisjZGVmaW5lIFpNX0lPQ1RMX0RVUkFUSU9OX01PREUgICAgICAweEE5CisjZGVmaW5lIFpNX0lPQ1RMX1NFVF9BRVNfS0VZICAgICAgICAweEFBCisjZGVmaW5lIFpNX0lPQ1RMX1NFVF9BRVNfTU9ERSAgICAgICAweEFCCisjZGVmaW5lIFpNX0lPQ1RMX1NJR05BTF9TVFJFTkdUSCAgICAweEFDIC8vQ1dZYW5nKCspCisjZGVmaW5lIFpNX0lPQ1RMX1NJR05BTF9RVUFMSVRZICAgICAweEFEIC8vQ1dZYW5nKCspCisjZGVmaW5lIFpNX0lPQ1RMX1NFVF9QSUJTU19NT0RFICAgICAweEFFCisjZGVmaW5lCVpEQVBJT0NUTCAgICAgICAgICAgICAgICAgICBTSU9DREVWUFJJVkFURQorCitzdHJ1Y3QgemRhcF9pb2N0bCB7CisJdW5zaWduZWQgc2hvcnQgY21kOyAgICAgICAgICAgICAgICAvKiBDb21tYW5kIHRvIHJ1biAqLworCXVuc2lnbmVkIGludCAgIGFkZHI7ICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiB0aGUgZGF0YSBidWZmZXIgKi8KKwl1bnNpZ25lZCBpbnQgICB2YWx1ZTsgICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlciAqLworCXVuc2lnbmVkIGNoYXIgZGF0YVsweDEwMF07Cit9OworCisvKiBEZWNsYXJhdGlvbiBvZiBtYWNybyBhbmQgZnVuY3Rpb24gZm9yIGhhbmRsaW5nIFdFUCBLZXlzICovCisKKyNpZiAwCisKKyNkZWZpbmUgU0tJUF9FTEVNIHsgXAorICAgIHdoaWxlKGlzeGRpZ2l0KCpwKSkgXAorICAgICAgICBwKys7IFwKK30KKworI2RlZmluZSBTS0lQX0RFTElNRVRFUiB7IFwKKyAgICBpZigqcCA9PSAnOicgfHwgKnAgPT0gJyAnKSBcCisgICAgICAgIHArKzsgXAorfQorCisjZW5kaWYKKworY2hhciBoZXgoY2hhcik7Cit1bnNpZ25lZCBjaGFyIGFzY3RvaGV4KGNoYXIgKnN0cik7CisKK2NoYXIgKnByZ25hbWU7CisKK2ludCBzZXRfaW9jdGwoaW50IHNvY2ssIHN0cnVjdCBpZnJlcSAqcmVxKQoreworICAgIGlmIChpb2N0bChzb2NrLCBaREFQSU9DVEwsIHJlcSkgPCAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGlvY3RsKFNJT0NHSUZNQVApOiAlc1xuIiwKKyAgICAgICAgICAgICAgICBwcmduYW1lLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKworaW50IHJlYWRfcmVnKGludCBzb2NrLCBzdHJ1Y3QgaWZyZXEgKnJlcSkKK3sKKyAgICBzdHJ1Y3QgemRhcF9pb2N0bCAqemRyZXEgPSAwOworCisgICAgaWYgKCFzZXRfaW9jdGwoc29jaywgcmVxKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLy96ZHJlcSA9IChzdHJ1Y3QgemRhcF9pb2N0bCAqKXJlcS0+aWZyX2RhdGE7CisgICAgLy9wcmludGYoICJyZWcgPSAlNHgsIHZhbHVlID0gJTR4XG4iLCB6ZHJlcS0+YWRkciwgemRyZXEtPnZhbHVlKTsKKworICAgIHJldHVybiAwOworfQorCisKK2ludCByZWFkX21lbShpbnQgc29jaywgc3RydWN0IGlmcmVxICpyZXEpCit7CisgICAgc3RydWN0IHpkYXBfaW9jdGwgKnpkcmVxID0gMDsKKyAgICBpbnQgaTsKKworICAgIGlmICghc2V0X2lvY3RsKHNvY2ssIHJlcSkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qemRyZXEgPSAoc3RydWN0IHpkYXBfaW9jdGwgKilyZXEtPmlmcl9kYXRhOworICAgIHByaW50ZiggImR1bXAgbWVtIGZyb20gJXgsIGxlbmd0aCA9ICV4XG4iLCB6ZHJlcS0+YWRkciwgemRyZXEtPnZhbHVlKTsKKworICAgIGZvciAoaT0wOyBpPHpkcmVxLT52YWx1ZTsgaSsrKSB7CisgICAgICAgIHByaW50ZigiJTAyeCIsIHpkcmVxLT5kYXRhW2ldKTsKKyAgICAgICAgcHJpbnRmKCIgIik7CisKKyAgICAgICAgaWYgKChpPjApICYmICgoaSsxKSUxNiA9PSAwKSkKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9Ki8KKworICAgIHJldHVybiAwOworfQorCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgc29jazsKKyAgICBpbnQgYWRkciwgdmFsdWU7CisgICAgc3RydWN0IGlmcmVxIHJlcTsKKyAgICBjaGFyICphY3Rpb24gPSBOVUxMOworICAgIHN0cnVjdCB6ZGFwX2lvY3RsIHpkcmVxOworCisgICAgcHJnbmFtZSA9IGFyZ3ZbMF07CisKKyAgICBpZiAoYXJnYyA8IDMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIiVzOiB1c2FnZSBpcyBcIiVzIDxpZm5hbWU+IDxvcGVyYXRpb24+IFs8YWRkcmVzcz5dIFs8dmFsdWU+XVwiXG4iLAorICAgICAgICAgICAgICAgIHByZ25hbWUsIHByZ25hbWUpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwidmFsaWQgb3BlcmF0aW9uOiByZWFkLCB3cml0ZSwgbWVtLCByZWcsXG4iKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIiAgICAgICAgICAgICAgIDogdHhkLCByeGQsIHJtZW0sIHdtZW1cbiIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwiICAgICAgICAgICAgICAgOiBkbWF0LCByZWd0LCB0ZXN0XG4iKTsKKworICAgICAgICBmcHJpbnRmKHN0ZGVyciwiICAgIHNjYW4sIENoYW5uZWwgU2NhblxuIik7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCIgICAgcnRzIDxkZWNpbWFsPiwgU2V0IFJUUyBUaHJlc2hvbGRcbiIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwiICAgIGZyYWcgPGRlY2ltYWw+LCBTZXQgRnJhZ21lbnQgVGhyZXNob2xkXG4iKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIiAgICByYXRlIDwwLTI4PiwgMDpBVVRPLCAxLTQ6Q0NLLCA1LTEyOk9GRE0sIDEzLTI4OkhUXG4iKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIiAgICBUQkQgbWl4IDwwIG9yIDE+LCBTZXQgMSB0byBlbmFibGUgbWl4ZWQgbW9kZVxuIik7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCIgICAgZW5jLCA8MC0zPiwgMD0+T1BFTiwgMT0+V0VQNjQsIDI9PldFUDEyOCwgMz0+V0VQMjU2XG4iKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIiAgICBza2V5IDxrZXk+LCBTZXQgV0VQIGtleVxuIik7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCIgICAgdHhjbnQsIEdldCBUeFEgQ250XG4iKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIiAgICBkYWdjbnQsIEdldCBEZWFnZ3JlZ2F0ZSBDbnRcbiIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwiICAgIGR1cm1vZGUgPG1vZGU+LCBTZXQgRHVyYXRpb24gTW9kZSAwPT5IVywgMT0+U1dcbiIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwiICAgIGFlc2tleSA8dXNlcj4gPGtleT5cbiIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwiICAgIGFlc21vZGUgPG1vZGU+XG4iKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIiAgICB3bGFubW9kZSA8MCwxPiAwOlN0YXRpb24gbW9kZSwgMTpQSUJTUyBtb2RlXG4iKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIiAgICB0YWwgPDAsMT4sIEdldCBDdXJyZW50IFRhbGx5IEluZm8sIDA9PnJlYWQsIDE9PnJlYWQgYW5kIHJlc2V0XG4iKTsKKworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIHN0cmNweShyZXEuaWZyX25hbWUsIGFyZ3ZbMV0pOworICAgIHpkcmVxLmFkZHIgPSAwOworICAgIHpkcmVxLnZhbHVlID0gMDsKKworICAgIC8qIGEgc2lsbHkgcmF3IHNvY2tldCBqdXN0IGZvciBpb2N0bCgpbGluZyBpdCAqLworICAgIHNvY2sgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19SQVcsIElQUFJPVE9fUkFXKTsKKyAgICBpZiAoc29jayA8IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogc29ja2V0KCk6ICVzXG4iLCBhcmd2WzBdLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIGlmIChhcmdjID49IDQpCisgICAgeworICAgICAgICBzc2NhbmYoYXJndlszXSwgIiV4IiwgJmFkZHIpOworICAgIH0KKworICAgIGlmIChhcmdjID49IDUpCisgICAgeworICAgICAgICBzc2NhbmYoYXJndls0XSwgIiV4IiwgJnZhbHVlKTsKKyAgICB9CisKKyAgICB6ZHJlcS5hZGRyID0gYWRkcjsKKyAgICB6ZHJlcS52YWx1ZSA9IHZhbHVlOworCisgICAgaWYgKCFzdHJjbXAoYXJndlsyXSwgInJlYWQiKSkKKyAgICB7CisgICAgICAgIHpkcmVxLmNtZCA9IFpNX0lPQ1RMX1JFR19SRUFEOworICAgIH0KKyAgICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMl0sICJtZW0iKSkKKyAgICB7CisgICAgICAgIHpkcmVxLmNtZCA9IFpNX0lPQ1RMX01FTV9EVU1QOworICAgIH0KKyAgICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMl0sICJ3cml0ZSIpKQorICAgIHsKKyAgICAgICAgemRyZXEuY21kID0gWk1fSU9DVExfUkVHX1dSSVRFOworICAgIH0KKyAgICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMl0sICJyZWciKSkKKyAgICB7CisgICAgICAgIHpkcmVxLmNtZCA9IFpNX0lPQ1RMX1JFR19EVU1QOworICAgIH0KKyAgICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMl0sICJ0eGQiKSkKKyAgICB7CisgICAgICAgIHpkcmVxLmNtZCA9IFpNX0lPQ1RMX1RYRF9EVU1QOworICAgIH0KKyAgICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMl0sICJyeGQiKSkKKyAgICB7CisgICAgICAgIHpkcmVxLmNtZCA9IFpNX0lPQ1RMX1JYRF9EVU1QOworICAgIH0KKyAgICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMl0sICJybWVtIikpCisgICAgeworICAgICAgICB6ZHJlcS5jbWQgPSBaTV9JT0NUTF9NRU1fUkVBRDsKKyAgICB9CisgICAgZWxzZSBpZiAoIXN0cmNtcChhcmd2WzJdLCAid21lbSIpKQorICAgIHsKKyAgICAgICAgemRyZXEuY21kID0gWk1fSU9DVExfTUVNX1dSSVRFOworICAgIH0KKyAgICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMl0sICJkbWF0IikpCisgICAgeworICAgICAgICB6ZHJlcS5jbWQgPSBaTV9JT0NUTF9ETUFfVEVTVDsKKyAgICB9CisgICAgZWxzZSBpZiAoIXN0cmNtcChhcmd2WzJdLCAicmVndCIpKQorICAgIHsKKyAgICAgICAgemRyZXEuY21kID0gWk1fSU9DVExfUkVHX1RFU1Q7CisgICAgfQorICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJndlsyXSwgInRlc3QiKSkKKyAgICB7CisgICAgICAgIHpkcmVxLmNtZCA9IFpNX0lPQ1RMX1RFU1Q7CisgICAgfQorICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJndlsyXSwgInRhbCIpKQorICAgIHsKKyAgICAgICAgc3NjYW5mKGFyZ3ZbM10sICIlZCIsICZhZGRyKTsKKyAgICAgICAgemRyZXEuYWRkciA9IGFkZHI7CisgICAgICAgIHpkcmVxLmNtZCA9IFpNX0lPQ1RMX1RBTExZOworICAgIH0KKyAgICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMl0sICJydHMiKSkKKyAgICB7CisgICAgICAgIHNzY2FuZihhcmd2WzNdLCAiJWQiLCAmYWRkcik7CisgICAgICAgIHpkcmVxLmFkZHIgPSBhZGRyOworICAgICAgICB6ZHJlcS5jbWQgPSBaTV9JT0NUTF9SVFM7CisgICAgfQorICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJndlsyXSwgIm1peCIpKQorICAgIHsKKyAgICAgICAgemRyZXEuY21kID0gWk1fSU9DVExfTUlYX01PREU7CisgICAgfQorICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJndlsyXSwgImZyYWciKSkKKyAgICB7CisgICAgICAgIHNzY2FuZihhcmd2WzNdLCAiJWQiLCAmYWRkcik7CisgICAgICAgIHpkcmVxLmFkZHIgPSBhZGRyOworICAgICAgICB6ZHJlcS5jbWQgPSBaTV9JT0NUTF9GUkFHOworICAgIH0KKyAgICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMl0sICJzY2FuIikpCisgICAgeworICAgICAgICB6ZHJlcS5jbWQgPSBaTV9JT0NUTF9TQ0FOOworICAgIH0KKyAgICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMl0sICJza2V5IikpCisgICAgeworICAgICAgICB6ZHJlcS5jbWQgPSBaTV9JT0NUTF9LRVk7CisKKyAgICAgICAgaWYgKGFyZ2MgPj0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgY2hhciB0ZW1wWzI5XTsKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgaW50IGtleUxlbjsKKyAgICAgICAgICAgIGludCBlbmNUeXBlOworCisgICAgICAgICAgICBrZXlMZW4gPSBzdHJsZW4oYXJndlszXSk7CisKKyAgICAgICAgICAgIGlmIChrZXlMZW4gPT0gMTApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3NjYW5mKGFyZ3ZbM10sICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCIsICZ0ZW1wWzBdLCAmdGVtcFsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZ0ZW1wWzJdLCAmdGVtcFszXSwgJnRlbXBbNF0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoa2V5TGVuID09IDI2KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNzY2FuZihhcmd2WzNdLCAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCIsCisgICAgICAgICAgICAgICAgICAgICAgICAmdGVtcFswXSwgJnRlbXBbMV0sICZ0ZW1wWzJdLCAmdGVtcFszXSwgJnRlbXBbNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAmdGVtcFs1XSwgJnRlbXBbNl0sICZ0ZW1wWzddLCAmdGVtcFs4XSwgJnRlbXBbOV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgJnRlbXBbMTBdLCAmdGVtcFsxMV0sICZ0ZW1wWzEyXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChrZXlMZW4gPT0gNTgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3NjYW5mKGFyZ3ZbM10sICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCIsCisgICAgICAgICAgICAgICAgICAgICAgICAmdGVtcFswXSwgJnRlbXBbMV0sICZ0ZW1wWzJdLCAmdGVtcFszXSwgJnRlbXBbNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAmdGVtcFs1XSwgJnRlbXBbNl0sICZ0ZW1wWzddLCAmdGVtcFs4XSwgJnRlbXBbOV0sCisgICAgICAgICAgICAgICAgICAgICAgICAmdGVtcFsxMF0sICZ0ZW1wWzExXSwgJnRlbXBbMTJdLCAmdGVtcFsxM10sICZ0ZW1wWzE0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZ0ZW1wWzE1XSwgJnRlbXBbMTZdLCAmdGVtcFsxN10sICZ0ZW1wWzE4XSwgJnRlbXBbMTldLAorICAgICAgICAgICAgICAgICAgICAgICAgJnRlbXBbMjBdLCAmdGVtcFsyMV0sICZ0ZW1wWzIyXSwgJnRlbXBbMjNdLCAmdGVtcFsyNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAmdGVtcFsyNV0sICZ0ZW1wWzI2XSwgJnRlbXBbMjddLCAmdGVtcFsyOF0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBrZXkgbGVuZ3RoXG4iKTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgemRyZXEuYWRkciA9IGtleUxlbi8yOworCisgICAgICAgICAgICBmb3IoaT0wOyBpPHpkcmVxLmFkZHI7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6ZHJlcS5kYXRhW2ldID0gdGVtcFtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiRXJyb3IgOiBLZXkgcmVxdWlyZWQhXG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMl0sICJyYXRlIikpCisgICAgeworICAgICAgICBzc2NhbmYoYXJndlszXSwgIiVkIiwgJmFkZHIpOworCisgICAgICAgIGlmIChhZGRyID4gMjgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCByYXRlLCByYW5nZTowfjI4XG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgemRyZXEuYWRkciA9IGFkZHI7CisgICAgICAgIHpkcmVxLmNtZCA9IFpNX0lPQ1RMX1JBVEU7CisgICAgfQorICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJndlsyXSwgImVuYyIpKQorICAgIHsKKyAgICAgICAgc3NjYW5mKGFyZ3ZbM10sICIlZCIsICZhZGRyKTsKKworICAgICAgICBpZiAoYWRkciA+IDMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBlbmNyeXB0aW9uIG1vZGUsIHJhbmdlOjB+M1xuIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFkZHIgPT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgYWRkciA9IDU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYWRkciA9PSAzKQorICAgICAgICB7CisgICAgICAgICAgICBhZGRyID0gNjsKKyAgICAgICAgfQorCisgICAgICAgIHpkcmVxLmFkZHIgPSBhZGRyOworICAgICAgICB6ZHJlcS5jbWQgPSBaTV9JT0NUTF9FTkNSWVBUSU9OX01PREU7CisgICAgfQorICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJndlsyXSwgInR4Y250IikpCisgICAgeworICAgICAgICB6ZHJlcS5jbWQgPSBaTV9JT0NUTF9HRVRfVFhDTlQ7CisgICAgfQorICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJndlsyXSwgImRhZ2NudCIpKQorICAgIHsKKyAgICAgICAgc3NjYW5mKGFyZ3ZbM10sICIlZCIsICZhZGRyKTsKKworICAgICAgICBpZiAoYWRkciAhPSAwICYmIGFkZHIgIT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJUaGUgdmFsdWUgc2hvdWxkIGJlIDAgb3IgMVxuIik7CisgICAgICAgICAgICBleGl0KDApOworICAgICAgICB9CisKKyAgICAgICAgemRyZXEuYWRkciA9IGFkZHI7CisgICAgICAgIHpkcmVxLmNtZCA9IFpNX0lPQ1RMX0dFVF9ERUFHR19DTlQ7CisgICAgfQorICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJndlsyXSwgImR1cm1vZGUiKSkKKyAgICB7CisgICAgICAgIHNzY2FuZihhcmd2WzNdLCAiJWQiLCAmYWRkcik7CisKKyAgICAgICAgaWYgKGFkZHIgIT0gMCAmJiBhZGRyICE9IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVGhlIER1cmF0aW9uIG1vZGUgc2hvdWxkIGJlIDAgb3IgMVxuIik7CisgICAgICAgICAgICBleGl0KDApOworICAgICAgICB9CisKKyAgICAgICAgemRyZXEuYWRkciA9IGFkZHI7CisgICAgICAgIHpkcmVxLmNtZCA9IFpNX0lPQ1RMX0RVUkFUSU9OX01PREU7CisgICAgfQorICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJndlsyXSwgImFlc2tleSIpKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciB0ZW1wWzE2XTsKKyAgICAgICAgaW50IGk7CisKKyAgICAgICAgc3NjYW5mKGFyZ3ZbM10sICIlZCIsICZhZGRyKTsKKworICAgICAgICBzc2NhbmYoYXJndls0XSwgIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMngiLCAmdGVtcFswXSwgJnRlbXBbMV0sICZ0ZW1wWzJdLCAmdGVtcFszXSwgJnRlbXBbNF0sICZ0ZW1wWzVdLCAmdGVtcFs2XSwgJnRlbXBbN10sICZ0ZW1wWzhdLCAmdGVtcFs5XSwgJnRlbXBbMTBdLCAmdGVtcFsxMV0sICZ0ZW1wWzEyXSwgJnRlbXBbMTNdLCAmdGVtcFsxNF0sICZ0ZW1wWzE1XSk7CisKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTY7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgemRyZXEuZGF0YVtpXSA9IHRlbXBbaV07CisgICAgICAgIH0KKworICAgICAgICB6ZHJlcS5hZGRyID0gYWRkcjsKKyAgICAgICAgemRyZXEuY21kID0gWk1fSU9DVExfU0VUX0FFU19LRVk7CisgICAgfQorICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJndlsyXSwgImFlc21vZGUiKSkKKyAgICB7CisgICAgICAgIHNzY2FuZihhcmd2WzNdLCAiJWQiLCAmYWRkcik7CisKKyAgICAgICAgemRyZXEuYWRkciA9IGFkZHI7CisgICAgICAgIHpkcmVxLmNtZCA9IFpNX0lPQ1RMX1NFVF9BRVNfTU9ERTsKKyAgICB9CisgICAgZWxzZSBpZiAoIXN0cmNtcChhcmd2WzJdLCAid2xhbm1vZGUiKSkKKyAgICB7CisgICAgICAgIHNzY2FuZihhcmd2WzNdLCAiJWQiLCAmYWRkcik7CisKKyAgICAgICAgemRyZXEuYWRkciA9IGFkZHI7CisgICAgICAgIHpkcmVxLmNtZCA9IFpNX0lPQ1RMX1NFVF9QSUJTU19NT0RFOworICAgIH0KKyAgICBlbHNlCisgICAgeworCSAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGFjdGlvblxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgcmVxLmlmcl9kYXRhID0gKGNoYXIgKikmemRyZXE7CisgICAgc2V0X2lvY3RsKHNvY2ssICZyZXEpOworCitmYWlsOgorICAgIGV4aXQoMCk7Cit9CisKK3Vuc2lnbmVkIGNoYXIgYXNjdG9oZXgoY2hhciAqc3RyKQoreworICAgIHVuc2lnbmVkIGNoYXIgdmFsdWU7CisKKyAgICB2YWx1ZSA9IGhleCgqc3RyKSAmIDB4MGY7CisgICAgdmFsdWUgPSB2YWx1ZSA8PCA0OworICAgIHN0cisrOworICAgIHZhbHVlIHw9IGhleCgqc3RyKSAmIDB4MGY7CisKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK2NoYXIgaGV4KGNoYXIgdikKK3sKKyAgICBpZihpc2RpZ2l0KHYpKQorICAgICAgICByZXR1cm4gdiAtICcwJzsKKyAgICBlbHNlIGlmKGlzeGRpZ2l0KHYpKQorICAgICAgICByZXR1cm4gKHRvbG93ZXIodikgLSAnYScgKyAxMCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvYXRocl9jb21tb24uaCBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2F0aHJfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIwZjc4YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2F0aHJfY29tbW9uLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworLyogIE1vZHVsZSBOYW1lIDogYXRocl9jb21tb24uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQWJzdHJhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBXUEEgcmVsYXRlZCBmdW5jdGlvbiBhbmQgZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTk9URVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBQbGF0Zm9ybSBkZXBlbmRlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9BVEhSX0NPTU1PTl9ICisjZGVmaW5lIF9BVEhSX0NPTU1PTl9ICisKKyNkZWZpbmUgWkRfSU9DVExfV1BBCQkJKFNJT0NERVZQUklWQVRFICsgMSkKKyNkZWZpbmUgWkRfSU9DVExfUEFSQU0JCQkoU0lPQ0RFVlBSSVZBVEUgKyAyKQorI2RlZmluZSBaRF9JT0NUTF9HRVRXUEFJRQkJKFNJT0NERVZQUklWQVRFICsgMykKKyNkZWZpbmUgWkRfUEFSQU1fUk9BTUlORwkJMHgwMDAxCisjZGVmaW5lIFpEX1BBUkFNX1BSSVZBQ1kJCTB4MDAwMgorI2RlZmluZSBaRF9QQVJBTV9XUEEJCQkweDAwMDMKKyNkZWZpbmUgWkRfUEFSQU1fQ09VTlRFUk1FQVNVUkVTCTB4MDAwNAorI2RlZmluZSBaRF9QQVJBTV9EUk9QVU5FTkNSWVBURUQJMHgwMDA1CisjZGVmaW5lIFpEX1BBUkFNX0FVVEhfQUxHUwkJMHgwMDA2CisKKyNkZWZpbmUgWkRfQ01EX1NFVF9FTkNSWVBUX0tFWQkJMHgwMDAxCisjZGVmaW5lIFpEX0NNRF9TRVRfTUxNRQkJCTB4MDAwMgorI2RlZmluZSBaRF9DTURfU0NBTl9SRVEJCQkweDAwMDMKKyNkZWZpbmUgWkRfQ01EX1NFVF9HRU5FUklDX0VMRU1FTlQJMHgwMDA0CisjZGVmaW5lIFpEX0NNRF9HRVRfVFNDCQkJMHgwMDA1CisKKyNkZWZpbmUgWkRfRkxBR19TRVRfVFhfS0VZICAgICAgICAgICAgICAweDAwMDEKKworI2RlZmluZSBaRF9HRU5FUklDX0VMRU1FTlRfSERSX0xFTiBcCisoKGludCkgKCYoKHN0cnVjdCBhdGhyX3dsYW5fcGFyYW0gKikgMCktPnUuZ2VuZXJpY19lbGVtLmRhdGEpKQorCisjZGVmaW5lIFpEX0NSWVBUX0FMR19OQU1FX0xFTgkJMTYKKyNkZWZpbmUgWkRfTUFYX0tFWV9TSVpFCQkJMzIKKyNkZWZpbmUgWkRfTUFYX0dFTkVSSUNfU0laRQkJNjQKKworI2RlZmluZSBJRUVFODAyMTFfQUREUl9MRU4JCTYKKyNkZWZpbmUgSUVFRTgwMjExX01BWF9JRV9TSVpFCQkyNTYKKworI2lmZGVmIFpNX0VOQUxCRV9XQVBJCisjZGVmaW5lIFpNX0NNRF9XQVBJX1NFVFdBUEkgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFpNX0NNRF9XQVBJX0dFVFdBUEkgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIFpNX0NNRF9XQVBJX1NFVEtFWSAgICAgICAgICAgICAgMHgwMDAzCisjZGVmaW5lIFpNX0NNRF9XQVBJX0dFVEtFWSAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFpNX0NNRF9XQVBJX1JFS0VZICAgICAgICAgICAgICAgMHgwMDA1CisKKyNkZWZpbmUgWk1fV0FQSV9XQUlfUkVRVUVTVCAgICAgICAgICAgICAweDAwZjEKKyNkZWZpbmUgWk1fV0FQSV9VTklDQVNUX1JFS0VZICAgICAgICAgICAweDAwZjIKKyNkZWZpbmUgWk1fV0FQSV9TVEFfQUdJTkcgICAgICAgICAgICAgICAweDAwZjMKKyNkZWZpbmUgWk1fV0FQSV9NVUxUSV9SRUtFWSAgICAgICAgICAgICAweDAwZjQKKworI2RlZmluZSBaTV9XQVBJX0tFWV9TSVpFICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFpNX1dBUElfSVZfTEVOICAgICAgICAgICAgICAgICAgMTYKKyNlbmRpZiAvL1pNX0VOQUxCRV9XQVBJCisvKiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiAqLworCitzdHJ1Y3QgYXRocl93bGFuX3BhcmFtIHsKKwl1MzIgY21kOworCXU4IHN0YV9hZGRyW0VUSF9BTEVOXTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1OCBhbGdbWkRfQ1JZUFRfQUxHX05BTUVfTEVOXTsKKwkJCXUzMiBmbGFnczsKKwkJCXUzMiBlcnI7CisJCQl1OCBpZHg7CisJCQl1OCBzZXFbOF07IC8qIHNlcXVlbmNlIGNvdW50ZXIgKHNldDogUlgsIGdldDogVFgpICovCisJCQl1MTYga2V5X2xlbjsKKwkJCXU4IGtleVtaRF9NQVhfS0VZX1NJWkVdOworCQl9IGNyeXB0OworCQlzdHJ1Y3QgeworCQkJdTMyIGZsYWdzX2FuZDsKKwkJCXUzMiBmbGFnc19vcjsKKwkJfSBzZXRfZmxhZ3Nfc3RhOworCQlzdHJ1Y3QgeworCQkJdTggbGVuOworCQkJdTggZGF0YVtaRF9NQVhfR0VORVJJQ19TSVpFXTsKKwkJfSBnZW5lcmljX2VsZW07CisJCXN0cnVjdCB7CisjZGVmaW5lIE1MTUVfU1RBX0RFQVVUSCAwCisjZGVmaW5lIE1MTUVfU1RBX0RJU0FTU09DIDEKKwkJCXUxNiBjbWQ7CisJCQl1MTYgcmVhc29uX2NvZGU7CisJCX0gbWxtZTsKKwkJc3RydWN0IHsKKwkJCXU4IHNzaWRfbGVuOworCQkJdTggc3NpZFszMl07CisJCX0gc2Nhbl9yZXE7CisJfSB1OworfTsKKworc3RydWN0IGllZWU4MDIxMXJlcV93cGFpZSB7CisJdTggd3BhX21hY2FkZHJbSUVFRTgwMjExX0FERFJfTEVOXTsKKwl1OCB3cGFfaWVbSUVFRTgwMjExX01BWF9JRV9TSVpFXTsKK307CisKKyNpZmRlZiBaTV9FTkFMQkVfV0FQSQorc3RydWN0IGF0aHJfd2FwaV9wYXJhbSB7CisJdTE2IGNtZDsKKwl1MTYgbGVuOworCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTggc3RhX2FkZHJbRVRIX0FMRU5dOworCQkJdTggcmVzZXJ2ZWQ7CisJCQl1OCBrZXlpZDsKKwkJCXU4IGtleVtaTV9XQVBJX0tFWV9TSVpFXTsKKwkJfSBjcnlwdDsKKwkJc3RydWN0IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHU4IHdhcGlfcG9saWN5OworCQl9IGluZm87CisJfSB1OworfTsKKworc3RydWN0IGF0aHJfd2FwaV9zdGFfaW5mbworeworCXUxNgltc2dfdHlwZTsKKwl1MTYJZGF0YWxlbjsKKyAgICAJdTgJc3RhX21hY1tFVEhfQUxFTl07CisJdTgJcmVzZXJ2ZV9kYXRhWzJdOworICAgIAl1OAlnc25bWk1fV0FQSV9JVl9MRU5dOworCXU4CXdpZVsyNTZdOworfTsKKyNlbmRpZiAvL1pNX0VOQUxCRV9XQVBJCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocERLZnd1LmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBES2Z3dS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NGM2MmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBES2Z3dS5jCkBAIC0wLDAgKzEsODMyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICIuLi84MDIxMWNvcmUvY3ByZWNvbXAuaCIKKworY29uc3QgdTMyX3QgemNES0Z3SW1hZ2VbXSA9IHsKKzB4MDAwOTAwMEIsIDB4NEYyMjJGRTYsIDB4REUzRTdGRkMsIDB4RTExNEQ3M0UsCisweDFFMTNENDNFLCAweDFFNEM0NzBCLCAweDAwMDlCMDE3LCAweDk1NkVFNjAwLAorMHhDODQwNjBFMiwgMHgyRjAyOEYwMywgMHg4RkY5MzY1MiwgMHhENDM4NzYwMSwKKzB4NEUwQkRFMzgsIDB4RDQzODAwMDksIDB4MDAwOTRFMEIsIDB4NEUwQkQ0MzcsCisweDdGMDQwMDA5LCAweEEwMzY0RjI2LCAweDRGMjI2RUY2LCAweDQxMEJEMTM0LAorMHhENDM0MDAwOSwgMHgwMDA5NDQwQiwgMHg0NTBCRDUzMywgMHhENzMzMDAwOSwKKzB4RDIzM0UxRkYsIDB4MjcxMjYxMUQsIDB4RDQzMjUwMjksIDB4RTFGRkNCMDEsCisweDEyMDlFNTAxLCAweDEyMTEyMjEyLCAweEQ1MkYyNDUyLCAweEQyMkY5NzQwLAorMHhFNzAwMjU3MiwgMHhENDJGRDEyRSwgMHgyMjcwRDYyRiwgMHgyMTcyRTIwMSwKKzB4MjYyMDI0MjAsIDB4RTRGRkQ2MkQsIDB4RTYwMDI2NDEsIDB4RTEwNEQ1MkMsCisweDYwNjM2NjZELCAweDYyNkQ3NjAxLCAweDMyMTI0MDAwLCAweDA1NDU4RkY4LAorMHgwMDBCNEYyNiwgMHhFQUM4MDAwOSwgMHhEQjI2NkFBQywgMHhERDI3REMyNiwKKzB4RDgyOERFMjcsIDB4NEMwQkU5MDEsIDB4NEQwQjAwMDksIDB4NEUwQjAwMDksCisweDYwQjIwMDA5LCAweDg5MDc4ODAxLCAweDYyNDJENDIzLCAweDg5MDMzMkE2LAorMHg2MDUwRDUyMiwgMHg4QkVFODgwMSwgMHgyQjkyRDQxRiwgMHgyNjY4NjY0MiwKKzB4NDgwQjg5RTksIDB4RDUxRDAwMDksIDB4QUZFNEUyMDAsIDB4MjcxMDI1MjAsCisweDAwMDAwRkEwLCAweDAwMUMwMDFDLCAweDAwMjAwRUQ0LCAweDAwMDBCMzhFLAorMHgwMDIwMkY5MCwgMHgwMDIwMTM1NiwgMHgwMDIwMkY5QywgMHgwMDIwMkZCNCwKKzB4MDAyMDEzMTQsIDB4MDAyMDE0MTIsIDB4MDAyMDBFRjgsIDB4MDAxQzM1MTAsCisweDAwMUMzNjI0LCAweDAwMUUyMTJDLCAweDAwMjAyRjAwLCAweDAwMjAyQTlDLAorMHgwMDIwMkYwOCwgMHgwMDIwMkYxNCwgMHgwMDIwMkYyMCwgMHgwMDIwMkYyMiwKKzB4MDAyMDJGMjYsIDB4MDAxQzEwMjgsIDB4MDAyMDEyMjAsIDB4MDAyMDI5NEMsCisweDAwMjAxRDEwLCAweDAwMjAxRUM4LCAweDAwMjAzMjIwLCAweDAwMjAyRjI0LAorMHgyRkI2MkY5NiwgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwgMHhERTk0N0Y4MCwKKzB4NjFFMEUwMjQsIDB4MEYxNEQ0OTMsIDB4NzEwMTYxRTMsIDB4RDc5MjYyMTAsCisweDQ3MEJFMDI4LCAweEQ1OTEwRjI0LCAweDAwMDk0NTBCLCAweDZEMDMyMDA4LAorMHgxRjBCOEYxMSwgMHhENDhGREM4RSwgMHhERDhGNjdDMCwgMHg2NTdDNEQwQiwKKzB4REQ4RkQxOEUsIDB4NkI5QzY5MTAsIDB4NDIwODYyQjMsIDB4MzJCODQyMDgsCisweDNEMkM0MjA4LCAweEUwMjgxRkRCLCAweEU1ODAwNEZDLCAweDYwNEM2NkUyLAorMHgzMDUwNjU1QywgMHgyRDYyOEYxMywgMHgwMUZDRTAyNCwgMHg2NDFDRTUwMCwKKzB4NjI1RERFODQsIDB4OEIwMTMyNDMsIDB4MDAwOUEzOUUsIDB4Njc1MzY1NUQsCisweDYwNzAzN0VDLCAweDM5REM2OTUzLCAweEFGRjI3NTAxLCAweDIwMDg4MDk0LAorMHhFMDI0OEIxMywgMHhFNTAwMDFGQywgMHhBMDA5REU3QSwgMHg2NTVENjQxQywKKzB4MzJFQzYyNTMsIDB4NkM1MzZCMjIsIDB4M0NEQzY3QjIsIDB4NzUwNDFDNzEsCisweDMyNDM2MjVELCAweEEzN0Y4QkYzLCAweDg4MDEyRDEwLCAweEUwMjQ4QjE2LAorMHhFNDAwMDFGQywgMHg2NzFDMkQ0MCwgMHg2MjREREU2RSwgMHg4QjAxMzI3MywKKzB4MDAwOUEzNzIsIDB4NkNFMzY0NEQsIDB4N0MwNDY5NDMsIDB4MzlFQzZCNDMsCisweDY1OTIzQkNDLCAweDc0MDg2REIyLCAweDI1RDJBRkVGLCAweDhCMTk4ODA0LAorMHgwMUZDRTAyNCwgMHgyRDcwRTcwMCwgMHgxRkQ4NkQxQywgMHg2MjdEREU2MSwKKzB4OEIwMTMyRDMsIDB4MDAwOUEzNTgsIDB4NkI3MzY3N0QsIDB4M0JFQzYxRTMsCisweDcxMDQ2NEIyLCAweDNDMUM2QzczLCAweDY5NDI2NUMyLCAweDI5NTk3NzA4LAorMHgyNDkyQUZFRCwgMHg4QjE4ODgwNSwgMHgwMUZDRTAyNCwgMHgyRDQwRTQwMCwKKzB4REU1NDY3MUMsIDB4MzI3MzYyNEQsIDB4QTMzRDhCMDEsIDB4NjQ0RDAwMDksCisweDZCRTM2RDQzLCAweDY1RDIzREVDLCAweDYxNDM3QjA0LCAweDZDMTIzMUJDLAorMHg3NDA4Njk1MiwgMHhBRkVEMjlDQiwgMHg4ODMxMjU5MiwgMHhERTRBOEIyMCwKKzB4NjVFNkRCNEEsIDB4NjFFNkRDNEEsIDB4NjdFMkQ5NEEsIDB4NjJFMjdFMDQsCisweDFGRUM3RUU4LCAweDdFMDQ2NEUyLCAweDZFRTIxRkVELCAweDVCRkQyQkUwLAorMHg2MEIyN0IwNCwgMHhDOTAxMUZCRSwgMHg2QkIyMkMwMCwgMHgyOUIwNEIwOSwKKzB4REM0MTJGMjYsIDB4NjYxMzRDMEIsIDB4RTIwMDdGMDQsIDB4MkQyMEEzMEMsCisweDhCMjE4ODMwLCAweEQ5MzlERTM4LCAweEUwNjQ2NUU2LCAweDcyMDQ2MkUzLAorMHg2NzI2NjZFMiwgMHg2RTIzREMzNiwgMHg2MjIyN0VFOCwgMHg2QkUyNjFFNiwKKzB4MjlCMDFGRUYsIDB4N0UwNDBGMTYsIDB4QzkwMTYwRTIsIDB4NkVFMjJDMDAsCisweDRFMDlEQzMwLCAweDJGMjYyQ0UwLCAweEQxMzBFMDY4LCAweDA0RkU0MTBCLAorMHhFMjAwN0YwNCwgMHgyRDIwQTJFOCwgMHg4QjA1ODgzMywgMHg0RTBCREUyQywKKzB4RTEwMDAwMDksIDB4MkQxMEEyRTAsIDB4ODkwMTg4MjgsIDB4MDAwOUExMDYsCisweEUxNDNERTIwLCAweEUwNDA2MkUxLCAweDMyMTc2MjJELCAweDBGRTY4RjA0LAorMHg2MDIzRTI0MCwgMHgyNjIxMDZGRSwgMHg4QjAxMzIxNywgMHgwMDA5QTBFRiwKKzB4MDJGRUUwNDAsIDB4ODUyMUU0MDEsIDB4OEIwMTMwNDYsIDB4MDAwOUEwRTcsCisweEU1MDFFMDQwLCAweDJENTAwN0ZFLCAweDY0NzFCMkM3LCAweDA5RkVFMDQwLAorMHg2MjkxRTE0MywgMHg2NTJERTA2OCwgMHg4RDZCMzUxNywgMHhFNjQwMEY1NiwKKzB4OEIyNzM1NjMsIDB4RTA0OEU2MDAsIDB4RTExQTBGNjUsIDB4NzJDMEEwMzEsCisweDAwMTE3ODAwLCAweDAwMjAyRkI4LCAweDAwMjAxMzU2LCAweDAwMjAyNDgwLAorMHgwMDIwMkYxQSwgMHgwMDIwMkZCQywgMHgwMDIwMTNBMiwgMHgwMDIwMkYxOSwKKzB4MDAyMDJCNDAsIDB4MDAxMTc4MDQsIDB4MDAxMTc4MTAsIDB4MDAyMDJGMTUsCisweDAwMjAyRjE2LCAweDAwMjAyRjE3LCAweDAwMjAwQjg0LCAweDAwMjAwQkQ4LAorMHgwMDIwMEJENCwgMHg0MTIxNjE1MywgMHg0MTIxNDEyMSwgMHg0MTIxNDEyMSwKKzB4NDUyMTQ1MjEsIDB4NjA1MzQ1MjEsIDB4NjYwM0M5MDMsIDB4MEY2NUUwNDgsCisweEUwMDc3MTE4LCAweEUwNDQyMjA5LCAweDY0MUQwRjI1LCAweDY1RjNFMDRDLAorMHgwRjQ2QjMxNCwgMHgwNEZERTA0OCwgMHgwQkZERTA0NCwgMHg2MUJENjc0RCwKKzB4NDEwODQ3MDgsIDB4MEYxNkUwNTAsIDB4RDI5MzYwNzMsIDB4NDIwQjA5RkUsCisweDZDMDdFMDBGLCAweDYwNzMyOUM5LCAweEUwNDAwRjk2LCAweDY1RjMwRUZFLAorMHg2RDBEODVFMiwgMHgwMUZFRTA1MCwgMHg2MEQzNDIwQiwgMHg2MDczMjkwQiwKKzB4RTA0QzBGOTYsIDB4MDRGRUIyRDksIDB4MDZGRUUwNDAsIDB4NjI2MUUwNjgsCisweDBGNTY2NTJELCAweDM1NjNFNjQwLCAweEUwMDA4OTRFLCAweDYwMjM4MUY4LAorMHg0MDA4QzkwMywgMHg2QjAzNDAwMCwgMHhFMDU0NjEwMywgMHhFMDU4MEZCNiwKKzB4RUNGRkREN0QsIDB4NkNDQzBGRjYsIDB4MEZENkUwNkMsIDB4NEQwQjYwQzMsCisweDQyMjE2MjUzLCAweDQyMjE0MjIxLCAweDY0MjM0MjIxLCAweDMyNEM0MjAwLAorMHhFMDVDNkUwNywgMHg0NTIxNDIwMCwgMHhFMDQwMEZFNiwgMHgwQkZFNDUyMSwKKzB4QzkwMzYwNTMsIDB4MzBGQzQwMDgsIDB4NkQwMzdCMDYsIDB4ODVGODFGMDUsCisweDZDMkQxRkI3LCAweDFGQzY2RTAzLCAweDBGQzZFMDYwLCAweDA1RkVFMDU4LAorMHg2NEMzQjJCNCwgMHgzM0ZDRTM1NCwgMHg1NjMyNjJEMiwgMHgyMjY5NjEzMiwKKzB4NjdCNDJEMjIsIDB4NDkwQjU5MzYsIDB4MjIwQjYwN0MsIDB4MDVGRUUwNTgsCisweDY0QzMyRDIyLCAweDdFMDFCMjg5LCAweEU3MDY2MkVELCAweDhGRTMzMjczLAorMHhFMDQwN0MwMSwgMHg2MjYxMDZGRSwgMHgwNkZFRTA0MCwgMHg4NTYxNDIwMCwKKzB4MzAyQzc2MEMsIDB4NjEwMzcwMUIsIDB4NjRGM0U1MDAsIDB4NzUwMUU3MDQsCisweDZCNUQ2OTY2LCAweDI0OTIzQjczLCAweDc0MDQ4RkY5LCAweEIyNkM2NUYzLAorMHhFMDQwNjQxRCwgMHhCMjA1MDZGRSwgMHhBMURENjQ2MSwgMHhENDRGMDAwOSwKKzB4RTIwMUQ3NEYsIDB4MkQyMDQ3MEIsIDB4MDAwOUExRDYsIDB4OEIwNzg4MjksCisweEVDMDBERTRDLCAweDYxRTIyREMwLCAweDY0MURCMUQ3LCAweDAwMDlBMUNDLAorMHg2MjJDRTI4MSwgMHg4QjAxMzAyMCwgMHgwMDA5QTExOCwgMHgwNkZDRTAyOCwKKzB4RTY4MjYyNkMsIDB4MzI2MDY2NkMsIDB4QTBFRThCMDEsIDB4RTY4MzAwMDksCisweDMyNjA2NjZDLCAweEEwREM4QjAxLCAweEU2OTAwMDA5LCAweDMyNjA2NjZDLAorMHhBMEQwOEIwMSwgMHhFNjkxMDAwOSwgMHgzMjYwNjY2QywgMHhBMEI5OEIwMSwKKzB4RTZCMDAwMDksIDB4MzI2MDY2NkMsIDB4QTA3RjhCMDEsIDB4RTZCQjAwMDksCisweDMyNjA2NjZDLCAweEU2OTI4OTIwLCAweDMyNjA2NjZDLCAweEU0MDA4QjE0LAorMHhFQjA0RDUzMSwgMHg1MjUxNjY1MiwgMHg4QjA3MzYyMCwgMHg2MjRENzQwMSwKKzB4OEZGNzMyQjcsIDB4RTYwMDc1MDgsIDB4NTJGQkEwMDIsIDB4RTYwMTUyRkIsCisweEU2MDQxMjYxLCAweDIyNjBBMTg4LCAweEQyMjlENDI4LCAweEQ0Mjk2NTQyLAorMHgwMDA5NDIwQiwgMHgwMDA5QTE4MCwgMHhFMTAwRTY3MCwgMHg2MDEzMzZGQywKKzB4RTAyNDgxNjIsIDB4MEJGQ0QyMUYsIDB4NkJCQzY3MjIsIDB4MjY3MjdCRkMsCisweEVCMDQxNkIyLCAweDA2RkVFMDc4LCAweDMyNjM2MjFELCAweEExNkI4QjAxLAorMHhERTFEMDAwOSwgMHgzMUVDNjExRCwgMHhENDFDNkUxMiwgMHg0MTBCRDExNCwKKzB4RTA3MDAwMDksIDB4NDUwQkQ1MUEsIDB4RDQxQTA0RkUsIDB4NDIwQkQyMTAsCisweEQyMTcwMDA5LCAweDY0RTM0MjBCLCAweEQ2MERENDE3LCAweDAwMDk0NjBCLAorMHgwNUZFRTA3MCwgMHgwMUZERTA3NCwgMHg2MTFERTYwMCwgMHg2MjUzMzUxQywKKzB4MzI2QzY2NkQsIDB4MjJFMDc2MDEsIDB4MzJCMzYyNkQsIDB4NEUxOThGRjcsCisweEUwNzQ3MTA0LCAweDBGMTVBRkNFLCAweDAwMjAyOUY4LCAweDAwMjAyRkRDLAorMHgwMDIwMTM1NiwgMHgwMDExNzgwNCwgMHgwMDIwMkIxMCwgMHgwMDExNzgwMCwKKzB4MDAyMDEzQTIsIDB4MDAyMDMwMTQsIDB4MDAxMTc4MDgsIDB4MDAyMDJGRjQsCisweDAwMjAxMzlBLCAweDAwMjAzMDA4LCAweDAwMjAzMDEwLCAweDAyRkNFMDI0LAorMHg2NzJDRTA3QywgMHhFQzAwMEY3NiwgMHhFMDdDRUIwNCwgMHg2MkNEMDdGRSwKKzB4OEIwMTMyNzMsIDB4MDAwOUExMTgsIDB4NkNDREQ3QjksIDB4MzU3QzY1QzMsCisweDYyQzM3NzA0LCAweEQ0QjczMjdDLCAweDZENTJEN0I3LCAweDZFMjI0NzBCLAorMHg0NzBCRDdCNiwgMHhENEI2NjREMywgMHg0MjBCRDJCMywgMHhEMkIzMDAwOSwKKzB4NjRFMzQyMEIsIDB4RDZCMEQ0QjMsIDB4MDAwOTQ2MEIsIDB4NjdEM0U2MDAsCisweDM3NkM2NjZELCAweDYyNkQ3NjAxLCAweDI3RTAzMkIzLCAweDRFMTk4RkY3LAorMHg3QzA4QUZEMywgMHg2MjEyRDFBNiwgMHgyMjI4NjIyQywgMHhEMkFBOEIwNCwKKzB4MDAwOTQyMEIsIDB4MDAwOUEwMDMsIDB4NDIwQkQyQTgsIDB4NTZGQjAwMDksCisweEEwRTFFMjAwLCAweEIxQTYyNjIwLCAweDU2RkIwMDA5LCAweEEwREJFMjAwLAorMHg1MkZCMjYyMCwgMHhFNTAwRDY5QSwgMHg2NTYyMjI1MCwgMHg3NjA0RDJBMCwKKzB4NjI2MjIyNTIsIDB4QTBDRkQ2OUYsIDB4NTZGQjI2MjAsIDB4MjYxMEUxMjQsCisweDUyMTdEMTlELCAweDUyMTgxNjIxLCAweDUyMTkxNjIyLCAweDUyMUExNjIzLAorMHg1NTFCMTYyNCwgMHgxNjU1RTIwMCwgMHgxNjU2NTUxQywgMHgxNjU3NTUxRCwKKzB4MTY1ODU1MUUsIDB4MTY1OTU1MUYsIDB4MTEyODExMjcsIDB4MTEyQTExMjksCisweDExMkMxMTJCLCAweDExMkUxMTJELCAweDExMkZBMEFFLCAweEQ2OEZEMThFLAorMHg2MjYyRTA0MCwgMHg3NjA0NjUxMiwgMHgyMTUyMzUyQywgMHg1NTExNjI2NiwKKzB4MTE1MTM1MkMsIDB4NjI2MjY1NjMsIDB4NzUwODU2MTIsIDB4MTE2MjM2MkMsCisweDU2MTM2MjUyLCAweDM2MkM3NUVDLCAweDYyNTIxMTYzLCAweDc1MTA1NjE0LAorMHgxMTY0MzYyQywgMHg2MjUyNjY1MywgMHg3NjEwNTUxNSwgMHgxMTU1MzUyQywKKzB4NTYxNjYyNjIsIDB4MzYyQ0Q1N0UsIDB4NjI1NjExNjYsIDB4MzYyQzU2MTcsCisweDY2NTMxMTY3LCAweDU1MTg2MjUyLCAweDM1MkM3NjA0LCAweDYyNjYxMTU4LAorMHgzNTJDNTUxOSwgMHg2NTYzMTE1OSwgMHg1NjFBNjI2MiwgMHgzNjJDNzUwNCwKKzB4NjI1MjExNkEsIDB4NzUwNDU2MUIsIDB4MTE2QjM2MkMsIDB4NTYxQzYyNTYsCisweDExNkMzNjJDLCAweDU2MUQ2MjU2LCAweDExNkQzNjJDLCAweDYyNTI2NjUzLAorMHg3NjA0NTUxRSwgMHgxMTVFMzUyQywgMHg1NjFGNjI2MiwgMHgzNjJDRDU2OSwKKzB4NjI1MjExNkYsIDB4NzU5NDA2MUUsIDB4MDE2NjM2MkMsIDB4NjY1M0UwNDQsCisweDA1MUU2MjUyLCAweDM1MkM3NjQ0LCAweEUwNDgwMTU2LCAweDA2MUU2MjYyLAorMHgwMTY2MzYyQywgMHhFMDU0RDY2MCwgMHgwNTFFNjI2MiwgMHgzNTJDNDIyOSwKKzB4NzYwNDAxNTYsIDB4RTA1ODYyNjIsIDB4NDIyOTA2MUUsIDB4MDE2NjM2MkMsCisweEUyMzg1NkZCLCAweEUwNDQyNjIwLCAweEUwNDgwMjFFLCAweDYyMTIxNjIxLAorMHg1NTExMTYyMiwgMHgxNjUzRTIwMCwgMHgxNjU0NTUxMiwgMHgxNjU1NTUxNSwKKzB4MTY1NjU1MTMsIDB4MTY1NzU1MTYsIDB4RTA0MDA1MUUsIDB4MDUxRTE2NTgsCisweDE2NTlFMDUwLCAweDE2NUE1NTE0LCAweEUwNEMwNTFFLCAweDA1MUUxNjVCLAorMHgxNjVDRTA1NCwgMHhFMDU4MDUxRSwgMHgwNTFFMTY1RCwgMHgxNjVFRTA0NCwKKzB4RTA0ODAxMjYsIDB4MTEyMTIxMjIsIDB4MTEyNTExMjIsIDB4MTEyNjExMjMsCisweEUwNDAwMTI2LCAweEUwNTAwMTI2LCAweDAxMjYxMTI0LCAweDAxMjZFMDRDLAorMHgwMTI2RTA1NCwgMHgwMTI2RTA1OCwgMHgzRjNDOTM1OCwgMHg2RUY2NEYyNiwKKzB4NkNGNjZERjYsIDB4MDAwQjZCRjYsIDB4NEYyMjY5RjYsIDB4RTI0MDYxNEQsCisweDg5MTQzMTIzLCAweDMxMjdFMjFGLCAweDhCMDlENzM0LCAweEQ0MzQ2MTRELAorMHhFMDAxNzFFMCwgMHg1NjcxNDQwQiwgMHgyNjU5NjUwNywgMHgxNzYxQTAwNywKKzB4RTAwMUQ0MkYsIDB4NjY3MjQ0MEIsIDB4MjY1OTY1MDcsIDB4NEYyNjI3NjIsCisweDAwMDkwMDBCLCAweDYxNEQ0RjIyLCAweDMxMjNFMjQwLCAweEUyMUY4OTEyLAorMHhENzI2MzEyNywgMHg2MTREOEIwOCwgMHg1NjcxRDIyNSwgMHg0MjBCNzFFMCwKKzB4MjYwQkUwMDEsIDB4MTc2MUEwMDYsIDB4NjY3MkQyMjEsIDB4RTAwMTQyMEIsCisweDI3NjIyNjBCLCAweDAwMEI0RjI2LCAweEU2NDAwMDA5LCAweDQ2Mjg0NjE4LAorMHg2MjUyRDUxQywgMHg4OUZDMjI2OCwgMHgwMDA5MDAwQiwgMHg0NjE4RTY4MCwKKzB4RDUxODQ2MjgsIDB4MjI2ODYyNTIsIDB4MDAwQjg5RkMsIDB4QTAwMTAwMDksCisweDcyMDFFMjAwLCAweDhCRkMzMjQyLCAweDAwMDkwMDBCLCAweDAwMDAwMDgwLAorMHgwMDExNzgwNCwgMHgwMDIwMkZGNCwgMHgwMDIwMTM1NiwgMHgwMDIwMTM5QSwKKzB4MDAyMDMwMDgsIDB4MDAyMDMwMTAsIDB4MDAyMDBDMzgsIDB4MDAyMDBDMTIsCisweDAwMjAyRjAwLCAweDAwMjAyRjE0LCAweDAwMjAyQUE0LCAweDAwMUMzNkEwLAorMHgwMDFDM0NBMCwgMHgwMDFDMzZGNCwgMHgwMDFDM0I4OCwgMHgwMDFDMzcwNCwKKzB4MDAyMDI5RjgsIDB4MDAxQzM3M0MsIDB4NDYxOEU2ODAsIDB4RDUyRjQ2MjgsCisweDIyNjg2MjUyLCAweDAwMEI4QkZDLCAweDJGRTYwMDA5LCAweDdGRkM0RjIyLAorMHhCRkYxNkU1MywgMHg2MUUyMkY0MiwgMHhFMjgwRDYyOSwgMHg1NEUxMTYxNSwKKzB4MTY0NjQyMTgsIDB4NDIyODU1RTIsIDB4NTdFMzE2NTcsIDB4MTY3ODZFRjIsCisweDI2RTIyRTJCLCAweDRGMjY3RjA0LCAweDZFRjZBRkE4LCAweDJGRDYyRkM2LAorMHg0RjIyMkZFNiwgMHg2QzUzREQxRSwgMHg2RTQzQkZENiwgMHgyREUyQkY5NSwKKzB4MDAwOUJGRDIsIDB4MkMxMjUxRDUsIDB4MUM0MTU0RDYsIDB4MUM1MjU1RDcsCisweDFDNjM1NkQ4LCAweDZFRjY0RjI2LCAweDAwMEI2REY2LCAweDYxNjM2Q0Y2LAorMHhBMDA0RTYwMCwgMHg2MjU2NDEwOSwgMHgyNDIyNzYwMSwgMHgzNjEyNzQwNCwKKzB4MDAwQjhCRjksIDB4NEYyMjAwMDksIDB4RDEwRkQ0MEUsIDB4MDAwOTQxMEIsCisweEQ0MEZEMjBFLCAweEU1MDU2MDIyLCAweDIyMDJDQjIwLCAweEQ1MEQyNDUyLAorMHg0NTBCRTcwMCwgMHhENzBDMjQ3MiwgMHgwMDA5NDcwQiwgMHhFNjAxRDEwQiwKKzB4MjE2MkQyMEIsIDB4NEYyNjQ2MTgsIDB4MjI2MjAwMEIsIDB4MDAxQzM3MDAsCisweDAwMUMzNzBDLCAweDAwMjAzMDI4LCAweDAwMjAxMzU2LCAweDAwMUMzNTAwLAorMHgwMDFENDAwNCwgMHgwMDIwMTNDQywgMHgwMDIwMEVGOCwgMHgwMDFFMjEyQywKKzB4MDAxQzNEMzAsIDB4MDAwOUExQTksIDB4MkZFNjJGRDYsIDB4REQ4RjRGMjIsCisweEEwMDQ5RUE3LCAweEQ0OEUwMDA5LCAweDQyMEJEMjhFLCAweDYyRDI2NUQyLAorMHg4QkY4MjJFOCwgMHgwMDA5QTAwNCwgMHhEMjhBRDQ4QiwgMHg1NUQxNDIwQiwKKzB4MjJFODUyRDEsIDB4QTAwNDhCRjgsIDB4RDQ4ODAwMDksIDB4NDIwQkQyODUsCisweDUyRDI1NUQyLCAweDhCRjgyMkU4LCAweDAwMDlBMDA0LCAweEQyODFENDg0LAorMHg1NUQzNDIwQiwgMHgyMkU4NTJEMywgMHhBMDA0OEJGOCwgMHhENDgxMDAwOSwKKzB4NDIwQkQyN0MsIDB4NTJENDU1RDQsIDB4OEJGODIyRTgsIDB4NkVGNjRGMjYsCisweDZERjYwMDBCLCAweDJGRDYyRkM2LCAweDRGMjIyRkU2LCAweDZFNjM2RDczLAorMHg2QzUzQjAxOCwgMHg2NEMzNTdGNCwgMHhCMDU0NjVFMywgMHhCMDZBNjZEMywKKzB4QjA5QTAwMDksIDB4QjA5RTAwMDksIDB4QjBBMjAwMDksIDB4QjBCRTAwMDksCisweEIwQzEwMDA5LCAweEIxMjQwMDA5LCAweDRGMjYwMDA5LCAweDZERjY2RUY2LAorMHg2Q0Y2QTAyMywgMHgzNDEyRDE2QywgMHhENjZDMDUyOSwgMHgyNjUwRDc2QywKKzB4Mjc0MjAwMEIsIDB4MDAwOUEwMTQsIDB4MkZENjJGQzYsIDB4NEYyMjJGRTYsCisweDZFNjM2RDczLCAweDZDNTNCRkVFLCAweDY0QzM1N0Y0LCAweEIwMkE2NUUzLAorMHhCMTA2NjZEMywgMHg0RjI2MDAwOSwgMHg2REY2NkVGNiwgMHg2Q0Y2QTAwNSwKKzB4RTYwM0QyNjAsIDB4MDAwQjQ2MTgsIDB4RDI1RTIyNjIsIDB4MDAwQkU2MDAsCisweDRGMjIyMjYyLCAweEU0MEFCRjdFLCAweDAwMDlCRjdFLCAweEUxMDREMjVBLAorMHhFNTAwNDExOCwgMHgyMjEyRTQwQSwgMHgyMjUyQkY3NCwgMHg2MDcyRDc1NywKKzB4NEYyNkNCMjAsIDB4MjcwMjAwMEIsIDB4RDE1NTRGMjIsIDB4RTQwMDQxMEIsCisweDQ1MkJENTU0LCAweDJGRTY0RjI2LCAweDZFNjNEMTUzLCAweDQ0MTg2NjEyLAorMHg0NTI4OTIxMCwgMHgyNjI5NDQwOCwgMHg0NDA4NDUwMCwgMHg0NDAwMjY1QiwKKzB4NDcwODI2NEIsIDB4NDcwODIxNjIsIDB4MjdFQkQxNEMsIDB4MDAwQjIxNzIsCisweDAzRjA2RUY2LCAweDJGRTYxRkZGLCAweERFNDk0RjIyLCAweEU0MEFFMTAxLAorMHgyRTEyQkY0OCwgMHg3MjZDNjJFMywgMHhFNDAxRTEwMCwgMHgyMjEyMjIxMiwKKzB4MjIxMjIyMTIsIDB4MjIxMjIyMTIsIDB4RTczMDIyNDIsIDB4RTQwQUU1MDMsCisweDIyMTIyMjEyLCAweDIyMTIyMjEyLCAweDIyMTIyMjEyLCAweDIyMTIyMjEyLAorMHgyMjEyMjIxMiwgMHgyMjEyMjIxMiwgMHgyMjUyMjI3MiwgMHgyMjEyMjIxMiwKKzB4MjIxMjIyMTIsIDB4MjIxMjIyMTIsIDB4MjIxMjIyMTIsIDB4MTIxQUJGMjIsCisweDJFNjJFNjAwLCAweDAwMEI0RjI2LCAweEQyMzI2RUY2LCAweEU0NDFFMTAxLAorMHgwMDBCMjIxMiwgMHhEMTMwMjI0MiwgMHhFNjA1RDQzMCwgMHgwMDBCMjE2MiwKKzB4RDUyRjI0NjIsIDB4NjA1MEQyMkYsIDB4OEIwRTg4MDEsIDB4NjA0MEQ0MkUsCisweDhCMDc4ODAxLCAweDk2MjZENTJELCAweDg4MDE2MDUwLCAweDk2MjM4QjBDLAorMHgwMDA5QTAwQSwgMHhBMDA3OTYyMSwgMHhFNjAwMDAwOSwgMHgyMjYyRDQyNiwKKzB4ODgwMTYwNDAsIDB4RTYwNDhCMDAsIDB4QUVGM0U0MEEsIDB4RDIyNDIyNjIsCisweEU0MEFFNjAxLCAweDIyNjJBRUVFLCAweDJGQzYyRkI2LCAweDJGRTYyRkQ2LAorMHhEQzIwNEYyMiwgMHg2MEMyRUQwMCwgMHhDQjAxRUI2NCwgMHg2MEMyMkMwMiwKKzB4QTA0MUM5MDEsIDB4MDNDNDZFMDMsIDB4MDM0MDAzRDQsIDB4MDAxQzNCODgsCisweDAwMjAzMDJDLCAweDAwMjAxM0EyLCAweDAwMjAzMDM0LCAweDAwMjAzMDNDLAorMHgwMDIwMzA0NCwgMHgwMDIwMzA0QywgMHgwMDI1RTcyMCwgMHgwMDIwMzIxQywKKzB4MDAyMDJGMDQsIDB4MDAxQzU5NjgsIDB4MDAxRDQwMDQsIDB4MDAxQzM1MDAsCisweDAwMjAxMTU0LCAweDAwMjAxMTgwLCAweDAwMUM1ODE0LCAweDAwMUM1OUQwLAorMHgwMDFDNTgzMCwgMHgwMDFDNjI2OCwgMHgwMDFDNTlBNCwgMHgwMDFDNjM5QywKKzB4MDAyMDJGMTYsIDB4MDAxQzU4MDQsIDB4MDAyMDJGMTUsIDB4MDAyMDJGMTcsCisweDAwMUM1ODFDLCAweDAwMUM1ODYwLCAweDg5MDczREIyLCAweEU0MEE2MEMyLAorMHhCRTlGQzkwMSwgMHg3RDAxNkUwMywgMHg4QkY1MkVFOCwgMHg4QjAzM0RCMiwKKzB4RDIzRUQ0M0QsIDB4MDAwOTQyMEIsIDB4NEYyNkU0MEEsIDB4NkRGNjZFRjYsCisweEFFOEY2Q0Y2LCAweDQ0MTE2QkY2LCAweDYwNEI4RjAxLCAweDAwMEI2MDQzLAorMHgyRkI2MDAwOSwgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwgMHhEQzM0N0ZGQywKKzB4NjBDMkVEMDAsIDB4Q0IwMkVCNjQsIDB4NjBDMjJDMDIsIDB4QzkwMjJGMDIsCisweDZFMDNBMDA5LCAweDg5MDgzREIzLCAweEU0MEE2MEMyLCAweEM5MDIyRjAyLAorMHg2RTAzQkU3MCwgMHgyRUU4N0QwMSwgMHgzREIzOEJGNCwgMHhENDI5OEIwOCwKKzB4N0YwNEQyMjYsIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkJGNjQyMkIsCisweDRGMjY3RjA0LCAweDZERjY2RUY2LCAweDAwMEI2Q0Y2LCAweEQ1MjI2QkY2LAorMHg2MDUyNTY1MSwgMHgwMDBCNDYyOCwgMHgyRkI2MzA2QywgMHgyRkQ2MkZDNiwKKzB4NEYyMjJGRTYsIDB4NEYwMjRGMTIsIDB4NkU0M0JGRjEsIDB4REMxQjZCMDMsCisweEJGRUNERDFCLCAweDMwQjgwMDA5LCAweDA2MEEzQzA1LCAweDQ2MDk0NjA5LAorMHgzRDY1NDYwMSwgMHg0MjA5MDIwQSwgMHg0MjA5NDIwOSwgMHg4QkYwMzJFMiwKKzB4NEYxNjRGMDYsIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkJGNjAwMEIsCisweDRGMjIyRkU2LCAweEUxMDJERTBGLCAweEU0MDNFNTAwLCAweEJGRDQyRTEyLAorMHhFNjA2MkU1MiwgMHhFNzAwNDYxOCwgMHgyRTYyRTQwMywgMHg0RjI2MkU3MiwKKzB4NkVGNkFGQ0IsIDB4MDAwOTAwMEIsIDB4MDAyMDMwNTQsIDB4MDAyMDEzNTYsCisweDAwMUM1ODYwLCAweDAwMjAzMDZDLCAweDAwMUMxMDQwLCAweENDQ0NDQ0NELAorMHgxMDYyNEREMywgMHgwMDFENDAwNCwgMHgyRjk2MkY4NiwgMHgyRkI2MkZBNiwKKzB4MkZENjJGQzYsIDB4NEYyMjJGRTYsIDB4RTUwMDdGREMsIDB4NjQ1M0UxMTAsCisweDZDNTM0MTI4LCAweEVEMDk2RTUzLCAweDY2NTM2NTVELCAweDM2NUM0NjA4LAorMHg3NTAxNDYwOCwgMHg2MDQzMzYxQywgMHgwRjY2Njc1RCwgMHhFQjAwNjBDMywKKzB4MjZDMTM3RDMsIDB4ODE2MjgxNjEsIDB4MTZCMjgxNjMsIDB4MTZCNDE2RTMsCisweDc0MDQ4RkVBLCAweEQ5QTY2OEYyLCAweDE5ODFEQUE2LCAweDU5RjEyOTgyLAorMHgxQTkxRDFBNSwgMHg1QUYyMkE5MiwgMHg1REY0NUJGMywgMHg1NEY2NUVGNSwKKzB4MjFBMjExQTEsIDB4MTFCMjExQjMsIDB4MTFENDExRDUsIDB4MTFFNjExRTcsCisweDExNDgxMTQ5LCAweDU1RjdFRTAwLCAweDU3RjhERDlDLCAweDY0RTNEMjlDLAorMHhEQjlERDk5QywgMHhFODQ1RUFCOCwgMHgyRDUyMUQ1MSwgMHg2QUFDMjI3MiwKKzB4NkVFRDQ4MDgsIDB4NEQwODZERTMsIDB4M0RFQzY1RTMsIDB4NEQwODQ1MDgsCisweDNEOUMzNUVDLCAweDQ1MDg2MEMzLCAweDgxRDEyREMxLCAweDQ1MDhFMDUwLAorMHg0NTA4NDAwOCwgMHg2MEMzODFEMiwgMHhFNjAwMzVCQywgMHg4MUQzMzRBMiwKKzB4MUQ1MzFERDIsIDB4OEQwMUQ0ODksIDB4RDQ4NjFENjQsIDB4QjA1QzY1RDMsCisweDY0RUQ3RTAxLCAweDhCREMzNDgyLCAweERCODhEMTgyLCAweEQyODA2ODEyLAorMHgxQjgxNDgyOSwgMHgyRkQyNjQxMiwgMHgyQjkyNjk0RCwgMHhEOTdGNjcyMiwKKzB4MUI3MzQ3MjksIDB4RDc3QzY4MjIsIDB4MUJBMjZBOEQsIDB4RDI4MDZCNzIsCisweDIyQjJENTdCLCAweEUwMDM1RDcyLCAweDVFNzQxMkQyLCAweDEyRTQ0MDE4LAorMHhENjdDNTE3NiwgMHg1NDc4MTIxNiwgMHgxMjQ4RTEwMywgMHhENDc5Njc5MiwKKzB4Njg1MjEyN0EsIDB4MjhDMUU3RkYsIDB4ODE5MTY5NTIsIDB4NkE1MkUwNTAsCisweDgxQTI0MDA4LCAweDYwQzM2QjUyLCAweDZDNTI4MUIzLCAweDZFNTIxQ0MyLAorMHg2MjUyMUU2MywgMHgxMjY0RTYwMCwgMHg0NjA4NjU2MywgMHg3NTAxMzY0QywKKzB4NjY1RDI2NzIsIDB4OEJGODM2MTMsIDB4NEYyNjdGMjQsIDB4NkRGNjZFRjYsCisweDZCRjY2Q0Y2LCAweDY5RjY2QUY2LCAweDY4RjYwMDBCLCAweDYwNjE2NjQyLAorMHg4RDA0QzgwMywgMHg2MDYxRTUwMCwgMHg4ODAyQzkwMywgMHg1MjYyOEIwMywKKzB4NTEyNDY1NjMsIDB4MDAwQjI0MTIsIDB4MkZENjYwNTMsIDB4NEYyMjJGRTYsCisweDZFNTM3RkVDLCAweEU1NTA2MjUzLCAweEU0MDA2RDQzLCAweEEwMDE0NTA4LAorMHg1MjI0RTEwMSwgMHgyMjExNjA0MywgMHg4MTIzODEyMSwgMHg4MTIyNjA1MywKKzB4MzYyMDU2RTIsIDB4RDI1NDhCRjUsIDB4NjRGMzE2RTQsIDB4NDIwQkU2MTQsCisweDY1RTE2NUUzLCAweDI1NDlFNEZDLCAweDYxRjEyRTUxLCAweDIxNDk2NUYzLAorMHg1NEQxMkYxMSwgMHg0MTBCRDE0QywgMHg1N0QxRTYxNCwgMHhDQjAxNjA3MSwKKzB4MURFMTI3MDEsIDB4NEYyNjdGMTQsIDB4MDAwQjZFRjYsIDB4MkZENjZERjYsCisweDRGMjIyRkU2LCAweDZFNTM3RkVDLCAweEU1RkM2NjUzLCAweDYwNjE2RDQzLAorMHhDQjAxMjA1OSwgMHg1MkUyMjYwMSwgMHg4QjA2MzI2MCwgMHg1MUUyMTJFNCwKKzB4OEIwNDMxRTAsIDB4QTAwMjUyRDEsIDB4QUZGMDFFMjIsIDB4RDIzQTU2NjQsCisweEU2MTQ2NEYzLCAweDY1RTM0MjBCLCAweEUxRkM2N0UxLCAweDJFNzEyNzE5LAorMHg1NEQxNjdGMSwgMHhEMTM0MjcxOSwgMHhFNjE0NjVGMywgMHgyRjcxNDEwQiwKKzB4NjAyMTUyRDEsIDB4MjIwMUNCMDEsIDB4N0YxNDFERTEsIDB4NkVGNjRGMjYsCisweDZERjYwMDBCLCAweDRGMjIyRkU2LCAweERFMjM2MjRDLCAweDQyMDA0MjA4LAorMHgzRTJDQTAwNSwgMHhENDFGNTI1MiwgMHhCRjhFNTYyNCwgMHg2NUUyMkU2MiwKKzB4MzUyMDUyRTEsIDB4RDYyMjhCRjYsIDB4NEYyNjI2MjIsIDB4NkVGNjAwMEIsCisweDJGQzYyRkI2LCAweDJGRTYyRkQ2LCAweERDMTg0RjIyLCAweDUyQzFEQjFGLAorMHgzNjIwNjZDMiwgMHg2MDYxODkxQywgMHg4ODAxQzkwMywgMHhERTEzODkxOCwKKzB4QkY2M0REMUIsIDB4NjUwMzY0RTMsIDB4NjZCMjg1MDMsIDB4MzI2MjYyMEQsCisweEQ0MEI4OTA3LCAweDAwMDlCRjlCLCAweDREMEJENDE2LCAweEFGRTYwMDA5LAorMHhCRjYyMDAwOSwgMHhENDE0NjRFMywgMHgwMDA5NEQwQiwgMHgwMDA5QUZERiwKKzB4MjI2MkQyMTIsIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkJGNjAwMEIsCisweDAwMjAyQjAwLCAweDAwMjAyQjA4LCAweDAwMjAyQjEwLCAweDAwMjAyQjM4LAorMHgwMDIwMkYxQywgMHgwMDEwMDBCNCwgMHgwMDEwMTY4MCwgMHgwMDFFMjEwOCwKKzB4MDAxQzNEMDAsIDB4MDAxMTc4ODAsIDB4MDAyMDBBOUUsIDB4MDAyMDJGMDAsCisweDAwMjAxMzU2LCAweDAwMjAzMDg4LCAweDAwMjAzMDhDLCAweDAwMUMzRDI4LAorMHgyRkM2MkZCNiwgMHgyRkU2MkZENiwgMHg3RkZDNEYyMiwgMHg2MDIyRDIyQiwKKzB4OEQ0MUM4MDMsIDB4REUyQTJGMDEsIDB4REIyQkRDMkEsIDB4RUQwMUEwMTcsCisweEM5MDM2MDUxLCAweDg5MTY4ODAxLCAweEQxMjhENDI2LCAweDAwMDk0MTBCLAorMHg2MTAzNTUwMywgMHhDODIwODU1MSwgMHhFMDUwODkwMywgMHg3MjAxMDJCRSwKKzB4RDIyMzBCMjYsIDB4NDIwQjY0RTMsIDB4RDYyMjY1MTMsIDB4NTJDMTI2RDIsCisweDM1MjA2NUMyLCAweERFMjA4QkU0LCAweERCMjFERDIwLCAweDUyRDFEQzIxLAorMHgzNTIwNjVEMiwgMHg2MDUxODkxOCwgMHg4ODAxQzkwMywgMHhENDFCODkxNCwKKzB4NDYwQkQ2MTYsIDB4NTcwMzAwMDksIDB4OEYwNDM3RTAsIDB4RTIwMTY1MDMsCisweEFGRUMyQjIwLCAweEQ0MTgyQzUyLCAweDQyMEJEMjE4LCAweEQ2MTEwMDA5LAorMHg0MTE4RTEwMSwgMHgyNjEyQUZFMywgMHhDODA0NjBGMSwgMHhEMjE0ODkwNywKKzB4NEYyNjdGMDQsIDB4NkRGNjZFRjYsIDB4NDIyQjZDRjYsIDB4N0YwNDZCRjYsCisweDZFRjY0RjI2LCAweDZDRjY2REY2LCAweDZCRjYwMDBCLCAweDAwMUUyMTAwLAorMHgwMDIwMkIxMCwgMHgwMDIwMkIwOCwgMHgwMDIwMkFBNCwgMHgwMDIwMTA2QywKKzB4MDAyMDEwRUUsIDB4MDAxQzNEMzAsIDB4MDAxMTc4ODAsIDB4MDAyMDJCMDAsCisweDAwMjAyRjIwLCAweDAwMjAyRjFDLCAweDAwMjAyQjM4LCAweDAwMjAxMDhBLAorMHgwMDIwMDE3MCwgMHhFNjAxRDIwMywgMHgxMjY1RDUwMywgMHgwMDBCMjI1MiwKKzB4MDAwMDEyNjYsIDB4MDAxQzEwMTAsIDB4MDAwMEMzNEYsIDB4MDAwOTAwMEIsCisweDJGRDYyRkM2LCAweDRGMjIyRkU2LCAweDZENDM2QzUzLCAweEVFMDBBMDA0LAorMHg3RTAxNjRENCwgMHg2NDRDQkZGMiwgMHg4QkY5M0VDMiwgMHg2RUY2NEYyNiwKKzB4MDAwQjZERjYsIDB4RTUwMDZDRjYsIDB4NjY0M0EwMDIsIDB4NzYwMTc1MDEsCisweDIyMjg2MjYwLCAweEFGRTM4QkZBLCAweDJGRTYwMDA5LCAweDc1MDc2MjUzLAorMHhFMTA4Njc1MywgMHg2MDQzRUUwQSwgMHg0NDA5QzkwRiwgMHg2NTAzMzBFMiwKKzB4OEQwMTQ0MDksIDB4RTYzMEU2MzcsIDB4NDExMDM2NUMsIDB4OEZGMjI3NjAsCisweEUwMDA3N0ZGLCAweDAwMEI4MDI4LCAweDAwMEI2RUY2LCAweDAwMEJFMDAwLAorMHgyRkU2RTAwMCwgMHg3RkVDNEYyMiwgMHg2RTQzNjI1MywgMHhCRkRDNjVGMywKKzB4QkZEMDY0MjMsIDB4QkZDRTY0RTMsIDB4RDQwMzY0RjMsIDB4MDAwOUJGQ0IsCisweDRGMjY3RjE0LCAweDZFRjYwMDBCLCAweDAwMjAzMDkwLCAweEU0RkRENTlBLAorMHhENjlBNjE1MiwgMHgyNTEyMjE0OSwgMHg3NDAxNjA1MiwgMHgyNTAyQ0IwMSwKKzB4RDE5NzY3NTIsIDB4MjU3MjI3NDksIDB4Qzg0MDYwMTAsIDB4NjA2Mjg5MDIsCisweDI2MDJDQjA0LCAweEU1MDE2MDYyLCAweDI2MDJDQjA4LCAweEU0MDI2MDYyLAorMHgyNjAyQzlDRiwgMHg0NTE4NjA2MiwgMHgyNjAyQ0IwMywgMHgwMDBCMTY0MiwKKzB4RDU4QzE2NTMsIDB4RDI4REQ3OEMsIDB4RTEwMEQ0OEQsIDB4MjUxMUU2MDAsCisweDIyMTAyNzExLCAweDI0NjFBRkQyLCAweEQyOEE2NjRDLCAweDM2MkM0NjAwLAorMHhDQjEwNjA2MCwgMHgyNjAwMDAwQiwgMHhEMjg2NjU0QywgMHgzNTJDNDUwMCwKKzB4RTFFRjY2NTAsIDB4MDAwQjI2MTksIDB4NjY0QzI1NjAsIDB4NDYwMEQyODIsCisweDYwNjAzNjJDLCAweDAwMEJDQjEwLCAweDY1NEMyNjAwLCAweDQ1MDBEMjdFLAorMHg2NjUwMzUyQywgMHgyNjE5RTFFRiwgMHgyNTYwMDAwQiwgMHhEMjc5NjY0QywKKzB4MzYyQzQ2MDAsIDB4Q0IwODYwNjAsIDB4MjYwMDAwMEIsIDB4RDI3NTY1NEMsCisweDM1MkM0NTAwLCAweEUxRjc2NjUwLCAweDAwMEIyNjE5LCAweDY2NEMyNTYwLAorMHg0NjAwRDI3MSwgMHg2MDYwMzYyQywgMHgwMDBCQ0IwOCwgMHg2NTRDMjYwMCwKKzB4NDUwMEQyNkQsIDB4NjY1MDM1MkMsIDB4MjYxOUUxRjcsIDB4MjU2MDAwMEIsCisweEQ2Njg2MjRDLCAweDMyNkM0MjAwLCAweEM5MDg2MDIwLCAweDQwMjE0MDIxLAorMHgwMDBCNDAyMSwgMHg2MjRDNjAwQywgMHg0MjAwRDY2MywgMHg2MDIwMzI2QywKKzB4NDAyMUM5MDgsIDB4NDAyMTQwMjEsIDB4NjAwQzAwMEIsIDB4NjQ0Q0QxNUYsCisweDYyNDAzNDFDLCAweDYwMkMwMDBCLCAweDY0NENEMTVELCAweDYyNDAzNDFDLAorMHg2MDJDMDAwQiwgMHg0RjIyMkZFNiwgMHg2NDVDNkU0MywgMHgzNDY3RTYwQSwKKzB4QkZFQjg5MTQsIDB4NjQwQzAwMDksIDB4ODgwMTYwRUMsIDB4RTAwRjhCMDIsCisweDI0MDlBMDAyLCAweDQ0MDk0NDA5LCAweEU2MEE2MjRDLCAweDg5MDUzMjYzLAorMHg2NDRDQkZFMiwgMHg2MDIzNjIwQywgMHg4QjAwQzg4MCwgMHg2MDIzRTIwMCwKKzB4MDAwQjRGMjYsIDB4NEYyMjZFRjYsIDB4NjA2MkQ2NEEsIDB4OEIwMzg4MDEsCisweDAwMDlCMjQ2LCAweDAwMDlBMDAzLCAweEU2NDBEMjQ3LCAweEQ2NDcyMjYwLAorMHg0RjI2RTIwMCwgMHgyNjIyMDAwQiwgMHhENjQyNEYyMiwgMHg4ODAyNjA2MiwKKzB4QjI4RjhCMDEsIDB4RDY0MTAwMDksIDB4NEYyNkUyMDAsIDB4MjYyMjAwMEIsCisweEQ0M0RENTNDLCAweEU3MDFFMTAwLCAweDAwMEIyNTEyLCAweEQyM0EyNDcwLAorMHgwMDBCRTYwNCwgMHg0RjIyMjI2MCwgMHhEMTNBRDQzOSwgMHgwMDA5NDEwQiwKKzB4RTFGREQ1MzksIDB4RDIzOTY2NTAsIDB4RTcwMDI2MTksIDB4NEYyNjI1NjAsCisweDIyNzAwMDBCLCAweEQ0MzY0RjIyLCAweDQxMEJEMTMyLCAweEQ1MzIwMDA5LAorMHg2NjUwRTdGQiwgMHg0RjI2MjY3OSwgMHgyNTYwMDAwQiwgMHhENDMxNEYyMiwKKzB4NDEwQkQxMkMsIDB4RDUyQzAwMDksIDB4NjY1MEU3RjcsIDB4NEYyNjI2NzksCisweDI1NjAwMDBCLCAweDk0MkRENTI4LCAweDIyNDk2MjUwLCAweDI1MjAwMDBCLAorMHhFNEJGRDUyNSwgMHgyMjQ5NjI1MCwgMHgyNTIwMDAwQiwgMHhEMjI2NEYyMiwKKzB4NjAwRDg1MjIsIDB4ODkxMTIwMDgsIDB4ODkxMzg4MDEsIDB4ODkxNTg4MDMsCisweDg5NDM4ODA1LCAweDg5NDk4ODA2LCAweDg5NEY4ODA4LCAweDg5NTU4ODA5LAorMHg4OTVCODgwQSwgMHg4OTYxODgwQiwgMHgwMDA5QTA2OCwgMHgwMDA5QjA2QSwKKzB4NjAwQ0EwNjUsIDB4MDAwOUIwNzgsIDB4NjAwQ0EwNjEsIDB4MDAwOUIwODEsCisweDYwMENBMDVELCAweDAwMDBGRjdGLCAweDAwMUUyMTQ4LCAweDAwMUUxMTA4LAorMHgwMDFFMTAwMCwgMHgwMDIwMkY2MCwgMHgwMDIwMkY2MiwgMHgwMDIwMkY4MSwKKzB4MDAyMDJGNDQsIDB4MDAxRTEwM0YsIDB4MDAxRTEwNUYsIDB4MDAxRTEwMkYsCisweDAwMUUxMDkwLCAweDAwMjAyRjY4LCAweDAwMUUxMDBCLCAweDAwMjAyRjY0LAorMHgwMDIwMzA5NCwgMHgwMDIwMTM1NiwgMHgwMDFFMTAyOCwgMHgwMDIwMkY4MCwKKzB4MDAyMDMwQTAsIDB4MDAyMDMwQjAsIDB4MDAyMDJGMzgsIDB4NjI2MEQ2ODQsCisweDhCMkIyMjI4LCAweDAwMDlCMDYxLCAweDYwMENBMDI5LCAweDYyNjBENjgwLAorMHg4QjIzMjIyOCwgMHgwMDA5QjA2OSwgMHg2MDBDQTAyMSwgMHg2MjYwRDY3QywKKzB4OEIxQjIyMjgsIDB4MDAwOUIwQzcsIDB4NjAwQ0EwMTksIDB4NjI2MEQ2NzgsCisweDhCMTMyMjI4LCAweDAwMDlCMENELCAweDYwMENBMDExLCAweDYyNjBENjc0LAorMHg4QjBCMjIyOCwgMHgwMDA5QjEyNSwgMHg2MDBDQTAwOSwgMHg2MjYwRDY3MCwKKzB4OEIwMzIyMjgsIDB4MDAwOUIxM0QsIDB4NjAwQ0EwMDEsIDB4NEYyNkUwMDAsCisweDAwMDkwMDBCLCAweEQyNkNEMTZCLCAweEQ1NkM4NDEyLCAweDQwMDBDOTBGLAorMHhENzZCMDEyRCwgMHhFNDAzRDY2QiwgMHhFMjBGNjExQywgMHgyNTQwRTAwMSwKKzB4MjUyMDI3MTIsIDB4MjYwMjAwMEIsIDB4RTYwMUQyNjIsIDB4MzA2Njg1MjMsCisweEUwMDA4RDA1LCAweEQ2NjNEMjYwLCAweEUwMDE4MTIyLCAweDAwMEIyNjAyLAorMHhEMjVDMDAwOSwgMHg2MDBEODUyMywgMHg4OTA1MjAwOCwgMHg4QjBBODgwMSwKKzB4NjA2MEQ2NUQsIDB4MjYwMENCMDEsIDB4RDQ1N0Q2NUEsIDB4RTAwMUUxMDEsCisweDAwMEIyNjEyLCAweDAwMEI4MTQyLCAweEQxNTJFMDAwLCAweDg1MTNFNTAxLAorMHg2NDBENDUxOCwgMHg2NjAzMzQ1MywgMHhFMDAwOEQwNSwgMHhENTUxRDI1MywKKzB4MjI2MEUwMDEsIDB4MDAwQjI1MDIsIDB4NEYyMjAwMDksIDB4ODUxM0QxNDksCisweDY0NTM2NTBELCAweDYyNDk0NDE5LCAweDIyN0Q2NzJFLCAweDg4MDE2MDJDLAorMHg4ODAyODkwOSwgMHg4ODAzODkxMCwgMHg4ODA2ODkxQSwgMHg4ODA3ODkzNSwKKzB4QTA0Qzg5M0IsIDB4RDU0NjAwMDksIDB4NjY1MkQ3NDYsIDB4Mjc2MkQ0NDYsCisweDYyMkM2MjYxLCAweDI0MjFBMDM4LCAweDIyMjg2MjVDLCAweEQ0NDM4QjNGLAorMHg2NjQyRDU0MCwgMHgyNTYyRDQ0MCwgMHgyNDAxODU2MSwgMHg2MjAzQTAyQywKKzB4MjAwODYwNUMsIDB4ODgxMDg5MDcsIDB4ODgyMDg5MDgsIDB4ODgzMDg5MDksCisweEEwMkM4OTBBLCAweEQyM0EwMDA5LCAweDYyMjJBMDA4LCAweEEwMDVEMjM5LAorMHhEMjM5NjIyMiwgMHg2MjIyQTAwMiwgMHg2MjYyRDYzOCwgMHhENDMyRDUzMSwKKzB4NjYyMTI1MjIsIDB4QTAwRjYyNkMsIDB4RDYzNTI0MjEsIDB4NjI2MUQ1MkQsCisweDYyMkNENDJELCAweEEwMDcyNTYyLCAweEQ2MzIyNDIxLCAweDg1NjFENTI5LAorMHgyNTYyRDQyOSwgMHg2MjAzMjQwMSwgMHg2NjJEODUxNSwgMHgzNjE3NjEwRCwKKzB4NjUwMzhGMDEsIDB4QjBDQjI0NTEsIDB4QTAwMTAwMDksIDB4RTAwMEUwMDEsCisweDAwMEI0RjI2LCAweEQ2MTkwMDA5LCAweEQ0MjdFMTAxLCAweDY1NDEyNjEwLAorMHhEMTE4RDcxNywgMHhFMjBGNjU1RCwgMHgyNzUyRTAwMSwgMHgwMDBCMjYyMCwKKzB4MkZFNjIxMDIsIDB4RDIwRjRGMjIsIDB4NjQwQzg1MjMsIDB4OEIwODI0NDgsCisweEQ1MTFENjFELCAweDI2MjFFMjAwLCAweDk0MEY4NDUxLCAweEEwNDgyMDQ5LAorMHhERTBEODA1MSwgMHhDODQwNjBFMCwgMHhFMjAxOEQzMiwgMHg4OTQ0MzQyNywKKzB4RDIxNkQ2MTUsIDB4MjY0MTQyMEIsIDB4MDAwOUEwMzAsIDB4MDAwMEZGN0YsCisweDAwMjAyRjgxLCAweDAwMjAyRjM4LCAweDAwMjAyRjQ0LCAweDAwMUUxMTAwLAorMHgwMDFFMTAwQywgMHgwMDIwMkY2NCwgMHgwMDFFMTAwMCwgMHgwMDFFMTAwMSwKKzB4MDAyMDJGNkMsIDB4MDAyMDJGNEMsIDB4MDAyMDJGNTAsIDB4MDAyMDJGNTQsCisweDAwMjAyRjcwLCAweDAwMjAyRjc0LCAweDAwMjAyRjc4LCAweDAwMjAyRjdDLAorMHgwMDIwMzI4MCwgMHgwMDIwMzI4QSwgMHgwMDIwMkY1RSwgMHgwMDIwMjI1QSwKKzB4ODkxMjM0MjcsIDB4RDI5NEQ2OTMsIDB4MjY0MTQyMEIsIDB4Q0I4MDg0RTEsCisweDgwRTFCMEY1LCAweEQ2OTE2MEUwLCAweDJFMDBDQjA0LCAweEM5M0Y2MDYwLAorMHhENjhGMjYwMCwgMHhBMDAxRTAwMSwgMHhFMDAwMjYwMiwgMHgwMDBCNEYyNiwKKzB4RDY4QzZFRjYsIDB4Qzg4MDYwNjAsIDB4RDI4Njg5MTksIDB4ODgwMTYwMjEsCisweEQyODk4QjE1LCAweDg1MjRFNTAxLCAweDg5MTAzMDU2LCAweEUyMDNEMTg3LAorMHgyMTIwRDQ4NywgMHhFMDBCNjU0MSwgMHgwNjU2NjU1RCwgMHhFNDBGRDU4NSwKKzB4MjE0MEU3MDIsIDB4RDc3RTI1NzEsIDB4MDAwQkUwMDEsIDB4MDAwQjI3MDIsCisweDJGRTZFMDAwLCAweERFODA0RjIyLCAweEM4ODA4NEUxLCAweEQ1N0E4OTJDLAorMHgyMDA4ODU1NCwgMHg2MTAzOEYyOCwgMHg4NTUzRDc3QywgMHg2NDAzNjY3MiwKKzB4ODU2NjY1MEMsIDB4MzUyMDYyMEMsIDB4RDY3OThCMUUsIDB4NjUxQ0Q3NzQsCisweDI2NTE2NDRDLCAweDYwRTAyNzQxLCAweDg5MDRDODQwLCAweDQyMEJEMjc1LAorMHhBMDAzMDAwOSwgMHhEMjY4MDAwOSwgMHgwMDA5NDIwQiwgMHgwMDA5QjA5RiwKKzB4RTIwMUQxNjcsIDB4NjBFMDIxMjIsIDB4Q0IwNEQ0NjQsIDB4NjA0MDJFMDAsCisweDI0MDBDOTNGLCAweDYwMjNBMDAxLCAweDRGMjZFMDAwLCAweDZFRjYwMDBCLAorMHgyRkI2MkZBNiwgMHgyRkQ2MkZDNiwgMHhEQTYyMkZFNiwgMHg2NkExRTI0MCwKKzB4MzYyMkRDNUUsIDB4NjI2Mzg5MDAsIDB4NkVEMzZEMkMsIDB4NEUyMTM2RDgsCisweDRFMjEyQTYxLCAweERCNjFENDYwLCAweEU3MDBBMDBGLCAweDc3MDE2MkIyLAorMHg3MTAyNjEyMywgMHg2NjIxMkIxMiwgMHg3MTAyNjIxMywgMHg2MTIxMkIxMiwKKzB4NjUxRDY2NkQsIDB4MzU2QzQ1MjgsIDB4NjI3QzI0NTIsIDB4OEJFRDMyRTMsCisweEM5MDM2MEQzLCAweDhCMTA4ODAzLCAweDYxNzM2N0IyLCAweDJCMTI3MTAyLAorMHg3MTAyNkUxMywgMHgyQjEyNjU3MSwgMHg2NTVENkRFMSwgMHg0MjI4NjJERCwKKzB4MzI1Q0UxMDcsIDB4QTAwQzJDMTAsIDB4ODgwMjI0MjIsIDB4QTAwMzhCMDEsCisweDg4MDFFMjAzLCAweEUyMDE4QjA1LCAweDY2QjIyQzIwLCAweDY1NUQ2NTYxLAorMHhFNjBGMjQ1MiwgMHg2N0ExMkM2MCwgMHg4QjA1Mjc3OCwgMHhERDM4REM0NCwKKzB4RUIwMUVBMDAsIDB4MkRCMjJDQTIsIDB4NkRGNjZFRjYsIDB4NkJGNjZDRjYsCisweDZBRjYwMDBCLCAweDJGRTYyRkQ2LCAweEUyNDBERDM2LCAweDM2MjI2NkQxLAorMHg2MjYzODkwMCwgMHgzNjc4NjcyQywgMHg3NzAzREUzOCwgMHg0NzIxMkQ2MSwKKzB4NjRFMkQ2MzUsIDB4QTAwRTQ3MjEsIDB4NjU2MkUxMDAsIDB4NjI1MzcxMDEsCisweDc0MDEyNDUwLCAweDI0MjA0MjE5LCAweDQ1Mjk3NDAxLCAweDc0MDEyNDUwLAorMHgyNDUwNDUxOSwgMHg2MjFDNzQwMSwgMHg4QkVFMzI3MywgMHg2NkUyNDIwMCwKKzB4NDIwMDYxRDEsIDB4MjExODM2MkMsIDB4MkU2MjhGMDYsIDB4REQxQ0Q3MjgsCisweEU1MDFFNDAwLCAweDJENTIyNzQyLCAweDAwMEI2RUY2LCAweDJGRDY2REY2LAorMHg0RjIyMkZFNiwgMHhFRDBBRUUwMSwgMHg2NEUzQkM5NiwgMHhCQzlCNjRFMywKKzB4NjJFQzdFMDEsIDB4OEJGNzMyRDcsIDB4QkM5RUVFMDEsIDB4NjRFMzY0RTMsCisweDdFMDFCQ0EzLCAweDMyRDc2MkVDLCAweDRGMjY4QkY3LCAweDAwMEI2RUY2LAorMHhEMTE4NkRGNiwgMHhENDE4OTIwRCwgMHg3MjEyMjEyMiwgMHgyNDIyRDYxNywKKzB4RDcxNzcyMDQsIDB4NzIyMDI2MjIsIDB4MjcyMkQxMTYsIDB4MDAwQjcyMzAsCisweDEzN0EyMTIyLCAweDAwMjAyRjVFLCAweDAwMjAyMzY2LCAweDAwMUUxMDE1LAorMHgwMDIwMkY2NCwgMHgwMDFFMTAwMSwgMHgwMDIwMkYzOCwgMHgwMDFFMTEwMCwKKzB4MDAyMDJGNjIsIDB4MDAyMDJGNTAsIDB4MDAxRTEwMDAsIDB4MDAyMDJGNTQsCisweDAwMjAyRjYwLCAweDAwMjAyMjVBLCAweDAwMUUxMDBDLCAweDAwMjAyRjRDLAorMHgwMDIwMkY2OCwgMHgwMDIwMkY2QywgMHgwMDIwMkY3MCwgMHgwMDIwMkY3NCwKKzB4MDAyMDJGNzgsIDB4MDAyMDJGN0MsIDB4NEYyMjJGRTYsIDB4RDY1MDdGRkMsCisweDg4MDE2MDYwLCAweEUyMDE4OTUxLCAweDI2MjBCRkJCLCAweEQ1NEVEMTRELAorMHhERTRFNjAxMCwgMHg2NEUzNjU1MiwgMHg3NDAyQzg0MCwgMHg4RDIyRDE0QywKKzB4RDI0Qzc1MDIsIDB4RTYwMUQ3NEMsIDB4RTcwNDI3MjIsIDB4NzYwMTYyNTUsCisweDYyNkMyNDIxLCAweDhGRjkzMjczLCAweEQ0NDM3NDAyLCAweDYyNDJFNjAxLAorMHg2NDBEODUyOCwgMHg2NzQ5NDQxOSwgMHgyNzVENjU3RSwgMHg4MUU0NjA3QywKKzB4RTQxN0Q1NDIsIDB4Njc1NTc2MDEsIDB4MzI0MzYyNkMsIDB4OEZGOTIxNzEsCisweEEwMjA3MTAyLCAweEQyM0UwMDA5LCAweEU2MDFENzNCLCAweEU3MDQyNzIyLAorMHg3NjAxNjI1NSwgMHg2MjZDMjQyMSwgMHg4RkY5MzI3MywgMHhENDMyNzQwMiwKKzB4NjI0MkU2MDEsIDB4NjQwRDg1MjgsIDB4Njc0OTQ0MTksIDB4Mjc1RDY1N0UsCisweDgxRTQ2MDdDLCAweEU0MTdENTMzLCAweDY3NTU3NjAxLCAweDMyNDM2MjZDLAorMHg4RkY5MjE3MSwgMHg5MjRBNzEwMiwgMHhEMjI2MkUyMSwgMHg1RTIzRDcyRSwKKzB4NjRGMjJGRTIsIDB4NjA0MzY1RjIsIDB4MjcwMEM5ODAsIDB4Qzk2MDYwNDMsCisweDgwNzE2MTAzLCAweEM5MDM2MDQzLCAweDgwNzI0NTE5LCAweDY1RjI2MDVDLAorMHg4MTcyNjZGMiwgMHg0NjE5NDYyOSwgMHg2MDZDNDUyOSwgMHg0MDE4NjQ1QywKKzB4ODE3MzMwNEMsIDB4MjExODVFMjMsIDB4NjRGMjJGRTIsIDB4NkU0QzYyRjIsCisweDYwMkM0MjE5LCAweDY2RjI2MkYyLCAweDQ2Mjk0MDE4LCAweDQ2MTkzMEVDLAorMHg0MjI5ODE3NCwgMHg2NTJDNjA2QywgMHgzMDVDNDAxOCwgMHg4MTc1OEYwNywKKzB4MDAwOUJDOUMsIDB4MjIyODYyMEMsIDB4QTAwQTg5MDgsIDB4NjAxMzAwMDksCisweDhCMDM4ODQwLCAweDAwMDlCMDA5LCAweDAwMDlBMDAzLCAweEUyMDJENjBGLAorMHg3RjA0MjYyMiwgMHgwMDBCNEYyNiwgMHgwMDBCNkVGNiwgMHgwNjBBMDAwOSwKKzB4MDAyMDJGODAsIDB4MDAxRTEwMDAsIDB4MDAyMDJGNkMsIDB4MDAyMDMyODAsCisweDAwMjAzMjhDLCAweDAwMjAzMjI0LCAweDAwMjAyRjU0LCAweDAwMjAzMjU0LAorMHgwMDIwMzI1MiwgMHgwMDIwMzIyNiwgMHgwMDIwMkYzOCwgMHgwMDIwMkY2NCwKKzB4NEYyMjJGRTYsIDB4REU5MzdGRkMsIDB4MjAwODg0RTksIDB4MkYwMDhEMDYsCisweEQ2OTJENDkxLCAweDAwMDk0NjBCLCAweDY0RjBCMTk0LCAweDY2MjBEMjkwLAorMHg4OTAyMjY2OCwgMHhDOUJGNjBFMCwgMHg3RjA0MkUwMCwgMHgwMDBCNEYyNiwKKzB4MDAwQjZFRjYsIDB4MkZFNjAwMDksIDB4REU4QTRGMjIsIDB4NjBFMEQ2OEEsCisweENCQzBENDhBLCAweDYyNjAyRTAwLCAweEM4MDM2MDJDLCAweDQwMjE4OTA0LAorMHg3MDAxNDAyMSwgMHg2NjAzQTAwMiwgMHg2NjAzNDAwOSwgMHhENjg0NjE2RCwKKzB4RTUwMEEwMDQsIDB4NzUwMTYyNjIsIDB4NzQwNDI0MjIsIDB4MzIxMzYyNUQsCisweEQyODA4QkY4LCAweDAwMDk0MjBCLCAweEM5QkY4NEUyLCAweDRGMjY4MEUyLAorMHg2RUY2MDAwQiwgMHgyRkU2MkZENiwgMHg3RkZDNEYyMiwgMHg2MjYwRDY3QSwKKzB4ODk0NDIyMjgsIDB4RDU2RkUxMDAsIDB4NjA1MDI2MTAsIDB4Q0I0MEQ0NzcsCisweDI1MDA0NDBCLCAweDhEMDUyMDA4LCAweDYyRTA2RTAzLCAweDcxMDQ2MTJDLAorMHgyRjExQTAwNiwgMHhENDcyRDY2QSwgMHhERDcyNjc2MCwgMHg2NTdDNEQwQiwKKzB4RTIzQzZEMUQsIDB4OEIwMzNEMjcsIDB4RDI2NEQ0NkYsIDB4MDAwOTQyMEIsCisweDREMjE0RDIxLCAweEEwMDVENzZELCAweDY2RTZFNDAwLCAweDM1N0M0NTA4LAorMHg3NDAxMjU2MiwgMHgzNUQzNjU0RCwgMHhENzY5OEJGNywgMHg2MTcyRTAwMywKKzB4ODExMTQwMTgsIDB4NkU3MjYwRjEsIDB4ODFFMjcwMEMsIDB4RDQ2NTYxNzIsCisweERENjU4MTEzLCAweDREMEJERTY1LCAweEUyMDE2NTcyLCAweEQ0NjQyRTIyLAorMHg0MjBCRDI1MiwgMHhENjUzMDAwOSwgMHhDOTNGNjA2MCwgMHg3RjA0MjYwMCwKKzB4NkVGNjRGMjYsIDB4NkRGNjAwMEIsIDB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsCisweEQyNUM0RjIyLCAweDZCNDM2RTczLCAweDQyMEI2QzUzLCAweDIwMDg2RDYzLAorMHg2MTAzOEYwOCwgMHhEMjQ1RDQ1OCwgMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwKKzB4NkJGNjQyMkIsIDB4MjFCMDYwQzMsIDB4NjBEMzgwMTEsIDB4RTUwMDgxMTEsCisweDY0QkNBMDA3LCAweDYwNTM2NTVELCAweDY2NTMwMEVDLCAweDc1MDEzNjFDLAorMHg2MjVEODA2NCwgMHg4QkY1MzI0MywgMHg2MDYwRDYzNiwgMHgyNjAwQzlCRiwKKzB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkJGNjAwMEIsIDB4N0ZDNDRGMjIsCisweDcyMDI2MkYzLCAweDIyNTEyRjQxLCAweDQ1Mjk3MjAyLCAweDYwNjMyMjUxLAorMHhFNUM0RTY4MiwgMHg2N0YzODEyMSwgMHg2NTVDNjY2QywgMHhFNDA4QkZCQywKKzB4NEYyNjdGM0MsIDB4MDAwOTAwMEIsIDB4MkY5NjJGODYsIDB4MkZCNjJGQTYsCisweDJGRDYyRkM2LCAweDRGMjIyRkU2LCAweEUxMDA3RkM0LCAweDY1MTNFQ0ZGLAorMHg2QjEzNkNDRCwgMHhERTM2RDczNSwgMHhFREZGNjRGMywgMHhEODM1RUEwNCwKKzB4NjA1MzY1NUMsIDB4MDI3RDQwMDAsIDB4MzJDMDYyMkQsIDB4NjYwMzhEMEQsCisweDA5RUQ2MDYzLCAweDI0OTEwMjdELCAweDI0MjE3NDAyLCAweDY5ODIwMkVELAorMHgzOTI4NjIyRCwgMHg3NDAyMjg5MiwgMHg3NTAxNzEwNCwgMHg2MDYzNjI1QywKKzB4MDdENTMyQTIsIDB4MEVCNThGRTQsIDB4MjQ0ODY0MUMsIDB4RTY4MDg5MDUsCisweDY3RjNFNUM1LCAweEJGN0Y2NjZDLCAweDdGM0M2NTVDLCAweDZFRjY0RjI2LAorMHg2Q0Y2NkRGNiwgMHg2QUY2NkJGNiwgMHgwMDBCNjlGNiwgMHhEMTFFNjhGNiwKKzB4NjAxMkQyMUUsIDB4Q0IyMEU0MDUsIDB4MjEwMkU1MDAsIDB4MDAwQjIyNDIsCisweDAwMDAyMjUyLCAweDAwMUUxMDE3LCAweDAwMjAzMEJDLCAweDAwMjAxMzU2LAorMHgwMDIwMkYxQSwgMHgwMDFFMTAxNSwgMHgwMDFFMTBCRiwgMHgwMDExNzgwMCwKKzB4MDAxRTEwRkMsIDB4MDAyMDAxNzAsIDB4MDAyMDJGMjAsIDB4MDAyMDI0QkUsCisweDAwMjAzMEMwLCAweDAwMjAxM0EyLCAweDAwMjAzMERDLCAweDAwMTE3ODhDLAorMHgwMDIwMkYxQywgMHgwMDIwMkIwMCwgMHgwMDIwMTBFRSwgMHgwMDFFMjEzMCwKKzB4MDAyMDMwRTQsIDB4MDAyMDI0ODAsIDB4MDAyMDMwRTgsIDB4MDAyMDJGMjYsCisweDAwMjAyRjJFLCAweDAwMjAzMjIwLCAweDAwMUMzNTAwLCAweDAwMUQ0MDA0LAorMHhENTY1RDE2NCwgMHhFNDAwRDc2NSwgMHgyMTQyRTIwRiwgMHgxNzQxMTE1NCwKKzB4RDU2MzI3MjIsIDB4OTY2OUQ3NjMsIDB4MTU0MTI1NzIsIDB4OTY2NjE1NjIsCisweEU2MDExNTY1LCAweEQ1NjAxMTY1LCAweDY2NkNFNkY4LCAweDI1NDIyNTQyLAorMHgyNTQyMjU0MiwgMHgyNTQyMjU0MiwgMHgyNTYyMjU0MiwgMHg3NjAxRTcyNywKKzB4Njc2MzI1NzIsIDB4MjU2Mjc3OTcsIDB4RTcwNDI1NzIsIDB4MjU3MkUyNDgsCisweEUyMTkyNTIyLCAweEUyNzAyNTIyLCAweDI1NDIyNTQyLCAweDI1NDIyNTQyLAorMHgyNTIyMjU0MiwgMHgyNTIyRTIwQywgMHgyNTQyMjU0MiwgMHgyNTQyMjU0MiwKKzB4MjU0MjI1NDIsIDB4MjU0MjI1NDIsIDB4MDAwQjE1NEEsIDB4RTIwODExNDUsCisweDAwMDk0MjJCLCAweDJGRTYyRkQ2LCAweDdGRkM0RjIyLCAweEM4MjA2MDQzLAorMHg2RTQzOEQwMiwgMHgwMDA5QkU2RCwgMHhDODEwNjBFMywgMHhCRTZBODkwMSwKKzB4NjBFMzAwMDksIDB4ODkwMUM4NDAsIDB4MDAwOUJFOEMsIDB4QzgwMTYwRTMsCisweEREM0U4OTM4LCAweEM4MDI2MEQwLCAweDJGMDA4RDAzLCAweDQ2MEJENjNDLAorMHg2MEYwMDAwOSwgMHg4OTAyQzgwNCwgMHg0NjBCRDYzQSwgMHg2MkYwMDAwOSwKKzB4Qzg4MDYwMjMsIDB4NjBEMDg5MDIsIDB4MkQwMEM5N0YsIDB4QzgwMTYwMjMsCisweEQ2MzU4OTA2LCAweDAwMDk0NjBCLCAweDAwMDlBMDA3LCAweDUxNjMwNjAxLAorMHg4OTAyQzgwOCwgMHg0NjBCRDYzMSwgMHg2MEYwMDAwOSwgMHg4OTAyQzgxMCwKKzB4NDIwQkQyMkYsIDB4RDUyRjAwMDksIDB4ODgwMjYwNTIsIDB4RDIyRThCMDMsCisweEEwMDVFNjA0LCAweDg4MDEyMjYwLCAweEQyMkI4QjAyLCAweDIyNjBFNjAxLAorMHgyNTIyRTIwMCwgMHhDODgwNjBFMywgMHhENjI4ODkyRSwgMHg2MEUzNkU2MCwKKzB4ODkwMkM4ODAsIDB4NDIwQkQyMjYsIDB4NjBFMzAwMDksIDB4ODkwMkM4NDAsCisweDQyMEJEMjI0LCAweDYwRTMwMDA5LCAweDg5MDJDODAyLCAweDQyMEJEMjIyLAorMHg2MEUzMDAwOSwgMHg4OTBFQzgwNCwgMHg0MTBCRDEyMCwgMHhCRjBFMDAwOSwKKzB4QkY0RDAwMDksIDB4RDUxRTAwMDksIDB4NjA1MEQ0MUUsIDB4QzkwOEQ3MUUsCisweEJGODQyNTAwLCAweDYwRTMyNDcyLCAweDg5MDVDODA4LCAweDdGMDREMjFCLAorMHg2RUY2NEYyNiwgMHg2REY2NDIyQiwgMHg0RjI2N0YwNCwgMHgwMDBCNkVGNiwKKzB4MDAwMDZERjYsIDB4MDAxQzU4MUMsIDB4QTAwMEEwMDAsIDB4MDAxRDAxMDAsCisweDAwMUQ0MDAwLCAweDAwMDQwMDIxLCAweDAwMUM1ODlDLCAweDAwMUUxMDIxLAorMHgwMDIwMTUzNiwgMHgwMDIwMTU1OCwgMHgwMDIwMUI5OCwgMHgwMDIwMTU3MCwKKzB4MDAyMDE1N0UsIDB4MDAyMDJGNjQsIDB4MDAxRTEwMEIsIDB4MDAxRTEwMjgsCisweDAwMjAxNUQ0LCAweDAwMjAxNUUwLCAweDAwMjAxNTg2LCAweDAwMjAxNUE0LAorMHgwMDFFMTAwMCwgMHgwMDEwRjEwMCwgMHgxMjM0NTY3OCwgMHgwMDIwMTVCQywKKzB4NjQ0Q0Q2QTcsIDB4MDAwQjM0NkMsIDB4RDZBNjI0NTAsIDB4MzQ2QzY0NEMsCisweDI0NTAwMDBCLCAweDY0NENENkE0LCAweDAwMEIzNDZDLCAweDYyNUMyNDUwLAorMHg0MjA4NjE2RCwgMHg0MjA4NDExOSwgMHg0MjAwNjAxOSwgMHg2NzBFNjE0QywKKzB4RDQ5RTMyMUMsIDB4NDIwMDIwN0QsIDB4MzI0Q0M5MEYsIDB4MjIwMDAwMEIsCisweDQyMDg2MjVDLCAweDQyMDA0MjA4LCAweDMyNEM2NDRDLCAweDQyMDBENDk4LAorMHgwMDBCMzI0QywgMHgyRkU2MjI2MCwgMHg2MTRDNEYxMiwgMHg0MTAwRDQ5MywKKzB4NjcxMDMxNEMsIDB4RTI5RjY2NkQsIDB4MjcyOTQ2MTksIDB4NkU1MzYyNjksCisweDY3MkU2NTczLCAweDQyMjEyMjdELCAweDQyMjE0MjIxLCAweDc2MDE2NjJDLAorMHhFNDAxNDYwOCwgMHgzNEU4NDYwOCwgMHg2NDRDNDYwMCwgMHgwNzFBMDQ2NywKKzB4MjE1MDI1N0IsIDB4MDAwQjRGMTYsIDB4NEYyMjZFRjYsIDB4RDI4NTdGRTgsCisweDg4MDE2MDIxLCAweEQyODQ4QjdCLCAweDI2Njg2NjIxLCAweEQyODM4Qjc3LAorMHgyNjY4NjYyMSwgMHhFNTBGOEI3MywgMHhFNDAxQkZBMiwgMHhCRkE0RTUwMSwKKzB4RTU4NkU0MDAsIDB4RTQwMDY1NUMsIDB4MkY1MEJGQTQsIDB4QkZBMUU0MDEsCisweEU2MDJFNTA2LCAweDYwNjM0NjE4LCAweDgxRjJFNDAxLCAweDY1NDNCRjlGLAorMHhFNDAxODVGMiwgMHhCRkFCNjU0MywgMHg4NUYyNjYwMywgMHg2NTQzRTQwMSwKKzB4NjYwM0JGQjEsIDB4RTQwMjY1RjAsIDB4NjA1Mzc1NkMsIDB4ODBGOEJGODAsCisweEJGODJFNDAyLCAweDg0RjhFNTEyLCAweDcwOTBFNDAyLCAweDY1MDNCRjgyLAorMHg0NjE4RTYwMiwgMHg4MUY2NjA2MywgMHhCRjgwRTQwMiwgMHg4NUY2RTUwMCwKKzB4NjYwM0U0MDIsIDB4RTUwMEJGOEMsIDB4RTQwMjg1RjYsIDB4QkY5MjY2MDMsCisweEU1RkVFNTAwLCAweEUwMTA2NTVDLCAweEJGNjFFNDAzLCAweEU1MTMwRjU0LAorMHhFNDBFQkY2MywgMHgwNUZDRTAxMCwgMHhCRjYzRTQwRSwgMHhFNTAwNzU4NSwKKzB4QkY2NEU0MDMsIDB4RTUwMEU2NDAsIDB4QkY3MUU0MDMsIDB4RTUwMEU2NDAsCisweEJGNzhFNDAzLCAweEU1RkZFNjQwLCAweEUwMTQ2NTVDLCAweEJGNDdFNDA0LAorMHhFNDBGMEY1NCwgMHhFNTA0QkY0OSwgMHgwNUZDRTAxNCwgMHhCRjQ5RTQwRiwKKzB4RTUwMTc1ODQsIDB4QkY0QUU2NDAsIDB4RTUwMUU0MDQsIDB4QkY1N0U2NDAsCisweEU1MDFFNDA0LCAweEU0MDRFNjQwLCAweEFGNUM3RjE4LCAweDdGMTg0RjI2LAorMHgwMDBCNEYyNiwgMHg0RjIyMDAwOSwgMHhEMjQyN0ZGMCwgMHg4ODAxNjAyMSwKKzB4RDI0MThCNzEsIDB4MjY2ODY2MjEsIDB4RDI0MDhCNkQsIDB4MjY2ODY2MjEsCisweEU1MEY4QjY5LCAweEU0MDFCRjFDLCAweEJGMUVFNTAxLCAweEU1ODZFNDAwLAorMHhFNDAwNjU1QywgMHgyRjUwQkYxRSwgMHhCRjFCRTQwMSwgMHhFNDAxRTUwNiwKKzB4QkYxQzY1NDMsIDB4RTQwMUU2NDAsIDB4QkYyOTY1NDMsIDB4RTQwMUU2NDAsCisweEJGMzA2NTQzLCAweDY1RjBFNjQwLCAweDc1NkNFNDAyLCAweEJFRkY2MDUzLAorMHhFNDAyODBGNCwgMHhFNTEyQkYwMSwgMHhFNDAyODRGNCwgMHhCRjAxNzA5MCwKKzB4RTY0MDY1MDMsIDB4QkYwMkU0MDIsIDB4RTY0MEU1MDAsIDB4QkYwRkU0MDIsCisweEU2NDBFNTAwLCAweEJGMTZFNDAyLCAweEU1RkVFNTAwLCAweDYwNTM2NTVDLAorMHhCRUU1RTQwMywgMHhFNTEzODBGOCwgMHhFNDBFQkVFNywgMHhFNDBFODRGOCwKKzB4QkVFNzcwODUsIDB4RTUwMDY1MDMsIDB4QkVFOEU2NDAsIDB4RTUwMEU0MDMsCisweEJFRjVFNjQwLCAweEU1MDBFNDAzLCAweEJFRkNFNjQwLCAweEU1RkZFNDAzLAorMHg2MDUzNjU1QywgMHhCRUNCRTQwNCwgMHhFNDBGODBGQywgMHhFNTA0QkVDRCwKKzB4RTQwRjg0RkMsIDB4QkVDRDcwODMsIDB4RTUwMTY1MDMsIDB4QkVDRUU2NDAsCisweEU1MDFFNDA0LCAweEJFREJFNjQwLCAweEU1MDFFNDA0LCAweEU0MDRFNjQwLAorMHhBRUUwN0YxMCwgMHg3RjEwNEYyNiwgMHgwMDBCNEYyNiwgMHgwMDAwMDAwOSwKKzB4MDAxRTEwMkYsIDB4MDAxRTEwODAsIDB4MDAxRTEwOTAsIDB4MDAxRTEwM0YsCisweDAwMUUxMDNFLCAweDAwMjAyRjVFLCAweDAwMjAyRjYwLCAweDAwMjAyRjYyLAorMHhEMjFERDExQywgMHg2NjIwNjAxMCwgMHg2NzZDNzAwMSwgMHgzNzAwQzkwRiwKKzB4RTUwMDhEMTMsIDB4NjcxMDYyMTAsIDB4NzcwMTYyMkMsIDB4NjQyMzIxNzAsCisweEQ2MTY2MDEwLCAweDQ0MDg0NDA4LCAweDM0MjhDOTBGLCAweDYyNjAyMTAwLAorMHg3MjAxRDUxMywgMHg0NDA4MjYyMCwgMHgwMDBCMzU0QywgMHhEMTBGNjA1MywKKzB4MjU1ODY1MTAsIDB4RTYwMDhEMTMsIDB4RDYwREQ0MEIsIDB4NjU1QzY1NDAsCisweDQ3MDg2NzUzLCAweDM3NTg0NzA4LCAweDQ3MDg2NTQwLCAweDI0NTA3NTAxLAorMHgzNjdDNjA0MCwgMHgyNDAwQzkwRiwgMHg3MkZGNjIxMCwgMHgwMDBCMjEyMCwKKzB4MDAwMDYwNjMsIDB4MDAyMDJGMTksIDB4MDAyMDJGMTgsIDB4MDAyMDJGMUEsCisweDAwMjAyQjQwLCAweDdGRkM0RjIyLCAweEU2ODBEMUE4LCAweDY2NkM2MjEyLAorMHhEMkE3MkYyMiwgMHg2N0YzNjU2MywgMHg0MjBCNzU0MiwgMHg3RjA0RTQwNCwKKzB4MDAwQjRGMjYsIDB4RTY4MDAwMDksIDB4RDJBMTY2NkMsIDB4RTcwMDY1NjMsCisweDQyMkI3NTQwLCAweEU2ODA2NDczLCAweEQyOUQ2NjZDLCAweEU3MDA2NTYzLAorMHg0MjJCNzU0MywgMHgyRkI2NjQ3MywgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwKKzB4NEQxOEVEMDEsIDB4REI5OERDOTcsIDB4NjVDMjUyQzEsIDB4ODkyMDM1MjAsCisweEM5MDM2MDUxLCAweDg5MUM4ODAxLCAweEQxOTRERTkyLCAweDY0RTM0MTBCLAorMHg4NTAzNjUwMywgMHg2NzBENjZCMiwgMHg4OTA3Mzc2MiwgMHhEMjkxRDQ5MCwKKzB4MDAwOTQyMEIsIDB4RTcwMUQxOTAsIDB4MjE3MkFGRTYsIDB4REU4RjY0RTMsCisweDAwMDk0RTBCLCAweEQ0OEZENjhFLCAweDQxMEJEMThGLCAweEFGREIyNkQyLAorMHg0RjI2MDAwOSwgMHg2REY2NkVGNiwgMHgwMDBCNkNGNiwgMHg0RjIyNkJGNiwKKzB4ODU0NjdGRjQsIDB4MkYwMUU2ODEsIDB4NjY2Qzg1NDcsIDB4ODU0ODgxRjEsCisweDgxRjJEMjdCLCAweDY3RjM4NTQyLCAweDg1NDM4MUYzLCAweDgxRjRFNDBDLAorMHg2NTYzNjA1MywgMHg0MjBCODFGNSwgMHg3RjBDNzU0MCwgMHgwMDBCNEYyNiwKKzB4MkY4NjAwMDksIDB4MkZBNjJGOTYsIDB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsCisweDdGRUM0RjIyLCAweEUwMDBEMTc2LCAweEQ0NzgyRjEyLCAweDgxRjI2MTAzLAorMHhEQzc3MUY0MiwgMHhENjc3NkIxMywgMHhFMDAxNEIwOCwgMHg0NjBCREU3NiwKKzB4M0JFQzRCMDAsIDB4NjZDMjFGMDMsIDB4MzYyMDUyQzEsIDB4QTE4MThCMDEsCisweDYwNjEwMDA5LCAweDg4MDFDOTAzLCAweEExN0I4QjAxLCAweDg1NjEwMDA5LAorMHg4QjAxQzgwMSwgMHgwMDA5QTA4MCwgMHg4NUQyNUQ2MywgMHhDOTAzNjYwMywKKzB4ODVEMzY0MDMsIDB4NjA1MzY1MEQsIDB4NDAyMTQwMjEsIDB4NDUwMEM5M0YsCisweDMyMkE2MTAzLCAweDYwNTMyNTJELCAweEM5MDFFNTEwLCAweEQ5NUUzMTUzLAorMHg2RTAzOEQyMSwgMHg0NDA4RDc2MSwgMHg0NDA4Njg3MCwgMHg0NDAwNjIxMywKKzB4Mjg4ODQyMDAsIDB4MzQyQzhGMEUsIDB4NjA0M0QyNUQsIDB4NjBFMzA3MkQsCisweDRBMTk2QTdELCAweDY1OEU2OEE5LCAweDI4NUQ4ODAxLCAweDZBN0M4RjBCLAorMHg2QTEzQTAwOSwgMHg2MDQzRDI1NywgMHg2MUVEMEUyRCwgMHg2ODE5NDExOSwKKzB4Mjg3RDY3OEUsIDB4RDE1NDZBRUMsIDB4MjIyODYyMTAsIDB4RUFGRjg5MDEsCisweEVFRkY2QUFDLCAweDZFRUM2NUFELCAweDhCMEYzNUUwLCAweDREMEJERDNGLAorMHg1NDAzNjRDMywgMHhCRjcyRTUwMiwgMHhENDRDNkQwMywgMHg0MTBCRDEzRiwKKzB4RDc0QjY1RDMsIDB4RDQ0QkVFMDEsIDB4MjdFMkEwMjUsIDB4MjY3OUU3RkMsCisweDgxRDI2MDYzLCAweDk0NjA4NUQzLCAweDYxMDMyMDQ5LCAweDQ1MDgyNjhCLAorMHgyNTFCNjA2MywgMHg2MDUzODFEMiwgMHg4NUQ0ODFEMywgMHg0MTE4RTEwOCwKKzB4ODFENDIwMUIsIDB4RUUwMjYyQzIsIDB4MjA3OTg1MjEsIDB4NjRDMjgxMjEsCisweDYwNDE2NzhELCAweENCMDEzN0UzLCAweDI0MDE4RDA0LCAweEVFRTc4NUQyLAorMHg4MUQyMjBFOSwgMHg0OTBCRDQzOCwgMHg2MEMyMDAwOSwgMHg1MkYzNjZGMiwKKzB4MkIwMkNCMDEsIDB4MjYyMkFGNkYsIDB4RDIyMDg1NjEsIDB4OEYwMkM4MDIsCisweEEwRDI2NEMzLCAweDQyMEIwMDA5LCAweEQ5MzAwMDA5LCAweDVFMDM2NTAzLAorMHgwNzlFRTA0QywgMHg3NzAxREQyRSwgMHg2OUQyMDk3NiwgMHg3OTAxRDYyNiwKKzB4NkQ2MDJEOTIsIDB4ODkwNjJERDgsIDB4RDIxOEQ0MjQsIDB4RUQwMTQyMEIsCisweEEwQjNENzIzLCAweDYyNTEyN0QyLCAweDQxMThFMTBGLCAweDIyMTlFNDAyLAorMHgzMjQwNDQxOCwgMHg4NTUxOEI0NiwgMHgyMEQ5RURGQywgMHg2MDUxODE1MSwKKzB4Q0IwMTdERTMsIDB4ODVFMTI1MDEsIDB4MjBEOUQ2MEEsIDB4NDYwQjgxRTEsCisweDY5RjI2NEMzLCAweEEwOTk1N0YzLCAweDdFMDMyOTcyLCAweDAwMUMzRDlDLAorMHgwMDIwMUUzOCwgMHgwMDIwMkIzOCwgMHgwMDIwMkYwMCwgMHgwMDIwMTA2QywKKzB4MDAyMDJCMDAsIDB4MDAyMDEwRUUsIDB4MDAxRTIxMzAsIDB4MDAyMDEwOEEsCisweDAwMUMzRDMwLCAweDAwMjAzMjAwLCAweDAwMjAxMzU2LCAweDAwMjAzMjBDLAorMHgwMDIwMkIxMCwgMHgwMDIwMjlGOCwgMHgwMDFDM0QwMCwgMHgwMDIwMzIxQywKKzB4MDAyMDMxMDAsIDB4MDAyMDMxODAsIDB4MDAyMDJGMTQsIDB4MDAyMDJCMDgsCisweDAwMUUyMTJDLCAweDAwMjAzMjA0LCAweDAwMjAzMjA4LCAweDAwMjAyQUE0LAorMHgwMDIwMzIyMCwgMHg2RERENkQ1MSwgMHg2REQ5NEQxOSwgMHgyRDZENjZERSwKKzB4NjBEQzdEMDEsIDB4NDExODYxMDMsIDB4OEY0NTg4MDEsIDB4RDY1QjI1MTEsCisweDc0MDE2NDYyLCAweDg1RTMyNjQyLCAweDYwNjM2NjBELCAweDQwMjE0MDIxLAorMHg0NjAwQzkzRiwgMHgzMjJBNkQwMywgMHg2MDYzMjYyRCwgMHhEMTU0QzgwMSwKKzB4ODkwMUQ5NTQsIDB4MkQ2Qjk2QTEsIDB4RTAxMEU2MDAsIDB4NjRERDBGNjQsCisweDA3RkNFMDEwLCAweDQwMDA2MDdDLCAweDYyMkQwMjFELCAweDhEMTIzMjQwLAorMHg2MDYzNjYwMywgMHhFN0ZGMDIxRCwgMHg4QjAxMzI3MCwgMHgwMUQ1QTAwQiwKKzB4MDJGQ0UwMTAsIDB4NzIwMUU2MDQsIDB4NjIyQzBGMjQsIDB4OEJFNzMyNjIsCisweDY2NkMwNkZDLCAweDYwNjM0NjAwLCAweDcxMDEwMTlELCAweEQxNDIwOTE1LAorMHg2OTdENjcxMSwgMHg4OTA3Mzk0MCwgMHg2MDJENjIxMSwgMHg4OTAzODhGRiwKKzB4REQzRTIxRDEsIDB4MkQyMEUyMDEsIDB4RURGQzg1NTEsIDB4ODE1MTIwRDksCisweEQyM0I2MDUxLCAweDY0QzNDQjAxLCAweDI1MDE0MjBCLCAweDAyRkNFMDEwLAorMHg2MTJDRDQzOCwgMHg0NDBCRTAwMSwgMHgyNzAyNjdGMiwgMHhEMjM2ODVFRiwKKzB4NDIwQjU0RjIsIDB4QUU5NjY1MEQsIDB4NDIwQjAwMDksIDB4NTQwMzAwMDksCisweDg1NDQ2RTAzLCAweDREMThFRDA4LCAweDMwRDAyMEQ5LCAweEJFNTY4QjAzLAorMHhBMDA3RTUwMSwgMHg4NTQxMDAwOSwgMHg2MjBEREQyQywgMHg4OTAxMjJEOCwKKzB4RTUwMEJFNEQsIDB4RDIyQkQ0MkEsIDB4NjVFMzQyMEIsIDB4RUQwMUQ3MkEsCisweDI3RDJBRTc5LCAweEVFMDQ4NUYyLCAweDYxMEQ3MDAxLCAweDgxRjIzMUU3LAorMHg3QzA4OEQwMiwgMHgwMDA5QUU2NiwgMHg0RjI2N0YxNCwgMHg2REY2NkVGNiwKKzB4NkJGNjZDRjYsIDB4NjlGNjZBRjYsIDB4NjhGNjAwMEIsIDB4NEYyMjJGRTYsCisweDZFMjJEMjFFLCAweEM4NDA2MEUzLCAweDIyRTI4RDAyLCAweDAwMDlCREQyLAorMHg0MjE4RTI0MCwgMHg4OTAxMkUyOCwgMHgwMDA5QkRERCwgMHhDODEwNjBFMywKKzB4RDQxNzg5MDUsIDB4NDIwQkQyMTcsIDB4QkREQzAwMDksIDB4NjBFMzAwMDksCisweDg5MDFDODA1LCAweDAwMDlCRTJELCAweEM4MDI2MEUzLCAweDRGMjY4OTAyLAorMHg2RUY2QUREOSwgMHgwMDBCNEYyNiwgMHg4MDAwNkVGNiwgMHgwMDIwMzIyMCwKKzB4MDAyMDJGMjYsIDB4MDAyMDJGMkUsIDB4MDAyMDJGMjIsIDB4MDAyMDJGMjQsCisweDAwMjAxMEVFLCAweDAwMjAyOUY4LCAweDAwMjAxM0EyLCAweDAwMDA4MDAwLAorMHgwMDIwMkIwOCwgMHgwMDIwMTA4QSwgMHgwMDFFMjEyQywgMHgwMDFDMzUxMCwKKzB4MDAyMDMyMTQsIDB4MDAyMDEzNTYsIDB4MDgwQTBDMEUsIDB4MDAwMjA0MDYsCisweDFBMUMxRTIwLCAweDEyMTQxNjE4LCAweDJFMzAzMjM0LCAweDI2MjgyQTJDLAorMHgzQTNDM0U0MCwgMHg2QzYyNTY0OCwgMHg0MTExMkYyNiwgMHhFMjIwOEYxOCwKKzB4ODkwQjMxMjMsIDB4MzIxQ0QyMDQsIDB4RDEwMjYyMjAsIDB4NDEyQjMxMkMsCisweDAwMDkwMDA5LCAweDAwMjAyQTIyLCAweDAwMjAyOUQ4LCAweDAwMEJFMDAwLAorMHg0MDAwNjJGNiwgMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwKKzB4NjJGNjAwMEIsIDB4NDAwMDQwMDAsIDB4NDAwMDQwMDAsIDB4NDAwMDQwMDAsCisweDQwMTg0MDAwLCAweDYyRjYwMDBCLCAweDQwMDA0MDAwLCAweDQwMDA0MDAwLAorMHg0MDAwNDAwMCwgMHg0MDI4NDAwMCwgMHg2MkY2MDAwQiwgMHg0MDAwNDAwMCwKKzB4NDAxODQwMDAsIDB4MDAwQjQwMjgsIDB4QzkwRjYyRjYsIDB4NDAwNTQwMDUsCisweDQwMDU0MDA1LCAweDYyRjYwMDBCLCAweDQwMDVDOTA3LCAweDQwMDU0MDA1LAorMHg2MkY2MDAwQiwgMHg0MDA1QzkwMywgMHgwMDBCNDAwNSwgMHhDOTAxNjJGNiwKKzB4MDAwQjQwMDUsIDB4MDAwMDYyRjYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHg1NDRGMEQwQSwgMHg0NjIwNTM1NSwgMHgwMDAwM0E1NywgMHgyMDYzNjU0NCwKKzB4MzIyMDMyMzEsIDB4MjAzNzMwMzAsIDB4MzMzQTMxMzIsIDB4MzQzMjNBMzYsCisweDAwMDAwMDAwLCAweDAwMDAwRDBBLCAweDAwMDAwMDQzLCAweDQyNzA3MzcyLAorMHgzRDIwNjY3NSwgMHg1NTRFMjAzRCwgMHgyMDJDNEM0QywgMHg2RTQ5Njc3QSwKKzB4NEU0OTcyNzQsIDB4NkQ3NTRFNTEsIDB4MDAwMDAwM0QsIDB4NjE3NjZFNDksCisweDIwNjQ2OTZDLCAweDcyNjU3Mzc1LCAweDIwNzI2RjIwLCAweDIwNzk2NTZCLAorMHgwMDIxNDQ0OSwgMHg1MjUwNDU0NSwgMHg1NzIwNEQ0RiwgMHg2NTc0Njk3MiwKKzB4NjQ2MTIwMkMsIDB4MDAzRDcyNjQsIDB4NkM2MTc2MjAsIDB4MDAwMDAwM0QsCisweDAwMDAwQTBELCAweDZFNkI2RTU1LCAweDIwNkU3NzZGLCAweDZENkQ2RjYzLAorMHgzRDY0NkU2MSwgMHgwMDAwMDAwMCwgMHgwMDBBMEQ1MiwgMHgyMDNBMzA1MSwKKzB4MDAwMDAwMjAsIDB4MjAzQTMxNTEsIDB4MDAwMDAwMjAsIDB4MjAzQTMyNTEsCisweDAwMDAwMDIwLCAweDIwM0EzMzUxLCAweDAwMDAwMDIwLCAweDIwM0EzNDUxLAorMHgwMDAwMDAyMCwgMHg2MTQzNzc0OCwgMHg3MjYyNjk2QywgMHg2RjY5NzQ2MSwKKzB4NjYyMDIwNkUsIDB4MEE2QzY5NjEsIDB4MDAwMDAwMEQsIDB4NzM2OTZGNEUsCisweDYxNDMyMDY1LCAweDcyNjI2OTZDLCAweDZGNjk3NDYxLCAweDYxNjYyMDZFLAorMHgyMTIxNkM2OSwgMHgwMDAwMEQwQSwgMHgwMDAwMDA3MiwgMHgwMDIwNTIyMCwKKzB4MDAwMDBEMEEsIDB4NjI3MzU1NzYsIDB4NzQ3MzcyNUYsIDB4MDAwMDBBMEQsCisweDYyNzM1NTc2LCAweDczNzU3MzVGLCAweDY0NkU2NTcwLCAweDAwMDAwQTBELAorMHg2MjczNTU3NiwgMHg3MzY1NzI1RiwgMHgwMDBBMEQ2RCwgMHgwMDAwMDA0MiwKKzB4NzI3NDZFNDksIDB4NkQ2NTIwNTEsIDB4MkM3OTc0NzAsIDB4NDk2NzdBMjAsCisweDQ5NzI3NDZFLCAweDc1NEU1MTRFLCAweDAwMDAzRDZELCAweDY1NEM3MjQ1LAorMHgwMDAwMDA2RSwgMHgwMDAwMDA0OSwgMHgyMDc0NkY0RSwgMHg3NTZGNkU2NSwKKzB4NDkyMDY4NjcsIDB4NDIyMDUxNEUsIDB4MEEwRDY2NzUsIDB4MDAwMDAwMDAsCisweDAwMDAwMEZGLCAweDAwMDIwMDAxLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAxMEUwMTBELCAweDAwMDIwMDAzLCAweDAxMDkwMTA4LCAweDAwMDIwMTBBLAorMHgwMjAwMDAwMywgMHgwMjAyMDIwMSwgMHgwMjA0MDIwMywgMHgwMjA2MDIwNSwKKzB4MDIwMjAyMDAsIDB4MDIwNDAyMDMsIDB4MDIwQzAyMDcsIDB4MDIwRTAyMEQsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDEwRTAxMEQsIDB4MDBGRjAxMEYsIDB4MDEwOTAxMDgsIDB4MDEwQjAxMEEsCisweDAyMDAwMEZGLCAweDAyMDIwMjAxLCAweDAyMDQwMjAzLCAweDAyMDYwMjA1LAorMHgwMjAyMDIwMCwgMHgwMjA0MDIwMywgMHgwMjBDMDIwQiwgMHgwMjBFMDIwRCwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMDIwNTIyMCwgMHgwMDAwMDA0NiwgMHgwMDAwMDA1OSwgMHg3MzIwNDE0MiwKKzB4MDAzRDcxNjUsIDB4NDk1NDQxMjAsIDB4MDAwMDIwNEQsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMkUwMjA5LCAweDgwMDAwMTAxLCAweDAwMDQwOUZBLAorMHgwMEZGMDQwMCwgMHgwNTA3MDAwMCwgMHgwMjAwMDIwMSwgMHg4MjA1MDcwMCwKKzB4MDAwMjAwMDIsIDB4MDM4MzA1MDcsIDB4MDcwMTAwNDAsIDB4NDAwMjA0MDUsCisweDAyMDkwMDAwLCAweDAxMDEwMDJFLCAweDA5RkE4MDAwLCAweDA0MDAwMDA0LAorMHgwMDAwMDBGRiwgMHgwMjAxMDUwNywgMHgwNzAwMDA0MCwgMHg0MDAyODIwNSwKKzB4MDUwNzAwMDAsIDB4MDA0MDAzODMsIDB4MDQwNTA3MDEsIDB4MDAwMDQwMDIsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDA3MDkwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9OworCitjb25zdCB1MzJfdCB6Y0RLRndJbWFnZVNpemU9MTI5ODg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBhbmkuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGFuaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOTViNWQwMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGFuaS5jCkBAIC0wLDAgKzEsNzMyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICIuLi84MDIxMWNvcmUvY3ByZWNvbXAuaCIKKyNpbmNsdWRlICJocGFuaS5oIgorI2luY2x1ZGUgImhwdXNiLmgiCisKKworZXh0ZXJuIHUxNl90IHpmRGVsYXlXcml0ZUludGVybmFsUmVnKHpkZXZfdCogZGV2LCB1MzJfdCBhZGRyLCB1MzJfdCB2YWwpOworZXh0ZXJuIHUxNl90IHpmRmx1c2hEZWxheVdyaXRlKHpkZXZfdCogZGV2KTsKKworLyoKKyAqIEFudGkgbm9pc2UgaW1tdW5pdHkgc3VwcG9ydC4gIFdlIHRyYWNrIHBoeSBlcnJvcnMgYW5kIHJlYWN0CisgKiB0byBleGNlc3NpdmUgZXJyb3JzIGJ5IGFkanVzdGluZyB0aGUgbm9pc2UgaW1tdW5pdHkgcGFyYW1ldGVycy4KKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTmV3IEFuaSBBbGdvcml0aG0gZm9yIFN0YXRpb24gc2lkZSBvbmx5CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFpNX0hBTF9OT0lTRV9JTU1VTkVfTUFYICAgICA0ICAgLyogTWF4IG5vaXNlIGltbXVuaXR5IGxldmVsICovCisjZGVmaW5lIFpNX0hBTF9TUFVSX0lNTVVORV9NQVggICAgICA3ICAgLyogTWF4IHNwdXIgaW1tdW5pdHkgbGV2ZWwgKi8KKyNkZWZpbmUgWk1fSEFMX0ZJUlNUX1NURVBfTUFYICAgICAgIDIgICAvKiBNYXggZmlyc3Qgc3RlcCBsZXZlbCAqLworCisjZGVmaW5lIFpNX0hBTF9BTklfT0ZETV9UUklHX0hJR0ggICAgICAgNTAwCisjZGVmaW5lIFpNX0hBTF9BTklfT0ZETV9UUklHX0xPVyAgICAgICAgMjAwCisjZGVmaW5lIFpNX0hBTF9BTklfQ0NLX1RSSUdfSElHSCAgICAgICAgMjAwCisjZGVmaW5lIFpNX0hBTF9BTklfQ0NLX1RSSUdfTE9XICAgICAgICAgMTAwCisjZGVmaW5lIFpNX0hBTF9BTklfTk9JU0VfSU1NVU5FX0xWTCAgICAgNAorI2RlZmluZSBaTV9IQUxfQU5JX1VTRV9PRkRNX1dFQUtfU0lHICAgIFRSVUUKKyNkZWZpbmUgWk1fSEFMX0FOSV9DQ0tfV0VBS19TSUdfVEhSICAgICBGQUxTRQorI2RlZmluZSBaTV9IQUxfQU5JX1NQVVJfSU1NVU5FX0xWTCAgICAgIDcKKyNkZWZpbmUgWk1fSEFMX0FOSV9GSVJTVEVQX0xWTCAgICAgICAgICAwCisjZGVmaW5lIFpNX0hBTF9BTklfUlNTSV9USFJfSElHSCAgICAgICAgNDAKKyNkZWZpbmUgWk1fSEFMX0FOSV9SU1NJX1RIUl9MT1cgICAgICAgICA3CisjZGVmaW5lIFpNX0hBTF9BTklfUEVSSU9EICAgICAgICAgICAgICAgMTAwCisKKyNkZWZpbmUgWk1fSEFMX0VQX1JORCh4LCBtdWwpIFwKKyAgICAoKCgoeCklKG11bCkpID49ICgobXVsKS8yKSkgPyAoKHgpICsgKChtdWwpIC0gMSkpIC8gKG11bCkgOiAoeCkvKG11bCkpCisKK3MzMl90IEJFQUNPTl9SU1NJKHpkZXZfdCogZGV2KQoreworICAgIHMzMl90IHJzc2k7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7CisKKyAgICByc3NpID0gWk1fSEFMX0VQX1JORChIcFByaXYtPnN0YXRzLmFzdF9ub2Rlc3RhdHMubnNfYXZnYnJzc2ksIFpNX0hBTF9SU1NJX0VQX01VTFRJUExJRVIpOworCisgICAgcmV0dXJuIHJzc2k7Cit9CisKKy8qCisgKiBTZXR1cCBBTkkgaGFuZGxpbmcuICBTZXRzIGFsbCB0aHJlc2hvbGRzIGFuZCBsZXZlbHMgdG8gZGVmYXVsdCBsZXZlbCBBTkQKKyAqIHJlc2V0cyB0aGUgY2hhbm5lbCBzdGF0aXN0aWNzCisgKi8KKwordm9pZCB6ZkhwQW5pQXR0YWNoKHpkZXZfdCogZGV2KQoreworI2RlZmluZSBOKGEpICAgICAoc2l6ZW9mKGEpIC8gc2l6ZW9mKGFbMF0pKQorICAgIHUzMl90IGk7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7CisKKyAgICBjb25zdCBpbnQgdG90YWxTaXplRGVzaXJlZFtdID0geyAtNTUsIC01NSwgLTU1LCAtNTUsIC02MiB9OworICAgIGNvbnN0IGludCBjb2Fyc2VIaWdoW10gICAgICAgPSB7IC0xNCwgLTE0LCAtMTQsIC0xNCwgLTEyIH07CisgICAgY29uc3QgaW50IGNvYXJzZUxvd1tdICAgICAgICA9IHsgLTY0LCAtNjQsIC02NCwgLTY0LCAtNzAgfTsKKyAgICBjb25zdCBpbnQgZmlycHdyW10gICAgICAgICAgID0geyAtNzgsIC03OCwgLTc4LCAtNzgsIC04MCB9OworCisgICAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKyAgICB7CisgICAgICAgIEhwUHJpdi0+dG90YWxTaXplRGVzaXJlZFtpXSA9IHRvdGFsU2l6ZURlc2lyZWRbaV07CisgICAgICAgIEhwUHJpdi0+Y29hcnNlSGlnaFtpXSA9IGNvYXJzZUhpZ2hbaV07CisgICAgICAgIEhwUHJpdi0+Y29hcnNlTG93W2ldID0gY29hcnNlTG93W2ldOworICAgICAgICBIcFByaXYtPmZpcnB3cltpXSA9IGZpcnB3cltpXTsKKyAgICB9CisKKyAgICAvKiBvd2wgaGFzIHBoeSBjb3VudGVycyAqLworICAgIEhwUHJpdi0+aGFzSHdQaHlDb3VudGVycyA9IDE7CisKKyAgICBtZW1zZXQoKGNoYXIgKikmSHBQcml2LT5hbmksIDAsIHNpemVvZihIcFByaXYtPmFuaSkpOworICAgIGZvciAoaSA9IDA7IGkgPCBOKHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsKTsgaSsrKQorICAgIHsKKyAgICAgICAgLyogTmV3IEFOSSBzdHVmZiAqLworICAgICAgICBIcFByaXYtPmFuaVtpXS5vZmRtVHJpZ0hpZ2ggPSBaTV9IQUxfQU5JX09GRE1fVFJJR19ISUdIOworICAgICAgICBIcFByaXYtPmFuaVtpXS5vZmRtVHJpZ0xvdyA9IFpNX0hBTF9BTklfT0ZETV9UUklHX0xPVzsKKyAgICAgICAgSHBQcml2LT5hbmlbaV0uY2NrVHJpZ0hpZ2ggPSBaTV9IQUxfQU5JX0NDS19UUklHX0hJR0g7CisgICAgICAgIEhwUHJpdi0+YW5pW2ldLmNja1RyaWdMb3cgPSBaTV9IQUxfQU5JX0NDS19UUklHX0xPVzsKKyAgICAgICAgSHBQcml2LT5hbmlbaV0ucnNzaVRockhpZ2ggPSBaTV9IQUxfQU5JX1JTU0lfVEhSX0hJR0g7CisgICAgICAgIEhwUHJpdi0+YW5pW2ldLnJzc2lUaHJMb3cgPSBaTV9IQUxfQU5JX1JTU0lfVEhSX0xPVzsKKyAgICAgICAgSHBQcml2LT5hbmlbaV0ub2ZkbVdlYWtTaWdEZXRlY3RPZmYgPSAhWk1fSEFMX0FOSV9VU0VfT0ZETV9XRUFLX1NJRzsKKyAgICAgICAgSHBQcml2LT5hbmlbaV0uY2NrV2Vha1NpZ1RocmVzaG9sZCA9IFpNX0hBTF9BTklfQ0NLX1dFQUtfU0lHX1RIUjsKKyAgICAgICAgSHBQcml2LT5hbmlbaV0uc3B1ckltbXVuaXR5TGV2ZWwgPSBaTV9IQUxfQU5JX1NQVVJfSU1NVU5FX0xWTDsKKyAgICAgICAgSHBQcml2LT5hbmlbaV0uZmlyc3RlcExldmVsID0gWk1fSEFMX0FOSV9GSVJTVEVQX0xWTDsKKyAgICAgICAgaWYgKEhwUHJpdi0+aGFzSHdQaHlDb3VudGVycykKKyAgICAgICAgeworICAgICAgICAgICAgSHBQcml2LT5hbmlbaV0ub2ZkbVBoeUVyckJhc2UgPSAwOy8vQVJfUEhZX0NPVU5UTUFYIC0gWk1fSEFMX0FOSV9PRkRNX1RSSUdfSElHSDsKKyAgICAgICAgICAgIEhwUHJpdi0+YW5pW2ldLmNja1BoeUVyckJhc2UgPSAwOy8vQVJfUEhZX0NPVU5UTUFYIC0gWk1fSEFMX0FOSV9DQ0tfVFJJR19ISUdIOworICAgICAgICB9CisgICAgfQorICAgIGlmIChIcFByaXYtPmhhc0h3UGh5Q291bnRlcnMpCisgICAgeworICAgICAgICAvL3ptX2RlYnVnX21zZzIoIlNldHRpbmcgT2ZkbUVyckJhc2UgPSAweCIsIEhwUHJpdi0+YW5pWzBdLm9mZG1QaHlFcnJCYXNlKTsKKyAgICAgICAgLy96bV9kZWJ1Z19tc2cyKCJTZXR0aW5nIGNja0VyckJhc2UgPSAweCIsIEhwUHJpdi0+YW5pWzBdLmNja1BoeUVyckJhc2UpOworICAgICAgICAvL09TX1JFR19XUklURShhaCwgQVJfUEhZX0VSUl8xLCBIcFByaXYtPmFuaVswXS5vZmRtUGh5RXJyQmFzZSk7CisgICAgICAgIC8vT1NfUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzIsIEhwUHJpdi0+YW5pWzBdLmNja1BoeUVyckJhc2UpOworICAgIH0KKyAgICBIcFByaXYtPmFuaVBlcmlvZCA9IFpNX0hBTF9BTklfUEVSSU9EOworICAgIC8vaWYgKGF0aF9oYWxfZW5hYmxlQU5JKQorICAgIEhwUHJpdi0+cHJvY1BoeUVyciB8PSBaTV9IQUxfUFJPQ0VTU19BTkk7CisKKyAgICBIcFByaXYtPnN0YXRzLmFzdF9ub2Rlc3RhdHMubnNfYXZnYnJzc2kgPSBaTV9SU1NJX0RVTU1ZX01BUktFUjsKKyAgICBIcFByaXYtPnN0YXRzLmFzdF9ub2Rlc3RhdHMubnNfYXZncnNzaSA9IFpNX1JTU0lfRFVNTVlfTUFSS0VSOworICAgIEhwUHJpdi0+c3RhdHMuYXN0X25vZGVzdGF0cy5uc19hdmd0eHJzc2kgPSBaTV9SU1NJX0RVTU1ZX01BUktFUjsKKyN1bmRlZiBOCit9CisKKy8qCisgKiBDb250cm9sIEFkYXB0aXZlIE5vaXNlIEltbXVuaXR5IFBhcmFtZXRlcnMKKyAqLwordThfdCB6ZkhwQW5pQ29udHJvbCh6ZGV2X3QqIGRldiwgWk1fSEFMX0FOSV9DTUQgY21kLCBpbnQgcGFyYW0pCit7CisjZGVmaW5lIE4oYSkgKHNpemVvZihhKS9zaXplb2YoYVswXSkpCisgICAgdHlwZWRlZiBzMzJfdCBUQUJMRVtdOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOworCisgICAgc3RydWN0IHpzQW5pU3RhdGUgKmFuaVN0YXRlID0gSHBQcml2LT5jdXJhbmk7CisKKyAgICBzd2l0Y2ggKGNtZCkKKyAgICB7CisgICAgY2FzZSBaTV9IQUxfQU5JX05PSVNFX0lNTVVOSVRZX0xFVkVMOgorICAgIHsKKyAgICAgICAgdTMyX3QgbGV2ZWwgPSBwYXJhbTsKKworICAgICAgICBpZiAobGV2ZWwgPj0gTihIcFByaXYtPnRvdGFsU2l6ZURlc2lyZWQpKQorICAgICAgICB7CisgICAgICAgICAgem1fZGVidWdfbXNnMSgibGV2ZWwgb3V0IG9mIHJhbmdlLCBkZXNpcmVkIGxldmVsIDogIiwgbGV2ZWwpOworICAgICAgICAgIHptX2RlYnVnX21zZzEoIm1heCBsZXZlbCA6ICIsIE4oSHBQcml2LT50b3RhbFNpemVEZXNpcmVkKSk7CisgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBBUl9QSFlfREVTSVJFRF9TWiwKKyAgICAgICAgICAgICAgICAoSHBQcml2LT5yZWdQSFlEZXNpcmVkU1ogJiB+QVJfUEhZX0RFU0lSRURfU1pfVE9UX0RFUykKKyAgICAgICAgICAgICAgICB8ICgoSHBQcml2LT50b3RhbFNpemVEZXNpcmVkW2xldmVsXSA8PCBBUl9QSFlfREVTSVJFRF9TWl9UT1RfREVTX1MpCisgICAgICAgICAgICAgICAgJiBBUl9QSFlfREVTSVJFRF9TWl9UT1RfREVTKSk7CisgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgQVJfUEhZX0FHQ19DVEwxLAorICAgICAgICAgICAgICAgIChIcFByaXYtPnJlZ1BIWUFnY0N0bDEgJiB+QVJfUEhZX0FHQ19DVEwxX0NPQVJTRV9MT1cpCisgICAgICAgICAgICAgICAgfCAoKEhwUHJpdi0+Y29hcnNlTG93W2xldmVsXSA8PCBBUl9QSFlfQUdDX0NUTDFfQ09BUlNFX0xPV19TKQorICAgICAgICAgICAgICAgICYgQVJfUEhZX0FHQ19DVEwxX0NPQVJTRV9MT1cpKTsKKyAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBBUl9QSFlfQUdDX0NUTDEsCisgICAgICAgICAgICAgICAgKEhwUHJpdi0+cmVnUEhZQWdjQ3RsMSAmIH5BUl9QSFlfQUdDX0NUTDFfQ09BUlNFX0hJR0gpCisgICAgICAgICAgICAgICAgfCAoKEhwUHJpdi0+Y29hcnNlSGlnaFtsZXZlbF0gPDwgQVJfUEhZX0FHQ19DVEwxX0NPQVJTRV9ISUdIX1MpCisgICAgICAgICAgICAgICAgJiBBUl9QSFlfQUdDX0NUTDFfQ09BUlNFX0hJR0gpKTsKKyAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBBUl9QSFlfRklORF9TSUcsCisgICAgICAgICAgICAgICAgKEhwUHJpdi0+cmVnUEhZRmluZFNpZyAmIH5BUl9QSFlfRklORF9TSUdfRklSUFdSKQorICAgICAgICAgICAgICAgIHwgKChIcFByaXYtPmZpcnB3cltsZXZlbF0gPDwgQVJfUEhZX0ZJTkRfU0lHX0ZJUlBXUl9TKQorICAgICAgICAgICAgICAgICYgQVJfUEhZX0ZJTkRfU0lHX0ZJUlBXUikpOworICAgICAgICB6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworCisgICAgICAgIGlmIChsZXZlbCA+IGFuaVN0YXRlLT5ub2lzZUltbXVuaXR5TGV2ZWwpCisgICAgICAgICAgICBIcFByaXYtPnN0YXRzLmFzdF9hbmlfbml1cCsrOworICAgICAgICBlbHNlIGlmIChsZXZlbCA8IGFuaVN0YXRlLT5ub2lzZUltbXVuaXR5TGV2ZWwpCisgICAgICAgICAgICBIcFByaXYtPnN0YXRzLmFzdF9hbmlfbmlkb3duKys7CisgICAgICAgIGFuaVN0YXRlLT5ub2lzZUltbXVuaXR5TGV2ZWwgPSAodThfdClsZXZlbDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgWk1fSEFMX0FOSV9PRkRNX1dFQUtfU0lHTkFMX0RFVEVDVElPTjoKKyAgICB7CisgICAgICAgIGNvbnN0IFRBQkxFIG0xVGhyZXNoTG93ICAgPSB7IDEyNywgICA1MCB9OworICAgICAgICBjb25zdCBUQUJMRSBtMlRocmVzaExvdyAgID0geyAxMjcsICAgNDAgfTsKKyAgICAgICAgY29uc3QgVEFCTEUgbTFUaHJlc2ggICAgICA9IHsgMTI3LCAweDRkIH07CisgICAgICAgIGNvbnN0IFRBQkxFIG0yVGhyZXNoICAgICAgPSB7IDEyNywgMHg0MCB9OworICAgICAgICBjb25zdCBUQUJMRSBtMkNvdW50VGhyICAgID0geyAgMzEsICAgMTYgfTsKKyAgICAgICAgY29uc3QgVEFCTEUgbTJDb3VudFRockxvdyA9IHsgIDYzLCAgIDQ4IH07CisgICAgICAgIHUzMl90IG9uID0gcGFyYW0gPyAxIDogMDsKKworICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIEFSX1BIWV9TRkNPUlJfTE9XLAorICAgICAgICAgICAgICAgIChIcFByaXYtPnJlZ1BIWVNmY29yckxvdyAmIH5BUl9QSFlfU0ZDT1JSX0xPV19NMV9USFJFU0hfTE9XKQorICAgICAgICAgICAgICAgIHwgKChtMVRocmVzaExvd1tvbl0gPDwgQVJfUEhZX1NGQ09SUl9MT1dfTTFfVEhSRVNIX0xPV19TKQorICAgICAgICAgICAgICAgICYgQVJfUEhZX1NGQ09SUl9MT1dfTTFfVEhSRVNIX0xPVykpOworICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIEFSX1BIWV9TRkNPUlJfTE9XLAorICAgICAgICAgICAgICAgIChIcFByaXYtPnJlZ1BIWVNmY29yckxvdyAmIH5BUl9QSFlfU0ZDT1JSX0xPV19NMl9USFJFU0hfTE9XKQorICAgICAgICAgICAgICAgIHwgKChtMlRocmVzaExvd1tvbl0gPDwgQVJfUEhZX1NGQ09SUl9MT1dfTTJfVEhSRVNIX0xPV19TKQorICAgICAgICAgICAgICAgICYgQVJfUEhZX1NGQ09SUl9MT1dfTTJfVEhSRVNIX0xPVykpOworICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIEFSX1BIWV9TRkNPUlIsCisgICAgICAgICAgICAgICAgKEhwUHJpdi0+cmVnUEhZU2Zjb3JyICYgfkFSX1BIWV9TRkNPUlJfTTFfVEhSRVNIKQorICAgICAgICAgICAgICAgIHwgKChtMVRocmVzaFtvbl0gPDwgQVJfUEhZX1NGQ09SUl9NMV9USFJFU0hfUykKKyAgICAgICAgICAgICAgICAmIEFSX1BIWV9TRkNPUlJfTTFfVEhSRVNIKSk7CisgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgQVJfUEhZX1NGQ09SUiwKKyAgICAgICAgICAgICAgICAoSHBQcml2LT5yZWdQSFlTZmNvcnIgJiB+QVJfUEhZX1NGQ09SUl9NMl9USFJFU0gpCisgICAgICAgICAgICAgICAgfCAoKG0yVGhyZXNoW29uXSA8PCBBUl9QSFlfU0ZDT1JSX00yX1RIUkVTSF9TKQorICAgICAgICAgICAgICAgICYgQVJfUEhZX1NGQ09SUl9NMl9USFJFU0gpKTsKKyAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBBUl9QSFlfU0ZDT1JSLAorICAgICAgICAgICAgICAgIChIcFByaXYtPnJlZ1BIWVNmY29yciAmIH5BUl9QSFlfU0ZDT1JSX00yQ09VTlRfVEhSKQorICAgICAgICAgICAgICAgIHwgKChtMkNvdW50VGhyW29uXSA8PCBBUl9QSFlfU0ZDT1JSX00yQ09VTlRfVEhSX1MpCisgICAgICAgICAgICAgICAgJiBBUl9QSFlfU0ZDT1JSX00yQ09VTlRfVEhSKSk7CisgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgQVJfUEhZX1NGQ09SUl9MT1csCisgICAgICAgICAgICAgICAgKEhwUHJpdi0+cmVnUEhZU2Zjb3JyTG93ICYgfkFSX1BIWV9TRkNPUlJfTE9XX00yQ09VTlRfVEhSX0xPVykKKyAgICAgICAgICAgICAgICB8ICgobTJDb3VudFRockxvd1tvbl0gPDwgQVJfUEhZX1NGQ09SUl9MT1dfTTJDT1VOVF9USFJfTE9XX1MpCisgICAgICAgICAgICAgICAgJiBBUl9QSFlfU0ZDT1JSX0xPV19NMkNPVU5UX1RIUl9MT1cpKTsKKworICAgICAgICBpZiAob24pCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgQVJfUEhZX1NGQ09SUl9MT1csCisgICAgICAgICAgICAgICAgICAgIEhwUHJpdi0+cmVnUEhZU2Zjb3JyTG93IHwgQVJfUEhZX1NGQ09SUl9MT1dfVVNFX1NFTEZfQ09SUl9MT1cpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBBUl9QSFlfU0ZDT1JSX0xPVywKKyAgICAgICAgICAgICAgICAgICAgSHBQcml2LT5yZWdQSFlTZmNvcnJMb3cgJiB+QVJfUEhZX1NGQ09SUl9MT1dfVVNFX1NFTEZfQ09SUl9MT1cpOworICAgICAgICB9CisgICAgICAgIHpmRmx1c2hEZWxheVdyaXRlKGRldik7CisgICAgICAgIGlmICghb24gIT0gYW5pU3RhdGUtPm9mZG1XZWFrU2lnRGV0ZWN0T2ZmKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob24pCisgICAgICAgICAgICAgICAgSHBQcml2LT5zdGF0cy5hc3RfYW5pX29mZG1vbisrOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEhwUHJpdi0+c3RhdHMuYXN0X2FuaV9vZmRtb2ZmKys7CisgICAgICAgICAgICBhbmlTdGF0ZS0+b2ZkbVdlYWtTaWdEZXRlY3RPZmYgPSAhb247CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgWk1fSEFMX0FOSV9DQ0tfV0VBS19TSUdOQUxfVEhSOgorICAgIHsKKyAgICAgICAgY29uc3QgVEFCTEUgd2Vha1NpZ1RockNjayA9IHsgOCwgNiB9OworICAgICAgICB1MzJfdCBoaWdoID0gcGFyYW0gPyAxIDogMDsKKworICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIEFSX1BIWV9DQ0tfREVURUNULAorICAgICAgICAgICAgICAgIChIcFByaXYtPnJlZ1BIWUNja0RldGVjdCAmIH5BUl9QSFlfQ0NLX0RFVEVDVF9XRUFLX1NJR19USFJfQ0NLKQorICAgICAgICAgICAgICAgIHwgKCh3ZWFrU2lnVGhyQ2NrW2hpZ2hdIDw8IEFSX1BIWV9DQ0tfREVURUNUX1dFQUtfU0lHX1RIUl9DQ0tfUykKKyAgICAgICAgICAgICAgICAmIEFSX1BIWV9DQ0tfREVURUNUX1dFQUtfU0lHX1RIUl9DQ0spKTsKKyAgICAgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKyAgICAgICAgaWYgKGhpZ2ggIT0gYW5pU3RhdGUtPmNja1dlYWtTaWdUaHJlc2hvbGQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChoaWdoKQorICAgICAgICAgICAgICAgIEhwUHJpdi0+c3RhdHMuYXN0X2FuaV9jY2toaWdoKys7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgSHBQcml2LT5zdGF0cy5hc3RfYW5pX2Nja2xvdysrOworICAgICAgICAgICAgYW5pU3RhdGUtPmNja1dlYWtTaWdUaHJlc2hvbGQgPSAodThfdCloaWdoOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFpNX0hBTF9BTklfRklSU1RFUF9MRVZFTDoKKyAgICB7CisgICAgICAgIGNvbnN0IFRBQkxFIGZpcnN0ZXAgPSB7IDAsIDQsIDggfTsKKyAgICAgICAgdTMyX3QgbGV2ZWwgPSBwYXJhbTsKKworICAgICAgICBpZiAobGV2ZWwgPj0gTihmaXJzdGVwKSkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMSgibGV2ZWwgb3V0IG9mIHJhbmdlLCBkZXNpcmVkIGxldmVsIDogIiwgbGV2ZWwpOworICAgICAgICAgICAgem1fZGVidWdfbXNnMSgibWF4IGxldmVsIDogIiwgTihmaXJzdGVwKSk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBBUl9QSFlfRklORF9TSUcsCisgICAgICAgICAgICAgICAgKEhwUHJpdi0+cmVnUEhZRmluZFNpZyAmIH5BUl9QSFlfRklORF9TSUdfRklSU1RFUCkKKyAgICAgICAgICAgICAgICB8ICgoZmlyc3RlcFtsZXZlbF0gPDwgQVJfUEhZX0ZJTkRfU0lHX0ZJUlNURVBfUykKKyAgICAgICAgICAgICAgICAmIEFSX1BIWV9GSU5EX1NJR19GSVJTVEVQKSk7CisgICAgICAgIHpmRmx1c2hEZWxheVdyaXRlKGRldik7CisgICAgICAgIGlmIChsZXZlbCA+IGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwpCisgICAgICAgICAgICBIcFByaXYtPnN0YXRzLmFzdF9hbmlfc3RlcHVwKys7CisgICAgICAgIGVsc2UgaWYgKGxldmVsIDwgYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCkKKyAgICAgICAgICAgIEhwUHJpdi0+c3RhdHMuYXN0X2FuaV9zdGVwZG93bisrOworICAgICAgICBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsID0gKHU4X3QpbGV2ZWw7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFpNX0hBTF9BTklfU1BVUl9JTU1VTklUWV9MRVZFTDoKKyAgICB7CisgICAgICAgIGNvbnN0IFRBQkxFIGN5Y3B3clRocjEgPSB7IDIsIDQsIDYsIDgsIDEwLCAxMiwgMTQsIDE2IH07CisgICAgICAgIHUzMl90IGxldmVsID0gcGFyYW07CisKKyAgICAgICAgaWYgKGxldmVsID49IE4oY3ljcHdyVGhyMSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzEoImxldmVsIG91dCBvZiByYW5nZSwgZGVzaXJlZCBsZXZlbCA6ICIsIGxldmVsKTsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzEoIm1heCBsZXZlbCA6ICIsIE4oY3ljcHdyVGhyMSkpOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgQVJfUEhZX1RJTUlORzUsCisgICAgICAgICAgICAgICAgKEhwUHJpdi0+cmVnUEhZVGltaW5nNSAmIH5BUl9QSFlfVElNSU5HNV9DWUNQV1JfVEhSMSkKKyAgICAgICAgICAgICAgICB8ICgoY3ljcHdyVGhyMVtsZXZlbF0gPDwgQVJfUEhZX1RJTUlORzVfQ1lDUFdSX1RIUjFfUykKKyAgICAgICAgICAgICAgICAmIEFSX1BIWV9USU1JTkc1X0NZQ1BXUl9USFIxKSk7CisgICAgICAgIHpmRmx1c2hEZWxheVdyaXRlKGRldik7CisgICAgICAgIGlmIChsZXZlbCA+IGFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCkKKyAgICAgICAgICAgIEhwUHJpdi0+c3RhdHMuYXN0X2FuaV9zcHVydXArKzsKKyAgICAgICAgZWxzZSBpZiAobGV2ZWwgPCBhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwpCisgICAgICAgICAgICBIcFByaXYtPnN0YXRzLmFzdF9hbmlfc3B1cmRvd24rKzsKKyAgICAgICAgYW5pU3RhdGUtPnNwdXJJbW11bml0eUxldmVsID0gKHU4X3QpbGV2ZWw7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFpNX0hBTF9BTklfUFJFU0VOVDoKKyAgICAgICAgYnJlYWs7CisjaWZkZWYgQUhfUFJJVkFURV9ESUFHCisgICAgY2FzZSBaTV9IQUxfQU5JX01PREU6CisgICAgICAgIGlmIChwYXJhbSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBIcFByaXYtPnByb2NQaHlFcnIgJj0gflpNX0hBTF9QUk9DRVNTX0FOSTsKKyAgICAgICAgICAgIC8qIFR1cm4gb2ZmIEhXIGNvdW50ZXJzIGlmIHdlIGhhdmUgdGhlbSAqLworICAgICAgICAgICAgemZIcEFuaURldGFjaChkZXYpOworICAgICAgICAgICAgLy96ZkhwU2V0UnhGaWx0ZXIoZGV2LCB6ZkhwR2V0UnhGaWx0ZXIoZGV2KSAmfiBIQUxfUlhfRklMVEVSX1BIWUVSUik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7ICAgICAgICAgICAvKiBub3JtYWwvYXV0byBtb2RlICovCisgICAgICAgICAgICBIcFByaXYtPnByb2NQaHlFcnIgfD0gWk1fSEFMX1BST0NFU1NfQU5JOworICAgICAgICAgICAgaWYgKEhwUHJpdi0+aGFzSHdQaHlDb3VudGVycykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvL3pmSHBTZXRSeEZpbHRlcihkZXYsIHpmSHBHZXRSeEZpbHRlcihkZXYpICZ+IEhBTF9SWF9GSUxURVJfUEhZRVJSKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvL3pmSHBTZXRSeEZpbHRlcihkZXYsIHpmSHBHZXRSeEZpbHRlcihkZXYpIHwgSEFMX1JYX0ZJTFRFUl9QSFlFUlIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWk1fSEFMX0FOSV9QSFlFUlJfUkVTRVQ6CisgICAgICAgIEhwUHJpdi0+c3RhdHMuYXN0X2FuaV9vZmRtZXJycyA9IDA7CisgICAgICAgIEhwUHJpdi0+c3RhdHMuYXN0X2FuaV9jY2tlcnJzID0gMDsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQUhfUFJJVkFURV9ESUFHICovCisgICAgZGVmYXVsdDoKKyAgICAgICAgem1fZGVidWdfbXNnMSgiaW52YWxpZCBjbWQgIiwgY21kKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKKyN1bmRlZiAgTgorfQorCit2b2lkIHpmSHBBbmlSZXN0YXJ0KHpkZXZfdCogZGV2KQoreworICAgIHN0cnVjdCB6c0FuaVN0YXRlICphbmlTdGF0ZTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKKworICAgIGFuaVN0YXRlID0gSHBQcml2LT5jdXJhbmk7CisKKyAgICBhbmlTdGF0ZS0+bGlzdGVuVGltZSA9IDA7CisgICAgaWYgKEhwUHJpdi0+aGFzSHdQaHlDb3VudGVycykKKyAgICB7CisgICAgICAgIC8vaWYgKGFuaVN0YXRlLT5vZmRtVHJpZ0hpZ2ggPiBBUl9QSFlfQ09VTlRNQVgpCisgICAgICAgIC8veworICAgICAgICAvLyAgICBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2UgPSAwOworICAgICAgICAvLyAgICB6bV9kZWJ1Z19tc2cwKCJPRkRNIFRyaWdnZXIgaXMgdG9vIGhpZ2ggZm9yIGh3IGNvdW50ZXJzIik7CisgICAgICAgIC8vfQorICAgICAgICAvL2Vsc2UKKyAgICAgICAgLy8gICAgYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlID0gQVJfUEhZX0NPVU5UTUFYIC0gYW5pU3RhdGUtPm9mZG1UcmlnSGlnaDsKKyAgICAgICAgLy9pZiAoYW5pU3RhdGUtPmNja1RyaWdIaWdoID4gQVJfUEhZX0NPVU5UTUFYKQorICAgICAgICAvL3sKKyAgICAgICAgLy8gICAgYW5pU3RhdGUtPmNja1BoeUVyckJhc2UgPSAwOworICAgICAgICAvLyAgICB6bV9kZWJ1Z19tc2cwKCJDQ0sgVHJpZ2dlciBpcyB0b28gaGlnaCBmb3IgaHcgY291bnRlcnMiKTsKKyAgICAgICAgLy99CisgICAgICAgIC8vZWxzZQorICAgICAgICAvLyAgICBhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSA9IEFSX1BIWV9DT1VOVE1BWCAtIGFuaVN0YXRlLT5jY2tUcmlnSGlnaDsKKyAgICAgICAgLy96bV9kZWJ1Z19tc2cyKCJXcml0aW5nIG9mZG1iYXNlID0gMHgiLCBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2UpOworICAgICAgICAvL3ptX2RlYnVnX21zZzIoIldyaXRpbmcgY2NrYmFzZSA9IDB4IiwgYW5pU3RhdGUtPmNja1BoeUVyckJhc2UpOworICAgICAgICAvL09TX1JFR19XUklURShhaCwgQVJfUEhZX0VSUl8xLCBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2UpOworICAgICAgICAvL09TX1JFR19XUklURShhaCwgQVJfUEhZX0VSUl8yLCBhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSk7CisgICAgICAgIC8vT1NfUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSX01BU0tfMSwgQVJfUEhZX0VSUl9PRkRNX1RJTUlORyk7CisgICAgICAgIC8vT1NfUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSX01BU0tfMiwgQVJfUEhZX0VSUl9DQ0tfVElNSU5HKTsKKyAgICAgICAgYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlID0gMDsKKyAgICAgICAgYW5pU3RhdGUtPmNja1BoeUVyckJhc2UgPSAwOworICAgIH0KKyAgICBhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50ID0gMDsKKyAgICBhbmlTdGF0ZS0+Y2NrUGh5RXJyQ291bnQgPSAwOworfQorCit2b2lkIHpmSHBBbmlPZmRtRXJyVHJpZ2dlcih6ZGV2X3QqIGRldikKK3sKKyAgICBzdHJ1Y3QgenNBbmlTdGF0ZSAqYW5pU3RhdGU7CisgICAgczMyX3QgcnNzaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKKworICAgIC8vSEFMQVNTRVJUKGNoYW4gIT0gTlVMTCk7CisKKyAgICBpZiAoKEhwUHJpdi0+cHJvY1BoeUVyciAmIFpNX0hBTF9QUk9DRVNTX0FOSSkgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYW5pU3RhdGUgPSBIcFByaXYtPmN1cmFuaTsKKyAgICAvKiBGaXJzdCwgcmFpc2Ugbm9pc2UgaW1tdW5pdHkgbGV2ZWwsIHVwIHRvIG1heCAqLworICAgIGlmIChhbmlTdGF0ZS0+bm9pc2VJbW11bml0eUxldmVsIDwgWk1fSEFMX05PSVNFX0lNTVVORV9NQVgpCisgICAgeworICAgICAgICB6ZkhwQW5pQ29udHJvbChkZXYsIFpNX0hBTF9BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUwsIGFuaVN0YXRlLT5ub2lzZUltbXVuaXR5TGV2ZWwgKyAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvKiB0aGVuLCByYWlzZSBzcHVyIGltbXVuaXR5IGxldmVsLCB1cCB0byBtYXggKi8KKyAgICBpZiAoYW5pU3RhdGUtPnNwdXJJbW11bml0eUxldmVsIDwgWk1fSEFMX1NQVVJfSU1NVU5FX01BWCkKKyAgICB7CisgICAgICAgIHpmSHBBbmlDb250cm9sKGRldiwgWk1fSEFMX0FOSV9TUFVSX0lNTVVOSVRZX0xFVkVMLCBhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwgKyAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByc3NpID0gQkVBQ09OX1JTU0koZGV2KTsKKyAgICBpZiAocnNzaSA+IGFuaVN0YXRlLT5yc3NpVGhySGlnaCkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIEJlYWNvbiByc3NpIGlzIGhpZ2gsIGNhbiB0dXJuIG9mZiBvZmRtIHdlYWsgc2lnIGRldGVjdC4KKyAgICAgICAgICovCisgICAgICAgIGlmICghYW5pU3RhdGUtPm9mZG1XZWFrU2lnRGV0ZWN0T2ZmKQorICAgICAgICB7CisgICAgICAgICAgICB6ZkhwQW5pQ29udHJvbChkZXYsIFpNX0hBTF9BTklfT0ZETV9XRUFLX1NJR05BTF9ERVRFQ1RJT04sIEZBTFNFKTsKKyAgICAgICAgICAgIHpmSHBBbmlDb250cm9sKGRldiwgWk1fSEFMX0FOSV9TUFVSX0lNTVVOSVRZX0xFVkVMLCAwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvKgorICAgICAgICAgKiBJZiB3ZWFrIHNpZyBkZXRlY3QgaXMgYWxyZWFkeSBvZmYsIGFzIGxhc3QgcmVzb3J0LCByYWlzZQorICAgICAgICAgKiBmaXJzdCBzdGVwIGxldmVsCisgICAgICAgICAqLworICAgICAgICBpZiAoYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA8IFpNX0hBTF9GSVJTVF9TVEVQX01BWCkKKyAgICAgICAgeworICAgICAgICAgICAgemZIcEFuaUNvbnRyb2woZGV2LCBaTV9IQUxfQU5JX0ZJUlNURVBfTEVWRUwsIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgKyAxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChyc3NpID4gYW5pU3RhdGUtPnJzc2lUaHJMb3cpCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBCZWFjb24gcnNzaSBpbiBtaWQgcmFuZ2UsIG5lZWQgb2ZkbSB3ZWFrIHNpZ25hbCBkZXRlY3QsCisgICAgICAgICAqIGJ1dCB3ZSBjYW4gcmFpc2UgZmlyc3RzdGVwTGV2ZWwKKyAgICAgICAgICovCisgICAgICAgIGlmIChhbmlTdGF0ZS0+b2ZkbVdlYWtTaWdEZXRlY3RPZmYpCisgICAgICAgICAgICB6ZkhwQW5pQ29udHJvbChkZXYsIFpNX0hBTF9BTklfT0ZETV9XRUFLX1NJR05BTF9ERVRFQ1RJT04sIFRSVUUpOworICAgICAgICBpZiAoYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA8IFpNX0hBTF9GSVJTVF9TVEVQX01BWCkKKyAgICAgICAgICAgIHpmSHBBbmlDb250cm9sKGRldiwgWk1fSEFMX0FOSV9GSVJTVEVQX0xFVkVMLCBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsICsgMSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQmVhY29uIHJzc2kgaXMgbG93LCBpZiBpbiAxMWIvZyBtb2RlLCB0dXJuIG9mZiBvZmRtCisgICAgICAgICAqIHdlYWsgc2lnbiBkZXRjdGlvbiBhbmQgemVybyBmaXJzdGVwTGV2ZWwgdG8gbWF4aW1pemUKKyAgICAgICAgICogQ0NLIHNlbnNpdGl2aXR5CisgICAgICAgICAqLworICAgICAgICBpZiAod2QtPmZyZXF1ZW5jeSA8IDMwMDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghYW5pU3RhdGUtPm9mZG1XZWFrU2lnRGV0ZWN0T2ZmKQorICAgICAgICAgICAgICAgIHpmSHBBbmlDb250cm9sKGRldiwgWk1fSEFMX0FOSV9PRkRNX1dFQUtfU0lHTkFMX0RFVEVDVElPTiwgRkFMU0UpOworICAgICAgICAgICAgaWYgKGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgPiAwKQorICAgICAgICAgICAgICAgIHpmSHBBbmlDb250cm9sKGRldiwgWk1fSEFMX0FOSV9GSVJTVEVQX0xFVkVMLCAwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB6ZkhwQW5pQ2NrRXJyVHJpZ2dlcih6ZGV2X3QqIGRldikKK3sKKyAgICBzdHJ1Y3QgenNBbmlTdGF0ZSAqYW5pU3RhdGU7CisgICAgczMyX3QgcnNzaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKKworICAgIC8vSEFMQVNTRVJUKGNoYW4gIT0gTlVMTCk7CisKKyAgICBpZiAoKEhwUHJpdi0+cHJvY1BoeUVyciAmIFpNX0hBTF9QUk9DRVNTX0FOSSkgPT0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogZmlyc3QsIHJhaXNlIG5vaXNlIGltbXVuaXR5IGxldmVsLCB1cCB0byBtYXggKi8KKyAgICBhbmlTdGF0ZSA9IEhwUHJpdi0+Y3VyYW5pOworICAgIGlmIChhbmlTdGF0ZS0+bm9pc2VJbW11bml0eUxldmVsIDwgWk1fSEFMX05PSVNFX0lNTVVORV9NQVgpCisgICAgeworICAgICAgICB6ZkhwQW5pQ29udHJvbChkZXYsIFpNX0hBTF9BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUwsCisgICAgICAgICAgICAgICAgIGFuaVN0YXRlLT5ub2lzZUltbXVuaXR5TGV2ZWwgKyAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByc3NpID0gQkVBQ09OX1JTU0koZGV2KTsKKyAgICBpZiAocnNzaSA+ICBhbmlTdGF0ZS0+cnNzaVRockxvdykKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIEJlYWNvbiBzaWduYWwgaW4gbWlkIGFuZCBoaWdoIHJhbmdlLCByYWlzZSBmaXJzdGVwbGV2ZWwuCisgICAgICAgICAqLworICAgICAgICBpZiAoYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA8IFpNX0hBTF9GSVJTVF9TVEVQX01BWCkKKyAgICAgICAgICAgIHpmSHBBbmlDb250cm9sKGRldiwgWk1fSEFMX0FOSV9GSVJTVEVQX0xFVkVMLCBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsICsgMSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIEJlYWNvbiByc3NpIGlzIGxvdywgemVybyBmaXJzdGVwTGV2ZWwgdG8gbWF4aW1pemUKKyAgICAgICAgICogQ0NLIHNlbnNpdGl2aXR5LgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHdkLT5mcmVxdWVuY3kgPCAzMDAwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA+IDApCisgICAgICAgICAgICAgICAgemZIcEFuaUNvbnRyb2woZGV2LCBaTV9IQUxfQU5JX0ZJUlNURVBfTEVWRUwsIDApOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHpmSHBBbmlMb3dlckltbXVuaXR5KHpkZXZfdCogZGV2KQoreworICAgIHN0cnVjdCB6c0FuaVN0YXRlICphbmlTdGF0ZTsKKyAgICBzMzJfdCByc3NpOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOworCisgICAgYW5pU3RhdGUgPSBIcFByaXYtPmN1cmFuaTsKKworICAgIHJzc2kgPSBCRUFDT05fUlNTSShkZXYpOworICAgIGlmIChyc3NpID4gYW5pU3RhdGUtPnJzc2lUaHJIaWdoKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQmVhY29uIHNpZ25hbCBpcyBoaWdoLCBsZWF2ZSBvZmRtIHdlYWsgc2lnbmFsIGRldGVjdGlvbiBvZmYKKyAgICAgICAgICogb3IgaXQgbWF5IG9zY2lsbGF0ZS4gTGV0IGl0IGZhbGwgdGhyb3VnaC4KKyAgICAgICAgICovCisgICAgfQorICAgIGVsc2UgaWYgKHJzc2kgPiBhbmlTdGF0ZS0+cnNzaVRockxvdykKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIEJlYWNvbiByc3NpIGluIG1pZCByYW5nZSwgdHVybiBvbiBvZmRtIHdlYWsgc2lnbmFsCisgICAgICAgICAqIGRldGVjdGlvbiBvciBsb3dlciBmaXJzdCBzdGVwIGxldmVsLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZikKKyAgICAgICAgeworICAgICAgICAgICAgemZIcEFuaUNvbnRyb2woZGV2LCBaTV9IQUxfQU5JX09GRE1fV0VBS19TSUdOQUxfREVURUNUSU9OLCBUUlVFKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmSHBBbmlDb250cm9sKGRldiwgWk1fSEFMX0FOSV9GSVJTVEVQX0xFVkVMLCBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsIC0gMSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQmVhY29uIHJzc2kgaXMgbG93LCByZWR1Y2UgZmlyc3Qgc3RlcCBsZXZlbC4KKyAgICAgICAgICovCisgICAgICAgIGlmIChhbmlTdGF0ZS0+Zmlyc3RlcExldmVsID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgemZIcEFuaUNvbnRyb2woZGV2LCBaTV9IQUxfQU5JX0ZJUlNURVBfTEVWRUwsIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgLSAxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiB0aGVuIGxvd2VyIHNwdXIgaW1tdW5pdHkgbGV2ZWwsIGRvd24gdG8gemVybyAqLworICAgIGlmIChhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwgPiAwKQorICAgIHsKKyAgICAgICAgemZIcEFuaUNvbnRyb2woZGV2LCBaTV9IQUxfQU5JX1NQVVJfSU1NVU5JVFlfTEVWRUwsIGFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCAtIDEpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8qCisgICAgICogaWYgYWxsIGVsc2UgZmFpbHMsIGxvd2VyIG5vaXNlIGltbXVuaXR5IGxldmVsIGRvd24gdG8gYSBtaW4gdmFsdWUKKyAgICAgKiB6ZXJvIGZvciBub3cKKyAgICAgKi8KKyAgICBpZiAoYW5pU3RhdGUtPm5vaXNlSW1tdW5pdHlMZXZlbCA+IDApCisgICAgeworICAgICAgICB6ZkhwQW5pQ29udHJvbChkZXYsIFpNX0hBTF9BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUwsIGFuaVN0YXRlLT5ub2lzZUltbXVuaXR5TGV2ZWwgLSAxKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworI2RlZmluZSBDTE9DS19SQVRFIDQ0MDAwICAgIC8qIFhYWCB1c2UgbWFjX3VzZWMgb3Igc2ltaWxhciAqLworLyogY29udmVydCBIVyBjb3VudGVyIHZhbHVlcyB0byBtcyB1c2luZyAxMWcgY2xvY2sgcmF0ZSwgZ29vOWQgZW5vdWdoCisgICBmb3IgMTFhIGFuZCBUdXJibyAqLworCisvKgorICogUmV0dXJuIGFuIGFwcHJveGltYXRpb24gb2YgdGhlIHRpbWUgc3BlbnQgYGBsaXN0ZW5pbmcnJyBieQorICogZGVkdWN0aW5nIHRoZSBjeWNsZXMgc3BlbnQgdHgnaW5nIGFuZCByeCdpbmcgZnJvbSB0aGUgdG90YWwKKyAqIGN5Y2xlIGNvdW50IHNpbmNlIG91ciBsYXN0IGNhbGwuICBBIHJldHVybiB2YWx1ZSA8MCBpbmRpY2F0ZXMKKyAqIGFuIGludmFsaWQvaW5jb25zaXN0ZW50IHRpbWUuCisgKi8KK3MzMl90IHpmSHBBbmlHZXRMaXN0ZW5UaW1lKHpkZXZfdCogZGV2KQoreworICAgIHN0cnVjdCB6c0FuaVN0YXRlICphbmlTdGF0ZTsKKyAgICB1MzJfdCB0eEZyYW1lQ291bnQsIHJ4RnJhbWVDb3VudCwgY3ljbGVDb3VudDsKKyAgICBzMzJfdCBsaXN0ZW5UaW1lOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOworCisgICAgdHhGcmFtZUNvdW50ID0gMDsvL09TX1JFR19SRUFEKGFoLCBBUl9URkNOVCk7CisgICAgcnhGcmFtZUNvdW50ID0gMDsvL09TX1JFR19SRUFEKGFoLCBBUl9SRkNOVCk7CisgICAgY3ljbGVDb3VudCA9IDA7Ly9PU19SRUdfUkVBRChhaCwgQVJfQ0NDTlQpOworCisgICAgYW5pU3RhdGUgPSBIcFByaXYtPmN1cmFuaTsKKyAgICBpZiAoYW5pU3RhdGUtPmN5Y2xlQ291bnQgPT0gMCB8fCBhbmlTdGF0ZS0+Y3ljbGVDb3VudCA+IGN5Y2xlQ291bnQpCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBDeWNsZSBjb3VudGVyIHdyYXAgKG9yIGluaXRpYWwgY2FsbCk7IGl0J3Mgbm90IHBvc3NpYmxlCisgICAgICAgICAqIHRvIGFjY3VyYXRlbHkgY2FsY3VsYXRlIGEgdmFsdWUgYmVjYXVzZSB0aGUgcmVnaXN0ZXJzCisgICAgICAgICAqIHJpZ2h0IHNoaWZ0IHJhdGhlciB0aGFuIHdyYXAtLXNvIHB1bnQgYW5kIHJldHVybiAwLgorICAgICAgICAgKi8KKyAgICAgICAgbGlzdGVuVGltZSA9IDA7CisgICAgICAgIEhwUHJpdi0+c3RhdHMuYXN0X2FuaV9semVybysrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzMzJfdCBjY2RlbHRhID0gY3ljbGVDb3VudCAtIGFuaVN0YXRlLT5jeWNsZUNvdW50OworICAgICAgICBzMzJfdCByZmRlbHRhID0gcnhGcmFtZUNvdW50IC0gYW5pU3RhdGUtPnJ4RnJhbWVDb3VudDsKKyAgICAgICAgczMyX3QgdGZkZWx0YSA9IHR4RnJhbWVDb3VudCAtIGFuaVN0YXRlLT50eEZyYW1lQ291bnQ7CisgICAgICAgIGxpc3RlblRpbWUgPSAoY2NkZWx0YSAtIHJmZGVsdGEgLSB0ZmRlbHRhKSAvIENMT0NLX1JBVEU7CisgICAgfQorICAgIGFuaVN0YXRlLT5jeWNsZUNvdW50ID0gY3ljbGVDb3VudDsKKyAgICBhbmlTdGF0ZS0+dHhGcmFtZUNvdW50ID0gdHhGcmFtZUNvdW50OworICAgIGFuaVN0YXRlLT5yeEZyYW1lQ291bnQgPSByeEZyYW1lQ291bnQ7CisgICAgcmV0dXJuIGxpc3RlblRpbWU7Cit9CisKKy8qCisgKiBEbyBwZXJpb2RpYyBwcm9jZXNzaW5nLiAgVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmcm9tIHRoZQorICogZHJpdmVyJ3MgcnggaW50ZXJydXB0IGhhbmRsZXIgYWZ0ZXIgcHJvY2Vzc2luZyBmcmFtZXMuCisgKi8KK3ZvaWQgemZIcEFuaUFyUG9sbCh6ZGV2X3QqIGRldiwgdTMyX3QgbGlzdGVuVGltZSwgdTMyX3QgcGh5Q250MSwgdTMyX3QgcGh5Q250MikKK3sKKyAgICBzdHJ1Y3QgenNBbmlTdGF0ZSAqYW5pU3RhdGU7CisgICAgLy9zMzJfdCBsaXN0ZW5UaW1lOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOworCisgICAgLyoKKyAgICAgKiBTaW5jZSB3ZSdyZSBjYWxsZWQgZnJvbSBlbmQgb2YgcnggdGFza2xldCwgd2UgYWxzbyBjaGVjayBmb3IKKyAgICAgKiBBUiBwcm9jZXNzaW5nIG5vdworICAgICAqLworCisgICAgYW5pU3RhdGUgPSBIcFByaXYtPmN1cmFuaTsKKyAgICAvL0hwUHJpdi0+c3RhdHMuYXN0X25vZGVzdGF0cyA9ICpzdGF0czsgICAgICAgLyogWFhYIG9wdGltaXplPyAqLworCisgICAgLy9saXN0ZW5UaW1lID0gemZIcEFuaUdldExpc3RlblRpbWUoZGV2KTsKKyAgICAvL2lmIChsaXN0ZW5UaW1lIDwgMCkKKyAgICAvL3sKKyAgICAvLyAgICBIcFByaXYtPnN0YXRzLmFzdF9hbmlfbG5lZysrOworICAgIC8vICAgIC8qIHJlc3RhcnQgQU5JIHBlcmlvZCBpZiBsaXN0ZW5UaW1lIGlzIGludmFsaWQgKi8KKyAgICAvLyAgICB6ZkhwQW5pUmVzdGFydChkZXYpOworICAgIC8vICAgIHJldHVybjsKKyAgICAvL30KKyAgICAvKiBYWFggYmV3YXJlIG9mIG92ZXJmbG93PyAqLworICAgIGFuaVN0YXRlLT5saXN0ZW5UaW1lICs9IGxpc3RlblRpbWU7CisKKyAgICBpZiAoSHBQcml2LT5oYXNId1BoeUNvdW50ZXJzKQorICAgIHsKKyAgICAgICAgLy91MzJfdCBwaHlDbnQxLCBwaHlDbnQyOworICAgICAgICB1MzJfdCBvZmRtUGh5RXJyQ250LCBjY2tQaHlFcnJDbnQ7CisKKyAgICAgICAgLyogTkI6IHRoZXNlIGFyZSBub3QgcmVzZXQtb24tcmVhZCAqLworICAgICAgICAvL3BoeUNudDEgPSAwOy8vT1NfUkVHX1JFQUQoYWgsIEFSX1BIWV9FUlJfMSk7CisgICAgICAgIC8vcGh5Q250MiA9IDA7Ly9PU19SRUdfUkVBRChhaCwgQVJfUEhZX0VSUl8yKTsKKyAgICAgICAgLyogWFhYIHNvbWV0aW1lcyB6ZXJvLCB3aHk/ICovCisgICAgICAgIC8vaWYgKHBoeUNudDEgPCBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2UgfHwKKyAgICAgICAgLy8gICAgcGh5Q250MiA8IGFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlKQorICAgICAgICAvL3sKKyAgICAgICAgLy8gICAgaWYgKHBoeUNudDEgPCBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2UpCisgICAgICAgIC8vICAgIHsKKyAgICAgICAgLy8gICAgICAgIHptX2RlYnVnX21zZzIoInBoeUNudDEgPSAweCIsIHBoeUNudDEpOworICAgICAgICAvLyAgICAgICAgem1fZGVidWdfbXNnMigicmVzZXR0aW5nIGNvdW50ZXIgdmFsdWUgdG8gMHgiLCBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2UpOworICAgICAgICAvLyAgICAgICAgLy9PU19SRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMSwgYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlKTsKKyAgICAgICAgLy8gICAgICAgIC8vT1NfUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSX01BU0tfMSwgQVJfUEhZX0VSUl9PRkRNX1RJTUlORyk7CisgICAgICAgIC8vICAgIH0KKyAgICAgICAgLy8gICAgaWYgKHBoeUNudDIgPCBhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZSkKKyAgICAgICAgLy8gICAgeworICAgICAgICAvLyAgICAgICAgem1fZGVidWdfbXNnMigicGh5Q250MiA9IDB4IiwgcGh5Q250Mik7CisgICAgICAgIC8vICAgICAgICB6bV9kZWJ1Z19tc2cyKCJyZXNldHRpbmcgY291bnRlciB2YWx1ZSB0byAweCIsIGFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlKTsKKyAgICAgICAgLy8gICAgICAgIC8vT1NfUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzIsIGFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlKTsKKyAgICAgICAgLy8gICAgICAgIC8vT1NfUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSX01BU0tfMiwgQVJfUEhZX0VSUl9DQ0tfVElNSU5HKTsKKyAgICAgICAgLy8gICAgfQorICAgICAgICAvLyAgICByZXR1cm47ICAgICAvKiBYWFggKi8KKyAgICAgICAgLy99CisgICAgICAgIC8qIE5COiBvbmx5IHVzZSBhc3RfYW5pXyplcnJzIHdpdGggQUhfUFJJVkFURV9ESUFHICovCisgICAgICAgIC8vb2ZkbVBoeUVyckNudCA9IHBoeUNudDEgLSBhbmlTdGF0ZS0+b2ZkbVBoeUVyckJhc2U7CisgICAgICAgIC8vSHBQcml2LT5zdGF0cy5hc3RfYW5pX29mZG1lcnJzICs9IG9mZG1QaHlFcnJDbnQgLSBhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50OworICAgICAgICAvL2FuaVN0YXRlLT5vZmRtUGh5RXJyQ291bnQgPSBvZmRtUGh5RXJyQ250OworICAgICAgICBvZmRtUGh5RXJyQ250ID0gcGh5Q250MTsKKyAgICAgICAgSHBQcml2LT5zdGF0cy5hc3RfYW5pX29mZG1lcnJzICs9IG9mZG1QaHlFcnJDbnQ7CisgICAgICAgIGFuaVN0YXRlLT5vZmRtUGh5RXJyQ291bnQgKz0gb2ZkbVBoeUVyckNudDsKKworICAgICAgICAvL2Nja1BoeUVyckNudCA9IHBoeUNudDIgLSBhbmlTdGF0ZS0+Y2NrUGh5RXJyQmFzZTsKKyAgICAgICAgLy9IcFByaXYtPnN0YXRzLmFzdF9hbmlfY2NrZXJycyArPSBjY2tQaHlFcnJDbnQgLSBhbmlTdGF0ZS0+Y2NrUGh5RXJyQ291bnQ7CisgICAgICAgIC8vYW5pU3RhdGUtPmNja1BoeUVyckNvdW50ID0gY2NrUGh5RXJyQ250OworICAgICAgICBjY2tQaHlFcnJDbnQgPSBwaHlDbnQyOworICAgICAgICBIcFByaXYtPnN0YXRzLmFzdF9hbmlfY2NrZXJycyArPSBjY2tQaHlFcnJDbnQ7CisgICAgICAgIGFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudCArPSBjY2tQaHlFcnJDbnQ7CisgICAgfQorICAgIC8qCisgICAgICogSWYgYW5pIGlzIG5vdCBlbmFibGVkLCByZXR1cm4gYWZ0ZXIgd2UndmUgY29sbGVjdGVkCisgICAgICogc3RhdGlzdGljcworICAgICAqLworICAgIGlmICgoSHBQcml2LT5wcm9jUGh5RXJyICYgWk1fSEFMX1BST0NFU1NfQU5JKSA9PSAwKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGFuaVN0YXRlLT5saXN0ZW5UaW1lID4gNSAqIEhwUHJpdi0+YW5pUGVyaW9kKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQ2hlY2sgdG8gc2VlIGlmIG5lZWQgdG8gbG93ZXIgaW1tdW5pdHkgaWYKKyAgICAgICAgICogNSBhbmlQZXJpb2RzIGhhdmUgcGFzc2VkCisgICAgICAgICAqLworICAgICAgICBpZiAoYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCA8PSBhbmlTdGF0ZS0+bGlzdGVuVGltZSAqCisgICAgICAgICAgICAgYW5pU3RhdGUtPm9mZG1UcmlnTG93LzEwMDAgJiYKKyAgICAgICAgICAgIGFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudCA8PSBhbmlTdGF0ZS0+bGlzdGVuVGltZSAqCisgICAgICAgICAgICAgYW5pU3RhdGUtPmNja1RyaWdMb3cvMTAwMCkKKyAgICAgICAgICAgIHpmSHBBbmlMb3dlckltbXVuaXR5KGRldik7CisgICAgICAgIHpmSHBBbmlSZXN0YXJ0KGRldik7CisgICAgfQorICAgIGVsc2UgaWYgKGFuaVN0YXRlLT5saXN0ZW5UaW1lID4gSHBQcml2LT5hbmlQZXJpb2QpCisgICAgeworICAgICAgICAvKiBjaGVjayB0byBzZWUgaWYgbmVlZCB0byByYWlzZSBpbW11bml0eSAqLworICAgICAgICBpZiAoYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCA+IGFuaVN0YXRlLT5saXN0ZW5UaW1lICoKKyAgICAgICAgICAgIGFuaVN0YXRlLT5vZmRtVHJpZ0hpZ2ggLyAxMDAwKQorICAgICAgICB7CisgICAgICAgICAgICB6ZkhwQW5pT2ZkbUVyclRyaWdnZXIoZGV2KTsKKyAgICAgICAgICAgIHpmSHBBbmlSZXN0YXJ0KGRldik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYW5pU3RhdGUtPmNja1BoeUVyckNvdW50ID4gYW5pU3RhdGUtPmxpc3RlblRpbWUgKgorICAgICAgICAgICAgICAgYW5pU3RhdGUtPmNja1RyaWdIaWdoIC8gMTAwMCkKKyAgICAgICAgeworICAgICAgICAgICAgemZIcEFuaUNja0VyclRyaWdnZXIoZGV2KTsKKyAgICAgICAgICAgIHpmSHBBbmlSZXN0YXJ0KGRldik7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBhbmkuaCBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGFuaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZTY5YWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBhbmkuaApAQCAtMCwwICsxLDQyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAiLi4vODAyMTFjb3JlL2NwcmVjb21wLmgiCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1MzJfdAlhY2tyY3ZfYmFkOworCXUzMl90CXJ0c19iYWQ7CisJdTMyX3QJcnRzX2dvb2Q7CisJdTMyX3QJZmNzX2JhZDsKKwl1MzJfdAliZWFjb25zOworfSBaTV9IQUxfTUlCX1NUQVRTOworCisvKgorICogUGVyLW5vZGUgc3RhdGlzdGljcyBtYWludGFpbmVkIGJ5IHRoZSBkcml2ZXIgZm9yIHVzZSBpbgorICogb3B0aW1pemluZyBzaWduYWwgcXVhbGl0eSBhbmQgb3RoZXIgb3BlcmF0aW9uYWwgYXNwZWN0cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXUzMl90CW5zX2F2Z2Jyc3NpOwkvKiBhdmVyYWdlIGJlYWNvbiByc3NpICovCisJdTMyX3QJbnNfYXZncnNzaTsJICAgIC8qIGF2ZXJhZ2UgZGF0YSByc3NpICovCisJdTMyX3QJbnNfYXZndHhyc3NpOwkvKiBhdmVyYWdlIHR4IHJzc2kgKi8KK30gWk1fSEFMX05PREVfU1RBVFM7CisKKyNkZWZpbmUJWk1fSEFMX1JTU0lfRVBfTVVMVElQTElFUgkoMTw8NykJLyogcG93MiB0byBvcHRpbWl6ZSBvdXQgKiBhbmQgLyAqLworCitzdHJ1Y3QgenNBbmlTdGF0cyB7CisgICAgdTMyX3QgICBhc3RfYW5pX25pdXA7ICAgLyogQU5JIGluY3JlYXNlZCBub2lzZSBpbW11bml0eSAqLworICAgIHUzMl90ICAgYXN0X2FuaV9uaWRvd247IC8qIEFOSSBkZWNyZWFzZWQgbm9pc2UgaW1tdW5pdHkgKi8KKyAgICB1MzJfdCAgIGFzdF9hbmlfc3B1cnVwOyAvKiBBTkkgaW5jcmVhc2VkIHNwdXIgaW1tdW5pdHkgKi8KKyAgICB1MzJfdCAgIGFzdF9hbmlfc3B1cmRvd247LyogQU5JIGRlc2NyZWFzZWQgc3B1ciBpbW11bml0eSAqLworICAgIHUzMl90ICAgYXN0X2FuaV9vZmRtb247IC8qIEFOSSBPRkRNIHdlYWsgc2lnbmFsIGRldGVjdCBvbiAqLworICAgIHUzMl90ICAgYXN0X2FuaV9vZmRtb2ZmOy8qIEFOSSBPRkRNIHdlYWsgc2lnbmFsIGRldGVjdCBvZmYgKi8KKyAgICB1MzJfdCAgIGFzdF9hbmlfY2NraGlnaDsvKiBBTkkgQ0NLIHdlYWsgc2lnbmFsIHRocmVzaG9sZCBoaWdoICovCisgICAgdTMyX3QgICBhc3RfYW5pX2Nja2xvdzsgLyogQU5JIENDSyB3ZWFrIHNpZ25hbCB0aHJlc2hvbGQgbG93ICovCisgICAgdTMyX3QgICBhc3RfYW5pX3N0ZXB1cDsgLyogQU5JIGluY3JlYXNlZCBmaXJzdCBzdGVwIGxldmVsICovCisgICAgdTMyX3QgICBhc3RfYW5pX3N0ZXBkb3duOy8qIEFOSSBkZWNyZWFzZWQgZmlyc3Qgc3RlcCBsZXZlbCAqLworICAgIHUzMl90ICAgYXN0X2FuaV9vZmRtZXJyczsvKiBBTkkgY3VtdWxhdGl2ZSBvZmRtIHBoeSBlcnIgY291bnQgKi8KKyAgICB1MzJfdCAgIGFzdF9hbmlfY2NrZXJyczsvKiBBTkkgY3VtdWxhdGl2ZSBjY2sgcGh5IGVyciBjb3VudCAqLworICAgIHUzMl90ICAgYXN0X2FuaV9yZXNldDsgIC8qIEFOSSBwYXJhbWV0ZXJzIHplcm8nZCBmb3Igbm9uLVNUQSAqLworICAgIHUzMl90ICAgYXN0X2FuaV9semVybzsgIC8qIEFOSSBsaXN0ZW4gdGltZSBmb3JjZWQgdG8gemVybyAqLworICAgIHUzMl90ICAgYXN0X2FuaV9sbmVnOyAgIC8qIEFOSSBsaXN0ZW4gdGltZSBjYWxjdWxhdGVkIDwgMCAqLworICAgIFpNX0hBTF9NSUJfU1RBVFMgICBhc3RfbWlic3RhdHM7ICAgLyogTUlCIGNvdW50ZXIgc3RhdHMgKi8KKyAgICBaTV9IQUxfTk9ERV9TVEFUUyAgYXN0X25vZGVzdGF0czsgIC8qIExhdGVzdCByc3NpIHN0YXRzIGZyb20gZHJpdmVyICovCit9OworCisvKgorICogUGVyLWNoYW5uZWwgQU5JIHN0YXRlIHByaXZhdGUgdG8gdGhlIGRyaXZlci4KKyAqLworc3RydWN0IHpzQW5pU3RhdGUgeworICAgIFpNX0hBTF9DSEFOTkVMIGM7CisgICAgdThfdCAgICBub2lzZUltbXVuaXR5TGV2ZWw7CisgICAgdThfdCAgICBzcHVySW1tdW5pdHlMZXZlbDsKKyAgICB1OF90ICAgIGZpcnN0ZXBMZXZlbDsKKyAgICB1OF90ICAgIG9mZG1XZWFrU2lnRGV0ZWN0T2ZmOworICAgIHU4X3QgICAgY2NrV2Vha1NpZ1RocmVzaG9sZDsKKworICAgIC8qIFRocmVzaG9sZHMgKi8KKyAgICB1MzJfdCAgIGxpc3RlblRpbWU7CisgICAgdTMyX3QgICBvZmRtVHJpZ0hpZ2g7CisgICAgdTMyX3QgICBvZmRtVHJpZ0xvdzsKKyAgICBzMzJfdCAgIGNja1RyaWdIaWdoOworICAgIHMzMl90ICAgY2NrVHJpZ0xvdzsKKyAgICBzMzJfdCAgIHJzc2lUaHJMb3c7CisgICAgczMyX3QgICByc3NpVGhySGlnaDsKKworICAgIHUzMl90ICAgbm9pc2VGbG9vcjsgLyogVGhlIGN1cnJlbnQgbm9pc2UgZmxvb3IgKi8KKyAgICB1MzJfdCAgIHR4RnJhbWVDb3VudDsgICAvKiBMYXN0IHR4RnJhbWVDb3VudCAqLworICAgIHUzMl90ICAgcnhGcmFtZUNvdW50OyAgIC8qIExhc3QgcnggRnJhbWUgY291bnQgKi8KKyAgICB1MzJfdCAgIGN5Y2xlQ291bnQ7IC8qIExhc3QgY3ljbGVDb3VudCAoY2FuIGRldGVjdCB3cmFwLWFyb3VuZCkgKi8KKyAgICB1MzJfdCAgIG9mZG1QaHlFcnJDb3VudDsvKiBPRkRNIGVyciBjb3VudCBzaW5jZSBsYXN0IHJlc2V0ICovCisgICAgdTMyX3QgICBjY2tQaHlFcnJDb3VudDsgLyogQ0NLIGVyciBjb3VudCBzaW5jZSBsYXN0IHJlc2V0ICovCisgICAgdTMyX3QgICBvZmRtUGh5RXJyQmFzZTsgLyogQmFzZSB2YWx1ZSBmb3Igb2ZkbSBlcnIgY291bnRlciAqLworICAgIHUzMl90ICAgY2NrUGh5RXJyQmFzZTsgIC8qIEJhc2UgdmFsdWUgZm9yIGNjayBlcnIgY291bnRlcnMgKi8KKyAgICBzMTZfdCAgIHBrdFJzc2lbMl07IC8qIEF2ZXJhZ2UgcnNzaSBvZiBwa3RzIGZvciAyIGFudGVubmFzICovCisgICAgczE2X3QgICBvZmRtRXJyUnNzaVsyXTsgLyogQXZlcmFnZSByc3NpIG9mIG9mZG0gcGh5IGVycnMgZm9yIDIgYW50ICovCisgICAgczE2X3QgICBjY2tFcnJSc3NpWzJdOyAgLyogQXZlcmFnZSByc3NpIG9mIGNjayBwaHkgZXJycyBmb3IgMiBhbnQgKi8KK307CisKK3R5cGVkZWYgZW51bSB7CisJWk1fSEFMX0FOSV9QUkVTRU5ULAkJCS8qIGlzIEFOSSBzdXBwb3J0IHByZXNlbnQgKi8KKwlaTV9IQUxfQU5JX05PSVNFX0lNTVVOSVRZX0xFVkVMLAkJLyogc2V0IGxldmVsICovCisJWk1fSEFMX0FOSV9PRkRNX1dFQUtfU0lHTkFMX0RFVEVDVElPTiwJLyogZW5hYmxlL2Rpc2FibGUgKi8KKwlaTV9IQUxfQU5JX0NDS19XRUFLX1NJR05BTF9USFIsCQkvKiBlbmFibGUvZGlzYWJsZSAqLworCVpNX0hBTF9BTklfRklSU1RFUF9MRVZFTCwJCQkvKiBzZXQgbGV2ZWwgKi8KKwlaTV9IQUxfQU5JX1NQVVJfSU1NVU5JVFlfTEVWRUwsCQkvKiBzZXQgbGV2ZWwgKi8KKwlaTV9IQUxfQU5JX01PREUsCQkJCS8qIDAgPT4gbWFudWFsLCAxID0+IGF1dG8gKi8KKwlaTV9IQUxfQU5JX1BIWUVSUl9SRVNFVCwJCQkvKiByZXNldCBwaHkgZXJyb3Igc3RhdHMgKi8KK30gWk1fSEFMX0FOSV9DTUQ7CisKKyNkZWZpbmUgQVJfUEhZX0NPVU5UTUFYICAgICAgICAoMyA8PCAyMikgICAgICAgICAvLyBNYXggY291bnRlZCBiZWZvcmUgaW50cgorI2RlZmluZSBaTV9IQUxfUFJPQ0VTU19BTkkgICAgIDB4MDAwMDAwMDEgIC8qIEFOSSBzdGF0ZSBzZXR1cCAqLworI2RlZmluZSBaTV9SU1NJX0RVTU1ZX01BUktFUgkweDEyNworCisvKiBQSFkgcmVnaXN0ZXJzIGluIGFyNTQxNiwgcmVsYXRlZCBiYXNlIGFuZCByZWdpc3RlciBvZmZzZXRzCisgICBtYXkgbmVlZCB0byBiZSBjaGFuZ2VkIGluIG90dXMgQkIgKi8KKyNkZWZpbmUgQVJfUEhZX0JBU0UgICAgIDB4MUM1ODAwICAgICAgLyogYmFzZSBhZGRyZXNzIG9mIHBoeSByZWdzICovCisjZGVmaW5lIEFSX1BIWShfbikgICAgICAoQVJfUEhZX0JBU0UgKyAoKF9uKTw8MikpCisKKyNkZWZpbmUgQVJfUEhZX1RFU1QgICAgICAgICAgICAgMHgxQzU4MDAgICAgICAgICAgLyogUEhZIHRlc3QgY29udHJvbCAqLworI2RlZmluZSBQSFlfQUdDX0NMUiAgICAgICAgICAgICAweDEwMDAwMDAwICAgICAgLyogZGlzYWJsZSBBR0MgdG8gQTIgKi8KKyNkZWZpbmUgUkZTSUxFTlRfQkIgICAgICAgICAgICAgMHgwMDAwMjAwMCAgICAgIC8qIHNodXNoIGJiICovCisKKyNkZWZpbmUgQVJfUEhZX1RVUkJPICAgICAgICAweDFDNTgwNCAgICAgIC8qIGZyYW1lIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVJfUEhZX0ZDX1RVUkJPX01PREUgICAgICAgIDB4MDAwMDAwMDEgIC8qIFNldCB0dXJibyBtb2RlIGJpdHMgKi8KKyNkZWZpbmUgQVJfUEhZX0ZDX1RVUkJPX1NIT1JUICAgICAgIDB4MDAwMDAwMDIgIC8qIFNldCBzaG9ydCBzeW1ib2xzIHRvIHR1cmJvIG1vZGUgc2V0dGluZyAqLworI2RlZmluZSBBUl9QSFlfRkNfRFlOMjA0MF9FTiAgICAgICAgMHgwMDAwMDAwNCAgICAgIC8qIEVuYWJsZSBkeW4gMjAvNDAgbW9kZSAqLworI2RlZmluZSBBUl9QSFlfRkNfRFlOMjA0MF9QUklfT05MWSAgICAgIDB4MDAwMDAwMDggICAgICAvKiBkeW4gMjAvNDAgLSBwcmltYXJ5IG9ubHkgKi8KKyNkZWZpbmUgQVJfUEhZX0ZDX0RZTjIwNDBfUFJJX0NIICAgIDB4MDAwMDAwMTAgICAgICAvKiBkeW4gMjAvNDAgLSBwcmltYXJ5IGNoIG9mZnNldCAoMD0rMTBNSHosIDE9LTEwTUh6KSovCisjZGVmaW5lIEFSX1BIWV9GQ19EWU4yMDQwX0VYVF9DSCAgICAgICAgMHgwMDAwMDAyMCAgICAgIC8qIGR5biAyMC80MCAtIGV4dCBjaCBzcGFjaW5nICgwPTIwTUh6LyAxPTI1TUh6KSAqLworI2RlZmluZSBBUl9QSFlfRkNfSFRfRU4gICAgICAgICAgICAgMHgwMDAwMDA0MCAgICAgIC8qIGh0IGVuYWJsZSAqLworI2RlZmluZSBBUl9QSFlfRkNfU0hPUlRfR0lfNDAgICAgICAgMHgwMDAwMDA4MCAgICAgIC8qIGFsbG93IHNob3J0IEdJIGZvciBIVCA0MCAqLworI2RlZmluZSBBUl9QSFlfRkNfV0FMU0ggICAgICAgICAgICAgMHgwMDAwMDEwMCAgICAgIC8qIHdhbHNoIHNwYXRpYWwgc3ByZWFkaW5nIGZvciAyIGNoYWlucywyIHN0cmVhbXMgVFggKi8KKyNkZWZpbmUgQVJfUEhZX0ZDX1NJTkdMRV9IVF9MVEYxICAgICAgICAweDAwMDAwMjAwICAgICAgLyogc2luZ2xlIGxlbmd0aCAoNHVzKSAxc3QgSFQgbG9uZyB0cmFpbmluZyBzeW1ib2wgKi8KKworI2RlZmluZSBBUl9QSFlfVElNSU5HMiAgICAgIDB4MUM1ODEwICAgICAgLyogVGltaW5nIENvbnRyb2wgMiAqLworI2RlZmluZSBBUl9QSFlfVElNSU5HMl9VU0VfRk9SQ0UgICAgMHgwMDAwMTAwMAorI2RlZmluZSBBUl9QSFlfVElNSU5HMl9GT1JDRV9WQUwgICAgMHgwMDAwMGZmZgorCisjZGVmaW5lIEFSX1BIWV9USU1JTkczICAgICAgMHgxQzU4MTQgICAgICAvKiBUaW1pbmcgY29udHJvbCAzICovCisjZGVmaW5lIEFSX1BIWV9USU1JTkczX0RTQ19NQU4gIDB4RkZGRTAwMDAKKyNkZWZpbmUgQVJfUEhZX1RJTUlORzNfRFNDX01BTl9TICAgIDE3CisjZGVmaW5lIEFSX1BIWV9USU1JTkczX0RTQ19FWFAgIDB4MDAwMUUwMDAKKyNkZWZpbmUgQVJfUEhZX1RJTUlORzNfRFNDX0VYUF9TICAgIDEzCisKKyNkZWZpbmUgQVJfUEhZX0NISVBfSUQgICAgICAgICAgMHgxQzU4MTggICAgICAvKiBQSFkgY2hpcCByZXZpc2lvbiBJRCAqLworI2RlZmluZSBBUl9QSFlfQ0hJUF9JRF9SRVZfMCAgICAweDgwICAgICAgICAvKiA1NDE2IFJldiAwIChvd2wgMS4wKSBCQiAqLworI2RlZmluZSBBUl9QSFlfQ0hJUF9JRF9SRVZfMSAgICAweDgxICAgICAgICAvKiA1NDE2IFJldiAxIChvd2wgMi4wKSBCQiAqLworCisjZGVmaW5lIEFSX1BIWV9BQ1RJVkUgICAgICAgMHgxQzU4MUMgICAgICAvKiBhY3RpdmF0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIEFSX1BIWV9BQ1RJVkVfRU4gICAgMHgwMDAwMDAwMSAgLyogQWN0aXZhdGUgUEhZIGNoaXBzICovCisjZGVmaW5lIEFSX1BIWV9BQ1RJVkVfRElTICAgMHgwMDAwMDAwMCAgLyogRGVhY3RpdmF0ZSBQSFkgY2hpcHMgKi8KKworI2RlZmluZSBBUl9QSFlfUkZfQ1RMMiAgICAgICAgICAgICAgICAgICAgICAweDFDNTgyNAorI2RlZmluZSBBUl9QSFlfVFhfRU5EX0RBVEFfU1RBUlQgIDB4MDAwMDAwRkYKKyNkZWZpbmUgQVJfUEhZX1RYX0VORF9EQVRBX1NUQVJUX1MgIDAKKyNkZWZpbmUgQVJfUEhZX1RYX0VORF9QQV9PTiAgICAgICAweDAwMDBGRjAwCisjZGVmaW5lIEFSX1BIWV9UWF9FTkRfUEFfT05fUyAgICAgICA4CisKKworI2RlZmluZSBBUl9QSFlfUkZfQ1RMMyAgICAgICAgICAgICAgICAgIDB4MUM1ODI4CisjZGVmaW5lIEFSX1BIWV9UWF9FTkRfVE9fQTJfUlhfT04gICAgICAgMHgwMEZGMDAwMAorI2RlZmluZSBBUl9QSFlfVFhfRU5EX1RPX0EyX1JYX09OX1MgICAgIDE2CisKKyNkZWZpbmUgQVJfUEhZX0FEQ19DVEwgICAgICAweDFDNTgyQworI2RlZmluZSBBUl9QSFlfQURDX0NUTF9PRkZfSU5CVUZHQUlOICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQVJfUEhZX0FEQ19DVExfT0ZGX0lOQlVGR0FJTl9TICAwCisjZGVmaW5lIEFSX1BIWV9BRENfQ1RMX09GRl9QV0REQUMgICAweDAwMDAyMDAwCisjZGVmaW5lIEFSX1BIWV9BRENfQ1RMX09GRl9QV0RCQU5ER0FQICAgMHgwMDAwNDAwMCAvKiBCQiBSZXYgNC4yKyBvbmx5ICovCisjZGVmaW5lIEFSX1BIWV9BRENfQ1RMX09GRl9QV0RBREMgICAweDAwMDA4MDAwIC8qIEJCIFJldiA0LjIrIG9ubHkgKi8KKyNkZWZpbmUgQVJfUEhZX0FEQ19DVExfT05fSU5CVUZHQUlOIDB4MDAwMzAwMDAKKyNkZWZpbmUgQVJfUEhZX0FEQ19DVExfT05fSU5CVUZHQUlOX1MgICAxNgorCisjZGVmaW5lIEFSX1BIWV9BRENfU0VSSUFMX0NUTCAgICAgICAweDFDNTgzMAorI2RlZmluZSBBUl9QSFlfU0VMX0lOVEVSTkFMX0FEREFDICAgMHgwMDAwMDAwMAorI2RlZmluZSBBUl9QSFlfU0VMX0VYVEVSTkFMX1JBRElPICAgMHgwMDAwMDAwMQorCisjZGVmaW5lIEFSX1BIWV9SRl9DVEw0ICAgICAgICAgICAgICAgICAgICAweDFDNTgzNAorI2RlZmluZSBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQl9PRkYgICAgMHhGRjAwMDAwMAorI2RlZmluZSBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQl9PRkZfUyAgMjQKKyNkZWZpbmUgQVJfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUFfT0ZGICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgQVJfUEhZX1JGX0NUTDRfVFhfRU5EX1hQQUFfT0ZGX1MgIDE2CisjZGVmaW5lIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUJfT04gICAgICAweDAwMDBGRjAwCisjZGVmaW5lIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUJfT05fUyAgICA4CisjZGVmaW5lIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUFfT04gICAgICAweDAwMDAwMEZGCisjZGVmaW5lIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUFfT05fUyAgICAwCisKKyNkZWZpbmUgQVJfUEhZX1NFVFRMSU5HICAgICAweDFDNTg0NAorI2RlZmluZSBBUl9QSFlfU0VUVExJTkdfU1dJVENIICAweDAwMDAzRjgwCisjZGVmaW5lIEFSX1BIWV9TRVRUTElOR19TV0lUQ0hfUyAgICA3CisKKyNkZWZpbmUgQVJfUEhZX1JYR0FJTiAgICAgICAweDFDNTg0OAorI2RlZmluZSBBUl9QSFlfUlhHQUlOX1RYUlhfQVRURU4gICAgMHgwMDAzRjAwMAorI2RlZmluZSBBUl9QSFlfUlhHQUlOX1RYUlhfQVRURU5fUyAgMTIKKyNkZWZpbmUgQVJfUEhZX1JYR0FJTl9UWFJYX1JGX01BWCAgIDB4MDA3QzAwMDAKKyNkZWZpbmUgQVJfUEhZX1JYR0FJTl9UWFJYX1JGX01BWF9TIDE4CisKKyNkZWZpbmUgQVJfUEhZX0RFU0lSRURfU1ogICAweDFDNTg1MAorI2RlZmluZSBBUl9QSFlfREVTSVJFRF9TWl9BREMgICAgICAgMHgwMDAwMDBGRgorI2RlZmluZSBBUl9QSFlfREVTSVJFRF9TWl9BRENfUyAgICAgMAorI2RlZmluZSBBUl9QSFlfREVTSVJFRF9TWl9QR0EgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBBUl9QSFlfREVTSVJFRF9TWl9QR0FfUyAgICAgOAorI2RlZmluZSBBUl9QSFlfREVTSVJFRF9TWl9UT1RfREVTICAgMHgwRkYwMDAwMAorI2RlZmluZSBBUl9QSFlfREVTSVJFRF9TWl9UT1RfREVTX1MgMjAKKworI2RlZmluZSBBUl9QSFlfRklORF9TSUcgICAgICAweDFDNTg1OAorI2RlZmluZSBBUl9QSFlfRklORF9TSUdfRklSU1RFUCAgMHgwMDAzRjAwMAorI2RlZmluZSBBUl9QSFlfRklORF9TSUdfRklSU1RFUF9TICAgICAgICAxMgorI2RlZmluZSBBUl9QSFlfRklORF9TSUdfRklSUFdSICAgMHgwM0ZDMDAwMAorI2RlZmluZSBBUl9QSFlfRklORF9TSUdfRklSUFdSX1MgICAgICAgICAxOAorCisjZGVmaW5lIEFSX1BIWV9BR0NfQ1RMMSAgICAgIDB4MUM1ODVDCisjZGVmaW5lIEFSX1BIWV9BR0NfQ1RMMV9DT0FSU0VfTE9XICAgICAgIDB4MDAwMDdGODAKKyNkZWZpbmUgQVJfUEhZX0FHQ19DVEwxX0NPQVJTRV9MT1dfUyAgICAgICAgIDcKKyNkZWZpbmUgQVJfUEhZX0FHQ19DVEwxX0NPQVJTRV9ISUdIICAgICAgMHgwMDNGODAwMAorI2RlZmluZSBBUl9QSFlfQUdDX0NUTDFfQ09BUlNFX0hJR0hfUyAgICAgICAgMTUKKworI2RlZmluZSBBUl9QSFlfQUdDX0NPTlRST0wgIDB4MUM1ODYwICAgICAgLyogY2hpcCBjYWxpYnJhdGlvbiBhbmQgbm9pc2UgZmxvb3Igc2V0dGluZyAqLworI2RlZmluZSBBUl9QSFlfQUdDX0NPTlRST0xfQ0FMICAweDAwMDAwMDAxICAvKiBkbyBpbnRlcm5hbCBjYWxpYnJhdGlvbiAqLworI2RlZmluZSBBUl9QSFlfQUdDX0NPTlRST0xfTkYgICAweDAwMDAwMDAyICAvKiBkbyBub2lzZS1mbG9vciBjYWxjdWxhdGlvbiAqLworCisjZGVmaW5lIEFSX1BIWV9DQ0EgICAgICAgICAgICAgIDB4MUM1ODY0CisjZGVmaW5lIEFSX1BIWV9NSU5DQ0FfUFdSICAgICAgIDB4MUZGMDAwMDAKKyNkZWZpbmUgQVJfUEhZX01JTkNDQV9QV1JfUyAgICAgMTkKKyNkZWZpbmUgQVJfUEhZX0NDQV9USFJFU0g2MiAgICAgMHgwMDA3RjAwMAorI2RlZmluZSBBUl9QSFlfQ0NBX1RIUkVTSDYyX1MgICAxMgorCisjZGVmaW5lIEFSX1BIWV9TRkNPUlJfTE9XICAgIDB4MUM1ODZDCisjZGVmaW5lIEFSX1BIWV9TRkNPUlJfTE9XX1VTRV9TRUxGX0NPUlJfTE9XICAweDAwMDAwMDAxCisjZGVmaW5lIEFSX1BIWV9TRkNPUlJfTE9XX00yQ09VTlRfVEhSX0xPVyAgICAweDAwMDAzRjAwCisjZGVmaW5lIEFSX1BIWV9TRkNPUlJfTE9XX00yQ09VTlRfVEhSX0xPV19TICA4CisjZGVmaW5lIEFSX1BIWV9TRkNPUlJfTE9XX00xX1RIUkVTSF9MT1cgIDB4MDAxRkMwMDAKKyNkZWZpbmUgQVJfUEhZX1NGQ09SUl9MT1dfTTFfVEhSRVNIX0xPV19TICAgIDE0CisjZGVmaW5lIEFSX1BIWV9TRkNPUlJfTE9XX00yX1RIUkVTSF9MT1cgIDB4MEZFMDAwMDAKKyNkZWZpbmUgQVJfUEhZX1NGQ09SUl9MT1dfTTJfVEhSRVNIX0xPV19TICAgIDIxCisKKyNkZWZpbmUgQVJfUEhZX1NGQ09SUiAgICAgICAweDFDNTg2OAorI2RlZmluZSBBUl9QSFlfU0ZDT1JSX00yQ09VTlRfVEhSICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgQVJfUEhZX1NGQ09SUl9NMkNPVU5UX1RIUl9TICAwCisjZGVmaW5lIEFSX1BIWV9TRkNPUlJfTTFfVEhSRVNIICAweDAwRkUwMDAwCisjZGVmaW5lIEFSX1BIWV9TRkNPUlJfTTFfVEhSRVNIX1MgICAgMTcKKyNkZWZpbmUgQVJfUEhZX1NGQ09SUl9NMl9USFJFU0ggIDB4N0YwMDAwMDAKKyNkZWZpbmUgQVJfUEhZX1NGQ09SUl9NMl9USFJFU0hfUyAgICAyNAorCisjZGVmaW5lIEFSX1BIWV9TTEVFUF9DVFJfQ09OVFJPTCAgICAweDFDNTg3MAorI2RlZmluZSBBUl9QSFlfU0xFRVBfQ1RSX0xJTUlUICAgICAgMHgxQzU4NzQKKyNkZWZpbmUgQVJfUEhZX1NMRUVQX1NDQUwgICAgICAgMHgxQzU4NzgKKworI2RlZmluZSBBUl9QSFlfUExMX0NUTCAgICAgICAgICAweDFDNTg3YyAgICAgIC8qIFBMTCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIEFSX1BIWV9QTExfQ1RMXzQwICAgICAgIDB4YWEgICAgICAgIC8qIDQwIE1IeiAqLworI2RlZmluZSBBUl9QSFlfUExMX0NUTF80MF81NDEzICAweDA0CisjZGVmaW5lIEFSX1BIWV9QTExfQ1RMXzQ0ICAgICAgIDB4YWIgICAgICAgIC8qIDQ0IE1IeiBmb3IgMTFiLCAxMWcgKi8KKyNkZWZpbmUgQVJfUEhZX1BMTF9DVExfNDRfMjEzMyAgMHhlYiAgICAgICAgLyogNDQgTUh6IGZvciAxMWIsIDExZyAqLworI2RlZmluZSBBUl9QSFlfUExMX0NUTF80MF8yMTMzICAweGVhICAgICAgICAvKiA0MCBNSHogZm9yIDExYSwgdHVyYm9zICovCisKKyNkZWZpbmUgQVJfUEhZX1JYX0RFTEFZICAgICAweDFDNTkxNCAgICAgIC8qIGFuYWxvZyBwb3ctb24gdGltZSAoMTAwbnMpICovCisjZGVmaW5lIEFSX1BIWV9SWF9ERUxBWV9ERUxBWSAgIDB4MDAwMDNGRkYgIC8qIGRlbGF5IGZyb20gd2FrZXVwIHRvIHJ4IGVuYSAqLworCisjZGVmaW5lIEFSX1BIWV9USU1JTkdfQ1RSTDQgICAgIDB4MUM1OTIwICAgICAgLyogdGltaW5nIGNvbnRyb2wgKi8KKyNkZWZpbmUgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYgMHgwMUYgICAvKiBNYXNrIGZvciBrY29zX3RoZXRhLTEgZm9yIHEgY29ycmVjdGlvbiAqLworI2RlZmluZSBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX1FfQ09GRl9TICAgMCAgIC8qIHNoaWZ0IGZvciBRX0NPRkYgKi8KKyNkZWZpbmUgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYgMHg3RTAgICAvKiBNYXNrIGZvciBzaW5fdGhldGEgZm9yIGkgY29ycmVjdGlvbiAqLworI2RlZmluZSBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRl9TICAgNSAgIC8qIFNoaWZ0IGZvciBzaW5fdGhldGEgZm9yIGkgY29ycmVjdGlvbiAqLworI2RlZmluZSBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9FTkFCTEUgICAweDgwMCAgIC8qIGVuYWJsZSBJUSBjb3JyZWN0aW9uICovCisjZGVmaW5lIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDQUxfTE9HX0NPVU5UX01BWCAweEYwMDAgIC8qIE1hc2sgZm9yIG1heCBudW1iZXIgb2Ygc2FtcGxlcyAobG9nYXJpdGhtaWMpICovCisjZGVmaW5lIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDQUxfTE9HX0NPVU5UX01BWF9TICAgMTIgIC8qIFNoaWZ0IGZvciBtYXggbnVtYmVyIG9mIHNhbXBsZXMgKi8KKyNkZWZpbmUgQVJfUEhZX1RJTUlOR19DVFJMNF9ET19JUUNBTCAgICAweDEwMDAwICAgICAvKiBwZXJmb3JtIElRIGNhbGlicmF0aW9uICovCisKKyNkZWZpbmUgQVJfUEhZX1RJTUlORzUgICAgICAweDFDNTkyNAorI2RlZmluZSBBUl9QSFlfVElNSU5HNV9DWUNQV1JfVEhSMSAgMHgwMDAwMDBGRQorI2RlZmluZSBBUl9QSFlfVElNSU5HNV9DWUNQV1JfVEhSMV9TICAgIDEKKworI2RlZmluZSBBUl9QSFlfUE9XRVJfVFhfUkFURTEgICAweDFDNTkzNAorI2RlZmluZSBBUl9QSFlfUE9XRVJfVFhfUkFURTIgICAweDFDNTkzOAorI2RlZmluZSBBUl9QSFlfUE9XRVJfVFhfUkFURV9NQVggICAgMHgxQzU5M2MKKyNkZWZpbmUgQVJfUEhZX1BPV0VSX1RYX1JBVEVfTUFYX1RQQ19FTkFCTEUgMHgwMDAwMDA0MAorCisjZGVmaW5lIEFSX1BIWV9GUkFNRV9DVEwgICAgMHgxQzU5NDQKKyNkZWZpbmUgQVJfUEhZX0ZSQU1FX0NUTF9UWF9DTElQICAgIDB4MDAwMDAwMzgKKyNkZWZpbmUgQVJfUEhZX0ZSQU1FX0NUTF9UWF9DTElQX1MgIDMKKworI2RlZmluZSBBUl9QSFlfVFhQV1JBREogICAgIDB4MUM1OTRDICAgICAgLyogQkIgUmV2IDQuMisgb25seSAqLworI2RlZmluZSBBUl9QSFlfVFhQV1JBREpfQ0NLX0dBSU5fREVMVEEgIDB4MDAwMDBGQzAKKyNkZWZpbmUgQVJfUEhZX1RYUFdSQURKX0NDS19HQUlOX0RFTFRBX1MgICAgNgorI2RlZmluZSBBUl9QSFlfVFhQV1JBREpfQ0NLX1BDREFDX0lOREVYIDB4MDBGQzAwMDAKKyNkZWZpbmUgQVJfUEhZX1RYUFdSQURKX0NDS19QQ0RBQ19JTkRFWF9TICAgMTgKKworI2RlZmluZSBBUl9QSFlfUkFEQVJfMCAgICAgIDB4MUM1OTU0ICAgICAgLyogcmFkYXIgZGV0ZWN0aW9uIHNldHRpbmdzICovCisjZGVmaW5lIEFSX1BIWV9SQURBUl8wX0VOQSAgMHgwMDAwMDAwMSAgLyogRW5hYmxlIHJhZGFyIGRldGVjdGlvbiAqLworI2RlZmluZSBBUl9QSFlfUkFEQVJfMF9JTkJBTkQgICAweDAwMDAwMDNlICAvKiBJbmJhbmQgcHVsc2UgdGhyZXNob2xkICovCisjZGVmaW5lIEFSX1BIWV9SQURBUl8wX0lOQkFORF9TIDEKKyNkZWZpbmUgQVJfUEhZX1JBREFSXzBfUFJTU0kgICAgMHgwMDAwMEZDMCAgLyogUHVsc2UgcnNzaSB0aHJlc2hvbGQgKi8KKyNkZWZpbmUgQVJfUEhZX1JBREFSXzBfUFJTU0lfUyAgNgorI2RlZmluZSBBUl9QSFlfUkFEQVJfMF9IRUlHSFQgICAweDAwMDNGMDAwICAvKiBQdWxzZSBoZWlnaHQgdGhyZXNob2xkICovCisjZGVmaW5lIEFSX1BIWV9SQURBUl8wX0hFSUdIVF9TIDEyCisjZGVmaW5lIEFSX1BIWV9SQURBUl8wX1JSU1NJICAgIDB4MDBGQzAwMDAgIC8qIFJhZGFyIHJzc2kgdGhyZXNob2xkICovCisjZGVmaW5lIEFSX1BIWV9SQURBUl8wX1JSU1NJX1MgIDE4CisjZGVmaW5lIEFSX1BIWV9SQURBUl8wX0ZJUlBXUiAgIDB4N0YwMDAwMDAgIC8qIFJhZGFyIGZpcnB3ciB0aHJlc2hvbGQgKi8KKyNkZWZpbmUgQVJfUEhZX1JBREFSXzBfRklSUFdSX1MgMjQKKworI2RlZmluZSBBUl9QSFlfU1dJVENIX0NIQUlOXzAgICAgIDB4MUM1OTYwCisjZGVmaW5lIEFSX1BIWV9TV0lUQ0hfQ09NICAgICAgICAgMHgxQzU5NjQKKworI2RlZmluZSBBUl9QSFlfU0lHTUFfREVMVEEgIDB4MUM1OTZDICAgICAgLyogQVI1MzEyIG9ubHkgKi8KKyNkZWZpbmUgQVJfUEhZX1NJR01BX0RFTFRBX0FEQ19TRUwgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQVJfUEhZX1NJR01BX0RFTFRBX0FEQ19TRUxfUyAgICAwCisjZGVmaW5lIEFSX1BIWV9TSUdNQV9ERUxUQV9GSUxUMiAgICAweDAwMDAwMEY4CisjZGVmaW5lIEFSX1BIWV9TSUdNQV9ERUxUQV9GSUxUMl9TICAzCisjZGVmaW5lIEFSX1BIWV9TSUdNQV9ERUxUQV9GSUxUMSAgICAweDAwMDAxRjAwCisjZGVmaW5lIEFSX1BIWV9TSUdNQV9ERUxUQV9GSUxUMV9TICA4CisjZGVmaW5lIEFSX1BIWV9TSUdNQV9ERUxUQV9BRENfQ0xJUCAweDAxRkZFMDAwCisjZGVmaW5lIEFSX1BIWV9TSUdNQV9ERUxUQV9BRENfQ0xJUF9TICAgMTMKKworI2RlZmluZSBBUl9QSFlfUkVTVEFSVCAgICAgIDB4MUM1OTcwICAgICAgLyogcmVzdGFydCAqLworI2RlZmluZSBBUl9QSFlfUkVTVEFSVF9ESVZfR0MgICAweDAwMUMwMDAwICAvKiBiYl9hbnRfZmFzdF9kaXZfZ2NfbGltaXQgKi8KKyNkZWZpbmUgQVJfUEhZX1JFU1RBUlRfRElWX0dDX1MgMTgKKworI2RlZmluZSBBUl9QSFlfUkZCVVNfUkVRICAgICAgICAweDFDNTk3QworI2RlZmluZSBBUl9QSFlfUkZCVVNfUkVRX0VOICAgICAweDAwMDAwMDAxCisKKyNkZWZpbmUgQVJfUEhZX1JYX0NIQUlOTUFTSyAgICAgMHgxQzU5YTQKKworI2RlZmluZSBBUl9QSFlfRVhUX0NDQSAgICAgICAgICAweDFDNTliYworI2RlZmluZSBBUl9QSFlfRVhUX01JTkNDQV9QV1IgICAweEZGODAwMDAwCisjZGVmaW5lIEFSX1BIWV9FWFRfTUlOQ0NBX1BXUl9TIDIzCisKKyNkZWZpbmUgQVJfUEhZX0hBTEZHSSAgICAgICAgICAgMHgxQzU5RDAgICAgICAvKiBUaW1pbmcgY29udHJvbCAzICovCisjZGVmaW5lIEFSX1BIWV9IQUxGR0lfRFNDX01BTiAgIDB4MDAwN0ZGRjAKKyNkZWZpbmUgQVJfUEhZX0hBTEZHSV9EU0NfTUFOX1MgNAorI2RlZmluZSBBUl9QSFlfSEFMRkdJX0RTQ19FWFAgICAweDAwMDAwMDBGCisjZGVmaW5lIEFSX1BIWV9IQUxGR0lfRFNDX0VYUF9TIDAKKworI2RlZmluZSBBUl9QSFlfSEVBVllfQ0xJUF9FTkFCTEUgICAgMHgxQzU5RTAKKworI2RlZmluZSBBUl9QSFlfTV9TTEVFUCAgICAgIDB4MUM1OWYwICAgICAgLyogc2xlZXAgY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVJfUEhZX1JFRkNMS0RMWSAgICAweDFDNTlmNAorI2RlZmluZSBBUl9QSFlfUkVGQ0xLUEQgICAgIDB4MUM1OWY4CisKKy8qIFBIWSBJUSBjYWxpYnJhdGlvbiByZXN1bHRzICovCisjZGVmaW5lIEFSX1BIWV9JUUNBTF9SRVNfUFdSX01FQVNfSSAweDFDNUMxMCAgLyogcG93ZXIgbWVhc3VyZW1lbnQgZm9yIEkgKi8KKyNkZWZpbmUgQVJfUEhZX0lRQ0FMX1JFU19QV1JfTUVBU19RIDB4MUM1QzE0ICAvKiBwb3dlciBtZWFzdXJlbWVudCBmb3IgUSAqLworI2RlZmluZSBBUl9QSFlfSVFDQUxfUkVTX0lRX0NPUlJfTUVBUyAgIDB4MUM1QzE4ICAvKiBJUSBjb3JyZWxhdGlvbiBtZWFzdXJlbWVudCAqLworCisjZGVmaW5lIEFSX1BIWV9DVVJSRU5UX1JTU0kgMHgxQzVDMWMgICAgICAvKiByc3NpIG9mIGN1cnJlbnQgZnJhbWUgcngnZCAqLworCisjZGVmaW5lIEFSX1BIWV9SRkJVU19HUkFOVCAgICAgICAweDFDNUMyMAorI2RlZmluZSBBUl9QSFlfUkZCVVNfR1JBTlRfRU4gICAgMHgwMDAwMDAwMQorCisjZGVmaW5lIEFSX1BIWV9NT0RFICAgICAweDFDNjIwMCAgLyogTW9kZSByZWdpc3RlciAqLworI2RlZmluZSBBUl9QSFlfTU9ERV9BUjIxMzMgIDB4MDggICAgLyogQVIyMTMzICovCisjZGVmaW5lIEFSX1BIWV9NT0RFX0FSNTExMSAgMHgwMCAgICAvKiBBUjUxMTEvQVIyMTExICovCisjZGVmaW5lIEFSX1BIWV9NT0RFX0FSNTExMiAgMHgwOCAgICAvKiBBUjUxMTIqLworI2RlZmluZSBBUl9QSFlfTU9ERV9EWU5BTUlDIDB4MDQgICAgLyogZHluYW1pYyBDQ0svT0ZETSBtb2RlICovCisjZGVmaW5lIEFSX1BIWV9NT0RFX1JGMkdIWiAgMHgwMiAgICAvKiAyLjQgR0h6ICovCisjZGVmaW5lIEFSX1BIWV9NT0RFX1JGNUdIWiAgMHgwMCAgICAvKiA1IEdIeiAqLworI2RlZmluZSBBUl9QSFlfTU9ERV9DQ0sgICAgIDB4MDEgICAgLyogQ0NLICovCisjZGVmaW5lIEFSX1BIWV9NT0RFX09GRE0gICAgMHgwMCAgICAvKiBPRkRNICovCisKKyNkZWZpbmUgQVJfUEhZX0NDS19UWF9DVFJMICAweDFDNjIwNAorI2RlZmluZSBBUl9QSFlfQ0NLX1RYX0NUUkxfSkFQQU4gICAgMHgwMDAwMDAxMAorCisjZGVmaW5lIEFSX1BIWV9DQ0tfREVURUNUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxQzYyMDgKKyNkZWZpbmUgQVJfUEhZX0NDS19ERVRFQ1RfV0VBS19TSUdfVEhSX0NDSyAgICAgICAgICAweDAwMDAwMDNGCisjZGVmaW5lIEFSX1BIWV9DQ0tfREVURUNUX1dFQUtfU0lHX1RIUl9DQ0tfUyAgICAgICAgMAorI2RlZmluZSBBUl9QSFlfQ0NLX0RFVEVDVF9BTlRfU1dJVENIX1RJTUUgICAgICAgICAgIDB4MDAwMDFGQzAgLy8gWzEyOjZdIHNldHRsaW5nIHRpbWUgZm9yIGFudGVubmEgc3dpdGNoCisjZGVmaW5lIEFSX1BIWV9DQ0tfREVURUNUX0FOVF9TV0lUQ0hfVElNRV9TICAgICAgICAgNgorI2RlZmluZSBBUl9QSFlfQ0NLX0RFVEVDVF9CQl9FTkFCTEVfQU5UX0ZBU1RfRElWICAgIDB4MjAwMAorCisjZGVmaW5lIEFSX1BIWV9HQUlOXzJHSFogICAgMHgxQzYyMEMKKyNkZWZpbmUgQVJfUEhZX0dBSU5fMkdIWl9SWFRYX01BUkdJTiAgICAweDAwRkMwMDAwCisjZGVmaW5lIEFSX1BIWV9HQUlOXzJHSFpfUlhUWF9NQVJHSU5fUyAgMTgKKyNkZWZpbmUgQVJfUEhZX0dBSU5fMkdIWl9CU1dfTUFSR0lOICAgICAweDAwMDAzQzAwCisjZGVmaW5lIEFSX1BIWV9HQUlOXzJHSFpfQlNXX01BUkdJTl9TICAgMTAKKyNkZWZpbmUgQVJfUEhZX0dBSU5fMkdIWl9CU1dfQVRURU4gICAgICAweDAwMDAwMDFGCisjZGVmaW5lIEFSX1BIWV9HQUlOXzJHSFpfQlNXX0FUVEVOX1MgICAgMAorCisjZGVmaW5lIEFSX1BIWV9DQ0tfUlhDVFJMNCAgMHgxQzYyMUMKKyNkZWZpbmUgQVJfUEhZX0NDS19SWENUUkw0X0ZSRVFfRVNUX1NIT1JUICAgMHgwMUY4MDAwMAorI2RlZmluZSBBUl9QSFlfQ0NLX1JYQ1RSTDRfRlJFUV9FU1RfU0hPUlRfUyAxOQorCisjZGVmaW5lIEFSX1BIWV9EQUdfQ1RSTENDSyAgMHgxQzYyMjgKKyNkZWZpbmUgQVJfUEhZX0RBR19DVFJMQ0NLX0VOX1JTU0lfVEhSICAweDAwMDAwMjAwIC8qIEJCIFJldiA0LjIrIG9ubHkgKi8KKyNkZWZpbmUgQVJfUEhZX0RBR19DVFJMQ0NLX1JTU0lfVEhSIDB4MDAwMUZDMDAgLyogQkIgUmV2IDQuMisgb25seSAqLworI2RlZmluZSBBUl9QSFlfREFHX0NUUkxDQ0tfUlNTSV9USFJfUyAgIDEwICAgICAvKiBCQiBSZXYgNC4yKyBvbmx5ICovCisKKyNkZWZpbmUgQVJfUEhZX1BPV0VSX1RYX1JBVEUzICAgMHgxQzYyMzQKKyNkZWZpbmUgQVJfUEhZX1BPV0VSX1RYX1JBVEU0ICAgMHgxQzYyMzgKKworI2RlZmluZSBBUl9QSFlfU0NSTV9TRVFfWFIgIDB4MUM2MjNDCisjZGVmaW5lIEFSX1BIWV9IRUFERVJfREVURUNUX1hSIDB4MUM2MjQwCisjZGVmaW5lIEFSX1BIWV9DSElSUF9ERVRFQ1RFRF9YUiAgICAweDFDNjI0NAorI2RlZmluZSBBUl9QSFlfQkxVRVRPT1RIICAgIDB4MUM2MjU0CisKKyNkZWZpbmUgQVJfUEhZX1RQQ1JHMSAgIDB4MUM2MjU4ICAvKiBhcjI0MTMgcG93ZXIgY29udHJvbCAqLworI2RlZmluZSBBUl9QSFlfVFBDUkcxX05VTV9QRF9HQUlOICAgMHgwMDAwYzAwMAorI2RlZmluZSBBUl9QSFlfVFBDUkcxX05VTV9QRF9HQUlOX1MgMTQKKworI2RlZmluZSBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMSAgICAweDAwMDMwMDAwCisjZGVmaW5lIEFSX1BIWV9UUENSRzFfUERfR0FJTl8xX1MgIDE2CisjZGVmaW5lIEFSX1BIWV9UUENSRzFfUERfR0FJTl8yICAgIDB4MDAwQzAwMDAKKyNkZWZpbmUgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzJfUyAgMTgKKyNkZWZpbmUgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzMgICAgMHgwMDMwMDAwMAorI2RlZmluZSBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fM19TICAyMAorLy8KKworI2RlZmluZSBBUl9QSFlfQU5BTE9HX1NXQVAgICAgICAweGEyNjgKKyNkZWZpbmUgQVJfUEhZX1NXQVBfQUxUX0NIQUlOICAgMHgwMDAwMDA0MAorCisjZGVmaW5lIEFSX1BIWV9UUENSRzUgICAweDFDNjI2QyAvKiBhcjI0MTMgcG93ZXIgY29udHJvbCAqLworI2RlZmluZSBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX09WRVJMQVBfUyAgICAgMAorI2RlZmluZSBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMSAgICAweDAwMDAwM0YwCisjZGVmaW5lIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8xX1MgIDQKKyNkZWZpbmUgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzIgICAgMHgwMDAwRkMwMAorI2RlZmluZSBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMl9TICAxMAorI2RlZmluZSBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMyAgICAweDAwM0YwMDAwCisjZGVmaW5lIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8zX1MgIDE2CisjZGVmaW5lIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV80ICAgIDB4MEZDMDAwMDAKKyNkZWZpbmUgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzRfUyAgMjIKKworI2RlZmluZSBBUl9QSFlfUE9XRVJfVFhfUkFURTUgICAweDFDNjM4QworI2RlZmluZSBBUl9QSFlfUE9XRVJfVFhfUkFURTYgICAweDFDNjM5MAorCisjZGVmaW5lIEFSX1BIWV9DQUxfQ0hBSU5NQVNLICAgIDB4MUM2MzlDCisKKyNkZWZpbmUgQVJfUEhZX1BPV0VSX1RYX1NVQiAgICAgMHgxQzYzQzgKKyNkZWZpbmUgQVJfUEhZX1BPV0VSX1RYX1JBVEU3ICAgMHgxQzYzQ0MKKyNkZWZpbmUgQVJfUEhZX1BPV0VSX1RYX1JBVEU4ICAgMHgxQzYzRDAKKyNkZWZpbmUgQVJfUEhZX1BPV0VSX1RYX1JBVEU5ICAgMHgxQzYzRDQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGZ3Mi5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwZncyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFjZWIwMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGZ3Mi5jCkBAIC0wLDAgKzEsMTAxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAiLi4vODAyMTFjb3JlL2NwcmVjb21wLmgiCisKK2NvbnN0IHUzMl90IHpjUDJGd0ltYWdlW10gPSB7CisweDAwMDkwMDBCLCAweDRGMjIyRkU2LCAweERFOTQ3RkZDLCAweEUxMTRENTk0LAorMHgxRTEzRDQ5NCwgMHg2NzUyMUU0QywgMHhENDk0RDY5MywgMHgzNzQwMjc2OSwKKzB4NjI1MjhGMDYsIDB4NzIwMUQ2OTIsIDB4NjA2MDI1MjIsIDB4MjYwMEM5M0YsCisweEQ3OTA2MTUyLCAweDI1MTI2MTFELCAweDI2NEI2NjUyLCAweDI1NjI0NzBCLAorMHgwMDA5QjAwRCwgMHhFNjAwOTVBQywgMHhDODQwNjBFMiwgMHgyRjAyOEYwMywKKzB4OEZGOTM2NTIsIDB4N0YwNDc2MDEsIDB4QTA1QTRGMjYsIDB4NEYyMjZFRjYsCisweDQxMEJEMTg1LCAweEQ0ODUwMDA5LCAweDAwMDk0NDBCLCAweDQ1MEJENTg0LAorMHhENzg0MDAwOSwgMHhEMjg0RTFGRiwgMHgyNzEyNjExRCwgMHhENDgzNTAyOSwKKzB4RTFGRkNCMDEsIDB4MTIwOUU1MDEsIDB4MTIxMTIyMTIsIDB4RTcyMDI0NTIsCisweDQ3MThENTdGLCAweDI1NzJEMjdGLCAweEQxN0ZFNzAwLCAweEQ2ODBENDdGLAorMHhFMjAxMjI3MCwgMHgyNDcwMjE3MiwgMHhENjdFMjYyMCwgMHgyNjQxRTRGRiwKKzB4RDU3REU2MDAsIDB4NjY2REUxMDQsIDB4NzYwMTYwNjMsIDB4NDAwMDYyNkQsCisweDhGRjgzMjEyLCAweEQ1NzkwNTQ1LCAweDI1MjBFMjAxLCAweEQyNzlENzc4LAorMHgyNzEwRTEwMCwgMHhFNTgwMjIxMiwgMHg2NTVDNjYxMywgMHg2NjZERDQ3NiwKKzB4NzYwNDY3NjMsIDB4Mzc0QzYyNkQsIDB4OEZGODMyNTMsIDB4RDQ3MzI3MTIsCisweEQ1NzNFMTAxLCAweEQ2NzMyNDEwLCAweDI1NDJFNDAwLCAweEUwM0FFNTAxLAorMHhEMjcyRDc3MSwgMHhFMDM5MDY1NCwgMHgyNzExMDY1NCwgMHgwMDBCNEYyNiwKKzB4N0ZDODIyMTEsIDB4RDc2RkQxNkUsIDB4REM3MERCNkYsIDB4RDI3MURFNzAsCisweEQ1NzJENDcxLCAweDFGMTJENjcyLCAweDFGNzY3MTBDLCAweDFGQjg3N0ZDLAorMHgxRkVBMUZDOSwgMHg3MjA0MUYyQiwgMHhERTZGREM2RSwgMHgxRjEzRUIxMCwKKzB4MUY1MTFGNDQsIDB4MUY3NzFGNjUsIDB4RDg2QzFGMkMsIDB4REQ2REQ5NkMsCisweEQyNkRFQTAwLCAweDg5MDAzQTIyLCAweEQxNTg3QTAxLCAweDg4MDE2MDEwLAorMHg1NkY5OEIwMywgMHg0MjE4RTIwMSwgMHhEMTY4MjYyMiwgMHgwMDA5NDEwQiwKKzB4NDQwQkQ0NjcsIDB4RDU2NzAwMDksIDB4MDAwOTQ1MEIsIDB4NjAxMEQxNEMsCisweDhCMTA4ODAxLCAweEU2NTBEMTRCLCAweDQ2MTg2MjEyLCAweDhCMDgzMjY2LAorMHg1NkZBRDE0NywgMHgyMTIwRTIwMCwgMHhDQjAxNjA2MiwgMHgyNjAyQTAwMywKKzB4NzIwMTI3MTAsIDB4NjA4MjIxMjIsIDB4ODkwOTg4MDEsIDB4RTJDOEQxNUEsCisweDYyMkM2NjEyLCAweDg5MDMzNjI2LCAweDYwMTBEMTU4LCAweDhCQzg4ODAxLAorMHg1MUY3Njc5MiwgMHgyMTcyNTJGNiwgMHhENjU1NTE5MSwgMHg1NUZCMjIxMiwKKzB4NTJGQzY0NjIsIDB4NTU2MTI1NDIsIDB4MjI1MkU0MDAsIDB4NjE0MzY2NDMsCisweDA1REU2MDEzLCAweDM2Q0M0NjA4LCAweDAyREUyNjUyLCAweEM5MDM2MDIxLAorMHg4QjAyODgwMSwgMHg3MjAxNjJFMiwgMHg3NDAxMkUyMiwgMHgzNkIzNjY0QywKKzB4NzEwNDhGRUUsIDB4NjZDMkQxNDcsIDB4NDUyODY1MTIsIDB4MjY1QjQ1MTgsCisweDYwODIyQzYyLCAweDg5MDE4ODAxLCAweDAwMDlBMTY4LCAweDYyNzJENzQyLAorMHg4QjEzMjIyOCwgMHhENzI2RDU0MSwgMHg2NTUyRDQ0MSwgMHg1MTQzNjY3MiwKKzB4MzE2QzM2NUMsIDB4Mjc2MjI2NjgsIDB4MTQxMzhEMDUsIDB4NjI2MkQ2M0QsCisweEIxQTU3MjAxLCAweEQ2MUUyNjIyLCAweDI2MjJFMjAwLCAweDUyOTE2NjkyLAorMHg4QjAxMzYyMCwgMHgwMDA5QTE0NCwgMHg2MDYxQTA2RSwgMHgwMDFDMDAxQywKKzB4MDAxRDQwMjAsIDB4MDAwMEIzOEUsIDB4RkZGRjAwMDAsIDB4MTIzNDAwMDAsCisweDAwMUUxMDE1LCAweDAwMjAxMjc4LCAweDAwMjAxOEEwLCAweDAwMjAxOTIyLAorMHgwMDIwMTI4QywgMHgwMDFDMzUxMCwgMHgwMDFDMzYyNCwgMHgwMDFFMjEyQywKKzB4MDAyMDM5N0MsIDB4MDAyMDM1MTQsIDB4MDAyMDM5ODQsIDB4MDAyMDM5OTAsCisweDAwMjAzOTlDLCAweDAwMjAzOUY4LCAweDAwMjAzOUZDLCAweDAwMjAzOUE0LAorMHgwMDIwMzlBNSwgMHgwMDIwMzlBOCwgMHgwMDExNzcwMCwgMHgwMDIwM0ExMiwKKzB4MDAyMDM1NzgsIDB4MDAxMTQyRDgsIDB4MDAyMDNBMTQsIDB4MDAyMDNBMTYsCisweDAwMUMzRDMwLCAweDAwMTE3NzE4LCAweDAwMUMzRDAwLCAweDAwMUMxMDAwLAorMHgwMDFDMzZGOCwgMHgwMDExNzczNCwgMHgwMDFDMzY4NCwgMHgwMDExNzcxMCwKKzB4MDAxQzM1MjAsIDB4MDAxMTc2MDAsIDB4MDAxMTc3NDAsIDB4MDAxQzEwMjgsCisweDAwMjAzNThDLCAweDAwMjAzOUFDLCAweDdGRkZGRkZGLCAweDAwMjAxNzM0LAorMHgwMDIwMzJCRSwgMHgwMDIwMjJFOCwgMHgwMDIwM0RDMCwgMHgwMDIwMzlGQSwKKzB4MDAyMDM1ODQsIDB4MDAyMDM5RUMsIDB4MDAxQzNEMkMsIDB4MDAxQzM2QjAsCisweDAwMjAzNTFDLCAweDAwMTE3NzVDLCAweDg4MDFDOTBGLCAweEEwQ0Y4OTAxLAorMHhEMTdDMDAwOSwgMHgzNjIwNjIxMiwgMHhENDdCODkwNCwgMHgyNDIxRTIwMCwKKzB4MjE2MkEwQ0MsIDB4NjIxMUQxNzksIDB4ODkwMTIyMjgsIDB4MDAwOUEwQzMsCisweEUyMDJENzc1LCAweDc1MDE2NTcxLCAweDMxMjM2MTVELCAweDI3NTE4RDAyLAorMHgwMDA5QTBCQywgMHhEMjcyNTVGMiwgMHg2MjIyNjA1MiwgMHg0MDA5NDAxOSwKKzB4QzkwRjQwMDksIDB4OEYxOTg4MEEsIDB4NTJGMzFGMkQsIDB4NDAxOTYwMjIsCisweDQwMDk0MDA5LCAweDg4MDhDOTBGLCAweEEwQTc4OTAxLCAweDYwNjMwMDA5LAorMHg1MUYyNTVGOCwgMHhFNzAxQ0IwMSwgMHgyNTAyRDI2MywgMHhFMTAwMjE3MiwKKzB4MjIxMUQ1NjQsIDB4NzQwMTY0NTIsIDB4MjU0MkEwOTgsIDB4OEIzRjg4MDUsCisweDYwMjI1MkYzLCAweDQwMDk0MDE5LCAweEM5MEY0MDA5LCAweDhCMTY4ODAyLAorMHhFNUZGRDQ1RCwgMHg2NTVENjc0MiwgMHg4QjEwMjc1OCwgMHg2MjcyRDc1QiwKKzB4OEIwQzMyNjAsIDB4NTVGMjU3RjgsIDB4Mjc2MkUxMDEsIDB4RDU1MjI1MTIsCisweEQ3NTdFNDAwLCAweDYyNzIyNTQxLCAweEEwNzc3MjAxLCAweDUyRjMyNzIyLAorMHg0MDE5NjAyMiwgMHg0MDA5NDAwOSwgMHg4ODA1QzkwRiwgMHgzMUIzOEI2RSwKKzB4RDU1MDhCNkMsIDB4NjE1MjU3RjQsIDB4NzEwMUUyNDAsIDB4NjQ3MjI1MTIsCisweDFGNEREMTRELCAweDQyMTgyNDE5LCAweDhCMDMzNDIwLCAweDYyNjJENjRCLAorMHgyNjIyNzIwMSwgMHhFMjAwRDY0MCwgMHgyNjIxQjBBQSwgMHgwMDA5QTA1NiwKKzB4MzEyM0UyMjAsIDB4ODgwMzhCNTIsIDB4NTJGMzhCMUUsIDB4NDAxOTYwMjIsCisweDQwMDk0MDA5LCAweDg4MDNDOTBGLCAweEQ3NDE4QjE2LCAweDY0NzI1MUY0LAorMHg3NDAxRDIzRCwgMHg2NTEyMjc0MiwgMHgxRjVERTY0MCwgMHg0NjE4MjUyOSwKKzB4OEIwMzM1NjAsIDB4NjI2MkQ2M0IsIDB4MjYyMjcyMDEsIDB4RTIwMEQ2MkUsCisweDI2MjFCMDg2LCAweDAwMDlBMDEwLCAweEQ3MzhEMTM3LCAweEQyMkE2NDEyLAorMHhFNTAwNzQwMSwgMHgyMTQyM0E3NiwgMHgyMjUxOEYwNiwgMHhFQTAwRDYzNCwKKzB4NzIwMTYyNjIsIDB4MjYyMkIwNzQsIDB4MkZCMkQ1MzIsIDB4OTU0MDY2NTIsCisweEQ0MzA1QkYxLCAweDM2MjA1MjQxLCAweDYwNjE4OTEwLCAweDhCMDFDODAzLAorMHgyQjIyRTIwMSwgMHg4RkY1NDUxMCwgMHg1N0YxNTY2NCwgMHg2MjcyRTFGMCwKKzB4NDEyODQxMTgsIDB4MjcyMjIyMUIsIDB4NkJGMkEwMDgsIDB4NkJGMkEwMDYsCisweEUyMDBENjE1LCAweEQxMTUyNjIxLCAweDIxMjFFMjAwLCAweEUyMDI1NkY1LAorMHg0MjE4NjY2MiwgMHgyNjI4NDIyOCwgMHgxRjZEOEQwQywgMHhENjFGRDExRSwKKzB4NDYwQjY1MTEsIDB4MjAwODY0NUQsIDB4NTdGNTg5MDQsIDB4NjI3MkQxMUMsCisweDI3MjIyMjE5LCAweEQxMUJFMjAxLCAweDY2MTIyODIyLCAweDhCMDEyNjY4LAorMHgwMDA5QUUxNywgMHg0NTBCRDUxOCwgMHhEMTE4MDAwOSwgMHhBRTEwRTYwMCwKKzB4MDdEMTIxNjAsIDB4MDAyMDNBMEMsIDB4MDAyMDNBMTAsIDB4MDAyMDNBMTgsCisweDAwMUMzREMwLCAweDAwMTE3NzJDLCAweDAwMUMzQjg4LCAweDAwMjAzOUY0LAorMHgwMDExNzczQywgMHgwMDExNzc0NCwgMHgwMDAwRjAwMCwgMHgwMDExNzc2NCwKKzB4MDAxMTc3NDgsIDB4MDAxMTc3NjgsIDB4MDAxMTc3NkMsIDB4MDFGRkZGRkYsCisweDAwMTE3NzRDLCAweDAwMjAzNTg0LCAweDAwMTE0MkQ4LCAweDAwMTE0Nzc0LAorMHhGREZGRkZGRiwgMHgwMDIwM0RDMCwgMHgwMDIwMjQ2QywgMHgwMDIwMzlGQSwKKzB4MkY5NjJGODYsIDB4MkZCNjJGQTYsIDB4MkZENjJGQzYsIDB4NEYyMjJGRTYsCisweEQxMUY3RkY0LCAweDYyMTJERTFGLCAweDY3RTI1NDExLCAweEQ0MUUxRjQxLAorMHgxRjcyMkYyMiwgMHg2NzQzRDUxRCwgMHg3Nzk0RDIxRCwgMHg1QTQyNTg0MSwKKzB4NkM3MjY5NDIsIDB4NkQyMjVCMTYsIDB4RTYwMDYwNTIsIDB4MjUwMkNCMjAsCisweDc2MDFFNTQwLCAweDMyNTM2MjZELCAweDYyRjI4QkZCLCAweDIxMjI1NUYxLAorMHg1NUYyMTE1MSwgMHgyRTUyRDYxMywgMHgxNEEyMTQ4MSwgMHhENDEyMjQ5MiwKKzB4MTFCNjI3QzIsIDB4Njc0MjI2RDIsIDB4RDkxMURBMTAsIDB4MkE3MkU4MDEsCisweDFBOEM0OTBCLCAweDQyMThFMjAxLCAweDdGMEMxQTJDLCAweDZFRjY0RjI2LAorMHg2Q0Y2NkRGNiwgMHg2QUY2NkJGNiwgMHgwMDBCNjlGNiwgMHgwMDAwNjhGNiwKKzB4MDAxQzNCOUMsIDB4MDAxQzNEOTgsIDB4MDAxQzM3MDAsIDB4MDAxQzM1MDAsCisweDAwMUM1OTYwLCAweDAwMUM4OTYwLCAweDAwMjAzNThDLCAweDAwMUMzRDAwLAorMHgwMDIwMTYxMCwgMHgyRjk2MkY4NiwgMHgyRkM2MkZBNiwgMHgyRkU2MkZENiwKKzB4NEYxMjRGMjIsIDB4N0Y4ODRGMDIsIDB4RTAxOERFQjIsIDB4RDRCMjYxRTAsCisweDYxRTMwRjE0LCAweDYyMTA3MTAxLCAweDQ0MEJFMDFDLCAweDIwMDgwRjI0LAorMHg4RjEyNkQwMywgMHhENEFEMUYwOCwgMHg2NzQwRERBRCwgMHg2NTdDRDRBRCwKKzB4NDcwQkQ3QUQsIDB4RDJBRDAwMDksIDB4NjIxQzYxMjAsIDB4NDYwODY2MjMsCisweDM2Mjg0NjA4LCAweDNENkM0NjA4LCAweEUwMUMxRkQ4LCAweEU1ODAwNEZDLAorMHg2MDRDNjZFMiwgMHgzMDUwNjU1QywgMHgyRDYyOEYxNywgMHgwMUZDRTAxOCwKKzB4REVBM0U1MDAsIDB4NjQxQ0EwMDgsIDB4Njc1MzY1NUQsIDB4NjA3MDM3RUMsCisweDMxREM2MTUzLCAweDgwMTQ3NTAxLCAweDMyNDM2MjVELCAweEQ0OUQ4QkY0LAorMHhFMjAwRDU5RCwgMHhBMjdGMjQyMSwgMHgyMDA4MjUyMSwgMHhFMDE4OEIxMywKKzB4RTUwMDAxRkMsIDB4QTAwOURFOTYsIDB4NjU1RDY0MUMsIDB4MzJFQzYyNTMsCisweDYyNTM2NzIyLCAweDMyREM2NjcyLCAweDc1MDQxMjYxLCAweDMyNDM2MjVELAorMHhBMjY5OEJGMywgMHg4ODAxMkQxMCwgMHhFMDE4OEIxNiwgMHhFNDAwMDFGQywKKzB4NjcxQzJENDAsIDB4NjI0RERFOEEsIDB4OEIwMTMyNzMsIDB4MDAwOUEyNUMsCisweDZERTM2NDRELCAweDdEMDQ2MjQzLCAweDMyRUM2NjQzLCAweDY1MjIzNkRDLAorMHg3NDA4NjE2MiwgMHgyNTEyQUZFRiwgMHg4QjE5ODgwNCwgMHgwMUZDRTAxOCwKKzB4MkQ3MEU3MDAsIDB4MUZENTZEMUMsIDB4NjI3RERFN0QsIDB4OEIwMTMyRDMsCisweDAwMDlBMjQyLCAweDYxNzM2NzdELCAweDMxRUM2NUUzLCAweDc1MDQ2NDEyLAorMHgzNjVDNjY3MywgMHg2MTQyNjI2MiwgMHgyMTI5NzcwOCwgMHgyNDEyQUZFRCwKKzB4OEIxOTg4MDUsIDB4MDFGQ0UwMTgsIDB4MkQ3MEU3MDAsIDB4MUZENDZEMUMsCisweDYyN0RERTZGLCAweDhCMDEzMkQzLCAweDAwMDlBMjI2LCAweDYxNzM2NzdELAorMHgzMUVDNjVFMywgMHg3NTA0NjQxMiwgMHgzNjVDNjY3MywgMHg2MTQyNjI2MiwKKzB4MjEyQjc3MDgsIDB4MjQxMkFGRUQsIDB4OEI1OTg4MzEsIDB4NjFFNkRFNjcsCisweDYxRTMxRjE5LCAweDY0RTI3MTA0LCAweDFGNEE2MjE2LCAweDFGMkI2NDE2LAorMHg3NUU0NjUxMywgMHg2NjUzNjcxMiwgMHgxRjRDNzYwNCwgMHg2NDUyMUY3RCwKKzB4RDc1RjZFNjYsIDB4MjdFMEQyNUYsIDB4REU1RjYwNjIsIDB4QzkwMTMyNDUsCisweDY1NjIyRTAwLCAweDQ2MDkwNjBBLCAweDQ2MDlEMTVDLCAweDQ2MDk0NTA5LAorMHgyMTUwMUY0RSwgMHhCMkIwNjQ2RCwgMHg2MjBEMUY2RiwgMHg4QjAxMjIyOCwKKzB4MDAwOUExRUEsIDB4RDc1NkRFNTUsIDB4NjYxQzYxRTAsIDB4NjQxMEQxNTAsCisweDQ3MEI2NTRDLCAweDdGRkM1NEZGLCAweDJGRTI1RUZFLCAweDUxRkU3RkZDLAorMHgyRjEyRTA0MCwgMHg1NUZCRDE0RiwgMHg1N0ZENTZGQywgMHgwNEZFNDEwQiwKKzB4RDI0RDdGMDgsIDB4RTExQzY0MEQsIDB4MUQ0MTJEMTAsIDB4RDQ0QjY1MjIsCisweDY3NDIxRDUyLCAweDFENzNERTRBLCAweEQyNEE2NUUyLCAweDY3MjIxRDU0LAorMHgxRDc1RDI0OSwgMHhEMjQ5NkUyMiwgMHg2NjIyMURFNiwgMHgxRDY3QTFCQywKKzB4ODkwMTg4MzAsIDB4MDAwOUEwOEUsIDB4RTM0MEQ1MzgsIDB4MzNGQzYxNTYsCisweDIzMTI2NDU2LCAweDcxMDQ2MTUzLCAweDY3NTIxMzQxLCAweDEzNzI2NDE2LAorMHg3RUU0NkUxMywgMHg2NUU2NjIxMiwgMHg2NkUzRDczMSwgMHgxMzI0NkVFMiwKKzB4NzYwNDI3RTAsIDB4NjA2MkQyMkYsIDB4MzI1NURFMkYsIDB4MkUwMEM5MDEsCisweDA2MEE2RTYyLCAweEQxMkQ0NjA5LCAweDRFMDk0NjA5LCAweDEzNDM0NjA5LAorMHg2NDZEMjFFMCwgMHhCMjUwMUY1RSwgMHg2MjBEMUY2RiwgMHg4QjAxMjIyOCwKKzB4MDAwOUExOEEsIDB4REUyNUQ1MjIsIDB4NjFFMDY0NTAsIDB4RDcyNDY1NEMsCisweDQ3MEI1NEZGLCAweDdGRkM2NjFDLCAweDA2RkVFMDU0LCAweDdGRkMyRjYyLAorMHhFRTQwMDFGRSwgMHgyRjEyM0VGQywgMHg1NUUyRDEyNSwgMHg1N0U0NTZFMywKKzB4NjRFMjQxMEIsIDB4RDIxQzdGMDgsIDB4RTExQzY0MEQsIDB4MUQ0MTJEMTAsCisweEQ2MUE2NTIyLCAweDY3NjIxRDUyLCAweDFENzNERTE5LCAweEQyMTk2RUUyLAorMHg2MjIyMURFNCwgMHhEMjE4MUQyNSwgMHgxRDI2NjIyMiwgMHg2MjIyRDIxNywKKzB4MUQyN0ExNUEsIDB4MDAxMTc4MDAsIDB4MDAyMDJBMTgsIDB4MDAyMDM5OTYsCisweDAwMjAzNUJDLCAweDAwMjAzQTdDLCAweDAwMjAxOEQwLCAweDAwMjAzOTk1LAorMHgwMDExNzgwNCwgMHgwMDIwM0ExNCwgMHgwMDIwM0ExNiwgMHgwMDExNzgxMCwKKzB4MDAyMDM5OTEsIDB4MTA2MjRERDMsIDB4MDAyMDM5OTIsIDB4MDAyMDM5OTMsCisweDAwMTE0QUE0LCAweDAwMjAwRjY4LCAweDAwMUM1ODY0LCAweDAwMUM2ODY0LAorMHgwMDFDNzg2NCwgMHgwMDFDNTlCQywgMHgwMDFDNjlCQywgMHgwMDFDNzlCQywKKzB4MDAyMDBGQzAsIDB4OEIwNDg4MzMsIDB4NDcwQkQ3QTIsIDB4QTEyM0VFMDAsCisweDg4MjgyREUwLCAweEEwRDM4OTAxLCAweERFOUYwMDA5LCAweDYyRTFFMTQzLAorMHgzMjE2RTA1NCwgMHgwRkU2OEYwMiwgMHgyRTIxRTI0MCwgMHg2MjJENjJFMSwKKzB4OEIwMTMyMTcsIDB4MDAwOUEwQkMsIDB4RTUwMTg1RTEsIDB4OEIwMTMwNTYsCisweDAwMDlBMEI2LCAweDJEMTBFMTAxLCAweDY0RTFCMTExLCAweDA2RkVFMDU0LAorMHg2MjYxRTE0MywgMHgzNTE3NjUyRCwgMHhFNjQwODk0NSwgMHg4QjBDMzU2MywKKzB4RTA1OEU0MUEsIDB4RTUwMDBGNDUsIDB4NzJDMEUwNUMsIDB4NjAyMzBGNTUsCisweDY3MDNDOTA3LCAweEEwMTRFMDYwLCAweDY2NTMwRjc1LCAweDQ2MjE0NjIxLAorMHg0NjIxNDYyMSwgMHg0NTIxNDYyMSwgMHhFMDU4NzYxOCwgMHgwRjY1NDUyMSwKKzB4RTAwMzQ1MjEsIDB4RTA1QzI1MDksIDB4RTAwNzBGNTUsIDB4RTA2MDIyMDksCisweEU4NTQwRjI1LCAweDg1ODIzOEZDLCAweDY0MEQ2NUYzLCAweDE4NDRCMTcwLAorMHhERDdBODU4NCwgMHg4NTg2NkMwRCwgMHg2MTBENEMwOCwgMHg0MTA4NjBDMywKKzB4RTAwRjBFRkUsIDB4MTgxNTREMEIsIDB4MkUyOTYyMDcsIDB4NjY4MjYwQzMsCisweDg1NjIwRkU2LCAweDREMEI1MTg1LCAweDJFMEI2MDBELCAweDU0ODQ2MEMzLAorMHhCMTNDMEZFNiwgMHhFMDU0NjVGMywgMHhFNTQwMEVGRSwgMHhFMDZDNjJFMSwKKzB4MzY1MzY2MkQsIDB4MEY2NjhENDEsIDB4QzkwMzYwMjMsIDB4NDAwMDQwMDgsCisweDYxMDM2NDAzLCAweEQ5NjVFMDcwLCAweDBGNDZFNUZGLCAweEUwNzQ2NTVDLAorMHg2MDUzMEY5NiwgMHg2MjYzNDkwQiwgMHg0MjIxNDIyMSwgMHg0MjIxNDIyMSwKKzB4NDIwMDY3MjMsIDB4NDIwMDMyN0MsIDB4NkMwNzQ2MjEsIDB4NDYyMUUwNTQsCisweDYwNjMwOUZFLCAweDQwMDhDOTAzLCAweDc5MDYzMEZDLCAweDZBMDM2RDJELAorMHg2NUYzRTgwMCwgMHg2NEQzQjEyNCwgMHhFMDcwNkVBMiwgMHgyQUUyMkVDOSwKKzB4MDFGRTY2OTQsIDB4NjY2Q0UwNzQsIDB4NDcwQjA3RkUsIDB4MkUwQjYwNjMsCisweDY1RjMyQUUyLCAweEIwRkE2NEQzLCAweDYyOEQ3ODAxLCAweDMyRTNFRTA2LAorMHg3RDAxOEZFNywgMHgwRUZFRTA1NCwgMHhFMDU0NjJFMSwgMHg0MjAwMDZGRSwKKzB4NzYwQzg1NjEsIDB4NzAxQjMwMkMsIDB4RTQwMDYxMDMsIDB4RTcwNDY1RjMsCisweDY4NjY3NDAxLCAweDM5NzM2OTRELCAweDhGRjkyNTgyLCAweDY1RjM3NTA0LAorMHg2NDFEQjBERCwgMHgwRUZFRTA1NCwgMHg2NEUxQjA5QywgMHgwMDA5QTA1NCwKKzB4RDQzQjU2RjgsIDB4RUEwMUQyM0IsIDB4MjZBMDQyMEIsIDB4MDAwOUEwNEMsCisweDA2RkNFMDFDLCAweDg4Mjk2MDZDLCAweDVDRjg4QjA4LCAweEUyMDBENjM2LAorMHg1MjYxMkMyMCwgMHg2NDJEQjA0QiwgMHgwMDA5QTAzRSwgMHg2NjZDRTY4MSwKKzB4OEIwNDMwNjAsIDB4NDIwQkQyMzEsIDB4QTAzNTU0RjgsIDB4RTY4MjAwMDksCisweDMwNjA2NjZDLCAweEQyMkU4QjA0LCAweDU0Rjg0MjBCLCAweDAwMDlBMDJDLAorMHg2NjZDRTY4MywgMHg4QjBBMzA2MCwgMHhEQTI3NTVGOCwgMHgyNTkwRTkwMCwKKzB4RDgyODU1QTEsIDB4Mjg1MkQ2MjgsIDB4QTAxRDUyQTIsIDB4RTY5MjI2MjAsCisweDMwNjA2NjZDLCAweEQyMjA4QjA4LCAweDVDMjFEODI0LCAweDZDQ0M1MkY4LAorMHgyOEMxRTYwMCwgMHgyMjYwQTAxMCwgMHg2NjZDRTY5MywgMHg4QjA2MzA2MCwKKzB4RDYxRjU5RjgsIDB4RTIwMUVBMDAsIDB4QTAwNTI5QTAsIDB4RDYxNjI2MjEsCisweEQyMURENDFDLCAweDY1NjI0MjBCLCAweDRGMDY3Rjc4LCAweDRGMjY0RjE2LAorMHg2REY2NkVGNiwgMHg2QUY2NkNGNiwgMHgwMDBCNjlGNiwgMHg0RjIyNjhGNiwKKzB4RTI0MDYxNEQsIDB4ODkzMjMxMjMsIDB4MzEyN0UyMUYsIDB4OEIyN0Q3MTMsCisweEQ0MDY2MTRELCAweEUwMDE3MUUwLCAweDU2NzE0NDBCLCAweDI2NTk2NTA3LAorMHgxNzYxQTAyNSwgMHgwMDIwMEZCQywgMHgwMDExNzgwNCwgMHgwMDIwMzQ3MCwKKzB4MDAyMDNBOUMsIDB4MDAyMDE4QzAsIDB4MDAxMTc4MDAsIDB4MDAxMTVGMDAsCisweDAwMTE2MDU4LCAweDAwMjAzOTdDLCAweDAwMjAzOTkwLCAweDAwMjAzQTFBLAorMHgwMDIwM0ExNiwgMHgwMDIwM0FCNCwgMHgwMDIwMThEMCwgMHgwMDFDMzcwNCwKKzB4RTAwMUQ0OTAsIDB4NjY3MjQ0MEIsIDB4MjY1OTY1MDcsIDB4NEYyNjI3NjIsCisweDAwMDkwMDBCLCAweDYxNEQ0RjIyLCAweDMxMjNFMjQwLCAweEUyMUY4OTEyLAorMHhENzg5MzEyNywgMHg2MTREOEIwOCwgMHg1NjcxRDI4NiwgMHg0MjBCNzFFMCwKKzB4MjYwQkUwMDEsIDB4MTc2MUEwMDYsIDB4NjY3MkQyODIsIDB4RTAwMTQyMEIsCisweDI3NjIyNjBCLCAweDAwMEI0RjI2LCAweEU2NDAwMDA5LCAweDQ2Mjg0NjE4LAorMHg2MjUyRDU3RSwgMHg4OUZDMjI2OCwgMHgwMDA5MDAwQiwgMHg0NjE4RTY4MCwKKzB4RDU3QTQ2MjgsIDB4MjI2ODYyNTIsIDB4MDAwQjg5RkMsIDB4QTAwMTAwMDksCisweDcyMDFFMjAwLCAweDhCRkMzMjQyLCAweDAwMDkwMDBCLCAweDQ2MThFNjgwLAorMHhENTczNDYyOCwgMHgyMjY4NjI1MiwgMHgwMDBCOEJGQywgMHgyRkU2MDAwOSwKKzB4N0ZGQzRGMjIsIDB4QkZGMTZFNTMsIDB4NjFFMjJGNDIsIDB4RTI4MEQ2NkQsCisweDU0RTExNjE1LCAweDE2NDY0MjE4LCAweDQyMjg1NUUyLCAweDU3RTMxNjU3LAorMHgxNjc4NkVGMiwgMHgyNkUyMkUyQiwgMHg0RjI2N0YwNCwgMHg2RUY2QUZDRSwKKzB4MkZENjJGQzYsIDB4NEYyMjJGRTYsIDB4NkM1M0RENjIsIDB4NkU0M0JGRDYsCisweDJERTJCRkJCLCAweDAwMDlCRkQyLCAweDJDMTI1MUQ1LCAweDFDNDE1NEQ2LAorMHgxQzUyNTVENywgMHgxQzYzNTZEOCwgMHg2RUY2NEYyNiwgMHgwMDBCNkRGNiwKKzB4NjE2MzZDRjYsIDB4QTAwNEU2MDAsIDB4NjI1NjQxMDksIDB4MjQyMjc2MDEsCisweDM2MTI3NDA0LCAweDAwMEI4QkY5LCAweEQ2NTMwMDA5LCAweDg1NjJFNTAwLAorMHhBMDBCNjc0RCwgMHg2NTVENjEwRCwgMHg0MDAwNjA1MywgMHgzMDVDRDQ0RiwKKzB4MDI0RDQwMDgsIDB4MzI3MDYyMkQsIDB4NzUwMTg5MDUsIDB4MzIxMzYyNUQsCisweDAwMEI4QkYxLCAweDAwMEJFMDAwLCAweDJGRTZFMDAxLCAweDU0NDE2NzQzLAorMHg0RTA4RUU3RiwgMHg0RTI4RDI0NiwgMHgyNUU5NjU0MywgMHg2MDQzNkUyMSwKKzB4OUU3NTYyRUQsIDB4NDUyOUM5MDMsIDB4RTYwMDMyRTMsIDB4OEQ0NTYxMDMsCisweDIxMTg0NTA5LCAweEQyM0Y4QjA1LCAweDAwMkM2MDUzLCAweEEwOEFDOTNGLAorMHg2MDEzNjYwMywgMHg4QjI2ODgwMSwgMHg4ODBDNjA1MywgMHhENTNBOEIwNCwKKzB4QzkzRjg0NTMsIDB4NjYwM0EwN0YsIDB4OEIwNDg4MDgsIDB4ODRFMkRFMzYsCisweEEwNzhDOTNGLCAweDg4MEQ2NjAzLCAweDhCMDNENjMzLCAweEM5M0Y4NDYxLAorMHg2NjAzQTA3MSwgMHg4ODA5NjI2MCwgMHg2MjJDOEYwOSwgMHhFMDE0REUyQywKKzB4NjU1QzA1RUMsIDB4NjAyMzMyNTgsIDB4QTA2NEM5M0YsIDB4NjAyMzY2MDMsCisweEEwNjBDOTNGLCAweDg4MDI2NjAzLCAweEUwMDc4QjVELCAweDYwNDMyNTA5LAorMHg4OTA1QzgxMCwgMHg2MDUzRDIyNSwgMHhDOTNGMDAyQywgMHg2NjAzQTA1MywKKzB4NjA1M0RFMjMsIDB4QzkzRjAwRUMsIDB4NjYwM0EwNEQsIDB4ODgwMTYwMTMsCisweDYwNTM4QjE5LCAweDhCMDQ4ODBDLCAweDg0MjNEMjFFLCAweEEwNDJDOTNGLAorMHg4ODA4NjYwMywgMHhENTFCOEIwNCwgMHhDOTNGODQ1MiwgMHg2NjAzQTAzQiwKKzB4RDYxODg4MEQsIDB4ODQ2MThCMDMsIDB4QTAzNEM5M0YsIDB4NjA2MDY2MDMsCisweEEwMzBDOTNGLCAweDg4MDI2NjAzLCAweEUwMDc4QjJELCAweDYwNDMyNTA5LAorMHg4OTIzQzgxMCwgMHg2MDUzREUxMCwgMHhDOTNGMDBFQywgMHg2NjAzQTAyMywKKzB4MDAwMDBCQjgsIDB4MDAyMDM0NzAsIDB4MDAxQzM3MDQsIDB4MDAxQzM3M0MsCisweDAwMUMzNzAwLCAweDAwMUMzNzBDLCAweDAwMTE0MDAwLCAweDAwMTE0MDA4LAorMHgwMDExNDJEOCwgMHgwMDExNDJFNCwgMHgwMDExNDJFOCwgMHgwMDExNDJGNSwKKzB4MDAxMTQyRUQsIDB4MDAxMTQyRkQsIDB4MDAxMTQzMDksIDB4NjA1M0QyMDksCisweEM5M0YwMDJDLCAweDYwMTM2NjAzLCAweDhCMDM4ODAyLCAweEM4MTA2MDQzLAorMHg3NjAyODkwMCwgMHhDOTNGNjA2MywgMHg0MDAwNDAxOCwgMHgxNzQxMjQwQiwKKzB4NkVGNjAwMEIsIDB4MDAxMTQzMDEsIDB4MDAwOUExNkUsIDB4MkZFNjJGRDYsCisweEREOTQ0RjIyLCAweEEwMDQ5RUIyLCAweEQ0OTMwMDA5LCAweDQyMEJEMjkzLAorMHg2MkQyNjVEMiwgMHg4QkY4MjJFOCwgMHgwMDA5QTAwNCwgMHhEMjhGRDQ5MCwKKzB4NTVEMTQyMEIsIDB4MjJFODUyRDEsIDB4QTAwNDhCRjgsIDB4RDQ4RDAwMDksCisweDQyMEJEMjhBLCAweDUyRDI1NUQyLCAweDhCRjgyMkU4LCAweDAwMDlBMDA0LAorMHhEMjg2RDQ4OSwgMHg1NUQzNDIwQiwgMHgyMkU4NTJEMywgMHhBMDA0OEJGOCwKKzB4RDQ4NjAwMDksIDB4NDIwQkQyODEsIDB4NTJENDU1RDQsIDB4OEJGODIyRTgsCisweDZFRjY0RjI2LCAweDZERjYwMDBCLCAweDJGRDYyRkM2LCAweDRGMjIyRkU2LAorMHg2RTYzNkM3MywgMHg2RDUzQjAxQSwgMHg2NEQzNTdGNCwgMHhCMDVGNjVFMywKKzB4QjA3NTY2QzMsIDB4QjBBNDAwMDksIDB4QjBBODAwMDksIDB4QjBBQzAwMDksCisweEIwQUMwMDA5LCAweEIwQUYwMDA5LCAweEIwMzE1NEY1LCAweDZDQ0Q2QzAzLAorMHg0RjI2NjBDMywgMHg2REY2NkVGNiwgMHg2Q0Y2MDAwQiwgMHgzNDEyRDE3MCwKKzB4RDY3MDA1MjksIDB4MjY1MEQ3NzAsIDB4Mjc0MjAwMEIsIDB4MDAwOUEwMTgsCisweDJGRDYyRkM2LCAweDRGMjIyRkU2LCAweDZFNjM2QzczLCAweDZENTNCRkVFLAorMHg2NEQzNTdGNCwgMHhCMDMzNjVFMywgMHhCMDhENjZDMywgMHhCMDBGNTRGNSwKKzB4NkNDRDZDMDMsIDB4NEYyNjYwQzMsIDB4NkRGNjZFRjYsIDB4NkNGNjAwMEIsCisweEU1MDNEMTYyLCAweEQ3NjNENDYyLCAweDIxNTI0NTE4LCAweDI0NzIwMDBCLAorMHhENDVGRDE1RSwgMHgyMTYyRTYwMCwgMHgyNDYyMDAwQiwgMHhCRjczNEYyMiwKKzB4QkY3M0U0MEEsIDB4RDI1QzAwMDksIDB4NDExOEUxMDQsIDB4RTQwQUU1MDAsCisweEJGNjkyMjEyLCAweEQ3NTkyMjUyLCAweENCMjA2MDcyLCAweDAwMEI0RjI2LAorMHg0RjIyMjcwMiwgMHg0MTBCRDE1NiwgMHhENTU2RTQwMCwgMHg0RjI2NDUyQiwKKzB4RDE1NTJGRTYsIDB4NjYxMjZFNjMsIDB4OTIxMDQ0MTgsIDB4NDQwODQ1MjgsCisweDQ1MDAyNjI5LCAweDI2NUI0NDA4LCAweDI2NEI0NDAwLCAweDIxNjI0NzA4LAorMHhEMTRFNDcwOCwgMHgyMTcyMjdFQiwgMHg2RUY2MDAwQiwgMHgxRkZGMDNGMCwKKzB4NEYyMjJGRTYsIDB4RTEwMURFNEEsIDB4QkYzREU0MEEsIDB4NjdFMzJFMTIsCisweEU1MDA3NzZDLCAweEUyMDRFMTMwLCAweDI3NTJFNDBBLCAweDI3NTIyNzUyLAorMHgyNzUyMjc1MiwgMHgyNzUyMjc1MiwgMHgyNzUyMjc1MiwgMHgyNzUyMjc1MiwKKzB4Mjc1MjI3NTIsIDB4Mjc1MjI3NTIsIDB4Mjc1MjI3NTIsIDB4Mjc1MjI3NTIsCisweDI3MjIyNzEyLCAweDI3NTIyNzUyLCAweDI3NTIyNzUyLCAweDI3NTIyNzUyLAorMHgyNzUyMjc1MiwgMHgxNzVBQkYxOCwgMHgyRTYyRTYwMCwgMHgwMDBCNEYyNiwKKzB4RDIzNDZFRjYsIDB4RTQ0MUUxMDEsIDB4MDAwQjIyMTIsIDB4RDEzMjIyNDIsCisweEU2MDVENDMyLCAweDAwMEIyMTYyLCAweDAwMEIyNDYyLCAweEQyMzAwMDA5LAorMHhFNDBBRTYwMSwgMHgyMjYyQUYwMCwgMHgyRkM2MkZCNiwgMHgyRkU2MkZENiwKKzB4N0ZGQzRGMjIsIDB4NkM0M0RCMkIsIDB4RUQwMDYwQjIsIDB4MkIwMkNCMDMsCisweEM5MDM2MEIyLCAweDZFMDNBMDA4LCAweDg5MDczREMyLCAweEU0NjQ2MEIyLAorMHhCMDdDQzkwMywgMHg3RDAxNkUwMywgMHg4QkY1MkVFOCwgMHg4RjA0M0RDMiwKKzB4RDQyMTJGRTEsIDB4NDYwQkQ2MjEsIDB4NjJGMTAwMDksIDB4NjAyMzYyMkQsCisweDg5RkZDODAxLCAweDdGMDQ2MDIzLCAweDZFRjY0RjI2LCAweDZDRjY2REY2LAorMHg2QkY2MDAwQiwgMHgwMDFDM0I4OCwgMHgwMDIwM0FDOCwgMHgwMDIwMThEMCwKKzB4MDAyMDNBRDAsIDB4MDAyMDNBRDgsIDB4MDAyMDNBRTAsIDB4MDAyMDNBRTgsCisweDAwMjVFNzIwLCAweDAwMjAzREJDLCAweDAwMjAzOTgwLCAweDAwMUM1OTY4LAorMHgwMDFDM0I0MCwgMHgwMDBGODAwMCwgMHgwMDFENDAwNCwgMHgwMDFDMzUwMCwKKzB4MDAyMDE1RTQsIDB4MDAyMDE2MTAsIDB4MDAxQzU4MTQsIDB4MDAxQzU5RDAsCisweDAwMUM1ODMwLCAweDAwMUM2MjY4LCAweDAwMUM1OUE0LCAweDAwMUM2MzlDLAorMHgwMDFDNTgxQywgMHgwMDFDNTg2MCwgMHgwMDIwM0FGMCwgMHgwMDIwMThDMCwKKzB4OEYwMTQ0MTEsIDB4NjA0MzYwNEIsIDB4MDAwOTAwMEIsIDB4NTY1MUQ1MkIsCisweDQ2Mjg2MDUyLCAweDMwNkMwMDBCLCAweDJGQzYyRkI2LCAweDJGRTYyRkQ2LAorMHg0RjEyNEYyMiwgMHhCRkYxNEYwMiwgMHg2QjAzNkU0MywgMHhERDI1REMyNCwKKzB4MDAwOUJGRUMsIDB4M0MwNTMwQjgsIDB4NDYwOTA2MEEsIDB4NDYwMTQ2MDksCisweDAyMEEzRDY1LCAweDQyMDk0MjA5LCAweDMyRTI0MjA5LCAweDRGMDY4QkYwLAorMHg0RjI2NEYxNiwgMHg2REY2NkVGNiwgMHgwMDBCNkNGNiwgMHgyRkM2NkJGNiwKKzB4MkZFNjJGRDYsIDB4NEYxMjRGMjIsIDB4QkZDRjRGMDIsIDB4NkMwMzZFNDMsCisweEJGQ0JERDEzLCAweDMwQzgwMDA5LCAweDA2MEEzRDA1LCAweDQ2MDk0NjA5LAorMHgzNkUyNDYwMSwgMHg0RjA2OEJGNSwgMHg0RjI2NEYxNiwgMHg2REY2NkVGNiwKKzB4NkNGNjAwMEIsIDB4NEYyMjJGRTYsIDB4RTEwMkRFMEIsIDB4RTQwM0U1MDAsCisweEJGQjkyRTEyLCAweEU2MDYyRTUyLCAweEU3MDA0NjE4LCAweDJFNjJFNDAzLAorMHg0RjI2MkU3MiwgMHg2RUY2QUZCMCwgMHgwMDA5MDAwQiwgMHgwMDFDMTA0MCwKKzB4Q0NDQ0NDQ0QsIDB4MTA2MjRERDMsIDB4MDAxRDQwMDQsIDB4MkY5NjJGODYsCisweDJGQjYyRkE2LCAweDJGRDYyRkM2LCAweDRGMjIyRkU2LCAweEU1MDA3Rjk4LAorMHg2NDUzRTcxMCwgMHg2QjUzNDcyOCwgMHhFRTFBRENCQywgMHg2MTUzNjU1RCwKKzB4MzE1QzQxMDgsIDB4NzUwMTQxMDgsIDB4NjA0MzMxN0MsIDB4MEYxNjY2NUQsCisweEVEMDA2MEIzLCAweDIxQjEzNkUzLCAweDgxMTI4MTExLCAweDExRDI4MTEzLAorMHgxMUQ0MTFEMywgMHg3NDA0OEZFQSwgMHhEOEIxNjdGMiwgMHgxODcxRDlCMSwKKzB4NThGMTI4NzIsIDB4MTk4MUQxQjAsIDB4NTlGMjI5ODIsIDB4NURGNDVBRjMsCisweDU0RjY1RUY1LCAweDIxOTIxMTkxLCAweDExQTIxMUEzLCAweDExRDQxMUQ1LAorMHgxMUU2MTFFNywgMHgxMTQ4MTE0OSwgMHhEQUE4NTVGNywgMHg1N0Y4RUUwMCwKKzB4NTJGOUREQTcsIDB4NjRFM0Q2QTcsIDB4MkE1MjFBNTEsIDB4RDhBN0Q5QTYsCisweDJENzJFQUVGLCAweDZBQUMyNjIyLCAweDZERTM2RUVELCAweDYxRTM0RDA4LAorMHg0MTA4M0RFQywgMHgzMUVDNEQwOCwgMHg2MEIzM0Q5QywgMHgyREIxNDEwOCwKKzB4RTA1MDgxRDEsIDB4RTc5RjQxMDgsIDB4NDEwODQwMDgsIDB4ODFEMjY3N0MsCisweDMxOEM2MEIzLCAweDM0NzJFMjAwLCAweDFERDI4MUQzLCAweEQ0OTMxRDEzLAorMHgxRDI0OEQwMSwgMHg2NUQzRDQ4RiwgMHg3RTAxQjBCMiwgMHgzNEEyNjRFRCwKKzB4REE4QzhCREEsIDB4NjhBMjJGRDIsIDB4NDgyOUREOTEsIDB4NjRBMjJEODIsCisweDY5NEQ3REZDLCAweDJEOTJEMjg2LCAweDRFMjk2RTIyLCAweDJERTI3RDBDLAorMHg2QUQzNjgyMiwgMHhENzg0NjE4RCwgMHg2RDcyMkExNiwgMHhENTgzRDQ4OSwKKzB4NUU3MjI0RDIsIDB4MTRFMkQ2ODgsIDB4RUUwMDUxNzQsIDB4NTg3NjE0MTQsCisweDE0ODZEMTg2LCAweEU3MTA1OTc4LCAweDYyNTIxNDk4LCAweDE0MkE2NUUzLAorMHg2NEUzMjZFMiwgMHg2NDRERTYwMCwgMHg0ODA4Njg0MywgMHg0ODA4Mzg0QywKKzB4NjA1MzM4MUMsIDB4MjhCMTBDODYsIDB4NjBCMzA5Q0UsIDB4NjA1MzgxOTEsCisweDYwNDMwQUNFLCAweDYwNTM4MUEyLCAweDYwQjMwRENFLCAweDYwNTM4MUQzLAorMHg3NDAxMDhDRSwgMHgwOUNFMTg4MiwgMHgxOUUzNjI0RCwgMHgzMjczMEFDRSwKKzB4OEZFMDFBNjQsIDB4RDk2QTc1MDQsIDB4NkM5MkUwMDMsIDB4MkNCMTQwMTgsCisweERBNkY2RDkyLCAweEUwNTA4MUQxLCAweDQwMDg2RTkyLCAweDYxOTI4MUUyLAorMHg4MTEzNjBCMywgMHhFNjAwNjQ5MiwgMHg2NzkyMTQ0MiwgMHgxN0EzRDQ2OCwKKzB4RTFGRjY4OTIsIDB4RTcwMzE4NjQsIDB4NDYwODY1NjMsIDB4NzUwMTM2NEMsCisweDY2NUQyNjEyLCAweDhCRjgzNjczLCAweEUwMDNEQzVBLCAweDQwMTg2REMyLAorMHg2RUMyMkRCMSwgMHg4MUUxRDI1RiwgMHhFRTAwNjFDMiwgMHg2NEMyMTExMiwKKzB4MTQyM0UwMjQsIDB4RDQ1QjY1QzIsIDB4NjdDMjE1RTQsIDB4ODE3MkU1ODAsCisweDY2RTM2OEMyLCAweDY1NUM4MTgzLCAweDY5NjM2NjZELCAweDZBNkQ3NjA0LAorMHgzQTUzMzk0QywgMHgyOUUyOEZGOCwgMHhEQzU0REI1MywgMHg3NDA0MjRCMiwKKzB4N0Y2ODI0QzIsIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkFGNjZCRjYsCisweDAwMEI2OUY2LCAweDYxNDI2OEY2LCAweEM4MDM2MDExLCAweEU1MDA4RjAzLAorMHgzNDIwRDIzQywgMHg2MDExOEIwNiwgMHg4ODAyQzkwMywgMHhEMjM5OEIwNiwKKzB4OEIwMzM0MjAsIDB4NjUxMzU2MTIsIDB4MjQyMjUyNjQsIDB4NjA1MzAwMEIsCisweDJGRTYyRkQ2LCAweDdGRUM0RjIyLCAweDYyNTM2RTUzLCAweDZENDNFNTUwLAorMHg0NTA4RTQwMCwgMHhFMTAxQTAwMSwgMHg2MDQzNTIyNCwgMHg4MTIxMjIxMSwKKzB4NjA1MzgxMjMsIDB4NTZFMjgxMjIsIDB4OEJGNTM2MjAsIDB4MTZFNEQyMzgsCisweEU2MTQ2NEYzLCAweDY1RTM0MjBCLCAweEU0RkM2NUUxLCAweDJFNTEyNTQ5LAorMHg2NUYzNjFGMSwgMHgyRjExMjE0OSwgMHhEMTMxNTREMSwgMHhFNjE0NDEwQiwKKzB4NjA3MTU3RDEsIDB4MjcwMUNCMDEsIDB4N0YxNDFERTEsIDB4NkVGNjRGMjYsCisweDZERjYwMDBCLCAweDJGRTYyRkQ2LCAweDdGRUM0RjIyLCAweDY2NTM2RTUzLAorMHg2RDQzRTVGQywgMHgyMDU5NjA2MSwgMHgyNjAxQ0IwMSwgMHgzMjYwNTJFMiwKKzB4MTJFNDhCMDYsIDB4MzFFMDUxRTIsIDB4NTJEMThCMDQsIDB4MUUyMkEwMDIsCisweDU2NjRBRkYwLCAweDY0RjNEMjFFLCAweDQyMEJFNjE0LCAweDY3RTE2NUUzLAorMHgyNzE5RTFGQywgMHg2N0YxMkU3MSwgMHgyNzE5NTREMSwgMHg2NUYzRDExOCwKKzB4NDEwQkU2MTQsIDB4NTJEMTJGNzEsIDB4Q0IwMTYwMjEsIDB4MURFMTIyMDEsCisweDRGMjY3RjE0LCAweDAwMEI2RUY2LCAweDAwMDA2REY2LCAweDAwMjAzOUFDLAorMHgwMDIwMzU3QywgMHgwMDIwMzU4NCwgMHgwMDIwMzU4QywgMHgwMDIwMzVCNCwKKzB4MDAyMDM5OTgsIDB4MDAyMDM5QTAsIDB4MDAxMDAyMDgsIDB4MDAxMDE0QzAsCisweDAwMUUyMTBDLCAweDAwMUMzRDAwLCAweDAwMjAzOUVDLCAweDAwMTAwMEM4LAorMHgwMDExNzg4MCwgMHgwMDExNzc4MCwgMHgwMDA0MDAyMCwgMHgwMDI2QzQwMSwKKzB4MDAyMDBENDIsIDB4NEYyMjJGRTYsIDB4REU0MjYyNEMsIDB4NDIwMDQyMDgsCisweDNFMkNBMDA1LCAweEQ0NDA1MjUyLCAweEJGNjk1NjI0LCAweDY1RTIyRTYyLAorMHgzNTIwNTJFMSwgMHhENjNEOEJGNiwgMHg0RjI2MjYyMiwgMHg2RUY2MDAwQiwKKzB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsIDB4REMzOTRGMjIsIDB4NTJDMURCMzksCisweDM2MjA2NkMyLCAweDYwNjE4OTFDLCAweDg4MDFDOTAzLCAweERFMzQ4OTE4LAorMHhCRjM4REQzNSwgMHg2NTAzNjRFMywgMHg2NkIyODUwMywgMHgzMjYyNjIwRCwKKzB4RDQzMjg5MDcsIDB4MDAwOUJGNzYsIDB4NEQwQkQ0MzEsIDB4QUZFNjAwMDksCisweEJGM0QwMDA5LCAweEQ0MkY2NEUzLCAweDAwMDk0RDBCLCAweDAwMDlBRkRGLAorMHgyMjYyRDIyRCwgMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwgMHg2QkY2MDAwQiwKKzB4MkZENjJGQzYsIDB4NEYyMjJGRTYsIDB4REQyOURDMjgsIDB4NkU0MzYwQzIsCisweDA0REU0MDA4LCAweEU2MTREMTI3LCAweDY1RTM0MTBCLCAweEQxMjdENzI2LAorMHg1NUUyMjdFMiwgMHgzNUUwNTI1NCwgMHgyMTIyOEYwNCwgMHg0MDA4NjBDMiwKKzB4MTIyMjAyREUsIDB4NjA1MzY1QzIsIDB4NzUwMTQwMDgsIDB4MERFNjA2REUsCisweEM5MEY2MDUzLCAweDYwNjMyQzAyLCAweDZFRjY0RjI2LCAweDAwMEI2REY2LAorMHg4NTQzNkNGNiwgMHg2NTBENTY0MywgMHg2MjJENjI2MiwgMHgzNTI3NzIwNCwKKzB4RTEwMDhGMEMsIDB4MjI2ODk2MEMsIDB4RDYxNThCMDMsIDB4NzIwMTUyNjEsCisweEQ2MTMxNjIxLCAweDYyNjJFMTAxLCAweDI2MjI3MjAxLCAweDYwMTMwMDBCLAorMHgwMDAwMDFGRiwgMHgwMDIwMzU4QywgMHgwMDIwMzU4NCwgMHgwMDFDM0QwMCwKKzB4MDAyMDM1QjQsIDB4MDAyMDM5N0MsIDB4MDAyMDE4QzAsIDB4MDAyMDM1N0MsCisweDAwMjAzQjE4LCAweDAwMjAzQjFDLCAweDAwMUMzRDI4LCAweDAwMjAzOUVDLAorMHgwMDIwMzlBQywgMHgwMDIwMEQ0MiwgMHgwMDIwMzlGMCwgMHgwMDIwMzlGNCwKKzB4MDAxMTc3NTQsIDB4MkZBNjJGOTYsIDB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsCisweDdGRjg0RjIyLCAweDZDMjJEMjQxLCAweEM4MDM2MEMzLCAweERFNDA4OTZFLAorMHhEQTQxREI0MCwgMHg1MkIxRDk0MSwgMHgzNjIwNjZCMiwgMHg2MDYxODk0NSwKKzB4ODgwMUM5MDMsIDB4REQzQjg5NDEsIDB4NDIwQkQyM0QsIDB4NjUwMzY0RDMsCisweDYwQTEyRjAyLCAweDg5MzI4ODAxLCAweDg1MTQ1MTUzLCAweDg4NDA2MDBDLAorMHgxRjExOEYwQywgMHhENTM3NjE5MSwgMHg2NDFENDUwQiwgMHg4QjI2MjAwOCwKKzB4RDczNTY2OTEsIDB4NjQ2RDQ3MEIsIDB4OEIyMDIwMDgsIDB4NDIwQkQyMzMsCisweDUxRjE1NEYxLCAweEM4MjA4NTExLCAweEQxMzE4OTA0LCAweDAyMUVFMDUwLAorMHgwMTI2NzIwMSwgMHg0MjBCRDIyRiwgMHgyMDA4NjRGMiwgMHg2NEQzODkwNywKKzB4NEQwQkREMkQsIDB4RDEyRDY1RjIsIDB4QUZDNEU2MDEsIDB4RDIyQzIxNjIsCisweDQyMEI2NUYyLCAweEQ3MkI2NEUzLCAweEFGQkNFNjAxLCAweEQyMjYyNzYyLAorMHg0MjBCNjVGMiwgMHhBRkI2NjREMywgMHhERTI3MDAwOSwgMHhEQTI4REQyNywKKzB4NTJEMURCMjgsIDB4MzYyMDY2RDIsIDB4NjA2MTg5MTgsIDB4ODgwMUM5MDMsCisweEQ0MjI4OTE0LCAweDQ1MEJENTE2LCAweDU2MDMwMDA5LCAweDhGMDQzNkUwLAorMHhFMjAxNjUwMywgMHhBRkVDMkEyMCwgMHhENDFGMkI1MiwgMHg0MjBCRDIxNiwKKzB4RDcxODAwMDksIDB4NDExOEUxMDEsIDB4MjcxMkFGRTMsIDB4QzgwNDYwQzMsCisweEQyMUE4OTAyLCAweDAwMDk0MjBCLCAweDRGMjY3RjA4LCAweDZERjY2RUY2LAorMHg2QkY2NkNGNiwgMHgwMDBCNkFGNiwgMHgwMDAwNjlGNiwgMHgwMDFFMjEwMCwKKzB4MDAyMDM1OEMsIDB4MDAyMDM1ODQsIDB4MDAyMDNBMTQsIDB4MDAxMTQyRDgsCisweDAwMjAxNEE2LCAweDAwMTE1RUEyLCAweDAwMTE0Nzc0LCAweDAwMjAwRDhBLAorMHgwMDIwMzUxQywgMHgwMDIwMTZDMiwgMHgwMDIwMTREMCwgMHgwMDFFMjEyQywKKzB4MDAyMDE1MzQsIDB4MDAxQzNEMzAsIDB4MDAxMTc4ODAsIDB4MDAyMDM1N0MsCisweDAwMjAzOTlDLCAweDAwMjAzOTk4LCAweDAwMjAzNUI0LCAweDAwMjAwNjQ0LAorMHhFNjAxRDIwMywgMHgxMjY1RDUwMywgMHgwMDBCMjI1MiwgMHgwMDAwMTI2NiwKKzB4MDAxQzEwMTAsIDB4MDAwMEMzNEYsIDB4MDAwOTAwMEIsIDB4MDAwOTAwMEIsCisweDAwMDkwMDBCLCAweDAwMDkwMDBCLCAweEUwMDAwMDBCLCAweEUwMDAwMDBCLAorMHgwMDA5MDAwQiwgMHhFNEZERDU5RCwgMHhENjlENjE1MiwgMHgyNTEyMjE0OSwKKzB4NzQwMTYwNTIsIDB4MjUwMkNCMDEsIDB4RDE5QTY3NTIsIDB4MjU3MjI3NDksCisweEM4NDA2MDEwLCAweDYwNjI4OTAyLCAweDI2MDJDQjA0LCAweEUxRjc2NDYyLAorMHgyNjQyMjQxOSwgMHhFNzAxNjA2MiwgMHgyNjAyQzlDRiwgMHhFNTAyNjA2MiwKKzB4MjYwMkNCMTAsIDB4NDcxODYwNjIsIDB4MjYwMkNCMDMsIDB4MDAwQjE2NTIsCisweEQ1OEQxNjczLCAweEQyOEVENzhELCAweEUxMDBENDhFLCAweDI1MTFFNjAwLAorMHgyMjEwMjcxMSwgMHgyNDYxQUZDRSwgMHhEMjhCNjY0QywgMHgzNjJDNDYwMCwKKzB4Q0IxMDYwNjAsIDB4MjYwMDAwMEIsIDB4RDI4NzY1NEMsIDB4MzUyQzQ1MDAsCisweEUxRUY2NjUwLCAweDAwMEIyNjE5LCAweDY2NEMyNTYwLCAweDQ2MDBEMjgzLAorMHg2MDYwMzYyQywgMHgwMDBCQ0IxMCwgMHg2NTRDMjYwMCwgMHg0NTAwRDI3RiwKKzB4NjY1MDM1MkMsIDB4MjYxOUUxRUYsIDB4MjU2MDAwMEIsIDB4RDI3QTY2NEMsCisweDM2MkM0NjAwLCAweENCMDg2MDYwLCAweDI2MDAwMDBCLCAweEQyNzY2NTRDLAorMHgzNTJDNDUwMCwgMHhFMUY3NjY1MCwgMHgwMDBCMjYxOSwgMHg2NjRDMjU2MCwKKzB4NDYwMEQyNzIsIDB4NjA2MDM2MkMsIDB4MDAwQkNCMDgsIDB4NjU0QzI2MDAsCisweDQ1MDBEMjZFLCAweDY2NTAzNTJDLCAweDI2MTlFMUY3LCAweDI1NjAwMDBCLAorMHhENjY5NjI0QywgMHgzMjZDNDIwMCwgMHhDOTA4NjAyMCwgMHg0MDIxNDAyMSwKKzB4MDAwQjQwMjEsIDB4NjI0QzYwMEMsIDB4NDIwMEQ2NjQsIDB4NjAyMDMyNkMsCisweDQwMjFDOTA4LCAweDQwMjE0MDIxLCAweDYwMEMwMDBCLCAweDY0NENEMTYwLAorMHg2MjQwMzQxQywgMHg2MDJDMDAwQiwgMHg2NDRDRDE1RSwgMHg2MjQwMzQxQywKKzB4NjAyQzAwMEIsIDB4NEYyMjJGRTYsIDB4NjQ1QzZFNDMsIDB4MzQ2N0U2MEEsCisweEJGRUI4OTE0LCAweDY0MEMwMDA5LCAweDg4MDE2MEVDLCAweEUwMEY4QjAyLAorMHgyNDA5QTAwMiwgMHg0NDA5NDQwOSwgMHhFNjBBNjI0QywgMHg4OTA1MzI2MywKKzB4NjQ0Q0JGRTIsIDB4NjAyMzYyMEMsIDB4OEIwMEM4ODAsIDB4NjAyM0UyMDAsCisweDAwMEI0RjI2LCAweDRGMjI2RUY2LCAweDYwNjJENjRCLCAweDhCMDM4ODAxLAorMHgwMDA5QjI1NiwgMHgwMDA5QTAwMywgMHhFNjQwRDI0OCwgMHhENjQ4MjI2MCwKKzB4NEYyNkUyMDAsIDB4MjYyMjAwMEIsIDB4RDY0MzRGMjIsIDB4ODgwMjYwNjIsCisweEIyOUY4QjAxLCAweEQ2NDIwMDA5LCAweDRGMjZFMjAwLCAweDI2MjIwMDBCLAorMHhENDNFRDUzRCwgMHhFNzAxRTEwMCwgMHgwMDBCMjUxMiwgMHhEMjNCMjQ3MCwKKzB4MDAwQkU2MDQsIDB4NEYyMjIyNjAsIDB4RDEzQkQ0M0EsIDB4MDAwOTQxMEIsCisweEUxRkRENTNBLCAweEQyM0E2NjUwLCAweEU3MDAyNjE5LCAweDRGMjYyNTYwLAorMHgyMjcwMDAwQiwgMHhENTM3NEYyMiwgMHg2MTUyRDIzNywgMHg2MTFERDczNywKKzB4NjQ1MjI1MTIsIDB4MjQyQkU2RkYsIDB4RDQzNTI1NDIsIDB4NjY2REQyMkUsCisweDI3NjI0MjBCLCAweEUxRkJENTJELCAweDI3MTk2NzUwLCAweDAwMEI0RjI2LAorMHg0RjIyMjU3MCwgMHhEMTI4RDQyRiwgMHgwMDA5NDEwQiwgMHhFN0Y3RDUyNywKKzB4MjY3OTY2NTAsIDB4MDAwQjRGMjYsIDB4RDUyNDI1NjAsIDB4NjI1MDk0MjUsCisweDAwMEIyMjQ5LCAweEQ1MjEyNTIwLCAweDYyNTBFNEJGLCAweDAwMEIyMjQ5LAorMHg0RjIyMjUyMCwgMHg4NTIyRDIyNCwgMHgyMDA4NjAwRCwgMHg4ODAxODkxMSwKKzB4ODgwMzg5NDQsIDB4ODgwNTg5NDYsIDB4ODgwNjg5NDgsIDB4ODgwODg5NEUsCisweDg4MDk4OTU0LCAweDg4MEE4OTVBLCAweDg4MEI4OTYwLCAweEEwNkQ4OTY2LAorMHhCMDZGMDAwOSwgMHhBMDZBMDAwOSwgMHhGRjdGNjAwQywgMHgwMDFFMjE0OCwKKzB4MDAxRTExMDgsIDB4MDAxRTEwMDAsIDB4MDAyMDNBNEMsIDB4MDAyMDNBNEUsCisweDAwMjAzQTZELCAweDAwMjAzQTMwLCAweDAwMUUxMDNGLCAweDAwMUUxMDVGLAorMHgwMDFFMTAyRiwgMHgwMDFFMTA5MCwgMHgwMDIwM0E1NCwgMHgwMDFFMTAwQiwKKzB4MDAyMDNBNTAsIDB4MDAyMDNCMjAsIDB4MDAyMDE4QzAsIDB4MDAxRTEwMjgsCisweDAwMjAzQTZDLCAweDAwMUQ0MDIwLCAweDk4NzYwMDAwLCAweDAwMUMxMDAwLAorMHgwMDIwM0IyQywgMHgwMDIwM0IzQywgMHgwMDIwM0EyNCwgMHgwMDA5QjA0QywKKzB4NjAwQ0EwMzUsIDB4MDAwOUIwNTUsIDB4NjAwQ0EwMzEsIDB4NjI2MEQ2ODQsCisweDhCMkIyMjI4LCAweDAwMDlCMDYxLCAweDYwMENBMDI5LCAweDYyNjBENjgwLAorMHg4QjIzMjIyOCwgMHgwMDA5QjA2OSwgMHg2MDBDQTAyMSwgMHg2MjYwRDY3QywKKzB4OEIxQjIyMjgsIDB4MDAwOUIwQzcsIDB4NjAwQ0EwMTksIDB4NjI2MEQ2NzgsCisweDhCMTMyMjI4LCAweDAwMDlCMENELCAweDYwMENBMDExLCAweDYyNjBENjc0LAorMHg4QjBCMjIyOCwgMHgwMDA5QjEyNSwgMHg2MDBDQTAwOSwgMHg2MjYwRDY3MCwKKzB4OEIwMzIyMjgsIDB4MDAwOUIxM0QsIDB4NjAwQ0EwMDEsIDB4NEYyNkUwMDAsCisweDAwMDkwMDBCLCAweEQyNkNEMTZCLCAweEQ1NkM4NDEyLCAweDQwMDBDOTBGLAorMHhENzZCMDEyRCwgMHhFNDAzRDY2QiwgMHhFMjBGNjExQywgMHgyNTQwRTAwMSwKKzB4MjUyMDI3MTIsIDB4MjYwMjAwMEIsIDB4RTYwMUQyNjIsIDB4MzA2Njg1MjMsCisweEUwMDA4RDA1LCAweEQ2NjNEMjYwLCAweEUwMDE4MTIyLCAweDAwMEIyNjAyLAorMHhEMjVDMDAwOSwgMHg2MDBEODUyMywgMHg4OTA1MjAwOCwgMHg4QjBBODgwMSwKKzB4NjA2MEQ2NUQsIDB4MjYwMENCMDEsIDB4RDQ1N0Q2NUEsIDB4RTAwMUUxMDEsCisweDAwMEIyNjEyLCAweDAwMEI4MTQyLCAweEQxNTJFMDAwLCAweDg1MTNFNTAxLAorMHg2NDBENDUxOCwgMHg2NjAzMzQ1MywgMHhFMDAwOEQwNSwgMHhENTUxRDI1MywKKzB4MjI2MEUwMDEsIDB4MDAwQjI1MDIsIDB4NEYyMjAwMDksIDB4ODUxM0QxNDksCisweDY0NTM2NTBELCAweDYyNDk0NDE5LCAweDIyN0Q2NzJFLCAweDg4MDE2MDJDLAorMHg4ODAyODkwOSwgMHg4ODAzODkxMCwgMHg4ODA2ODkxQSwgMHg4ODA3ODkzNSwKKzB4QTA0Qzg5M0IsIDB4RDU0NjAwMDksIDB4NjY1MkQ3NDYsIDB4Mjc2MkQ0NDYsCisweDYyMkM2MjYxLCAweDI0MjFBMDM4LCAweDIyMjg2MjVDLCAweEQ0NDM4QjNGLAorMHg2NjQyRDU0MCwgMHgyNTYyRDQ0MCwgMHgyNDAxODU2MSwgMHg2MjAzQTAyQywKKzB4MjAwODYwNUMsIDB4ODgxMDg5MDcsIDB4ODgyMDg5MDgsIDB4ODgzMDg5MDksCisweEEwMkM4OTBBLCAweEQyM0EwMDA5LCAweDYyMjJBMDA4LCAweEEwMDVEMjM5LAorMHhEMjM5NjIyMiwgMHg2MjIyQTAwMiwgMHg2MjYyRDYzOCwgMHhENDMyRDUzMSwKKzB4NjYyMTI1MjIsIDB4QTAwRjYyNkMsIDB4RDYzNTI0MjEsIDB4NjI2MUQ1MkQsCisweDYyMkNENDJELCAweEEwMDcyNTYyLCAweEQ2MzIyNDIxLCAweDg1NjFENTI5LAorMHgyNTYyRDQyOSwgMHg2MjAzMjQwMSwgMHg2NjJEODUxNSwgMHgzNjE3NjEwRCwKKzB4NjUwMzhGMDEsIDB4QjBDQjI0NTEsIDB4QTAwMTAwMDksIDB4RTAwMEUwMDEsCisweDAwMEI0RjI2LCAweEQ2MTkwMDA5LCAweEQ0MjdFMTAxLCAweDY1NDEyNjEwLAorMHhEMTE4RDcxNywgMHhFMjBGNjU1RCwgMHgyNzUyRTAwMSwgMHgwMDBCMjYyMCwKKzB4MkZFNjIxMDIsIDB4RDIwRjRGMjIsIDB4NjQwQzg1MjMsIDB4OEIwODI0NDgsCisweEQ1MTFENjFELCAweDI2MjFFMjAwLCAweDk0MEY4NDUxLCAweEEwNDgyMDQ5LAorMHhERTBEODA1MSwgMHhDODQwNjBFMCwgMHhFMjAxOEQzMiwgMHg4OTQ0MzQyNywKKzB4RDIxNkQ2MTUsIDB4MjY0MTQyMEIsIDB4MDAwOUEwMzAsIDB4MDAwMEZGN0YsCisweDAwMjAzQTZELCAweDAwMjAzQTI0LCAweDAwMjAzQTMwLCAweDAwMUUxMTAwLAorMHgwMDFFMTAwQywgMHgwMDIwM0E1MCwgMHgwMDFFMTAwMCwgMHgwMDFFMTAwMSwKKzB4MDAyMDNBNTgsIDB4MDAyMDNBMzgsIDB4MDAyMDNBM0MsIDB4MDAyMDNBNDAsCisweDAwMjAzQTVDLCAweDAwMjAzQTYwLCAweDAwMjAzQTY0LCAweDAwMjAzQTY4LAorMHgwMDIwM0UyMCwgMHgwMDIwM0UyQSwgMHgwMDIwM0E0QSwgMHgwMDIwMjdGMiwKKzB4ODkxMjM0MjcsIDB4RDI5NEQ2OTMsIDB4MjY0MTQyMEIsIDB4Q0I4MDg0RTEsCisweDgwRTFCMEY1LCAweEQ2OTE2MEUwLCAweDJFMDBDQjA0LCAweEM5M0Y2MDYwLAorMHhENjhGMjYwMCwgMHhBMDAxRTAwMSwgMHhFMDAwMjYwMiwgMHgwMDBCNEYyNiwKKzB4RDY4QzZFRjYsIDB4Qzg4MDYwNjAsIDB4RDI4Njg5MTksIDB4ODgwMTYwMjEsCisweEQyODk4QjE1LCAweDg1MjRFNTAxLCAweDg5MTAzMDU2LCAweEUyMDNEMTg3LAorMHgyMTIwRDQ4NywgMHhFMDBCNjU0MSwgMHgwNjU2NjU1RCwgMHhFNDBGRDU4NSwKKzB4MjE0MEU3MDIsIDB4RDc3RTI1NzEsIDB4MDAwQkUwMDEsIDB4MDAwQjI3MDIsCisweDJGRTZFMDAwLCAweERFODA0RjIyLCAweEM4ODA4NEUxLCAweEQ1N0E4OTJDLAorMHgyMDA4ODU1NCwgMHg2MTAzOEYyOCwgMHg4NTUzRDc3QywgMHg2NDAzNjY3MiwKKzB4ODU2NjY1MEMsIDB4MzUyMDYyMEMsIDB4RDY3OThCMUUsIDB4NjUxQ0Q3NzQsCisweDI2NTE2NDRDLCAweDYwRTAyNzQxLCAweDg5MDRDODQwLCAweDQyMEJEMjc1LAorMHhBMDAzMDAwOSwgMHhEMjY4MDAwOSwgMHgwMDA5NDIwQiwgMHgwMDA5QjA5RiwKKzB4RTIwMUQxNjcsIDB4NjBFMDIxMjIsIDB4Q0IwNEQ0NjQsIDB4NjA0MDJFMDAsCisweDI0MDBDOTNGLCAweDYwMjNBMDAxLCAweDRGMjZFMDAwLCAweDZFRjYwMDBCLAorMHgyRkI2MkZBNiwgMHgyRkQ2MkZDNiwgMHhEQTYyMkZFNiwgMHg2NkExRTI0MCwKKzB4MzYyMkRDNUUsIDB4NjI2Mzg5MDAsIDB4NkVEMzZEMkMsIDB4NEUyMTM2RDgsCisweDRFMjEyQTYxLCAweERCNjFENDYwLCAweEU3MDBBMDBGLCAweDc3MDE2MkIyLAorMHg3MTAyNjEyMywgMHg2NjIxMkIxMiwgMHg3MTAyNjIxMywgMHg2MTIxMkIxMiwKKzB4NjUxRDY2NkQsIDB4MzU2QzQ1MjgsIDB4NjI3QzI0NTIsIDB4OEJFRDMyRTMsCisweEM5MDM2MEQzLCAweDhCMTA4ODAzLCAweDYxNzM2N0IyLCAweDJCMTI3MTAyLAorMHg3MTAyNkUxMywgMHgyQjEyNjU3MSwgMHg2NTVENkRFMSwgMHg0MjI4NjJERCwKKzB4MzI1Q0UxMDcsIDB4QTAwQzJDMTAsIDB4ODgwMjI0MjIsIDB4QTAwMzhCMDEsCisweDg4MDFFMjAzLCAweEUyMDE4QjA1LCAweDY2QjIyQzIwLCAweDY1NUQ2NTYxLAorMHhFNjBGMjQ1MiwgMHg2N0ExMkM2MCwgMHg4QjA1Mjc3OCwgMHhERDM4REM0NCwKKzB4RUIwMUVBMDAsIDB4MkRCMjJDQTIsIDB4NkRGNjZFRjYsIDB4NkJGNjZDRjYsCisweDZBRjYwMDBCLCAweDJGRTYyRkQ2LCAweEUyNDBERDM2LCAweDM2MjI2NkQxLAorMHg2MjYzODkwMCwgMHgzNjc4NjcyQywgMHg3NzAzREUzOCwgMHg0NzIxMkQ2MSwKKzB4NjRFMkQ2MzUsIDB4QTAwRTQ3MjEsIDB4NjU2MkUxMDAsIDB4NjI1MzcxMDEsCisweDc0MDEyNDUwLCAweDI0MjA0MjE5LCAweDQ1Mjk3NDAxLCAweDc0MDEyNDUwLAorMHgyNDUwNDUxOSwgMHg2MjFDNzQwMSwgMHg4QkVFMzI3MywgMHg2NkUyNDIwMCwKKzB4NDIwMDYxRDEsIDB4MjExODM2MkMsIDB4MkU2MjhGMDYsIDB4REQxQ0Q3MjgsCisweEU1MDFFNDAwLCAweDJENTIyNzQyLCAweDAwMEI2RUY2LCAweDJGRDY2REY2LAorMHg0RjIyMkZFNiwgMHhFRDBBRUUwMSwgMHg2NEUzQkM4NiwgMHhCQzhCNjRFMywKKzB4NjJFQzdFMDEsIDB4OEJGNzMyRDcsIDB4QkM4RUVFMDEsIDB4NjRFMzY0RTMsCisweDdFMDFCQzkzLCAweDMyRDc2MkVDLCAweDRGMjY4QkY3LCAweDAwMEI2RUY2LAorMHhEMTE4NkRGNiwgMHhENDE4OTIwRCwgMHg3MjEyMjEyMiwgMHgyNDIyRDYxNywKKzB4RDcxNzcyMDQsIDB4NzIyMDI2MjIsIDB4MjcyMkQxMTYsIDB4MDAwQjcyMzAsCisweDEzN0EyMTIyLCAweDAwMjAzQTRBLCAweDAwMjAyOEZFLCAweDAwMUUxMDE1LAorMHgwMDIwM0E1MCwgMHgwMDFFMTAwMSwgMHgwMDIwM0EyNCwgMHgwMDFFMTEwMCwKKzB4MDAyMDNBNEUsIDB4MDAyMDNBM0MsIDB4MDAxRTEwMDAsIDB4MDAyMDNBNDAsCisweDAwMjAzQTRDLCAweDAwMjAyN0YyLCAweDAwMUUxMDBDLCAweDAwMjAzQTM4LAorMHgwMDIwM0E1NCwgMHgwMDIwM0E1OCwgMHgwMDIwM0E1QywgMHgwMDIwM0E2MCwKKzB4MDAyMDNBNjQsIDB4MDAyMDNBNjgsIDB4NEYyMjJGRTYsIDB4RDY3MDdGRkMsCisweDg4MDE2MDYwLCAweEUyMDE4OTUxLCAweDI2MjBCRkJCLCAweEQ1NkVEMTZELAorMHhERTZFNjAxMCwgMHg2NEUzNjU1MiwgMHg3NDAyQzg0MCwgMHg4RDIyRDE2QywKKzB4RDI2Qzc1MDIsIDB4RTYwMUQ3NkMsIDB4RTcwNDI3MjIsIDB4NzYwMTYyNTUsCisweDYyNkMyNDIxLCAweDhGRjkzMjczLCAweEQ0NjM3NDAyLCAweDYyNDJFNjAxLAorMHg2NDBEODUyOCwgMHg2NzQ5NDQxOSwgMHgyNzVENjU3RSwgMHg4MUU0NjA3QywKKzB4RTQxN0Q1NjIsIDB4Njc1NTc2MDEsIDB4MzI0MzYyNkMsIDB4OEZGOTIxNzEsCisweEEwMjA3MTAyLCAweEQyNUUwMDA5LCAweEU2MDFENzVCLCAweEU3MDQyNzIyLAorMHg3NjAxNjI1NSwgMHg2MjZDMjQyMSwgMHg4RkY5MzI3MywgMHhENDUyNzQwMiwKKzB4NjI0MkU2MDEsIDB4NjQwRDg1MjgsIDB4Njc0OTQ0MTksIDB4Mjc1RDY1N0UsCisweDgxRTQ2MDdDLCAweEU0MTdENTUzLCAweDY3NTU3NjAxLCAweDMyNDM2MjZDLAorMHg4RkY5MjE3MSwgMHg5Mjg5NzEwMiwgMHhEMjQ2MkUyMSwgMHg1RTIzRDc0RSwKKzB4NjRGMjJGRTIsIDB4NjA0MzY1RjIsIDB4MjcwMEM5ODAsIDB4Qzk2MDYwNDMsCisweDgwNzE2MTAzLCAweEM5MDM2MDQzLCAweDgwNzI0NTE5LCAweDY1RjI2MDVDLAorMHg4MTcyNjZGMiwgMHg0NjE5NDYyOSwgMHg2MDZDNDUyOSwgMHg0MDE4NjQ1QywKKzB4ODE3MzMwNEMsIDB4MjExODVFMjMsIDB4NjRGMjJGRTIsIDB4NkU0QzYyRjIsCisweDYwMkM0MjE5LCAweDY2RjI2MkYyLCAweDQ2Mjk0MDE4LCAweDQ2MTkzMEVDLAorMHg0MjI5ODE3NCwgMHg2NTJDNjA2QywgMHgzMDVDNDAxOCwgMHg4MTc1OEYwNywKKzB4MDAwOUJDOTcsIDB4MjIyODYyMEMsIDB4QTAwQTg5MDgsIDB4NjAxMzAwMDksCisweDhCMDM4ODQwLCAweDAwMDlCMDA5LCAweDAwMDlBMDAzLCAweEUyMDJENjJGLAorMHg3RjA0MjYyMiwgMHgwMDBCNEYyNiwgMHg0RjIyNkVGNiwgMHg4NTUyRDUyQSwKKzB4ODgzMDYwMEQsIDB4ODgzMTg5MDMsIDB4QTAzNDg5MjMsIDB4ODU1NTAwMDksCisweEQ0MjhENzI3LCAweDg1NTMyNzAxLCAweDYxMERENjI3LCAweDI0MTI0MTE4LAorMHg0NjBCRDQyNiwgMHhENzIzMDAwOSwgMHhEMjI2RDQyNSwgMHg2NTcyNDIwQiwKKzB4RTIzMEQxMjAsIDB4NDIyODY3MTIsIDB4MjcyOUU2MjAsIDB4Mzc2MDQ2MjgsCisweEQ2MjE4QjAzLCAweEEwMTZFMjAwLCAweEQ2MUYyNjIyLCAweEEwMTJFMjAyLAorMHhEMTE4MjYyMiwgMHg2MjEyRTUzMCwgMHhFNjIwNDUyOCwgMHg0NjI4MjI1OSwKKzB4ODkwODMyNjAsIDB4RDQxQUQxMTksIDB4RTYwMUQ1MTMsIDB4MjE2MDQ1MEIsCisweDQ3MkJENzE4LCAweDRGMjY0RjI2LCAweDAwMDkwMDBCLCAweDAwMDAwNjBBLAorMHgwMDIwM0E2QywgMHgwMDFFMTAwMCwgMHgwMDIwM0E1OCwgMHgwMDIwM0UyMCwKKzB4MDAyMDNFMkMsIDB4MDAyMDNEQzQsIDB4MDAyMDNBNDAsIDB4MDAyMDNERjQsCisweDAwMjAzREYyLCAweDAwMjAzREM2LCAweDAwMjAzQTI0LCAweDAwMjAzQTUwLAorMHgwMDIwM0EzQywgMHgwMDIwM0EzOCwgMHgwMDIwMThDMCwgMHgwMDIwM0I0OCwKKzB4MDAyMDNCNEMsIDB4MDAyMDE4RDAsIDB4MDAyMDNBNTQsIDB4MDAxRTEwMEIsCisweDAwMjAzQjYwLCAweDAwMTE0MDA0LCAweDRGMjIyRkU2LCAweDg0RTlERTg2LAorMHgyNDQ4NjQwQywgMHhCMTdCODkwMSwgMHhEMjg0MDAwOSwgMHgyNjY4NjYyMCwKKzB4NjBFMDg5MDIsIDB4MkUwMEM5QkYsIDB4MDAwQjRGMjYsIDB4MDAwQjZFRjYsCisweDJGRTYwMDA5LCAweERFN0U0RjIyLCAweDYwRTBENjdFLCAweENCQzBENDdFLAorMHg2MjYwMkUwMCwgMHhDODAzNjAyQywgMHg0MDIxODkwNCwgMHg3MDAxNDAyMSwKKzB4NjYwM0EwMDIsIDB4NjYwMzQwMDksIDB4RDY3ODYxNkQsIDB4RTUwMEEwMDQsCisweDc1MDE2MjYyLCAweDc0MDQyNDIyLCAweDMyMTM2MjVELCAweEQyNzQ4QkY4LAorMHgwMDA5NDIwQiwgMHhDOUJGODRFMiwgMHg0RjI2ODBFMiwgMHg2RUY2MDAwQiwKKzB4MkZFNjJGRDYsIDB4N0ZGQzRGMjIsIDB4NjI2MEQ2NkUsIDB4ODk0MDIyMjgsCisweEQ1NjVFMTAwLCAweDYwNTAyNjEwLCAweENCNDBENDZCLCAweDI1MDA0NDBCLAorMHg4RDA1MjAwOCwgMHg2MkUwNkUwMywgMHg3MTA0NjEyQywgMHgyRjExQTAwNiwKKzB4RDQ2NkQ2NUUsIDB4REQ2NjY3NjAsIDB4NjU3QzREMEIsIDB4RTIzQzZEMUQsCisweDhCMDMzRDI3LCAweEQyNjRENDYzLCAweDAwMDk0MjBCLCAweDREMjE0RDIxLAorMHhBMDA1RDc2MiwgMHg2NkU2RTQwMCwgMHgzNTdDNDUwOCwgMHg3NDAxMjU2MiwKKzB4MzVEMzY1NEQsIDB4RDc1RThCRjcsIDB4NkU3MkUwMDMsIDB4ODFFMTQwMTgsCisweDZFNzI2MEYxLCAweDgxRTI3MDBDLCAweEQ0NUE2MTcyLCAweERENUE4MTEzLAorMHg2NTcyNEQwQiwgMHhENjRBRDI1OSwgMHgyMjEyRTEwMSwgMHhDOTNGNjA2MCwKKzB4N0YwNDI2MDAsIDB4NkVGNjRGMjYsIDB4NkRGNjAwMEIsIDB4MkZDNjJGQjYsCisweDJGRTYyRkQ2LCAweEQyNTI0RjIyLCAweDZCNDM2RTczLCAweDQyMEI2QzUzLAorMHgyMDA4NkQ2MywgMHg2NDAzOEQxQywgMHhFNTBFRDEzQywgMHgzMjUyNjIxMCwKKzB4NjBDMzg5MTYsIDB4ODA0MTI0QjAsIDB4ODE0MTYwRDMsIDB4QTAwN0U1MDAsCisweDY1NUQ2MUJDLCAweDAwRUM2MDUzLCAweDM2NEM2NjUzLCAweDgwNjQ3NTAxLAorMHgzMjEzNjI1RCwgMHhENjMwOEJGNSwgMHhDOUJGNjA2MCwgMHgyNjAwQTAwOCwKKzB4RDIzOUQ0NDAsIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkJGNjQyMkIsCisweDZFRjY0RjI2LCAweDZDRjY2REY2LCAweDZCRjYwMDBCLCAweDJGOTYyRjg2LAorMHgyRkI2MkZBNiwgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwgMHhFMTAwN0ZDNCwKKzB4NjUxM0VDRkYsIDB4NkIxMzZDQ0QsIDB4REUzNEQ3MzMsIDB4RURGRjY0RjMsCisweEQ4MzNFQTA0LCAweDYwNTM2NTVDLCAweDAyN0Q0MDAwLCAweDMyQzA2MjJELAorMHg2NjAzOEQwRCwgMHgwOUVENjA2MywgMHgyNDkxMDI3RCwgMHgyNDIxNzQwMiwKKzB4Njk4MjAyRUQsIDB4MzkyODYyMkQsIDB4NzQwMjI4OTIsIDB4NzUwMTcxMDQsCisweDYwNjM2MjVDLCAweDA3RDUzMkEyLCAweDBFQjU4RkU0LCAweDI0NDg2NDFDLAorMHhFNjgwODkwNSwgMHg2N0YzRTVDNSwgMHhCRjhGNjY2QywgMHg3RjNDNjU1QywKKzB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkFGNjZCRjYsIDB4MDAwQjY5RjYsCisweEQxMUM2OEY2LCAweDYwMTJEMjFDLCAweENCMjBFNDA1LCAweDIxMDJFNTAwLAorMHgwMDBCMjI0MiwgMHgwMDAwMjI1MiwgMHgwMDFFMTAxNywgMHgwMDIwMzk5NiwKKzB4MDAxRTEwMTUsIDB4MDAxRTEwQkYsIDB4MDAxMTc4MDAsIDB4MDAxRTEwRkMsCisweDAwMjAwNjQ0LCAweDAwMjAzOTlDLCAweDAwMjAyQTU2LCAweDAwMjAzQjY0LAorMHgwMDIwMThEMCwgMHgwMDIwM0I4MCwgMHgwMDIwMThDMCwgMHgwMDExNzg4QywKKzB4MDAyMDM5OTgsIDB4MDAyMDM1N0MsIDB4MDAyMDE1MzQsIDB4MDAxRTIxMzAsCisweDAwMjAyQTE4LCAweDAwMjAzQjg4LCAweDAwMjAzOUZDLCAweDAwMjAzQTA0LAorMHgwMDIwM0RDMCwgMHgwMDFDMzUwMCwgMHgwMDFENDAwNCwgMHhENTY0RDE2MywKKzB4RTQwMEQ3NjQsIDB4MjE0MkUyMEYsIDB4MTc0MTExNTQsIDB4RDU2MjI3MjIsCisweDk2NjlENzYyLCAweDE1NDEyNTcyLCAweDk2NjYxNTYyLCAweEU2MDExNTY1LAorMHhENTVGMTE2NSwgMHg2NjZDRTZGOCwgMHgyNTQyMjU0MiwgMHgyNTQyMjU0MiwKKzB4MjU0MjI1NDIsIDB4MjU2MjI1NDIsIDB4NzYwMUU3MjcsIDB4Njc2MzI1NzIsCisweDI1NjI3Nzk3LCAweEU3MDQyNTcyLCAweDI1NzJFMjQ4LCAweEUyMTkyNTIyLAorMHhFMjcwMjUyMiwgMHgyNTQyMjU0MiwgMHgyNTQyMjU0MiwgMHgyNTIyMjU0MiwKKzB4MjUyMkUyMEMsIDB4MjU0MjI1NDIsIDB4MjU0MjI1NDIsIDB4MjU0MjI1NDIsCisweDI1NDIyNTQyLCAweDAwMEIxNTRBLCAweEUyMDgxMTQ1LCAweDAwMDk0MjJCLAorMHgyRkU2MkZENiwgMHg3RkZDNEYyMiwgMHhDODIwNjA0MywgMHg2RTQzOEQwMiwKKzB4MDAwOUJFODUsIDB4QzgxMDYwRTMsIDB4QkU4Mjg5MDEsIDB4NjBFMzAwMDksCisweDg5MDFDODQwLCAweDAwMDlCRUE0LCAweEM4MDE2MEUzLCAweEREM0Q4OTM4LAorMHhDODAyNjBEMCwgMHgyRjAwOEQwMywgMHg0NjBCRDYzQiwgMHg2MEYwMDAwOSwKKzB4ODkwMkM4MDQsIDB4NDYwQkQ2MzksIDB4NjJGMDAwMDksIDB4Qzg4MDYwMjMsCisweDYwRDA4OTAyLCAweDJEMDBDOTdGLCAweEM4MDE2MDIzLCAweEQ2MzQ4OTA2LAorMHgwMDA5NDYwQiwgMHgwMDA5QTAwNywgMHg1MTYzMDYwMSwgMHg4OTAyQzgwOCwKKzB4NDYwQkQ2MzAsIDB4NjBGMDAwMDksIDB4ODkwMkM4MTAsIDB4NDIwQkQyMkUsCisweEQ1MkUwMDA5LCAweDg4MDI2MDUyLCAweEQyMkQ4QjAzLCAweEEwMDVFNjA0LAorMHg4ODAxMjI2MCwgMHhEMjJBOEIwMiwgMHgyMjYwRTYwMSwgMHgyNTIyRTIwMCwKKzB4Qzg4MDYwRTMsIDB4RDIyNzg5MkQsIDB4NjBFMzZFMjAsIDB4ODkwMkM4ODAsCisweDQyMEJEMjI1LCAweDYwRTMwMDA5LCAweDg5MDJDODQwLCAweDQyMEJEMjIzLAorMHg2MEUzMDAwOSwgMHg4OTAyQzgwMiwgMHg0MjBCRDIyMSwgMHg2MEUzMDAwOSwKKzB4ODkwREM4MDQsIDB4REQyMEQxMUYsIDB4MDAwOTQxMEIsIDB4MDAwOUJGMTEsCisweDAwMDlCRjRDLCAweEQ1MUVENDFELCAweDI0NzBFNzA4LCAweDI1RDJCRjg1LAorMHhDODA4NjBFMywgMHhEMjFCODkwNSwgMHg0RjI2N0YwNCwgMHg0MjJCNkVGNiwKKzB4N0YwNDZERjYsIDB4NkVGNjRGMjYsIDB4NkRGNjAwMEIsIDB4MDAxQzU4MUMsCisweEEwMDBBMDAwLCAweDAwMUQwMTAwLCAweDAwMUQ0MDAwLCAweDAwMDQwMDIxLAorMHgwMDFDNTg5QywgMHgwMDFFMTAyMSwgMHgwMDIwMUE0NiwgMHgwMDIwMUE2OCwKKzB4MDAyMDIwQzgsIDB4MDAyMDFBODAsIDB4MDAyMDFBOEUsIDB4MDAyMDNBNTAsCisweDAwMUUxMDBCLCAweDAwMUUxMDI4LCAweDAwMjAxQUZBLCAweDAwMjAxQjA2LAorMHgwMDIwMUE5NiwgMHgwMDIwMUFCNCwgMHgxMjM0NTY3OCwgMHgwMDFFMTAwMCwKKzB4MDAxMEYxMDAsIDB4MDAyMDFBRTIsIDB4NjQ0Q0Q2QTcsIDB4MDAwQjM0NkMsCisweEQ2QTYyNDUwLCAweDM0NkM2NDRDLCAweDI0NTAwMDBCLCAweDY0NENENkE0LAorMHgwMDBCMzQ2QywgMHg2MjVDMjQ1MCwgMHg0MjA4NjE2RCwgMHg0MjA4NDExOSwKKzB4NDIwMDYwMTksIDB4NjcwRTYxNEMsIDB4RDQ5RTMyMUMsIDB4NDIwMDIwN0QsCisweDMyNENDOTBGLCAweDIyMDAwMDBCLCAweDQyMDg2MjVDLCAweDQyMDA0MjA4LAorMHgzMjRDNjQ0QywgMHg0MjAwRDQ5OCwgMHgwMDBCMzI0QywgMHgyRkU2MjI2MCwKKzB4NjE0QzRGMTIsIDB4NDEwMEQ0OTMsIDB4NjcxMDMxNEMsIDB4RTI5RjY2NkQsCisweDI3Mjk0NjE5LCAweDZFNTM2MjY5LCAweDY3MkU2NTczLCAweDQyMjEyMjdELAorMHg0MjIxNDIyMSwgMHg3NjAxNjYyQywgMHhFNDAxNDYwOCwgMHgzNEU4NDYwOCwKKzB4NjQ0QzQ2MDAsIDB4MDcxQTA0NjcsIDB4MjE1MDI1N0IsIDB4MDAwQjRGMTYsCisweDRGMjI2RUY2LCAweEQyODU3RkU4LCAweDg4MDE2MDIxLCAweEQyODQ4QjdCLAorMHgyNjY4NjYyMSwgMHhEMjgzOEI3NywgMHgyNjY4NjYyMSwgMHhFNTBGOEI3MywKKzB4RTQwMUJGQTIsIDB4QkZBNEU1MDEsIDB4RTU4NkU0MDAsIDB4RTQwMDY1NUMsCisweDJGNTBCRkE0LCAweEJGQTFFNDAxLCAweEU2MDJFNTA2LCAweDYwNjM0NjE4LAorMHg4MUYyRTQwMSwgMHg2NTQzQkY5RiwgMHhFNDAxODVGMiwgMHhCRkFCNjU0MywKKzB4ODVGMjY2MDMsIDB4NjU0M0U0MDEsIDB4NjYwM0JGQjEsIDB4RTQwMjY1RjAsCisweDYwNTM3NTZDLCAweDgwRjhCRjgwLCAweEJGODJFNDAyLCAweDg0RjhFNTEyLAorMHg3MDkwRTQwMiwgMHg2NTAzQkY4MiwgMHg0NjE4RTYwMiwgMHg4MUY2NjA2MywKKzB4QkY4MEU0MDIsIDB4ODVGNkU1MDAsIDB4NjYwM0U0MDIsIDB4RTUwMEJGOEMsCisweEU0MDI4NUY2LCAweEJGOTI2NjAzLCAweEU1RkVFNTAwLCAweEUwMTA2NTVDLAorMHhCRjYxRTQwMywgMHhFNTEzMEY1NCwgMHhFNDBFQkY2MywgMHgwNUZDRTAxMCwKKzB4QkY2M0U0MEUsIDB4RTUwMDc1ODUsIDB4QkY2NEU0MDMsIDB4RTUwMEU2NDAsCisweEJGNzFFNDAzLCAweEU1MDBFNjQwLCAweEJGNzhFNDAzLCAweEU1RkZFNjQwLAorMHhFMDE0NjU1QywgMHhCRjQ3RTQwNCwgMHhFNDBGMEY1NCwgMHhFNTA0QkY0OSwKKzB4MDVGQ0UwMTQsIDB4QkY0OUU0MEYsIDB4RTUwMTc1ODQsIDB4QkY0QUU2NDAsCisweEU1MDFFNDA0LCAweEJGNTdFNjQwLCAweEU1MDFFNDA0LCAweEU0MDRFNjQwLAorMHhBRjVDN0YxOCwgMHg3RjE4NEYyNiwgMHgwMDBCNEYyNiwgMHg0RjIyMDAwOSwKKzB4RDI0MjdGRjAsIDB4ODgwMTYwMjEsIDB4RDI0MThCNzEsIDB4MjY2ODY2MjEsCisweEQyNDA4QjZELCAweDI2Njg2NjIxLCAweEU1MEY4QjY5LCAweEU0MDFCRjFDLAorMHhCRjFFRTUwMSwgMHhFNTg2RTQwMCwgMHhFNDAwNjU1QywgMHgyRjUwQkYxRSwKKzB4QkYxQkU0MDEsIDB4RTQwMUU1MDYsIDB4QkYxQzY1NDMsIDB4RTQwMUU2NDAsCisweEJGMjk2NTQzLCAweEU0MDFFNjQwLCAweEJGMzA2NTQzLCAweDY1RjBFNjQwLAorMHg3NTZDRTQwMiwgMHhCRUZGNjA1MywgMHhFNDAyODBGNCwgMHhFNTEyQkYwMSwKKzB4RTQwMjg0RjQsIDB4QkYwMTcwOTAsIDB4RTY0MDY1MDMsIDB4QkYwMkU0MDIsCisweEU2NDBFNTAwLCAweEJGMEZFNDAyLCAweEU2NDBFNTAwLCAweEJGMTZFNDAyLAorMHhFNUZFRTUwMCwgMHg2MDUzNjU1QywgMHhCRUU1RTQwMywgMHhFNTEzODBGOCwKKzB4RTQwRUJFRTcsIDB4RTQwRTg0RjgsIDB4QkVFNzcwODUsIDB4RTUwMDY1MDMsCisweEJFRThFNjQwLCAweEU1MDBFNDAzLCAweEJFRjVFNjQwLCAweEU1MDBFNDAzLAorMHhCRUZDRTY0MCwgMHhFNUZGRTQwMywgMHg2MDUzNjU1QywgMHhCRUNCRTQwNCwKKzB4RTQwRjgwRkMsIDB4RTUwNEJFQ0QsIDB4RTQwRjg0RkMsIDB4QkVDRDcwODMsCisweEU1MDE2NTAzLCAweEJFQ0VFNjQwLCAweEU1MDFFNDA0LCAweEJFREJFNjQwLAorMHhFNTAxRTQwNCwgMHhFNDA0RTY0MCwgMHhBRUUwN0YxMCwgMHg3RjEwNEYyNiwKKzB4MDAwQjRGMjYsIDB4MDAwMDAwMDksIDB4MDAxRTEwMkYsIDB4MDAxRTEwODAsCisweDAwMUUxMDkwLCAweDAwMUUxMDNGLCAweDAwMUUxMDNFLCAweDAwMjAzQTRBLAorMHgwMDIwM0E0QywgMHgwMDIwM0E0RSwgMHhEMjFERDExQywgMHg2NjIwNjAxMCwKKzB4Njc2QzcwMDEsIDB4MzcwMEM5MEYsIDB4RTUwMDhEMTMsIDB4NjcxMDYyMTAsCisweDc3MDE2MjJDLCAweDY0MjMyMTcwLCAweEQ2MTY2MDEwLCAweDQ0MDg0NDA4LAorMHgzNDI4QzkwRiwgMHg2MjYwMjEwMCwgMHg3MjAxRDUxMywgMHg0NDA4MjYyMCwKKzB4MDAwQjM1NEMsIDB4RDEwRjYwNTMsIDB4MjU1ODY1MTAsIDB4RTYwMDhEMTMsCisweEQ2MERENDBCLCAweDY1NUM2NTQwLCAweDQ3MDg2NzUzLCAweDM3NTg0NzA4LAorMHg0NzA4NjU0MCwgMHgyNDUwNzUwMSwgMHgzNjdDNjA0MCwgMHgyNDAwQzkwRiwKKzB4NzJGRjYyMTAsIDB4MDAwQjIxMjAsIDB4MDAwMDYwNjMsIDB4MDAyMDM5OTUsCisweDAwMjAzOTk0LCAweDAwMjAzOTk2LCAweDAwMjAzNUJDLCAweDdGRkM0RjIyLAorMHhFNjgwRDFBOCwgMHg2NjZDNjIxMiwgMHhEMkE3MkYyMiwgMHg2N0YzNjU2MywKKzB4NDIwQjc1NDIsIDB4N0YwNEU0MDQsIDB4MDAwQjRGMjYsIDB4RTY4MDAwMDksCisweEQyQTE2NjZDLCAweEU3MDA2NTYzLCAweDQyMkI3NTQwLCAweEU2ODA2NDczLAorMHhEMjlENjY2QywgMHhFNzAwNjU2MywgMHg0MjJCNzU0MywgMHgyRjg2NjQ3MywKKzB4MkZBNjJGOTYsIDB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsIDB4N0ZDMDRGMjIsCisweERCOTdEMjk2LCAweDcyMDEyRjIyLCAweEQxOTYxRjIxLCAweDY2MTI1MjExLAorMHg4QjAxMzYyMCwgMHgwMDA5QTBGOSwgMHhDOTAzNjA2MSwgMHg4QjAxODgwMSwKKzB4MDAwOUEwRjMsIDB4RDI5MERDOEYsIDB4NjRDMzQyMEIsIDB4NjUwM0QxOEYsCisweDYwMTExRjAyLCAweDhCMDQ4ODAxLCAweDQyMEJEMjhELCAweEFGRTQ2NEMzLAorMHg1NDUzMDAwOSwgMHg4NDRDRUU4NCwgMHg4OTAxMzBFMCwgMHgwMDA5QTBDMywKKzB4NjYxMEQxODgsIDB4NjAyMzYyNkMsIDB4OEI3MTg4MDEsIDB4NjIxMEQxODYsCisweDg5NjYyMjI4LCAweERBODZEMjg1LCAweEUwMDM2MTIyLCAweDY0MjIxMTEyLAorMHg0MDE4RDg4MSwgMHhERDgzRTUwMCwgMHg4MTQxNjdBMywgMHg3NzA0Mjg1MCwKKzB4NjQ3MjY2QTIsIDB4NkVEM0Q1ODAsIDB4MUY0NTdFMDQsIDB4NjU1MjFGNTYsCisweDY0RTM2OEQyLCAweDFGODg3NEY4LCAweDY4NDM2OUUyLCAweDFGNjM3ODk0LAorMHgxRjk5MUY3NCwgMHg2MjgyNjE0MiwgMHhENzc5RDk3OCwgMHgxRjJCRDY3OSwKKzB4Njc3MjYyOTIsIDB4MUYxQTYwNjIsIDB4MjYwMkNCMjAsIDB4RDE3NkU2MDAsCisweEU1NDAxRjU3LCAweDFGN0QxRjJDLCAweDc2MDExRjFFLCAweDMyNTM2MjZELAorMHg1MUYzOEJGQiwgMHg1MkY1NTVGNCwgMHgyNTIyMkExMiwgMHg1NUY3NTdGNiwKKzB4Mjc1MjVBRjgsIDB4NURGOTJEQTIsIDB4MkVEMjUxRkIsIDB4RDU2QjVFRkEsCisweDU0RkMyNEUyLCAweDI4MTI1N0ZELCAweEQxNjBEODY5LCAweDI1NzIyOTQyLAorMHg2OTEyNjc4MiwgMHgxOTc0RDg2NiwgMHhERDY2NkExMiwgMHg1NkZFNjBBMSwKKzB4MkEwMUNCMDEsIDB4REE2NDY0MTIsIDB4RTkwMTI4NDIsIDB4NEEwQjJENDIsCisweDUyRkUyNjkyLCAweEQ2NjFFRTAxLCAweDIyRTI0RTE4LCAweDcyMDE2MjYyLAorMHg2MEIyMjYyMiwgMHhDQjAxRDE0RiwgMHgyQjAyRTIwMiwgMHgyMTIwQTAzRiwKKzB4OEIzQzIyMjgsIDB4RTYwMUQ1NUEsIDB4MjE2MEU3MDAsIDB4RTAxQzI1NzIsCisweEM4MDEwMDRDLCAweEQ4NTc4QjBDLCAweDFGOEZEMjU3LCAweEU2MDAyODIyLAorMHg3NjAxRTU3RCwgMHgzMjUzNjI2QywgMHg1NkZGOEJGQiwgMHgyNjIyRDI1MywKKzB4RTJGRTY5QjIsIDB4MkI5MjI5MjksIDB4MEE0Q0UwMUUsIDB4RTAxRjY1RjIsCisweDAxNEMyNUEwLCAweDc0MTA1N0YxLCAweEVBMDYyNzEwLCAweERENENFNjAwLAorMHg4NDQ2REU0QywgMHgyRDAwNzYwMSwgMHg2OTZDNjg0NCwgMHgyRTgwMzlBMywKKzB4OEZGNjdFMDEsIDB4REU0ODdEMDEsIDB4MkVBMEVBOTQsIDB4RTEwMDdFMDEsCisweDdFMEYyRTEwLCAweEQxMkZFMjA1LCAweDY0MTAyRTIwLCAweDYwMjM2MjRDLAorMHg4OTA4ODgwMSwgMHg1NUYyRDIyQSwgMHg2NEMzNDIwQiwgMHhFRTAxRDEzMiwKKzB4QUYxQTRFMTgsIDB4NTVGMjIxRTIsIDB4ODU1M0QxM0MsIDB4NjIwRDY2MTIsCisweDg5MDYzMjYyLCAweEQ2M0JENDNBLCAweEU4MDE0NjBCLCAweEFGMENENzNBLAorMHhEOTFGMjc4MiwgMHg2NEMzNDkwQiwgMHhFRTAxRDEyNywgMHhEQTM4RDQzNywKKzB4NEEwQjRFMTgsIDB4QUYwMDIxRTIsIDB4N0Y0MDAwMDksIDB4NkVGNjRGMjYsCisweDZDRjY2REY2LCAweDZBRjY2QkY2LCAweDAwMEI2OUY2LCAweDRGMjI2OEY2LAorMHg4NTQ2N0ZGNCwgMHgyRjAxRTY4MSwgMHg2NjZDODU0NywgMHg4NTQ4ODFGMSwKKzB4ODFGMkQyMDksIDB4NjdGMzg1NDIsIDB4ODU0MzgxRjMsIDB4ODFGNEU0MEMsCisweDY1NjM2MDUzLCAweDQyMEI4MUY1LCAweDdGMEM3NTQwLCAweDAwMEI0RjI2LAorMHgwMDAwMDAwOSwgMHgwMDFDM0Q5QywgMHgwMDIwMjNGQywgMHgwMDExNzc5QSwKKzB4MDAxQzM2RjgsIDB4MDAyMDM1QjQsIDB4MDAyMDE0QTYsIDB4MDAyMDNBMTYsCisweDAwMjAxNEQwLCAweDAwMjAzOUE1LCAweDAwMjAzOUE0LCAweDAwMjAzOUEwLAorMHgwMDFDM0I5QywgMHgwMDFDMzcwNCwgMHgwMDFDM0Q5OCwgMHgwMDFDM0JCNCwKKzB4MDAxQzU5NjAsIDB4MDAxQzM1MDAsIDB4MDAxQzNEMzAsIDB4MDAxQzg5NjAsCisweDAwMjAzNThDLCAweDAwMUMzRDAwLCAweDAwMjAxNjEwLCAweDAwMTE3NzMwLAorMHgwMDIwMzlBOCwgMHgwMDFDNTgyQywgMHgyMDAwQTAwMCwgMHgwMDAwQTAwMCwKKzB4MDAxMTc3OEMsIDB4MDAxMTc3OTIsIDB4MDAxMTc3ODgsIDB4MDAyMDM5N0MsCisweDAwMjAzNTdDLCAweDAwMjAxNTM0LCAweDAwMUUyMTMwLCAweDAwMjAzREEwLAorMHgwMDIwMThDMCwgMHgyRjk2MkY4NiwgMHgyRkI2MkZBNiwgMHgyRkQ2MkZDNiwKKzB4NEYyMjJGRTYsIDB4RDE5QjdGRUMsIDB4MkYxMkUwMDAsIDB4NjEwM0Q0OUEsCisweDFGNDI4MUYyLCAweEREOUFEQTk5LCAweEQ2OUE2ODEzLCAweEUwMDE0ODA4LAorMHg0NjBCREU5OSwgMHgzOEVDNDgwMCwgMHg2NUEyMUYwMywgMHgzNTIwNTJBMSwKKzB4QTIzRThCMDEsIDB4NjA1MTAwMDksIDB4ODgwMUM5MDMsIDB4QTIzODhCMDEsCisweDUyNTMwMDA5LCAweDMyRTBERTkxLCAweEQ5OTE4QjEwLCAweDY0QTM0OTBCLAorMHg0QjBCREI5MCwgMHhERTkwNjQwMywgMHhENzkxRDY5MCwgMHhFQzAxRDU5MSwKKzB4MkUwMkUxMDAsIDB4MjcxMDI2QzAsIDB4MjUwMkFGREYsIDB4QzgwMTg1NTEsCisweEExNTc4QjAxLCAweDYyNTEwMDA5LCAweDQyMDA2MjJELCAweDVFNTMzNjZBLAorMHg4NUUyMjI2RCwgMHhDOTAzNjQyQywgMHg4NUUzNjYwMywgMHg2MDUzNjUwRCwKKzB4NDAyMTQwMjEsIDB4NDUwMEM5M0YsIDB4MzIyQTY3MDMsIDB4NjA1MzI1MkQsCisweEM5MDFEMTdGLCAweDYwMTA2QzAzLCAweDg4MDFEOTdGLCAweERCN0Y4QjA1LAorMHgyMTIwRTIwMCwgMHhDQjAxNjBCMiwgMHhEMTdEMkIwMiwgMHg4ODAxNjAxMSwKKzB4NjVBMjhCMEEsIDB4OEQwNDI0NDgsIDB4OUI5RTYyNTEsIDB4QTAwMzIyQjksCisweDkxOUIyNTIxLCAweDI1MjEyMjFCLCAweDM3QjNFQjEwLCAweDI0NDg4OTVFLAorMHhENDczOEIwNywgMHgyMjI4NjI0MSwgMHg2MDYzODkwMywgMHhBMDU3ODFGOCwKKzB4RDU3MDY0NzMsIDB4NDYwODQ2MDgsIDB4ODVFMjYyNzMsIDB4NDYwMDZCNTAsCisweDM2MkM0MjAwLCAweDJCQjhDOTEwLCAweDhGMUY2NDYzLCAweDI2Njg2NjAzLAorMHhEMjY5ODkxMSwgMHgwNjJENjA0MywgMHg0MTE5NjE2RCwgMHg2QjBFNjAxOSwKKzB4ODFGODIwQkQsIDB4ODgwMTYwQzMsIDB4NjQ2QzhGMkMsIDB4ODgwRjYwNzMsCisweEEwMjc4QjFCLCAweEQyNjEwMDA5LCAweDA1MkQ2MDQzLCAweDQxMTk2MTVELAorMHg2NzBFNjAxOSwgMHg2NDVDMjA3RCwgMHg4MUY4QTAxQywgMHg4OTBGMjY2OCwKKzB4NjA0M0QyNUIsIDB4NkI1RDA1MkQsIDB4NjBCOTRCMTksIDB4MjAxRDYxMEUsCisweDYwQzM4MUY4LCAweDhGMEQ4ODAxLCAweDY0NzM2NDVDLCAweEVDMDBBMDBBLAorMHg2MDQzRDI1NCwgMHg2MjVEMDUyRCwgMHg2MDI5NDIxOSwgMHgyMDdENjcwRSwKKzB4ODFGODY0NUMsIDB4ODgwMjg1RjgsIDB4ODVFMTg5MEEsIDB4OEQwN0M4MjAsCisweEU2REM2MjAzLCAweDYwMjMyMjY5LCAweDgxRTFBMDAyLCAweDY0NENFNEZGLAorMHg2MjEwRDE0OSwgMHg4OTAxMjIyOCwgMHg2NDRDRTRGRiwgMHg2NTRERUJGRiwKKzB4MzVCMDZCQkMsIDB4REIzNjhCMkIsIDB4NjRBMzRCMEIsIDB4NDEwQkQxMzUsCisweDU0MDM2NDAzLCAweDg1NDQ2RTAzLCAweEM5NDhEQjQwLCAweERDNDA4ODA4LAorMHhCRUFDOEIwMSwgMHg2NEIzRTUwMiwgMHg2NUUzNEMwQiwgMHhEQjNERUMwMSwKKzB4RDEzRDJEQzIsIDB4NjIxMjYwQjIsIDB4NzIwMTcwMDEsIDB4MjEyMjg4MDUsCisweDJCMDI4RjA4LCAweDY2NkNFNjgwLCAweDY1NjNEMjM4LCAweDc1NDlFNzAwLAorMHg2NDczNDIwQiwgMHhBMDMwRDQzNiwgMHg3RkZGMDAwOSwgMHg4NUUyODAwMCwKKzB4MjBCOUVCRkMsIDB4NjEwMzgxRTIsIDB4OTQyQTg1RTMsIDB4NjIwMzIwNDksCisweDQ1MDg4NUY4LCAweDgxRTIyMDFCLCAweEM5MDE2MEMzLCAweDQwMDg0MDE4LAorMHg0MDA4NDAwOCwgMHg0MDAwMjI1QiwgMHg2MDIzMjIwQiwgMHg4NUU0ODFFMywKKzB4NDExOEUxMDgsIDB4ODFFNDIwMUIsIDB4RTQwMjYyQTIsIDB4MjBCOTg1MjEsCisweDY3QTI4MTIxLCAweENCMDE2MDcxLCAweDg1RjgyNzAxLCAweDg5MDMzMDQyLAorMHhFQ0U3ODVFMiwgMHg4MUUyMjBDOSwgMHg0OTBCRDQxRSwgMHhBMDNCMDAwOSwKKzB4N0UwMzAwMDksIDB4MDAxQzNEMzAsIDB4MDAyMDNEQUMsIDB4MDAyMDM1OEMsCisweDAwMUUyMTJDLCAweDAwMjAzNDcwLCAweDAwMUMzRDAwLCAweDAwMTE3NzgwLAorMHgwMDIwMTRBNiwgMHgwMDIwMTY3MCwgMHgwMDExNzcwQywgMHgwMDIwMzlBNCwKKzB4MDAyMDM5QTUsIDB4MDAyMDM5QTAsIDB4MDAyMDE4QzAsIDB4MDAxQzM2RjgsCisweDAwMjAzQTFBLCAweDAwMjAzREJDLCAweDAwMjAzQkEwLCAweDAwMjAzQzIwLAorMHgwMDIwM0NBMCwgMHgwMDIwM0QyMCwgMHgwMDIwMzk5MCwgMHgwMDIwMzU4NCwKKzB4MDAyMDE0RDAsIDB4MDAyMDNBMUMsIDB4MDAyMDNBMjAsIDB4MDAyMDIzRkMsCisweDAwMjAzREE0LCAweDAwMjAzREE4LCAweDYwMjI2MkYyLCAweDQwMDk0MDE5LAorMHhDOTBGNDAwOSwgMHg4QjBCODgwQSwgMHg2MEUyREU4QywgMHg0MDA5NDAxOSwKKzB4QzkwRjQwMDksIDB4OEIwMzg4MDgsIDB4Q0IwMTYwQTIsIDB4MjgwMkEwMDYsCisweDY1RTJERTg3LCAweDJFNTI3NTAxLCAweDI4NjI2NkEyLCAweDUyRjM2NkYyLAorMHgyNjIyQUU4MywgMHhEMjgzODU1MSwgMHhERTgzQzgwMiwgMHhBMDk1OEIwMSwKKzB4NDIwQjAwMDksIDB4NEUwQjY0QTMsIDB4NUUwMzY0MDMsIDB4ODVFNDY1MDMsCisweDQ5MThFOTA4LCAweEQ3N0QyMDlCLCAweEUwNEM4MUU0LCAweERDN0MwQjdFLAorMHg3QjAxRDk3QywgMHg2MUMyMDdCNiwgMHg3MTAxNjY5MCwgMHg4RDA2MjY2OCwKKzB4RDQ3OTJDMTIsIDB4NDIwQkQyNzksIDB4QTA3MEVCMDEsIDB4NjI1MTJEQjIsCisweDRCMThFQjBGLCAweDIyQjlFMTAyLCAweDMyMTA0MTE4LCAweDg1NTE4QjBGLAorMHgyMDI5RTJGQywgMHg2MDUxODE1MSwgMHhDQjAxNzJFMCwgMHg4NUUxMjUwMSwKKzB4MjAyOTk0QTMsIDB4ODVFNDgxRTEsIDB4QTA1MjIwNDksIDB4Njc1MTgxRTQsCisweDQ3MTk2NzdELCAweDY2N0U2Nzc5LCAweDc3MDEyNzZELCAweDY5MDM2MDdDLAorMHg4ODAxNDkxOCwgMHgyNTkxOEYzRSwgMHg2QjEyRDE2MSwgMHgyMUIyN0IwMSwKKzB4NjYwRDg1RTMsIDB4NDAyMTYwNjMsIDB4QzkzRjQwMjEsIDB4NkMwMzQ2MDAsCisweDI2MkQzMjJBLCAweEM4MDE2MDYzLCAweERCNUVEMTVELCAweDk2N0Q4OTAxLAorMHhFNjAwMkM2QiwgMHg2NjZDNjdDRCwgMHg0MDAwNjA2MywgMHg2MjJEMDIxRCwKKzB4OEQwRTMyNzAsIDB4NjA0MzY0MDMsIDB4RTlGRjAyMUQsIDB4OEIwMTMyOTAsCisweDAxQzVBMDA3LCAweDYyNkM3NjAxLCAweDMyOTJFOTA0LCAweDY0NkM4QkVCLAorMHg2MDQzNDQwMCwgMHhEMTUwMDRCRCwgMHgwQjQ1NzQwMSwgMHg2NjlENjkxMSwKKzB4ODkwNzM2NzAsIDB4NjAyRDYyMTEsIDB4ODkwMzg4RkYsIDB4RTIwMURCNEIsCisweDJCMjAyMUMxLCAweEVDRkM4NTUxLCAweDgxNTEyMEM5LCAweENCMDE2MDUxLAorMHhEQzQ3MjUwMSwgMHg2NEEzNEMwQiwgMHg1MUYzNjZGMiwgMHg4NUVGMjYxMiwKKzB4NTRGMkQyNDQsIDB4NjUwRDQyMEIsIDB4MDAwOUFERTcsIDB4RTUwMERDNDIsCisweDQyMEIyQzUyLCAweDRFMEI2NEEzLCAweDU0MDM2NDAzLCAweDg1NDQ2RTAzLAorMHg2NzAzRTkwOCwgMHg2NTAzNDkxOCwgMHgyNzk5ODU0MSwgMHhEQjMyMzc5MCwKKzB4OEYwQkQ5MzIsIDB4NjAxMzYxMEQsIDB4OEIwN0M4MjAsIDB4Qzk0ODYwNTMsCisweDhCMDM4ODA4LCAweEU1MDFCRDRCLCAweDAwMDlBMDA1LCAweDIxMjhEMjMzLAorMHhCRDQ0ODkwMSwgMHg2NEIzRTUwMCwgMHg0OTBCNjVFMywgMHhBREJDRUMwMSwKKzB4ODVGMjJEQzIsIDB4NzAwMUVFMDQsIDB4MzFFNzYxMEQsIDB4OEQwMjgxRjIsCisweEFEQTk3QTA4LCAweDdGMTQwMDA5LCAweDZFRjY0RjI2LCAweDZDRjY2REY2LAorMHg2QUY2NkJGNiwgMHgwMDBCNjlGNiwgMHhGN0ZGNjhGNiwgMHgyRkU2ODAwMCwKKzB4RDIyMzRGMjIsIDB4NjBFMzZFMjIsIDB4OEQwMkM4NDAsIDB4QkJFNTIyRTIsCisweEUyNDAwMDA5LCAweDJFMjg0MjE4LCAweEJCRjA4OTAxLCAweDYwRTMwMDA5LAorMHg4OTA1QzgxMCwgMHhEMjFDRDQxQiwgMHgwMDA5NDIwQiwgMHgwMDA5QkJFRiwKKzB4QzgwNTYwRTMsIDB4QkQ2RDg5MDEsIDB4NjBFMzAwMDksIDB4ODkwMkM4MDIsCisweEFCRUM0RjI2LCAweDRGMjY2RUY2LCAweDZFRjYwMDBCLCAweDAwMUMzRDNDLAorMHgwMDExNzc2MCwgMHgwMDIwMTRBNiwgMHgwMDIwMTY3MCwgMHgwMDIwMzUxQywKKzB4MDAyMDNEQzAsIDB4MDAyMDM5OTAsIDB4MDAyMDM1ODQsIDB4MDAyMDE0RDAsCisweDAwMjAzOUZDLCAweDAwMjAzQTA0LCAweDAwMjAzOUY4LCAweDAwMjAzOUZBLAorMHgwMDIwMTUzNCwgMHgwMDIwMThEMCwgMHgwMDIwM0ExQywgMHgwMDAwODAwMCwKKzB4MDAxQzM1MTAsIDB4MDAyMDNEQjQsIDB4MDAyMDE4QzAsIDB4ODkwMTRGMjIsCisweDYxMUI2MDBCLCAweDYxMUJCMDBBLCAweDAwMEI0RjI2LCAweDYwMEI2MDBCLAorMHg2MTFCQTAwNCwgMHg4REYxMjEwNywgMHg4QkY4NDAxMSwgMHg2MjBEMkYyNiwKKzB4OEYzRTMwMjAsIDB4NDAxODAwMTksIDB4OEIwQjMwMTYsIDB4MzEwNDMxMDQsCisweDMxMDQzMTA0LCAweDMxMDQzMTA0LCAweDMxMDQzMTA0LCAweDQxMjQ2MkY2LAorMHg2MDFDMDAwQiwgMHg0MTI5NjIxOSwgMHgyMDA4NDAxOCwgMHgzMTA0ODkyNiwKKzB4MzEwNDMxMDQsIDB4MzEwNDMxMDQsIDB4MzEwNDMxMDQsIDB4MzEwNDMxMDQsCisweDMxMDQzMTA0LCAweDMxMDQzMTA0LCAweDMxMDQzMTA0LCAweDYxMTkzMTA0LAorMHgzMjA0MjIxRCwgMHgzMjA0MzIwNCwgMHgzMjA0MzIwNCwgMHgzMjA0MzIwNCwKKzB4MzIwNDMyMDQsIDB4MzIwNDMyMDQsIDB4MzIwNDMyMDQsIDB4MzIwNDMyMDQsCisweDIxMkQzMjA0LCAweDYwMTk2MkY2LCAweDQwMjQwMDBCLCAweDAwMEJFMDAwLAorMHg2MjEzNjJGNiwgMHg0MTI5NDIyOCwgMHgzMTA0NDIyNCwgMHgzMTA0NDIyNCwKKzB4MzEwNDQyMjQsIDB4MzEwNDQyMjQsIDB4MzEwNDQyMjQsIDB4MzEwNDQyMjQsCisweDMxMDQ0MjI0LCAweDMxMDQ0MjI0LCAweDMxMDQ0MjI0LCAweDMxMDQ0MjI0LAorMHgzMTA0NDIyNCwgMHgzMTA0NDIyNCwgMHgzMTA0NDIyNCwgMHgzMTA0NDIyNCwKKzB4MzEwNDQyMjQsIDB4MzEwNDQyMjQsIDB4NjAyRDQyMjQsIDB4NjJGNjAwMEIsCisweDA4MEEwQzBFLCAweDAwMDIwNDA2LCAweDFBMUMxRTIwLCAweDEyMTQxNjE4LAorMHgyRTMwMzIzNCwgMHgyNjI4MkEyQywgMHgzQTNDM0U0MCwgMHg2QzYyNTY0OCwKKzB4NDExMTJGMjYsIDB4RTIyMDhGMTgsIDB4ODkwQjMxMjMsIDB4MzIxQ0QyMDQsCisweEQxMDI2MjIwLCAweDQxMkIzMTJDLCAweDAwMDkwMDA5LCAweDAwMjAzNDlBLAorMHgwMDIwMzQ1MCwgMHgwMDBCRTAwMCwgMHg0MDAwNjJGNiwgMHg0MDAwNDAwMCwKKzB4NDAwMDQwMDAsIDB4NDAwMDQwMDAsIDB4NjJGNjAwMEIsIDB4NDAwMDQwMDAsCisweDQwMDA0MDAwLCAweDQwMDA0MDAwLCAweDQwMTg0MDAwLCAweDYyRjYwMDBCLAorMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwgMHg0MDI4NDAwMCwKKzB4NjJGNjAwMEIsIDB4NDAwMDQwMDAsIDB4NDAxODQwMDAsIDB4MDAwQjQwMjgsCisweEM5MEY2MkY2LCAweDQwMDU0MDA1LCAweDQwMDU0MDA1LCAweDYyRjYwMDBCLAorMHg0MDA1QzkwNywgMHg0MDA1NDAwNSwgMHg2MkY2MDAwQiwgMHg0MDA1QzkwMywKKzB4MDAwQjQwMDUsIDB4QzkwMTYyRjYsIDB4MDAwQjQwMDUsIDB4MDAwMDYyRjYsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4NDI3MDczNzIsCisweDNEMjA2Njc1LCAweDU1NEUyMDNELCAweDIwMkM0QzRDLCAweDZFNDk2NzdBLAorMHg0RTQ5NzI3NCwgMHg2RDc1NEU1MSwgMHgwMDAwMDAzRCwgMHg2MTc2NkU0OSwKKzB4MjA2NDY5NkMsIDB4NzI2NTczNzUsIDB4MjA3MjZGMjAsIDB4MjA3OTY1NkIsCisweDAwMjE0NDQ5LCAweDZFNkI2RTU1LCAweDIwNkU3NzZGLCAweDZENkQ2RjYzLAorMHgzRDY0NkU2MSwgMHgwMDAwMDAwMCwgMHgyMDNBMzA1MSwgMHgwMDAwMDAyMCwKKzB4MjAzQTMxNTEsIDB4MDAwMDAwMjAsIDB4MjAzQTMyNTEsIDB4MDAwMDAwMjAsCisweDIwM0EzMzUxLCAweDAwMDAwMDIwLCAweDIwM0EzNDUxLCAweDAwMDAwMDIwLAorMHgyQjQzNDc0MSwgMHg3MzY5NkY0RSwgMHg2MTQzMjA2NSwgMHg3MjYyNjk2QywKKzB4NkY2OTc0NjEsIDB4NjE2NjIwNkUsIDB4NkYyMDZDNjksIDB4Njk3NDIwNkUsCisweDBEMEE2NTZELCAweDAwMDAwMDAwLCAweDAwMDAwMDcyLCAweDAwMjA1MjIwLAorMHg2MjczNTU3NiwgMHg3NDczNzI1RiwgMHgwMDAwMEEwRCwgMHg2MjczNTU3NiwKKzB4NzM3NTczNUYsIDB4NjQ2RTY1NzAsIDB4MDAwMDBBMEQsIDB4NjI3MzU1NzYsCisweDczNjU3MjVGLCAweDAwMEEwRDZELCAweDAwMDAwMDQ0LCAweDQ0Mzg3NTcwLAorMHg3MjYzNzM2NSwgMHg2Rjc0NzA2OSwgMHgzRDU4NDU3MiwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwNDcsIDB4NzI3NDZFNDksIDB4NkQ2NTIwNTEsIDB4MkM3OTc0NzAsCisweDQ5Njc3QTIwLCAweDQ5NzI3NDZFLCAweDc1NEU1MTRFLCAweDAwMDAzRDZELAorMHg2NTRDNzI0NSwgMHgwMDAwMDA2RSwgMHgyMDc0NkY0RSwgMHg3NTZGNkU2NSwKKzB4NDkyMDY4NjcsIDB4NDIyMDUxNEUsIDB4MEEwRDY2NzUsIDB4MDAwMDAwMDAsCisweDAwMDAwMEZGLCAweDAwMDIwMDAxLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAxMEUwMTBELCAweDAwMDIwMDAzLCAweDAxMDkwMTA4LCAweDAwMDIwMTBBLAorMHgwMjAwMDAwMywgMHgwMjAyMDIwMSwgMHgwMjA0MDIwMywgMHgwMjA2MDIwNSwKKzB4MDIwMjAyMDAsIDB4MDIwNDAyMDMsIDB4MDIwQzAyMEIsIDB4MDIwRTAyMEQsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDAwMDAwRkYsIDB4MDAwMjAwMDEsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDEwRTAxMEQsIDB4MDAwMjAwMDMsIDB4MDEwOTAxMDgsIDB4MDAwMjAxMEEsCisweDAwMDMwMDAzLCAweDAyMDIwMjAxLCAweDAyMDQwMjAzLCAweDAyMDYwMjA1LAorMHgwMjAyMDIwMCwgMHgwMjA0MDIwMywgMHgwMjBDMDIwQiwgMHgwMjBFMDIwRCwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMTBFMDEwRCwgMHgwMEZGMDEwRiwgMHgwMTA5MDEwOCwgMHgwMTBCMDEwQSwKKzB4MDIwMDAxMEYsIDB4MDIwMjAyMDEsIDB4MDIwNDAyMDMsIDB4MDIwNjAyMDUsCisweDAyMDIwMjAwLCAweDAyMDQwMjAzLCAweDAyMEMwMjBCLCAweDAyMEUwMjBELAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAxMEUwMTBELCAweDAwRkYwMTBGLCAweDAxMDkwMTA4LCAweDAxMEIwMTBBLAorMHgwMTBGMDEwRiwgMHgwMjAyMDIwMSwgMHgwMjA0MDIwMywgMHgwMjA2MDIwNSwKKzB4MDIwMjAyMDAsIDB4MDIwNDAyMDMsIDB4MDIwQzAyMEIsIDB4MDIwRTAyMEQsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDAyMDUyMjAsIDB4MDAwMDAwNDYsIDB4MDAwMDAwNTksIDB4NzMyMDQxNDIsCisweDAwM0Q3MTY1LCAweDQ5NTQ0MTIwLCAweDAwMDAyMDRELCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDJFMDIwOSwgMHg4MDAwMDEwMSwgMHgwMDA0MDlGQSwKKzB4MDBGRjA0MDAsIDB4MDUwNzAwMDAsIDB4MDIwMDAyMDEsIDB4ODIwNTA3MDAsCisweDAwMDIwMDAyLCAweDAzODMwNTA3LCAweDA3MDEwMDQwLCAweDQwMDMwNDA1LAorMHgwMjA5MDEwMCwgMHgwMTAxMDAyRSwgMHgwOUZBODAwMCwgMHgwNDAwMDAwNCwKKzB4MDAwMDAwRkYsIDB4MDIwMTA1MDcsIDB4MDcwMDAwNDAsIDB4NDAwMjgyMDUsCisweDA1MDcwMDAwLCAweDAwNDAwMzgzLCAweDA0MDUwNzAxLCAweDAwMDA0MDAyLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwNzA5MDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfTsKKworY29uc3QgdTMyX3QgemNQMkZ3SW1hZ2VTaXplPTE1OTY0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwZndidS5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwZndidS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MGY1N2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBmd2J1LmMKQEAgLTAsMCArMSw1MjY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICIuLi84MDIxMWNvcmUvY3ByZWNvbXAuaCIKKworY29uc3QgdTMyX3QgemNGd0J1ZkltYWdlW10gPSB7CisweDNBNEJDRjE4LCAweEY0NEMwNzZFLCAweEY1OTQ1MkVBLCAweDQ1MUJBNzU1LAorMHgxNDBBQzg3QSwgMHhDMDdFRTk0MiwgMHgzRUY5NzhBQiwgMHhGNUIwM0RDNiwKKzB4QjcwMDgwRjAsIDB4QTg5MDY0RUEsIDB4NTRFMkMxRDYsIDB4RUIwNDdERjQsCisweDE3OTgzOTBDLCAweDAwMzUwNjI0LCAweDM1QjNFQ0YwLCAweDU5RjJGQUJGLAorMHhBRjlEMjQ4RSwgMHhGOUJEQjlGMCwgMHhEMDVDOEI0NywgMHhDMDhCNUExNiwKKzB4OTkwMDkzQzcsIDB4RDMzNUExNjAsIDB4MUMwNDk0MkMsIDB4QkY2RTdBODgsCisweEZEMjMyQjBGLCAweDVDMjI0Mzg3LCAweEJGMUUxNTZDLCAweEYyNEYyQTI3LAorMHhGRjU2NDIxRCwgMHhCMjEzMDM3QywgMHgyQkE2N0JBMCwgMHg0OTUwQ0Y4QSwKKzB4MDVGMDBGMjUsIDB4QTVFODIwODUsIDB4NzQxNjhBMEMsIDB4MkYyQUIzMEIsCisweEM4MEM1N0VFLCAweEI2QkRGNTcwLCAweDg5QkM1QTk5LCAweDdGM0I1QTY3LAorMHhGNkM5NDNCOCwgMHgwQzlDOTIwMSwgMHhFODM4Mzc0NywgMHgwQzlBNzJENiwKKzB4RTA1MjA3MDQsIDB4QTY2RDdGMzAsIDB4RTQ0NEE0MzQsIDB4RTBDOTRBQjcsCisweDhERDc3NTFDLCAweDFBNjU5NDY0LCAweDZDOUFCQTRGLCAweDc5MkYyRDJELAorMHg1OTM2RjY2QiwgMHgwNjFFNTgwRSwgMHg1OTkwM0Y2QywgMHgxRkJGQjhBMCwKKzB4Q0M4MjJFRkUsIDB4NEIwMzBDQUYsIDB4QjYyNDU3QzksIDB4MjdFOUJGMTUsCisweEIxMTNBNDg3LCAweEZBMEZDOTE1LCAweDQ0N0IxODRBLCAweDUzMzBDRDUxLAorMHgwMEJDQzYyMiwgMHhGMzBERTE0OSwgMHhGRjcxOEUxQywgMHg3QjVEMjg2MSwKKzB4REJDQTU3M0UsIDB4RkIwRDdCRjksIDB4RTFDRkJBQUMsIDB4Rjk5RDQ1ODMsCisweDRCQTc0OThBLCAweDdDQUVBN0VCLCAweEJBOTU4RTMyLCAweDM2QzUzMEZGLAorMHg4Rjg4Q0E5OSwgMHhGOTNDQUJDMiwgMHg4RTQ3RUYxMSwgMHhGQjBFRUQ2RiwKKzB4NUIzNjY4QTEsIDB4OUQ2M0FEREUsIDB4QTBFRUFCOEMsIDB4MDg0OTE1RjEsCisweEZBQ0FBQTI3LCAweDIwOTYzOEZFLCAweDFDRUQ5RUZGLCAweEVFQkQyMzM1LAorMHgzOEM2RjQyNCwgMHgyRDFGM0Q3RSwgMHg5NzZFODEwNiwgMHhCRTA4N0FEMiwKKzB4MzIxOTQ4NDUsIDB4NzU2MDY2REIsIDB4QzcwRTMxNjUsIDB4QzU2OERDQjEsCisweDMyMTJFNEUxLCAweEI1RDk5MUFELCAweDA3QzNDRUY4LCAweERCNEFCQjM4LAorMHgxNTc0QzIzMiwgMHhGOEM3OTJCQywgMHgxNEU2MkRCRSwgMHg1QTQ4RTdEQywKKzB4RUZEQzU0MDcsIDB4QzQ1QjQwMTcsIDB4M0I4MTRFODksIDB4RjA5MzY0NjYsCisweDg5NDkxQjJCLCAweDlBMzU5QTQxLCAweDgyMjg3Njc1LCAweEEwRjMzOEQzLAorMHg1MjNGREQzQywgMHg0RTQwQjc5NSwgMHg0NThBREFBNCwgMHhFRDgxMjk1NywKKzB4N0FEQzczQkMsIDB4NkZEN0RCNzgsIDB4Mjc0MEZDMDQsIDB4NjM5MkFFQTMsCisweDE4NUFCQ0VBLCAweDZCNTBBQkMzLCAweDM2ODFGMDdGLCAweEM4NDBGOENFLAorMHg1NzMzRTdFQywgMHgwODA1RkE3MSwgMHgwQjM0NTMwQSwgMHg4Q0IzRDAzMywKKzB4ODE0NTE1NTEsIDB4NTNCMEI0RUMsIDB4OTA4NjQ2RDAsIDB4MTBBM0U2NDIsCisweEYzNThEQzM0LCAweEMxRkE1NzBDLCAweDJCMTI4NEIwLCAweDU5MjMyMkJCLAorMHg5RDU4Nzc4MywgMHhFN0Q3Nzk4OCwgMHhFMUJFNUQ3QiwgMHg0NEI5M0UyMywKKzB4RjhCRTk0QTIsIDB4NTA2REM3MjMsIDB4NkUwQTdEMDksIDB4M0ZCMTA0NkYsCisweERCM0ExNjZGLCAweDlDQjdENkEwLCAweEUyNzhERTZELCAweDg4NDU5MzM0LAorMHhCNTJCQTNDOSwgMHgyODQ3NDBBMiwgMHgwNEQzMDc5MiwgMHg5NDRENzlDQSwKKzB4MUQwNTBFQTksIDB4QTQwNERCMUIsIDB4OTk1MjYwMjMsIDB4QkFDRTI0RTcsCisweEI5RjIwNzA0LCAweDI4NEU2NDMyLCAweDQ3QTU5M0QxLCAweDk1RjhERkNCLAorMHgyMjBDOTE2NywgMHg4RkFBQkJCQywgMHg5M0QzNEU4QywgMHhDRTA3NzEzOCwKKzB4NEZDMTgwODEsIDB4RTc2REQ3RTUsIDB4Njc0NjVGNkMsIDB4N0E0NzlENzcsCisweDc0RDYxRjgyLCAweDAwNTU5MjE0LCAweDJGNjZFNDJFLCAweDg3NDJBOTZCLAorMHg2MjA2Mzk1MCwgMHhBMkRCRkFFNSwgMHgzNjhCOTY2RiwgMHhBQjVGQ0NFMSwKKzB4Q0I0MDIzQjEsIDB4MUU3QUY1NDIsIDB4MDU5NTNFMzAsIDB4OENBNTFDRkMsCisweDIyMTY1NDdELCAweDI5RDU2MkQ0LCAweEU5QzlGOEVFLCAweEE5MDUwNUM5LAorMHgwODhEMEVFQiwgMHhEN0EyOTBGQSwgMHg5NUU1QjU2NywgMHg1M0ZBRDNDMCwKKzB4Qjg5RkM2MjUsIDB4NjlBNzUxOUIsIDB4MzY4N0M3RUYsIDB4NzE4OENCNTUsCisweENFNURCOTdFLCAweEEyNjA1NzRBLCAweEQ0NTNEMTczLCAweDE0NUQ5NzBCLAorMHgxMjExMkNDNiwgMHgzOTk4MzlFMCwgMHgyOUM1NUJFQiwgMHhFNDY3QzcxRiwKKzB4MTBCM0M5RDQsIDB4OEYxQzk2NjIsIDB4RjIwN0E4MjYsIDB4RTAyNDU2MDAsCisweDY4OEIxODEyLCAweDVBNDgzMDMxLCAweDcwNDgzODBBLCAweDc4RTNENUJCLAorMHgxOTUxNTMzRCwgMHg4RkE1RDhFMywgMHhDNUJFNTAwRCwgMHg3MURCNUIyQiwKKzB4QTE3QUEwMDAsIDB4NDA4QzlCRTgsIDB4MTYxRTEyRjUsIDB4QjFDMzhDNDUsCisweDIyQTg4RjA1LCAweERFM0Y0NDA1LCAweDUwNzhBREJCLCAweENFMUJGMUE2LAorMHhCN0E3NUIwNCwgMHg2QjgzNjRFOCwgMHgwQ0UzMkUzRSwgMHg5QkY2NTUwNCwKKzB4MjhDMTgxNTcsIDB4NzgzNTlBQzYsIDB4NjE3QkYyMDIsIDB4MUU3NkZBMDksCisweDBGOEU2MUE4LCAweDZEMDJGMEQ1LCAweDgwMzU2NDU5LCAweDc5Q0VGQUU3LAorMHg3RDAwRjE1NSwgMHg1QzFDMDEyOCwgMHhDNzVDQTA3MywgMHgzMjgxNjA5MCwKKzB4OUZGNzhERkMsIDB4ODQ4RDI2OUMsIDB4RjgxMUIzMTQsIDB4QTg2OTIwRkMsCisweDZGODg1RDAxLCAweEFDRkU2NTI1LCAweEM3MjYwNzRELCAweEZFRDY4NTk5LAorMHhGMUQ1Qzc2QSwgMHg4Nzk5RTVGNSwgMHhGODVGNTE3MSwgMHhEOERFMkQzQiwKKzB4RTdERDhFNzUsIDB4NDNGODYxNEEsIDB4MDY4NEZDOEQsIDB4OTY4M0I4QzgsCisweDc0QkU3ODZCLCAweDI1MTQ3NjJELCAweDdEODY2NjgyLCAweEU3MTFGRTFGLAorMHgwREU5RTI3MywgMHgxMkY1MzE2NywgMHg0RkEzQTdGRSwgMHgyQTAwRUI2MSwKKzB4QjM5ODRBMjgsIDB4NDMxOUYyQjAsIDB4NDJCQTBDQTIsIDB4ODQ4NzcxQjYsCisweDk5NUU5NDVFLCAweEQ0MTExNUY1LCAweDQzRDk4MzRCLCAweDU0RUVEQzM2LAorMHg1QzNDNTQwNywgMHg2NzFCNTQwRSwgMHhEQ0YxODk0OCwgMHgxNTBFRDk3MywKKzB4MkQ0OTIyREUsIDB4RjkzQ0ExN0QsIDB4QjI0QTc2RTUsIDB4RDFDMDFDMjIsCisweEYyOTYzREQ2LCAweDNCODYwMDY2LCAweDA4RUYwRUE0LCAweDYwOUI2MENDLAorMHhFMkU5MDFGQSwgMHgyNUJFOUI5MywgMHhERjk2RDlCQywgMHg4NkQ0MTVERiwKKzB4NzVDQ0Y2QkIsIDB4ODgyRDU0QjIsIDB4Nzk3NkU5QUYsIDB4ODhBMEIxNzgsCisweDVBREU1QTU1LCAweDhBOEMwMTEyLCAweEQ4OTY3NTVBLCAweENCNjc4OUIzLAorMHg4QjYzQUUyRiwgMHgyNTQ1MDM2QywgMHhFNDY1NUI5NCwgMHgyMDk1OTk3NywKKzB4MjlERkI0RDEsIDB4Q0RBQUVCRjQsIDB4MUMwN0VDMDUsIDB4NUE2RjYwN0QsCisweDg4QTlCMzFELCAweDExOEM3NEQyLCAweDAwMEJCMDY1LCAweDc1QzQ2NzEyLAorMHhFRjFBNThCRCwgMHg1MEVDQTI2MiwgMHhDQ0UzOTNCOSwgMHg2RURCOTJFOCwKKzB4NzAwRUY1MTcsIDB4QkY2Q0Y0QUQsIDB4NTc0NTZEQzAsIDB4RjYyOTUxN0MsCisweDQwMzMxRjhCLCAweEMxMEE0NTRELCAweDZDQ0IwMkNGLCAweDlCRjExQjFDLAorMHhFMDg3MTQzNywgMHgyMzYyMzU4NSwgMHhGNTE5RjA5QywgMHg0REIyQUZDOCwKKzB4ODhGQ0JEN0IsIDB4QjUxMkZFOEQsIDB4REU0NDU4OTQsIDB4MDc4QUQwM0MsCisweDQ0Mzc1RkIwLCAweDBCQUJFREIxLCAweDQwRDVFOEUxLCAweDEzRjIwQTg2LAorMHhGMTQwNjMwMywgMHg3MjA1QzMyMiwgMHgzRkM0Mzc3OSwgMHg3QTYwRDUxMCwKKzB4MTQ0NjlFMDQsIDB4RjRFNzc4NzMsIDB4MkVBRDdFQ0UsIDB4QTEzNUQ2RUEsCisweDNGNEM0QjMwLCAweDIxNDg4MDc3LCAweDY5RjY0RjFDLCAweEVFRjQ4NzZFLAorMHg2MzYxMEMwQiwgMHhCN0IyNEM1QywgMHgzMjRBNzZGRSwgMHgwQ0Y2NTFEMywKKzB4OTQ2MEYwQjEsIDB4ODFBODMyMzAsIDB4MDgzOUNGRjksIDB4NzA3MjJGMDQsCisweEMyNzhGQjNCLCAweDVERDFCREE0LCAweDFFNEIzREJBLCAweEFFMTYxQTkzLAorMHg5RTEwMzNDMywgMHhEOTM4RkNFQywgMHhEQTJCMkY5MywgMHgyOENEODJFQSwKKzB4MTRBRDFGQUYsIDB4RTRFQzlDQjgsIDB4RTc3MEFGREYsIDB4RUZCMTI4OTgsCisweDUwMEJFMTgxLCAweDYwMjYyNUM1LCAweEYxNjA2MzFCLCAweDc4RDM2NDNGLAorMHg0RTEzRUQzNywgMHg2NDdCQjIyMywgMHhDRjE4RDc1QywgMHhGNDc3Rjk0QywKKzB4Nzg2RUNCODksIDB4QjNFRDIxRjgsIDB4MUJFRjM5MTYsIDB4MjQwRkIzNUEsCisweDVDNjlCN0Q5LCAweDhFOTYyOTBBLCAweEQ0MERDOThDLCAweEQxMzcwMjkxLAorMHg1ODcwMDIxRSwgMHgzRjdDRjIzRiwgMHhGRDRBNkFEQSwgMHgzNjQ4MjQ1NywKKzB4OTI2NjAwQUYsIDB4REM4NjE4QkMsIDB4NjdEMzc3OUYsIDB4MzQyMjgzMEMsCisweDg3QTQxRkJBLCAweENBMEFGRjUzLCAweDYzQkM0NUYzLCAweDUyMEJCQkFFLAorMHhFREUyRTAzMSwgMHhCNkZBOTQ1MCwgMHgyNThDQTcxMiwgMHhENzA5QzRFNCwKKzB4NjE3NzA5QjIsIDB4QUFDRTBCNDEsIDB4MzYzREJGNTUsIDB4NzAxRDY1ODMsCisweDM5RjNDODg1LCAweDdDRDYyOTdCLCAweDA3OEZFMTNCLCAweEEzOThEQUJGLAorMHhEQjk3QzUxNCwgMHgwMzkxMDJFMywgMHg1Q0E1NDVBRiwgMHg5Mjk4QkExOCwKKzB4RDE4REFGODYsIDB4M0Q3MEVFQTIsIDB4NTI2NkFENjgsIDB4QjA0OTQ1QjUsCisweDQwMkREQTVCLCAweDAxREM2Q0QxLCAweDkzQUM1MDUzLCAweDA4REY5RUE5LAorMHg0ODVFQkU5NywgMHhBNUQwNTg1MywgMHg2Q0JFRTkxMCwgMHhENDg1RjRFMiwKKzB4OEYyMDFEMDcsIDB4RUZDMzg0QTMsIDB4NzI3MkFGQkUsIDB4QzBCNDFGRDcsCisweDhFNTRBOTcxLCAweEE3RjlFMEY3LCAweEMyMTcwMEI0LCAweEMyNEE0RUQwLAorMHg1NDE5RUFDRiwgMHhCQzJEOEZCMSwgMHgyQzVCNUFGRiwgMHgwMzQ1Mjc0QywKKzB4QzQxREY0N0EsIDB4Mzc2NThBRkYsIDB4MjRDRjNCRTcsIDB4QTMwODYyNDgsCisweEY4MkI1OTI4LCAweEI0OUE5QjA0LCAweEQ0MTA1QUVGLCAweDQ0NEVCRThELAorMHgzNDgzNjhERiwgMHhEQzc3QTdBMCwgMHg2OEQzN0UwRCwgMHhEMkVCNTRFRSwKKzB4RERBQzhDMzMsIDB4RTVDOTNDNzksIDB4RTQ3MDZBQkYsIDB4MTc1MzZFRkQsCisweDZDMkIyQjE2LCAweDAzOEFBODA2LCAweERBRDQyNDU4LCAweEFFMUQ3NkExLAorMHhDQzhERTk1QywgMHgxQkEyMDY0NywgMHgwNTIxMDY4QywgMHgzMDZGQkU0NCwKKzB4NEUyOUQ4ODEsIDB4RDJBMTRENTMsIDB4QTE1NTg1M0UsIDB4NDQ1MDBDQzQsCisweEZDNDQ2NkI3LCAweDVBQUNENTFELCAweDUwNkQzQTczLCAweDNGNjFFMEZFLAorMHg1OEYxMUY5RCwgMHhDOTJBMkNBRCwgMHhEOUE0Rjg2QiwgMHgxRkE3NDdCMSwKKzB4NzdERUM1RDIsIDB4REZBQjM2OUEsIDB4RDQ3MUVBMDEsIDB4NzI0NTAyREEsCisweDYxOENFMjFBLCAweDUyMzg4QkVCLCAweDJFOEE0Q0M1LCAweDU4MzMyMjExLAorMHgzRkNDNDZFMSwgMHg1MDEyMTBFMiwgMHhFOUQ1MUQxQSwgMHgzNzIzN0I1NSwKKzB4OENFM0UyRjEsIDB4NkIyRTk4Q0MsIDB4QjU2QTExRTUsIDB4ODgxOTAzNkIsCisweEE2QUEyRjI3LCAweEIwMTI0QTBFLCAweDkyRjE3MzY0LCAweEQ0QTg5MjM4LAorMHgwNTA3RTMzNywgMHg4RUQ5NURFQywgMHg5QzAxNEJBOCwgMHhCQTVCMTFDNiwKKzB4OUMxNUQzOEMsIDB4NTI1OTZDOTgsIDB4OTMzMEREM0QsIDB4RDYxNDc1NzAsCisweDIxNzAxRjFCLCAweDVBMjM4NUYxLCAweEUyRjM4QzZDLCAweEIzRTk0Njk4LAorMHgyRjlDNjNGQSwgMHg3RTAyMzREOCwgMHg0Q0REMzI4OCwgMHhFMTk2OUI1RiwKKzB4ODUzQjNDMUQsIDB4RjYxNDY1QTcsIDB4RjI4MUM0MTksIDB4NDZDNUYwNzIsCisweDlGMTcyMkRELCAweDY0RjJBOTk0LCAweDg2QUVFOEE4LCAweDU1ODk1RTE3LAorMHg2MDQ3RDFBQywgMHgzMzc1QTkzNCwgMHgzMzZCRUFDQSwgMHg5MDc5MTE3NCwKKzB4NERBQ0M0RDIsIDB4MjQyNTM4NjAsIDB4MkE3ODc2RkIsIDB4OURCREY5OEQsCisweEQ1QkNFMTgyLCAweDY3RUI1RjcwLCAweENDMDZCQTM4LCAweEU4Rjc4NzE1LAorMHhGRUIwRUI0NCwgMHhFOTc3NkUwMywgMHg4OTJBMDg5OCwgMHg3QTA3MDY1MCwKKzB4NkQwNEREQzQsIDB4OTlBNUI3RUEsIDB4M0I0MTZCQjYsIDB4REFEQ0U4MzQsCisweEIzQjAzMjc4LCAweERCNzNCNzBFLCAweEIwRjAyMjRFLCAweDUzOEE0QUY5LAorMHhEMjVENkEzNywgMHg4RjYyN0ZCMCwgMHgxMUVEOTM4NywgMHhCOEM4ODQ1NywKKzB4MENGMzIwQ0EsIDB4QTIwRTYyQTIsIDB4MURBQ0RENEEsIDB4QUI4NDU3NUQsCisweDc0MERBRjc1LCAweEFCOURCOTU1LCAweEZGNzg3MzE0LCAweEE2ODBCOEUzLAorMHhDOTc2RDM4RSwgMHgxRkQzOEY0RCwgMHgwQUVCNjYzMywgMHhCNjlBMDNERiwKKzB4QjZDQTg2MTAsIDB4MTA2MzU0QzIsIDB4QzM3RDQ4QzgsIDB4M0U1RUVENTQsCisweDUzNENDOUJBLCAweEUzN0RGRkFELCAweDlGNjlFQjA1LCAweEY2NzIxN0VFLAorMHg1MDE4MEIzRCwgMHhDQzYxQzEyNywgMHhDMzU5OEQ3MywgMHhFNUMwMEYwMSwKKzB4RkZFOUIxMTEsIDB4NUUyM0VBMkYsIDB4RjZDNDVEQ0UsIDB4NDQ1ODVFMzksCisweEIwMkM2MDA0LCAweDM3MjMzOTAyLCAweDRGMzc0QzBELCAweDM0Mjg4ODk4LAorMHhFMjc0OTM3RCwgMHhDODFENDcyQywgMHgxN0E0MzE1MSwgMHgyNjM4RjdEMywKKzB4NTMwNEU1QjUsIDB4RDVDRTVFREUsIDB4MzU3RkE3QjMsIDB4RkJFMjc5ODYsCisweDY0RTY1RDFGLCAweEMyOEQxMjM3LCAweEE3M0Q5QUIzLCAweDEyNENBNkM4LAorMHg3NzBENzQxNSwgMHg1Nzg4QzMyQywgMHgxOERFRkMwMCwgMHhCM0IyQjA2QSwKKzB4NTVDQzg2QTAsIDB4OEQ5MjkzMDksIDB4ODRBQjM4MUEsIDB4OURFRkU4REQsCisweDI2Qzc0MkM4LCAweDk1MkJBQzM0LCAweDBBM0IxNDBGLCAweDgyQTkzMDRCLAorMHg1MkNFQzlGNCwgMHg0N0RGNEQwOCwgMHgxNUExMTZEOCwgMHg3Qjg5MEIxOCwKKzB4Qzg3QkVGMUEsIDB4QjU5NjAxQjYsIDB4RDM3QkZCMjgsIDB4NUQ5RjU2NEQsCisweEZCMDAyRjhELCAweEU3NjAyRTU3LCAweEU0MjlDODUyLCAweDlDMEE4Qzc1LAorMHhFMDI2MTFEQywgMHg4QTFDOTg2MSwgMHg3NDk1RDZERSwgMHhDQTA1OTcxMCwKKzB4QUU1OTY5QjgsIDB4RTVCMkNCREMsIDB4QTQ5RjZFQzEsIDB4ODVEMkE1NTMsCisweEU0NzE5QjBGLCAweDQwRjY4QkJDLCAweDA5MkUyNEI1LCAweDdCMTMyNjc4LAorMHhENzBDMTdFMSwgMHgzMDlFNkFBMSwgMHhFMDA5NjU3RiwgMHhBNzIzOEM3QSwKKzB4RTA1NzVENzgsIDB4MUQ2OTgwRTcsIDB4RUZDREQzNjgsIDB4MTlGMDhEOTMsCisweEZBQzAzQjg1LCAweDUxQkFEQThGLCAweDAzN0RGODM5LCAweDhGNEQyOUY0LAorMHgxREM4QTkxMywgMHg1MEM1NTQwMiwgMHhERUU1NzhGMCwgMHgyQkExQzA5MSwKKzB4OUFDQTU2N0UsIDB4QThGRkVDRkEsIDB4QTNDMDVEMTIsIDB4RjE4QzYyODMsCisweEVBQUU2NjYyLCAweEI0REM2QTc5LCAweENFQzVFNzgyLCAweDkzQTJFMzg0LAorMHg4RjhBNUU2RiwgMHhDQTgzNzlENSwgMHg4MUJDRDQ5RSwgMHg1RkNFMTc0QiwKKzB4RDE1NDNBNUIsIDB4ODQ1RDYzNUYsIDB4RDUzMTI1QjksIDB4M0IyMTIxQUUsCisweEY4RUNERDAxLCAweEY4NEQyRDExLCAweDY1NzlCQzIxLCAweDVDMkRDMjIwLAorMHg5RUMxQTY4OCwgMHgxMTQ4RDgzMSwgMHg2QzA4Nzc5OSwgMHg1ODk0NDM1NywKKzB4NTZGNzlGQzYsIDB4NkI2ODlCNTUsIDB4NzQwQjVGRDEsIDB4OUY3QkZCNUYsCisweDZCMkYzRTJELCAweDEwRTA5MjczLCAweDJFOUUzMjEzLCAweEYzNDM2QUEwLAorMHgxNEE5RjY4MSwgMHg5MDg3RDNDRSwgMHg2OEQwNDMwQiwgMHg5RkFGRTNFRiwKKzB4RDQ1QjhDNjEsIDB4Qjk4MjcyNEEsIDB4MDQ0NDhEN0YsIDB4ODcxMkU0N0EsCisweDJDMTg4RDE1LCAweDlDM0YwNkNDLCAweDYzNDNCMTMwLCAweDU2QzY3NjVDLAorMHhGNjU3QkM5QSwgMHgxNUYxRTk3MywgMHg0N0U3MTE4MSwgMHg4NjM5RjVENywKKzB4QzFGM0ZERDUsIDB4REM1MjI0NDEsIDB4NTZCQjI5MDgsIDB4QUE0OEFFQzYsCisweEVDMDQwODdBLCAweDhEMzc1ODc1LCAweEUyOTQxRjg4LCAweEVEMzFDQzcyLAorMHgwOUJEODc5NCwgMHg0QzgxRDVDMSwgMHgxQ0M5NkQ5QywgMHg5OEE4OTAyMiwKKzB4QUEzNjJDNTcsIDB4OTI0RDU4M0QsIDB4MjcwNDMwRTYsIDB4MEZENDA0MEEsCisweEFGNTYxMTU1LCAweDM4RENEMUNGLCAweEU4NjFEMkFDLCAweDI0QTJFRjNDLAorMHgyQjdFMzg2OCwgMHgxM0RBNkMxMiwgMHg2OTIwMkVCNiwgMHg0QTVGRUM2NiwKKzB4MTg1NDE3QTksIDB4M0M5MkVGRjQsIDB4OTQ5ODQyRTYsIDB4MDIxMTVEOTMsCisweEFEMTcyNkZGLCAweDRFMDkzRDdELCAweEMzRTQxQjlDLCAweDI3QkJDMUMxLAorMHg0RkZBNDlDNywgMHg2QzYzRDI0QywgMHg4NDI1NTQ0NCwgMHgyODJDM0JBMiwKKzB4M0Q2NzlEODYsIDB4MDNCNDEwQjEsIDB4NjREQjQ1NEMsIDB4NTM1NDk5RDQsCisweDI1QjQyMUExLCAweDdFNjhDOEZFLCAweDA0NzdFM0I5LCAweENFRkIwODdELAorMHg5RTU5Qjg5QywgMHhCQjc4NzU1OSwgMHgxQTU1MEVFNCwgMHgwNzhCNDhBQiwKKzB4NzNBODY1RkUsIDB4RDcyMjc0NzEsIDB4M0E4NjQwNDksIDB4RTVFRTNBMUQsCisweDIwMUJDMTlELCAweEVCOERBRTJDLCAweDBFMkFCMzFELCAweENEQUMyRDc5LAorMHhEQUFCMDhCMSwgMHg2M0VDRDRGMiwgMHhDMDBGOTcxNiwgMHhENDE1QzZCQiwKKzB4OEMyMEMzOUYsIDB4REVEOEY1QTIsIDB4MUQ2QTQxOTAsIDB4M0QzMTkxNjcsCisweDU2QjNBMjZCLCAweDA1NDdCRjUyLCAweEEwNTY5MjRGLCAweDREQUE1MzlBLAorMHg1NTcyNDFEMSwgMHg0MkM5MTI0RSwgMHgxODcyMzMyMywgMHg2QUQ2RTdFQywKKzB4OEUwMzkzMzcsIDB4RjZGRERENjUsIDB4NUYzNTI1RjksIDB4QzBBRDk3MDQsCisweDgxMEVGMDQ5LCAweENFMDIyRUUwLCAweDQxQ0U3RTUyLCAweDhFMTcyQTQ0LAorMHg2NDg4MDhFMiwgMHhDN0ZGNjg5NiwgMHgyQUQwOTg1QywgMHgzMDRCOTYzMSwKKzB4RDIxRUEzOUIsIDB4Mjc5RjUwODksIDB4Q0RCNUMzOTAsIDB4MjE3MTZBNDAsCisweDVFMzRCMjc4LCAweDM5NDc1RDcyLCAweEJBNEY0REIxLCAweDhCMjU4MThGLAorMHhFNkU0NjZGNCwgMHhDNEEwOURGOCwgMHg1OUYxOEFDNywgMHg4ODdBQjVGRSwKKzB4RUVBNEJBNDIsIDB4MTczNzFEQTgsIDB4QTgyMTkzRDEsIDB4NkRDMzBFRjcsCisweERFQjlEMzQ5LCAweDJCMzI3MUQ0LCAweDFGRTgzODM2LCAweEVDNzU1QTI5LAorMHgwNUYwN0ZDRCwgMHhDMzMxRDNBRSwgMHhDNjIwOEI3NiwgMHg0OTdGRjI4MCwKKzB4NEM1NzlDNUEsIDB4MjJCNzFGOTQsIDB4MzBGRDYyMEIsIDB4MzFCNzFBRTMsCisweERGN0QxQTQxLCAweEYwNDFBQ0E1LCAweDk1MzMyNjFCLCAweDMyNjJEMjkxLAorMHgwNjBFOTY3MiwgMHg3RDE5MUE1NSwgMHg2RDBGMDk0NSwgMHhGOEM3Nzc3QywKKzB4MUMxNzM4MDgsIDB4NzgzMDhFNzcsIDB4QzFFRUFEM0IsIDB4MDU5Q0NEOUQsCisweEE4RkRCRTE5LCAweEU0NzYzMEZBLCAweDg4QTQ5REU1LCAweDAzMzQ3REFCLAorMHg0RjMxRjk2OSwgMHhGOUM2MkIxMiwgMHg5M0FCMTI2RiwgMHg4QTdBM0JGQiwKKzB4ODI1OTE1NDUsIDB4MkExQTIxMzEsIDB4MURFQkIxMzQsIDB4NDQ5RTI4REQsCisweEZBN0UwMjQ4LCAweEMxRTNBNUJDLCAweDE3NDdFMDk3LCAweDRDNjlBQTVDLAorMHgxRkQ3MUI0QiwgMHhBQzY0Q0E2QywgMHg1NTQ1RjlGOSwgMHg1RTU4ODZGMiwKKzB4MjQzREJBNkMsIDB4NDk1QkUxNjMsIDB4NEVDRjVBNkMsIDB4NDMwQzkwMTksCisweDg5QTk4MEZBLCAweDUyODk0NUFFLCAweDAwQ0U2OTM2LCAweDlGOUE3M0IyLAorMHg5RTU5REM2QiwgMHhENTc3NDBDRCwgMHgwRTBDQjczNSwgMHhCMTIwMkJFMywKKzB4QUEyNkMyQTksIDB4MjY3QTc3QTYsIDB4M0ZBMTJDRjAsIDB4NDU4N0MwQUYsCisweDM1NEVEODMxLCAweEZGRDhCRDhFLCAweDU2Q0MwRjI2LCAweDc1NzE3QUUzLAorMHg1MUIxMDY3NCwgMHgzRTMzRUMyNiwgMHgyNkNFODBEQiwgMHg1QzRBOTE0MCwKKzB4MDE3RjZDMkYsIDB4RjkwMzhEOUEsIDB4MEEyMkMyOUYsIDB4QkExRjdDOEQsCisweDEyNUNDOTM0LCAweDZDRjY2QkZGLCAweDQ4QzEzRENELCAweDYzRkMzRDgxLAorMHgyNThDMTgxRCwgMHgxQTRDM0RERCwgMHgyRTI0QkVDQywgMHg3Qzg2QTlFRCwKKzB4NUJEMTk4OUMsIDB4NTdDRTU5NUMsIDB4REYyOTFBRkUsIDB4RUFGMDA4ODcsCisweEQ4REQ0MjU5LCAweERGNjczMzFFLCAweDUwRDBDRTg4LCAweDFGRDA5MEFFLAorMHg2MzJEQTVGMCwgMHg5NTI3MkE1QiwgMHgzMTE3MkYyNSwgMHg1NDdGRDdERiwKKzB4QUZCRTExRDksIDB4OTcxODlERkMsIDB4QzQ4ODExOTEsIDB4MUM5MjM2NUQsCisweDg0M0RFRkRFLCAweENGMEEzOTlCLCAweENGMzI3Q0FGLCAweEREQUYwQkNFLAorMHgwM0FBN0EyRSwgMHg0MTFBODY2NCwgMHg2Q0NGN0NEOSwgMHg2MTA5N0VGNSwKKzB4MDdGMzk0MUUsIDB4NUJDM0VCNzUsIDB4Mjc5MTk0NUYsIDB4QkVCQjUyNkUsCisweDE4NjMxQTM0LCAweDI1RkVCRjEwLCAweDQxOTgzNENGLCAweEY2NDJEMTc2LAorMHgzNzJGRkYxMCwgMHgyQTFCRUExQiwgMHg0MDBGRjM0NSwgMHgyNTdBMjM0QSwKKzB4OUYxNUU5OUQsIDB4RTA2QUExREIsIDB4M0EwREIzMTUsIDB4MkJBMzBEOTksCisweDBFOUU4MzFFLCAweDFCMjVFRTQxLCAweDhEQjMwRTcwLCAweDlGQkE2RDY0LAorMHhBQjhBQTVFMywgMHg1QTk2MTc3QSwgMHg2QkUwMzUzNSwgMHg5N0UzN0RDRSwKKzB4QUNBMjRGMjYsIDB4NUYwMDk2RjcsIDB4NUQwMjcyMkYsIDB4QUY4RjNFQzcsCisweEE2ODI0MTUxLCAweDcwRkFENDA2LCAweERFQkE4NTEzLCAweDk5QzYzRTM0LAorMHgxQ0M0QTNERiwgMHg3Rjc1NjUwOCwgMHhCNzM4NjUyNywgMHg2NDdDN0ZCOCwKKzB4NDNGMUY0REYsIDB4QzdFNEVDMTgsIDB4MzAyQkExMDksIDB4RDVFOTE3NUIsCisweDgyODU2Rjc3LCAweDBGNkQ0NUQ5LCAweDk1QUUyOEI5LCAweEU2MzM4NUMzLAorMHg4RkIyNjYxOSwgMHhCRDk5RjI5OCwgMHhDODg0Qjk0OCwgMHgwQjU5NkZGMSwKKzB4RTA2MUMzRjksIDB4QkMyRjlBODEsIDB4QzQ4OENEOTEsIDB4MzcyRUY1OTAsCisweDNEQTFCRkU1LCAweDEwREUwMzdCLCAweDcyMTBCNERDLCAweDc0RTRFRkY4LAorMHg2MzY1QUZEMiwgMHg4Q0VBQkM4NSwgMHgxRDhGRkQ0MywgMHg0REUyNDNGOCwKKzB4RUM5NzZGRDksIDB4QUQ4Mjc3NjUsIDB4QzY3OUYxNUQsIDB4QzEyNUVDMzEsCisweDk1RDM0ODFDLCAweEM0RUE2RUFDLCAweEM4RkMwMTRGLCAweDEzNTJFQjY2LAorMHg5QzQwMEVCNSwgMHgyMjdCRkFCOSwgMHhCMTJCRjk1OCwgMHg4NUI2RDc4MiwKKzB4NzhCNkU0NEQsIDB4RTIyMzJFRUUsIDB4NEYxMDE3MTEsIDB4OUFCRUJGNjksCisweDY2QUNDNjgyLCAweDA0QUQ1RjU1LCAweEU0RkM2MjM4LCAweEJBM0QyMjY2LAorMHhBMkJBMzE3MCwgMHgwODNGMzlBQiwgMHhGRjIwNzVDNCwgMHg5NDVDNEIwNSwKKzB4NDFFOEMxMTMsIDB4RUM3Q0FENjcsIDB4MzY1MzczM0UsIDB4MDM1MTBDM0IsCisweDFFOTczMTU4LCAweEZCRTUwN0YzLCAweDJDQ0Q4RDlBLCAweDZFQTk0NDJGLAorMHgwRDQ4REU5NSwgMHhDNTE3QkZBRSwgMHgwNEVCQjVDOSwgMHhFRkFCMTgyMywKKzB4RDVGQkZDMEEsIDB4Njg5MEYyMTIsIDB4QTFDMDBDQ0QsIDB4NkRENTYxRTYsCisweDIwRDM5QjFDLCAweDU2MTEzRkJBLCAweENGM0E3RkQ3LCAweDNBQjVBMERCLAorMHgzNjU2NTcyRSwgMHg3QkM0OENEMywgMHg4OTAyQUUzNiwgMHhEM0U5NEFGRiwKKzB4QzA2RUI0NDcsIDB4Q0M1MTNDMEMsIDB4MjU0NEI3REQsIDB4NkYxNjg4NzcsCisweDUzMTYyNjA3LCAweDQ2MURDRUYwLCAweEY0N0FGMkJCLCAweDhBRjlGM0NDLAorMHgxRUVGRjlFNiwgMHg1N0NGQjZCNiwgMHg3RjcxMjQzOSwgMHhBQjIwQzkzRCwKKzB4MDQzRjkwMDMsIDB4NjBDODA4QkMsIDB4ODZDMjEzN0MsIDB4NDZBREI0NzQsCisweDg0OEI2NUYyLCAweDU1NDQ3ODlCLCAweDE4RTlBRUM3LCAweEM4ODk5MTNFLAorMHhGRUI3OUIyRiwgMHhBM0ZCRTUxOCwgMHg2NzkyMjQ2MywgMHg5Mzc0NjM5OCwKKzB4OTY4RTE2MEYsIDB4OENBODU2QTQsIDB4QTA0MDIwMkUsIDB4NjYwQzAwQzYsCisweDhGMEE4RTYyLCAweEUyQkE1NERFLCAweDRCRDBDMTE3LCAweDFBMUEzMDkyLAorMHgwODZDQUEzQSwgMHgyQkJBNTY3NiwgMHg4OTYxMDE3NiwgMHgwMEVEMkY5NywKKzB4QzcyMTMwQzcsIDB4NUEwNTM4ODAsIDB4NzI5OEU1NTMsIDB4RDY3OTcxRUEsCisweDBENDFFNDc3LCAweDJGQTgyODVGLCAweEI4NTZBMTkwLCAweDEzMkRCOTE2LAorMHhDREZGREQxMSwgMHhCNTUxOUE4MSwgMHgxQkM3MDAxQiwgMHg5N0M4MjREQywKKzB4QkI0QzcwN0YsIDB4OTAxNjZEQzIsIDB4NDJERkFCN0EsIDB4OTBFMzMxODQsCisweDZDNkI5NDBDLCAweERDNTUzODE0LCAweEM0RjVFN0FBLCAweDk5NDM0QUU5LAorMHg4MkJCMDlENCwgMHhDQjBBN0RBMywgMHgzQTgwMzNBRSwgMHgwNTREMzQ4MSwKKzB4RTIwQUY3NjEsIDB4MjVGNUYyNTQsIDB4N0FEM0FGM0EsIDB4MjNBMzRDMjksCisweEExOUM1N0JDLCAweDM5QjU3QUQ5LCAweDU1RTFFQzU5LCAweDVFQ0E0MTk4LAorMHhEQjkwOEJDRCwgMHg0ODcxQzNGNCwgMHhFNzA5MTMyOCwgMHg2NEE5QjZFQywKKzB4MUNDQUIyRjMsIDB4RURCMjI0MjMsIDB4RkZCNkE3MTcsIDB4NkZBMTM1NDgsCisweDM2MUZGNzExLCAweDI0NjY0MDE3LCAweENCQkY5OTcwLCAweDgzQTdCN0RFLAorMHg5QjcwNDY5MCwgMHgwMUEwQjg3NywgMHg5NTA0MUI2MCwgMHhDMDQ4RjNFMSwKKzB4QTMxNjI1RjIsIDB4RTNERkJFMjcsIDB4RjY1NzI5NUIsIDB4MUY1QzNBRjUsCisweDYwRUUxNjM3LCAweDU3NUVERkFDLCAweDcyNTg0NEZCLCAweDI0MjcyM0QwLAorMHgwNEZBNDZGQywgMHgxQThDM0Y0NCwgMHgwRTAzQTVGRSwgMHg4Nzc4MDc5RiwKKzB4NjA2RTRFMUEsIDB4N0MwQUYzRDUsIDB4OTU3OEIyNjYsIDB4NjNCQ0U3NjUsCisweEE4RUQ2NkQ5LCAweDkyNDIzNzdBLCAweDgxN0E1RDVFLCAweEQwOTgxQTk4LAorMHhDMDdGMkU3RiwgMHgwRTY2Rjg0QSwgMHgzNjM1Rjg1NCwgMHhEN0FEODM1OSwKKzB4RENGMjMyMzAsIDB4QzFCOTA4NEMsIDB4QTc5ODdGRTUsIDB4QzNCMjdFQjQsCisweDFGNzQ3MDYxLCAweEZEMjc4NjAxLCAweEI2RUQzQjVBLCAweDlDRUY4QUEwLAorMHhBNTAyM0M0NiwgMHhCNDk4MzJBRiwgMHhCMTIwNTVGRCwgMHhEODUzMTBFMSwKKzB4MkMxOUFERTYsIDB4RUZCQjE3QTgsIDB4QzI0NkE0QzcsIDB4QkU0QjI2NjYsCisweDEzQzJEN0Y5LCAweDUwMDYzQkExLCAweDlCMDBFMDJELCAweDMzNUI5REY4LAorMHhENDI0QUYyNSwgMHhCQUU0MEM5MiwgMHhFODdCRDZCNywgMHgzODREMUVCMSwKKzB4OEI5MUU4RjQsIDB4OUUzRkM2RDUsIDB4NkJCMUE1MUUsIDB4MjFBRTU1MzMsCisweEZDQjhFNzEzLCAweDE4OEI2NkIxLCAweDY1NzJFOUVELCAweDk4ODI5MTc4LAorMHg3QkFFOENCRiwgMHhFMDBDMzJCNCwgMHhEQUZDMTRENSwgMHhFQThGQzc0NiwKKzB4MkM4RDcxMkUsIDB4ODlBMDVGQzksIDB4OUEyNzQ2NDEsIDB4QUMyNDUwQUQsCisweDI0Mzc3ODRGLCAweDNCMUI4MEYwLCAweDBCNEEzMUZELCAweDI3N0MwMjMyLAorMHhGRERDNjgyOSwgMHgzRjNDNjA2QywgMHgwRUY2MjM1MiwgMHgzRDA3RDA0QSwKKzB4NEUwOTM5RTgsIDB4RDU5QkYxMTUsIDB4QTAyNzUyRTcsIDB4NDJCRjcxMzMsCisweDlGQTA5MzlFLCAweDY0NzY0MTA5LCAweEQ1RDAzRUJBLCAweDNENDQzM0EzLAorMHgxNzQ5QjQzNywgMHgxMzcyOThCMSwgMHg2NzdCRTM0NCwgMHhBODNDRUY3RSwKKzB4MTc4MTNBMzksIDB4QkM3MTgyM0YsIDB4MjA3MEU5QTcsIDB4Mzg3M0FFRjgsCisweDVBRjFFMjFCLCAweDFGMENDNjkyLCAweEI4RUZCMDRELCAweDFBMUNDNTE0LAorMHhBREVENkMzRCwgMHhERjM1QThENywgMHg2RDkzMjc1RSwgMHg5QzM2MjU0NSwKKzB4NjJCRjc1ODMsIDB4RkM1NkQ5OTAsIDB4MENENkEzMjQsIDB4RjEyQTc5MzksCisweDUyNTg3MDI5LCAweEQwMEQ1RjE2LCAweDUxNjIyNTU1LCAweDExNzhFODg3LAorMHg4MUU3QkNDOCwgMHg5MkJCMUMxMSwgMHgwOTczMzBFNCwgMHhDRjhDNUNBRiwKKzB4RDA3NkQ2QkMsIDB4QkEyOTI5MTgsIDB4RjgzNUE4MjksIDB4NDI4MEE1MUUsCisweDA5Q0Q3ODI3LCAweDExNTgzNDg3LCAweEI4QkEyQ0VGLCAweEQ1OThBRTkzLAorMHg5OUY0RkQ3NywgMHhFQjE1MTExMCwgMHgxNTcxQjA3NiwgMHg2M0YyMTAzQSwKKzB4NTZDNkJGNDQsIDB4OUU2M0I1NTYsIDB4RkI5ODEyMzgsIDB4NUQ4Qzk3OEIsCisweDk1MDFEOTM2LCAweDgyQTFFOTcxLCAweEU1QTRGN0UyLCAweEM2RTM3MjdBLAorMHgwMzMyOUYwNywgMHgyNDhBQ0RENiwgMHg0MzdFOTE3QiwgMHgyM0IwMkIyMCwKKzB4NzNGNzZBQTAsIDB4NzVFQTA2QzUsIDB4RDdDNjYyQjMsIDB4MjY3Nzc3RjgsCisweERDOTZCRjA2LCAweDU0MDIwMzQ2LCAweENCREYwNjlCLCAweDAzMDEzM0VDLAorMHhBN0VGMUMyRSwgMHg1Njg5NTlBQiwgMHg0RkMzMURFMCwgMHgzQTIyODkwRSwKKzB4MjgwRjg2NTIsIDB4MUJEOENCMjQsIDB4OUE4RDkyQzksIDB4NTI3MThERTEsCisweDEyMDMzRkM3LCAweEQ0ODQ5MENDLCAweDY4MUFERUUyLCAweEY5MUJGN0I4LAorMHhCODYwOUIzOCwgMHgzNENGNEJDQSwgMHg4RjEyMzI5MCwgMHgwRDBGNEZDRCwKKzB4QzRGNDMzMjMsIDB4MkZDMDRGMUMsIDB4NDY2OUI4OTAsIDB4MUU4RDJBN0YsCisweDA2NThDQUU2LCAweDU0ODlGM0EzLCAweDlDRDM2MkZFLCAweEJBNTE5MEIxLAorMHgwNkE1ODgyMCwgMHg3QTlBRjc1OSwgMHhEQzk0RTY3MiwgMHhFQjI4NEI4NSwKKzB4RjhFRkEwMjIsIDB4MzgzN0MzNzksIDB4N0M5RTlBMkEsIDB4RDJFRDk2QkMsCisweDVEMUU0QzdFLCAweDk3RjIxNjlGLCAweEZDM0MzN0MyLCAweEUwMzlFREYxLAorMHhEQkU5MzkwOSwgMHg4MUZFQUM2QiwgMHhGQ0QzODNGQywgMHgxNzBCOTFGQiwKKzB4MDVCQTMyNDMsIDB4OEZCMkFERTEsIDB4NTJBRkI5ODQsIDB4RTgyNjJFOUEsCisweDFFNzA0NjM4LCAweDg5QjhERkQ4LCAweDE4QzBDNjQxLCAweDI3NjBDN0U2LAorMHhEM0FGRjNDOSwgMHhDNEUzNTQzQiwgMHgwQzBCNzkxMCwgMHgxREVGNzc5MiwKKzB4NDgzRDcxOTQsIDB4OUFBRjU4NjQsIDB4MDg2MDc5NDcsIDB4NjI2RjBDRjMsCisweEMwRjZBNDg2LCAweEVCNDUyNUNFLCAweEE4QkJBOEY4LCAweEU0NTBEQTE0LAorMHgyREM0RDExNCwgMHhCQ0E1MjdDOSwgMHg2NjgyQUE0RCwgMHhDQkI0OEE1RiwKKzB4MUI0NzRDOTksIDB4N0Y1QjUyNkMsIDB4RUM0MzVDMEMsIDB4OUU4RDNFMUEsCisweDY3RDJFQTI5LCAweEEzQjdBRENELCAweDgzMjg1OTBFLCAweDczNDU2MDdCLAorMHhCNjA1NzU4OCwgMHgxQThCMDM0QywgMHg1QzhDQTUzNCwgMHg4MTE1REM1RiwKKzB4MTg5QzJBQkUsIDB4RjFCOTI5MjcsIDB4NzhBM0I2MkYsIDB4NEI2MjFENDksCisweERDMTc2QTY4LCAweENCRDNDMURDLCAweEQ4MjM0OEJCLCAweEVFRjA1RkE3LAorMHhDMEREM0Q4MywgMHhDMUYyQTdCRiwgMHhCMjA3OUQwMCwgMHgxNEI1NzMwRSwKKzB4NzMyMDNDRDcsIDB4QTg2NzI0MzMsIDB4QTE3MUZGRUQsIDB4OUYxODEyMDAsCisweDRFMTZBNUM4LCAweDU2RDhBQzMxLCAweDczODAzRDg2LCAweEQ0Njg1Q0E0LAorMHhFOERFOUZFMiwgMHhBMzVEMkNFOCwgMHg4MDhDRjNFMiwgMHgxOTg3MDBBRSwKKzB4MDAzNDE2M0YsIDB4NTdCQzc2RkUsIDB4MjcxQUNGOTMsIDB4QUEzQUY2RDAsCisweDM3MDAzQTdFLCAweDQ1MEI3NEY0LCAweDE1NzQwMUNCLCAweEI3OUREREE4LAorMHhENjBBQjdBNCwgMHgzQTRDODc3OSwgMHhCNjk5MEZDOCwgMHhBMTY2OEQ1QSwKKzB4MDVCNzk2NUYsIDB4NzgxNDM3NkQsIDB4RkEwRDJEOEEsIDB4RDk3QTExNDIsCisweEU4MDRERTNELCAweDQ5MzkwODlFLCAweDc4RDQwQ0FDLCAweDAxREVGNUVBLAorMHgzREQxQ0FEQSwgMHg5NjQ2NTk1NiwgMHg2MzU4Q0ZCNiwgMHhBQ0UwMkRFNSwKKzB4QjRDOUY2Q0UsIDB4RTlDOTVBRkYsIDB4NzBFQUQyOEUsIDB4NTg4MDM2OTMsCisweDg5RUY5OTcyLCAweDU4RjAyNzNGLCAweERCMTdBMjc3LCAweDBCMDgyQjk4LAorMHhBQUIxM0FCRCwgMHhFODYzODFFQywgMHhDMTg5MjRENCwgMHhFMjhENDM0OCwKKzB4QzIxODk1QUIsIDB4RTE3MDczQUQsIDB4OTQxNzUzOUIsIDB4QTA0M0U1RjUsCisweDg4RkZEMDI2LCAweEQ5NzJGMDE3LCAweEQwQzhCOEQzLCAweEIzNEYzRDY3LAorMHhDNTI1RTRCNSwgMHgwMTg5QTVBMSwgMHg1OTIyNEEzNSwgMHhBQTE4RjJENSwKKzB4RkM5RTE3MEMsIDB4MTZEMzc5NUEsIDB4MzVEQjA5RkEsIDB4MTYyNERCMUQsCisweDRBNkUwNTlGLCAweEM1Qzg4QTkzLCAweDkwNTFEMzczLCAweDRCMTJCMDlDLAorMHg0MDg4QUYzOSwgMHg3MDUzOTRGNiwgMHgzNjBGMkJBQywgMHg4QTFGMjQyMCwKKzB4NjQxRDRGQTUsIDB4QTc4Qjc4RjksIDB4QTVBNTMwMkUsIDB4NjkxRDIxMDgsCisweDdDRkI1N0ZELCAweDE4MTJGRTY4LCAweDhBMkJCNUUwLCAweEYxODFDQTE0LAorMHgxODQ2ODQ4RSwgMHhEQzA0NEY2NywgMHgxN0ZDQ0EyOCwgMHgyMUQ3QzVBQywKKzB4NEM0MzQzMkYsIDB4QzQ1N0UyNkUsIDB4QjBDOUFERDIsIDB4NzkxRUUyQjQsCisweDYyMEYyN0JFLCAweDIyOUUwQjFFLCAweDc0NkI0RkZDLCAweDAyMDM4NzM4LAorMHgxQzdCOTcxQiwgMHgwNTE5MzQzMCwgMHg4NjQ1REJENywgMHg1ODY3OEY5OCwKKzB4MTQxRTkxMkQsIDB4RDg5QzU4N0UsIDB4OUZEN0I0M0YsIDB4MjE4NTFENTYsCisweDcyNTMxMUE3LCAweDA2MDVCMUIyLCAweEMxOEJGMkI3LCAweEM2Rjc5RUE5LAorMHhCRDg0QTAxQiwgMHhDOUI3RjJEQSwgMHgwNEU0N0VFOCwgMHgxQzFBMTRGNSwKKzB4QkQ1QjRGRjEsIDB4RTE1RkJDMkUsIDB4QzRENDNGMDEsIDB4NUQzOUFENEEsCisweEJEM0JEOTgzLCAweEIyMzE0QTRCLCAweDhEQUJBNjdFLCAweEI1MjYzQjVBLAorMHg5OTEyRjI2MiwgMHg4MjY1OUM4MCwgMHhDMzYxMDE4MSwgMHgzRjIyOTAxNCwKKzB4MjY4NTUzMkYsIDB4Q0U0RUMyMTAsIDB4RjQ2QUIwOUEsIDB4RkFGQTY5QzgsCisweEQxMjkyOTQ0LCAweDJFRjg4MEQ5LCAweEQwM0FBRUFCLCAweDBFODNDNDM1LAorMHg4NDJDNDgyQywgMHhBNzA5NTFBMSwgMHgwRTRFQTA3RCwgMHhFMDMzMkQwQywKKzB4M0VBMjdFNTUsIDB4MDQ3MjE0MjUsIDB4N0M4QjU2REMsIDB4OTYzOTEzMTIsCisweEY2MDBENzhDLCAweEM4NTA1MTdDLCAweEIzRjlGMkFFLCAweDU5QTk5MzUxLAorMHg4RDZBQTgzOCwgMHhGNTg2NjcyRSwgMHhEODFGRTUyNSwgMHgzQ0VGMzFERiwKKzB4QUJEQzcwNzksIDB4NkUxQkI4RjYsIDB4NkI0NUI4N0IsIDB4OUZEMkNBQzQsCisweDY0OEUzNTdBLCAweDZDNTdEMzBCLCAweDIzNzY2QjY0LCAweDhDOEJEOUMxLAorMHg5QTI5MDAxQSwgMHgyMDZGNDdFMywgMHg1RjQyM0Q3NSwgMHgyOTNBMzJDNCwKKzB4RENDNjQzMkIsIDB4QTQyODA5NTQsIDB4NDU3NzkwQjgsIDB4MTFFODRDRUYsCisweEFCMTFEMEJGLCAweEQwNDI1OEUzLCAweEZCNDRDMENFLCAweEVEODIzMUIyLAorMHgwMjc3QTZCMiwgMHhEOEU1QzUxNywgMHhDRURGNEM4QiwgMHgxOUQ5MDE3MCwKKzB4MjA1NTU1MzIsIDB4RkNCNjEwQjksIDB4ODhENUY1QTksIDB4RDM1REM3N0UsCisweEVGNUVBNjg2LCAweEQ4NjY5NTlDLCAweEYwODg2QjU2LCAweDAwNUNGQjkwLAorMHg1ODJBRDI1NSwgMHg3MzgxMjg5RiwgMHhDMThDRUQ0RCwgMHg0NDRGMEE2QiwKKzB4OTkxN0FFNTYsIDB4NTA1QTdCQ0QsIDB4Q0JEQzkwM0IsIDB4NTFFRjBGM0MsCisweEM0RTZBRjVBLCAweEIxNDhBRDJGLCAweDYwOUExMjRBLCAweEI1REE4OUU0LAorMHgzQTY4QzdENCwgMHg5ODY5NEYwMiwgMHhFODVCMTc2NiwgMHg3NTRCQTVGRiwKKzB4MTI5NkE1OEUsIDB4Mjc3MzY4NDMsIDB4OUI2MjgwQkQsIDB4MjY4NjAzMkQsCisweEI0MjhBQzA0LCAweEIwNkRCQTVDLCAweDYyNUZFMDM0LCAweEQ0QkNCMjVFLAorMHhDOTFDNUIzQywgMHg3M0JCNzBFNSwgMHhBMjZBNDc5QSwgMHg3MzE3MzIyOSwKKzB4M0FBMTIzNUMsIDB4RTE2MTcxRDEsIDB4NDJEMEQ0MkYsIDB4RkM2MjQ3NTIsCisweEYxRjVEQ0MyLCAweDFCNkYyMEE5LCAweEZGOUQ2MjZELCAweERCRjA1MkMwLAorMHg5MEUzOEQyMywgMHhGQjcyQ0M1RSwgMHg5MTg2NTE5QywgMHhGMjMzMDA5MywKKzB4RTUyNTEzODUsIDB4QTAwOTQ5NzcsIDB4RTgzRkEwNjYsIDB4MkUzODlDRTIsCisweEQzQTYyRTcyLCAweEE5NDIyQThCLCAweEM2MUNGRDVCLCAweDFCM0E1MTZBLAorMHg1ODA4NzgwMCwgMHgzQTQ3NDYyQywgMHg1NTdEREQ4QiwgMHg5NEZEMjFENCwKKzB4RTFBRUE5NDIsIDB4NEIyQ0M1MzIsIDB4QjIxODVCMzYsIDB4RENBMTUyNTksCisweDFEMDQ0RDdELCAweDc4MTMxN0I4LCAweDQ5Q0IxM0U3LCAweERBQUZGQkM2LAorMHgzMEEwNTY0NCwgMHg3N0IwNUYzNywgMHgwNjVBNTY3QywgMHg5NDcyMUM3OSwKKzB4NDczMTZDNjAsIDB4NThBQUM3QzksIDB4NDEwMDgxQUIsIDB4N0Q0QTM2RkEsCisweENERjIzNDU1LCAweDE4NzNFRjg3LCAweDE4Njk4MkI1LCAweDdDNzhEOURBLAorMHgzNTY3RDk2NiwgMHgxMEZGNUU4RSwgMHhEQjg4RTVCMywgMHhGRjFEMzlBMSwKKzB4QjhBMzQ1QTMsIDB4N0E3MjU4RjMsIDB4OTcwNkIzQ0UsIDB4QjVBRENDMjYsCisweDQ1NjFFRjVCLCAweEIwMDJGQkY2LCAweEYzRjRDNkZBLCAweDU3RUM3NUFELAorMHhCQ0YzNzkyNCwgMHhCQzA1QjBBRCwgMHgyQUIxOURBQSwgMHgwRUJEMjVFQSwKKzB4RjMzNUQwOEMsIDB4REZGNzlFMTksIDB4REQ4NkQ0MTgsIDB4RUNFMTE5NTEsCisweEMwNkY0RDUwLCAweEZENjk4REY4LCAweEJBNjE5MkVGLCAweDM2NUEyOENFLAorMHg3NERFQzBCNywgMHhFOTcxRjY3QiwgMHhCRjg5REQ0MiwgMHgxRTY4MzM5OSwKKzB4MTY0QTcxNTgsIDB4QTFFNDg0NzUsIDB4QkUxMzlFOEUsIDB4QkRFQkE3RkUsCisweDc0RTAzQUVDLCAweDg4RUE5NjE4LCAweDlCMDA0OEMyLCAweDY4QzFERDIwLAorMHg4REM5RkM4NSwgMHgyNEI1NUUzQiwgMHg1MUMzOEJEQSwgMHgyRUNEN0IxMywKKzB4NTRENjZDODksIDB4NjlBM0VCQzEsIDB4NEI0RTRGMTMsIDB4QUQzN0I3REYsCisweDAzMEExRDhCLCAweDg1QTExNEQ5LCAweDQwM0JFNDk1LCAweEI1RTQwMzMxLAorMHgzMTZFNzMxMCwgMHhCMzZBQTQ5NCwgMHhEQkZGQ0I5QSwgMHg1QzBFNURBNSwKKzB4MDk5QkE5RTgsIDB4NjY4MjZFOUQsIDB4MEJDNTg0OUIsIDB4MUEyMENCQUIsCisweDA3NDRGQkU2LCAweDJDQjUyMDQwLCAweDhCODg1MzNGLCAweEE4QTQ0QkYxLAorMHg2MkZFQjRBOCwgMHhEQjJBQkM0RCwgMHg0NkYwQjY3NiwgMHhDQkQwNjQ3MCwKKzB4REI2RDcxRUYsIDB4NURDMzU1MUEsIDB4NzFCMzFBNUIsIDB4MDQ2RDRDN0YsCisweEMwNTFBOTk4LCAweDFFQzE5RkY5LCAweEE5RTIxRjlGLCAweDc5NTFFMDgxLAorMHg3OEJDQkE2MiwgMHg5MUI2MjNGMiwgMHg4RUY2QTgxRCwgMHgxMDIzNzU1RSwKKzB4Q0U0N0Y1QUEsIDB4MEVGMjc1MjcsIDB4RTlFNDg4RDUsIDB4RDUzRTRBMjksCisweDc4QTI3NkUxLCAweEIyMTAwNTg1LCAweDAxMjA4RTNDLCAweEEzOEJDQUZGLAorMHgzNjIyMUZCNywgMHhCM0M5MTk0RSwgMHg1MUJENzVENCwgMHg5QzhDNzNBQywKKzB4N0FDQTk5NjQsIDB4MTc4OTBDOTQsIDB4OUZEQTUxRjQsIDB4QzRGREY2ODgsCisweDJDODI0NEIyLCAweDBEODM0Qzc0LCAweDI5MDk3M0QzLCAweDdGMTM0NTUzLAorMHgyOTZEMkZDMiwgMHg0RTA4RUQyNywgMHgxQzUxRTUzRCwgMHgzRDg5MkY0OSwKKzB4OTQ1Rjc2Q0MsIDB4MkU1MzFFNjMsIDB4NzFFRTM3RTAsIDB4OUM0N0YzNDYsCisweDJEOEQ5MjBDLCAweEMzRTQ2NUJBLCAweDNBNzJEMTQyLCAweDVCNkFCODBELAorMHgzNjRDMkFFNywgMHgzQjE4Mzg5QiwgMHhCOTQ0MjQ4NCwgMHg1RDY4N0JCNSwKKzB4OTdDNjVBNEYsIDB4QzdEQkU4QkUsIDB4MEY4NDAwNjEsIDB4NUE3M0VBODksCisweENCQkREOTU0LCAweEFGRTlDQUJELCAweDA2QUJERjk1LCAweEYxMzkzMDJELAorMHgzODA0RkVBOCwgMHg3Q0U2NTQyRiwgMHhERTQ3QjhFRCwgMHhEMzRCRTUwOSwKKzB4NUVCOUM5RTEsIDB4REM1ODI1MzQsIDB4RTc3RDdGQzgsIDB4MkJFRkVEN0UsCisweDRFQTI2REZELCAweDU0NjcwQjgxLCAweDY2NUM0NTMxLCAweDVCN0E3MDIzLAorMHhBMDVEOUEyRSwgMHg3MUJEREIyRSwgMHg5RDUxRDhDMiwgMHhEOEE2NjVDQywKKzB4QTlCODdBMjIsIDB4NTgxRDI4QkYsIDB4RjlENDAzNzMsIDB4RTA0RDhGNjMsCisweDExN0I5ODQyLCAweDg4NjhCOUJFLCAweDgzOTdGQUI5LCAweEVGNUNFRDc1LAorMHhGNzBGOTBEOCwgMHhEM0RGRDNBNiwgMHgxNzc5RjU3NiwgMHgzMDU5NTIwRCwKKzB4QzM4RjRBQTksIDB4NkI3QTZEMEEsIDB4NEU3MzExMkEsIDB4NEZGOURDRUQsCisweEFFQTEzODNBLCAweEJBQjBBQTkzLCAweDQxREJDQkVELCAweDI2Njc3NUE2LAorMHg4RUUwRDVENSwgMHhCNTIyQ0I5RSwgMHhDNkU1RDBEMywgMHg4NkU0QzhGRCwKKzB4QTg5NDY0MkYsIDB4RjY5ODIxQTksIDB4ODhCNDE3OTgsIDB4NDU4NUExODgsCisweDlEMjEzMEZDLCAweEM1QjE4RTBELCAweDZCOTJDOUVFLCAweDNDOTI4OUZCLAorMHgxRjAyQ0JCNiwgMHgzMUZBODZERSwgMHgxQjIyOTVDRCwgMHg1QjREQTE5QywKKzB4MzEzNEQ4RkMsIDB4RTVFQUJDNDQsIDB4REY4QzUwOTUsIDB4RjY1NzE4ODEsCisweDFGMkZCRDYyLCAweEU1ODVGRTYxLCAweDAyMENFREY2LCAweEQ3MEFCQzgzLAorMHg1RjM3NzQ2QSwgMHg2RkRBM0JGNywgMHg1NDM0RTUwMywgMHg0NENGNjkxNSwKKzB4NTYxQjIzOTMsIDB4RUE0QTIyNTEsIDB4QTk4OEMwODAsIDB4RTQ3QjE3OTEsCisweEQzMzVDRkJFLCAweEVEQTlERUUyLCAweDRGNzBGQjIyLCAweDgzQTJDMjlGLAorMHhGNDRGQTAwMiwgMHgwNjlEMjVFQywgMHg0RDUwNDNGNSwgMHg4ODc0NjRDQSwKKzB4NjYxRDFFOUYsIDB4OThCODU2QUQsIDB4ODFBMjNGQjAsIDB4MzY5M0JENDIsCisweENFMEFFQjBCLCAweDFGNkU4MzIyLCAweENCREY1NzFCLCAweDkzNjg4OTA5LAorMHhGQTE2QTc3NCwgMHgyNTgzNDQzNywgMHhFRTc3RkE5OCwgMHg4REM2OEM2MCwKKzB4MTU1QTg3NjAsIDB4MjJCOEZDQTMsIDB4MUIxQkIwNTQsIDB4Q0EzQUZGQ0EsCisweEM4RUFDRUE0LCAweEM4NkJBREQ5LCAweDQ3Mzc3MEFCLCAweDQxRDZFMzk4LAorMHg1NjhCMzk3RCwgMHgwNjVDMEJFNSwgMHg1MUQzOEEwRCwgMHgzQkIzQTBFMSwKKzB4QkMzODZEQ0IsIDB4N0RDQkE2QjAsIDB4MTkwMDcyNTQsIDB4M0Y0RkM3MjYsCisweEYyN0RBRTg1LCAweEY3RkRBNzJBLCAweDZEMEI1QzA3LCAweDY0QTBFRDEyLAorMHhFMjZEODg3OCwgMHgyMTBFNEY2QiwgMHg2NUY5MkMwRCwgMHg0RTRFMkNBNiwKKzB4NUU0NzlENDksIDB4N0IyODcwNTAsIDB4RTlBNDgzNkMsIDB4QzNBMTExQTIsCisweDlCOTBENkZELCAweEE1RjM2MkUwLCAweEFEQzk1MjZCLCAweDc5QjczNkU5LAorMHg3MkE5QTU3QiwgMHgxODFCNEU3MCwgMHg1MjM2RjMyQSwgMHg1NTY3RTNDOSwKKzB4MjNFRkQwNjMsIDB4ODcxMTMxNjMsIDB4Q0RGNkQ0RjQsIDB4RjUzQTg3MjIsCisweEI3MENGOTQxLCAweDc1N0Y0MEM4LCAweDZBNjUyQkU3LCAweEQ3MURBNUFBLAorMHhGODdENTFDMiwgMHhCNEE2OEUxNiwgMHg3NjNEOEZFQiwgMHhCNkRFNTQzNiwKKzB4MTIxODREQ0QsIDB4MzhEMURFOTAsIDB4QjM5RTUyMDksIDB4MTYwMDQ5MkEsCisweDA3M0FFOEY1LCAweDAzNjZBQzBFLCAweDFBRDUwMTRGLCAweDM5OEUwODczLAorMHhENjUzOTI4RSwgMHgzMEI1QjRERSwgMHhBQzY4QTA2RSwgMHg4REFFRjREMywKKzB4NzZBODgwRDgsIDB4RjNCM0JDQzUsIDB4MkI2MzFGNTgsIDB4MzQwOTE0REIsCisweEI0NzcxRENDLCAweDdDOUQ0QTQzLCAweEFGREIxMTM4LCAweDAxNEI1QTgzLAorMHgwRDQ0MTg1RCwgMHgyMEM4OTU3NiwgMHg5OTRCNDM2NywgMHhBODRCRDc5MiwKKzB4QjJFMTdDQjEsIDB4MDBDRTUyMTQsIDB4RkI5M0U1NEYsIDB4MDNDQ0E3RjEsCisweDk1NkE4MkU2LCAweDIyMzI5QTcxLCAweDJBNjM0Mzc0LCAweEYxOEI3QUQ5LAorMHgxRjE2OEJDNCwgMHhDMkNCMUVEQywgMHg4RTBBRjZDRCwgMHgyMTFBRjIyQSwKKzB4QUI1REEzNzQsIDB4NjNGMUYyNUUsIDB4RUM1OEQ0Q0MsIDB4NDhDNjVDNDYsCisweDVBN0Y3NTc0LCAweDdCQTYwMDQ3LCAweDI3OUVGMjk5LCAweEUwQjc3RjQ4LAorMHg2NDdBMDNDMywgMHhBRTdDNEQ4RiwgMHhGNjUxNDlEMCwgMHhBQzlFRjIyOCwKKzB4Q0Q5MEIxQ0QsIDB4Q0VFREE1NEMsIDB4RDhGRDBBNkEsIDB4OEQ3QzIyOTEsCisweEIzOEVGNkMxLCAweDdGMzhFNjc2LCAweERBREQwQThGLCAweDExMjU3MTNDLAorMHhBQTc4QTI5OSwgMHg1NDAzM0YyMCwgMHgxOTlDNzZDNSwgMHhDQUY4MkExNywKKzB4MTZGMkVFOEIsIDB4MjAwNzFEMEYsIDB4MkNBMDAwRjgsIDB4MDE3OEEyNEIsCisweDAwMjlFRTQ2LCAweEE5RDhDNzM4LCAweDEyM0QyQkJELCAweEVGN0NBQzUyLAorMHhCRDI0MTg2OSwgMHg0MzVGOEZGNywgMHhCNTczQTE5MCwgMHg0MDJCRkIyRiwKKzB4RkRBMzA5N0MsIDB4RjM3NjU4ODksIDB4NjhFMkM3RDUsIDB4NEMyNkY4NTgsCisweEQ2ODE0RDFGLCAweDZCMDQzQzdCLCAweDE3M0RCMDkxLCAweDk1MTI2QzdDLAorMHgwRkU4RTFCRSwgMHhGREVCMjMzQywgMHhCOTc5QjBDQiwgMHgwMEUwMDY1OSwKKzB4MTk5NTJFNTIsIDB4QTA5NzZGN0UsIDB4MDJGQjQ2MkMsIDB4Nzk4ODE1QzgsCisweEEyNTA0RUZFLCAweDBGNDgxMUFELCAweEJBOEYxMjJFLCAweDVFRTU4NjRGLAorMHhEMzlCNjc5OSwgMHg1MzE5RjZBMywgMHhGNkE2NjY4NSwgMHg5ODhEMTA2RiwKKzB4N0FCQTUyMjAsIDB4MDMyMDM4NEIsIDB4NERFNDhDNzksIDB4RjVDQjM2RTYsCisweDJCMzMyNzBGLCAweEZGNEU2OTY1LCAweEQ0RDg0M0Q1LCAweDdFRUU4NjFDLAorMHhBOTZBRTVFRSwgMHgzMTBFNTIxNSwgMHg2RDIwMDY4RSwgMHhCMTQ5QUU4QiwKKzB4MDk5N0Q5RUYsIDB4NTA0M0ZGRkEsIDB4MDUxNkUyQjYsIDB4M0ZDQ0RBMzIsCisweDhFNjA0QTA0LCAweDIzMDEyNzc4LCAweDk0NDRBNDc0LCAweEI3RjVEQzI0LAorMHgzQTU4RTZGQiwgMHgxN0I3NTlGQiwgMHhGMjlDMUVFNywgMHg4ODkzRDJEMSwKKzB4QzZDRDIzNUIsIDB4QUFCMENCQ0UsIDB4MkQ4NDQ3NEMsIDB4OEEwQkUwMjcsCisweEZEQjg3RkI1LCAweEU2QjUwN0JELCAweDE5QjQxOTI3LCAweDc4M0ZGNERBLAorMHg0ODVBMUQ1RCwgMHg4RUQyODVDMiwgMHgyNUFGQzRDNSwgMHhCRjBENjYyQiwKKzB4QzQyMzg1MzIsIDB4NDMzOUZDQ0YsIDB4MTRBNzg0QjYsIDB4NzE2NjU4MTksCisweEVENzZFNDczLCAweDVGMUJBRTlFLCAweEQwQUVDMTdCLCAweDRDRTc4ODE0LAorMHhEMzYwOUY2MSwgMHhENEU0OUVCMCwgMHhFNEUzRUZEQSwgMHg5QjdDQUQxRCwKKzB4RUYwMUFCQjcsIDB4RDEzN0JFRTksIDB4RUU4N0E4MUQsIDB4RDRCMjA0RkYsCisweDAwQjI1NzM3LCAweDI3NzBGQkQxLCAweDE3NEFGRjdGLCAweDBBNzdBMjFDLAorMHhGMUIzNzBFNywgMHg5QzA5M0NCMCwgMHgwODBDMUZGQSwgMHg4M0NFOTJEOSwKKzB4MTcwNzQ3MEMsIDB4MzMwMzQ3OUYsIDB4MjVGMUI2QUYsIDB4RjQwRUVCN0YsCisweEI5OEExNjc3LCAweEE1NEExQkEyLCAweDQzQjQxNDRBLCAweDJGMDkyQTM1LAorMHgzMzI4NkE3NywgMHhBMEFCOUM5MywgMHg0RjhENzBEQywgMHgzQTQ3QkY2RiwKKzB4QjYyMDlBQjUsIDB4QTRDOTQ1NTcsIDB4NUU3NTcwNTUsIDB4NzA2RUFEOUYsCisweDQ2N0JDMDJBLCAweDY0NzJBODU3LCAweDQyMDU1QzU3LCAweDY2RjJCQTYwLAorMHgzM0MwNTM2RiwgMHgzMjQwQkZCRCwgMHgzREQ3NEU2QiwgMHgxRjU4QTU1MiwKKzB4ODIyRTk1NzcsIDB4RjQ5QkZFNzcsIDB4NTQ5MERDNkQsIDB4MUQzMkJCQTAsCisweDFDMzBCMDcyLCAweDc4QTRBNUMwLCAweDFFRTg4QTU3LCAweDk3Q0FDM0M4LAorMHg5OTEyODYxRiwgMHhDOTE2QkJBRiwgMHhGQzNBN0YwRSwgMHhDQTVFMUYzQSwKKzB4NjMwRjA5Q0QsIDB4RjZDOEMyMTAsIDB4RjBBMTJBNzIsIDB4RjMxNDg2MTksCisweERGMTY3MkUxLCAweEZDRTVDMzkwLCAweDI5Q0FFNTU0LCAweEU5ODRBNDVDLAorMHg4QTFGMEEzQSwgMHg2QTAyQzcwNywgMHg4Q0ZCM0VENiwgMHhDMEE3NDFCRCwKKzB4N0E4NzFGRTUsIDB4OTEwMjFBNjksIDB4NTA1RkIwNUEsIDB4OEY4NTIyN0IsCisweEMzMDBBQ0YxLCAweDBBMUIyMDFCLCAweDIyNDYxNEIyLCAweDU0QTIzNTc2LAorMHg1MzYwQTVCQSwgMHhEQ0QyM0EzMSwgMHhGOThERjYzOCwgMHg3OUZGNzlENywKKzB4RUFDOEVBQzMsIDB4NEQyMkM2NUQsIDB4REZGQkYxRDksIDB4NTVGRDg4NDgsCisweDRCRkQyMzQ3LCAweEUyQTA4Mjg3LCAweEU2QTQ4ODI0LCAweDgwNjI1RUE5LAorMHg3MUFCM0Y3RSwgMHg5OUI4NERFNSwgMHg2NTEyQURCRSwgMHhGQkYyNEM0NywKKzB4M0VFRjI1NjQsIDB4MjNERjlGMUIsIDB4MjRCRTUxOTksIDB4REVERDcyRDUsCisweEEyRkUwNjNCLCAweDRGRTUyMEIxLCAweDlFNEU3QkJFLCAweEQ2MTVCREJFLAorMHhDMTRFODE4NCwgMHg0MEY4NkZCMSwgMHhENDAzQTY1QSwgMHhDNUFGNjM4NiwKKzB4NDEyRjg0MzQsIDB4NkQ2MDEyQjAsIDB4NEVDNTcxMDcsIDB4M0Y3NkFGMTksCisweDU0QTMwNUJELCAweEVBOUM0RUIyLCAweDU4NEUwMTc2LCAweDIwNzU5ODA1LAorMHgxQTE2Qzg0QSwgMHg1MEJCMTBEQiwgMHhFNjEwQUY0NSwgMHg5OENGMUVBMCwKKzB4M0Y4Qzc3NTYsIDB4RjkwNTZCRTAsIDB4QkFBNjZCN0QsIDB4RjcwNzZEQ0YsCisweDY3RjE5OTRELCAweDkyQkZFQjYyLCAweDg2RkJERTE3LCAweDM4OURCMzExLAorMHgyQTE3MUY1QSwgMHhFMTQ4OThCMSwgMHg0RDExNzIzRiwgMHgyOTg4OTA2MiwKKzB4Q0JGM0RENzksIDB4MkI3NDY4RkMsIDB4NEZCOTM3NzAsIDB4QzVGQ0VGRTgsCisweDhGRUU2Njc4LCAweDlGNEFCQTlDLCAweDZBNkIyM0UxLCAweEZFQTcwNzdGLAorMHhDODM1RjczNCwgMHhDQTY3ODA3QywgMHgxQkZCRUI0OSwgMHhCOEIxRTg0MiwKKzB4NkE4NTA2MjMsIDB4MDAxQzFFOEQsIDB4NzgyQUMwMUUsIDB4QTI4QTcyRDgsCisweDZDRDY2RkMxLCAweDc3RUY2RjEzLCAweEZGNDBEN0NGLCAweDRBMTYzREZCLAorMHhEQjIxQUE4OSwgMHgyOUQwM0E5RSwgMHgzQTREMUQ1NywgMHg3QTg5Q0RDOSwKKzB4QzU2MjNFMTAsIDB4OEE0NDQ3OTksIDB4MUY2MjBERjQsIDB4RkY4NzY3NTgsCisweEM5REVFRjJFLCAweDdGODY5MTFFLCAweEUzMTk2MDkzLCAweEEwMEVCNDIyLAorMHhDREIxNzQzRiwgMHg0QUFEMTk4OCwgMHg3MDE2NzcwMCwgMHg3MDU5NUM1RiwKKzB4OEU2NDgwMTMsIDB4NDAxRDg3NzAsIDB4Qzc2MkYwRTcsIDB4REI3NzY5MjYsCisweDJCREM1NUIzLCAweDhGNEFEMkMxLCAweDFBMkVFQjUwLCAweEJENEJGMkE0LAorMHhBNDNGRkU5MCwgMHg3NTI5MzVFNywgMHhCMDJDNzgwMSwgMHhERDRDRDNEQiwKKzB4MzgxNUMzOTQsIDB4QUY0Mjc2OTUsIDB4NzQ1NUE4RjksIDB4QzQ0NEM3RUMsCisweDlCQzlCMkM1LCAweDA4NDIzQkE3LCAweDVEOTFBREQ4LCAweDU5RDg2NkRCLAorMHgwQUQzMjI1OCwgMHg3QkMzOTdGNiwgMHgwRUY3REI1OSwgMHhDMTAzNDMyMCwKKzB4NzkwNzM0MDYsIDB4OTkxQTEyQjksIDB4OUQ2Nzc2QTAsIDB4NjM0OEE1RUIsCisweEJEOThDREM0LCAweDgxQTZDNUM1LCAweDc2QTNBQkE2LCAweEZBOUNERjc3LAorMHg5Nzc3MkI1OSwgMHhEOTg3RTQyQiwgMHhBNEI4OTNENCwgMHg2MUY3OEUzOCwKKzB4ODI1Njc2OTEsIDB4Q0I5MUNENTgsIDB4RUVGQTY5QUUsIDB4RjdENTExNzgsCisweEE0MzZDNTc4LCAweDk5RTg2RTA4LCAweEE4QzNCMTZCLCAweEQ2MDkwNTRGLAorMHgxRTBBRENFOCwgMHg1REY2RUYyMCwgMHhFQjNDQzQ1QiwgMHg5RkFFQTI0RiwKKzB4OTdGNTdGMTksIDB4NjZFMjcxM0YsIDB4NDJBNDIzQzMsIDB4MkEyMUIxN0MsCisweDZBNEM2QjQwLCAweEZBMEY0RjJCLCAweEQxRjNGNjRBLCAweEQwQUFGQTUwLAorMHg3NjdEM0FDMiwgMHg4MzdFNjI2RCwgMHgzQjIxMjc5QywgMHhDQUUxODg1NSwKKzB4RkE4Q0EzODUsIDB4QTkxQkRFNDUsIDB4MUE5NTMzMjcsIDB4NzMzOTQ4Q0MsCisweDE1OEI4Q0QyLCAweDkwNEFDNDNELCAweEE2QkM4RjgyLCAweDU1RjAyN0RBLAorMHg5NUI2QkIzMiwgMHg5MjY1RkY4MCwgMHg4RUVGMEQyNCwgMHgyOEY2Nzk2RSwKKzB4MUQ3MzY3MDAsIDB4QjYyMUQ0RDYsIDB4QUIyRjFBNEEsIDB4RUNEN0RCODMsCisweDM1Q0FENDE5LCAweDYwNjA0OTE3LCAweDVERTUxMzM1LCAweEEzRDdFMTIyLAorMHg2ODVEMDRENCwgMHg0OTQ3MzlENCwgMHgwMDYwNzIyQywgMHg1OTE0OTcxOCwKKzB4MDNDOUYxNDQsIDB4NDMzMjg4MTgsIDB4QkIxQUUxODksIDB4Q0E3QjkyNTAsCisweEM4MzU2NjZELCAweDgzOTUwMjIwLCAweEQ3NzQ0MDVGLCAweEY2RjRGQ0NFLAorMHgwRTM4Nzk0RCwgMHhBRjE4NEE3RSwgMHhFRjY2RTE1QiwgMHhBMEMyQTc0RiwKKzB4ODc2MTEyRDUsIDB4N0Q2OEM5Q0YsIDB4ODkwMjAxMUMsIDB4NkFCMEUxMjgsCisweDJBNTE1NTIwLCAweEE5OUQxREEwLCAweDlFQUNFQjRELCAweEI2NjlBQThGLAorMHg2Rjk2RENFMiwgMHhDRkVCNUNERiwgMHg0NkVCMzZCRCwgMHhFRERGODMxNywKKzB4NEZBMzBDM0UsIDB4OTU0MUE4QTEsIDB4QTVGNzU1MzMsIDB4RUZFMUZFRjYsCisweDdGMjFCNDgxLCAweERBMTFENUVBLCAweDY0NjQyMDY5LCAweDA4M0QyMTM3LAorMHhERjUwODcyNiwgMHg4RjZDQ0M0QiwgMHhDNTQxMkQwQSwgMHg2QTlGNkJFQSwKKzB4M0UzQ0M1NEYsIDB4MDc4QkJCMUUsIDB4QTYwNDc0NjgsIDB4RjFGQTM5QzIsCisweDI2MTQzNDM1LCAweDkwMTMyRUIzLCAweDQyMTY1ODBDLCAweEY2NzczQjhDLAorMHhBNkIxODhCRiwgMHhFM0I0OTUyMywgMHg4OUU0NTYzRiwgMHhEMEIxNjUzOCwKKzB4MkQ5MDc5RkQsIDB4NjlBQkRFMzYsIDB4NjY5QUM1RUIsIDB4RDA2MThERDksCisweDUwODBCRkVGLCAweEFEQzA1NkQ2LCAweDcyNDAyQzlDLCAweDBBRTc5RTA3LAorMHg4RDZERjQ4RSwgMHgwNTAyODM3RSwgMHg3OUJBMTdBRCwgMHhFNDg3MUM4OSwKKzB4QzQ1NTRDRDUsIDB4MjNGQ0IyQTQsIDB4NjQ2RkE5OTksIDB4MjEyQTlEQjgsCisweEJEMjNERjBBLCAweDg5MEI1RkU2LCAweEI1RDAzMjkyLCAweDlGQTNGRDU5LAorMHhENjEyRjhCMSwgMHg2MTEzNjVGQiwgMHg3RTdDOUZBQiwgMHgwMjQxOTREMiwKKzB4NDZDMkM2MTcsIDB4QUVCMEZBRDksIDB4QUU1RDNBN0UsIDB4RUE4QjBBQkIsCisweDc2MDczMEE0LCAweDUwNDQzRTc2LCAweEVDQTY0MzQxLCAweDUzOEU1MjU2LAorMHg4QTg1MDVGNSwgMHhFMEU0REMyOSwgMHgxMDVEQzU2NCwgMHhDNzNEOTNEOSwKKzB4RTNGMjdDOTAsIDB4OENDMDFGQzgsIDB4NDAwRDBGNzYsIDB4RENEMDExMzAsCisweDFFMzQxNkQ0LCAweDRDNjEyRTAzLCAweDBCRkU3QTVDLCAweEZEQjE1MzM0LAorMHg1MzI2QTc3RiwgMHg5OTU0OUJEQSwgMHhEREU5MEJBQiwgMHg5MjBCRDg3MiwKKzB4QzRCNEY1REYsIDB4N0IzOUJBQzIsIDB4Nzc3QzY2OTQsIDB4QjQ5NzExMDMsCisweDlFNzgwNkExLCAweEQzMTQxRjJELCAweDJCNDBCQUQwLCAweDc0QUYyNDhGLAorMHhEMUFFRUQ0MywgMHgyRjQ1MzczNiwgMHgxODgwMTA0RSwgMHhGOUNENTAyRiwKKzB4NzY5MUZFNTksIDB4MzlDM0ZFQzcsIDB4NzJFQTdCRjIsIDB4MEM5NEJBQjUsCisweDM1RDZGNTA5LCAweEFFODZBQzk2LCAweDA2MjRDMTgxLCAweEE2OURGNjk5LAorMHg1OTkxRkNFMywgMHhBQjIwRDRGMSwgMHhGMzBGMUJDOSwgMHhCMDk0Q0Y2MiwKKzB4QTNCNUE3MzIsIDB4M0JDOEMzMkYsIDB4RTc3MTAzNzAsIDB4NDI5QThEOTYsCisweEQ4OTEzQTQyLCAweENGQkQwRTRGLCAweDcxMEI3MDc4LCAweEM2NTAxRTkzLAorMHgyNDEyMjRBRiwgMHg5NzhEMjMyMCwgMHg4RUYxMDY0QiwgMHgyNzNGQUUwNywKKzB4MzE2RUMwMkMsIDB4QjNDMTZDMEIsIDB4ODI0OUMyNDUsIDB4MjFBRDExQ0IsCisweDYyNjVGRTU3LCAweEE5RjFENUZDLCAweDBCNTJGMUNELCAweDAzODFEOTgzLAorMHgyOTMxRDZCMSwgMHhEMTI2Q0Q5NCwgMHg2OUQ5NTE5NywgMHg3Q0ZCNkFEMCwKKzB4NDZFNkQ1MEQsIDB4RTYwQkNCRDIsIDB4NzJGQkI0MzYsIDB4Qzk3MUE0Q0EsCisweEE1ODBCOUI5LCAweEJDODIzNTE0LCAweDVEMTVBODQwLCAweDg3QTkxNjIyLAorMHg2MzQ5MEQxMywgMHgyNzcxODlBOCwgMHgyMkNBMkVEQywgMHgxQzU2NDU2RCwKKzB4MUI1RUI4MzYsIDB4RDhCQkYyRUIsIDB4MjBGNTZERkIsIDB4OTkzMjFFNEIsCisweDkyMzhCNzgzLCAweEU1RTVEMDg1LCAweEM4MURBQTExLCAweEVGOEREMDMyLAorMHhDRUMyODY0NSwgMHhGQzQwQUFBNSwgMHhCRkE1RkM2OCwgMHgxQzJDRjdDNywKKzB4QzBERkQxOTQsIDB4NUFCNzMwREEsIDB4RTNGQjU2QTksIDB4QTBBRDAwRTksCisweEI3QkEyRTJFLCAweDU3OUM4NzIyLCAweDA0QUEwN0ZELCAweEY1NUM2QzVDLAorMHhFNTZDRDZERCwgMHhBN0RBNTEwMCwgMHgyQTZCQTFFNSwgMHg5QjdFNTEwNCwKKzB4ODE0MTA0MjAsIDB4REM2MTMwQTgsIDB4M0VDODkzNUIsIDB4Q0MyRUM3ODIsCisweDE0MjM0NEVGLCAweEYwMTZFMENBLCAweEEzQUNGQThFLCAweDAxOUE3MDA5LAorMHhBMERBRUM1RCwgMHhGQTUwMzU2NSwgMHhDOTA3Nzk0RSwgMHg3N0FBNEU2OSwKKzB4QjQ1QjdFNTQsIDB4OTI5QTA1NkEsIDB4NDZBQTRBRTEsIDB4NTVFNTZFREYsCisweEZERDlENzI2LCAweDM1NzQ0RDVDLCAweEQ2ODU0NzAwLCAweDlBNkUxRUVFLAorMHgwQjAwRjZGQiwgMHg2QkU2NUJGQiwgMHg5Q0Y5OERFMCwgMHhEODBBQ0U2NiwKKzB4MUU1MzAwRTQsIDB4NzQ1MzM4REQsIDB4NENCOTI1REUsIDB4QjM2OUIwRDQsCisweDdBNTNBNjA2LCAweEQyQjk2RTU0LCAweDg4Rjk2QjMwLCAweEI3MkMzRTE5LAorMHhDMkE0MTE3NywgMHg2MjA2Rjg3OSwgMHhDMUY2Q0Q3OCwgMHg4NzlEQTc0RiwKKzB4NzYzRjk0MTcsIDB4RDEwOUI3NzksIDB4NkE1OEIzNEMsIDB4RENEN0MyMUEsCisweDFCMEEwMTU0LCAweDQ1RUUzQTlDLCAweDYyQzYwMTYxLCAweDc5RTQ3MDIwLAorMHg0MjI1MEEzOSwgMHg5RTJDMkM1OSwgMHhDRTRGNjIwNiwgMHhDMjk3MDM4NiwKKzB4OTgzQ0MyQzMsIDB4MERBRjBBODUsIDB4Mzg4NjI2REEsIDB4MDZBNTZEMjcsCisweDkyMjMyMDNBLCAweDk2RTAxNDhDLCAweDIyRjBEMDUyLCAweEQ1RjFBQTg4LAorMHgzOTRCQzhCOSwgMHgwM0NGNThGQSwgMHhDMEIxMDczQywgMHhDMTZCMzVDNywKKzB4N0I3Q0Y5RjgsIDB4MkUzQTI0QTUsIDB4QTE5MDg5QzksIDB4NDIyM0ZBRTksCisweDc3NTFEOTc3LCAweDgwMkU3MDYyLCAweDZEMzY1MUVGLCAweDM5RTlCNTJFLAorMHg5NDZEMDdGOCwgMHg4RTJFQUVCNywgMHhGOTI3OUE2NSwgMHgxNERFRTkxMSwKKzB4OEI5MkExNDksIDB4OTYxMTc1NkUsIDB4MDY3REQyMkQsIDB4NTk5MDc5NjcsCisweEIzNDE3RTNDLCAweDNCNzJBQjdBLCAweDgyNUQ4N0M3LCAweENFNUZBODUyLAorMHg1RDg4QzVGOCwgMHhFNzkyQkY2NiwgMHgyOERCM0E0QSwgMHgxMThDQTNBMiwKKzB4Q0M4NjI4NEUsIDB4QTBBQzRBRTgsIDB4MzMzOTRCNzAsIDB4OTc0Rjk2QzIsCisweDg2QUREM0I1LCAweEM4NzI5NUI5LCAweDE0NDdEMjZGLCAweEM5RUNBRTgwLAorMHgxMENBMDFENywgMHhFMDRFQ0M2OCwgMHhBRTU2NTk3RSwgMHhBQUExMjQ4QywKKzB4ODFDMzU0NjAsIDB4MDA4N0NBOTMsIDB4OTQzQUFCQTIsIDB4MEFGQ0JGQUEsCisweEVBNzdENUFCLCAweDAyMEQzNkQ2LCAweEYxQ0NCQkI2LCAweDhERjE0MjZGLAorMHhBRTcyNkQ5NiwgMHhBNkU0QzkxNSwgMHg1OEYxNUY5MSwgMHg1QjY5NkQ2RiwKKzB4MDAwNDJCMzAsIDB4QzZBQzkwQzMsIDB4QkQ4RTAxODcsIDB4RTczRUQyRTIsCisweENFRTY0Q0Y2LCAweDQ4QjU2NDM2LCAweEEzMzk5NENBLCAweEIzRTNCN0FCLAorMHgwNjBENUUxNCwgMHhDMUIxNzZDNiwgMHg0QTc2QzM5MSwgMHhEN0M4REIxRCwKKzB4MzMzRTQ5OTgsIDB4QzIwQkFDNEYsIDB4NTIzQkUzRTAsIDB4MjM3RTg3QkMsCisweEU2Q0RCRUMwLCAweEM1MDZGMTlDLCAweDI2MkMwMDM5LCAweDdGODVBNEFDLAorMHg0NjE2MDY5MywgMHgyRUExQkMzNiwgMHg0Q0FDMERGMiwgMHgwMDY2QjgzRiwKKzB4QkNCQzc3OEQsIDB4N0Y0QUI1MDcsIDB4OTlDQURCMkYsIDB4Qzk1NTIwRDAsCisweEM1Q0JGMDY3LCAweDkwM0VDRDY4LCAweEY1RDdCMEZDLCAweDA4MTk4QzhGLAorMHhBMTc4NzlFQywgMHgxOEMyNzIzRCwgMHg1QTRENkQzNywgMHgwODAxOThCNiwKKzB4MzUyNTE4NkMsIDB4RUY4QkUxNDQsIDB4NDRCMDU4NTEsIDB4MjhCNTAyNUEsCisweDBGREYwODVELCAweERFQjFGMjQ5LCAweEE3QzAwRjQyLCAweDc2MTRBNzM1LAorMHgzQkVCRjQ2NywgMHg3ODcxRDMwNSwgMHhENEY2MzgwOSwgMHg5RDA0NDA3OSwKKzB4RTU4NUQzRDYsIDB4QTg5OTUyRjMsIDB4RjQyQzJCOEUsIDB4MDQxNzlEQTQsCisweDAwQTZDRTg3LCAweDk2Q0E5MkI4LCAweDlERjJCMTU2LCAweDNFQ0YxOEJDLAorMHhERTI1MDlDRiwgMHg1Q0Q4NUZDQSwgMHhGOEE3Q0VFRiwgMHhDQjdEQzI1RSwKKzB4RjI4NDc0NzQsIDB4MzVCNTAxRDEsIDB4MTM3QkJCM0UsIDB4NDUxRTFCQjksCisweEQzNjBEODExLCAweDc5MkIzNDY0LCAweDRCRjg5QTgxLCAweEE3RTlDNDUwLAorMHg2MjhCQ0IwQywgMHgyQUY3MDM3RCwgMHhBNDVGNjI4RSwgMHhGMEVDODc1RCwKKzB4OUNFMzY3N0QsIDB4MkNEMEVBNTksIDB4QTUwQTAyMTcsIDB4OEJBNDVERDcsCisweDE3MzVBQ0YxLCAweDU4MDRDNEQ5LCAweEU2MTlCMzUyLCAweDk0OEY0NEE4LAorMHhBOUJGNUM3RiwgMHg2MTRENEY2QywgMHg2RDlGQ0E3OSwgMHgyOTcxN0IwQywKKzB4NTBCRjJENUMsIDB4RDU4NDdCNTIsIDB4MEQ0RkFBQTUsIDB4MUFBQkNBNUQsCisweDc3OTM5OUUwLCAweDU4QTkwQ0Q2LCAweDM3RUMyNjE1LCAweDYxQjY4QzA3LAorMHhDNDlGNEFFRSwgMHhGQUM0RDg5NywgMHg5QzY4Q0M2RCwgMHhCQjMzNTJGNiwKKzB4RjkzMzQzNkQsIDB4RDMxMDA3OEUsIDB4MkZCRkExN0EsIDB4M0Q4MzlDNEMsCisweDE4NkU2OUVGLCAweENCRTdDQzZBLCAweDc0MzQyMzFBLCAweDgwRjgxMzBCLAorMHg1OENEN0VBMiwgMHgyRTQ2RDcxNCwgMHgzNjcyODZFMiwgMHhBNkUyMDQ0RCwKKzB4QzJBQkM1MEEsIDB4NkZFREM5QzQsIDB4RTJGMjZGMDMsIDB4M0IwMzBENTIsCisweDM2NzREOEU3LCAweDkwOTZERjc4LCAweDkwOTAyODkyLCAweDQ0QTMyMTkwLAorMHhEMDhEMjY0OSwgMHhFRkUwRUQwQSwgMHhDRTFCRjRFOSwgMHg2MkMxOTc1MywKKzB4RkJGM0QxQTgsIDB4RDRBQTUzOTAsIDB4NEIzMkU3N0YsIDB4OTg5NEYwNUUsCisweDQxQjlEQkJFLCAweEU5QjA5NTYxLCAweDQ2Qzg4M0EwLCAweEFERDVENjBGLAorMHg2OUNFNUJCRSwgMHhGRDI5Q0NGMSwgMHgyRjIwOTM3MSwgMHg0QzY3MTZFOSwKKzB4MzFFOUEwOUYsIDB4MDQwODk3OTUsIDB4QjlFRjkwMjUsIDB4OTdDNjI2N0QsCisweDYzODIzMTUwLCAweDNBQjM0NkJBLCAweEVEM0UwNTc5LCAweDg1RkM3MDYyLAorMHgzN0IzNTc2MSwgMHg0QTMyQjZDRCwgMHhDMzhFQjQ3OSwgMHgyMDM2NDJDQywKKzB4NTY4RkNBRDcsIDB4NjdEOTJCNUQsIDB4RTUxQjhDM0UsIDB4MDIxMDQwNzgsCisweDAyNkJDNjA3LCAweDVBMDZDREE3LCAweEUyNzQzNUQwLCAweEM3QzIwQ0U3LAorMHhGRUE3NDAyMiwgMHg3NzMxMDA3NiwgMHgzNUM2Rjk1MywgMHhFMUIxOTlDNSwKKzB4MjYyRjEzOUIsIDB4RkQyRkUyQzcsIDB4M0VFRTAyRUIsIDB4OTE1QTg3M0YsCisweDJERTRBQjhFLCAweDI0MjFEQzE1LCAweEQxREQwRDlFLCAweERFMDJCNUFELAorMHgxNTFDNzZDRiwgMHg3OThCOTBCNywgMHg4MkVEREY0QywgMHg3OTVFMThDRiwKKzB4RjA5Q0VDNUEsIDB4MDcwQURGOEYsIDB4Q0RDRjUyMzIsIDB4RDQ5OEQ0M0MsCisweEI0RkMyNjYyLCAweDI1Njc4RTU0LCAweDVEMjAwNDgyLCAweEMzMUYyMUM5LAorMHgzNUU1QUYyOSwgMHg4Q0MwRTYwMywgMHg5OTUzNTFBRCwgMHhEOEVCNTRGNiwKKzB4NTY0RTM1RDksIDB4MEMxM0UzMjEsIDB4MzRDRkEzM0QsIDB4MzNEMUU1RjksCisweDJFQUM5NzQ4LCAweEZGQjk1MEQ2LCAweDIwMzIyMDZGLCAweDRGODcxQUUzLAorMHhCRDQ2NEM2MSwgMHgwNjM1NkVBMCwgMHhBMTVBMjkwRCwgMHhBNzg0NTZEMCwKKzB4RDJGNEVFODgsIDB4NEQ4MzU5MDgsIDB4MTVEQzg3QjMsIDB4NzlFREI2QzMsCisweEFFQUYwRjlFLCAweDVDM0U3RUY5LCAweDYzOUEwOTlFLCAweEQzNzVEOERBLAorMHhCNzE4NTEwQiwgMHgwOTBERjk2NSwgMHg5QzhBMzYyRSwgMHgyNUFEMTBCQiwKKzB4RjlBNDJCRTksIDB4OEFERTNERjAsIDB4NTUyNzQyNEUsIDB4MzAxRjBEMEYsCisweDJGNjkxQzlBLCAweDUzNEZFMUZDLCAweDdENDA2MDE2LCAweEY5ODgyMEEyLAorMHg0RDIwNDg3MSwgMHhFRDE0NTE3MywgMHhENjdFQ0U5QSwgMHgzNUY5Rjk5MCwKKzB4OEVENEQ3ODcsIDB4MUYzRjQ2RTEsIDB4NUE2OEYxNzEsIDB4OUE5RDI4QjAsCisweEU3MjZCRDVDLCAweDgxMTkyMjhELCAweDBBREJBNEQyLCAweEVBMjQzMjA0LAorMHhFNTIzQzBENiwgMHgyNjFFMzY2NCwgMHhCMkQxMjExQywgMHhCNEQ5MjkzQSwKKzB4OUM4OUQ5MjQsIDB4MTVBNkEzQTksIDB4MEQ4QzZDNjYsIDB4RUMwNEFEMzYsCisweDBDREYwRjk4LCAweDkyNjJDN0RGLCAweDhFRTBFMDlCLCAweDZCOTI5RUU5LAorMHhEQ0M3MTNCQywgMHg3NUZEMzRGRiwgMHgyNzg0RTY5NCwgMHgyM0MyMzA0NCwKKzB4QjdCMDRGMDksIDB4RjEwQjc1M0UsIDB4MkVDNzc0REEsIDB4NDcwQkU3MkUsCisweDA1NDUxMEU5LCAweDlDN0RERjEwLCAweDE0NjZDMjc3LCAweDlGNTJGNDkzLAorMHg3RjI5ODYwOCwgMHhGMUJBMTBEMywgMHg4ODQ3QTMxOSwgMHhFRThBNjNDQSwKKzB4OEU2NEIzNEUsIDB4RUJCNjY5MzMsIDB4NTc1QURCMjQsIDB4MDQxQkZENzYsCisweDcyN0VEMzY0LCAweDAwRjRBMDA4LCAweDhGNUVEQTkyLCAweDIxNDc3NjM3LAorMHgwQjM2MDYxNywgMHg1NkRDODk3OCwgMHgyN0Y4ODk0NCwgMHg2OUI3OTlFRiwKKzB4RUExRTk0M0IsIDB4NkZERDYwQjAsIDB4Q0UyQUQ4OUYsIDB4Qjk4Q0NGNDMsCisweDJBMzc5NkJGLCAweDRERDAyNTM1LCAweEM2QjUyNEVBLCAweDZCMTczMzQxLAorMHhEQ0UwQTQ1NywgMHg5MTc3MDY0NiwgMHg1N0E4RDEzOCwgMHhGQzIxODMzMSwKKzB4REM2QjcxMkQsIDB4MTRDMEIzQjksIDB4MzBDQTA5QUQsIDB4NzU5RUI5NDIsCisweEJDOTYzNEFCLCAweDhGOTJBN0U1LCAweEY3Rjg1QjUzLCAweDZDODMxQjNCLAorMHg1NkE3NUIxOCwgMHg0M0RCOUYxQywgMHhGODFGQzIxMiwgMHhCOEVCOTAyNiwKKzB4NzhBNzRCNTEsIDB4ODcwNjU1RTMsIDB4QTE3QjUzNkQsIDB4QkRFODY2Q0YsCisweEZDNjA5RjExLCAweEYzNEE3MDE2LCAweDdDNEZENERELCAweDIzNjMxMkY2LAorMHhCNTA1MjBBOCwgMHg0QkVFQTJDMywgMHgyQjY5MEJBMywgMHgxODcwMTY2NywKKzB4QkQ3OTFGQTksIDB4MjM2RDM2Q0YsIDB4NDlFNTc2Q0MsIDB4MzE2QTc3RTEsCisweDkzRTlCMEJGLCAweDUyNzE1NjAzLCAweDgzQjlBQUYyLCAweDBGOEYyQTgwLAorMHhBODdGNzY0QSwgMHhEMjA3OUJFQiwgMHg0OEEyNEFCNiwgMHhBQzM3MDk1MCwKKzB4MzA3N0ZCMkYsIDB4NEJBRkYzRjUsIDB4MUE3OTkyNkQsIDB4OEIzNjk5NTYsCisweEFENzhGNzM5LCAweEVEODhDRTQyLCAweEI5NkE3QzE1LCAweEE3QkJBMkVFLAorMHg0N0NDMzIzMywgMHg4MDRERTk2MiwgMHhFMEI0MzFBMywgMHg0QTgyNTdCOCwKKzB4QTRCMEU4RTIsIDB4MkZGQzQ5QjgsIDB4RjBDREY1RTUsIDB4RjA4OUMzMkEsCisweDQ2MzI4Mjg4LCAweEVBQ0JDMDU0LCAweEE0OENCNUNDLCAweDc3OTk2NTMwLAorMHg4M0E0RTE4NCwgMHgzQzJGNDdEOSwgMHg1MTA2MTc3QywgMHgzM0YxQTc4NywKKzB4QTIyNjZFN0EsIDB4RUJDNDI2QzgsIDB4RDdFOEFERDMsIDB4MkRGNDA0NzcsCisweEY5RThEN0JELCAweDgwQkQ4RUFCLCAweEU2MUNFNTVGLCAweEY2QTdFRjZGLAorMHg1QzY3RTFDMCwgMHhGQkQwMDg4QSwgMHg3RUQzN0IyNCwgMHhGNUJGRDU4RSwKKzB4QzI5Q0ZCMEYsIDB4NjFFQ0UwOEIsIDB4QTc3NkNGRDgsIDB4OUUwRjNBMDUsCisweDhGQzhCMDJGLCAweEZERjgyNzAyLCAweDAyOEMyRjJDLCAweDE2OUQzMDk0LAorMHhFNEFBMzIyOCwgMHhGMkNEMTQyRCwgMHg5QzcwNTc0RSwgMHgwNTdCRkU3OCwKKzB4NzgyQjkwMzksIDB4MEQwMTMxMUYsIDB4OTc1NTIwNTAsIDB4NkEwOTdGMkYsCisweDFCMzI0MkI4LCAweEY0M0YzMkZCLCAweDk2MDA0Mjg3LCAweEMzREMwOTM5LAorMHg0MjE1QTBFMSwgMHhBQ0QxQTI4QSwgMHgxODk5MzJFQywgMHg5QkJBMDQ3NSwKKzB4RkExNTRFNUIsIDB4NEI0RThEMDEsIDB4NEQ2QjE4QjEsIDB4MzE1NDVCM0MsCisweEM4NDlDNTJELCAweDYwOTU4QjlCLCAweEU5MkNGMDkwLCAweEFDM0UxQjU4LAorMHgyNTFEMDJBMywgMHhGQUVFNEY4QiwgMHhCMUNGNkNDQywgMHhDMkEwRDhCMCwKKzB4MDUwMURGNDYsIDB4RDAzNjlEOTQsIDB4RjNFMTE0NzksIDB4Mzk3NTk5RjgsCisweEI5MDA2NEQyLCAweDM0MUY2RDU3LCAweDMxRjAxNDFBLCAweDJGODk5MDI5LAorMHhCQzlFRjZFOCwgMHgxM0I0NzM0NywgMHhCOTNENTlCQiwgMHg1NTZFOTkwRiwKKzB4NTcyN0JERkMsIDB4QkE5RjUxMjEsIDB4RDY3QkU3Q0EsIDB4QjE2N0U4NEQsCisweDJDMEVEMEZGLCAweDI1MUZGRDRBLCAweEM5ODcxOUYyLCAweEQzNzlEOTc2LAorMHg4QjNBMEE5QiwgMHg0MEJBNUY2NiwgMHhFNDBBOTNFOCwgMHgyRjg5RkMwNCwKKzB4RkNCQUZERDQsIDB4RjI0MjQyNzAsIDB4MUJEQkREMTUsIDB4N0YxNDU5QjAsCisweDVBQ0I2QzZBLCAweEZBMjA3MTlGLCAweDJGMTZGRkI0LCAweDgyMERERTUwLAorMHg0NjhBQUMxNSwgMHg3ODE2MTM0QywgMHg5NzhEOTU3MCwgMHg2NzQ1Q0Q2RCwKKzB4QzFFNzY4QzEsIDB4MTVFMjQzQjUsIDB4QkEzMEFENjEsIDB4NDgzRkI2RkUsCisweENBQTE3RDBGLCAweDJGOEYwOTc0LCAweDM0QUI2OEI0LCAweEIzRTg2NEIwLAorMHhDMURBMzgyOCwgMHg1REFENDNCMCwgMHg3MkQxM0I4MSwgMHgwMUYyNzRBQiwKKzB4OUMwNjUxQUQsIDB4MEZDMzBDMTAsIDB4MEU3QUEzQ0IsIDB4REJFNkI5RDksCisweEY0MjNCOUE3LCAweDQ1N0I0RTMyLCAweDQwRThFMjY5LCAweDkxREEwNDJBLAorMHg5REJGNDFFOSwgMHgzMDhDMEYyRSwgMHhDQUJGQUMwRCwgMHgwRTJDODZCMiwKKzB4MTE3QkMzQzYsIDB4RUVBNTM4RjgsIDB4RjMxNTg1REYsIDB4MERGNTAyODEsCisweEVBQTk2MDFFLCAweDhGNDA4QUZBLCAweEYxMTQ0RjlBLCAweEEyQUIyRUNELAorMHhBQ0I4ODY4NSwgMHg2RjRFRkZCRCwgMHg4MUVFRjg4NiwgMHg0NkIwMjI0MCwKKzB4M0MwOUQ5MTYsIDB4NEYwREFGNjgsIDB4ODMzN0IzRTMsIDB4OUEwMTFCQTYsCisweDRDNjNBQzY2LCAweDJGQ0M2NjlFLCAweDBDN0QxNUJCLCAweDUxMjc5RDlGLAorMHhDMTM1NDc3OSwgMHhFRkY5NDBBRiwgMHhBOTU2Q0IzNywgMHgwREI3OTdFMiwKKzB4RTY2NUVFNTUsIDB4NzlBRjg3OUQsIDB4MjFCQkM5MDIsIDB4MzBCMjY0QkYsCisweDQxMUNEQzk4LCAweEU0NTMzODlGLCAweDQ3QzJDMTk3LCAweDNFNjAxNUY4LAorMHhGOUU3QUEyQiwgMHhBOTMwMjQ3NCwgMHgwNEM2ODg4RiwgMHg0RDExOEJGOSwKKzB4MERCN0FBQzAsIDB4NTJBMzhFREIsIDB4NERBQjIyRjIsIDB4N0RCQjZFQUIsCisweEQ0RDE3ODUxLCAweEZEOTQ0MzE0LCAweDQwQzU4MzhDLCAweEJBNkVCMEVGLAorMHg5QUEyODdBNSwgMHhGNkQyMzZGMCwgMHg0MUQ5RTJCQSwgMHg2OTY4RDc3NiwKKzB4MzFCMUQxMjksIDB4NDJDM0Y5NjMsIDB4MjdDQ0FEMzAsIDB4Q0Q2MUJGNEUsCisweDJDN0RBQkFCLCAweEE3OEE5Q0MzLCAweDdGODU2QjZGLCAweEI2RDQ0NEE1LAorMHg5MENCQjMxMiwgMHg5NTYxMTc4MSwgMHg0OTE2RDUzMSwgMHhDNDk2QzMwRSwKKzB4NzA2RDBDQjcsIDB4MzVEMDA2NEIsIDB4RkUyNkMzNkEsIDB4NjIxMUYxNEIsCisweDJDMjM0MEJBLCAweDU4NjMzNTY3LCAweDA2QjZCQThFLCAweEE3RUMzRDhELAorMHgxMDcxQjBDRCwgMHgzODhFRUZBOCwgMHg2MEQ4RkIxQywgMHg1Rjk5RDE0NywKKzB4NTJDQTZFQkYsIDB4RkE3MzYwMkUsIDB4MDM3NkMxNUMsIDB4M0M5MUI1N0QsCisweDkzODZBRjE3LCAweDE0QTM1QTFBLCAweEJEQjQyQTM5LCAweDBFODNDMjU3LAorMHhENEM1Qzc3NSwgMHhBNjA3RkE0NiwgMHg5MUI5QUQ0MCwgMHg3NjIzQzVENiwKKzB4RTNENTNFNkEsIDB4QTNDNjYzRTcsIDB4NUFEMzlCQ0UsIDB4MDNCNTgzOTQsCisweDM4ODYyQzdBLCAweDAxRDUwQjlGLCAweEVBQUIzOEVDLCAweEFCM0RGQjhCLAorMHgwNjc5NTM4NSwgMHhCMTdGNDg1RSwgMHhFMkY1NzkxNCwgMHhCNzlBM0JBQSwKKzB4MTNEQTc4ODYsIDB4NzEzNkM3RUIsIDB4NUU3NDhBRjcsIDB4RDM0RjE2RkMsCisweDk2OEY2NzAxLCAweDk5QzVEN0JFLCAweDUzMEY3RkFDLCAweENERjVENTY3LAorMHhFMzFERTBEMywgMHhDRjkzQkM2OCwgMHgzNEM1NzhBQSwgMHhBMjAxRjc2MSwKKzB4NUNCOERDMDAsIDB4Q0EyNERCOTgsIDB4RjhBRDdFNEYsIDB4ODA4RUM0NzYsCisweDYwM0JBNzUxLCAweDQ4OTU1NUM2LCAweEYyQTAzRkYwLCAweEQyNDYxRTlBLAorMHgxMDJDMzNCRSwgMHg3NjczOTMzQywgMHhDMTFBMjQyNCwgMHg2QTIzQzhDNiwKKzB4Njk0OTk4MTIsIDB4MTlBQTg1MTAsIDB4QzhDREE3NUYsIDB4MzRCNTIxNkEsCisweEQ4N0Y3NDIwLCAweEM4Q0VEQjUzLCAweDhERjExQkEyLCAweEIxMDkxMUM2LAorMHgzRjFFNTk1NSwgMHhGMDc1RjRFQiwgMHgxNzg3NEZDNSwgMHgwRDU1Njg1QiwKKzB4NUVFNTIxRTUsIDB4NDZDNzI5MjQsIDB4Rjg1NDAyMTAsIDB4NUQ1RTRDNUMsCisweEU4N0ExMzNDLCAweDkxNjMzREM5LCAweDM2QjU0RDVELCAweEE4QjVENDQwLAorMHg3REI3RDZDNCwgMHg1RkE4MkMxNywgMHhBRDY3OTAzOSwgMHg4NkIzQjgzOSwKKzB4REY1MTIxQjcsIDB4QzA4Qjc2OEEsIDB4MzM4QTUxMkYsIDB4Q0Y5QTRGOUEsCisweDVERUZCQjVCLCAweDRDOTMwMUIyLCAweDA4MDIzNzAyLCAweDVCMUQ3RTI4LAorMHhFQzgwMDUwNSwgMHgzQTg2OUU4MCwgMHg0QzUwQzhBRSwgMHhCMUFFOTA2NCwKKzB4QUZGQTM0RUIsIDB4RjJGMDA2QjksIDB4RDhBOUEzRDEsIDB4MkM2QzIxMzQsCisweDY3N0VFNjQ4LCAweEJCNkI2RDVDLCAweEEyODUxMzZDLCAweDZDNDdCRjRDLAorMHhBRjE1OERDMSwgMHgwRUY3NUUyQiwgMHg1QjlDNzRENSwgMHg5QjhENEJFMywKKzB4RTQ5NUJFMTksIDB4NTk0MEIyMjgsIDB4NTVFNjI2NTYsIDB4MzI0N0UwNjAsCisweEJGNzA5NENELCAweDFDMUFCMzgwLCAweEVDRUEyMjc1LCAweEI2REQ4MjUxLAorMHhDQ0EzOUREMiwgMHhBQjg1RDk5MiwgMHgyNzgxOTdEMiwgMHhGQjZDOUZEMCwKKzB4QkQ1M0I0NTgsIDB4ODlFRkUwRUMsIDB4NTJBM0RGRkQsIDB4QTZCN0ZGN0IsCisweEZCMDQzNjQ5LCAweDkzQzkzRjc5LCAweEFFQjRDRDZELCAweDcxREI1QzkwLAorMHg5RThERkU5MiwgMHgwRjFBNUI5MSwgMHg1NUM1Q0Y1RCwgMHgxQTE4NDdBQywKKzB4OEQyNUNGNkMsIDB4OTE0RkQzMTYsIDB4MzlGQ0ZFMjAsIDB4RDhGNjZBMDcsCisweDJDREQzREM2LCAweEU0MTVBQzcyLCAweDNEMUJEMDlCLCAweEE4MzIyQzU5LAorMHhCRDNBODI2QSwgMHgyQTk4OEE0MCwgMHhFQkQ4QjFERCwgMHg5RjUzRUVFRiwKKzB4REY1NzE4MTYsIDB4RDRGQ0NEQUUsIDB4Qjg1QTFFNTAsIDB4QkUxQTU3MUYsCisweDBFRDA3NTM0LCAweDRDMUU0NzFBLCAweDhCNEQzNkY2LCAweDBFMzg4RkM2LAorMHg5RUQyQkM0RCwgMHgzRTJEN0Y3MiwgMHg3NTJBQ0ExNSwgMHg4OTYwQjQ4RSwKKzB4NTg5MkIzRDcsIDB4NzBGNkYzQ0QsIDB4MjZDNDg1RUYsIDB4QzgzODM5QjksCisweEZFNkMyMjRCLCAweDM1NDcyMDNGLCAweEY3M0FDQTg0LCAweDA2NURDREJDLAorMHg4OTg2RUJEQywgMHhDRDU5RUExNCwgMHhDMEVGNThBOCwgMHhDNTU4NzIyOSwKKzB4NDg0RkJDRUYsIDB4OUI4QkYyNEQsIDB4MzUxQ0Y5NDYsIDB4RTEwQUE5NzMsCisweDE3OTE5NjQwLCAweDk1RkY3QjFDLCAweDgyQUI2NUU1LCAweDA3MEJDQzk4LAorMHgwRTdDREI4RCwgMHgzOERCMjdERSwgMHhDQTU0M0MyQiwgMHgwMTMxRUI0MSwKKzB4ODMwMDk5NkIsIDB4ODhCNjNENjYsIDB4MDNBREFDMUQsIDB4QjIwNUE4N0IsCisweEQ4QkRDMEM2LCAweDQ0M0Y2MDcxLCAweDJDRTY5RDJBLCAweDZFMUU1QTUzLAorMHg0RUZGOTNBQywgMHg3MDMyMjY1NywgMHg1Q0NERDE0NiwgMHgwNEM0MzVCNiwKKzB4NUJGM0NENjksIDB4NTFFMDkxMTUsIDB4MjU0NURGQjIsIDB4QTUyRUY0NDgsCisweDhEMzg3MDQ2LCAweDdDNEYxRjI1LCAweDJFRkZEOEFBLCAweEZENjQyMkIwLAorMHhCODJFMjZBNywgMHhDRjAxQ0M0NSwgMHg4ODg5OUVCRSwgMHhEQjYyMTk2NiwKKzB4QkJBMTgyMkYsIDB4QjI2NEFBRUIsIDB4MTA3NkVBQTUsIDB4QzI0QjBDRDUsCisweDU0RDU1NEIwLCAweDRFQ0E3QzA1LCAweEM4QzlCMDUzLCAweDcwQTg2RDk3LAorMHg0RTMyNjVDQSwgMHhFQTI0RjgxMCwgMHg4NzNCMTcyRCwgMHg3OUE3NEQxOCwKKzB4RUMzRjQ5RDUsIDB4RDE3OTk2MDIsIDB4QTIxQTI4QjYsIDB4M0ZCOTlBRDEsCisweEMyREIzNUIzLCAweDYzRUMyRTUxLCAweDE3RTQ0ODlGLCAweEU4RTE5MTY0LAorMHg3OUFERDgxOSwgMHgxMEQ2NjE1NywgMHg1RjYyMUE3MywgMHgxQ0QwNjNCQSwKKzB4NjY2NTgxNUYsIDB4RkEwQjcwODEsIDB4NkUwRkE0NzMsIDB4MENFMzU3MUUsCisweEI1RUFFRjQ2LCAweEFBMDRDRjU0LCAweDMzNjY4MENBLCAweERBQkJGRjExLAorMHgyMjU5RTc5NywgMHhCNTdCNDQ3MCwgMHgxMTFFQjRCRiwgMHhDMTcxRDQyQiwKKzB4NTg4OUE3QTQsIDB4NDE5Q0NCM0UsIDB4QkVBMUYzNjYsIDB4NDFGRTQxNEIsCisweEE2NUNCODk4LCAweDZDMjgzNjNBLCAweDhGODJGQzg0LCAweERCRUQ1QTlDLAorMHg0REJGMzUyNiwgMHhGMkYzNEU2NiwgMHg5RDJDOUIxMSwgMHgwQzBENERGQiwKKzB4NERCRjc5RDQsIDB4QTI1NkU4NkQsIDB4NjQwNzM3NkMsIDB4M0YzRThBRkYsCisweDQ3NEIzNTkzLCAweEU1NTk2NUM4LCAweENCMjBEMzU4LCAweDBDNjcxQTlCLAorMHgxNjlGODM0MiwgMHhEMkUxQzlFNywgMHhCRERCQUFFQiwgMHg5M0RGMEM3NSwKKzB4RjI3NzA3RjcsIDB4NTEwODMwNUIsIDB4NEZGMkMwNjAsIDB4RUI5QzA4REUsCisweERGMTEwMjBFLCAweEQyMjcxMDQ2LCAweDZEMUJGRDI3LCAweEVEMDIwQ0RDLAorMHgyQzIyNjU5QiwgMHg2OTIwNTBEOSwgMHhEMTRCRTI5MSwgMHgzRUJGOEU4NiwKKzB4ODM0NEI2MjUsIDB4Nzg0MEI5MUMsIDB4QjcwMkJENUYsIDB4NDkzNUQzMTgsCisweDAxQTIyMDEzLCAweEYyQTIwQjA4LCAweDY1MUExQzM4LCAweDAwNEZFNjMzLAorMHhFNTFEQ0MwNiwgMHhGNUI4NjEzOCwgMHg5RkJGRjExOCwgMHg2RjdCM0NENCwKKzB4MDI4OTM4QjQsIDB4MDcxRTk2QUUsIDB4REYzM0RDOUUsIDB4NzkwMDFBQzcsCisweDdCNUQyMEZDLCAweDNGMTM3Nzk0LCAweDgxMTY1QjA0LCAweDk3M0Y4RkQ0LAorMHgwQUU0Q0JGNSwgMHg3QzQ4MTgwQiwgMHg0QTk2QkM4OSwgMHg1ODA2NkU3NCwKKzB4ODY2NjlEQzYsIDB4REM1NUEyMTgsIDB4ODU4QzMxMzAsIDB4OTlBRUFDOTEsCisweDI2OTgzRkM0LCAweEVFNEQ0RjA2LCAweEQ4RDZENjU3LCAweDE4RUYyNjJCLAorMHgzNzRBNjIwRiwgMHg4NTk5NUY5QywgMHhDQzgxNEFDMSwgMHgzOUY0ODdFMCwKKzB4QzYyODE3N0IsIDB4MkZBRTJDMzksIDB4NjQyNTI1QTIsIDB4QzE0NzRGMkQsCisweEJDN0NENDlFLCAweEU4MUUxM0Y3LCAweDgzRjQyQkRCLCAweDhBQjdEOTlBLAorMHhBODA0MEIxMSwgMHhEOEFBNjhFQywgMHg5ODNCMzczOSwgMHhFRTQyRUNEQiwKKzB4Qzk1MTM0OTgsIDB4Q0FBMDZBMTQsIDB4RTQ3ODQwOTQsIDB4RTZCRUJCOUUsCisweDEzQkU4MDE4LCAweDU5RTNENUQ0LCAweDBDRjE3MjhGLCAweDk2MzQxM0JFLAorMHgzMTk1MzNCNywgMHgxNDY2MkFCRSwgMHgzMzYzQjQ1RCwgMHg1OUE5OTY4NywKKzB4QkJCMEZEQTQsIDB4Q0RCQjhCMjEsIDB4MDI0MEYzQjEsIDB4MjI2REFDM0IsCisweDMwRTFDNDlFLCAweDc2RTA3NkQ3LCAweDRCOTFDNTk4LCAweEIzQzQ2RTJGLAorMHg0QTY1N0NDNywgMHg2NkMzODc1QSwgMHhDQkM2RkM1NCwgMHhGODMyRUJFOCwKKzB4REQxRUFEM0QsIDB4RkVGREFGODUsIDB4OERFNTFCODgsIDB4QUVBRkQ1RDMsCisweDNFNENFQTgyLCAweDU1RjQ3OTM0LCAweDlGODMxNENBLCAweEQwMjIwQkMwLAorMHg1QUNFRjgxRiwgMHg3MUZERDhFOSwgMHgxM0ExNEVEOCwgMHg2RjFGQzFFNCwKKzB4NzUwNDZBMDQsIDB4QzZDNEZEQUYsIDB4NEZGRkY3MjQsIDB4RjQ0RkVERDYsCisweDdFMUM1Q0JDLCAweDc4NEM2QjRDLCAweDhEODVGMjIwLCAweDM4QjY1QzNFLAorMHg4Qzk5MjA1MCwgMHgyREUzNEMxMywgMHg5RjJBNDU0NywgMHg0OEU1OEY2NSwKKzB4QTI4MEI2ODksIDB4NkY1NDBEOEEsIDB4MTBCNjFCMzksIDB4MUM4QTI4NDksCisweEE3MzE2MzU4LCAweERCRkI3ODYyLCAweDE4MkM1NTNELCAweDkyRjA0Mzg5LAorMHgxRkU3QkFERCwgMHg2QTcyNENCQSwgMHg5NzBCRTAyMCwgMHg5Mzc2MDA1OCwKKzB4MkRGOUUwQUQsIDB4Q0ZGMUY4QjEsIDB4MTcwRDgxMEEsIDB4NDVGNEU2QTIsCisweDM3QTBFOEZELCAweDg2RDExQzZELCAweDRGM0M2QTNBLCAweDRCMTQ0NDUyLAorMHhDRTlCODdBMSwgMHg3QzA4QzMwRCwgMHg5Q0I5QjBBQiwgMHhENTVGMkNDNSwKKzB4RkY5NTE4MEYsIDB4RjM1NTA1QkQsIDB4RUQ1QkRCOTYsIDB4ODVDQTJFNDEsCisweDg3MDhCMjY0LCAweEQ2MDc5NzM0LCAweENBNzZBQjNELCAweEZENkNERjRGLAorMHg5QUFCODQwQiwgMHg5MkQzQTVGNywgMHg5M0E5MkMzOCwgMHgwNDE5QUE3QSwKKzB4MUQ1MDAwNkUsIDB4MTI2RjQ4RkYsIDB4QUNEQTQxMkMsIDB4MDExMzk0NTQsCisweDhFMjNDNDg2LCAweDAxRDQ0RjUxLCAweDdBNUY2RjEwLCAweDM3N0Q0RDVFLAorMHhCNzg0RTcyRiwgMHhBOUFDOTI1RiwgMHhCOUM2NkM3OSwgMHgwNTczMzFFNiwKKzB4Q0ZGMDQwRTQsIDB4NzdFOEE5NjAsIDB4MzVFMzFFRUMsIDB4RUI4MDdBNDQsCisweDg1OTRGRkZDLCAweEQyNzYyOUI3LCAweDVEREY1MjZFLCAweEJDRjJGNDg0LAorMHg4ODgwNTAxMywgMHg0MTA0Nzg1MCwgMHhCODU3NEVDRCwgMHgzRTE1MDgyRiwKKzB4MzA5QzE2REMsIDB4Mjk3QjY5MDQsIDB4MzBDMzlFQ0IsIDB4RDIwQjYxQUYsCisweDUxQTU3OEFGLCAweDRFMEQyNEE5LCAweEM2MUZCRTVGLCAweDdBODlGNEM2LAorMHg5NDMyMjk5RCwgMHhGRTI2MUI5NSwgMHhERDFGQzRDQSwgMHgwNDRCRkI5MiwKKzB4NDFCRTU2Q0EsIDB4MEEyQjY4MzEsIDB4RTEzNUQ3NUQsIDB4QUIyRDAwQTAsCisweEI0Mzc0MDgwLCAweEZBQTZEQkQwLCAweEE3MDRDNEE5LCAweEQ4MTM4NUE0LAorMHg1MTUzMzMxMiwgMHhFRDVFREFGNywgMHhFNEVERkFFQiwgMHg3NEI3REFGRSwKKzB4OUQ4MTBBQTcsIDB4NDBCOTE4MjcsIDB4NjUyMTlCQ0IsIDB4NzU0MzFDMTYsCisweDk0RDkyM0QzLCAweDAwQjdBQTRFLCAweEI4QTg4RkRBLCAweDkyNzI3OEQ3LAorMHg3QTIzNzY5NywgMHg0NUIxNDA5NywgMHgyRTNBNTYyRiwgMHg5MzAwMzMyMiwKKzB4MEI4OEE1RkYsIDB4RDEzRDRBREQsIDB4NkQ3Qjc1NzksIDB4NzJEODM0QzQsCisweDBCQ0FBMzYxLCAweEMwMkUwMEI4LCAweDE1MDIzNTUxLCAweDQ4MUM1RTkzLAorMHgwMkU4MUExNiwgMHg4QTg0NkEzMywgMHgxMjM5QTk3MSwgMHg5OTQ4MThCNCwKKzB4RkMzREJCNkQsIDB4NDNDOEQyRjIsIDB4RTNBRTU0OEMsIDB4NDA4MDMyRjEsCisweDAyQjA1NjM2LCAweEUzNjFBNjBDLCAweEZFMkNBMjkyLCAweDA2MUQyMzc0LAorMHhEQjI4NTU1NiwgMHg3MDYyN0VBNCwgMHg3RkM2NEFGMCwgMHhGRTEwMEI2RCwKKzB4NzFBRUIzRjIsIDB4QTU2NUE0MTIsIDB4QTY5ODczMUYsIDB4NDlERDk3NjcsCisweEMzNjI3RUJDLCAweDc1RkIyREJGLCAweEZEQzBFOTcxLCAweEY2RUQxMkE2LAorMHhBMjNEQzAwRiwgMHg4OTdFOTE3QiwgMHg3RjIwMzFFMCwgMHgxN0RDRTU2OCwKKzB4REY2OUNBRDMsIDB4QzZGQjVCNkQsIDB4MDk3MjY4QjAsIDB4RTExMDI0NDQsCisweDg2REY5MzgzLCAweEJEN0I5Q0MyLCAweEJBQUY3RENGLCAweDk4NUI0NUQxLAorMHg0MjE4RTk1QSwgMHhCMjQ1NUVGNCwgMHhEQjAxNUY5QiwgMHg1NENDQ0U3NiwKKzB4NTZFREY1NjEsIDB4NkY2NkY5NUUsIDB4RjhCMUVCRDAsIDB4RjdBMzlBRTAsCisweEY2NkQ4MzQ2LCAweEE0Njc3MDA3LCAweDAyQzRCM0VCLCAweDgyOTk4N0IwLAorMHg3QzBFMTkxOSwgMHg1MUY3MDYwQiwgMHg0QjMwRjFENiwgMHg4NUE0RTBDQSwKKzB4RUMwNDlGQTAsIDB4MTdDQkYxRTQsIDB4N0ExQUFEOTUsIDB4RUJBNEM1MTMsCisweEU4NDYyRTc4LCAweDU0Q0REQTBDLCAweEVFN0I4Mzc4LCAweDk4NThDOEMxLAorMHhCQTMzNTg3QywgMHg0RDZGMUIxNCwgMHg3QTJDMDUyNSwgMHg3RTZFRTREMiwKKzB4QUNBMTg2OTIsIDB4REQxODY4MjAsIDB4NDExOThCMDMsIDB4OEFDODVBQjcsCisweEJEODY5MDBCLCAweDM2RTJDMzU0LCAweEU2NUY5MTE1LCAweEIxMDY0NURBLAorMHg3OTcxRDIzMCwgMHhDODNEMzU4MywgMHg4QzYwQzgxRCwgMHg5NERCNTc0MSwKKzB4NEZDQjg5MzQsIDB4OUE1MjBGRTIsIDB4Q0U0OTQ0NkQsIDB4ODg2NEU2NDEsCisweEY1RUYyNUE1LCAweEMxREVFRDBBLCAweEM4MDU3RjM3LCAweEZCMzA1QzczLAorMHgzOTJFNjcwRCwgMHhBNEQwMEQyQSwgMHgzNTZBNDZGMCwgMHgyRjY3NTU2NywKKzB4Qjc5OTdDRjAsIDB4ODhBRjNBNEUsIDB4NTZDOUQ1MUUsIDB4REQ3NDZFQ0QsCisweDQwQ0ZBNDUzLCAweDVFQTc0MENELCAweEU0REQ2QkIxLCAweENDQjMxNDI5LAorMHhBMjIyN0YzRiwgMHgxOEExRUFGMCwgMHhDMTU1NDE3QiwgMHg0MUZFNzM1RiwKKzB4MTZENDBCMDAsIDB4QzlGNzJBRkMsIDB4ODZCMUQ2MkQsIDB4NkE5OUE4MkEsCisweDA5RDMzMjQ4LCAweEVDNDQ2MzlDLCAweDlCMEFCMkIyLCAweDY5NjkxNjRDLAorMHhFRjYwMkJCMSwgMHgwMjA4RkM2RiwgMHhDMTEwOTU3OCwgMHgyOTk3QUI4NywKKzB4RTU2MjZCMTQsIDB4Q0RBRjQ4RTEsIDB4MjA3ODE2MzMsIDB4MkVCRTBBNDEsCisweDczNzkyNjFFLCAweEYyMTZGN0ExLCAweDcxNEQ4MjU4LCAweDkzNkZFNjhGLAorMHgxNjA4NTZGOSwgMHgyQTREMTQxNiwgMHhCNTU4RTQxMiwgMHg3REIxOTZERiwKKzB4REM4OENDQjIsIDB4RjM3QUI2MTIsIDB4NzQyM0YyMTQsIDB4RDNCMDZBNDMsCisweDI1QTgwMTJELCAweEMxQzY5RkZBLCAweDkzNkYyQzE4LCAweDU2RDc3QzE5LAorMHg3NzRCRkM2OSwgMHhGNUU4NUUyNCwgMHhENzkxNThDOSwgMHhBNjdDM0UxNSwKKzB4Qjk1ODgxOUUsIDB4NjlGODEyNzgsIDB4RjJCMzUxMDcsIDB4QkYyRjQwODUsCisweDFDOTk3QTA2LCAweDZDMjM4QzNCLCAweEM3NTZENTZFLCAweEQxNUMxMTQ5LAorMHgzNTFFNkVDNCwgMHgyMzExMzAzRiwgMHgwNjIxNjAyQywgMHhCMTFCNkREMSwKKzB4QkU4RTUwQjUsIDB4MzRBNUY1ODksIDB4RTREMzA4QUUsIDB4NDM0NEIyOTcsCisweEEzM0FFOThELCAweDBBMzAzQ0RCLCAweDM4OEVBMTdCLCAweDAxMDdCNUE1LAorMHgzOEIzOTA0MiwgMHhGRTY3ODk5NSwgMHhCNDI2RkU2OSwgMHgyMjFGQ0YwNiwKKzB4QzQ1OTI2QUIsIDB4MjFBNDMwRjksIDB4NkQxOTJEMkUsIDB4NDE2OEMxMEIsCisweDVCQTZCMTMyLCAweDA1MTlFQ0E3LCAweDIxMTI3NTgyLCAweEY2QzQ0N0UwLAorMHgwQzcyRkMzMSwgMHgwOTQxQjNGMCwgMHg3NkYyMzg3NywgMHg4NkNGMDY3NywKKzB4RTc3ODUxMDUsIDB4QTQ2Mzc4NjQsIDB4OTRDODJCNDUsIDB4RjYwRkQ2QTAsCisweDQ2OTQxQzI3LCAweDdBMzNBNjk4LCAweEUxREY4QkZCLCAweDUyNDk5NzBCLAorMHhERkU2NUUxQywgMHhGNEE0RkIyMiwgMHg1OTk2MzlGNCwgMHhGRTBFOTcyMiwKKzB4N0JCNDhGNTgsIDB4NTMzNDY1RTMsIDB4OUU4ODRCMzUsIDB4MjYyMDQyOUMsCisweDI4NzVGRkMxLCAweEYxMUVDMENBLCAweDY2M0FGNUYwLCAweEIyQzU5QzM4LAorMHgwMzU1NkVEOSwgMHgyNzFFOUUzOSwgMHg4NTU2RTA2MiwgMHgwODIwNzY4MiwKKzB4RTU3OTdGMDAsIDB4NjZBMzYyQjUsIDB4N0VEODM5NEQsIDB4MjkyMkMzNzQsCisweDI3MTY1N0JFLCAweEFDMTUwNzFCLCAweEUyOTY2OTFFLCAweDBGRTJDNzQwLAorMHgxOTEyMEZCNSwgMHg5QUJEODg4QSwgMHhBMjAwNzYyQywgMHg3ODM3RjQxQywKKzB4QzZGNEVBMTksIDB4RjI4NkFCRjQsIDB4RkNBODk5OEYsIDB4OTdCMEU3RDUsCisweDEzMzlDNzlGLCAweEZFRDA1RDQzLCAweEIzMzkyRTcxLCAweEZDMkEwMUVCLAorMHhCNzIwQ0JFRCwgMHg0RkE3MTM1OCwgMHgwNEE1N0Y2MiwgMHgzRDU1OEIwQSwKKzB4MURFQjRENDAsIDB4QzlDODIzRjEsIDB4NDcwRjYzMEEsIDB4MDhGMjI5NzUsCisweDJCRDg1MTA3LCAweDMyODhBNjI4LCAweEIwQzg5Njc1LCAweDMyRDk1N0MxLAorMHg4MEI3ODQyNiwgMHg5OEE0Njk1MywgMHhBNDkzQUY2MCwgMHhDMkI4NEFDNCwKKzB4NDg2RDY1OEYsIDB4RkUxMTlGRjksIDB4QjJGRTU2NUYsIDB4RUFEQjU4Q0QsCisweDFGNDVGOUI0LCAweENFQUU2MkI2LCAweDY4RUM3MDJELCAweEY1MkFEREY3LAorMHgwRkZDMDcxNSwgMHg0MTI5RTQyQywgMHg5NTZBQzREOSwgMHgwMDM1Q0Q5QywKKzB4RjhGRUJBQTEsIDB4MjlDNTgzOTcsIDB4N0MyRTJFNDEsIDB4N0JFNzREQUYsCisweDI3OTFEMzRELCAweEI2RDY3QjBELCAweDhGNTU3NTI4LCAweDlEREVFRDVCLAorMHhCM0FBNEJCNywgMHgwNUUyMkU0MywgMHg0Q0RBNjAwRCwgMHg0MzJFMkQzMiwKKzB4NDA1REE1QkQsIDB4QUYyMzgxOEMsIDB4MkY3M0ZFMDksIDB4RDQ2MjQ2MjYsCisweDY1M0VGQ0IzLCAweDc3RDY1RDNGLCAweDUxQTNEQ0IzLCAweDc2N0Y0MDdDLAorMHhDNjY0NTJFMywgMHgxMEI2ODQyRSwgMHg5M0EwODQwRSwgMHhFNDUzQUQxMCwKKzB4REU1OEZDM0QsIDB4NkMyMjcyMTUsIDB4MUVFMTMwRUEsIDB4QjBCRjY0QkUsCisweEExMUU1RDM4LCAweDAxMzFCNzU1LCAweDE5MUY3MEQwLCAweERCNDgzOTU5LAorMHhBQThEMkY5RSwgMHg1QTAwMkFBMCwgMHhGNUEyOTk2RCwgMHhGRDBGOTVGOSwKKzB4RDZBMTI4NjQsIDB4M0FBNDhCNzQsIDB4NTBGNjY3OUYsIDB4MEFERjVDNDksCisweEUyRjhDRTY4LCAweEJGMjEzRTY3LCAweDVFOUFDRUVBLCAweENBQ0QwRUJFLAorMHg2REY3NjZBNSwgMHgzM0MwQTE1NiwgMHg3MjA4NjhFQSwgMHgzMTEyQTBEQywKKzB4QjM4MjM1MEEsIDB4MzY5RDlDNTAsIDB4RThGODkwRDAsIDB4MEExMjEzOTksCisweDJBQjQ1OEVBLCAweDUxQzgyMzNELCAweEJGNDY0MDNDLCAweDA3MjhDRDU1LAorMHgyM0Y2Nzc0QiwgMHgyRkI1OURCMCwgMHhGQTJDRjcyNCwgMHhCNDlGQTg0OCwKKzB4NUZGRkExMjUsIDB4REUyQzBEMTUsIDB4NzZCNzhDNDEsIDB4MTkyQkE2MkMsCisweDRDOTU2M0UyLCAweDhGNzQyNTA3LCAweDg4MjEwNEUwLCAweDM1N0FEMDc4LAorMHg3OTlFMjVBMiwgMHhFRjNFRDAyMSwgMHg2OUQ1NEI0NiwgMHg1RUM1Nzg3MCwKKzB4MEZGNDE4RTAsIDB4MDdDNUFDN0YsIDB4QzFBQ0JGOUEsIDB4ODBBODMwRDksCisweDgzN0M3QzVBLCAweDA0QzExRDg2LCAweEMxNEM4QkM3LCAweDkyQkE2NTBCLAorMHg5NEQzNEZBOCwgMHhEQkRENUVEQywgMHg5RUQyQTA4RiwgMHhBMUZBRTQ4NSwKKzB4NUZENjZDM0QsIDB4NENDQjZGOUYsIDB4QjdBQTU2QjAsIDB4MEZCM0M3M0EsCisweDAzQUY5NkU2LCAweERCMkQzOEY5LCAweDdBRjIwRDYwLCAweEI1N0NCRTkwLAorMHgyMEVCMkQ2RSwgMHhDRjkzNDQ1MiwgMHg4MkVDMjZGNiwgMHg4NEIzNzM3QSwKKzB4MDk3MkYxQjcsIDB4MzlCNkRCNEQsIDB4MTNFNTNDQzAsIDB4NjdDNDFENzIsCisweDk0QkFBQzc4LCAweDY2M0E5QzZDLCAweDM2OTI3NDQ4LCAweENGQkMyNjEwLAorMHg5ODBGNTNCQSwgMHg3RTU2Qzk2QSwgMHgwNEM2MkRGQiwgMHhBNDcxRDU3OSwKKzB4REY5QjJFRTEsIDB4RTEyREVCQjcsIDB4MkRCOUIwNDIsIDB4RjBDNzRCOTYsCisweDZBMzc2MkU5LCAweEY0REMzOUQ5LCAweDc2MUE1ODg0LCAweEZBMzYzRDNCLAorMHg5Mjc2Njc1OSwgMHhGM0VBRDQ0MSwgMHg4NzgyNjlFRCwgMHgxQUZGQUZFNSwKKzB4Q0I0MzI3NjQsIDB4RkUxOTQ3NUMsIDB4Q0Y4Nzc2REEsIDB4MUYwQUQ5MDYsCisweDdEOTlBQzIwLCAweEMyNzMxN0ZCLCAweDQzOTk0NEE0LCAweDY1RDE0QzJELAorMHg0M0U0NTI2MiwgMHhDREU2QjNCRCwgMHhFMjVDNjdDRCwgMHgzMjFBQTJFNiwKKzB4MzUyQTI3NjQsIDB4NTU2OUVGNDIsIDB4MDA1QzM3MEQsIDB4MjkwODAxRTAsCisweDYxODgzMDM1LCAweDJBMkRCQzQ4LCAweEUyRDU1OUZGLCAweDAxRjVERjEzLAorMHg2OUI2MTU1OCwgMHhFOTRCRjM2NCwgMHgzQ0E3NkZDQSwgMHgyRTAxNjQ4MywKKzB4REI2NzVGOUMsIDB4NEZBNUI2REMsIDB4NTlBNkMzRUMsIDB4NTZDNkU2Q0YsCisweDI0Q0Q1OUY1LCAweDQ2OTExODM0LCAweDY4M0I5RTM5LCAweEI1QUY2MTc0LAorMHg1QzMxRTI2OSwgMHg2NzlDOUExMiwgMHgzNzg3RDNFNiwgMHhGMTcyN0VFNiwKKzB4QjA3MDg4MkYsIDB4RkMzN0VBQ0EsIDB4QkVFMDc4M0YsIDB4RjYyMTgzNjksCisweDE5MzcyOTQwLCAweDNGRjdEODkwLCAweDY5NzM2OTE5LCAweEREOTYxQ0I5LAorMHg4ODMwMTBGMSwgMHg2RTQ3MkQ1QiwgMHgyNDQ3RTAwRCwgMHhGMzlFMUYwRSwKKzB4MURCRDQ0MkYsIDB4QkUxOTc3RTAsIDB4Qzg2NTVGNDIsIDB4MzdDODQyNTMsCisweDM0ODBEQUM0LCAweDRDRkUxREM4LCAweEYxNTIxQUQ1LCAweEE0NUM0RjhDLAorMHg4N0ZCQUVFMCwgMHgzRTQxRTlFMiwgMHhGNDc3NzFFNSwgMHgxNkM3NENERiwKKzB4QTMzRDQwMzUsIDB4Mzg1MTNBMTAsIDB4QUJGMzI2NEQsIDB4QjhEODBERjYsCisweEQ5QUQ3MjU2LCAweEY3ODM3NUI4LCAweEQ3NjYxQ0Y3LCAweDFDMzYzQUY5LAorMHhENDI1RkEzMiwgMHgwMDFEN0I5OCwgMHhEQjk2QTFDQywgMHhBMDkyRTY4MywKKzB4NjVDRjUzMTYsIDB4NUYyODI2ODksIDB4OUY1MkY5MTIsIDB4ODk1OEExQjcsCisweDY0NTdBM0Y3LCAweEFCNDNGQURELCAweDA2MTMyOEM3LCAweDlEMzFCNUUzLAorMHg3NUE3N0Y2RCwgMHg0QTc2NEQ0QSwgMHg0ODhDRTgzRSwgMHgyOTg4NzIxOCwKKzB4OUEwNEJERDAsIDB4RUYzMzEwNzAsIDB4QkNEMkY4ODQsIDB4NkJGNjZBNkYsCisweEI4NTE0M0NCLCAweEZBNTI5Mjc4LCAweDlFQTNBMzU0LCAweDRBNzNCREFGLAorMHgwQ0JCNzU2MywgMHhEMDFBRTM1RiwgMHhEMkFDM0RBQSwgMHhGQzgyNDNCNywKKzB4RDgwNUQ5N0IsIDB4QzE2MkE3NUYsIDB4MUQ0OUFDNjcsIDB4OUUxQkMzOEMsCisweDFEMDZBQUU4LCAweEVBRjgwQ0Q4LCAweENFODI1REQ0LCAweEFDQTNGMDZBLAorMHg4M0QwOTJFRSwgMHgzRjJCQUFCQywgMHgyNDgyRDEyMCwgMHhGMzAxNjgwQywKKzB4N0RBQzM3M0YsIDB4RjVENjE3OEQsIDB4QjdFOTIxN0YsIDB4Q0NGRThDMTMsCisweDk3NjAyNEUwLCAweEEyRjM5RjhDLCAweEI2QzY1NzM0LCAweDEwQUU1MTRBLAorMHg2OTY1ODRDRiwgMHgyNTQyMTEzQywgMHg0NzlDQjIwRiwgMHg4RDNBMjJFMywKKzB4RjdDNEI4OEMsIDB4RjRGN0ZCRTIsIDB4MkY1NTMzMDgsIDB4OUVBNzFFM0EsCisweDdCOTU4RjQ4LCAweDA5MjdEQUFCLCAweEYwODk0OUI3LCAweDdDRDQ2QzBFLAorMHg3QTg5MkJCQywgMHg4ODJGMzJDRSwgMHgzNEM0OTBDOCwgMHg4NDgzRUQwNCwKKzB4MDdFQjRFRkMsIDB4NEJFQkNEODIsIDB4ODNCMTVFRTgsIDB4OEYzQjc4QUMsCisweEY5NUVGREE5LCAweDgxNkJFQkY5LCAweDI2OUJEQTU4LCAweEVFMzczMzQyLAorMHhFMDlGREE5RiwgMHhDNzY1MUFBQiwgMHhCOEQzOThCMiwgMHhDN0Y0NDlCMiwKKzB4MDMxMzEwRjUsIDB4Qzg2OTcwNkYsIDB4REEyMkYxMjcsIDB4OEM2OERGOTEsCisweEU2NzYwNjhBLCAweEI4NUFBQUM3LCAweEQzMkYzNUJDLCAweEUyMkRGMDMxLAorMHhGRTE0MkJEOSwgMHhENEZCMjcwMCwgMHgyRDE5NzcwNywgMHhBM0E0M0E2NCwKKzB4MEMwMkIwNTAsIDB4RTk0NUFENTYsIDB4N0RFRTBBNUQsIDB4MTA3NURFM0UsCisweEQ5OUFEOTFDLCAweDZBN0JCNzFELCAweDE3NzRCM0I4LCAweDIyMjhCMTEyLAorMHgwREVFRTg0NCwgMHgzODA3NEVCRSwgMHg2REFDRjU3QiwgMHg3RTAwOTRCNywKKzB4Q0U0NkY4RUMsIDB4NERBRjM0RjQsIDB4NUI5NjE5MDcsIDB4QzgyMzZGRjcsCisweEZEMzgwQUE3LCAweDYxRUJBODRBLCAweEFFNDg5MkVCLCAweDBGMUI2MzY1LAorMHhCMEM0QzlBMCwgMHgwNEU2MDEyRCwgMHhBNUY5MEQwMSwgMHhENkM4ODgyRSwKKzB4QkNCOUMxRUIsIDB4MEU1RTBGRUMsIDB4NTNBNDY4ODksIDB4QTJDMEZBNTEsCisweDUyMERBNDU5LCAweDNGRDk1RkEyLCAweDZFMUQ2RkU4LCAweEJDMDkzMjIwLAorMHhBQjE2MzkwQSwgMHgxNjNFM0Q2RCwgMHgwQTYzNTE3QywgMHgzQkYzOEYzRCwKKzB4ODhBMUY2NkQsIDB4OTYyNjM1MzYsIDB4NDEyREYwMDgsIDB4MTJGQjEyNkQsCisweDQ0NDQxRDdBLCAweDMxQzlGNzI2LCAweEY2NkY2MENGLCAweEFFMTQ1M0Q0LAorMHhEQUVBRDcxQiwgMHg1NEVBRUUwRiwgMHg5NDhCNzNCQiwgMHgzMUVBM0U3NCwKKzB4MzU1RDRGREMsIDB4MkExRjNBOUUsIDB4NTg2RDA4REYsIDB4MTIzQUMyRTgsCisweEY1QUMwMDY1LCAweDg4NzRBQ0FCLCAweDA1QjAzRDYzLCAweDAxQkQ2QTRDLAorMHg3QTZBOTg4MCwgMHgyQkMxNkY5MywgMHhDNDExMkYwQywgMHg4Mjg3QjQwRCwKKzB4NDhFQUJGMDgsIDB4MjlFNTY4NjAsIDB4MEY1MDVDODQsIDB4NDQ3REMwOEIsCisweDE2NjUxMTlDLCAweDAwMzQ3RTM3LCAweDQ4MkVGMDNFLCAweDAxQjE1RDQ0LAorMHhFNkMxQjlGRiwgMHhCMTY1RTQzNiwgMHgwQ0Y2OTBGNywgMHg3RkM1QkQwMSwKKzB4Qjc4NEM3RjQsIDB4OUJFMDRFQkIsIDB4OUY2MTQ0MzEsIDB4NkMzN0E1QTksCisweDJEMERCODdELCAweEY2NTExMzY5LCAweEUxMTUwNzNBLCAweEY5NkM2QUI2LAorMHgwNEExM0MzQywgMHhCRjMwQjJEQSwgMHg5M0QxOEZDNiwgMHhGNjdEMkU0NywKKzB4Q0EwODkxNTEsIDB4NTFBNkJDMzksIDB4OEMxRkNBOTMsIDB4RkJGMkYyQkIsCisweEFEMEEzRjMzLCAweDgyQUEyNzY3LCAweDgxQkYyMzEzLCAweDc1OEE4MkI4LAorMHhFMTAzNzg4RSwgMHhDMDBDNEI1QywgMHg1RjUyRkY1OCwgMHhBQkFEMzhGNywKKzB4REE2OEVFOUEsIDB4OUI2RDQwNUQsIDB4ODAzNDQ5RDksIDB4NjE3OEIzNDUsCisweDNDNzg1RkI0LCAweEZFQkFCRTU1LCAweDBFMjQ1OEFCLCAweDAyMUYwRDcxLAorMHgzOTIwMUVEMSwgMHg3NDFCMUE3RCwgMHhFMEIwQUZGNCwgMHg0NTY1MkNGRiwKKzB4OTA3REE2NzgsIDB4MzEzQTkzQjQsIDB4MEIwRDZCMEQsIDB4NDJDOTZFNDMsCisweEVFRTNFN0UxLCAweEU4M0M4M0U5LCAweDkwNTJCODY3LCAweEY5NTE0MjQzLAorMHg2MUYyMENCMiwgMHg1N0UxQUM2NCwgMHhDMjQ0MzEyMywgMHg0MzJDOTZENCwKKzB4NjE2QTgyNEYsIDB4M0M4RDFFMDYsIDB4OEU2NDIyMkEsIDB4NjVDMUEyMUQsCisweDg2ODYzMDhBLCAweDJBNTc2QTJGLCAweDFDQTBGRjIwLCAweDJDOEY5RDNBLAorMHhDOThDOUM2OSwgMHgzNTMyMkEyOSwgMHhERkQzM0M5MywgMHg5NjM0RjQxMSwKKzB4MEI0RjhGRkMsIDB4M0FFRDRCMDEsIDB4RUJCQzcwMTIsIDB4RUQyMzg3RUEsCisweDQ4QkY0MkFGLCAweEQ2MDM5OUQ2LCAweDdBOUI4Q0E5LCAweDUzODg2MzM3LAorMHgyREJCOTQyOSwgMHgwQTZBRjc2NCwgMHhERTREOEY3OCwgMHgxRURFQ0VFNCwKKzB4NEY4RUU5OUUsIDB4QUYyM0VBRkQsIDB4OTI5NTUwQjEsIDB4MkNCRDg2MjEsCisweDIyQThGQUEyLCAweEJFMkEwQThELCAweDA2RjdFNzk0LCAweDE2RTFGM0VDLAorMHgwOTNBQUVBQSwgMHg5MkQ0MjlGOCwgMHhCQjc5QTdFNywgMHg0M0VGODlCQiwKKzB4MEUwOTc1MTEsIDB4NzQ4RTY4QjAsIDB4MzIyQzAwQUMsIDB4QTYyRUY0MkEsCisweEQwM0JCOEJDLCAweDlGRjY3ODEwLCAweERFMjRCRjAzLCAweDE0MENBNkZELAorMHg2OEYxNkI0MSwgMHgxQjdDNjhDNywgMHgzMjY0NjM0MiwgMHhDNUU3MTRGOCwKKzB4RUZGRkQyQjgsIDB4Mjc4NDM2MjgsIDB4Rjg0NDVGNTEsIDB4QjlFODUxOUIsCisweDhFQjAxRDA0LCAweDM1NkZCRjJGLCAweDMyRTk2QkFELCAweDZBNjI5QkRFLAorMHg1MjA2MzMxMywgMHgyMDAwNjlCMCwgMHhFMTYxQ0Y3MSwgMHg4NEZCN0ExMiwKKzB4MTgwNUFEQzAsIDB4ODBGNzUwMTIsIDB4RkU5RTYyOUUsIDB4OTMzOTVDMzMsCisweEZGMDc1QTkxLCAweEI2MUU0NkI4LCAweENBOUZFN0M4LCAweDk3RENDQkNBLAorMHhDRUZGQjZGOCwgMHgzMEVFNzk4NSwgMHgxRkFCQzgyOSwgMHgyMEIzRjU3QiwKKzB4MjcwNDJCMDcsIDB4RTEyQzUxNTEsIDB4MjM0ODJCOEEsIDB4N0I5QjhFQjIsCisweEM5OTdGRUIzLCAweDc2QUIyNDk3LCAweEQ1Q0RBNTkwLCAweDlFQkU5MEZELAorMHhFMzczMkIxOCwgMHhGRjI4Q0VDOSwgMHhDNjU4MjMyMCwgMHg2RUYxMDZGQSwKKzB4OEVENzQwMjMsIDB4MUEwQjY5RTUsIDB4NEE5NUREOTEsIDB4QjQxQUY4MkMsCisweDgzREY2OUQzLCAweEM1NDg4NjFDLCAweDJGNjBCQTkzLCAweEZDODE1OTg0LAorMHgxQTg0OEI2NywgMHgxRUFFODdDNCwgMHhGNzQ3OTEwMywgMHg4RTE2REI1MSwKKzB4MDQwQjk1QjksIDB4MkE5REI4MTIsIDB4OTg3QUZDRDEsIDB4ODY2REY0MTMsCisweEJGOTU1OEVELCAweEFDRjFBRjJGLCAweEE2NTMwNUNDLCAweDE2ODMzNkYzLAorMHgxRTU5Qjk3RiwgMHgzRjlGNDQ3QywgMHgzRDU0QjMwRCwgMHhFOTM5RDU5OCwKKzB4MzZBNDA4ODUsIDB4MDIzOTY3OTQsIDB4RUIwRjBBNjcsIDB4Q0VBRUExMkYsCisweEM1OEI0QUM4LCAweEU2RDQ5NzYwLCAweDBGOEYyNzc2LCAweDY2QThGNDM2LAorMHgzMUJBQ0Q3RCwgMHgzNzY5OTNERSwgMHgzMkJEMDQzMSwgMHg2OEJEQzcyOCwKKzB4NjNFQTY3NDgsIDB4RTZCMDBFMjksIDB4NzQ0OENBQkMsIDB4NDJBNjUxN0QsCisweEJCMTMxM0M0LCAweEEwNERDOEZGLCAweDNENDAyMjM3LCAweEEzODI2NDVGLAorMHg1MkVENTVENiwgMHg5MkQ3RDdCNywgMHg1NDEyMzBGRiwgMHg3QUZDMDQyMCwKKzB4M0RDNDYyNEYsIDB4RDlCMjE5M0QsIDB4QTczQjk3MDQsIDB4QkJERTBGRjEsCisweDlFQjU2NjE1LCAweDhBQjA4MEI2LCAweDNDNEQ4RTE0LCAweDUwMDFCNDNELAorMHgxRUJGQUEyMywgMHhENEFBQ0QyNywgMHhDRkFBQjRCQiwgMHg2RkZFRTYxRiwKKzB4QUU1QTc0MjYsIDB4REI5NDI5NDksIDB4NDUyQzBCMTYsIDB4NzM4RTA2MzcsCisweDM2QTUxMjJELCAweEZGMUY3QTRFLCAweDc0M0QzNUNGLCAweDg0N0Q1NEE5LAorMHg0MkMzRUFCQSwgMHhENDY3MjhDNSwgMHgzMEIyNzA4RCwgMHg0RjZCRTBCQywKKzB4M0MyNjc5MEQsIDB4QjBCNjdDOEEsIDB4RUUwN0VGREMsIDB4OUUzODA2MTEsCisweEVBRDY4MDRDLCAweDRFRjY2MDI0LCAweDg0NTlBRTM4LCAweDFERUFBRkZCLAorMHhGNzY1NzNBRSwgMHg2Q0IxQzhGMCwgMHhGRkNDMjY3RSwgMHgyNkEyMTVGNywKKzB4MEIxQTA1N0MsIDB4N0RBQjlDQjcsIDB4RDQwQkNCQTksIDB4RTU2MUY5RkUsCisweEE0NDAxM0E2LCAweDdCMjJDMEI5LCAweDk5OEE5MjFGLCAweEJEMjUyNDRCLAorMHgxNUUwN0ZFRCwgMHhGMTVCMkUzMSwgMHg1NEU4MDAxNiwgMHhBMTJCQ0U3RiwKKzB4NjU4QTIwOTMsIDB4QjY0MkM0N0IsIDB4RDczMUZDMDAsIDB4QzAwRTMwMkQsCisweDU1QjI1MURDLCAweDM0MjkzOUVCLCAweDZFQURCMkY3LCAweDBDRjkzMzE4LAorMHg2MUVCRDg1QSwgMHg5OUI3MTVFRiwgMHg2NzlDOEQzQSwgMHg5Q0MxQjgwMywKKzB4QUJFRjk1NUUsIDB4QjhDRkY5RDQsIDB4NzA3QTgzOUYsIDB4RjVEMDJBN0UsCisweDU5RTBEOTAzLCAweDVBNDI1RTNCLCAweEJCNjExNjNDLCAweDk2RUNFOUFBLAorMHg3OTdCODJBQSwgMHhBOUZBNkJCNiwgMHg3OTdDMDBEQywgMHhDMUMxRkM0QywKKzB4OEY3RkRBNjYsIDB4Nzc5MDI1MTQsIDB4NkQxQjg0M0QsIDB4NEY4ODFGQTQsCisweEMyNEFENjI1LCAweEJDMjM3QTQ1LCAweDlBMkUwRjQ0LCAweDgyRkFBM0YzLAorMHhENzBFMzQ4OSwgMHg0RjJCMzQxNywgMHg2NUNGNjVFNCwgMHhFQUFFNkE5MywKKzB4NEJFQUVDMkMsIDB4NDkxODcyM0QsIDB4N0Q4RjMwQjQsIDB4NzcwNkY1OUEsCisweENCMkE3NDUyLCAweDUwODNEMkQ2LCAweDQ3MjRCNDI2LCAweDg0RUIxNURDLAorMHhCQUEyQzZDRiwgMHg3MUZBOTg0QSwgMHhEREY3QTNERiwgMHhCMTE1QkYxQSwKKzB4MjU4QUYwRTMsIDB4QTE2MzdEODcsIDB4MDM1ODVERjgsIDB4NUVBNEI4MEQsCisweDg2NDFGMzE4LCAweDY2RUUyRjI0LCAweEM4MUU1MDVFLCAweDVFNjQwNjM5LAorMHhEQjc3MzlCOCwgMHgxQTNCODYxRiwgMHgwRjVFQ0M1MSwgMHhCMjFDMDBERCwKKzB4NjgwRkYzMEIsIDB4REU2OTc0NjgsIDB4NTdBNDNCMzMsIDB4RDdFRjZCM0IsCisweDRCRkM3RDI1LCAweDcxMEYwNzUyLCAweEFCQUE5NzUyLCAweENGQ0ZEODRELAorMHgzQkNDMUNEQywgMHgyMzgxQzUyNCwgMHhCNjBDQUQ5MiwgMHhFMDVCQzFBQSwKKzB4MkI4ODdEODgsIDB4Q0Q0NTY2QzUsIDB4MEQyOTc2RTcsIDB4Q0IwMDBBMkMsCisweDY2N0JFQ0Y2LCAweEVGQzdGMjIxLCAweDdBNzU4NEQxLCAweEM0MUQ4QjJFLAorMHhEOUJCN0QzRiwgMHg3Q0VCNTYyNiwgMHg3RDgxNjVBMCwgMHhFRTE3OEY5OSwKKzB4M0U4QThDQjcsIDB4NjkzRDQ1MDEsIDB4QjBFMjI4QTUsIDB4RDU1QjczQzEsCisweEFGOTA0M0JGLCAweDZDNjI3QTJDLCAweDdCOUY0OTBDLCAweDdFQTYxODk5LAorMHg5MkI5ODBBRiwgMHg2RDEzQzc1OCwgMHgyQzAwN0M3MywgMHg3NDMzNkUwRCwKKzB4QTM5RjEzQUMsIDB4NTMzRjA1RDcsIDB4NzU1MzZDRkIsIDB4OTcwOERFMjcsCisweEUyQTE0RTg3LCAweDM2NjczRkVGLCAweDcxQkE2NTRGLCAweEI5OENEMkZDLAorMHgyN0YyOUE2RSwgMHg4MjQ3ODE3MSwgMHgxQzI4MTVGMCwgMHg4QThGNDU0OSwKKzB4MDQ4QThEOUIsIDB4N0NFRTUxRjIsIDB4QTE2NDhBQzMsIDB4MDA0RjhCOEYsCisweEI2RkU4RUYwLCAweDZEMTBBMEExLCAweEFEN0EyNEQ4LCAweDc1MDM5NzE3LAorMHg5Nzg0Nzc4NiwgMHgyNzkxQ0MwNSwgMHg2OTM3RkQ2RiwgMHg2MEY5ODExNSwKKzB4NUZBQjZEMzUsIDB4QzA1NTBBNzAsIDB4QzBGNEQ4MTcsIDB4N0I1QkZEREIsCisweEVGNjNCNEQyLCAweDZDODdDNkM1LCAweDk1NkQ2Qjg3LCAweDY5MTc5MjU3LAorMHgxMDk3M0M5MCwgMHg4Q0RCRTg2MCwgMHhDN0M3NjFFRSwgMHhGODIzRTM0RSwKKzB4NkZBMkNGM0IsIDB4QTkwM0FCQ0IsIDB4QzgyQzlCMDEsIDB4NjBGRTk2RTYsCisweEU1RUMzM0MwLCAweDczQTMwMTFDLCAweDJBMUI5MDU0LCAweENGMTZGOTJELAorMHg0RkFGNkNDOCwgMHhEOURENzRGRSwgMHhCM0M2MzlFRCwgMHgzRjQ3QUY2MywKKzB4QzhFOTlEMTIsIDB4OTJEOTU5ODYsIDB4ODM1QUNBNkYsIDB4RDUyOTMwQTIsCisweEM3REQ1NEE1LCAweDYxN0ZERDE1LCAweEU5QTZEMjk1LCAweEY1NkM2MDg3LAorMHg3ODEzQjY2MiwgMHgxRjhFQTI0NCwgMHgxQ0RFM0JBRCwgMHg1OEZDMEY3QiwKKzB4MDJFMzFBNUEsIDB4QTc4RUFDNzQsIDB4MTBDMDYxMDcsIDB4MjJCQTNDNjMsCisweEY4NEFEMjI0LCAweDZBOEJGNjZDLCAweDJBNUNBQUM1LCAweDhBREMzRkI1LAorMHg5NjgzNDUxQSwgMHgxQjUyRkNCNCwgMHg5NTQ5MUJBNSwgMHhGRTZDMzcxMywKKzB4RTkwOThDRUYsIDB4NzNDMDFFRjksIDB4NkU4NUVGMUEsIDB4RUUxODk3NDMsCisweDJFOUU1Mjg2LCAweEMxRkFBNjY1LCAweEQ4NjFFMzg0LCAweDcwMUM4MzRELAorMHhEQzVDQTVDQywgMHg1MkEzQTZDNCwgMHhGMkFGMkM0MywgMHhDMzdDNjQ2NSwKKzB4NkU5NEFENjksIDB4OTg4MDhBRjQsIDB4RUQ4QTk5RjIsIDB4Mzc3MjU3RDMsCisweEU2MEYyMDk2LCAweDYxNUVGQ0I4LCAweDY3QTJCQjNBLCAweEI0RERENDBGLAorMHgxRDQ3RjkxOCwgMHg4NkY3N0Q2RSwgMHhGRDA1RDJCOCwgMHhFMThDMzMwQywKKzB4QTQ4MjYwQTQsIDB4NTYxNUI4M0IsIDB4QkNEN0Q4NTUsIDB4RjgwNzMyMTksCisweDg2MjJCQjg5LCAweEQzNUNFMDVCLCAweDE3MTYyNDgzLCAweDEzN0JEQjY5LAorMHhFQ0QwRjIyNiwgMHg2MUY4OTgyQSwgMHgzQzEwQUJENCwgMHgyRjMzQUJGNCwKKzB4OTM1OEI1NDcsIDB4NThCMjc3QTcsIDB4OTI0NTZBN0MsIDB4NDM4NEI0OUEsCisweDVGMUZGMEVDLCAweEExNTNFQTRELCAweEE4RTQ5MTAwLCAweEQzQTc1NzIzLAorMHhEMUFEQzYwNiwgMHg3NkMzMTRCNywgMHhCQzZBQjIyNywgMHgyNTczMTJBRiwKKzB4OEI2QUExRTMsIDB4RDg3RkY1RTgsIDB4MkJBRUQzNzMsIDB4Qzg0OEFCNjMsCisweEI3MkIxRTVFLCAweDczMEE3M0Q4LCAweDQ5MTVFNUI2LCAweERGN0Q3N0FELAorMHhFQUUyNDdENywgMHg5NTU2RERBOCwgMHhERTBDOUM0NywgMHhBNEUzMjk2RSwKKzB4MzFGNUJDOTQsIDB4MDUyNThCMjQsIDB4MjgzNzM3NEYsIDB4QzdFNEM4MUIsCisweDVBMUFDODE5LCAweDA2ODA3NEFFLCAweERGODc2NzMyLCAweEMwMTkyRUY5LAorMHg3RkZEODREOCwgMHhGRjFDRTE0OCwgMHg4MjFCNEFBMywgMHg1NjY3NDgzOCwKKzB4RjlBMTQ3RjQsIDB4MTgyRUY1OEIsIDB4MTZFMTcxNzQsIDB4REUyNzAyOUUsCisweDhCRUM1NUFELCAweDQwNjQ2Rjg5LCAweERCRkY5MkZDLCAweDlGMjRDMDE3LAorMHg3MTFFQUQxOCwgMHhBNjYzRTFFRiwgMHhFRjkyRjY4NCwgMHg0QkQwNUU2NywKKzB4N0UwODlCMTMsIDB4Q0JGNjE5QkUsIDB4Q0VCRUYyMzEsIDB4Qzk0NzU4NkMsCisweDBGNTI2QzQ3LCAweDY2NzI2MDBGLCAweERBQUI2M0RELCAweDk1MEQ0RkQwLAorMHgxOTlDM0VDMiwgMHgwRjIwMUM5RCwgMHgwNkJDQzhEMywgMHhBNzY3MkM2RCwKKzB4QjM5QzdEMEMsIDB4Qzc0QjA4MDUsIDB4QzlCQkQyNDksIDB4QUNERDUzOTYsCisweEFCN0JERjhFLCAweDEyMDEyQjhFLCAweDY3MjM2MDQ3LCAweDBBRTA3NDFCLAorMHgxRDc0N0U1NiwgMHg3RUM2QzAwQywgMHhEMDhFODM0MSwgMHhCMEFCREFENiwKKzB4NEZBNEJERjYsIDB4OTBDRThEMEUsIDB4NkU3MzQxMTcsIDB4M0VGOTE5MkUsCisweEFDQTMyREEyLCAweEZEQjlDNThFLCAweDI1NjYyNkI1LCAweDVFQTk2MUIzLAorMHhGQkMxNTc3NiwgMHgzNjYwMkI1RiwgMHhGOEQwODY0NCwgMHg1QjY5M0MyMywKKzB4QzYyRUEzQjEsIDB4QzY2NEM3QzMsIDB4NzNCRTg4NTksIDB4MTdGNDRFOEYsCisweEY5QjhEOTIzLCAweEQxNjhBM0E1LCAweDZDQ0QxMTBDLCAweEQzNTMxODFGLAorMHhDMEU3NzRFQywgMHg1RjlFMTI3QywgMHg2QzgyNDUxMSwgMHhGREExMzQ5NCwKKzB4Q0I1ODhCQTYsIDB4NDcxNDg2OTQsIDB4QUI4NzdFODcsIDB4RTk3Rjc1N0IsCisweEY1NEQwQTJBLCAweDBGRTExODkxLCAweDVEODc0N0ZCLCAweEU3ODAwQzdFLAorMHhFRjk2Mjk4RiwgMHg0MDBGNDU4QSwgMHhFMkQwNDUxOCwgMHg0QjRFNkVGQywKKzB4OUIxNTAwMkMsIDB4M0NFMUI1MzcsIDB4RjVBQ0I5QjgsIDB4NjcwMzA2NDcsCisweDQ3NUZEMTQ4LCAweDFFMDNBNDBBLCAweDg5NkM3QzA1LCAweDg1RjcwQjY4LAorMHhDNTkwQ0E4NCwgMHg1M0I1NDQwRSwgMHgxNDAwRjc4RiwgMHgzQUJFN0Y4QSwKKzB4MTlDQTY3RkYsIDB4NjhCNTRBMzQsIDB4NTU1OTg4QUMsIDB4NEFCMTZCNEEsCisweDc1MTFGQTYzLCAweDI0OEVDOUVDLCAweEMyNUFGRTRGLCAweDE5RjU3OEUxLAorMHhFOTJBRjAzRCwgMHhBRjlERTE4RiwgMHgyNzk4QzdBNywgMHg2QjQ2OTkwRiwKKzB4NDFENDU4OTQsIDB4NzQ2OTZBMEEsIDB4QzZBQUY1RjgsIDB4NzJDQzEwRTAsCisweERCOUNBMjgzLCAweEQ2QkJEMEYzLCAweDU4RUE0QzA2LCAweERFQTVFOEI5LAorMHgxOTA4RUJEQiwgMHg5NUQzM0RENSwgMHgyMEQ3MDEzQywgMHhFNzI1QzI4MiwKKzB4RkQ0OEM5MkYsIDB4REJCQTdEMTksIDB4QzdCRUJFQTksIDB4QjE4NkI3OTksCisweEREMEREMTdCLCAweEQ4MDkwQTQxLCAweEY5OEJDMjBCLCAweEREN0U0QjlELAorMHhFQkFFNDI0NywgMHg0Mzc2RkRDNCwgMHg3RjNFRkFDNiwgMHhBOUI5QTk1MSwKKzB4NEFFMzkwQzQsIDB4NjUxODYzQUYsIDB4MkNENDJEQkMsIDB4QzJBMTM5NjIsCisweEVGMEZDNDQzLCAweEFFRTYzMjQ2LCAweDA5QjgzRTE5LCAweEMzQzk0MEFCLAorMHgwMEIxMjgyNiwgMHhDMEEzMDQxMiwgMHhGQ0Y2QUJDQywgMHgzQ0ZFNzIxQSwKKzB4NjJDMUY0QzYsIDB4RTk2M0EzNTksIDB4QUUxMUYzRDYsIDB4RTQ5MEQxMkEsCisweEM0NUM5MjhCLCAweDA1Q0NBNzhBLCAweDE5ODJFOTNGLCAweDU3N0Y4MUNBLAorMHg2NkQ1MEQ2RSwgMHhCNEM3MDMwRiwgMHg5MzA5MkMzRSwgMHgxMThCMDhGRiwKKzB4MTc4NTQ1QjcsIDB4RUVENzQ4MzgsIDB4RjdEMkNFNDgsIDB4MjM4OTY5QkMsCisweEI4RUZBRUFFLCAweDc1NzI2QTNCLCAweEIxRTAyMjBGLCAweEM0RDYwRUI2LAorMHgwRUJDMDI0MywgMHg1RkUwRDZDQSwgMHgzNTQ1NkI0NSwgMHgxRjY0QUMyQSwKKzB4NTg0ODRBMUYsIDB4MkExMTQ1NUQsIDB4MzNCQzQ0MDMsIDB4NTZFNEU2MkQsCisweDYwQjQxRTJCLCAweERCNjVEM0Y4LCAweDdFQzE4RDM0LCAweEY1NzVEQzg1LAorMHg2RTBCOTk5NSwgMHgxQzE0QzkxRSwgMHhCMkE5NDcxOCwgMHhBRUM0QTgyMywKKzB4OTkzRDM3NEUsIDB4RjFFNDIxMEIsIDB4OENGQ0MwM0EsIDB4OTlCRDFDMjgsCisweEE5MjhFM0Y5LCAweEJCOTU3RDBFLCAweDc3Qzg2NUVGLCAweDdGRjUwQTQ1LAorMHg0Mjc5QTYzOCwgMHhFNjI4RkZBMSwgMHhCQ0NBMTcxRSwgMHgyODRDOUNFQywKKzB4QTQ3NkUzNDYsIDB4N0UyRjlDMDgsIDB4QkY2NTA0NEYsIDB4NUI3QzNENUIsCisweDZFNjBFRTVELCAweEY1Qzk5NTA5LCAweEZBMzUyQjdFLCAweDZGREU4RThBLAorMHhGMjM0MEZFMSwgMHhERjU0MkI2QywgMHg1MTBDQjMwQiwgMHgzNjdFNzAxNiwKKzB4MTk4QTBBOTUsIDB4QTRERjUwOEUsIDB4NTkzQzIzMzgsIDB4QjEyQkNERTEsCisweDU1NEFEM0MwLCAweDREREFCMUMxLCAweEQyQkQxODUwLCAweEY2RTEyNkNBLAorMHhGODcyODlDNywgMHg4NkVDOTJBNSwgMHg0RTAzMzkwNiwgMHg1MkRDNUYzRiwKKzB4Q0M2RTJFNTksIDB4RkY3NTE3NTMsIDB4REY4QjhCQTIsIDB4REJGNTk1NEEsCisweEJEMzY3NDg4LCAweDZBMENERjFGLCAweDQxMDMxMzlDLCAweERFNDlEQkIwLAorMHg1QTg0MjhGNCwgMHhBMjY4NzJCMSwgMHg5NkJGNzIwMywgMHg5OUQ1RTc4RSwKKzB4MjQzODUwQTYsIDB4Mzg5REFEODAsIDB4NjMzNUQzM0YsIDB4RUM2N0IwQTUsCisweDAyOUMwQ0E5LCAweEY1RjZGNkM5LCAweERGNTc0QzE1LCAweEU2RDNFQzI5LAorMHgxQUEzNDlCQSwgMHg0NTNFNzI1OCwgMHg3REI3OUJFMywgMHg1MUZDQTdGNiwKKzB4MkI0MkZDQTUsIDB4QkYwRTQ4NzEsIDB4NTgwNjNDNDAsIDB4MTkzNTgwRTIsCisweDI1NjA1MzIyLCAweEJDNDlDNDc5LCAweDBFRDcwRkM0LCAweEE3OEI1OUEwLAorMHhFNkNFM0U4QywgMHg5MkVFNjU3QSwgMHg2M0QxMjUyOSwgMHhGOTVEQUY0NSwKKzB4RjkyQzNCRjMsIDB4N0Q1MTQyMDAsIDB4Njk0REY4NEEsIDB4RUYxNzdFMkQsCisweDRFMTE5Q0NGLCAweEEwMjVDNTVELCAweEY5Njk3NEQ2LCAweDI2RDEzRTdGLAorMHg3OTlBREMyNywgMHhENzkyNUVDMSwgMHg4QUU2MEJGNywgMHhGOUVGMUEyRSwKKzB4ODlFQUREM0EsIDB4OUMyOENBQ0YsIDB4NjMzNzdFQjcsIDB4NkQxRUY3RTUsCisweDY1ODVCMTZDLCAweDk5NzJEMTE1LCAweDY1RjhGNUU2LCAweEY5M0RFQ0I0LAorMHg2RDcxNjA1RCwgMHhDNkZEQkNCOCwgMHhEOTM3QkEzMSwgMHhDRUQ3MjdFRSwKKzB4QzM0QzU2MDUsIDB4MjVGQTcwQjYsIDB4NUMwQjdGQjAsIDB4OEY5MzQwRjUsCisweEEzMzc2NjkzLCAweDQ0OThCNjZBLCAweDJEMjFGMzc3LCAweEMwQTRDNkVBLAorMHgwNzgwNzM2QiwgMHhGNDJEN0YwNywgMHhFNTZENDdFNSwgMHhCNDhDMjVENiwKKzB4QTQ4REEwREEsIDB4RkU2OTY5M0YsIDB4RjAxRTE5Q0EsIDB4OEEwQzVDOEYsCisweERGNzAyQzIzLCAweEUxOEE5M0YwLCAweEQ0RDVDOTFFLCAweEQyQTcwNkY3LAorMHg2NzRGOUUyOCwgMHhBRjBGODBDNywgMHg2NDhENDlFOCwgMHg2QkU4NjQwRiwKKzB4RjVGQ0ZGRDUsIDB4OEVEQzM5MUUsIDB4RTU4M0Q4QkMsIDB4ODQyNkMwOTAsCisweEY0NTZBMjdELCAweDA3MjQ5QkY0LCAweDA1NEEyRjQ1LCAweEFDNDZCNzNCLAorMHhCODlFRURGQiwgMHg0OEVBRjg2NywgMHg2OUIyRDdDQywgMHhDQTBDQTBGMSwKKzB4MzhDRDA0MjgsIDB4MDI5ODA4Q0YsIDB4ODZFRTc1REMsIDB4RjRGRUU5RjAsCisweDY5ODdENUU5LCAweDU2QUI1NTM3LCAweDNEREQwOTQwLCAweDQ3NDJGRjg5LAorMHgyQzNCMTc5RSwgMHhEMDVCNUNCMSwgMHgzQzRFOTAzMywgMHg2QkNGMDE0MSwKKzB4RjJGNkQzRTIsIDB4QUQyOTdCMUYsIDB4QjFDQzIzRDQsIDB4NTQ1MjAzOEIsCisweDE3NTFGQ0JFLCAweDI0QUE0NjVGLCAweDk0QzYyRDE4LCAweEY0OUIyRUM4LAorMHg5N0FDNDdERiwgMHhENjZDMTlCNSwgMHgwOUFBQjI5NywgMHg4OTkzNjE0NCwKKzB4RDE1QzAyNkIsIDB4NENFQzg3NzgsIDB4OTQwNTBENjEsIDB4RDgxMkU5NkYsCisweEI2QkQ3QjEyLCAweEE1RjlCRTc3LCAweDUzMUE1QzdBLCAweDM2MDVCQTcxLAorMHhENTAwQ0U1NCwgMHhFMzI1OTY0QywgMHgzMjM0MzJGRSwgMHg1ODBBOURDOCwKKzB4RDI1QTMxMzUsIDB4MDg5RDZDOUMsIDB4NTg4NTZGNzMsIDB4N0RGQ0VFMzAsCisweDdERTI1ODBGLCAweEY0RTQ0ODhCLCAweDcxODIxRERGLCAweEQxOTRGNURDLAorMHg3RDA3MDM5NCwgMHhCQTI4QkY3NiwgMHhBQUYwQTM4RSwgMHhENEY2Mjc1RSwKKzB4MUI3NDJFNjYsIDB4RDlFNjhFQTksIDB4NjhCMEY5MzksIDB4NTJBRjlEN0IsCisweDU0QTM5NzA1LCAweDIwRjg0NEMxLCAweEU2OTgxRERDLCAweDgwMzIyRTYyLAorMHg1MzYyMzVCOSwgMHg3QTU3RjRGQywgMHgxNEVCRjM3NiwgMHg2NEJFMkU1QSwKKzB4NzBBMTg5MTAsIDB4MEZFMDk1ODcsIDB4MTBFOUNBNzgsIDB4OEY5MEQzRDIsCisweEFFNzQ3MTdELCAweEE1NDRFQUVELCAweDY3NDZBRjNFLCAweDQzMENCM0ZDLAorMHhCQzE4NTU3NiwgMHhFQUEzNURDMywgMHhEQTYzMDlEMiwgMHg0MDY0M0Y4NywKKzB4Njg4NTkxMTcsIDB4QTE3QUM4NEQsIDB4RDc5MjJDQTgsIDB4RUY3QzBCRUYsCisweDgzMzM3MzQ4LCAweDlCNEIxNzkwLCAweDg4NzZBNzdFLCAweEYyOTNDOUM3LAorMHgyMEQzOTlDRCwgMHhBNzgyMjRCQSwgMHhGRDEyNzlDOCwgMHg4Qjc4MzdDMSwKKzB4MEYxREQ0MTUsIDB4QUUzRkJEMkUsIDB4QzRGNzdCNTIsIDB4NTFFNzlGQjMsCisweDdBODU2RDlELCAweDE0QkZEQUQ3LCAweDk5M0ZCNjI1LCAweDY2N0M2NUVGLAorMHgzMkY4MzMzOCwgMHhBQTA2RURDRSwgMHhBQ0U3QTA5OSwgMHhEMjZEQUU4OSwKKzB4REM2ODkxQ0UsIDB4Q0QyRjZGMDQsIDB4Mjc0MjVGQjgsIDB4N0MzMDFEOEQsCisweDFFREVCRTFBLCAweEJFNTQwQUY4LCAweDFEMzU2QzZBLCAweDk2M0U4NjM5LAorMHg5OTIwQ0E1NSwgMHhERUZFNUY0NCwgMHgxMDdENTU0NSwgMHgzRDA3OUJFNCwKKzB4RUY2NzNGNjYsIDB4REIzQzI5NTQsIDB4REQ3NkQ2NjYsIDB4MURGQkVGNTksCisweDhGMzg0QjM0LCAweEJFNkY3NzNDLCAweDA3OUREMTg3LCAweDIzMTRBQzhCLAorMHg1RkVCMDExNCwgMHg1OUU4NUNGMywgMHg5QkZFOTE5MCwgMHhCMzYwQTMxQiwKKzB4NEY3RUY5NjcsIDB4RkVCMEQ1NjEsIDB4QkZFNzc5RjIsIDB4RjMzNzAyQjMsCisweEJCMjYzNDE3LCAweDA5NjA3QzY1LCAweEE4NzdGMTA5LCAweEJCNDNDRkYxLAorMHg0QTE5MERCMiwgMHg5QjdCRDM4RiwgMHhBRUI3QzQ0OSwgMHgzREIzQTQ2MCwKKzB4N0Q5Mjg1MjIsIDB4RDE4QUM5NjYsIDB4MTg3RkU3NjYsIDB4OTc2Mjk3OTIsCisweEY1OUQ1MDZFLCAweDZGQkEyMDJDLCAweDc3MDM1RkYzLCAweERBMDY4Q0RFLAorMHhFMTk1Nzc5QSwgMHhBRUI5MjI5OCwgMHhEMkE0NEVERCwgMHgxMjU3N0Q4NSwKKzB4QTNCNDdCOUUsIDB4NUJEMDdDQjcsIDB4NEI2QUUzRkMsIDB4QkUzNUI2RTIsCisweDlEN0Y3QUYyLCAweDlBMzhFQTc1LCAweEQ4N0ZCMDU1LCAweDMzMzlGMkEzLAorMHhEN0NCODJCNCwgMHgzNTc3MjFFNCwgMHhCRUY0NjU1MywgMHg5REUyOENBMywKKzB4MUIxRUMyREYsIDB4RTI5QjlDQzAsIDB4RUZBRTM0N0UsIDB4RTU4NjQ5MTcsCisweEEwOTdCNzEyLCAweDZCNjcwNDFFLCAweDVCMjk1NDJGLCAweDAxRDk2RUVELAorMHhGOUE2REMwNywgMHhDMEI1RTNGMCwgMHgyMUUxODk5QywgMHhFOTM3M0E4NiwKKzB4RjMxNzY1MDksIDB4OTUwODQ0QTIsIDB4N0QyNEZGRUIsIDB4NURDMEJDQTAsCisweEM0NDJCN0MxLCAweDM3REM2RUMxLCAweEM2NUM4QkE1LCAweDE4RjBGQTg1LAorMHgyQUQ4MEQyRCwgMHhDNjhDRENCQiwgMHg2QUU1RUM5MywgMHhFMzk1NURCRCwKKzB4M0U4MEM0QjMsIDB4NTBGRUQxMjcsIDB4NzQzQ0FCQzAsIDB4RDBFOTE3MDcsCisweDlCRjdFQjRCLCAweDdBNjMyNzU1LCAweDlBMTkyNDgyLCAweDhGOTIzRTlFLAorMHhFMkU3MEZFNSwgMHg1RjUwQUExNiwgMHgwRUM0OTZEMSwgMHhDNkVDNDg2MiwKKzB4MDQwQTAyNzQsIDB4MkZDOTUxQzIsIDB4RjY1RDNBODAsIDB4OEQ1ODUxNjMsCisweEM2QjUyOUQxLCAweEQyQ0FFRTZFLCAweEUzRTExMkI3LCAweDMyNDQzMTJGLAorMHgxQjM5M0U1OCwgMHgyNDQ0RDUzOCwgMHhCRTY5QUMyMSwgMHhDOTJBMDUwNiwKKzB4RDFBNzQ0MzQsIDB4NDlDM0VBMDUsIDB4MEU1M0IzMTksIDB4Mzg0M0NFMDMsCisweDhEQjg0MTVFLCAweDc2NkI2RkM3LCAweDUxNUI5RTdBLCAweDNCQTA1QjMyLAorMHhCRkFGQzQ0OSwgMHgzMTMwMkE1NywgMHgxOTYwQTIxMSwgMHg2NkEwOTdFMCwKKzB4QkM2NUE5QjQsIDB4ODlFODMwNjUsIDB4MzZGREJGMkMsIDB4RENENDY2NEEsCisweDBFRDZDRkJGLCAweERENERDNkRDLCAweEQ3NkQyRjAwLCAweEI2REE2NTQwLAorMHg5QTM5NjQ0NCwgMHgyOEYxODVERSwgMHhBMEZFRkExRCwgMHhGNDc2RTBFRCwKKzB4RUYxNTUwNUEsIDB4MTgzMzY1QkYsIDB4NDgxRkZEOTAsIDB4MjlBQkVFNzUsCisweDFFQzkwQjA3LCAweEMxMEIyNjU3LCAweDBEQkY2RERCLCAweDUyQUQwMkI3LAorMHhFODdEREI1NCwgMHhEMzcwNDEwNiwgMHhENEUyQzU5MiwgMHgwQ0IyREQwNSwKKzB4NEJBQTJGRkIsIDB4MDI2MTEzNjgsIDB4RDUwRjhGMUMsIDB4NDE2RkYyNUMsCisweDlBNjk3ODJELCAweDI2OEM2NDc0LCAweDJFQ0Q0RDY0LCAweDE5NkRFMkY1LAorMHg0N0E4NTYxQywgMHg4QzdDRTZDOSwgMHhEMkIxRTJEMiwgMHhBMDM4QzE2NSwKKzB4M0FCODg0NEIsIDB4NEE2OTk4MzAsIDB4MEZGQzBCMTcsIDB4ODlCNjg1QUEsCisweERBMjc2RDg1LCAweEU5MzRDNENELCAweEY1MTEyMjZGLCAweDlDREQyQjFGLAorMHg5NEY3NTQ5MiwgMHg1NUVDRUI0MiwgMHg0MkYwQTNEMywgMHhEN0VCNDgyQywKKzB4QTc4RDAzNzMsIDB4NjJGMDg4QTYsIDB4N0VDRjQ2MDIsIDB4N0EzNDA0QjYsCisweDQwQjM2NDk1LCAweDYwNDQxREY0LCAweDY3MjJGNTM5LCAweENGRTc2QzQ4LAorMHhCNkI5NEM5RiwgMHg5QURCNEI2QSwgMHgxRUJCQTY1RiwgMHg1QjUwODFBRiwKKzB4Qjc2NDQyM0MsIDB4QjZGOTEwRTMsIDB4MTRBQzRCNkYsIDB4NUM4MTFFODIsCisweEFBMzZFNUYxLCAweDI0RUM4MkFGLCAweEEyRjFDMDUwLCAweDA1MDQzMjRDLAorMHgzMDRDRUQwRiwgMHgwMUUzMUREOSwgMHhDODJFQzdFNiwgMHhENTVBRkZGOSwKKzB4RkZCMzA0N0IsIDB4MzAwNkYyRTksIDB4QzcyNUJDRDEsIDB4N0RDQzEwODIsCisweEE5QTIyQ0Y4LCAweDY0RDVBRjlELCAweDM4OUMzNEFELCAweDdERkYzN0M2LAorMHg0MUYxNTA5RCwgMHgxODQ1QjNGRSwgMHgwNTVDMjNGMCwgMHhDNjI5MUY1RiwKKzB4Q0REM0M3REQsIDB4NUYwMzU2QjQsIDB4N0ZEMkMzODcsIDB4NDk0QTA5MUUsCisweDUwQzY5RDNFLCAweEZFNzY5QTVBLCAweDYzOTA0NzAxLCAweDg5NjBBQkYyLAorMHhFNjhFREYzQSwgMHgwQUI1N0M4RSwgMHgwQjlEMEE2QywgMHg1MTg4ODE0OCwKKzB4NTBDNUQ1MzMsIDB4QzY5MDM4RkEsIDB4M0FDQkU2NjEsIDB4MENBRUI2MDEsCisweDhDMTRBQjZDLCAweEJBODZEOTRGLCAweDA3MjQwNTZCLCAweDBGRUZGQ0JBLAorMHgxMjQ0OUREQiwgMHhBQkZGRUNDRSwgMHhCMTJBMkJENywgMHg3MjYwQTBFOCwKKzB4QkUxODRBNDgsIDB4Q0ZEM0NBM0YsIDB4REYwODg2NjAsIDB4NzhFRTlCNjcsCisweEE5RURCMTEzLCAweDRGRDVEMzUzLCAweDhFMzQ4Q0M2LCAweEQ1NzhDMzM3LAorMHhGMDQ5M0JFOSwgMHhDQ0ZCNTRFQywgMHg5Q0VFRjg1QywgMHgwQ0FBRTE1RSwKKzB4MzcxQUQxMkYsIDB4OUM1QjkyNzAsIDB4MjQ5NUYwREUsIDB4MDZERTJEQkIsCisweDkxMUFFN0VDLCAweEVFREUzMzYzLCAweDZERDM4RDZDLCAweDJBRjdGM0Q5LAorMHg1MUM4RDExOCwgMHhGMjM4MThBNywgMHg5NTQzOEFFQSwgMHgzQThBNzk4RiwKKzB4MjMwRDJCRUYsIDB4M0QxNjI3M0MsIDB4OUMzNkZGODMsIDB4Nzg1Qzk1MzcsCisweDNFNDJBRjJGLCAweDEyQTE2NzQxLCAweEU1OEQwREM0LCAweDMzRUJFRkY5LAorMHg2RjE5NzJEQSwgMHgxMjhDOUJBQSwgMHg4NThENjAzMiwgMHhEQUYxODVFMSwKKzB4QUUzNTUwNjUsIDB4REUwMDg2RjMsIDB4MEY2NjFBNjUsIDB4RjQzMzQxNjksCisweEIxNTU5QkE2LCAweDM4OTIxMDlBLCAweEU5MDNCQTAwLCAweEFFMENCRDU4LAorMHgwNzNDMjFBMCwgMHhGQ0FEQjI5OSwgMHhCNEUzOUFGMSwgMHg3ODQ3NTQ1OSwKKzB4QjQ2REM4NDcsIDB4REJBOTc2NjEsIDB4MTVEMTE4RjUsIDB4MDFFRDQ4RDAsCisweDk5RjY1OEJDLCAweDM5OUZEQzhFLCAweDQ0RDRBOTE5LCAweDdDMkNFNEI5LAorMHhDQTAzNjdDQywgMHhDQzJCOTgyOCwgMHgxNkFBQ0FBNiwgMHg3QUE1QjZCQSwKKzB4RkVDNzdDNjYsIDB4MjMxQjIyRjksIDB4QzhCRTBEMDQsIDB4NkZGMjc4OEMsCisweDVGOUNFQkI1LCAweDkwMUVBQTVELCAweERFNjgyQkJGLCAweDk5OEU3MEQ0LAorMHhCRDlDQ0NEQSwgMHg2OTk1NDQxRSwgMHg1NzAyRjM2MCwgMHhCQzAzNUVFRCwKKzB4MjBGNjBCNTEsIDB4RDU3MzYxRDgsIDB4QzA3MTExM0IsIDB4NzNDRTZDRTQsCisweEM2NTY5REM5LCAweEQyNEI4OUVELCAweEE2MDUyMjc2LCAweDhDRUUyMDI2LAorMHhGQkY1QjU4RSwgMHhGNjkyREY4MSwgMHg2QjdDREQ3QywgMHhGNUI2QzA0QywKKzB4RUMxQkJBMjksIDB4RDZBQzhDREQsIDB4MzIwNDkxRjgsIDB4MUQ4MTJBQzcsCisweDYzMUIwMDUxLCAweEQwOEE0RDJBLCAweDU2OTc0NkRELCAweEFBNjUzRkNGLAorMHhBOTJFOEU3MCwgMHhDNTlBNjcwNSwgMHgyNzhFQTFGRiwgMHg2M0U1RkExNywKKzB4MUMyMEU4MkQsIDB4NTUwRjdDRTMsIDB4NTVDRUQ0MTUsIDB4NUY5QzRDNEEsCisweDdENzQ2MzExLCAweDVCMDc5NzZBLCAweDEyNDc3RTMxLCAweEFCODExM0FBLAorMHg3OTZFRENFQSwgMHg0QTkwRTRCNCwgMHhCMzZFNjE4OCwgMHhFRTdENUUwRiwKKzB4MTVDRUEwNjAsIDB4QjgxQUIyQ0EsIDB4Mjk2RDIyQjAsIDB4RkEwNzUzRTIsCisweDBEMEQxNUJCLCAweEQ0QUY4QkQ3LCAweDk1MUZBNTc1LCAweENCRUJENThBLAorMHgwQUY1QzM2MiwgMHg5RUY0M0ZCMCwgMHhEOTdFNTE4NCwgMHhBMTQ0NjlCQywKKzB4Q0FFNUQ1NUUsIDB4OTNENENERjksIDB4OTVCMDEzQTgsIDB4Njk5OEYzNUMsCisweEYxRERDMEIxLCAweDQ3NkY5RkM3LCAweEI2NDcyQjcwLCAweDFENTVBQzVDLAorMHhGMEUwQzBDOCwgMHg5NTM3MkJGNSwgMHg3NUNDQ0RCRSwgMHg5RjlEMjAwMywKKzB4Q0FBRDBENTEsIDB4RUU1NENDMkUsIDB4RTVFQkRCRjAsIDB4OUIyNDhCQjMsCisweDRCRjA3RDE5LCAweDU0Mjk5N0U5LCAweDE3NDQ3QzRCLCAweENGMkIyNzY4LAorMHg4NjExOEE1QiwgMHg1NzU3OUYxMiwgMHhDNUNEOUU3NCwgMHg5N0VENTcyNCwKKzB4MDFCRDJFRTQsIDB4MkEwNDAzQTYsIDB4MDE4MzM3NDEsIDB4QTFFOEQzNjQsCisweDREMUEyRUVBLCAweDYyNzYwMzc3LCAweEExMEQ2ODYxLCAweDA5QzY4RTJGLAorMHhBQjQ4Mjg1MCwgMHhBQ0QyNEI3NCwgMHg1MDM4QzhDQSwgMHg3MURFM0E5MywKKzB4NjcxRDI1RTQsIDB4OUVBN0FDMUEsIDB4M0U3Mjg3RjUsIDB4OUZDOTYzQ0YsCisweDczRjkwQUI2LCAweEM3NzVEODQwLCAweDAwQjg2OEQ5LCAweEY2QTlCRTNELAorMHgxN0ZGQjQ3MiwgMHg1RDIzODlFMywgMHgwRDQyQTE0OSwgMHgyRkFCMTIzNSwKKzB4OTBBNzk5OEUsIDB4RDg5NUY2RUUsIDB4MTk5MjEwMTMsIDB4RUU0MkVBNDgsCisweEM1RDE5QTE3LCAweDU1MDc4OTBBLCAweDlGODkzQjI5LCAweDRGRjM5RjE5LAorMHhENkVGODVBRCwgMHgzRkZCMTU5OSwgMHhGMTc2MTAxNywgMHhGQzUxQjkwRCwKKzB4OEY2QzU2NkIsIDB4NDRCQUM3QTQsIDB4MkIyRTM3NTUsIDB4QUJFQ0I4REIsCisweDVDNEExNjI5LCAweDgzN0NDNEY3LCAweDNFNzMyQjBBLCAweDgwM0NFMzAzLAorMHg3MTg2NUQ4RCwgMHgzNDY2NjVBQiwgMHg1OEJGODA5QiwgMHgxMDA2MjZBQSwKKzB4OTQ0NkFCMTMsIDB4RDUzQURDREEsIDB4NzVDMEJGQ0QsIDB4OTU4NTMzMDQsCisweEY0NzU4RTg3LCAweEQ2QjY0NTE3LCAweDEzMjkzRDBELCAweEVDOTM2OEZCLAorMHhENDQ5QTJDQywgMHhBQTE3QjBCRSwgMHg5RDBCODVDMCwgMHg3N0JFRUQxNiwKKzB4NzY5OUNBRTcsIDB4Qzc3NkQxMEQsIDB4OTYyRDQ4Q0UsIDB4ODM4RDAwQkUsCisweDI3OUFFQkY5LCAweDIyRUY4MzdCLCAweDU4RTQ2REFELCAweEI1NkI2MzA1LAorMHgzMjMyRDU4QiwgMHgxNjc5NjlEQiwgMHg1QjYzRjVCNSwgMHg3RTgyQjE3NSwKKzB4MDVEREI0MDIsIDB4NUFCMjlCQkEsIDB4RjNCNjI3RDUsIDB4OTcxNjhDODUsCisweEFEOUVFMDIyLCAweDQ4RjBDRUVBLCAweDg0MTA0QzIyLCAweDY5MEZDQzE5LAorMHhDQTJGMjQ3NCwgMHg3NkY5NTUzOSwgMHg5RkQyQjk4NywgMHg3OUVGQzU1NywKKzB4Q0VFNURBNEQsIDB4MjdFQjk4RjYsIDB4QTA2Mjg5MTYsIDB4OEUwNTYxNEYsCisweDhBQzg5MDI2LCAweDc3MDUxMzVFLCAweDNGN0U0MkI4LCAweDdCQ0Q3NzNCLAorMHhGOThCOTc0MSwgMHhDQjhBNTE0RSwgMHg5Mjk4MjIwRCwgMHg1NjY1RkEzQSwKKzB4RTY2QTFGRjcsIDB4QUM0RUNCNzEsIDB4QTdFNTZGRUYsIDB4OUQxRUY3RjgsCisweDIzNTY2QjY0LCAweEI0RkU4MjJFLCAweDFBQTUzMjA4LCAweEY0NTQ1RTVELAorMHhFQTg2Qzg3OSwgMHgxOEY2QjdDMiwgMHhFMTBBMTdBQywgMHhCRDM3MDExRiwKKzB4RkJERjgxQjgsIDB4QTk3OEE0RUIsIDB4RDQyNDM3QTcsIDB4NDc0RTZBNDEsCisweEY4ODg1MjQ4LCAweEY3NTBCQUE5LCAweEQyMzhFQTYyLCAweEQ2OUJBNzRELAorMHgyNjZFQzZCRiwgMHhFN0VERTA3NywgMHhFOEYwQTMwMywgMHg4QjU2QTk2RCwKKzB4NDEzODA5ODAsIDB4RERGMEIxNkMsIDB4MDBFODM1OTQsIDB4QTUwM0VCRjUsCisweDk2MEEyNThFLCAweDQ5OTgyN0JELCAweDZDOEU2RjdCLCAweDE2NkM4NDVELAorMHhDODQyQzkzNCwgMHhCQUVGQzY5OSwgMHhEOTg0NjIxMywgMHg4MzJFQzE5QiwKKzB4MUVBRDc1OTksIDB4MjIxRTdFRTksIDB4ODE3NkEzMTMsIDB4QjI4RDhFMzksCisweEJBQzI5QTk2LCAweEI5NjRGOTFGLCAweDNGMjY4MTUwLCAweEQ0QkI3MDExLAorMHgzNDdFQzQ0NSwgMHg3RkRDOUU4MiwgMHhFQjcwRjRDOSwgMHhBNkYzOEVCRiwKKzB4Mzk4Q0YxMzcsIDB4RDdGODhDRjUsIDB4Q0JERENCM0YsIDB4QTBEQUZBNzQsCisweEQyOUQzMEFELCAweDgyMkI2OTE5LCAweENFMDU5OTQ5LCAweDNBOTQ2MTgzLAorMHhERTRDNTcyRCwgMHhEMUU2RDg0NCwgMHhDNDNDN0RBQywgMHhEQkJFRUREMCwKKzB4QTY1NkRGNkQsIDB4NDU0QzIyQTksIDB4OUZBNDg3OTAsIDB4NjlCMDQ1MzEsCisweDk5QkIzMDVGLCAweDgwNTAwRjcxLCAweEZFMjM2M0MyLCAweEI2N0Y1MzhGLAorMHgzMDJFQzBDMywgMHg0QTZFMzQ1OCwgMHg1N0U0Q0ZENCwgMHhFNjVDREFFQiwKKzB4RjMxQUJCMzEsIDB4NjJERjk4QUMsIDB4ODk0QUU3ODEsIDB4QjE1ODhBQjEsCisweDQ1RDVDQzNFLCAweDM1MjBGNUIwLCAweEM3MkQwQ0I3LCAweEExRDZDQkY5LAorMHg3NDJGRkE2MywgMHhBMEE1MjI0RiwgMHg1RUExQzg1QSwgMHhCODFFOUY3NywKKzB4MzFENzZDNEYsIDB4NTI1MjU3RjUsIDB4QkZGODUwMDksIDB4MjEyNUIyNzAsCisweDE2RTQ3RTZFLCAweDkxMjhCOTgxLCAweDBENUZCRTM5LCAweEY2N0E0MThDLAorMHhDRjNDNzFDQiwgMHhBQzA0QUJFMSwgMHg5QjU1MEFBRiwgMHhCNTA3N0YxOCwKKzB4RkI3QzVFQzAsIDB4NjQ3ODREQjQsIDB4MUU2NjhCNDgsIDB4ODQ2NTk4MzYsCisweDYwNDQ1N0JGLCAweEY2RjY5QzhELCAweDM5NDMwMURDLCAweEVEMDIxMUJELAorMHg4QkFDMUEzQSwgMHhCQjc1MkZEMiwgMHg3OEI4QzAzNiwgMHhCQ0I5OEU4QSwKKzB4MzNDNTk1REUsIDB4QjNGM0M1RjgsIDB4Njk4NjY2QUMsIDB4QTFGNDJEN0EsCisweDU3NTFBQ0M4LCAweEMwNjk1NzVCLCAweDM1RDUwRjk5LCAweEIyOTRCRjM4LAorMHg4MkE0QTMzMSwgMHgwNTE0Nzc1MSwgMHhDQUUxOEMxMiwgMHg5RTg5QUFGMSwKKzB4MzUzMUMzNzIsIDB4QjIxMTRBODgsIDB4NDE3OTcyMDEsIDB4REREREVDMTAsCisweDAxMTg1RjJBLCAweERFRDUwQ0RDLCAweDcyMTU2QkFELCAweDg4RjNEQjk0LAorMHg1MDQ1MERERiwgMHg2QjFFN0FCRiwgMHgzRDMxNzcwOCwgMHhGREZGNUExNSwKKzB4REM4QjE2OTcsIDB4Q0MyMjQ4RkQsIDB4RDkxOTYyNzIsIDB4NDQ0NTE5NUQsCisweDU0RDkwMjgxLCAweDdBODkxQzlELCAweDY5RkY5OEQ1LCAweEFERTZENzRCLAorMHgyNkQyNzk3MywgMHgwRjE0NzM0RiwgMHgzRjk1N0ZDOCwgMHg4MTJBQzg3NCwKKzB4RURDMEY5QjQsIDB4RDMxRDZENzUsIDB4N0EyNjA4QzMsIDB4RDg5OTg0QjEsCisweEY1ODEwODFBLCAweEVEQjlERjZGLCAweDE2RUNDMTkxLCAweDZCOTQ1NzI0LAorMHgxQkNFODI2OSwgMHgwMkU2REI2OCwgMHg1NjM2MjU0MSwgMHg5RDI0N0NGNCwKKzB4QTUyNjVFNzIsIDB4MkM4Qjk0MTMsIDB4MTE1N0RCNEIsIDB4MzE0NUNGQjIsCisweEZCREVCQ0Y1LCAweDEwNDJCMTE3LCAweDI4NERBRTE4LCAweDEwNTc1QzIxLAorMHgxRERFNTc4RSwgMHg4MEY1OUVERSwgMHhDQUI1MUMwNCwgMHhCNTk0QkRBOCwKKzB4MDhBQ0VGODUsIDB4MDhDOEQ0QzcsIDB4NzMwNEQ0MzMsIDB4RTg3RDNBODgsCisweDMxQ0NGRUQ4LCAweDFEOEU3MUU1LCAweEM1QTJGMDJDLCAweEFDQkYzQjVFLAorMHhBQTE2MUJDQSwgMHhBMTBCRTU3NywgMHhGOUNFNDFEMiwgMHgyQjg2RjAzMSwKKzB4M0Q0QThEMjMsIDB4RUQ5MjZERTQsIDB4Mzg0NEUyMUYsIDB4RkU1N0JDRDAsCisweDM2REMzMDlELCAweDE3MTM3NDA5LCAweDlGNkE4NTA3LCAweDE0Q0YxMkVCLAorMHhBNzcwQUZCNSwgMHg3QzZEQTJFNCwgMHg4NTZCNDhCOCwgMHgyRUEyMzVERiwKKzB4NTVCRDExNjQsIDB4NUJEOUZGMEMsIDB4NTIyOEM1NTIsIDB4OUU3MTlBRkEsCisweDNFQzM3MDNCLCAweEUwNkE5NEYzLCAweDI5NkZGMEQ5LCAweEU0NjhEOUM5LAorMHhEMkExNUNEQywgMHg2QzRFQUFBMiwgMHgyQUYzQjhCRiwgMHg2QjZFREM3OCwKKzB4NDJCNzg5NzIsIDB4NEM5N0E2NkMsIDB4MTYxQzMwQkYsIDB4Q0QyODE2REMsCisweDQzMUJEQTE3LCAweEQ5NjUzMDIyLCAweDY3RDk1RTM5LCAweEJDQjE4MzQyLAorMHgyMjc5ODJFNywgMHgyM0M1QjExQiwgMHg1MTQ0MjBBQiwgMHgwODlGM0E1QywKKzB4MkIyRjgyNDQsIDB4MkYyQTgwQzgsIDB4QjBBOTA1NTgsIDB4NzVCQUEyNDMsCisweEUyRkM0RjYyLCAweEVCMEE2MTA0LCAweEI3RjIyMUIyLCAweDRFQ0Q3OURGLAorMHhCM0UwOEI4QiwgMHhCQTI1RTFDQiwgMHhEMzlGMzQzMSwgMHhCNTAyMDJGRSwKKzB4NzhGMTVFQ0UsIDB4RUZGNjFFQ0YsIDB4QjNDRERENTAsIDB4M0ZEMDY0QTgsCisweDk2QjAyOEJDLCAweEIyOURENEUxLCAweDdFOUVDNjI5LCAweEM0MDdGNEQxLAorMHg4QzIxNzg1QiwgMHhFMTE3NjdCQSwgMHhDRkU2REUyNiwgMHgwREE5OEUyMiwKKzB4MzNBQzU2NzAsIDB4MEZEQkMxNzUsIDB4RjExRjhFRjUsIDB4NjA2Mzg4NDMsCisweDhCNjdFNTVBLCAweDNGMjdGNzVCLCAweDY2OTFGQjk4LCAweDYzNUEzNUE5LAorMHhCMzE3NDU5QywgMHhFNzQxOUMwMSwgMHg4QkFCMjhENywgMHhFMzQ3RDc5MSwKKzB4RUZDMDE5QTAsIDB4NDUwMDkwNDEsIDB4QTZERUIzRTgsIDB4NkY3Mzc5RkYsCisweDBGRjUwMzkwLCAweDgxMEJFRTc4LCAweEFEMTM3MTZCLCAweEE3REJEN0FCLAorMHhFRjQzOUQ0QiwgMHhEREE3NDRBNSwgMHgzMUVEREU4RCwgMHhBODVCNzFGMiwKKzB4REY0MzlDNzAsIDB4QTdFM0RBOTQsIDB4NTI1RUQ0NTMsIDB4M0Q5MTNDMzIsCisweEQxMDRDRTYxLCAweDQyRjVGRkVELCAweDE0Qzc2MjVBLCAweDRFNUIzMTRCLAorMHhBN0VBRDFFRCwgMHhGQTAxRDU5NSwgMHhFNjdCQ0YwNiwgMHhFNjM2ODVFMiwKKzB4M0EzMkU5RDMsIDB4Mzc0QzI1RjAsIDB4QThFOEE0MUQsIDB4QTQwM0FFRjUsCisweDkwMUExOTRDLCAweDE3NjA1QkM5LCAweDg1MjJERDEyLCAweDI3MDk2QkFBLAorMHgwMTc0MzRCNywgMHg5OUM4RDJEQSwgMHg3Rjk2QjA2OCwgMHg4NTIxQ0QwOSwKKzB4NTI5QjQ2RDYsIDB4NDc4NTI4MTAsIDB4MDIxQkM4QkYsIDB4OTNDOTgzMjksCisweDZGRTczQTc4LCAweDQ0REI2OUE5LCAweEM4MzlENDkwLCAweENBQzQyQUZFLAorMHhDRjFFQ0NGNCwgMHg2RjJFNUY0NCwgMHg3OTVDODIxOSwgMHhBMDZDNjY3QiwKKzB4ODA0MTFGMzEsIDB4QjA5OTI2RTEsIDB4QzYyQjZDMTgsIDB4NzdDNkU2REQsCisweDc2MjJGQzA3LCAweDAyMTYyREIyLCAweDNFQTMxMzM0LCAweDZDQzAyQjRBLAorMHhBQTZCODFDMywgMHg0NDI0QTlBNSwgMHgyNkJEMkVGMywgMHgzMzQ4OTZENiwKKzB4QURERDI3MTEsIDB4NzYwMzU3NTcsIDB4ODBBQTMyOEUsIDB4MkYzOUMwNkUsCisweDM1NzUyMENCLCAweEY2MkJERjQ2LCAweEM1OTM0M0M0LCAweDdDQTRDQUUyLAorMHg4OUIwM0VGMywgMHgyNTFBNzg1QiwgMHhBNDc1NUJCOSwgMHgyNjJENDc4RCwKKzB4NDYyRTYyNTIsIDB4NkI1RjZCRUQsIDB4Q0E0NkU3N0IsIDB4QTJDRjA4QUQsCisweDU2MUUxOUVBLCAweEJGMzFBQTE1LCAweEQzNzZGNDRDLCAweENDMzMyMTUwLAorMHg4QzBBRUU0MiwgMHhDMDZENUY5MSwgMHhEQURGODYxMywgMHhCRTBGQTIyQywKKzB4RjUwQUU0ODIsIDB4RTM2MTU1MDEsIDB4RUNDOEQ1QUEsIDB4NThBN0ZEM0UsCisweEQ1OUI4Q0M5LCAweDA5REIwOTg3LCAweEYxRDk3NTNELCAweDlDNzlFMjBFLAorMHg5QTIyMkFFQSwgMHhDNEU1ODkxNCwgMHg2NzEyRTBBMiwgMHg4Q0Q1QzgwRSwKKzB4RUFCOEFBNTYsIDB4REJGQThEOUMsIDB4MzUxNUJEMjEsIDB4QjY1QjlFMEMsCisweEYwRDI3RkVFLCAweEUzMzg3MUMxLCAweEVFOEZFNTJGLCAweDAyQUNDQjNGLAorMHhFOTE5NzI3NywgMHhCN0I3MDc3MCwgMHhBMjZFMzU4MSwgMHg4MjQ4MUU3RiwKKzB4MDA1QUY5OUYsIDB4OEI5NzBCNEIsIDB4RUM3NEI2NjIsIDB4MkYyMUM1QTMsCisweDA0OURCQTgzLCAweDQ5NUIzRTFCLCAweDExMjIzNEI4LCAweDk1QjQyQTVGLAorMHgyQzhGQTgzMywgMHg2RDcwNkUzMCwgMHgyQUFBRUMwOSwgMHhERTdDMzM3NywKKzB4MDZDRTlENDYsIDB4NzU3NEVBQUIsIDB4RkNCMUEwOEQsIDB4NDYyQUZCNkMsCisweDE5Mjg0N0IyLCAweENDMTQ5QUMzLCAweDQyNzgzNENFLCAweEU5MDE4MEEwLAorMHg5NDZFNTI2RSwgMHg2MDE4QkU0RSwgMHgyMDQ0MkY1MiwgMHgxRDM5RkEwNSwKKzB4MzVGNjkwQUQsIDB4MjlEQjNBNTMsIDB4NjM2MDE1OEMsIDB4M0VDODE1RjgsCisweERFRDY1MEFGLCAweEZBMTY4QjM3LCAweDIzM0Y4QTNELCAweDI0NTAwOUNGLAorMHg3MUJCMjIzNywgMHg0OTg5QTAxQywgMHhENThBRTRGMSwgMHg2MkM5OUVBMCwKKzB4NDhFOTA1NkUsIDB4N0UxQTc4NkQsIDB4QkY2Q0JBQUIsIDB4MjI2NjlBNkIsCisweDU3ODU3NTkwLCAweEU0NTU4Q0UzLCAweEJDNkM2M0VDLCAweDZBRTAyQTYxLAorMHhBMkFCRkJCQiwgMHhEMkIyRkU5MCwgMHhERjhCREI0MywgMHhFQzJENTlBQywKKzB4N0I2QUZEQzMsIDB4NkIwMDFENUYsIDB4M0RGRUUwOEYsIDB4QjlBNTk3RDYsCisweDA5REVBQzY4LCAweEU0MkQ5RTczLCAweDJFMzM1MDdDLCAweDY1MjVGMDUxLAorMHgwRDcxNDNDNiwgMHgwMUREMTE1QiwgMHg5NDE4MDI3OSwgMHgyOEZDNjBENywKKzB4QzA5MDA2MDMsIDB4RUQ0RkJFNTMsIDB4RkMwNjc3QkQsIDB4N0RBMkE4NzgsCisweEE4RDBFQzczLCAweEY2QTA5QjJBLCAweDI0QTEyOUVFLCAweDE2OUJDQTJGLAorMHhFMEJBRTUyNiwgMHg1QzhFMkZDQiwgMHhBMjE4RUZGQSwgMHg4NDJCNjFGQiwKKzB4ODdCODYwQ0QsIDB4MTA2RTlCODYsIDB4OTMwNjg1RjAsIDB4QzVBNzIxMDksCisweEZCOTc3QkQ1LCAweDlEM0I0QUM2LCAweERBMzc4RkUwLCAweDBBQUY3NDdCLAorMHgwNDA4RDUwRCwgMHg0ODg3ODVCOSwgMHg4MUFFOTcxRCwgMHgxMkFERkVGMywKKzB4RjBCNjQxMjgsIDB4M0Q0QzkwQkIsIDB4Qzk5NEFBQTEsIDB4Qjg1NDQwMEUsCisweDkwMUFFM0RELCAweDdBNEEwREU3LCAweDE4RTA3NDU2LCAweDIwQzM4QkNELAorMHg5NDQ0MTk3NiwgMHhFMkU0MTlDMiwgMHhEQkQzQzkyRiwgMHg0REQ2Mzg0MSwKKzB4RTI5OTQ5NTksIDB4RjQxRjE5NkQsIDB4MDgzNTQzMUEsIDB4OTNBMkU5Q0YsCisweEIwMUZBQkVELCAweEQwMTM1NTM1LCAweEVCQ0VBMThELCAweEM0RjgzQTFCLAorMHg1RDcyODQ1QywgMHgwNDMzNUUzQSwgMHg2OEM0Qzk4NywgMHg3NzE3ODcxMCwKKzB4QzUyOTNBOUEsIDB4NDRFNDBBRTEsIDB4Q0U0NTRGREUsIDB4NzFERTg5QjcsCisweEEzNzNEOUQzLCAweDZEMTlFNDgzLCAweDgxMjg5NkQ2LCAweEMzMjMxQzE0LAorMHhFOTYwQUJBNCwgMHhCN0ZCNkY4MywgMHgxRjdDNEVCOCwgMHhEMTBEQkU2OSwKKzB4ODU3NUNGNkUsIDB4QzAzQjE1RDUsIDB4NEQ3RjRFRjMsIDB4RjA2MTVGMzEsCisweDM0RTIxNzYyLCAweDIyRDVBN0ExLCAweDcyOUZBM0Y4LCAweDJFMTA1MEZCLAorMHg4QTlGNDZEQywgMHg1MzVFQjVBNywgMHhEMTQzNTYwRSwgMHhGOEVDM0E0QiwKKzB4MjI0OUZEMDYsIDB4RThFMkFCMDgsIDB4MUU3MzQxMjcsIDB4QkE1QjYzNUEsCisweEQ4RjQxOURCLCAweDBCNTIwMEQwLCAweDgxMTAzMDRGLCAweDM0OTdEQTgwLAorMHgzNUNBNzFDRCwgMHgwRkQ4MjI3RSwgMHgwODZDNzRFMiwgMHhBQjY4QTFBRiwKKzB4RTNCRDU3RUMsIDB4ODNCNDJEMjksIDB4M0MyRDY3MkQsIDB4MDVEODVDRUQsCisweDY0RjA0OTI2LCAweDkxMzY0QTEyLCAweDdGQzczMzQ5LCAweEVCQTFGQzc3LAorMHhFQ0UwRDIwRCwgMHhCMUREREI5QiwgMHhFQjZCNDkyQiwgMHgwRkMwMkJCNiwKKzB4NTYyMDFENzYsIDB4RUQyMEY3OUUsIDB4RkM2MDM0RkIsIDB4NkE1MzlGMUQsCisweDUyMEZFQ0JGLCAweDRFM0FFQ0Y2LCAweDc2QjAxQzc0LCAweEVGQzQyMUQ0LAorMHg4MkFDOTg5QSwgMHg0MDdBNzdDRCwgMHg2RDI4N0JGRSwgMHgyNjYxNzQyNSwKKzB4RUEyMzE2QzMsIDB4ODYxNjU1NEUsIDB4OUY0QzQ1MzUsIDB4ODhDMEM2QzEsCisweEVBQzRGMEY3LCAweDMyQzdERDkzLCAweDQxRDlDMzdFLCAweDJBOUNCQjJFLAorMHgwNTkxQkFFRiwgMHgyQkU0M0YyMSwgMHg1RTA2RUU0RCwgMHhERERGNTUyNSwKKzB4RUMxMzdEQkUsIDB4RjBBQTI5NUMsIDB4RjJDOUZERTIsIDB4NURGOUQ2OTMsCisweDEwQTZDQUMwLCAweEM2ODQ2RDA5LCAweEYxRERBQkYzLCAweEQ1NkY4QkJDLAorMHhBQTVEQ0U5RCwgMHg2RjU5MDA0RiwgMHhCOEEwMzVCQywgMHg2MUY0NzI4MiwKKzB4Qzg5REFDOUUsIDB4RkM3RTVCM0QsIDB4NEM1NDA2REQsIDB4NTRDRkQxNDcsCisweEJCNDRBQjJBLCAweDc5MTI2OUMwLCAweDhDRjY2QjRELCAweEQwMUEzMTkwLAorMHg2MzZGNDVDQSwgMHhCMzJGQzIwOSwgMHhDQjhCOUY0OSwgMHhGNDZENzRCOSwKKzB4NUFGQzlCRDAsIDB4QzRDNzE2QzEsIDB4Rjk4QzU0RjMsIDB4MzZBRkYwMTMsCisweEI0RDZEOTBCLCAweDVGMTI5OUI2LCAweEEzQkZDRkE0LCAweEVBMzM2QUFELAorMHhDQ0Q0NDNEQSwgMHg3NENBNDBCNCwgMHgzMUVGMTYxNCwgMHgzNkQzRkZFRSwKKzB4ODc2QUUyNTIsIDB4QzhENjJFOUYsIDB4NjQyNEYzOTcsIDB4MUY3MzBGMkQsCisweEIyMEZEQTUzLCAweEZDRkVFNjBGLCAweDY3NkE2MUMzLCAweDI2QzVFMTQzLAorMHhDMjAxNTczRSwgMHg0QThDNDZCRSwgMHhFRjg3RDBBOSwgMHhFMDdFODBCNCwKKzB4MzRGMjAxMDksIDB4OEI5MzZBNzAsIDB4OUY4RTAzMDUsIDB4RjMyOTdDQTAsCisweDRFN0JGMEU5LCAweDBGMzc0QkI5LCAweENFNzhBMDFFLCAweDVGRTI2REQ4LAorMHhBMzgyNkFDRiwgMHgzMjFGNjlBQiwgMHg0NDFBRjE0RSwgMHg4QUMxOUNGNywKKzB4NEJGRDFBRDYsIDB4NTk1MUFCRDEsIDB4MDk4QzE3RjAsIDB4QTlCNzVGNzYsCisweEE0NjI1NTFCLCAweDZCNzAzQTEyLCAweEVEQ0I1N0IyLCAweDhDRDRDOTMzLAorMHhEMzM4RDNEOCwgMHhFMzQzRkMyNCwgMHg5Q0RENTJFQiwgMHgxN0E0MTk0MiwKKzB4NjNBOEVGNTAsIDB4MjE1QkIxMUEsIDB4RTFFMjVDQjYsIDB4QjYyQzBBODgsCisweEU1OENERUMzLCAweEMwRTYzODlBLCAweDJCN0JFRTU1LCAweEEzRkNCRDA3LAorMHg3Q0Q0NTFGRSwgMHhCMDZGNjcyNCwgMHg1Njc1QTdFQSwgMHgxNDFENTJGQywKKzB4MDVFODZFOUIsIDB4NTNENzVDM0EsIDB4RTc5OUFBMkEsIDB4RTQ3NDM4NEMsCisweDhDODVFNkU2LCAweEE0NzdBOEQ3LCAweEExRTZBQjBDLCAweDkwMzNFN0NELAorMHgyRjU1RDUwNCwgMHg0REFFODFGQiwgMHhCRDIyOUE2NCwgMHg4NjI3NjVDOSwKKzB4NUI2QTg1RjAsIDB4OTVBMzkzMjgsIDB4Mzg4MjZDRkIsIDB4QkY3REVCQTQsCisweDQyRUZBQjYyLCAweDJEMEJCQTYwLCAweEIwNjczMUFGLCAweDE2RDRDNEIwLAorMHhDQTRCOTI2NCwgMHgzREYyNEFFMiwgMHhGRUQ5Mzg0OCwgMHg3Q0IzM0IwOCwKKzB4QUM5Q0FFOUYsIDB4QTBGODBCNjEsIDB4QTY2Q0Y3MTMsIDB4OTM2NDg2NUYsCisweERGQTFFMEIzLCAweEZFNkRGMzNGLCAweDgwMzlBNjEyLCAweDExOUY2MEJGLAorMHhDRUVERTMwOSwgMHhEMjgzMTZBOCwgMHhDRDYxRDJGNSwgMHgzQ0JFQjAxNSwKKzB4ODVDMEJGNTEsIDB4NkVEQkJDMTUsIDB4NzlGM0QyMDcsIDB4NDg1RUU0RkEsCisweENFQzMwMkVBLCAweDU5RDhCOTJELCAweDUxQzFGQjM2LCAweEY0RkU4QjcxLAorMHgyREJENTcxOCwgMHg4NDAyNDA0MCwgMHhGREQ2NTkwRiwgMHhBMUNFOUNDOSwKKzB4QzRBRUFCNzIsIDB4MEEyRkU4QkYsIDB4MjhDMzM2MTgsIDB4QkE0RTE1RkIsCisweEE5QzcyODE5LCAweEEzRUU0NUQ3LCAweEQyREM1MkYxLCAweDNGQzg0QTJFLAorMHgxQzlERjczRSwgMHg2MzJGOUJERSwgMHg3RTlGQkQyMCwgMHgwRDY4OUI3OSwKKzB4OTFFOEQ1QzAsIDB4NkVFNzk1MkMsIDB4OTA1RjE5MkUsIDB4MkQ3OUU3MTIsCisweDg2NzBBN0EyLCAweDFEQkZDNEQ5LCAweDY0NjM0NDI5LCAweEU2MzYwNDNCLAorMHg2NDNDNkIwRiwgMHg1MEFGMzI3QiwgMHgwRTczNEQ2MSwgMHgyRDdENkU0NiwKKzB4Qjg3N0RDRDYsIDB4N0NDRjRGMUEsIDB4REY0RDhDRjgsIDB4MEU3RkE3OEUsCisweDBDQkM0RUMyLCAweEFFOUI0QTIyLCAweDRGMDJENDlDLCAweDQ4RjA5QzQzLAorMHg1MDMxQjFBMCwgMHhEQ0I4QTFGQywgMHg5MUM3MzU5OSwgMHhDRjAwQTY0RCwKKzB4REZDRTU2MUUsIDB4OEIxODE1N0QsIDB4RTFFRDZBODEsIDB4Q0Y5NEVGMzYsCisweEI0MTJDRTFBLCAweDYwMkUyMDc2LCAweDcxNkIwRjNGLCAweEFERUIzMkMwLAorMHhENEUxNjA5NCwgMHhFQzk1RDQxRiwgMHg3NTg1ODc2NywgMHg0MzhBRDFBMSwKKzB4RTYxQzU1MjcsIDB4MEQ3MUZCQjIsIDB4MkE5OUQwNzAsIDB4NUMwMTg4MjYsCisweENDQ0MyN0ZELCAweDA1Mzg4M0Q5LCAweEYxRDMwRUY1LCAweDY3NkFEMzhBLAorMHhERjgxQUIyOCwgMHgyMjU3RkI5RCwgMHgzNzMzMTNBRSwgMHg2N0UxRkU4QSwKKzB4RjRGNjZCMDIsIDB4QUZGOEM3RkEsIDB4M0I2MEQ5NEQsIDB4RDQ0RDBGRTIsCisweDVGQ0RGRTRCLCAweEM2MzAxMEI2LCAweDA2Q0ZDQ0Y0LCAweDA5RDhERDg1LAorMHhBQjc5RjJCRSwgMHhENUMwQzQ5OCwgMHg3MzY0RTRGRCwgMHhCMjk1Q0VERiwKKzB4REI4OUEwNjgsIDB4NTlBNkEwQzcsIDB4MEM4MjMyMDcsIDB4NzM4MEZDRkUsCisweDZFMzNDNEI5LCAweDA3NDRFNEYyLCAweEY2NjNCQjMzLCAweDlFRTUxMkNFLAorMHg4NzBFRDM1QiwgMHhCNDUwMjY1NCwgMHgzNjdDRDRGRCwgMHg1RDQyMzhEOSwKKzB4RUFCMkI4NkUsIDB4NkU4QUREQUEsIDB4RjA4MEVERDYsIDB4MURDOTBGNDYsCisweEIxRkM5MTI3LCAweDYzNzcxMzkyLCAweDk2NzI5QkY2LCAweEQxOEUxNDEzLAorMHg1RDg1OTM4RCwgMHhCOENFRDM0OSwgMHhGOUI4ODZDMSwgMHhDQTQ4NjU2MiwKKzB4QkFBOUVEN0EsIDB4MDQ5NzE4RDgsIDB4N0NGOEU2N0EsIDB4MTcwMjg0M0MsCisweDZEQ0RDMzRFLCAweDkzQzUxRjgzLCAweDI0MTVBNEYzLCAweEE4RDc3QjNBLAorMHgwRkI4MjNFOCwgMHg0MjRGMDNDMywgMHg5Q0FBNTAzQywgMHg3QUE1NDMzRiwKKzB4M0JERDc0RkUsIDB4OTlEMzMzMkUsIDB4MUU2MjIzMUIsIDB4OTBBNEU1OTUsCisweDdFREE5NzRELCAweDQzRTJDRDE0LCAweDI3REI5RDlGLCAweDU2MUY1Q0M2LAorMHhBNzdFQUJBNiwgMHg5Nzg2N0I0OCwgMHhBRDY1MzNDRSwgMHhFQjcyNkNGNCwKKzB4NTg1N0IyMTcsIDB4MkQ3REExMEIsIDB4RDkzOUMyMEUsIDB4ODFGMUYwNzMsCisweEY0MkRFQUYyLCAweDNBRDc3ODBFLCAweDg4Qzc3NjYxLCAweEQyRTgxOUIyLAorMHhGODcyRjU4MSwgMHg5OTlGMEM1QSwgMHgzODg3QUJBNCwgMHgyN0Y5NUI2RCwKKzB4OTkxRDk0NTgsIDB4OUQxQkIxMzEsIDB4NkVDQzUyOTgsIDB4OUU5QTdCMjYsCisweDZFNjVGMjcxLCAweEU5MEZBMDRDLCAweDdCNjkyQUEwLCAweDg3ODk0M0Q1LAorMHg5MjQ4OTVFNSwgMHgwNDFCQzczQSwgMHg0NDhFMjhCMiwgMHg2MUQyMkQxRiwKKzB4RTc5Njk3NzMsIDB4QkM4RTU5ODAsIDB4OUExOTg4NTIsIDB4Qjk0NDE1QzksCisweEEwMjM3NEJBLCAweDM0MEJENUYzLCAweDI3RjJBMEZGLCAweDM5QkRCMzNGLAorMHhDQzA0MkJDRiwgMHg4M0Q2QzEzNSwgMHg5QzdBOEQ4RSwgMHgwNTgyM0MyMywKKzB4MkQ3QTNGOTEsIDB4RTc5MkJDQ0EsIDB4QTJEODIxNzcsIDB4NzNDODJFN0UsCisweEJFQkM5NjEzLCAweDlGNTk2Q0IwLCAweDZFNzg0QUE3LCAweDFCN0JEQTlGLAorMHg4NDYzOTFGNywgMHg4NTJBRDA3MCwgMHhGODMxRThDQSwgMHgxNkE3ODIyMywKKzB4RjY4RjUyNTAsIDB4RTI1NTQ0OTMsIDB4RDM4RjJBRkIsIDB4NzY0QkE3QTgsCisweDNDQUVGQzU1LCAweDZFOUI5MDM3LCAweEQ4N0Q0ODZFLCAweDczNTJBRUE5LAorMHgxMTk4N0VFMCwgMHhERjdFODREQSwgMHgyODM4RTczNiwgMHhBOEM3QkFDMiwKKzB4RjQ5RTIxRUUsIDB4RkFEMTA2RTksIDB4NzM2M0FDNkYsIDB4NUU5OTc0Q0IsCisweEJBMDA4QkIwLCAweEFGNURCM0ZDLCAweDdBQzNDRkQ3LCAweDJENTVFREM2LAorMHgyQzFDOUFENywgMHg2QTNBQTQ5NCwgMHg1RjBFMEEzQSwgMHgzNzQyMkJGQSwKKzB4ODNCNEQ1OTQsIDB4QjdFQ0NGNjYsIDB4ODJGQ0NERDAsIDB4OEVDQkZENzksCisweDY2NEI5MzQxLCAweDAyRjE3OEEyLCAweDIwOTVDOEUwLCAweEZDNUYxN0I3LAorMHgxODEwQkE5QiwgMHg5NjRFNENEMSwgMHhGQkFFRDgwOCwgMHhERUU4Nzc5NiwKKzB4NjNERTRGNjksIDB4Qzk5Mjc1REQsIDB4NjUyNDIzMDQsIDB4N0FCNUMyOEIsCisweDAxQkI3QTNCLCAweEM4NUQ3NzE2LCAweDMyQUZCOUEzLCAweDJFRDJDQkIxLAorMHhCMTk0MjE4RiwgMHgyMUZFNTYwRCwgMHhDQjQ1MDNBNSwgMHg1Q0UwNDY0RCwKKzB4QzRBRTlBM0MsIDB4MDYxNTMwQ0IsIDB4RURBMzhFNkIsIDB4NDAyOUQzRTYsCisweEIwQzIwMzM2LCAweEEzNzgyNUMwLCAweEM2OEY4QjM3LCAweDk0MDVBRDNCLAorMHg4QjFBOEY5OSwgMHhBNzYxREU4QiwgMHg2ODNCMzI1OSwgMHhBMTU0QzU1NCwKKzB4NkJEODM1QzksIDB4NkRFQUUzNUEsIDB4QkVBRTZENDksIDB4MjFEOEIwNzQsCisweDQ2QzAxQjMxLCAweEJFOUIzQTE2LCAweDFENjExRUFBLCAweDQyM0FCNzRDLAorMHg5MzFGNUFGNSwgMHhCQjlFMjg5QSwgMHhBNDEwMTEzMiwgMHg0QThCRTBENywKKzB4MzMwN0U0QjIsIDB4REU3OERCNUUsIDB4MzQ3RUI1Q0UsIDB4MTNFRUU5OTksCisweDJDMkQ3OTU1LCAweEJBODkzRUJBLCAweDVERkMyRUMxLCAweEU3REQ3QTVGLAorMHg1RTFDNjREOCwgMHg0NTUyRTQ0NywgMHgxODM3RDhFNCwgMHg5NzExODM2QiwKKzB4MzIxOUY4OTMsIDB4MDQzOTJDODQsIDB4M0U5NDg0OEMsIDB4MTVFNUY0ODEsCisweDBFQzU4ODE5LCAweDczNDFENDU4LCAweDRBRTYzNzExLCAweDg1QzFGRDFGLAorMHg5N0I1OEJENywgMHhCMDU1MEVCRSwgMHhCOTEwODc0MywgMHg2RjUzQjM4NiwKKzB4N0E3M0YzMUIsIDB4RTA3Q0Y4QjksIDB4NjFGRjI3QzgsIDB4MDZBOUE4QjQsCisweEVCMEYyQkI5LCAweDQ2RDI3NUZCLCAweENGMzlCNDc0LCAweEMzNEYzQjZELAorMHg1MkYyRjExOSwgMHhEODc5NjNCRiwgMHhDNjBCRjE2QywgMHg3Nzk3RDBBRCwKKzB4N0VBNERCRjAsIDB4RDIxNDA5QzcsIDB4RjY3OEE5MjcsIDB4NjM4RTY3Q0QsCisweDkzMjYxQUVELCAweEVBOUIyNUZFLCAweDFFQkNBRkRDLCAweDU4MENDODI5LAorMHg1OEQxREExQSwgMHg2NTg4ODFGOCwgMHhDNDhEQjY4MiwgMHhENDJFOENCNCwKKzB4MURGMzNENzQsIDB4MzFDMDRGNjgsIDB4N0Q4NzFFMjksIDB4QUUxMUZENzIsCisweEQ3RThGOEY2LCAweDUzMEQ5RDlDLCAweDU4MEEwNzE1LCAweDBGMTdCMUEzLAorMHhCODYzRjQyRiwgMHhBNkE0REMwOCwgMHg4Mjc3M0U3NiwgMHg5MzU0QjMwOSwKKzB4RTE3RDA3NzAsIDB4MDRFNERFNUIsIDB4NzEyRUEzOTYsIDB4NDlEMzdCNTUsCisweEFFNDEwOUJBLCAweDAzODYyREM5LCAweDdCQ0Y2MUQyLCAweDQzQ0EyMDE3LAorMHgyM0JERDUwRiwgMHg3NDU3NzQ1OSwgMHg0RThGNEUyMywgMHhCRjkyNEMxQSwKKzB4RTRFQzcwQ0UsIDB4MzdGQkVDNjYsIDB4QTZEQTg5MzUsIDB4RTExRjQwOTAsCisweDVDOEY5RUUzLCAweDE5RDE2N0VDLCAweDlFRTRGMkM1LCAweDY0QTgxRTZDLAorMHhCMzU2NDJCQiwgMHg4MjA4M0EwMSwgMHgwMDFDQTFGNiwgMHhBQTY5QzdFOCwKKzB4Njg1RjI0RDksIDB4RTY4NjhFMzEsIDB4MzhBREQ4RjAsIDB4QTJGREQ0NEUsCisweEVFMEM0OTFELCAweEM2MEIxRTlBLCAweEY3QTg5MjY4LCAweEZENzg0RjM1LAorMHhDNkI3MzM1QywgMHg3NUVGQ0VDMSwgMHhFMkQ5RjdDRiwgMHhFMUMzNjRGOCwKKzB4N0NDNjNCMkMsIDB4QzE3OUUyQUQsIDB4NTZDMTkzQTUsIDB4NTEzNEZCNjksCisweDM1MDU4QkI1LCAweDM2RjRCQ0Q1LCAweERGNEEwOEMyLCAweDE0QUEyMzMwLAorMHg3NjBDOENEOCwgMHgyQzU2MjM5NCwgMHgwQkVCNjY5QiwgMHgyMzAxOTczQSwKKzB4QUY1QzRGRjIsIDB4MUM3NzBBQUIsIDB4MjVERDIwODcsIDB4NzMyQUFEQzQsCisweDU5MDU0OTU4LCAweDU5RERDQkU0LCAweDc0Q0ZDOEE4LCAweDdDMDE1MDE2LAorMHgzMkEwMjc2RSwgMHg4RjFDMkU5MywgMHgwQ0U5MUY3MSwgMHgwNTVDMzA3QSwKKzB4NDM1RDk2N0UsIDB4RjRDMzM3MDQsIDB4NUJERjJBRDcsIDB4ODg1NTA5OUMsCisweDMwN0IyNzM2LCAweEJCNkIxOUNCLCAweDYyNjM0OUQzLCAweDhGNTJBQkZBLAorMHgyNTFBMUVENiwgMHhFMDU4N0JDMCwgMHgxMjgzMTQwOCwgMHhEQTgzQ0FCRiwKKzB4QUIyQzdERkQsIDB4NkJDRjAyNzEsIDB4NzIwNThERjAsIDB4MTdBRkMxREQsCisweEZGQzUyQzMwLCAweDU1MTQwMUUwLCAweDlFRUQ1NERGLCAweDE0RTk1MUU0LAorMHgxNDYyNEIzRiwgMHg0QzI0NjUwQiwgMHg1QTY1Rjg2QiwgMHhFOTRGNjE0MywKKzB4REM3Q0U5Q0YsIDB4OTRENUQ4RjMsIDB4MDkzQjBBMDQsIDB4MjIwOThEMDEsCisweEVERjA5RTdDLCAweDE2NUVEQjBGLCAweEQwOUNBNzc0LCAweEI5NkFBMTQxLAorMHhCNTc0NTk3OCwgMHg5RDgyMDQzNCwgMHg0MkIwRTAyNiwgMHg5NjkzOEEyNSwKKzB4NzJFODYzNEIsIDB4QkUzNkVDMDIsIDB4NDJGM0Y3NEIsIDB4MzU4RkE2MjEsCisweEJENDUxNDg0LCAweEI0M0E3NUQxLCAweEIwQTU3RjkxLCAweDcwMUE3QzgyLAorMHg0ODRCM0Y0NiwgMHgwNDdGNzhBRCwgMHg2NUY3MzcxQywgMHhFQUM4QTk1NCwKKzB4RTU5RjYzNTQsIDB4M0VFRUZCNEUsIDB4RjEzMTk1NEIsIDB4MUMwMEJBQzIsCisweEUzODk3NjM3LCAweDVGRUM4M0FCLCAweDU4Q0ZBMkM0LCAweDFGNEMwQTZBLAorMHg5Nzk1NkJDNiwgMHg2M0QxMUQ3RCwgMHhCNDYxNzlEMCwgMHgxMTAzOUE3NSwKKzB4MUI1MEUwODgsIDB4NjhFOTQ3NkIsIDB4QUE2OERCNTUsIDB4OEE0QTA1MUUsCisweEVGQTBEREY1LCAweDA1QTJBNjc0LCAweEZGRTAzRTcyLCAweEM1QTAyOTVDLAorMHg2RkQ0RDgzNCwgMHg4RTQyQkI5NCwgMHhGM0RGRDg4RSwgMHhCQTY5MUFEMiwKKzB4MzQ1ODQ3M0UsIDB4NjI2OUEzNDgsIDB4NzI5NjJGQjYsIDB4ODZENTA2NEIsCisweDhBMTUzNzQwLCAweDU0QUM5N0Q4LCAweEVEMkNFMDU3LCAweDY4MjAwNDc0LAorMHhCQkE4RTE5RCwgMHhCRkREMDhGMywgMHhCMERGNzZEMSwgMHg2MkYyOTY0OSwKKzB4NUFCNzcwMzAsIDB4MUVFOUEwMEUsIDB4N0RBQjFDOTAsIDB4QUI2MDhGRkQsCisweDg1MDZBODUzLCAweDc1QjkzMzlCLCAweDFBRTBDQ0JBLCAweEZCNjBCQjc5LAorMHg4NjUwRjkyRiwgMHg0ODE5RTFGNywgMHgwQTcwNDVBOCwgMHhCNUJDRTVGMSwKKzB4NzdBOThCMjcsIDB4MDNERTIxRTQsIDB4M0ZFM0YxMzIsIDB4MTA2ODI3RUMsCisweEQ0REMxNDY5LCAweEFBQzgyRjlCLCAweDFENTk1M0ExLCAweDgwMzRCMzY5LAorMHhENDQxMkI2RiwgMHg5MEZCOUYyNSwgMHgxNDI3OTA3MCwgMHg2RDk4QUYxQywKKzB4M0QyODZGMzcsIDB4ODMyNEE3MzIsIDB4NTgxMjNFNEUsIDB4RUIwNTEwMzIsCisweEMxNUNENTU3LCAweEVCODJERTk5LCAweDYyMTM0MzRFLCAweDM5RjBGQzlDLAorMHg1RUJGRTFDNSwgMHg4Q0VCRjQ3MCwgMHhGRjdEOEQ4QSwgMHg3NDBBNkEzRSwKKzB4NzIwRDA4MEMsIDB4QjczQjc0RkEsIDB4NTE3M0Y5NkUsIDB4OUZDMDE3OTQsCisweERBQkYxQzgxLCAweENBODEzMjk1LCAweEJFQTJEQjhELCAweDRDN0UwQ0U0LAorMHg4MDUxQkE2NywgMHhFNjMzOTlFMiwgMHg4M0ExNUVFNCwgMHg0N0Y0QTcxOCwKKzB4RDgyNDZFNkEsIDB4MEI0Rjg3QkUsIDB4MDMxNjQ4QjgsIDB4OTlFM0UzRTYsCisweDRBQkNDNjRGLCAweDUyNzY4MTgxLCAweEU3MDgzNzJCLCAweDJEMEIxRDJDLAorMHg0REY1MjQwMiwgMHgzODlCRTlGNiwgMHhERTJGMzIzMiwgMHg1RDQzRDc0RSwKKzB4RDM3QkI4OTgsIDB4RTcyNzI2NDUsIDB4OUI1NDMyREEsIDB4OUQ3QTk0NzMsCisweEE2OTYyOEE1LCAweDU4MzU1NUE3LCAweDI1NUIwOEJELCAweEFENjhFQUUzLAorMHgxQTc5OTgyRCwgMHhBQ0UwOTcyNiwgMHgxNUU1NzZBRCwgMHgyNjBFQjQwNiwKKzB4QTc0NDBCNDYsIDB4NjZCNkQzMTcsIDB4QkU2RUNBM0IsIDB4M0FERUExQzEsCisweEQ4MDM5OUMzLCAweDBFRjE5OEQwLCAweEZBRUUyMDEwLCAweEVGMkU4RTU2LAorMHg1QjZDQzQwMiwgMHgzRkQyN0JFMiwgMHg5NzBBQUI1RiwgMHg2MThDMTdDNiwKKzB4N0Y1MDIyRkIsIDB4NTUyRkMxRkEsIDB4NUREODI5ODQsIDB4MDk3Njk1MzksCisweDk4ODEyRDFGLCAweEJEOEIyNTM5LCAweEQ3OEFEOUE2LCAweDFDRTQxRDA3LAorMHgyNzJBMEFCNywgMHg1Q0I3RTEwMSwgMHg2RjQyRDU2QSwgMHgwMDFEOTMwRSwKKzB4M0MxN0MzMDUsIDB4MzBBQUUzNTQsIDB4MkE0QUFCRTAsIDB4OTIyQkNCOTQsCisweDczRjM0QzFDLCAweEUwN0UxNTAxLCAweENCNTVBM0UxLCAweDBDREMzNjY5LAorMHhEOUMwN0RFNywgMHgyREFCODJCRiwgMHg5NjNFQUNBQSwgMHg5QjA1RTBGMSwKKzB4RTJEQTBFRkEsIDB4MDYxM0JGRTUsIDB4REZCNjA1RTksIDB4NURDQ0E4RkQsCisweDZENDMzODczLCAweDgxQTlCNEM1LCAweEQxRDFDQjE0LCAweDlCNkE5OTA2LAorMHhDMTA0NzY3QywgMHgzMDEwMUQzNywgMHgxODZGQkI3OSwgMHg4Rjk1RDQ4OCwKKzB4QTMwOTRGNDMsIDB4N0YxN0M5ODEsIDB4RkQ5MkIzRkUsIDB4QURBQjNBQjUsCisweDIwRDE0MDZDLCAweDk0NjJDOEU3LCAweDVENjQ4MTlELCAweEIzRTg1MTk2LAorMHg2N0I4NTRGRSwgMHg3RDAzOUZDNiwgMHhBRDk4QTg1RSwgMHhGNjcyRTA0MSwKKzB4MzBGQTE5QTksIDB4NEEyNzZFQjgsIDB4QjcwNDFEMkUsIDB4NTdCQjIxRTIsCisweDRFMjUxNjY3LCAweDE1QzU0MDFFLCAweERBQjU5NDMxLCAweEQ2QzZGRDFGLAorMHgxNzI2RUI3MCwgMHg5MDBGNEU4NCwgMHhEMzI3REUzMywgMHg3QTBBRTA0QiwKKzB4NzZCMTE3NEUsIDB4RkQ1NDdCOTQsIDB4MzcwODMyREMsIDB4RERFNjVDREQsCisweDc0NjcyQzAyLCAweDE2NDcwM0ZFLCAweDM0Q0FEMzFGLCAweDNFNjkyREVELAorMHg0QkMzOEZBNSwgMHgxNDNGOTlFNSwgMHg2MUJCNjQwRSwgMHhCOTU3QkM4RCwKKzB4QzlERDlFMzUsIDB4MkI1Q0IzMTAsIDB4QURENkVBRDAsIDB4OTE5ODFENDYsCisweEVEODAzRDU3LCAweDYxRDc3MzdDLCAweDkyRDNBQzNFLCAweDM2QTAzNENCLAorMHhFMTM5NURDNSwgMHg1RjIwNzBGOCwgMHhDNUVFOUY4QSwgMHg3MDU0NkI4OCwKKzB4QzlFQTIzMEMsIDB4NThEQzMwNzMsIDB4NTdDQkJFQjcsIDB4QTBCNzhDRkUsCisweDBCM0ZFNzVCLCAweDA3QURBQ0NELCAweEMyOTJDMzM4LCAweEQ3MENEN0U1LAorMHg3MjlEOEY0RSwgMHgyMThGQTA0MSwgMHgxMEVDMTE5OSwgMHhBQzFFQzUxRCwKKzB4NURFQ0M4RDEsIDB4QkEzNjIzMEEsIDB4QkM0MUY1QTUsIDB4NzU4NjQ4OTYsCisweEI0NDAzRDRBLCAweEZFRUU4RjQ0LCAweDhEOTRBMjU2LCAweDYyQkEwMTE1LAorMHgzQTU3MEM2MSwgMHg5MjIxQzU4MywgMHhEMjk4MUE2QiwgMHhGRDhBQUY1QSwKKzB4MkExMDJENTksIDB4NjQwODNCREQsIDB4QkQxQUFERTYsIDB4N0U2RDFFOTksCisweDIwNTY4QTZELCAweDhERkE3MDRCLCAweDg3RDI3MTIyLCAweDJFRkRBQjdELAorMHhGM0FGOUQzOSwgMHhEOERFRDBCMiwgMHgyRDRCMzRCOSwgMHgxMkYzRTMyQywKKzB4QTZCQ0JFNjUsIDB4NjgwMDI5QTEsIDB4MDk0QjA3QjMsIDB4REE1OTE4RUQsCisweEY3RDBBODZELCAweDFBN0UxOEM4LCAweDkyODVBOTdGLCAweDIwNDAyODJDLAorMHg1QjEzMzUzMSwgMHhBNDgyMzdBQywgMHgzNTU3QkMxQiwgMHg3RTZFRDc3QiwKKzB4NDM2MjM0QzcsIDB4OUIyMDk0REUsIDB4NUQ5Njc1OTMsIDB4ODg2N0QxQzQsCisweDg4RUMzOTQ4LCAweEU3Rjg0QUQ0LCAweDE4NzFCM0U2LCAweEU4RTk5MkM2LAorMHhBMTZEQzJGOCwgMHgwREZERjU5MCwgMHg5QjU2MjM4RCwgMHgzMjkwMTdGNSwKKzB4QkY5QkQ0MDksIDB4NjhCRDlCMUMsIDB4NDAzNkM0RkYsIDB4M0JGNkQ5M0MsCisweEFFMTAwNjAyLCAweDkwQjQzNTA4LCAweEE4NUI0MDEzLCAweDJDNjZFQTU0LAorMHgyMjdEMzJENywgMHgwQkE1MjZEMSwgMHgwNzUyMTNCOCwgMHgxQTNERUQwNywKKzB4RDQ1OERGRkQsIDB4REM4QUNENDMsIDB4QUM3ODA5QUIsIDB4MkQyNTQwOEEsCisweEQ4RjBDODg3LCAweEFEOENEMzBELCAweDQwNTRGNjFFLCAweEE5RjBDQ0EzLAorMHhCRkVCRDMxRCwgMHg2RDJCQUIxRSwgMHhGOEU0MkQ4QiwgMHg2Qzk0QTRFNCwKKzB4MTE1OEQyQTMsIDB4OTNGNDRFRkUsIDB4OEFEMDVBMjUsIDB4OEMyMjlEMzIsCisweEIyMTNENzZFLCAweERGRTYzODIyLCAweDU2MTk4NkVDLCAweDgwNkNBMDgyLAorMHg2REIzQkY4RCwgMHgxRTg1MEQzMCwgMHg4RjdBNDRDMCwgMHg3NUJCMzMyOCwKKzB4ODZDN0JFMTIsIDB4REU1QzQ0QkQsIDB4REY0RDA0OEUsIDB4OTY4NzEyQzMsCisweEIxQjQxQ0Y4LCAweENDMTk0RkU5LCAweERBMkUxQThELCAweDcyQTA4NjYyLAorMHg1QUJBMjUzNiwgMHgyMjNFMjAxMywgMHhBNUE5MjNBNSwgMHg3NTY1QjVERCwKKzB4QkNBMEEyQjAsIDB4MEMyOTg2NEIsIDB4QUFEOENCODcsIDB4RTRDN0U1NTksCisweDc3RTE5RTUxLCAweDE5NEU1NEVELCAweDU0REQxQjU0LCAweDBGQUQzN0E3LAorMHgwRUY2QjBFMywgMHgwRTNBMkZDOCwgMHhBMDA2Mzk5NSwgMHhFMTdBRTIwRSwKKzB4REMxMUI3RjgsIDB4ODVGMUE3NkQsIDB4RDk3ODU4RDQsIDB4Qjc2M0U0OUMsCisweEI1QkU3RUM0LCAweDNDRTkyNEM0LCAweDQyNDYwMTlELCAweEQzM0RCQjI3LAorMHg3Mzc4NjNBNywgMHgzMkMyNkJERCwgMHg3MTQ4OTdBMywgMHgzNjA5MTAxOCwKKzB4RjI2QkM5OTAsIDB4RERCNjQwQjAsIDB4NDQ4RjVCMTIsIDB4RDdBNUVCNEIsCisweDU2MTRFRUE0LCAweENBNDkxMkZCLCAweDAxMUY5RDZDLCAweEE0RkM5MEFCLAorMHg5RkI0OTgyRCwgMHgyMEFEMTQ2RiwgMHg0QjdBQjc0RSwgMHgxMDdBOTQxMSwKKzB4NzFEQkE5MEEsIDB4RDUxMEUzRDIsIDB4MjQ4RDBEMzUsIDB4QjY2NjIyOUUsCisweDYxRUUxRUVBLCAweDcwMjAzMUI1LCAweDM2OTkyQTdCLCAweEM5MEMwOENCLAorMHg2NDc4OTk1QSwgMHhFNkMyQkE3QSwgMHg4QTkxNzlBQywgMHhDOEVFMjk1NiwKKzB4MjdCMDQyQzgsIDB4NDhEQjgxRDksIDB4QUEzOUYyQ0IsIDB4NUU0RDVGM0MsCisweDI0RkZENkI5LCAweDVCNTYyQzJGLCAweDAwRkQzM0I2LCAweDQzNUY1RjUyLAorMHhGMzkyRkZDMSwgMHgwRTkyN0M0MCwgMHg1NTA4Q0JBQiwgMHg5NzZBQTU2NywKKzB4QTEzRTdDNTIsIDB4NTMyMTA5RTksIDB4MTZCOTAyMUYsIDB4NjBDNjE1QTEsCisweDFEMjNDMjU4LCAweEZENzgzMTQ3LCAweDYzNjAwRkIxLCAweEFBQTI0NUYwLAorMHg5QjNEQzFFMSwgMHg3QjI3MEQwRCwgMHg1QjE2MzJDRSwgMHg4Qjg3MUY3RiwKKzB4QzUzNUVGRjgsIDB4NzMxMDlDNkEsIDB4RUI4M0QwMkQsIDB4RjdBRTc2RkIsCisweDJFMzlFNTAyLCAweEE0MTI4MjE2LCAweEY5MEQ1N0U1LCAweEZGMEM0NjVFLAorMHgwMjAwODAyOSwgMHhFNUNCQkExRiwgMHg0MjgwRkEzQywgMHhDREJENzVDOCwKKzB4Q0I0QUYzNDIsIDB4MTc2OTVBNEUsIDB4QUE2MTYyQjUsIDB4ODY2MEE2NzksCisweEQxQTg3MDFDLCAweDQ3Njk0Q0E3LCAweERBOEQ0M0ZELCAweDQ0QTRCQzFCLAorMHhBQjM0QjlBQSwgMHhFNTU1NjNERCwgMHgwOEQ0MTQyQiwgMHg4MTE5N0FDOCwKKzB4OTk3QjFEQzIsIDB4MkU3Q0M1MEEsIDB4N0EzMjZBMjEsIDB4QTc2NDE5REIsCisweEVBOEI1NDI4LCAweDY1NzI5MTQwLCAweDA1MURBRjY2LCAweDg4NzFCQ0E5LAorMHhBMTc1RTVCRiwgMHg2MDMxMEM5OCwgMHhCN0RFODkyOSwgMHgzNUUyNDU5RSwKKzB4MDhFQjQ1NDcsIDB4OTA0RDdCMkIsIDB4MjkzODJDQzQsIDB4Q0VDODY2NEUsCisweDFFOEM5QzJDLCAweDNCOTQyMTM0LCAweDlDRUM1RDU1LCAweERBNTQ4Mzc2LAorMHgyRTRFRkQ2MSwgMHgyNkY2NUYwOSwgMHg1QTNERDdDQSwgMHgyRkQ0RTU4RCwKKzB4NkI3MUI4QzIsIDB4MTMxODkxMTUsIDB4MkI1NTQyQkEsIDB4MUNFODVDMkMsCisweDVCOUZFMDlELCAweDY4NzA0QkZFLCAweEIxNTMxM0I5LCAweDNFRjI3MjlFLAorMHg1ODNFQ0MzMSwgMHhBM0RFRDhDQSwgMHhGQ0QyN0MzRCwgMHg5MDREQUIzOSwKKzB4RkUxMDY5QTQsIDB4RTk5QTU3QkEsIDB4MTEyRUI4MEMsIDB4RTE0ODNDNzQsCisweDhBMjdCMEQ3LCAweEE1OEY3MzI1LCAweDdDRDA1MEExLCAweDYyNkQ0RjNFLAorMHg1MTY0MzY1NywgMHhBOTY3RkM1OSwgMHg1QkFDQkMwQiwgMHgyQ0YzRTQ1OSwKKzB4N0Q4OTg4RDksIDB4NTM5MTNERjgsIDB4MjM4MUE2RkMsIDB4NjRENkQ0NDEsCisweDQ4QUU5MTAxLCAweDE4NUQ5NTM5LCAweDFCMDQ0QUVDLCAweEI1QUJDRURELAorMHhGQThFQ0E1MiwgMHg4Q0NERDE0MiwgMHg5NkZENDQ0MiwgMHhEODY1RkVERiwKKzB4Q0U0RUUyRkEsIDB4QTUxNjBBRTksIDB4QzkxQjJCM0EsIDB4Rjk5M0Y0NUYsCisweDE1MDkxMzJDLCAweDkyMEVDQzVGLCAweEQ4MTNEREMxLCAweDgzNEI2OEU0LAorMHhENUU4NzZBMCwgMHg2MURFMEU0MSwgMHg0QzE0MzkxMywgMHhDNzI5Mzk4NSwKKzB4MTdFMjI2RTcsIDB4Mzg4MzA5MjcsIDB4REM2MDRERjIsIDB4Nzk5RDE0MzAsCisweDg0NjU4NUFCLCAweEU1RDIxRTM4LCAweDYzODFEMTM2LCAweDFCNjA2MzNCLAorMHgyM0I3QUUxNCwgMHg1NTRFNTNDQywgMHg1ODA3QTIxMCwgMHgzMDU2MDg2NiwKKzB4MTJGNzlFNjIsIDB4RTI3QjVENDUsIDB4Mzg4OUMxRTUsIDB4NDdGODQ1RkYsCisweEZGRDlERTk4LCAweEIxMEUwOUQyLCAweDRBMTg0QTcyLCAweDA4M0QyOTcxLAorMHg4QUI3NDc4RCwgMHg5MjM4MDM3NywgMHg1N0E3MjRFQywgMHhCQkJENUNBNiwKKzB4RTJGQjlEMzIsIDB4QUI2QURGQzYsIDB4MzkxNkRFRDQsIDB4NEUxOTQzOEYsCisweEUyMUUxNUNGLCAweDZBRjRCQ0M5LCAweDhEMDg5MjRBLCAweDE2NjJCQUE5LAorMHgzMDY0QUQyNywgMHhCODZEN0VFNCwgMHg4ODYyNEM2MiwgMHgxQTBCRjNFNywKKzB4RjNFNEEyODcsIDB4Njc4N0YwMDYsIDB4MDEzNzVENEIsIDB4OTk4QkIzOEYsCisweDZENjY5QTI5LCAweEQ3NjBCMDkzLCAweEM0NzY4ODUzLCAweEYwNDExMDBGLAorMHgzNURFMTBERCwgMHhFMDZDOEJCOCwgMHgyQzc5QTkwMiwgMHg2MDYwMERBRCwKKzB4NkUxMUNGNUMsIDB4MTg3Nzg3NzcsIDB4N0NDRTQwNkMsIDB4RTU0QUYyRUEsCisweDc0NzJDNDc1LCAweDczREJFRTdFLCAweEU1MzNEQzQwLCAweEIwNzQwN0RELAorMHhGNkFDQThEMywgMHhFNzFCRDdEMSwgMHg0QkQzNTE0RCwgMHhDNUMzNjJDQSwKKzB4MDY5MEU1QTEsIDB4MEZGREM4RDgsIDB4NTgxODg2NDUsIDB4ODYzNjQxM0MsCisweDM0MTJBMDMzLCAweEFGNEZDMzQwLCAweEE1REZFQUI4LCAweEI4NzI3MkUzLAorMHhBNEE5MjE5RiwgMHgyOTY5NkU5MCwgMHgzNUQyRjYyNywgMHg4Nzk0REJENywKKzB4NUQyRDg3RjgsIDB4RkE3MzU1OUQsIDB4N0QyMkY0NDAsIDB4RjUwMTk3RTksCisweEVCNzRCODI5LCAweDhGOTY0OUNGLCAweDE2RjQ3RDMwLCAweDVDN0Q5ODcwLAorMHgzNkZGNkMwQiwgMHgzMTNBOTJFRCwgMHgzMDNCMzY1NCwgMHhFM0UzM0NDQSwKKzB4MDJDMjZFQ0MsIDB4MjY5NDk5MjAsIDB4NDQ0NURGMjAsIDB4MDFGREJDOTgsCisweDQ5MTM4QzZGLCAweDFCNTU1NUUyLCAweDEyMkI0NUQyLCAweDRCMkUwMjAyLAorMHg3QjYwMTRENCwgMHhGQUUwQ0QwOSwgMHg3N0UxNjVBMCwgMHhGQkU3Njk4MCwKKzB4RjU4MDhCRDMsIDB4RkQxMTBFNUUsIDB4OTc0NTBFMTEsIDB4Mjk3RjlCMUYsCisweDYwN0EyQzQxLCAweEUzODRERkM5LCAweDI1RDlBOERDLCAweEY5MTlEOTU1LAorMHg1RTAyNTk5MywgMHhDQzMxODg0NywgMHg5NzE3RDJENSwgMHg0OEYwREQxRiwKKzB4NkNDNEE4RUIsIDB4OUJEMEY0RTEsIDB4NTA2RjJBOTMsIDB4MThCODc0OEUsCisweDE2RkZCQTQ4LCAweDU1MkU0OTU1LCAweEI5NjNGNjRGLCAweEExQTM0QUM4LAorMHg2MkU5NUNDNywgMHg0RDg3RUE4OSwgMHgyMUU4QzAzMSwgMHhDMUYwRUQwNywKKzB4MjhCN0JCMjIsIDB4MEI4MzhEMDQsIDB4NjM2MUI0NDAsIDB4QTY1MzUyMUMsCisweDkyREEzRjc4LCAweDQyNDFDRkVELCAweEZBRkNCRDQxLCAweDNFRkFCNkJDLAorMHgyNUYzMDYwNywgMHg0MUJCNzBEQSwgMHg5RkYzNDQwQSwgMHgyNTAyMDM5RSwKKzB4MzgxM0VDODIsIDB4QzZBNEZENkIsIDB4Rjg1MzdDOEMsIDB4MDk4RUQ0OUYsCisweEUwQTBCRDZFLCAweDZCQTJGMkIzLCAweEMzNUM5RDlELCAweDEyNTZFNjZBLAorMHg3OTBCMjQ5MCwgMHhENUM2OTg4OSwgMHgzOUU3MTJGRSwgMHhDRjczREUwQiwKKzB4NDFCM0I2MTQsIDB4NzQ1QUJENzMsIDB4NjU0Qzc5RDgsIDB4NUIxNTkyM0QsCisweDhDMTVGMjE4LCAweDU4NUNDQ0YwLCAweDYyNEY3QjQ0LCAweDc2QkRERkRCLAorMHg5NkYyNkI1MiwgMHhFMTMwNThBMSwgMHgwODZDOTUwRSwgMHgyOTUxOURFQSwKKzB4QTQyQ0ZFMDQsIDB4MEQ3QTE5MEIsIDB4RDA2NzhDNkEsIDB4QUJCNzg2NzksCisweEJBNDhBMkU0LCAweDVGM0RBMTBBLCAweDExRjA0MTgzLCAweEFDNzIwQTNGLAorMHg2QTgwNzc4MSwgMHg2RjE0NkJGQiwgMHhFOEE2NzkzNCwgMHg1NDU3ODgzNCwKKzB4QUE2MEM4RjAsIDB4MjA2MUExRTYsIDB4OUU4Nzc5OUIsIDB4NjhEOTFGODYsCisweDg5NzRGNTQwLCAweEIxQzNGMTAxLCAweDk5QzIxRTU2LCAweEI1N0JBNzNGLAorMHg4QjJEQUEzRSwgMHhGMUUyRDI0RSwgMHg0OEY3RDRFRSwgMHg3MDM5RkRCMywKKzB4QzY2NkVFREMsIDB4MjUxRjk3MkUsIDB4NEQ1M0Y2QkYsIDB4NkNDNzNFRTcsCisweENCMDdGN0I5LCAweDY5RUNCOENBLCAweDM2M0ZEODBDLCAweDNCNTg3QUIzLAorMHg3MzhDMUU1QywgMHg1QzlDMUQ5MiwgMHhFN0I1MjM5NiwgMHhFREU2MzI0QiwKKzB4RkU1QjUwNDUsIDB4QzkwRDhCM0UsIDB4MzcxQTAxMjgsIDB4RjJDOERDRjgsCisweDVCNjQ4Q0I1LCAweDEyRjhFOEZGLCAweDVGRTRCQTcxLCAweEI5MjVDRkJFLAorMHg3NDE2RTE0RiwgMHg3NjQ4OUZGRSwgMHgxRjRERTM2NywgMHhBNDAwRjAzOSwKKzB4NjYzOTBFODMsIDB4MUFFNzlDRUMsIDB4REI1NzNFOTgsIDB4QjYwMjFGMjksCisweEQwMTYxNUU1LCAweDAyQTIyODFGLCAweEU4NTAxOUMxLCAweDAyN0JCNDFGLAorMHg4RDkxNzdDMywgMHg3OTAyNkU3OCwgMHhGMTU4QjYyMywgMHhCRUZGNTg1OCwKKzB4N0I2MzUxOEUsIDB4OEY0MkMwOEMsIDB4QjM4ODIyN0QsIDB4OTQwRDYwN0EsCisweEE0Qzc5NTQxLCAweDk4MDBDQzkxLCAweEEzNTZCNTM1LCAweDI4NUJBQkI5LAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4RTQxMUU1MjAsIDB4QTAwMjQ1MjgsIDB4NDQyQjQ0MjgsIDB4OTYwNzAwMDksCisweDQ2MTA2MjQ2LCAweDhGRkIyNTIyLCAweEQ0MDI3NTA0LCAweDAwMDlBRkY1LAorMHgwMDAwMEZCMywgMHgwMDIwMDAwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MTZENDkzNTcsCisweDAwMDkwMDBCLCAweDRGMjIyRkU2LCAweERFOTQ3RkZDLCAweEUxMTRENTk0LAorMHgxRTEzRDQ5NCwgMHg2NzUyMUU0QywgMHhENDk0RDY5MywgMHgzNzQwMjc2OSwKKzB4NjI1MjhGMDYsIDB4NzIwMUQ2OTIsIDB4NjA2MDI1MjIsIDB4MjYwMEM5M0YsCisweEQ3OTA2MTUyLCAweDI1MTI2MTFELCAweDI2NEI2NjUyLCAweDI1NjI0NzBCLAorMHgwMDA5QjAwRCwgMHhFNjAwOTVBQywgMHhDODQwNjBFMiwgMHgyRjAyOEYwMywKKzB4OEZGOTM2NTIsIDB4N0YwNDc2MDEsIDB4QTA1QTRGMjYsIDB4NEYyMjZFRjYsCisweDQxMEJEMTg1LCAweEQ0ODUwMDA5LCAweDAwMDk0NDBCLCAweDQ1MEJENTg0LAorMHhENzg0MDAwOSwgMHhEMjg0RTFGRiwgMHgyNzEyNjExRCwgMHhENDgzNTAyOSwKKzB4RTFGRkNCMDEsIDB4MTIwOUU1MDEsIDB4MTIxMTIyMTIsIDB4RTcyMDI0NTIsCisweDQ3MThENTdGLCAweDI1NzJEMjdGLCAweEQxN0ZFNzAwLCAweEQ2ODBENDdGLAorMHhFMjAxMjI3MCwgMHgyNDcwMjE3MiwgMHhENjdFMjYyMCwgMHgyNjQxRTRGRiwKKzB4RDU3REU2MDAsIDB4NjY2REUxMDQsIDB4NzYwMTYwNjMsIDB4NDAwMDYyNkQsCisweDhGRjgzMjEyLCAweEQ1NzkwNTQ1LCAweDI1MjBFMjAxLCAweEQyNzlENzc4LAorMHgyNzEwRTEwMCwgMHhFNTgwMjIxMiwgMHg2NTVDNjYxMywgMHg2NjZERDQ3NiwKKzB4NzYwNDY3NjMsIDB4Mzc0QzYyNkQsIDB4OEZGODMyNTMsIDB4RDQ3MzI3MTIsCisweEQ1NzNFMTAxLCAweEQ2NzMyNDEwLCAweDI1NDJFNDAwLCAweEUwM0FFNTAxLAorMHhEMjcyRDc3MSwgMHhFMDM5MDY1NCwgMHgyNzExMDY1NCwgMHgwMDBCNEYyNiwKKzB4N0ZDODIyMTEsIDB4RDc2RkQxNkUsIDB4REM3MERCNkYsIDB4RDI3MURFNzAsCisweEQ1NzJENDcxLCAweDFGMTJENjcyLCAweDFGNzY3MTBDLCAweDFGQjg3N0ZDLAorMHgxRkVBMUZDOSwgMHg3MjA0MUYyQiwgMHhERTZGREM2RSwgMHgxRjEzRUIxMCwKKzB4MUY1MTFGNDQsIDB4MUY3NzFGNjUsIDB4RDg2QzFGMkMsIDB4REQ2REQ5NkMsCisweEQyNkRFQTAwLCAweDg5MDAzQTIyLCAweEQxNTg3QTAxLCAweDg4MDE2MDEwLAorMHg1NkY5OEIwMywgMHg0MjE4RTIwMSwgMHhEMTY4MjYyMiwgMHgwMDA5NDEwQiwKKzB4NDQwQkQ0NjcsIDB4RDU2NzAwMDksIDB4MDAwOTQ1MEIsIDB4NjAxMEQxNEMsCisweDhCMTA4ODAxLCAweEU2NTBEMTRCLCAweDQ2MTg2MjEyLCAweDhCMDgzMjY2LAorMHg1NkZBRDE0NywgMHgyMTIwRTIwMCwgMHhDQjAxNjA2MiwgMHgyNjAyQTAwMywKKzB4NzIwMTI3MTAsIDB4NjA4MjIxMjIsIDB4ODkwOTg4MDEsIDB4RTJDOEQxNUEsCisweDYyMkM2NjEyLCAweDg5MDMzNjI2LCAweDYwMTBEMTU4LCAweDhCQzg4ODAxLAorMHg1MUY3Njc5MiwgMHgyMTcyNTJGNiwgMHhENjU1NTE5MSwgMHg1NUZCMjIxMiwKKzB4NTJGQzY0NjIsIDB4NTU2MTI1NDIsIDB4MjI1MkU0MDAsIDB4NjE0MzY2NDMsCisweDA1REU2MDEzLCAweDM2Q0M0NjA4LCAweDAyREUyNjUyLCAweEM5MDM2MDIxLAorMHg4QjAyODgwMSwgMHg3MjAxNjJFMiwgMHg3NDAxMkUyMiwgMHgzNkIzNjY0QywKKzB4NzEwNDhGRUUsIDB4NjZDMkQxNDcsIDB4NDUyODY1MTIsIDB4MjY1QjQ1MTgsCisweDYwODIyQzYyLCAweDg5MDE4ODAxLCAweDAwMDlBMTY4LCAweDYyNzJENzQyLAorMHg4QjEzMjIyOCwgMHhENzI2RDU0MSwgMHg2NTUyRDQ0MSwgMHg1MTQzNjY3MiwKKzB4MzE2QzM2NUMsIDB4Mjc2MjI2NjgsIDB4MTQxMzhEMDUsIDB4NjI2MkQ2M0QsCisweEIxQTU3MjAxLCAweEQ2MUUyNjIyLCAweDI2MjJFMjAwLCAweDUyOTE2NjkyLAorMHg4QjAxMzYyMCwgMHgwMDA5QTE0NCwgMHg2MDYxQTA2RSwgMHgwMDFDMDAxQywKKzB4MDAxRDQwMjAsIDB4MDAwMEIzOEUsIDB4RkZGRjAwMDAsIDB4MTIzNDAwMDAsCisweDAwMUUxMDE1LCAweDAwMjAxMjc4LCAweDAwMjAxOEEwLCAweDAwMjAxOTIyLAorMHgwMDIwMTI4QywgMHgwMDFDMzUxMCwgMHgwMDFDMzYyNCwgMHgwMDFFMjEyQywKKzB4MDAyMDM5N0MsIDB4MDAyMDM1MTQsIDB4MDAyMDM5ODQsIDB4MDAyMDM5OTAsCisweDAwMjAzOTlDLCAweDAwMjAzOUY4LCAweDAwMjAzOUZDLCAweDAwMjAzOUE0LAorMHgwMDIwMzlBNSwgMHgwMDIwMzlBOCwgMHgwMDExNzcwMCwgMHgwMDIwM0ExMiwKKzB4MDAyMDM1NzgsIDB4MDAxMTQyRDgsIDB4MDAyMDNBMTQsIDB4MDAyMDNBMTYsCisweDAwMUMzRDMwLCAweDAwMTE3NzE4LCAweDAwMUMzRDAwLCAweDAwMUMxMDAwLAorMHgwMDFDMzZGOCwgMHgwMDExNzczNCwgMHgwMDFDMzY4NCwgMHgwMDExNzcxMCwKKzB4MDAxQzM1MjAsIDB4MDAxMTc2MDAsIDB4MDAxMTc3NDAsIDB4MDAxQzEwMjgsCisweDAwMjAzNThDLCAweDAwMjAzOUFDLCAweDdGRkZGRkZGLCAweDAwMjAxNzM0LAorMHgwMDIwMzJCRSwgMHgwMDIwMjJFOCwgMHgwMDIwM0RDMCwgMHgwMDIwMzlGQSwKKzB4MDAyMDM1ODQsIDB4MDAyMDM5RUMsIDB4MDAxQzNEMkMsIDB4MDAxQzM2QjAsCisweDAwMjAzNTFDLCAweDAwMTE3NzVDLCAweDg4MDFDOTBGLCAweEEwQ0Y4OTAxLAorMHhEMTdDMDAwOSwgMHgzNjIwNjIxMiwgMHhENDdCODkwNCwgMHgyNDIxRTIwMCwKKzB4MjE2MkEwQ0MsIDB4NjIxMUQxNzksIDB4ODkwMTIyMjgsIDB4MDAwOUEwQzMsCisweEUyMDJENzc1LCAweDc1MDE2NTcxLCAweDMxMjM2MTVELCAweDI3NTE4RDAyLAorMHgwMDA5QTBCQywgMHhEMjcyNTVGMiwgMHg2MjIyNjA1MiwgMHg0MDA5NDAxOSwKKzB4QzkwRjQwMDksIDB4OEYxOTg4MEEsIDB4NTJGMzFGMkQsIDB4NDAxOTYwMjIsCisweDQwMDk0MDA5LCAweDg4MDhDOTBGLCAweEEwQTc4OTAxLCAweDYwNjMwMDA5LAorMHg1MUYyNTVGOCwgMHhFNzAxQ0IwMSwgMHgyNTAyRDI2MywgMHhFMTAwMjE3MiwKKzB4MjIxMUQ1NjQsIDB4NzQwMTY0NTIsIDB4MjU0MkEwOTgsIDB4OEIzRjg4MDUsCisweDYwMjI1MkYzLCAweDQwMDk0MDE5LCAweEM5MEY0MDA5LCAweDhCMTY4ODAyLAorMHhFNUZGRDQ1RCwgMHg2NTVENjc0MiwgMHg4QjEwMjc1OCwgMHg2MjcyRDc1QiwKKzB4OEIwQzMyNjAsIDB4NTVGMjU3RjgsIDB4Mjc2MkUxMDEsIDB4RDU1MjI1MTIsCisweEQ3NTdFNDAwLCAweDYyNzIyNTQxLCAweEEwNzc3MjAxLCAweDUyRjMyNzIyLAorMHg0MDE5NjAyMiwgMHg0MDA5NDAwOSwgMHg4ODA1QzkwRiwgMHgzMUIzOEI2RSwKKzB4RDU1MDhCNkMsIDB4NjE1MjU3RjQsIDB4NzEwMUUyNDAsIDB4NjQ3MjI1MTIsCisweDFGNEREMTRELCAweDQyMTgyNDE5LCAweDhCMDMzNDIwLCAweDYyNjJENjRCLAorMHgyNjIyNzIwMSwgMHhFMjAwRDY0MCwgMHgyNjIxQjBBQSwgMHgwMDA5QTA1NiwKKzB4MzEyM0UyMjAsIDB4ODgwMzhCNTIsIDB4NTJGMzhCMUUsIDB4NDAxOTYwMjIsCisweDQwMDk0MDA5LCAweDg4MDNDOTBGLCAweEQ3NDE4QjE2LCAweDY0NzI1MUY0LAorMHg3NDAxRDIzRCwgMHg2NTEyMjc0MiwgMHgxRjVERTY0MCwgMHg0NjE4MjUyOSwKKzB4OEIwMzM1NjAsIDB4NjI2MkQ2M0IsIDB4MjYyMjcyMDEsIDB4RTIwMEQ2MkUsCisweDI2MjFCMDg2LCAweDAwMDlBMDEwLCAweEQ3MzhEMTM3LCAweEQyMkE2NDEyLAorMHhFNTAwNzQwMSwgMHgyMTQyM0E3NiwgMHgyMjUxOEYwNiwgMHhFQTAwRDYzNCwKKzB4NzIwMTYyNjIsIDB4MjYyMkIwNzQsIDB4MkZCMkQ1MzIsIDB4OTU0MDY2NTIsCisweEQ0MzA1QkYxLCAweDM2MjA1MjQxLCAweDYwNjE4OTEwLCAweDhCMDFDODAzLAorMHgyQjIyRTIwMSwgMHg4RkY1NDUxMCwgMHg1N0YxNTY2NCwgMHg2MjcyRTFGMCwKKzB4NDEyODQxMTgsIDB4MjcyMjIyMUIsIDB4NkJGMkEwMDgsIDB4NkJGMkEwMDYsCisweEUyMDBENjE1LCAweEQxMTUyNjIxLCAweDIxMjFFMjAwLCAweEUyMDI1NkY1LAorMHg0MjE4NjY2MiwgMHgyNjI4NDIyOCwgMHgxRjZEOEQwQywgMHhENjFGRDExRSwKKzB4NDYwQjY1MTEsIDB4MjAwODY0NUQsIDB4NTdGNTg5MDQsIDB4NjI3MkQxMUMsCisweDI3MjIyMjE5LCAweEQxMUJFMjAxLCAweDY2MTIyODIyLCAweDhCMDEyNjY4LAorMHgwMDA5QUUxNywgMHg0NTBCRDUxOCwgMHhEMTE4MDAwOSwgMHhBRTEwRTYwMCwKKzB4MDdEMTIxNjAsIDB4MDAyMDNBMEMsIDB4MDAyMDNBMTAsIDB4MDAyMDNBMTgsCisweDAwMUMzREMwLCAweDAwMTE3NzJDLCAweDAwMUMzQjg4LCAweDAwMjAzOUY0LAorMHgwMDExNzczQywgMHgwMDExNzc0NCwgMHgwMDAwRjAwMCwgMHgwMDExNzc2NCwKKzB4MDAxMTc3NDgsIDB4MDAxMTc3NjgsIDB4MDAxMTc3NkMsIDB4MDFGRkZGRkYsCisweDAwMTE3NzRDLCAweDAwMjAzNTg0LCAweDAwMTE0MkQ4LCAweDAwMTE0Nzc0LAorMHhGREZGRkZGRiwgMHgwMDIwM0RDMCwgMHgwMDIwMjQ2QywgMHgwMDIwMzlGQSwKKzB4MkY5NjJGODYsIDB4MkZCNjJGQTYsIDB4MkZENjJGQzYsIDB4NEYyMjJGRTYsCisweEQxMUY3RkY0LCAweDYyMTJERTFGLCAweDY3RTI1NDExLCAweEQ0MUUxRjQxLAorMHgxRjcyMkYyMiwgMHg2NzQzRDUxRCwgMHg3Nzk0RDIxRCwgMHg1QTQyNTg0MSwKKzB4NkM3MjY5NDIsIDB4NkQyMjVCMTYsIDB4RTYwMDYwNTIsIDB4MjUwMkNCMjAsCisweDc2MDFFNTQwLCAweDMyNTM2MjZELCAweDYyRjI4QkZCLCAweDIxMjI1NUYxLAorMHg1NUYyMTE1MSwgMHgyRTUyRDYxMywgMHgxNEEyMTQ4MSwgMHhENDEyMjQ5MiwKKzB4MTFCNjI3QzIsIDB4Njc0MjI2RDIsIDB4RDkxMURBMTAsIDB4MkE3MkU4MDEsCisweDFBOEM0OTBCLCAweDQyMThFMjAxLCAweDdGMEMxQTJDLCAweDZFRjY0RjI2LAorMHg2Q0Y2NkRGNiwgMHg2QUY2NkJGNiwgMHgwMDBCNjlGNiwgMHgwMDAwNjhGNiwKKzB4MDAxQzNCOUMsIDB4MDAxQzNEOTgsIDB4MDAxQzM3MDAsIDB4MDAxQzM1MDAsCisweDAwMUM1OTYwLCAweDAwMUM4OTYwLCAweDAwMjAzNThDLCAweDAwMUMzRDAwLAorMHgwMDIwMTYxMCwgMHgyRjk2MkY4NiwgMHgyRkM2MkZBNiwgMHgyRkU2MkZENiwKKzB4NEYxMjRGMjIsIDB4N0Y4ODRGMDIsIDB4RTAxOERFQjIsIDB4RDRCMjYxRTAsCisweDYxRTMwRjE0LCAweDYyMTA3MTAxLCAweDQ0MEJFMDFDLCAweDIwMDgwRjI0LAorMHg4RjEyNkQwMywgMHhENEFEMUYwOCwgMHg2NzQwRERBRCwgMHg2NTdDRDRBRCwKKzB4NDcwQkQ3QUQsIDB4RDJBRDAwMDksIDB4NjIxQzYxMjAsIDB4NDYwODY2MjMsCisweDM2Mjg0NjA4LCAweDNENkM0NjA4LCAweEUwMUMxRkQ4LCAweEU1ODAwNEZDLAorMHg2MDRDNjZFMiwgMHgzMDUwNjU1QywgMHgyRDYyOEYxNywgMHgwMUZDRTAxOCwKKzB4REVBM0U1MDAsIDB4NjQxQ0EwMDgsIDB4Njc1MzY1NUQsIDB4NjA3MDM3RUMsCisweDMxREM2MTUzLCAweDgwMTQ3NTAxLCAweDMyNDM2MjVELCAweEQ0OUQ4QkY0LAorMHhFMjAwRDU5RCwgMHhBMjdGMjQyMSwgMHgyMDA4MjUyMSwgMHhFMDE4OEIxMywKKzB4RTUwMDAxRkMsIDB4QTAwOURFOTYsIDB4NjU1RDY0MUMsIDB4MzJFQzYyNTMsCisweDYyNTM2NzIyLCAweDMyREM2NjcyLCAweDc1MDQxMjYxLCAweDMyNDM2MjVELAorMHhBMjY5OEJGMywgMHg4ODAxMkQxMCwgMHhFMDE4OEIxNiwgMHhFNDAwMDFGQywKKzB4NjcxQzJENDAsIDB4NjI0RERFOEEsIDB4OEIwMTMyNzMsIDB4MDAwOUEyNUMsCisweDZERTM2NDRELCAweDdEMDQ2MjQzLCAweDMyRUM2NjQzLCAweDY1MjIzNkRDLAorMHg3NDA4NjE2MiwgMHgyNTEyQUZFRiwgMHg4QjE5ODgwNCwgMHgwMUZDRTAxOCwKKzB4MkQ3MEU3MDAsIDB4MUZENTZEMUMsIDB4NjI3RERFN0QsIDB4OEIwMTMyRDMsCisweDAwMDlBMjQyLCAweDYxNzM2NzdELCAweDMxRUM2NUUzLCAweDc1MDQ2NDEyLAorMHgzNjVDNjY3MywgMHg2MTQyNjI2MiwgMHgyMTI5NzcwOCwgMHgyNDEyQUZFRCwKKzB4OEIxOTg4MDUsIDB4MDFGQ0UwMTgsIDB4MkQ3MEU3MDAsIDB4MUZENDZEMUMsCisweDYyN0RERTZGLCAweDhCMDEzMkQzLCAweDAwMDlBMjI2LCAweDYxNzM2NzdELAorMHgzMUVDNjVFMywgMHg3NTA0NjQxMiwgMHgzNjVDNjY3MywgMHg2MTQyNjI2MiwKKzB4MjEyQjc3MDgsIDB4MjQxMkFGRUQsIDB4OEI1OTg4MzEsIDB4NjFFNkRFNjcsCisweDYxRTMxRjE5LCAweDY0RTI3MTA0LCAweDFGNEE2MjE2LCAweDFGMkI2NDE2LAorMHg3NUU0NjUxMywgMHg2NjUzNjcxMiwgMHgxRjRDNzYwNCwgMHg2NDUyMUY3RCwKKzB4RDc1RjZFNjYsIDB4MjdFMEQyNUYsIDB4REU1RjYwNjIsIDB4QzkwMTMyNDUsCisweDY1NjIyRTAwLCAweDQ2MDkwNjBBLCAweDQ2MDlEMTVDLCAweDQ2MDk0NTA5LAorMHgyMTUwMUY0RSwgMHhCMkIwNjQ2RCwgMHg2MjBEMUY2RiwgMHg4QjAxMjIyOCwKKzB4MDAwOUExRUEsIDB4RDc1NkRFNTUsIDB4NjYxQzYxRTAsIDB4NjQxMEQxNTAsCisweDQ3MEI2NTRDLCAweDdGRkM1NEZGLCAweDJGRTI1RUZFLCAweDUxRkU3RkZDLAorMHgyRjEyRTA0MCwgMHg1NUZCRDE0RiwgMHg1N0ZENTZGQywgMHgwNEZFNDEwQiwKKzB4RDI0RDdGMDgsIDB4RTExQzY0MEQsIDB4MUQ0MTJEMTAsIDB4RDQ0QjY1MjIsCisweDY3NDIxRDUyLCAweDFENzNERTRBLCAweEQyNEE2NUUyLCAweDY3MjIxRDU0LAorMHgxRDc1RDI0OSwgMHhEMjQ5NkUyMiwgMHg2NjIyMURFNiwgMHgxRDY3QTFCQywKKzB4ODkwMTg4MzAsIDB4MDAwOUEwOEUsIDB4RTM0MEQ1MzgsIDB4MzNGQzYxNTYsCisweDIzMTI2NDU2LCAweDcxMDQ2MTUzLCAweDY3NTIxMzQxLCAweDEzNzI2NDE2LAorMHg3RUU0NkUxMywgMHg2NUU2NjIxMiwgMHg2NkUzRDczMSwgMHgxMzI0NkVFMiwKKzB4NzYwNDI3RTAsIDB4NjA2MkQyMkYsIDB4MzI1NURFMkYsIDB4MkUwMEM5MDEsCisweDA2MEE2RTYyLCAweEQxMkQ0NjA5LCAweDRFMDk0NjA5LCAweDEzNDM0NjA5LAorMHg2NDZEMjFFMCwgMHhCMjUwMUY1RSwgMHg2MjBEMUY2RiwgMHg4QjAxMjIyOCwKKzB4MDAwOUExOEEsIDB4REUyNUQ1MjIsIDB4NjFFMDY0NTAsIDB4RDcyNDY1NEMsCisweDQ3MEI1NEZGLCAweDdGRkM2NjFDLCAweDA2RkVFMDU0LCAweDdGRkMyRjYyLAorMHhFRTQwMDFGRSwgMHgyRjEyM0VGQywgMHg1NUUyRDEyNSwgMHg1N0U0NTZFMywKKzB4NjRFMjQxMEIsIDB4RDIxQzdGMDgsIDB4RTExQzY0MEQsIDB4MUQ0MTJEMTAsCisweEQ2MUE2NTIyLCAweDY3NjIxRDUyLCAweDFENzNERTE5LCAweEQyMTk2RUUyLAorMHg2MjIyMURFNCwgMHhEMjE4MUQyNSwgMHgxRDI2NjIyMiwgMHg2MjIyRDIxNywKKzB4MUQyN0ExNUEsIDB4MDAxMTc4MDAsIDB4MDAyMDJBMTgsIDB4MDAyMDM5OTYsCisweDAwMjAzNUJDLCAweDAwMjAzQTdDLCAweDAwMjAxOEQwLCAweDAwMjAzOTk1LAorMHgwMDExNzgwNCwgMHgwMDIwM0ExNCwgMHgwMDIwM0ExNiwgMHgwMDExNzgxMCwKKzB4MDAyMDM5OTEsIDB4MTA2MjRERDMsIDB4MDAyMDM5OTIsIDB4MDAyMDM5OTMsCisweDAwMTE0QUE0LCAweDAwMjAwRjY4LCAweDAwMUM1ODY0LCAweDAwMUM2ODY0LAorMHgwMDFDNzg2NCwgMHgwMDFDNTlCQywgMHgwMDFDNjlCQywgMHgwMDFDNzlCQywKKzB4MDAyMDBGQzAsIDB4OEIwNDg4MzMsIDB4NDcwQkQ3QTIsIDB4QTEyM0VFMDAsCisweDg4MjgyREUwLCAweEEwRDM4OTAxLCAweERFOUYwMDA5LCAweDYyRTFFMTQzLAorMHgzMjE2RTA1NCwgMHgwRkU2OEYwMiwgMHgyRTIxRTI0MCwgMHg2MjJENjJFMSwKKzB4OEIwMTMyMTcsIDB4MDAwOUEwQkMsIDB4RTUwMTg1RTEsIDB4OEIwMTMwNTYsCisweDAwMDlBMEI2LCAweDJEMTBFMTAxLCAweDY0RTFCMTExLCAweDA2RkVFMDU0LAorMHg2MjYxRTE0MywgMHgzNTE3NjUyRCwgMHhFNjQwODk0NSwgMHg4QjBDMzU2MywKKzB4RTA1OEU0MUEsIDB4RTUwMDBGNDUsIDB4NzJDMEUwNUMsIDB4NjAyMzBGNTUsCisweDY3MDNDOTA3LCAweEEwMTRFMDYwLCAweDY2NTMwRjc1LCAweDQ2MjE0NjIxLAorMHg0NjIxNDYyMSwgMHg0NTIxNDYyMSwgMHhFMDU4NzYxOCwgMHgwRjY1NDUyMSwKKzB4RTAwMzQ1MjEsIDB4RTA1QzI1MDksIDB4RTAwNzBGNTUsIDB4RTA2MDIyMDksCisweEU4NTQwRjI1LCAweDg1ODIzOEZDLCAweDY0MEQ2NUYzLCAweDE4NDRCMTcwLAorMHhERDdBODU4NCwgMHg4NTg2NkMwRCwgMHg2MTBENEMwOCwgMHg0MTA4NjBDMywKKzB4RTAwRjBFRkUsIDB4MTgxNTREMEIsIDB4MkUyOTYyMDcsIDB4NjY4MjYwQzMsCisweDg1NjIwRkU2LCAweDREMEI1MTg1LCAweDJFMEI2MDBELCAweDU0ODQ2MEMzLAorMHhCMTNDMEZFNiwgMHhFMDU0NjVGMywgMHhFNTQwMEVGRSwgMHhFMDZDNjJFMSwKKzB4MzY1MzY2MkQsIDB4MEY2NjhENDEsIDB4QzkwMzYwMjMsIDB4NDAwMDQwMDgsCisweDYxMDM2NDAzLCAweEQ5NjVFMDcwLCAweDBGNDZFNUZGLCAweEUwNzQ2NTVDLAorMHg2MDUzMEY5NiwgMHg2MjYzNDkwQiwgMHg0MjIxNDIyMSwgMHg0MjIxNDIyMSwKKzB4NDIwMDY3MjMsIDB4NDIwMDMyN0MsIDB4NkMwNzQ2MjEsIDB4NDYyMUUwNTQsCisweDYwNjMwOUZFLCAweDQwMDhDOTAzLCAweDc5MDYzMEZDLCAweDZBMDM2RDJELAorMHg2NUYzRTgwMCwgMHg2NEQzQjEyNCwgMHhFMDcwNkVBMiwgMHgyQUUyMkVDOSwKKzB4MDFGRTY2OTQsIDB4NjY2Q0UwNzQsIDB4NDcwQjA3RkUsIDB4MkUwQjYwNjMsCisweDY1RjMyQUUyLCAweEIwRkE2NEQzLCAweDYyOEQ3ODAxLCAweDMyRTNFRTA2LAorMHg3RDAxOEZFNywgMHgwRUZFRTA1NCwgMHhFMDU0NjJFMSwgMHg0MjAwMDZGRSwKKzB4NzYwQzg1NjEsIDB4NzAxQjMwMkMsIDB4RTQwMDYxMDMsIDB4RTcwNDY1RjMsCisweDY4NjY3NDAxLCAweDM5NzM2OTRELCAweDhGRjkyNTgyLCAweDY1RjM3NTA0LAorMHg2NDFEQjBERCwgMHgwRUZFRTA1NCwgMHg2NEUxQjA5QywgMHgwMDA5QTA1NCwKKzB4RDQzQjU2RjgsIDB4RUEwMUQyM0IsIDB4MjZBMDQyMEIsIDB4MDAwOUEwNEMsCisweDA2RkNFMDFDLCAweDg4Mjk2MDZDLCAweDVDRjg4QjA4LCAweEUyMDBENjM2LAorMHg1MjYxMkMyMCwgMHg2NDJEQjA0QiwgMHgwMDA5QTAzRSwgMHg2NjZDRTY4MSwKKzB4OEIwNDMwNjAsIDB4NDIwQkQyMzEsIDB4QTAzNTU0RjgsIDB4RTY4MjAwMDksCisweDMwNjA2NjZDLCAweEQyMkU4QjA0LCAweDU0Rjg0MjBCLCAweDAwMDlBMDJDLAorMHg2NjZDRTY4MywgMHg4QjBBMzA2MCwgMHhEQTI3NTVGOCwgMHgyNTkwRTkwMCwKKzB4RDgyODU1QTEsIDB4Mjg1MkQ2MjgsIDB4QTAxRDUyQTIsIDB4RTY5MjI2MjAsCisweDMwNjA2NjZDLCAweEQyMjA4QjA4LCAweDVDMjFEODI0LCAweDZDQ0M1MkY4LAorMHgyOEMxRTYwMCwgMHgyMjYwQTAxMCwgMHg2NjZDRTY5MywgMHg4QjA2MzA2MCwKKzB4RDYxRjU5RjgsIDB4RTIwMUVBMDAsIDB4QTAwNTI5QTAsIDB4RDYxNjI2MjEsCisweEQyMURENDFDLCAweDY1NjI0MjBCLCAweDRGMDY3Rjc4LCAweDRGMjY0RjE2LAorMHg2REY2NkVGNiwgMHg2QUY2NkNGNiwgMHgwMDBCNjlGNiwgMHg0RjIyNjhGNiwKKzB4RTI0MDYxNEQsIDB4ODkzMjMxMjMsIDB4MzEyN0UyMUYsIDB4OEIyN0Q3MTMsCisweEQ0MDY2MTRELCAweEUwMDE3MUUwLCAweDU2NzE0NDBCLCAweDI2NTk2NTA3LAorMHgxNzYxQTAyNSwgMHgwMDIwMEZCQywgMHgwMDExNzgwNCwgMHgwMDIwMzQ3MCwKKzB4MDAyMDNBOUMsIDB4MDAyMDE4QzAsIDB4MDAxMTc4MDAsIDB4MDAxMTVGMDAsCisweDAwMTE2MDU4LCAweDAwMjAzOTdDLCAweDAwMjAzOTkwLCAweDAwMjAzQTFBLAorMHgwMDIwM0ExNiwgMHgwMDIwM0FCNCwgMHgwMDIwMThEMCwgMHgwMDFDMzcwNCwKKzB4RTAwMUQ0OTAsIDB4NjY3MjQ0MEIsIDB4MjY1OTY1MDcsIDB4NEYyNjI3NjIsCisweDAwMDkwMDBCLCAweDYxNEQ0RjIyLCAweDMxMjNFMjQwLCAweEUyMUY4OTEyLAorMHhENzg5MzEyNywgMHg2MTREOEIwOCwgMHg1NjcxRDI4NiwgMHg0MjBCNzFFMCwKKzB4MjYwQkUwMDEsIDB4MTc2MUEwMDYsIDB4NjY3MkQyODIsIDB4RTAwMTQyMEIsCisweDI3NjIyNjBCLCAweDAwMEI0RjI2LCAweEU2NDAwMDA5LCAweDQ2Mjg0NjE4LAorMHg2MjUyRDU3RSwgMHg4OUZDMjI2OCwgMHgwMDA5MDAwQiwgMHg0NjE4RTY4MCwKKzB4RDU3QTQ2MjgsIDB4MjI2ODYyNTIsIDB4MDAwQjg5RkMsIDB4QTAwMTAwMDksCisweDcyMDFFMjAwLCAweDhCRkMzMjQyLCAweDAwMDkwMDBCLCAweDQ2MThFNjgwLAorMHhENTczNDYyOCwgMHgyMjY4NjI1MiwgMHgwMDBCOEJGQywgMHgyRkU2MDAwOSwKKzB4N0ZGQzRGMjIsIDB4QkZGMTZFNTMsIDB4NjFFMjJGNDIsIDB4RTI4MEQ2NkQsCisweDU0RTExNjE1LCAweDE2NDY0MjE4LCAweDQyMjg1NUUyLCAweDU3RTMxNjU3LAorMHgxNjc4NkVGMiwgMHgyNkUyMkUyQiwgMHg0RjI2N0YwNCwgMHg2RUY2QUZDRSwKKzB4MkZENjJGQzYsIDB4NEYyMjJGRTYsIDB4NkM1M0RENjIsIDB4NkU0M0JGRDYsCisweDJERTJCRkJCLCAweDAwMDlCRkQyLCAweDJDMTI1MUQ1LCAweDFDNDE1NEQ2LAorMHgxQzUyNTVENywgMHgxQzYzNTZEOCwgMHg2RUY2NEYyNiwgMHgwMDBCNkRGNiwKKzB4NjE2MzZDRjYsIDB4QTAwNEU2MDAsIDB4NjI1NjQxMDksIDB4MjQyMjc2MDEsCisweDM2MTI3NDA0LCAweDAwMEI4QkY5LCAweEQ2NTMwMDA5LCAweDg1NjJFNTAwLAorMHhBMDBCNjc0RCwgMHg2NTVENjEwRCwgMHg0MDAwNjA1MywgMHgzMDVDRDQ0RiwKKzB4MDI0RDQwMDgsIDB4MzI3MDYyMkQsIDB4NzUwMTg5MDUsIDB4MzIxMzYyNUQsCisweDAwMEI4QkYxLCAweDAwMEJFMDAwLCAweDJGRTZFMDAxLCAweDU0NDE2NzQzLAorMHg0RTA4RUU3RiwgMHg0RTI4RDI0NiwgMHgyNUU5NjU0MywgMHg2MDQzNkUyMSwKKzB4OUU3NTYyRUQsIDB4NDUyOUM5MDMsIDB4RTYwMDMyRTMsIDB4OEQ0NTYxMDMsCisweDIxMTg0NTA5LCAweEQyM0Y4QjA1LCAweDAwMkM2MDUzLCAweEEwOEFDOTNGLAorMHg2MDEzNjYwMywgMHg4QjI2ODgwMSwgMHg4ODBDNjA1MywgMHhENTNBOEIwNCwKKzB4QzkzRjg0NTMsIDB4NjYwM0EwN0YsIDB4OEIwNDg4MDgsIDB4ODRFMkRFMzYsCisweEEwNzhDOTNGLCAweDg4MEQ2NjAzLCAweDhCMDNENjMzLCAweEM5M0Y4NDYxLAorMHg2NjAzQTA3MSwgMHg4ODA5NjI2MCwgMHg2MjJDOEYwOSwgMHhFMDE0REUyQywKKzB4NjU1QzA1RUMsIDB4NjAyMzMyNTgsIDB4QTA2NEM5M0YsIDB4NjAyMzY2MDMsCisweEEwNjBDOTNGLCAweDg4MDI2NjAzLCAweEUwMDc4QjVELCAweDYwNDMyNTA5LAorMHg4OTA1QzgxMCwgMHg2MDUzRDIyNSwgMHhDOTNGMDAyQywgMHg2NjAzQTA1MywKKzB4NjA1M0RFMjMsIDB4QzkzRjAwRUMsIDB4NjYwM0EwNEQsIDB4ODgwMTYwMTMsCisweDYwNTM4QjE5LCAweDhCMDQ4ODBDLCAweDg0MjNEMjFFLCAweEEwNDJDOTNGLAorMHg4ODA4NjYwMywgMHhENTFCOEIwNCwgMHhDOTNGODQ1MiwgMHg2NjAzQTAzQiwKKzB4RDYxODg4MEQsIDB4ODQ2MThCMDMsIDB4QTAzNEM5M0YsIDB4NjA2MDY2MDMsCisweEEwMzBDOTNGLCAweDg4MDI2NjAzLCAweEUwMDc4QjJELCAweDYwNDMyNTA5LAorMHg4OTIzQzgxMCwgMHg2MDUzREUxMCwgMHhDOTNGMDBFQywgMHg2NjAzQTAyMywKKzB4MDAwMDBCQjgsIDB4MDAyMDM0NzAsIDB4MDAxQzM3MDQsIDB4MDAxQzM3M0MsCisweDAwMUMzNzAwLCAweDAwMUMzNzBDLCAweDAwMTE0MDAwLCAweDAwMTE0MDA4LAorMHgwMDExNDJEOCwgMHgwMDExNDJFNCwgMHgwMDExNDJFOCwgMHgwMDExNDJGNSwKKzB4MDAxMTQyRUQsIDB4MDAxMTQyRkQsIDB4MDAxMTQzMDksIDB4NjA1M0QyMDksCisweEM5M0YwMDJDLCAweDYwMTM2NjAzLCAweDhCMDM4ODAyLCAweEM4MTA2MDQzLAorMHg3NjAyODkwMCwgMHhDOTNGNjA2MywgMHg0MDAwNDAxOCwgMHgxNzQxMjQwQiwKKzB4NkVGNjAwMEIsIDB4MDAxMTQzMDEsIDB4MDAwOUExNkUsIDB4MkZFNjJGRDYsCisweEREOTQ0RjIyLCAweEEwMDQ5RUIyLCAweEQ0OTMwMDA5LCAweDQyMEJEMjkzLAorMHg2MkQyNjVEMiwgMHg4QkY4MjJFOCwgMHgwMDA5QTAwNCwgMHhEMjhGRDQ5MCwKKzB4NTVEMTQyMEIsIDB4MjJFODUyRDEsIDB4QTAwNDhCRjgsIDB4RDQ4RDAwMDksCisweDQyMEJEMjhBLCAweDUyRDI1NUQyLCAweDhCRjgyMkU4LCAweDAwMDlBMDA0LAorMHhEMjg2RDQ4OSwgMHg1NUQzNDIwQiwgMHgyMkU4NTJEMywgMHhBMDA0OEJGOCwKKzB4RDQ4NjAwMDksIDB4NDIwQkQyODEsIDB4NTJENDU1RDQsIDB4OEJGODIyRTgsCisweDZFRjY0RjI2LCAweDZERjYwMDBCLCAweDJGRDYyRkM2LCAweDRGMjIyRkU2LAorMHg2RTYzNkM3MywgMHg2RDUzQjAxQSwgMHg2NEQzNTdGNCwgMHhCMDVGNjVFMywKKzB4QjA3NTY2QzMsIDB4QjBBNDAwMDksIDB4QjBBODAwMDksIDB4QjBBQzAwMDksCisweEIwQUMwMDA5LCAweEIwQUYwMDA5LCAweEIwMzE1NEY1LCAweDZDQ0Q2QzAzLAorMHg0RjI2NjBDMywgMHg2REY2NkVGNiwgMHg2Q0Y2MDAwQiwgMHgzNDEyRDE3MCwKKzB4RDY3MDA1MjksIDB4MjY1MEQ3NzAsIDB4Mjc0MjAwMEIsIDB4MDAwOUEwMTgsCisweDJGRDYyRkM2LCAweDRGMjIyRkU2LCAweDZFNjM2QzczLCAweDZENTNCRkVFLAorMHg2NEQzNTdGNCwgMHhCMDMzNjVFMywgMHhCMDhENjZDMywgMHhCMDBGNTRGNSwKKzB4NkNDRDZDMDMsIDB4NEYyNjYwQzMsIDB4NkRGNjZFRjYsIDB4NkNGNjAwMEIsCisweEU1MDNEMTYyLCAweEQ3NjNENDYyLCAweDIxNTI0NTE4LCAweDI0NzIwMDBCLAorMHhENDVGRDE1RSwgMHgyMTYyRTYwMCwgMHgyNDYyMDAwQiwgMHhCRjczNEYyMiwKKzB4QkY3M0U0MEEsIDB4RDI1QzAwMDksIDB4NDExOEUxMDQsIDB4RTQwQUU1MDAsCisweEJGNjkyMjEyLCAweEQ3NTkyMjUyLCAweENCMjA2MDcyLCAweDAwMEI0RjI2LAorMHg0RjIyMjcwMiwgMHg0MTBCRDE1NiwgMHhENTU2RTQwMCwgMHg0RjI2NDUyQiwKKzB4RDE1NTJGRTYsIDB4NjYxMjZFNjMsIDB4OTIxMDQ0MTgsIDB4NDQwODQ1MjgsCisweDQ1MDAyNjI5LCAweDI2NUI0NDA4LCAweDI2NEI0NDAwLCAweDIxNjI0NzA4LAorMHhEMTRFNDcwOCwgMHgyMTcyMjdFQiwgMHg2RUY2MDAwQiwgMHgxRkZGMDNGMCwKKzB4NEYyMjJGRTYsIDB4RTEwMURFNEEsIDB4QkYzREU0MEEsIDB4NjdFMzJFMTIsCisweEU1MDA3NzZDLCAweEUyMDRFMTMwLCAweDI3NTJFNDBBLCAweDI3NTIyNzUyLAorMHgyNzUyMjc1MiwgMHgyNzUyMjc1MiwgMHgyNzUyMjc1MiwgMHgyNzUyMjc1MiwKKzB4Mjc1MjI3NTIsIDB4Mjc1MjI3NTIsIDB4Mjc1MjI3NTIsIDB4Mjc1MjI3NTIsCisweDI3MjIyNzEyLCAweDI3NTIyNzUyLCAweDI3NTIyNzUyLCAweDI3NTIyNzUyLAorMHgyNzUyMjc1MiwgMHgxNzVBQkYxOCwgMHgyRTYyRTYwMCwgMHgwMDBCNEYyNiwKKzB4RDIzNDZFRjYsIDB4RTQ0MUUxMDEsIDB4MDAwQjIyMTIsIDB4RDEzMjIyNDIsCisweEU2MDVENDMyLCAweDAwMEIyMTYyLCAweDAwMEIyNDYyLCAweEQyMzAwMDA5LAorMHhFNDBBRTYwMSwgMHgyMjYyQUYwMCwgMHgyRkM2MkZCNiwgMHgyRkU2MkZENiwKKzB4N0ZGQzRGMjIsIDB4NkM0M0RCMkIsIDB4RUQwMDYwQjIsIDB4MkIwMkNCMDMsCisweEM5MDM2MEIyLCAweDZFMDNBMDA4LCAweDg5MDczREMyLCAweEU0NjQ2MEIyLAorMHhCMDdDQzkwMywgMHg3RDAxNkUwMywgMHg4QkY1MkVFOCwgMHg4RjA0M0RDMiwKKzB4RDQyMTJGRTEsIDB4NDYwQkQ2MjEsIDB4NjJGMTAwMDksIDB4NjAyMzYyMkQsCisweDg5RkZDODAxLCAweDdGMDQ2MDIzLCAweDZFRjY0RjI2LCAweDZDRjY2REY2LAorMHg2QkY2MDAwQiwgMHgwMDFDM0I4OCwgMHgwMDIwM0FDOCwgMHgwMDIwMThEMCwKKzB4MDAyMDNBRDAsIDB4MDAyMDNBRDgsIDB4MDAyMDNBRTAsIDB4MDAyMDNBRTgsCisweDAwMjVFNzIwLCAweDAwMjAzREJDLCAweDAwMjAzOTgwLCAweDAwMUM1OTY4LAorMHgwMDFDM0I0MCwgMHgwMDBGODAwMCwgMHgwMDFENDAwNCwgMHgwMDFDMzUwMCwKKzB4MDAyMDE1RTQsIDB4MDAyMDE2MTAsIDB4MDAxQzU4MTQsIDB4MDAxQzU5RDAsCisweDAwMUM1ODMwLCAweDAwMUM2MjY4LCAweDAwMUM1OUE0LCAweDAwMUM2MzlDLAorMHgwMDFDNTgxQywgMHgwMDFDNTg2MCwgMHgwMDIwM0FGMCwgMHgwMDIwMThDMCwKKzB4OEYwMTQ0MTEsIDB4NjA0MzYwNEIsIDB4MDAwOTAwMEIsIDB4NTY1MUQ1MkIsCisweDQ2Mjg2MDUyLCAweDMwNkMwMDBCLCAweDJGQzYyRkI2LCAweDJGRTYyRkQ2LAorMHg0RjEyNEYyMiwgMHhCRkYxNEYwMiwgMHg2QjAzNkU0MywgMHhERDI1REMyNCwKKzB4MDAwOUJGRUMsIDB4M0MwNTMwQjgsIDB4NDYwOTA2MEEsIDB4NDYwMTQ2MDksCisweDAyMEEzRDY1LCAweDQyMDk0MjA5LCAweDMyRTI0MjA5LCAweDRGMDY4QkYwLAorMHg0RjI2NEYxNiwgMHg2REY2NkVGNiwgMHgwMDBCNkNGNiwgMHgyRkM2NkJGNiwKKzB4MkZFNjJGRDYsIDB4NEYxMjRGMjIsIDB4QkZDRjRGMDIsIDB4NkMwMzZFNDMsCisweEJGQ0JERDEzLCAweDMwQzgwMDA5LCAweDA2MEEzRDA1LCAweDQ2MDk0NjA5LAorMHgzNkUyNDYwMSwgMHg0RjA2OEJGNSwgMHg0RjI2NEYxNiwgMHg2REY2NkVGNiwKKzB4NkNGNjAwMEIsIDB4NEYyMjJGRTYsIDB4RTEwMkRFMEIsIDB4RTQwM0U1MDAsCisweEJGQjkyRTEyLCAweEU2MDYyRTUyLCAweEU3MDA0NjE4LCAweDJFNjJFNDAzLAorMHg0RjI2MkU3MiwgMHg2RUY2QUZCMCwgMHgwMDA5MDAwQiwgMHgwMDFDMTA0MCwKKzB4Q0NDQ0NDQ0QsIDB4MTA2MjRERDMsIDB4MDAxRDQwMDQsIDB4MkY5NjJGODYsCisweDJGQjYyRkE2LCAweDJGRDYyRkM2LCAweDRGMjIyRkU2LCAweEU1MDA3Rjk4LAorMHg2NDUzRTcxMCwgMHg2QjUzNDcyOCwgMHhFRTFBRENCQywgMHg2MTUzNjU1RCwKKzB4MzE1QzQxMDgsIDB4NzUwMTQxMDgsIDB4NjA0MzMxN0MsIDB4MEYxNjY2NUQsCisweEVEMDA2MEIzLCAweDIxQjEzNkUzLCAweDgxMTI4MTExLCAweDExRDI4MTEzLAorMHgxMUQ0MTFEMywgMHg3NDA0OEZFQSwgMHhEOEIxNjdGMiwgMHgxODcxRDlCMSwKKzB4NThGMTI4NzIsIDB4MTk4MUQxQjAsIDB4NTlGMjI5ODIsIDB4NURGNDVBRjMsCisweDU0RjY1RUY1LCAweDIxOTIxMTkxLCAweDExQTIxMUEzLCAweDExRDQxMUQ1LAorMHgxMUU2MTFFNywgMHgxMTQ4MTE0OSwgMHhEQUE4NTVGNywgMHg1N0Y4RUUwMCwKKzB4NTJGOUREQTcsIDB4NjRFM0Q2QTcsIDB4MkE1MjFBNTEsIDB4RDhBN0Q5QTYsCisweDJENzJFQUVGLCAweDZBQUMyNjIyLCAweDZERTM2RUVELCAweDYxRTM0RDA4LAorMHg0MTA4M0RFQywgMHgzMUVDNEQwOCwgMHg2MEIzM0Q5QywgMHgyREIxNDEwOCwKKzB4RTA1MDgxRDEsIDB4RTc5RjQxMDgsIDB4NDEwODQwMDgsIDB4ODFEMjY3N0MsCisweDMxOEM2MEIzLCAweDM0NzJFMjAwLCAweDFERDI4MUQzLCAweEQ0OTMxRDEzLAorMHgxRDI0OEQwMSwgMHg2NUQzRDQ4RiwgMHg3RTAxQjBCMiwgMHgzNEEyNjRFRCwKKzB4REE4QzhCREEsIDB4NjhBMjJGRDIsIDB4NDgyOUREOTEsIDB4NjRBMjJEODIsCisweDY5NEQ3REZDLCAweDJEOTJEMjg2LCAweDRFMjk2RTIyLCAweDJERTI3RDBDLAorMHg2QUQzNjgyMiwgMHhENzg0NjE4RCwgMHg2RDcyMkExNiwgMHhENTgzRDQ4OSwKKzB4NUU3MjI0RDIsIDB4MTRFMkQ2ODgsIDB4RUUwMDUxNzQsIDB4NTg3NjE0MTQsCisweDE0ODZEMTg2LCAweEU3MTA1OTc4LCAweDYyNTIxNDk4LCAweDE0MkE2NUUzLAorMHg2NEUzMjZFMiwgMHg2NDRERTYwMCwgMHg0ODA4Njg0MywgMHg0ODA4Mzg0QywKKzB4NjA1MzM4MUMsIDB4MjhCMTBDODYsIDB4NjBCMzA5Q0UsIDB4NjA1MzgxOTEsCisweDYwNDMwQUNFLCAweDYwNTM4MUEyLCAweDYwQjMwRENFLCAweDYwNTM4MUQzLAorMHg3NDAxMDhDRSwgMHgwOUNFMTg4MiwgMHgxOUUzNjI0RCwgMHgzMjczMEFDRSwKKzB4OEZFMDFBNjQsIDB4RDk2QTc1MDQsIDB4NkM5MkUwMDMsIDB4MkNCMTQwMTgsCisweERBNkY2RDkyLCAweEUwNTA4MUQxLCAweDQwMDg2RTkyLCAweDYxOTI4MUUyLAorMHg4MTEzNjBCMywgMHhFNjAwNjQ5MiwgMHg2NzkyMTQ0MiwgMHgxN0EzRDQ2OCwKKzB4RTFGRjY4OTIsIDB4RTcwMzE4NjQsIDB4NDYwODY1NjMsIDB4NzUwMTM2NEMsCisweDY2NUQyNjEyLCAweDhCRjgzNjczLCAweEUwMDNEQzVBLCAweDQwMTg2REMyLAorMHg2RUMyMkRCMSwgMHg4MUUxRDI1RiwgMHhFRTAwNjFDMiwgMHg2NEMyMTExMiwKKzB4MTQyM0UwMjQsIDB4RDQ1QjY1QzIsIDB4NjdDMjE1RTQsIDB4ODE3MkU1ODAsCisweDY2RTM2OEMyLCAweDY1NUM4MTgzLCAweDY5NjM2NjZELCAweDZBNkQ3NjA0LAorMHgzQTUzMzk0QywgMHgyOUUyOEZGOCwgMHhEQzU0REI1MywgMHg3NDA0MjRCMiwKKzB4N0Y2ODI0QzIsIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkFGNjZCRjYsCisweDAwMEI2OUY2LCAweDYxNDI2OEY2LCAweEM4MDM2MDExLCAweEU1MDA4RjAzLAorMHgzNDIwRDIzQywgMHg2MDExOEIwNiwgMHg4ODAyQzkwMywgMHhEMjM5OEIwNiwKKzB4OEIwMzM0MjAsIDB4NjUxMzU2MTIsIDB4MjQyMjUyNjQsIDB4NjA1MzAwMEIsCisweDJGRTYyRkQ2LCAweDdGRUM0RjIyLCAweDYyNTM2RTUzLCAweDZENDNFNTUwLAorMHg0NTA4RTQwMCwgMHhFMTAxQTAwMSwgMHg2MDQzNTIyNCwgMHg4MTIxMjIxMSwKKzB4NjA1MzgxMjMsIDB4NTZFMjgxMjIsIDB4OEJGNTM2MjAsIDB4MTZFNEQyMzgsCisweEU2MTQ2NEYzLCAweDY1RTM0MjBCLCAweEU0RkM2NUUxLCAweDJFNTEyNTQ5LAorMHg2NUYzNjFGMSwgMHgyRjExMjE0OSwgMHhEMTMxNTREMSwgMHhFNjE0NDEwQiwKKzB4NjA3MTU3RDEsIDB4MjcwMUNCMDEsIDB4N0YxNDFERTEsIDB4NkVGNjRGMjYsCisweDZERjYwMDBCLCAweDJGRTYyRkQ2LCAweDdGRUM0RjIyLCAweDY2NTM2RTUzLAorMHg2RDQzRTVGQywgMHgyMDU5NjA2MSwgMHgyNjAxQ0IwMSwgMHgzMjYwNTJFMiwKKzB4MTJFNDhCMDYsIDB4MzFFMDUxRTIsIDB4NTJEMThCMDQsIDB4MUUyMkEwMDIsCisweDU2NjRBRkYwLCAweDY0RjNEMjFFLCAweDQyMEJFNjE0LCAweDY3RTE2NUUzLAorMHgyNzE5RTFGQywgMHg2N0YxMkU3MSwgMHgyNzE5NTREMSwgMHg2NUYzRDExOCwKKzB4NDEwQkU2MTQsIDB4NTJEMTJGNzEsIDB4Q0IwMTYwMjEsIDB4MURFMTIyMDEsCisweDRGMjY3RjE0LCAweDAwMEI2RUY2LCAweDAwMDA2REY2LCAweDAwMjAzOUFDLAorMHgwMDIwMzU3QywgMHgwMDIwMzU4NCwgMHgwMDIwMzU4QywgMHgwMDIwMzVCNCwKKzB4MDAyMDM5OTgsIDB4MDAyMDM5QTAsIDB4MDAxMDAyMDgsIDB4MDAxMDE0QzAsCisweDAwMUUyMTBDLCAweDAwMUMzRDAwLCAweDAwMjAzOUVDLCAweDAwMTAwMEM4LAorMHgwMDExNzg4MCwgMHgwMDExNzc4MCwgMHgwMDA0MDAyMCwgMHgwMDI2QzQwMSwKKzB4MDAyMDBENDIsIDB4NEYyMjJGRTYsIDB4REU0MjYyNEMsIDB4NDIwMDQyMDgsCisweDNFMkNBMDA1LCAweEQ0NDA1MjUyLCAweEJGNjk1NjI0LCAweDY1RTIyRTYyLAorMHgzNTIwNTJFMSwgMHhENjNEOEJGNiwgMHg0RjI2MjYyMiwgMHg2RUY2MDAwQiwKKzB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsIDB4REMzOTRGMjIsIDB4NTJDMURCMzksCisweDM2MjA2NkMyLCAweDYwNjE4OTFDLCAweDg4MDFDOTAzLCAweERFMzQ4OTE4LAorMHhCRjM4REQzNSwgMHg2NTAzNjRFMywgMHg2NkIyODUwMywgMHgzMjYyNjIwRCwKKzB4RDQzMjg5MDcsIDB4MDAwOUJGNzYsIDB4NEQwQkQ0MzEsIDB4QUZFNjAwMDksCisweEJGM0QwMDA5LCAweEQ0MkY2NEUzLCAweDAwMDk0RDBCLCAweDAwMDlBRkRGLAorMHgyMjYyRDIyRCwgMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwgMHg2QkY2MDAwQiwKKzB4MkZENjJGQzYsIDB4NEYyMjJGRTYsIDB4REQyOURDMjgsIDB4NkU0MzYwQzIsCisweDA0REU0MDA4LCAweEU2MTREMTI3LCAweDY1RTM0MTBCLCAweEQxMjdENzI2LAorMHg1NUUyMjdFMiwgMHgzNUUwNTI1NCwgMHgyMTIyOEYwNCwgMHg0MDA4NjBDMiwKKzB4MTIyMjAyREUsIDB4NjA1MzY1QzIsIDB4NzUwMTQwMDgsIDB4MERFNjA2REUsCisweEM5MEY2MDUzLCAweDYwNjMyQzAyLCAweDZFRjY0RjI2LCAweDAwMEI2REY2LAorMHg4NTQzNkNGNiwgMHg2NTBENTY0MywgMHg2MjJENjI2MiwgMHgzNTI3NzIwNCwKKzB4RTEwMDhGMEMsIDB4MjI2ODk2MEMsIDB4RDYxNThCMDMsIDB4NzIwMTUyNjEsCisweEQ2MTMxNjIxLCAweDYyNjJFMTAxLCAweDI2MjI3MjAxLCAweDYwMTMwMDBCLAorMHgwMDAwMDFGRiwgMHgwMDIwMzU4QywgMHgwMDIwMzU4NCwgMHgwMDFDM0QwMCwKKzB4MDAyMDM1QjQsIDB4MDAyMDM5N0MsIDB4MDAyMDE4QzAsIDB4MDAyMDM1N0MsCisweDAwMjAzQjE4LCAweDAwMjAzQjFDLCAweDAwMUMzRDI4LCAweDAwMjAzOUVDLAorMHgwMDIwMzlBQywgMHgwMDIwMEQ0MiwgMHgwMDIwMzlGMCwgMHgwMDIwMzlGNCwKKzB4MDAxMTc3NTQsIDB4MkZBNjJGOTYsIDB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsCisweDdGRjg0RjIyLCAweDZDMjJEMjQxLCAweEM4MDM2MEMzLCAweERFNDA4OTZFLAorMHhEQTQxREI0MCwgMHg1MkIxRDk0MSwgMHgzNjIwNjZCMiwgMHg2MDYxODk0NSwKKzB4ODgwMUM5MDMsIDB4REQzQjg5NDEsIDB4NDIwQkQyM0QsIDB4NjUwMzY0RDMsCisweDYwQTEyRjAyLCAweDg5MzI4ODAxLCAweDg1MTQ1MTUzLCAweDg4NDA2MDBDLAorMHgxRjExOEYwQywgMHhENTM3NjE5MSwgMHg2NDFENDUwQiwgMHg4QjI2MjAwOCwKKzB4RDczNTY2OTEsIDB4NjQ2RDQ3MEIsIDB4OEIyMDIwMDgsIDB4NDIwQkQyMzMsCisweDUxRjE1NEYxLCAweEM4MjA4NTExLCAweEQxMzE4OTA0LCAweDAyMUVFMDUwLAorMHgwMTI2NzIwMSwgMHg0MjBCRDIyRiwgMHgyMDA4NjRGMiwgMHg2NEQzODkwNywKKzB4NEQwQkREMkQsIDB4RDEyRDY1RjIsIDB4QUZDNEU2MDEsIDB4RDIyQzIxNjIsCisweDQyMEI2NUYyLCAweEQ3MkI2NEUzLCAweEFGQkNFNjAxLCAweEQyMjYyNzYyLAorMHg0MjBCNjVGMiwgMHhBRkI2NjREMywgMHhERTI3MDAwOSwgMHhEQTI4REQyNywKKzB4NTJEMURCMjgsIDB4MzYyMDY2RDIsIDB4NjA2MTg5MTgsIDB4ODgwMUM5MDMsCisweEQ0MjI4OTE0LCAweDQ1MEJENTE2LCAweDU2MDMwMDA5LCAweDhGMDQzNkUwLAorMHhFMjAxNjUwMywgMHhBRkVDMkEyMCwgMHhENDFGMkI1MiwgMHg0MjBCRDIxNiwKKzB4RDcxODAwMDksIDB4NDExOEUxMDEsIDB4MjcxMkFGRTMsIDB4QzgwNDYwQzMsCisweEQyMUE4OTAyLCAweDAwMDk0MjBCLCAweDRGMjY3RjA4LCAweDZERjY2RUY2LAorMHg2QkY2NkNGNiwgMHgwMDBCNkFGNiwgMHgwMDAwNjlGNiwgMHgwMDFFMjEwMCwKKzB4MDAyMDM1OEMsIDB4MDAyMDM1ODQsIDB4MDAyMDNBMTQsIDB4MDAxMTQyRDgsCisweDAwMjAxNEE2LCAweDAwMTE1RUEyLCAweDAwMTE0Nzc0LCAweDAwMjAwRDhBLAorMHgwMDIwMzUxQywgMHgwMDIwMTZDMiwgMHgwMDIwMTREMCwgMHgwMDFFMjEyQywKKzB4MDAyMDE1MzQsIDB4MDAxQzNEMzAsIDB4MDAxMTc4ODAsIDB4MDAyMDM1N0MsCisweDAwMjAzOTlDLCAweDAwMjAzOTk4LCAweDAwMjAzNUI0LCAweDAwMjAwNjQ0LAorMHhFNjAxRDIwMywgMHgxMjY1RDUwMywgMHgwMDBCMjI1MiwgMHgwMDAwMTI2NiwKKzB4MDAxQzEwMTAsIDB4MDAwMEMzNEYsIDB4MDAwOTAwMEIsIDB4MDAwOTAwMEIsCisweDAwMDkwMDBCLCAweDAwMDkwMDBCLCAweEUwMDAwMDBCLCAweEUwMDAwMDBCLAorMHgwMDA5MDAwQiwgMHhFNEZERDU5RCwgMHhENjlENjE1MiwgMHgyNTEyMjE0OSwKKzB4NzQwMTYwNTIsIDB4MjUwMkNCMDEsIDB4RDE5QTY3NTIsIDB4MjU3MjI3NDksCisweEM4NDA2MDEwLCAweDYwNjI4OTAyLCAweDI2MDJDQjA0LCAweEUxRjc2NDYyLAorMHgyNjQyMjQxOSwgMHhFNzAxNjA2MiwgMHgyNjAyQzlDRiwgMHhFNTAyNjA2MiwKKzB4MjYwMkNCMTAsIDB4NDcxODYwNjIsIDB4MjYwMkNCMDMsIDB4MDAwQjE2NTIsCisweEQ1OEQxNjczLCAweEQyOEVENzhELCAweEUxMDBENDhFLCAweDI1MTFFNjAwLAorMHgyMjEwMjcxMSwgMHgyNDYxQUZDRSwgMHhEMjhCNjY0QywgMHgzNjJDNDYwMCwKKzB4Q0IxMDYwNjAsIDB4MjYwMDAwMEIsIDB4RDI4NzY1NEMsIDB4MzUyQzQ1MDAsCisweEUxRUY2NjUwLCAweDAwMEIyNjE5LCAweDY2NEMyNTYwLCAweDQ2MDBEMjgzLAorMHg2MDYwMzYyQywgMHgwMDBCQ0IxMCwgMHg2NTRDMjYwMCwgMHg0NTAwRDI3RiwKKzB4NjY1MDM1MkMsIDB4MjYxOUUxRUYsIDB4MjU2MDAwMEIsIDB4RDI3QTY2NEMsCisweDM2MkM0NjAwLCAweENCMDg2MDYwLCAweDI2MDAwMDBCLCAweEQyNzY2NTRDLAorMHgzNTJDNDUwMCwgMHhFMUY3NjY1MCwgMHgwMDBCMjYxOSwgMHg2NjRDMjU2MCwKKzB4NDYwMEQyNzIsIDB4NjA2MDM2MkMsIDB4MDAwQkNCMDgsIDB4NjU0QzI2MDAsCisweDQ1MDBEMjZFLCAweDY2NTAzNTJDLCAweDI2MTlFMUY3LCAweDI1NjAwMDBCLAorMHhENjY5NjI0QywgMHgzMjZDNDIwMCwgMHhDOTA4NjAyMCwgMHg0MDIxNDAyMSwKKzB4MDAwQjQwMjEsIDB4NjI0QzYwMEMsIDB4NDIwMEQ2NjQsIDB4NjAyMDMyNkMsCisweDQwMjFDOTA4LCAweDQwMjE0MDIxLCAweDYwMEMwMDBCLCAweDY0NENEMTYwLAorMHg2MjQwMzQxQywgMHg2MDJDMDAwQiwgMHg2NDRDRDE1RSwgMHg2MjQwMzQxQywKKzB4NjAyQzAwMEIsIDB4NEYyMjJGRTYsIDB4NjQ1QzZFNDMsIDB4MzQ2N0U2MEEsCisweEJGRUI4OTE0LCAweDY0MEMwMDA5LCAweDg4MDE2MEVDLCAweEUwMEY4QjAyLAorMHgyNDA5QTAwMiwgMHg0NDA5NDQwOSwgMHhFNjBBNjI0QywgMHg4OTA1MzI2MywKKzB4NjQ0Q0JGRTIsIDB4NjAyMzYyMEMsIDB4OEIwMEM4ODAsIDB4NjAyM0UyMDAsCisweDAwMEI0RjI2LCAweDRGMjI2RUY2LCAweDYwNjJENjRCLCAweDhCMDM4ODAxLAorMHgwMDA5QjI1NiwgMHgwMDA5QTAwMywgMHhFNjQwRDI0OCwgMHhENjQ4MjI2MCwKKzB4NEYyNkUyMDAsIDB4MjYyMjAwMEIsIDB4RDY0MzRGMjIsIDB4ODgwMjYwNjIsCisweEIyOUY4QjAxLCAweEQ2NDIwMDA5LCAweDRGMjZFMjAwLCAweDI2MjIwMDBCLAorMHhENDNFRDUzRCwgMHhFNzAxRTEwMCwgMHgwMDBCMjUxMiwgMHhEMjNCMjQ3MCwKKzB4MDAwQkU2MDQsIDB4NEYyMjIyNjAsIDB4RDEzQkQ0M0EsIDB4MDAwOTQxMEIsCisweEUxRkRENTNBLCAweEQyM0E2NjUwLCAweEU3MDAyNjE5LCAweDRGMjYyNTYwLAorMHgyMjcwMDAwQiwgMHhENTM3NEYyMiwgMHg2MTUyRDIzNywgMHg2MTFERDczNywKKzB4NjQ1MjI1MTIsIDB4MjQyQkU2RkYsIDB4RDQzNTI1NDIsIDB4NjY2REQyMkUsCisweDI3NjI0MjBCLCAweEUxRkJENTJELCAweDI3MTk2NzUwLCAweDAwMEI0RjI2LAorMHg0RjIyMjU3MCwgMHhEMTI4RDQyRiwgMHgwMDA5NDEwQiwgMHhFN0Y3RDUyNywKKzB4MjY3OTY2NTAsIDB4MDAwQjRGMjYsIDB4RDUyNDI1NjAsIDB4NjI1MDk0MjUsCisweDAwMEIyMjQ5LCAweEQ1MjEyNTIwLCAweDYyNTBFNEJGLCAweDAwMEIyMjQ5LAorMHg0RjIyMjUyMCwgMHg4NTIyRDIyNCwgMHgyMDA4NjAwRCwgMHg4ODAxODkxMSwKKzB4ODgwMzg5NDQsIDB4ODgwNTg5NDYsIDB4ODgwNjg5NDgsIDB4ODgwODg5NEUsCisweDg4MDk4OTU0LCAweDg4MEE4OTVBLCAweDg4MEI4OTYwLCAweEEwNkQ4OTY2LAorMHhCMDZGMDAwOSwgMHhBMDZBMDAwOSwgMHhGRjdGNjAwQywgMHgwMDFFMjE0OCwKKzB4MDAxRTExMDgsIDB4MDAxRTEwMDAsIDB4MDAyMDNBNEMsIDB4MDAyMDNBNEUsCisweDAwMjAzQTZELCAweDAwMjAzQTMwLCAweDAwMUUxMDNGLCAweDAwMUUxMDVGLAorMHgwMDFFMTAyRiwgMHgwMDFFMTA5MCwgMHgwMDIwM0E1NCwgMHgwMDFFMTAwQiwKKzB4MDAyMDNBNTAsIDB4MDAyMDNCMjAsIDB4MDAyMDE4QzAsIDB4MDAxRTEwMjgsCisweDAwMjAzQTZDLCAweDAwMUQ0MDIwLCAweDk4NzYwMDAwLCAweDAwMUMxMDAwLAorMHgwMDIwM0IyQywgMHgwMDIwM0IzQywgMHgwMDIwM0EyNCwgMHgwMDA5QjA0QywKKzB4NjAwQ0EwMzUsIDB4MDAwOUIwNTUsIDB4NjAwQ0EwMzEsIDB4NjI2MEQ2ODQsCisweDhCMkIyMjI4LCAweDAwMDlCMDYxLCAweDYwMENBMDI5LCAweDYyNjBENjgwLAorMHg4QjIzMjIyOCwgMHgwMDA5QjA2OSwgMHg2MDBDQTAyMSwgMHg2MjYwRDY3QywKKzB4OEIxQjIyMjgsIDB4MDAwOUIwQzcsIDB4NjAwQ0EwMTksIDB4NjI2MEQ2NzgsCisweDhCMTMyMjI4LCAweDAwMDlCMENELCAweDYwMENBMDExLCAweDYyNjBENjc0LAorMHg4QjBCMjIyOCwgMHgwMDA5QjEyNSwgMHg2MDBDQTAwOSwgMHg2MjYwRDY3MCwKKzB4OEIwMzIyMjgsIDB4MDAwOUIxM0QsIDB4NjAwQ0EwMDEsIDB4NEYyNkUwMDAsCisweDAwMDkwMDBCLCAweEQyNkNEMTZCLCAweEQ1NkM4NDEyLCAweDQwMDBDOTBGLAorMHhENzZCMDEyRCwgMHhFNDAzRDY2QiwgMHhFMjBGNjExQywgMHgyNTQwRTAwMSwKKzB4MjUyMDI3MTIsIDB4MjYwMjAwMEIsIDB4RTYwMUQyNjIsIDB4MzA2Njg1MjMsCisweEUwMDA4RDA1LCAweEQ2NjNEMjYwLCAweEUwMDE4MTIyLCAweDAwMEIyNjAyLAorMHhEMjVDMDAwOSwgMHg2MDBEODUyMywgMHg4OTA1MjAwOCwgMHg4QjBBODgwMSwKKzB4NjA2MEQ2NUQsIDB4MjYwMENCMDEsIDB4RDQ1N0Q2NUEsIDB4RTAwMUUxMDEsCisweDAwMEIyNjEyLCAweDAwMEI4MTQyLCAweEQxNTJFMDAwLCAweDg1MTNFNTAxLAorMHg2NDBENDUxOCwgMHg2NjAzMzQ1MywgMHhFMDAwOEQwNSwgMHhENTUxRDI1MywKKzB4MjI2MEUwMDEsIDB4MDAwQjI1MDIsIDB4NEYyMjAwMDksIDB4ODUxM0QxNDksCisweDY0NTM2NTBELCAweDYyNDk0NDE5LCAweDIyN0Q2NzJFLCAweDg4MDE2MDJDLAorMHg4ODAyODkwOSwgMHg4ODAzODkxMCwgMHg4ODA2ODkxQSwgMHg4ODA3ODkzNSwKKzB4QTA0Qzg5M0IsIDB4RDU0NjAwMDksIDB4NjY1MkQ3NDYsIDB4Mjc2MkQ0NDYsCisweDYyMkM2MjYxLCAweDI0MjFBMDM4LCAweDIyMjg2MjVDLCAweEQ0NDM4QjNGLAorMHg2NjQyRDU0MCwgMHgyNTYyRDQ0MCwgMHgyNDAxODU2MSwgMHg2MjAzQTAyQywKKzB4MjAwODYwNUMsIDB4ODgxMDg5MDcsIDB4ODgyMDg5MDgsIDB4ODgzMDg5MDksCisweEEwMkM4OTBBLCAweEQyM0EwMDA5LCAweDYyMjJBMDA4LCAweEEwMDVEMjM5LAorMHhEMjM5NjIyMiwgMHg2MjIyQTAwMiwgMHg2MjYyRDYzOCwgMHhENDMyRDUzMSwKKzB4NjYyMTI1MjIsIDB4QTAwRjYyNkMsIDB4RDYzNTI0MjEsIDB4NjI2MUQ1MkQsCisweDYyMkNENDJELCAweEEwMDcyNTYyLCAweEQ2MzIyNDIxLCAweDg1NjFENTI5LAorMHgyNTYyRDQyOSwgMHg2MjAzMjQwMSwgMHg2NjJEODUxNSwgMHgzNjE3NjEwRCwKKzB4NjUwMzhGMDEsIDB4QjBDQjI0NTEsIDB4QTAwMTAwMDksIDB4RTAwMEUwMDEsCisweDAwMEI0RjI2LCAweEQ2MTkwMDA5LCAweEQ0MjdFMTAxLCAweDY1NDEyNjEwLAorMHhEMTE4RDcxNywgMHhFMjBGNjU1RCwgMHgyNzUyRTAwMSwgMHgwMDBCMjYyMCwKKzB4MkZFNjIxMDIsIDB4RDIwRjRGMjIsIDB4NjQwQzg1MjMsIDB4OEIwODI0NDgsCisweEQ1MTFENjFELCAweDI2MjFFMjAwLCAweDk0MEY4NDUxLCAweEEwNDgyMDQ5LAorMHhERTBEODA1MSwgMHhDODQwNjBFMCwgMHhFMjAxOEQzMiwgMHg4OTQ0MzQyNywKKzB4RDIxNkQ2MTUsIDB4MjY0MTQyMEIsIDB4MDAwOUEwMzAsIDB4MDAwMEZGN0YsCisweDAwMjAzQTZELCAweDAwMjAzQTI0LCAweDAwMjAzQTMwLCAweDAwMUUxMTAwLAorMHgwMDFFMTAwQywgMHgwMDIwM0E1MCwgMHgwMDFFMTAwMCwgMHgwMDFFMTAwMSwKKzB4MDAyMDNBNTgsIDB4MDAyMDNBMzgsIDB4MDAyMDNBM0MsIDB4MDAyMDNBNDAsCisweDAwMjAzQTVDLCAweDAwMjAzQTYwLCAweDAwMjAzQTY0LCAweDAwMjAzQTY4LAorMHgwMDIwM0UyMCwgMHgwMDIwM0UyQSwgMHgwMDIwM0E0QSwgMHgwMDIwMjdGMiwKKzB4ODkxMjM0MjcsIDB4RDI5NEQ2OTMsIDB4MjY0MTQyMEIsIDB4Q0I4MDg0RTEsCisweDgwRTFCMEY1LCAweEQ2OTE2MEUwLCAweDJFMDBDQjA0LCAweEM5M0Y2MDYwLAorMHhENjhGMjYwMCwgMHhBMDAxRTAwMSwgMHhFMDAwMjYwMiwgMHgwMDBCNEYyNiwKKzB4RDY4QzZFRjYsIDB4Qzg4MDYwNjAsIDB4RDI4Njg5MTksIDB4ODgwMTYwMjEsCisweEQyODk4QjE1LCAweDg1MjRFNTAxLCAweDg5MTAzMDU2LCAweEUyMDNEMTg3LAorMHgyMTIwRDQ4NywgMHhFMDBCNjU0MSwgMHgwNjU2NjU1RCwgMHhFNDBGRDU4NSwKKzB4MjE0MEU3MDIsIDB4RDc3RTI1NzEsIDB4MDAwQkUwMDEsIDB4MDAwQjI3MDIsCisweDJGRTZFMDAwLCAweERFODA0RjIyLCAweEM4ODA4NEUxLCAweEQ1N0E4OTJDLAorMHgyMDA4ODU1NCwgMHg2MTAzOEYyOCwgMHg4NTUzRDc3QywgMHg2NDAzNjY3MiwKKzB4ODU2NjY1MEMsIDB4MzUyMDYyMEMsIDB4RDY3OThCMUUsIDB4NjUxQ0Q3NzQsCisweDI2NTE2NDRDLCAweDYwRTAyNzQxLCAweDg5MDRDODQwLCAweDQyMEJEMjc1LAorMHhBMDAzMDAwOSwgMHhEMjY4MDAwOSwgMHgwMDA5NDIwQiwgMHgwMDA5QjA5RiwKKzB4RTIwMUQxNjcsIDB4NjBFMDIxMjIsIDB4Q0IwNEQ0NjQsIDB4NjA0MDJFMDAsCisweDI0MDBDOTNGLCAweDYwMjNBMDAxLCAweDRGMjZFMDAwLCAweDZFRjYwMDBCLAorMHgyRkI2MkZBNiwgMHgyRkQ2MkZDNiwgMHhEQTYyMkZFNiwgMHg2NkExRTI0MCwKKzB4MzYyMkRDNUUsIDB4NjI2Mzg5MDAsIDB4NkVEMzZEMkMsIDB4NEUyMTM2RDgsCisweDRFMjEyQTYxLCAweERCNjFENDYwLCAweEU3MDBBMDBGLCAweDc3MDE2MkIyLAorMHg3MTAyNjEyMywgMHg2NjIxMkIxMiwgMHg3MTAyNjIxMywgMHg2MTIxMkIxMiwKKzB4NjUxRDY2NkQsIDB4MzU2QzQ1MjgsIDB4NjI3QzI0NTIsIDB4OEJFRDMyRTMsCisweEM5MDM2MEQzLCAweDhCMTA4ODAzLCAweDYxNzM2N0IyLCAweDJCMTI3MTAyLAorMHg3MTAyNkUxMywgMHgyQjEyNjU3MSwgMHg2NTVENkRFMSwgMHg0MjI4NjJERCwKKzB4MzI1Q0UxMDcsIDB4QTAwQzJDMTAsIDB4ODgwMjI0MjIsIDB4QTAwMzhCMDEsCisweDg4MDFFMjAzLCAweEUyMDE4QjA1LCAweDY2QjIyQzIwLCAweDY1NUQ2NTYxLAorMHhFNjBGMjQ1MiwgMHg2N0ExMkM2MCwgMHg4QjA1Mjc3OCwgMHhERDM4REM0NCwKKzB4RUIwMUVBMDAsIDB4MkRCMjJDQTIsIDB4NkRGNjZFRjYsIDB4NkJGNjZDRjYsCisweDZBRjYwMDBCLCAweDJGRTYyRkQ2LCAweEUyNDBERDM2LCAweDM2MjI2NkQxLAorMHg2MjYzODkwMCwgMHgzNjc4NjcyQywgMHg3NzAzREUzOCwgMHg0NzIxMkQ2MSwKKzB4NjRFMkQ2MzUsIDB4QTAwRTQ3MjEsIDB4NjU2MkUxMDAsIDB4NjI1MzcxMDEsCisweDc0MDEyNDUwLCAweDI0MjA0MjE5LCAweDQ1Mjk3NDAxLCAweDc0MDEyNDUwLAorMHgyNDUwNDUxOSwgMHg2MjFDNzQwMSwgMHg4QkVFMzI3MywgMHg2NkUyNDIwMCwKKzB4NDIwMDYxRDEsIDB4MjExODM2MkMsIDB4MkU2MjhGMDYsIDB4REQxQ0Q3MjgsCisweEU1MDFFNDAwLCAweDJENTIyNzQyLCAweDAwMEI2RUY2LCAweDJGRDY2REY2LAorMHg0RjIyMkZFNiwgMHhFRDBBRUUwMSwgMHg2NEUzQkM4NiwgMHhCQzhCNjRFMywKKzB4NjJFQzdFMDEsIDB4OEJGNzMyRDcsIDB4QkM4RUVFMDEsIDB4NjRFMzY0RTMsCisweDdFMDFCQzkzLCAweDMyRDc2MkVDLCAweDRGMjY4QkY3LCAweDAwMEI2RUY2LAorMHhEMTE4NkRGNiwgMHhENDE4OTIwRCwgMHg3MjEyMjEyMiwgMHgyNDIyRDYxNywKKzB4RDcxNzcyMDQsIDB4NzIyMDI2MjIsIDB4MjcyMkQxMTYsIDB4MDAwQjcyMzAsCisweDEzN0EyMTIyLCAweDAwMjAzQTRBLCAweDAwMjAyOEZFLCAweDAwMUUxMDE1LAorMHgwMDIwM0E1MCwgMHgwMDFFMTAwMSwgMHgwMDIwM0EyNCwgMHgwMDFFMTEwMCwKKzB4MDAyMDNBNEUsIDB4MDAyMDNBM0MsIDB4MDAxRTEwMDAsIDB4MDAyMDNBNDAsCisweDAwMjAzQTRDLCAweDAwMjAyN0YyLCAweDAwMUUxMDBDLCAweDAwMjAzQTM4LAorMHgwMDIwM0E1NCwgMHgwMDIwM0E1OCwgMHgwMDIwM0E1QywgMHgwMDIwM0E2MCwKKzB4MDAyMDNBNjQsIDB4MDAyMDNBNjgsIDB4NEYyMjJGRTYsIDB4RDY3MDdGRkMsCisweDg4MDE2MDYwLCAweEUyMDE4OTUxLCAweDI2MjBCRkJCLCAweEQ1NkVEMTZELAorMHhERTZFNjAxMCwgMHg2NEUzNjU1MiwgMHg3NDAyQzg0MCwgMHg4RDIyRDE2QywKKzB4RDI2Qzc1MDIsIDB4RTYwMUQ3NkMsIDB4RTcwNDI3MjIsIDB4NzYwMTYyNTUsCisweDYyNkMyNDIxLCAweDhGRjkzMjczLCAweEQ0NjM3NDAyLCAweDYyNDJFNjAxLAorMHg2NDBEODUyOCwgMHg2NzQ5NDQxOSwgMHgyNzVENjU3RSwgMHg4MUU0NjA3QywKKzB4RTQxN0Q1NjIsIDB4Njc1NTc2MDEsIDB4MzI0MzYyNkMsIDB4OEZGOTIxNzEsCisweEEwMjA3MTAyLCAweEQyNUUwMDA5LCAweEU2MDFENzVCLCAweEU3MDQyNzIyLAorMHg3NjAxNjI1NSwgMHg2MjZDMjQyMSwgMHg4RkY5MzI3MywgMHhENDUyNzQwMiwKKzB4NjI0MkU2MDEsIDB4NjQwRDg1MjgsIDB4Njc0OTQ0MTksIDB4Mjc1RDY1N0UsCisweDgxRTQ2MDdDLCAweEU0MTdENTUzLCAweDY3NTU3NjAxLCAweDMyNDM2MjZDLAorMHg4RkY5MjE3MSwgMHg5Mjg5NzEwMiwgMHhEMjQ2MkUyMSwgMHg1RTIzRDc0RSwKKzB4NjRGMjJGRTIsIDB4NjA0MzY1RjIsIDB4MjcwMEM5ODAsIDB4Qzk2MDYwNDMsCisweDgwNzE2MTAzLCAweEM5MDM2MDQzLCAweDgwNzI0NTE5LCAweDY1RjI2MDVDLAorMHg4MTcyNjZGMiwgMHg0NjE5NDYyOSwgMHg2MDZDNDUyOSwgMHg0MDE4NjQ1QywKKzB4ODE3MzMwNEMsIDB4MjExODVFMjMsIDB4NjRGMjJGRTIsIDB4NkU0QzYyRjIsCisweDYwMkM0MjE5LCAweDY2RjI2MkYyLCAweDQ2Mjk0MDE4LCAweDQ2MTkzMEVDLAorMHg0MjI5ODE3NCwgMHg2NTJDNjA2QywgMHgzMDVDNDAxOCwgMHg4MTc1OEYwNywKKzB4MDAwOUJDOTcsIDB4MjIyODYyMEMsIDB4QTAwQTg5MDgsIDB4NjAxMzAwMDksCisweDhCMDM4ODQwLCAweDAwMDlCMDA5LCAweDAwMDlBMDAzLCAweEUyMDJENjJGLAorMHg3RjA0MjYyMiwgMHgwMDBCNEYyNiwgMHg0RjIyNkVGNiwgMHg4NTUyRDUyQSwKKzB4ODgzMDYwMEQsIDB4ODgzMTg5MDMsIDB4QTAzNDg5MjMsIDB4ODU1NTAwMDksCisweEQ0MjhENzI3LCAweDg1NTMyNzAxLCAweDYxMERENjI3LCAweDI0MTI0MTE4LAorMHg0NjBCRDQyNiwgMHhENzIzMDAwOSwgMHhEMjI2RDQyNSwgMHg2NTcyNDIwQiwKKzB4RTIzMEQxMjAsIDB4NDIyODY3MTIsIDB4MjcyOUU2MjAsIDB4Mzc2MDQ2MjgsCisweEQ2MjE4QjAzLCAweEEwMTZFMjAwLCAweEQ2MUYyNjIyLCAweEEwMTJFMjAyLAorMHhEMTE4MjYyMiwgMHg2MjEyRTUzMCwgMHhFNjIwNDUyOCwgMHg0NjI4MjI1OSwKKzB4ODkwODMyNjAsIDB4RDQxQUQxMTksIDB4RTYwMUQ1MTMsIDB4MjE2MDQ1MEIsCisweDQ3MkJENzE4LCAweDRGMjY0RjI2LCAweDAwMDkwMDBCLCAweDAwMDAwNjBBLAorMHgwMDIwM0E2QywgMHgwMDFFMTAwMCwgMHgwMDIwM0E1OCwgMHgwMDIwM0UyMCwKKzB4MDAyMDNFMkMsIDB4MDAyMDNEQzQsIDB4MDAyMDNBNDAsIDB4MDAyMDNERjQsCisweDAwMjAzREYyLCAweDAwMjAzREM2LCAweDAwMjAzQTI0LCAweDAwMjAzQTUwLAorMHgwMDIwM0EzQywgMHgwMDIwM0EzOCwgMHgwMDIwMThDMCwgMHgwMDIwM0I0OCwKKzB4MDAyMDNCNEMsIDB4MDAyMDE4RDAsIDB4MDAyMDNBNTQsIDB4MDAxRTEwMEIsCisweDAwMjAzQjYwLCAweDAwMTE0MDA0LCAweDRGMjIyRkU2LCAweDg0RTlERTg2LAorMHgyNDQ4NjQwQywgMHhCMTdCODkwMSwgMHhEMjg0MDAwOSwgMHgyNjY4NjYyMCwKKzB4NjBFMDg5MDIsIDB4MkUwMEM5QkYsIDB4MDAwQjRGMjYsIDB4MDAwQjZFRjYsCisweDJGRTYwMDA5LCAweERFN0U0RjIyLCAweDYwRTBENjdFLCAweENCQzBENDdFLAorMHg2MjYwMkUwMCwgMHhDODAzNjAyQywgMHg0MDIxODkwNCwgMHg3MDAxNDAyMSwKKzB4NjYwM0EwMDIsIDB4NjYwMzQwMDksIDB4RDY3ODYxNkQsIDB4RTUwMEEwMDQsCisweDc1MDE2MjYyLCAweDc0MDQyNDIyLCAweDMyMTM2MjVELCAweEQyNzQ4QkY4LAorMHgwMDA5NDIwQiwgMHhDOUJGODRFMiwgMHg0RjI2ODBFMiwgMHg2RUY2MDAwQiwKKzB4MkZFNjJGRDYsIDB4N0ZGQzRGMjIsIDB4NjI2MEQ2NkUsIDB4ODk0MDIyMjgsCisweEQ1NjVFMTAwLCAweDYwNTAyNjEwLCAweENCNDBENDZCLCAweDI1MDA0NDBCLAorMHg4RDA1MjAwOCwgMHg2MkUwNkUwMywgMHg3MTA0NjEyQywgMHgyRjExQTAwNiwKKzB4RDQ2NkQ2NUUsIDB4REQ2NjY3NjAsIDB4NjU3QzREMEIsIDB4RTIzQzZEMUQsCisweDhCMDMzRDI3LCAweEQyNjRENDYzLCAweDAwMDk0MjBCLCAweDREMjE0RDIxLAorMHhBMDA1RDc2MiwgMHg2NkU2RTQwMCwgMHgzNTdDNDUwOCwgMHg3NDAxMjU2MiwKKzB4MzVEMzY1NEQsIDB4RDc1RThCRjcsIDB4NkU3MkUwMDMsIDB4ODFFMTQwMTgsCisweDZFNzI2MEYxLCAweDgxRTI3MDBDLCAweEQ0NUE2MTcyLCAweERENUE4MTEzLAorMHg2NTcyNEQwQiwgMHhENjRBRDI1OSwgMHgyMjEyRTEwMSwgMHhDOTNGNjA2MCwKKzB4N0YwNDI2MDAsIDB4NkVGNjRGMjYsIDB4NkRGNjAwMEIsIDB4MkZDNjJGQjYsCisweDJGRTYyRkQ2LCAweEQyNTI0RjIyLCAweDZCNDM2RTczLCAweDQyMEI2QzUzLAorMHgyMDA4NkQ2MywgMHg2NDAzOEQxQywgMHhFNTBFRDEzQywgMHgzMjUyNjIxMCwKKzB4NjBDMzg5MTYsIDB4ODA0MTI0QjAsIDB4ODE0MTYwRDMsIDB4QTAwN0U1MDAsCisweDY1NUQ2MUJDLCAweDAwRUM2MDUzLCAweDM2NEM2NjUzLCAweDgwNjQ3NTAxLAorMHgzMjEzNjI1RCwgMHhENjMwOEJGNSwgMHhDOUJGNjA2MCwgMHgyNjAwQTAwOCwKKzB4RDIzOUQ0NDAsIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkJGNjQyMkIsCisweDZFRjY0RjI2LCAweDZDRjY2REY2LCAweDZCRjYwMDBCLCAweDJGOTYyRjg2LAorMHgyRkI2MkZBNiwgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwgMHhFMTAwN0ZDNCwKKzB4NjUxM0VDRkYsIDB4NkIxMzZDQ0QsIDB4REUzNEQ3MzMsIDB4RURGRjY0RjMsCisweEQ4MzNFQTA0LCAweDYwNTM2NTVDLCAweDAyN0Q0MDAwLCAweDMyQzA2MjJELAorMHg2NjAzOEQwRCwgMHgwOUVENjA2MywgMHgyNDkxMDI3RCwgMHgyNDIxNzQwMiwKKzB4Njk4MjAyRUQsIDB4MzkyODYyMkQsIDB4NzQwMjI4OTIsIDB4NzUwMTcxMDQsCisweDYwNjM2MjVDLCAweDA3RDUzMkEyLCAweDBFQjU4RkU0LCAweDI0NDg2NDFDLAorMHhFNjgwODkwNSwgMHg2N0YzRTVDNSwgMHhCRjhGNjY2QywgMHg3RjNDNjU1QywKKzB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkFGNjZCRjYsIDB4MDAwQjY5RjYsCisweEQxMUM2OEY2LCAweDYwMTJEMjFDLCAweENCMjBFNDA1LCAweDIxMDJFNTAwLAorMHgwMDBCMjI0MiwgMHgwMDAwMjI1MiwgMHgwMDFFMTAxNywgMHgwMDIwMzk5NiwKKzB4MDAxRTEwMTUsIDB4MDAxRTEwQkYsIDB4MDAxMTc4MDAsIDB4MDAxRTEwRkMsCisweDAwMjAwNjQ0LCAweDAwMjAzOTlDLCAweDAwMjAyQTU2LCAweDAwMjAzQjY0LAorMHgwMDIwMThEMCwgMHgwMDIwM0I4MCwgMHgwMDIwMThDMCwgMHgwMDExNzg4QywKKzB4MDAyMDM5OTgsIDB4MDAyMDM1N0MsIDB4MDAyMDE1MzQsIDB4MDAxRTIxMzAsCisweDAwMjAyQTE4LCAweDAwMjAzQjg4LCAweDAwMjAzOUZDLCAweDAwMjAzQTA0LAorMHgwMDIwM0RDMCwgMHgwMDFDMzUwMCwgMHgwMDFENDAwNCwgMHhENTY0RDE2MywKKzB4RTQwMEQ3NjQsIDB4MjE0MkUyMEYsIDB4MTc0MTExNTQsIDB4RDU2MjI3MjIsCisweDk2NjlENzYyLCAweDE1NDEyNTcyLCAweDk2NjYxNTYyLCAweEU2MDExNTY1LAorMHhENTVGMTE2NSwgMHg2NjZDRTZGOCwgMHgyNTQyMjU0MiwgMHgyNTQyMjU0MiwKKzB4MjU0MjI1NDIsIDB4MjU2MjI1NDIsIDB4NzYwMUU3MjcsIDB4Njc2MzI1NzIsCisweDI1NjI3Nzk3LCAweEU3MDQyNTcyLCAweDI1NzJFMjQ4LCAweEUyMTkyNTIyLAorMHhFMjcwMjUyMiwgMHgyNTQyMjU0MiwgMHgyNTQyMjU0MiwgMHgyNTIyMjU0MiwKKzB4MjUyMkUyMEMsIDB4MjU0MjI1NDIsIDB4MjU0MjI1NDIsIDB4MjU0MjI1NDIsCisweDI1NDIyNTQyLCAweDAwMEIxNTRBLCAweEUyMDgxMTQ1LCAweDAwMDk0MjJCLAorMHgyRkU2MkZENiwgMHg3RkZDNEYyMiwgMHhDODIwNjA0MywgMHg2RTQzOEQwMiwKKzB4MDAwOUJFODUsIDB4QzgxMDYwRTMsIDB4QkU4Mjg5MDEsIDB4NjBFMzAwMDksCisweDg5MDFDODQwLCAweDAwMDlCRUE0LCAweEM4MDE2MEUzLCAweEREM0Q4OTM4LAorMHhDODAyNjBEMCwgMHgyRjAwOEQwMywgMHg0NjBCRDYzQiwgMHg2MEYwMDAwOSwKKzB4ODkwMkM4MDQsIDB4NDYwQkQ2MzksIDB4NjJGMDAwMDksIDB4Qzg4MDYwMjMsCisweDYwRDA4OTAyLCAweDJEMDBDOTdGLCAweEM4MDE2MDIzLCAweEQ2MzQ4OTA2LAorMHgwMDA5NDYwQiwgMHgwMDA5QTAwNywgMHg1MTYzMDYwMSwgMHg4OTAyQzgwOCwKKzB4NDYwQkQ2MzAsIDB4NjBGMDAwMDksIDB4ODkwMkM4MTAsIDB4NDIwQkQyMkUsCisweEQ1MkUwMDA5LCAweDg4MDI2MDUyLCAweEQyMkQ4QjAzLCAweEEwMDVFNjA0LAorMHg4ODAxMjI2MCwgMHhEMjJBOEIwMiwgMHgyMjYwRTYwMSwgMHgyNTIyRTIwMCwKKzB4Qzg4MDYwRTMsIDB4RDIyNzg5MkQsIDB4NjBFMzZFMjAsIDB4ODkwMkM4ODAsCisweDQyMEJEMjI1LCAweDYwRTMwMDA5LCAweDg5MDJDODQwLCAweDQyMEJEMjIzLAorMHg2MEUzMDAwOSwgMHg4OTAyQzgwMiwgMHg0MjBCRDIyMSwgMHg2MEUzMDAwOSwKKzB4ODkwREM4MDQsIDB4REQyMEQxMUYsIDB4MDAwOTQxMEIsIDB4MDAwOUJGMTEsCisweDAwMDlCRjRDLCAweEQ1MUVENDFELCAweDI0NzBFNzA4LCAweDI1RDJCRjg1LAorMHhDODA4NjBFMywgMHhEMjFCODkwNSwgMHg0RjI2N0YwNCwgMHg0MjJCNkVGNiwKKzB4N0YwNDZERjYsIDB4NkVGNjRGMjYsIDB4NkRGNjAwMEIsIDB4MDAxQzU4MUMsCisweEEwMDBBMDAwLCAweDAwMUQwMTAwLCAweDAwMUQ0MDAwLCAweDAwMDQwMDIxLAorMHgwMDFDNTg5QywgMHgwMDFFMTAyMSwgMHgwMDIwMUE0NiwgMHgwMDIwMUE2OCwKKzB4MDAyMDIwQzgsIDB4MDAyMDFBODAsIDB4MDAyMDFBOEUsIDB4MDAyMDNBNTAsCisweDAwMUUxMDBCLCAweDAwMUUxMDI4LCAweDAwMjAxQUZBLCAweDAwMjAxQjA2LAorMHgwMDIwMUE5NiwgMHgwMDIwMUFCNCwgMHgxMjM0NTY3OCwgMHgwMDFFMTAwMCwKKzB4MDAxMEYxMDAsIDB4MDAyMDFBRTIsIDB4NjQ0Q0Q2QTcsIDB4MDAwQjM0NkMsCisweEQ2QTYyNDUwLCAweDM0NkM2NDRDLCAweDI0NTAwMDBCLCAweDY0NENENkE0LAorMHgwMDBCMzQ2QywgMHg2MjVDMjQ1MCwgMHg0MjA4NjE2RCwgMHg0MjA4NDExOSwKKzB4NDIwMDYwMTksIDB4NjcwRTYxNEMsIDB4RDQ5RTMyMUMsIDB4NDIwMDIwN0QsCisweDMyNENDOTBGLCAweDIyMDAwMDBCLCAweDQyMDg2MjVDLCAweDQyMDA0MjA4LAorMHgzMjRDNjQ0QywgMHg0MjAwRDQ5OCwgMHgwMDBCMzI0QywgMHgyRkU2MjI2MCwKKzB4NjE0QzRGMTIsIDB4NDEwMEQ0OTMsIDB4NjcxMDMxNEMsIDB4RTI5RjY2NkQsCisweDI3Mjk0NjE5LCAweDZFNTM2MjY5LCAweDY3MkU2NTczLCAweDQyMjEyMjdELAorMHg0MjIxNDIyMSwgMHg3NjAxNjYyQywgMHhFNDAxNDYwOCwgMHgzNEU4NDYwOCwKKzB4NjQ0QzQ2MDAsIDB4MDcxQTA0NjcsIDB4MjE1MDI1N0IsIDB4MDAwQjRGMTYsCisweDRGMjI2RUY2LCAweEQyODU3RkU4LCAweDg4MDE2MDIxLCAweEQyODQ4QjdCLAorMHgyNjY4NjYyMSwgMHhEMjgzOEI3NywgMHgyNjY4NjYyMSwgMHhFNTBGOEI3MywKKzB4RTQwMUJGQTIsIDB4QkZBNEU1MDEsIDB4RTU4NkU0MDAsIDB4RTQwMDY1NUMsCisweDJGNTBCRkE0LCAweEJGQTFFNDAxLCAweEU2MDJFNTA2LCAweDYwNjM0NjE4LAorMHg4MUYyRTQwMSwgMHg2NTQzQkY5RiwgMHhFNDAxODVGMiwgMHhCRkFCNjU0MywKKzB4ODVGMjY2MDMsIDB4NjU0M0U0MDEsIDB4NjYwM0JGQjEsIDB4RTQwMjY1RjAsCisweDYwNTM3NTZDLCAweDgwRjhCRjgwLCAweEJGODJFNDAyLCAweDg0RjhFNTEyLAorMHg3MDkwRTQwMiwgMHg2NTAzQkY4MiwgMHg0NjE4RTYwMiwgMHg4MUY2NjA2MywKKzB4QkY4MEU0MDIsIDB4ODVGNkU1MDAsIDB4NjYwM0U0MDIsIDB4RTUwMEJGOEMsCisweEU0MDI4NUY2LCAweEJGOTI2NjAzLCAweEU1RkVFNTAwLCAweEUwMTA2NTVDLAorMHhCRjYxRTQwMywgMHhFNTEzMEY1NCwgMHhFNDBFQkY2MywgMHgwNUZDRTAxMCwKKzB4QkY2M0U0MEUsIDB4RTUwMDc1ODUsIDB4QkY2NEU0MDMsIDB4RTUwMEU2NDAsCisweEJGNzFFNDAzLCAweEU1MDBFNjQwLCAweEJGNzhFNDAzLCAweEU1RkZFNjQwLAorMHhFMDE0NjU1QywgMHhCRjQ3RTQwNCwgMHhFNDBGMEY1NCwgMHhFNTA0QkY0OSwKKzB4MDVGQ0UwMTQsIDB4QkY0OUU0MEYsIDB4RTUwMTc1ODQsIDB4QkY0QUU2NDAsCisweEU1MDFFNDA0LCAweEJGNTdFNjQwLCAweEU1MDFFNDA0LCAweEU0MDRFNjQwLAorMHhBRjVDN0YxOCwgMHg3RjE4NEYyNiwgMHgwMDBCNEYyNiwgMHg0RjIyMDAwOSwKKzB4RDI0MjdGRjAsIDB4ODgwMTYwMjEsIDB4RDI0MThCNzEsIDB4MjY2ODY2MjEsCisweEQyNDA4QjZELCAweDI2Njg2NjIxLCAweEU1MEY4QjY5LCAweEU0MDFCRjFDLAorMHhCRjFFRTUwMSwgMHhFNTg2RTQwMCwgMHhFNDAwNjU1QywgMHgyRjUwQkYxRSwKKzB4QkYxQkU0MDEsIDB4RTQwMUU1MDYsIDB4QkYxQzY1NDMsIDB4RTQwMUU2NDAsCisweEJGMjk2NTQzLCAweEU0MDFFNjQwLCAweEJGMzA2NTQzLCAweDY1RjBFNjQwLAorMHg3NTZDRTQwMiwgMHhCRUZGNjA1MywgMHhFNDAyODBGNCwgMHhFNTEyQkYwMSwKKzB4RTQwMjg0RjQsIDB4QkYwMTcwOTAsIDB4RTY0MDY1MDMsIDB4QkYwMkU0MDIsCisweEU2NDBFNTAwLCAweEJGMEZFNDAyLCAweEU2NDBFNTAwLCAweEJGMTZFNDAyLAorMHhFNUZFRTUwMCwgMHg2MDUzNjU1QywgMHhCRUU1RTQwMywgMHhFNTEzODBGOCwKKzB4RTQwRUJFRTcsIDB4RTQwRTg0RjgsIDB4QkVFNzcwODUsIDB4RTUwMDY1MDMsCisweEJFRThFNjQwLCAweEU1MDBFNDAzLCAweEJFRjVFNjQwLCAweEU1MDBFNDAzLAorMHhCRUZDRTY0MCwgMHhFNUZGRTQwMywgMHg2MDUzNjU1QywgMHhCRUNCRTQwNCwKKzB4RTQwRjgwRkMsIDB4RTUwNEJFQ0QsIDB4RTQwRjg0RkMsIDB4QkVDRDcwODMsCisweEU1MDE2NTAzLCAweEJFQ0VFNjQwLCAweEU1MDFFNDA0LCAweEJFREJFNjQwLAorMHhFNTAxRTQwNCwgMHhFNDA0RTY0MCwgMHhBRUUwN0YxMCwgMHg3RjEwNEYyNiwKKzB4MDAwQjRGMjYsIDB4MDAwMDAwMDksIDB4MDAxRTEwMkYsIDB4MDAxRTEwODAsCisweDAwMUUxMDkwLCAweDAwMUUxMDNGLCAweDAwMUUxMDNFLCAweDAwMjAzQTRBLAorMHgwMDIwM0E0QywgMHgwMDIwM0E0RSwgMHhEMjFERDExQywgMHg2NjIwNjAxMCwKKzB4Njc2QzcwMDEsIDB4MzcwMEM5MEYsIDB4RTUwMDhEMTMsIDB4NjcxMDYyMTAsCisweDc3MDE2MjJDLCAweDY0MjMyMTcwLCAweEQ2MTY2MDEwLCAweDQ0MDg0NDA4LAorMHgzNDI4QzkwRiwgMHg2MjYwMjEwMCwgMHg3MjAxRDUxMywgMHg0NDA4MjYyMCwKKzB4MDAwQjM1NEMsIDB4RDEwRjYwNTMsIDB4MjU1ODY1MTAsIDB4RTYwMDhEMTMsCisweEQ2MERENDBCLCAweDY1NUM2NTQwLCAweDQ3MDg2NzUzLCAweDM3NTg0NzA4LAorMHg0NzA4NjU0MCwgMHgyNDUwNzUwMSwgMHgzNjdDNjA0MCwgMHgyNDAwQzkwRiwKKzB4NzJGRjYyMTAsIDB4MDAwQjIxMjAsIDB4MDAwMDYwNjMsIDB4MDAyMDM5OTUsCisweDAwMjAzOTk0LCAweDAwMjAzOTk2LCAweDAwMjAzNUJDLCAweDdGRkM0RjIyLAorMHhFNjgwRDFBOCwgMHg2NjZDNjIxMiwgMHhEMkE3MkYyMiwgMHg2N0YzNjU2MywKKzB4NDIwQjc1NDIsIDB4N0YwNEU0MDQsIDB4MDAwQjRGMjYsIDB4RTY4MDAwMDksCisweEQyQTE2NjZDLCAweEU3MDA2NTYzLCAweDQyMkI3NTQwLCAweEU2ODA2NDczLAorMHhEMjlENjY2QywgMHhFNzAwNjU2MywgMHg0MjJCNzU0MywgMHgyRjg2NjQ3MywKKzB4MkZBNjJGOTYsIDB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsIDB4N0ZDMDRGMjIsCisweERCOTdEMjk2LCAweDcyMDEyRjIyLCAweEQxOTYxRjIxLCAweDY2MTI1MjExLAorMHg4QjAxMzYyMCwgMHgwMDA5QTBGOSwgMHhDOTAzNjA2MSwgMHg4QjAxODgwMSwKKzB4MDAwOUEwRjMsIDB4RDI5MERDOEYsIDB4NjRDMzQyMEIsIDB4NjUwM0QxOEYsCisweDYwMTExRjAyLCAweDhCMDQ4ODAxLCAweDQyMEJEMjhELCAweEFGRTQ2NEMzLAorMHg1NDUzMDAwOSwgMHg4NDRDRUU4NCwgMHg4OTAxMzBFMCwgMHgwMDA5QTBDMywKKzB4NjYxMEQxODgsIDB4NjAyMzYyNkMsIDB4OEI3MTg4MDEsIDB4NjIxMEQxODYsCisweDg5NjYyMjI4LCAweERBODZEMjg1LCAweEUwMDM2MTIyLCAweDY0MjIxMTEyLAorMHg0MDE4RDg4MSwgMHhERDgzRTUwMCwgMHg4MTQxNjdBMywgMHg3NzA0Mjg1MCwKKzB4NjQ3MjY2QTIsIDB4NkVEM0Q1ODAsIDB4MUY0NTdFMDQsIDB4NjU1MjFGNTYsCisweDY0RTM2OEQyLCAweDFGODg3NEY4LCAweDY4NDM2OUUyLCAweDFGNjM3ODk0LAorMHgxRjk5MUY3NCwgMHg2MjgyNjE0MiwgMHhENzc5RDk3OCwgMHgxRjJCRDY3OSwKKzB4Njc3MjYyOTIsIDB4MUYxQTYwNjIsIDB4MjYwMkNCMjAsIDB4RDE3NkU2MDAsCisweEU1NDAxRjU3LCAweDFGN0QxRjJDLCAweDc2MDExRjFFLCAweDMyNTM2MjZELAorMHg1MUYzOEJGQiwgMHg1MkY1NTVGNCwgMHgyNTIyMkExMiwgMHg1NUY3NTdGNiwKKzB4Mjc1MjVBRjgsIDB4NURGOTJEQTIsIDB4MkVEMjUxRkIsIDB4RDU2QjVFRkEsCisweDU0RkMyNEUyLCAweDI4MTI1N0ZELCAweEQxNjBEODY5LCAweDI1NzIyOTQyLAorMHg2OTEyNjc4MiwgMHgxOTc0RDg2NiwgMHhERDY2NkExMiwgMHg1NkZFNjBBMSwKKzB4MkEwMUNCMDEsIDB4REE2NDY0MTIsIDB4RTkwMTI4NDIsIDB4NEEwQjJENDIsCisweDUyRkUyNjkyLCAweEQ2NjFFRTAxLCAweDIyRTI0RTE4LCAweDcyMDE2MjYyLAorMHg2MEIyMjYyMiwgMHhDQjAxRDE0RiwgMHgyQjAyRTIwMiwgMHgyMTIwQTAzRiwKKzB4OEIzQzIyMjgsIDB4RTYwMUQ1NUEsIDB4MjE2MEU3MDAsIDB4RTAxQzI1NzIsCisweEM4MDEwMDRDLCAweEQ4NTc4QjBDLCAweDFGOEZEMjU3LCAweEU2MDAyODIyLAorMHg3NjAxRTU3RCwgMHgzMjUzNjI2QywgMHg1NkZGOEJGQiwgMHgyNjIyRDI1MywKKzB4RTJGRTY5QjIsIDB4MkI5MjI5MjksIDB4MEE0Q0UwMUUsIDB4RTAxRjY1RjIsCisweDAxNEMyNUEwLCAweDc0MTA1N0YxLCAweEVBMDYyNzEwLCAweERENENFNjAwLAorMHg4NDQ2REU0QywgMHgyRDAwNzYwMSwgMHg2OTZDNjg0NCwgMHgyRTgwMzlBMywKKzB4OEZGNjdFMDEsIDB4REU0ODdEMDEsIDB4MkVBMEVBOTQsIDB4RTEwMDdFMDEsCisweDdFMEYyRTEwLCAweEQxMkZFMjA1LCAweDY0MTAyRTIwLCAweDYwMjM2MjRDLAorMHg4OTA4ODgwMSwgMHg1NUYyRDIyQSwgMHg2NEMzNDIwQiwgMHhFRTAxRDEzMiwKKzB4QUYxQTRFMTgsIDB4NTVGMjIxRTIsIDB4ODU1M0QxM0MsIDB4NjIwRDY2MTIsCisweDg5MDYzMjYyLCAweEQ2M0JENDNBLCAweEU4MDE0NjBCLCAweEFGMENENzNBLAorMHhEOTFGMjc4MiwgMHg2NEMzNDkwQiwgMHhFRTAxRDEyNywgMHhEQTM4RDQzNywKKzB4NEEwQjRFMTgsIDB4QUYwMDIxRTIsIDB4N0Y0MDAwMDksIDB4NkVGNjRGMjYsCisweDZDRjY2REY2LCAweDZBRjY2QkY2LCAweDAwMEI2OUY2LCAweDRGMjI2OEY2LAorMHg4NTQ2N0ZGNCwgMHgyRjAxRTY4MSwgMHg2NjZDODU0NywgMHg4NTQ4ODFGMSwKKzB4ODFGMkQyMDksIDB4NjdGMzg1NDIsIDB4ODU0MzgxRjMsIDB4ODFGNEU0MEMsCisweDY1NjM2MDUzLCAweDQyMEI4MUY1LCAweDdGMEM3NTQwLCAweDAwMEI0RjI2LAorMHgwMDAwMDAwOSwgMHgwMDFDM0Q5QywgMHgwMDIwMjNGQywgMHgwMDExNzc5QSwKKzB4MDAxQzM2RjgsIDB4MDAyMDM1QjQsIDB4MDAyMDE0QTYsIDB4MDAyMDNBMTYsCisweDAwMjAxNEQwLCAweDAwMjAzOUE1LCAweDAwMjAzOUE0LCAweDAwMjAzOUEwLAorMHgwMDFDM0I5QywgMHgwMDFDMzcwNCwgMHgwMDFDM0Q5OCwgMHgwMDFDM0JCNCwKKzB4MDAxQzU5NjAsIDB4MDAxQzM1MDAsIDB4MDAxQzNEMzAsIDB4MDAxQzg5NjAsCisweDAwMjAzNThDLCAweDAwMUMzRDAwLCAweDAwMjAxNjEwLCAweDAwMTE3NzMwLAorMHgwMDIwMzlBOCwgMHgwMDFDNTgyQywgMHgyMDAwQTAwMCwgMHgwMDAwQTAwMCwKKzB4MDAxMTc3OEMsIDB4MDAxMTc3OTIsIDB4MDAxMTc3ODgsIDB4MDAyMDM5N0MsCisweDAwMjAzNTdDLCAweDAwMjAxNTM0LCAweDAwMUUyMTMwLCAweDAwMjAzREEwLAorMHgwMDIwMThDMCwgMHgyRjk2MkY4NiwgMHgyRkI2MkZBNiwgMHgyRkQ2MkZDNiwKKzB4NEYyMjJGRTYsIDB4RDE5QjdGRUMsIDB4MkYxMkUwMDAsIDB4NjEwM0Q0OUEsCisweDFGNDI4MUYyLCAweEREOUFEQTk5LCAweEQ2OUE2ODEzLCAweEUwMDE0ODA4LAorMHg0NjBCREU5OSwgMHgzOEVDNDgwMCwgMHg2NUEyMUYwMywgMHgzNTIwNTJBMSwKKzB4QTIzRThCMDEsIDB4NjA1MTAwMDksIDB4ODgwMUM5MDMsIDB4QTIzODhCMDEsCisweDUyNTMwMDA5LCAweDMyRTBERTkxLCAweEQ5OTE4QjEwLCAweDY0QTM0OTBCLAorMHg0QjBCREI5MCwgMHhERTkwNjQwMywgMHhENzkxRDY5MCwgMHhFQzAxRDU5MSwKKzB4MkUwMkUxMDAsIDB4MjcxMDI2QzAsIDB4MjUwMkFGREYsIDB4QzgwMTg1NTEsCisweEExNTc4QjAxLCAweDYyNTEwMDA5LCAweDQyMDA2MjJELCAweDVFNTMzNjZBLAorMHg4NUUyMjI2RCwgMHhDOTAzNjQyQywgMHg4NUUzNjYwMywgMHg2MDUzNjUwRCwKKzB4NDAyMTQwMjEsIDB4NDUwMEM5M0YsIDB4MzIyQTY3MDMsIDB4NjA1MzI1MkQsCisweEM5MDFEMTdGLCAweDYwMTA2QzAzLCAweDg4MDFEOTdGLCAweERCN0Y4QjA1LAorMHgyMTIwRTIwMCwgMHhDQjAxNjBCMiwgMHhEMTdEMkIwMiwgMHg4ODAxNjAxMSwKKzB4NjVBMjhCMEEsIDB4OEQwNDI0NDgsIDB4OUI5RTYyNTEsIDB4QTAwMzIyQjksCisweDkxOUIyNTIxLCAweDI1MjEyMjFCLCAweDM3QjNFQjEwLCAweDI0NDg4OTVFLAorMHhENDczOEIwNywgMHgyMjI4NjI0MSwgMHg2MDYzODkwMywgMHhBMDU3ODFGOCwKKzB4RDU3MDY0NzMsIDB4NDYwODQ2MDgsIDB4ODVFMjYyNzMsIDB4NDYwMDZCNTAsCisweDM2MkM0MjAwLCAweDJCQjhDOTEwLCAweDhGMUY2NDYzLCAweDI2Njg2NjAzLAorMHhEMjY5ODkxMSwgMHgwNjJENjA0MywgMHg0MTE5NjE2RCwgMHg2QjBFNjAxOSwKKzB4ODFGODIwQkQsIDB4ODgwMTYwQzMsIDB4NjQ2QzhGMkMsIDB4ODgwRjYwNzMsCisweEEwMjc4QjFCLCAweEQyNjEwMDA5LCAweDA1MkQ2MDQzLCAweDQxMTk2MTVELAorMHg2NzBFNjAxOSwgMHg2NDVDMjA3RCwgMHg4MUY4QTAxQywgMHg4OTBGMjY2OCwKKzB4NjA0M0QyNUIsIDB4NkI1RDA1MkQsIDB4NjBCOTRCMTksIDB4MjAxRDYxMEUsCisweDYwQzM4MUY4LCAweDhGMEQ4ODAxLCAweDY0NzM2NDVDLCAweEVDMDBBMDBBLAorMHg2MDQzRDI1NCwgMHg2MjVEMDUyRCwgMHg2MDI5NDIxOSwgMHgyMDdENjcwRSwKKzB4ODFGODY0NUMsIDB4ODgwMjg1RjgsIDB4ODVFMTg5MEEsIDB4OEQwN0M4MjAsCisweEU2REM2MjAzLCAweDYwMjMyMjY5LCAweDgxRTFBMDAyLCAweDY0NENFNEZGLAorMHg2MjEwRDE0OSwgMHg4OTAxMjIyOCwgMHg2NDRDRTRGRiwgMHg2NTRERUJGRiwKKzB4MzVCMDZCQkMsIDB4REIzNjhCMkIsIDB4NjRBMzRCMEIsIDB4NDEwQkQxMzUsCisweDU0MDM2NDAzLCAweDg1NDQ2RTAzLCAweEM5NDhEQjQwLCAweERDNDA4ODA4LAorMHhCRUFDOEIwMSwgMHg2NEIzRTUwMiwgMHg2NUUzNEMwQiwgMHhEQjNERUMwMSwKKzB4RDEzRDJEQzIsIDB4NjIxMjYwQjIsIDB4NzIwMTcwMDEsIDB4MjEyMjg4MDUsCisweDJCMDI4RjA4LCAweDY2NkNFNjgwLCAweDY1NjNEMjM4LCAweDc1NDlFNzAwLAorMHg2NDczNDIwQiwgMHhBMDMwRDQzNiwgMHg3RkZGMDAwOSwgMHg4NUUyODAwMCwKKzB4MjBCOUVCRkMsIDB4NjEwMzgxRTIsIDB4OTQyQTg1RTMsIDB4NjIwMzIwNDksCisweDQ1MDg4NUY4LCAweDgxRTIyMDFCLCAweEM5MDE2MEMzLCAweDQwMDg0MDE4LAorMHg0MDA4NDAwOCwgMHg0MDAwMjI1QiwgMHg2MDIzMjIwQiwgMHg4NUU0ODFFMywKKzB4NDExOEUxMDgsIDB4ODFFNDIwMUIsIDB4RTQwMjYyQTIsIDB4MjBCOTg1MjEsCisweDY3QTI4MTIxLCAweENCMDE2MDcxLCAweDg1RjgyNzAxLCAweDg5MDMzMDQyLAorMHhFQ0U3ODVFMiwgMHg4MUUyMjBDOSwgMHg0OTBCRDQxRSwgMHhBMDNCMDAwOSwKKzB4N0UwMzAwMDksIDB4MDAxQzNEMzAsIDB4MDAyMDNEQUMsIDB4MDAyMDM1OEMsCisweDAwMUUyMTJDLCAweDAwMjAzNDcwLCAweDAwMUMzRDAwLCAweDAwMTE3NzgwLAorMHgwMDIwMTRBNiwgMHgwMDIwMTY3MCwgMHgwMDExNzcwQywgMHgwMDIwMzlBNCwKKzB4MDAyMDM5QTUsIDB4MDAyMDM5QTAsIDB4MDAyMDE4QzAsIDB4MDAxQzM2RjgsCisweDAwMjAzQTFBLCAweDAwMjAzREJDLCAweDAwMjAzQkEwLCAweDAwMjAzQzIwLAorMHgwMDIwM0NBMCwgMHgwMDIwM0QyMCwgMHgwMDIwMzk5MCwgMHgwMDIwMzU4NCwKKzB4MDAyMDE0RDAsIDB4MDAyMDNBMUMsIDB4MDAyMDNBMjAsIDB4MDAyMDIzRkMsCisweDAwMjAzREE0LCAweDAwMjAzREE4LCAweDYwMjI2MkYyLCAweDQwMDk0MDE5LAorMHhDOTBGNDAwOSwgMHg4QjBCODgwQSwgMHg2MEUyREU4QywgMHg0MDA5NDAxOSwKKzB4QzkwRjQwMDksIDB4OEIwMzg4MDgsIDB4Q0IwMTYwQTIsIDB4MjgwMkEwMDYsCisweDY1RTJERTg3LCAweDJFNTI3NTAxLCAweDI4NjI2NkEyLCAweDUyRjM2NkYyLAorMHgyNjIyQUU4MywgMHhEMjgzODU1MSwgMHhERTgzQzgwMiwgMHhBMDk1OEIwMSwKKzB4NDIwQjAwMDksIDB4NEUwQjY0QTMsIDB4NUUwMzY0MDMsIDB4ODVFNDY1MDMsCisweDQ5MThFOTA4LCAweEQ3N0QyMDlCLCAweEUwNEM4MUU0LCAweERDN0MwQjdFLAorMHg3QjAxRDk3QywgMHg2MUMyMDdCNiwgMHg3MTAxNjY5MCwgMHg4RDA2MjY2OCwKKzB4RDQ3OTJDMTIsIDB4NDIwQkQyNzksIDB4QTA3MEVCMDEsIDB4NjI1MTJEQjIsCisweDRCMThFQjBGLCAweDIyQjlFMTAyLCAweDMyMTA0MTE4LCAweDg1NTE4QjBGLAorMHgyMDI5RTJGQywgMHg2MDUxODE1MSwgMHhDQjAxNzJFMCwgMHg4NUUxMjUwMSwKKzB4MjAyOTk0QTMsIDB4ODVFNDgxRTEsIDB4QTA1MjIwNDksIDB4Njc1MTgxRTQsCisweDQ3MTk2NzdELCAweDY2N0U2Nzc5LCAweDc3MDEyNzZELCAweDY5MDM2MDdDLAorMHg4ODAxNDkxOCwgMHgyNTkxOEYzRSwgMHg2QjEyRDE2MSwgMHgyMUIyN0IwMSwKKzB4NjYwRDg1RTMsIDB4NDAyMTYwNjMsIDB4QzkzRjQwMjEsIDB4NkMwMzQ2MDAsCisweDI2MkQzMjJBLCAweEM4MDE2MDYzLCAweERCNUVEMTVELCAweDk2N0Q4OTAxLAorMHhFNjAwMkM2QiwgMHg2NjZDNjdDRCwgMHg0MDAwNjA2MywgMHg2MjJEMDIxRCwKKzB4OEQwRTMyNzAsIDB4NjA0MzY0MDMsIDB4RTlGRjAyMUQsIDB4OEIwMTMyOTAsCisweDAxQzVBMDA3LCAweDYyNkM3NjAxLCAweDMyOTJFOTA0LCAweDY0NkM4QkVCLAorMHg2MDQzNDQwMCwgMHhEMTUwMDRCRCwgMHgwQjQ1NzQwMSwgMHg2NjlENjkxMSwKKzB4ODkwNzM2NzAsIDB4NjAyRDYyMTEsIDB4ODkwMzg4RkYsIDB4RTIwMURCNEIsCisweDJCMjAyMUMxLCAweEVDRkM4NTUxLCAweDgxNTEyMEM5LCAweENCMDE2MDUxLAorMHhEQzQ3MjUwMSwgMHg2NEEzNEMwQiwgMHg1MUYzNjZGMiwgMHg4NUVGMjYxMiwKKzB4NTRGMkQyNDQsIDB4NjUwRDQyMEIsIDB4MDAwOUFERTcsIDB4RTUwMERDNDIsCisweDQyMEIyQzUyLCAweDRFMEI2NEEzLCAweDU0MDM2NDAzLCAweDg1NDQ2RTAzLAorMHg2NzAzRTkwOCwgMHg2NTAzNDkxOCwgMHgyNzk5ODU0MSwgMHhEQjMyMzc5MCwKKzB4OEYwQkQ5MzIsIDB4NjAxMzYxMEQsIDB4OEIwN0M4MjAsIDB4Qzk0ODYwNTMsCisweDhCMDM4ODA4LCAweEU1MDFCRDRCLCAweDAwMDlBMDA1LCAweDIxMjhEMjMzLAorMHhCRDQ0ODkwMSwgMHg2NEIzRTUwMCwgMHg0OTBCNjVFMywgMHhBREJDRUMwMSwKKzB4ODVGMjJEQzIsIDB4NzAwMUVFMDQsIDB4MzFFNzYxMEQsIDB4OEQwMjgxRjIsCisweEFEQTk3QTA4LCAweDdGMTQwMDA5LCAweDZFRjY0RjI2LCAweDZDRjY2REY2LAorMHg2QUY2NkJGNiwgMHgwMDBCNjlGNiwgMHhGN0ZGNjhGNiwgMHgyRkU2ODAwMCwKKzB4RDIyMzRGMjIsIDB4NjBFMzZFMjIsIDB4OEQwMkM4NDAsIDB4QkJFNTIyRTIsCisweEUyNDAwMDA5LCAweDJFMjg0MjE4LCAweEJCRjA4OTAxLCAweDYwRTMwMDA5LAorMHg4OTA1QzgxMCwgMHhEMjFDRDQxQiwgMHgwMDA5NDIwQiwgMHgwMDA5QkJFRiwKKzB4QzgwNTYwRTMsIDB4QkQ2RDg5MDEsIDB4NjBFMzAwMDksIDB4ODkwMkM4MDIsCisweEFCRUM0RjI2LCAweDRGMjY2RUY2LCAweDZFRjYwMDBCLCAweDAwMUMzRDNDLAorMHgwMDExNzc2MCwgMHgwMDIwMTRBNiwgMHgwMDIwMTY3MCwgMHgwMDIwMzUxQywKKzB4MDAyMDNEQzAsIDB4MDAyMDM5OTAsIDB4MDAyMDM1ODQsIDB4MDAyMDE0RDAsCisweDAwMjAzOUZDLCAweDAwMjAzQTA0LCAweDAwMjAzOUY4LCAweDAwMjAzOUZBLAorMHgwMDIwMTUzNCwgMHgwMDIwMThEMCwgMHgwMDIwM0ExQywgMHgwMDAwODAwMCwKKzB4MDAxQzM1MTAsIDB4MDAyMDNEQjQsIDB4MDAyMDE4QzAsIDB4ODkwMTRGMjIsCisweDYxMUI2MDBCLCAweDYxMUJCMDBBLCAweDAwMEI0RjI2LCAweDYwMEI2MDBCLAorMHg2MTFCQTAwNCwgMHg4REYxMjEwNywgMHg4QkY4NDAxMSwgMHg2MjBEMkYyNiwKKzB4OEYzRTMwMjAsIDB4NDAxODAwMTksIDB4OEIwQjMwMTYsIDB4MzEwNDMxMDQsCisweDMxMDQzMTA0LCAweDMxMDQzMTA0LCAweDMxMDQzMTA0LCAweDQxMjQ2MkY2LAorMHg2MDFDMDAwQiwgMHg0MTI5NjIxOSwgMHgyMDA4NDAxOCwgMHgzMTA0ODkyNiwKKzB4MzEwNDMxMDQsIDB4MzEwNDMxMDQsIDB4MzEwNDMxMDQsIDB4MzEwNDMxMDQsCisweDMxMDQzMTA0LCAweDMxMDQzMTA0LCAweDMxMDQzMTA0LCAweDYxMTkzMTA0LAorMHgzMjA0MjIxRCwgMHgzMjA0MzIwNCwgMHgzMjA0MzIwNCwgMHgzMjA0MzIwNCwKKzB4MzIwNDMyMDQsIDB4MzIwNDMyMDQsIDB4MzIwNDMyMDQsIDB4MzIwNDMyMDQsCisweDIxMkQzMjA0LCAweDYwMTk2MkY2LCAweDQwMjQwMDBCLCAweDAwMEJFMDAwLAorMHg2MjEzNjJGNiwgMHg0MTI5NDIyOCwgMHgzMTA0NDIyNCwgMHgzMTA0NDIyNCwKKzB4MzEwNDQyMjQsIDB4MzEwNDQyMjQsIDB4MzEwNDQyMjQsIDB4MzEwNDQyMjQsCisweDMxMDQ0MjI0LCAweDMxMDQ0MjI0LCAweDMxMDQ0MjI0LCAweDMxMDQ0MjI0LAorMHgzMTA0NDIyNCwgMHgzMTA0NDIyNCwgMHgzMTA0NDIyNCwgMHgzMTA0NDIyNCwKKzB4MzEwNDQyMjQsIDB4MzEwNDQyMjQsIDB4NjAyRDQyMjQsIDB4NjJGNjAwMEIsCisweDA4MEEwQzBFLCAweDAwMDIwNDA2LCAweDFBMUMxRTIwLCAweDEyMTQxNjE4LAorMHgyRTMwMzIzNCwgMHgyNjI4MkEyQywgMHgzQTNDM0U0MCwgMHg2QzYyNTY0OCwKKzB4NDExMTJGMjYsIDB4RTIyMDhGMTgsIDB4ODkwQjMxMjMsIDB4MzIxQ0QyMDQsCisweEQxMDI2MjIwLCAweDQxMkIzMTJDLCAweDAwMDkwMDA5LCAweDAwMjAzNDlBLAorMHgwMDIwMzQ1MCwgMHgwMDBCRTAwMCwgMHg0MDAwNjJGNiwgMHg0MDAwNDAwMCwKKzB4NDAwMDQwMDAsIDB4NDAwMDQwMDAsIDB4NjJGNjAwMEIsIDB4NDAwMDQwMDAsCisweDQwMDA0MDAwLCAweDQwMDA0MDAwLCAweDQwMTg0MDAwLCAweDYyRjYwMDBCLAorMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwgMHg0MDI4NDAwMCwKKzB4NjJGNjAwMEIsIDB4NDAwMDQwMDAsIDB4NDAxODQwMDAsIDB4MDAwQjQwMjgsCisweEM5MEY2MkY2LCAweDQwMDU0MDA1LCAweDQwMDU0MDA1LCAweDYyRjYwMDBCLAorMHg0MDA1QzkwNywgMHg0MDA1NDAwNSwgMHg2MkY2MDAwQiwgMHg0MDA1QzkwMywKKzB4MDAwQjQwMDUsIDB4QzkwMTYyRjYsIDB4MDAwQjQwMDUsIDB4MDAwMDYyRjYsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4NDI3MDczNzIsCisweDNEMjA2Njc1LCAweDU1NEUyMDNELCAweDIwMkM0QzRDLCAweDZFNDk2NzdBLAorMHg0RTQ5NzI3NCwgMHg2RDc1NEU1MSwgMHgwMDAwMDAzRCwgMHg2MTc2NkU0OSwKKzB4MjA2NDY5NkMsIDB4NzI2NTczNzUsIDB4MjA3MjZGMjAsIDB4MjA3OTY1NkIsCisweDAwMjE0NDQ5LCAweDZFNkI2RTU1LCAweDIwNkU3NzZGLCAweDZENkQ2RjYzLAorMHgzRDY0NkU2MSwgMHgwMDAwMDAwMCwgMHgyMDNBMzA1MSwgMHgwMDAwMDAyMCwKKzB4MjAzQTMxNTEsIDB4MDAwMDAwMjAsIDB4MjAzQTMyNTEsIDB4MDAwMDAwMjAsCisweDIwM0EzMzUxLCAweDAwMDAwMDIwLCAweDIwM0EzNDUxLCAweDAwMDAwMDIwLAorMHgyQjQzNDc0MSwgMHg3MzY5NkY0RSwgMHg2MTQzMjA2NSwgMHg3MjYyNjk2QywKKzB4NkY2OTc0NjEsIDB4NjE2NjIwNkUsIDB4NkYyMDZDNjksIDB4Njk3NDIwNkUsCisweDBEMEE2NTZELCAweDAwMDAwMDAwLCAweDAwMDAwMDcyLCAweDAwMjA1MjIwLAorMHg2MjczNTU3NiwgMHg3NDczNzI1RiwgMHgwMDAwMEEwRCwgMHg2MjczNTU3NiwKKzB4NzM3NTczNUYsIDB4NjQ2RTY1NzAsIDB4MDAwMDBBMEQsIDB4NjI3MzU1NzYsCisweDczNjU3MjVGLCAweDAwMEEwRDZELCAweDAwMDAwMDQ0LCAweDQ0Mzg3NTcwLAorMHg3MjYzNzM2NSwgMHg2Rjc0NzA2OSwgMHgzRDU4NDU3MiwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwNDcsIDB4NzI3NDZFNDksIDB4NkQ2NTIwNTEsIDB4MkM3OTc0NzAsCisweDQ5Njc3QTIwLCAweDQ5NzI3NDZFLCAweDc1NEU1MTRFLCAweDAwMDAzRDZELAorMHg2NTRDNzI0NSwgMHgwMDAwMDA2RSwgMHgyMDc0NkY0RSwgMHg3NTZGNkU2NSwKKzB4NDkyMDY4NjcsIDB4NDIyMDUxNEUsIDB4MEEwRDY2NzUsIDB4MDAwMDAwMDAsCisweDAwMDAwMEZGLCAweDAwMDIwMDAxLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAxMEUwMTBELCAweDAwMDIwMDAzLCAweDAxMDkwMTA4LCAweDAwMDIwMTBBLAorMHgwMjAwMDAwMywgMHgwMjAyMDIwMSwgMHgwMjA0MDIwMywgMHgwMjA2MDIwNSwKKzB4MDIwMjAyMDAsIDB4MDIwNDAyMDMsIDB4MDIwQzAyMEIsIDB4MDIwRTAyMEQsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDAwMDAwRkYsIDB4MDAwMjAwMDEsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDEwRTAxMEQsIDB4MDAwMjAwMDMsIDB4MDEwOTAxMDgsIDB4MDAwMjAxMEEsCisweDAwMDMwMDAzLCAweDAyMDIwMjAxLCAweDAyMDQwMjAzLCAweDAyMDYwMjA1LAorMHgwMjAyMDIwMCwgMHgwMjA0MDIwMywgMHgwMjBDMDIwQiwgMHgwMjBFMDIwRCwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMTBFMDEwRCwgMHgwMEZGMDEwRiwgMHgwMTA5MDEwOCwgMHgwMTBCMDEwQSwKKzB4MDIwMDAxMEYsIDB4MDIwMjAyMDEsIDB4MDIwNDAyMDMsIDB4MDIwNjAyMDUsCisweDAyMDIwMjAwLCAweDAyMDQwMjAzLCAweDAyMEMwMjBCLCAweDAyMEUwMjBELAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAxMEUwMTBELCAweDAwRkYwMTBGLCAweDAxMDkwMTA4LCAweDAxMEIwMTBBLAorMHgwMTBGMDEwRiwgMHgwMjAyMDIwMSwgMHgwMjA0MDIwMywgMHgwMjA2MDIwNSwKKzB4MDIwMjAyMDAsIDB4MDIwNDAyMDMsIDB4MDIwQzAyMEIsIDB4MDIwRTAyMEQsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDAyMDUyMjAsIDB4MDAwMDAwNDYsIDB4MDAwMDAwNTksIDB4NzMyMDQxNDIsCisweDAwM0Q3MTY1LCAweDQ5NTQ0MTIwLCAweDAwMDAyMDRELCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDJFMDIwOSwgMHg4MDAwMDEwMSwgMHgwMDA0MDlGQSwKKzB4MDBGRjA0MDAsIDB4MDUwNzAwMDAsIDB4MDIwMDAyMDEsIDB4ODIwNTA3MDAsCisweDAwMDIwMDAyLCAweDAzODMwNTA3LCAweDA3MDEwMDQwLCAweDQwMDMwNDA1LAorMHgwMjA5MDEwMCwgMHgwMTAxMDAyRSwgMHgwOUZBODAwMCwgMHgwNDAwMDAwNCwKKzB4MDAwMDAwRkYsIDB4MDIwMTA1MDcsIDB4MDcwMDAwNDAsIDB4NDAwMjgyMDUsCisweDA1MDcwMDAwLCAweDAwNDAwMzgzLCAweDA0MDUwNzAxLCAweDAwMDA0MDAyLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwNzA5MDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4NjYyMUQyQTgsIDB4MjAwODYwNkQsIDB4QTFCMThCMDEsIDB4ODgxMDAwMDksCisweDg4MTE4OTIyLCAweDg4MTI4OTIwLCAweDg4MTM4OTFFLCAweDg4MjE4OTFDLAorMHg4ODIyODkxQSwgMHg4ODNBODkxOCwgMHg4ODNCODkxNiwgMHhFNjQ0ODkxNCwKKzB4MzA2MDQ2MDgsIDB4RTY0ODg5MTAsIDB4MzA2MDQ2MDgsIDB4RTY1ODg5MEMsCisweDMwNjA0NjA4LCAweDk2M0Q4OTA4LCAweDg5MDUzMDYwLCAweDMwNjA5NjNCLAorMHg5NjM5ODkwMiwgMHg4QjAxMzA2MCwgMHhFMDEwMDAwQiwgMHg4QjAxODgyMCwKKzB4RTAyMDAwMEIsIDB4ODkyQjg4MzcsIDB4ODkyOTg4MzIsIDB4ODkyNzg4MzUsCisweDg5MjU4ODM2LCAweDg5MjM4ODMwLCAweDg5MjE4ODM4LCAweDg5MUY4ODM5LAorMHg4OTFEODgzNCwgMHg4OTFCODgzMywgMHg0NjA4RTY0QywgMHg4OTE3MzA2MCwKKzB4MzA2MDk2MUIsIDB4OTYxOTg5MTQsIDB4ODkxMTMwNjAsIDB4MzA2MDk2MTcsCisweDk2MTU4OTBFLCAweDg5MEIzMDYwLCAweDMwNjA5NjEzLCAweDk2MTE4OTA4LAorMHg4OTA1MzA2MCwgMHgzMDYwOTYwRiwgMHg5NjBEODkwMiwgMHg4QjBDMzA2MCwKKzB4RTAzMDAwMEIsIDB4MDUxMDAxNjUsIDB4MDIzMDBBMTAsIDB4MDQzMDAzMzAsCisweDA2MzAwNTMwLCAweDBCMzAwQTMwLCAweDg4NDAwQzMwLCAweEExNDI4QjAxLAorMHg4ODQxMDAwOSwgMHhBMTNFOEIwMSwgMHg4ODQzMDAwOSwgMHhBMTNBOEIwMSwKKzB4ODg0ODAwMDksIDB4QTEzNjhCMDEsIDB4ODg0QTAwMDksIDB4QTEzMjhCMDEsCisweDg4NEIwMDA5LCAweEExMkU4QjAxLCAweDg4NEMwMDA5LCAweEExMkE4QjAxLAorMHhFNjgwMDAwOSwgMHgzMDYwNjY2QywgMHhBMTI0OEIwMSwgMHhFNjgxMDAwOSwKKzB4MzA2MDY2NkMsIDB4QTExRThCMDEsIDB4RTY4MjAwMDksIDB4MzA2MDY2NkMsCisweEExMTg4QjAxLCAweEU2ODMwMDA5LCAweDMwNjA2NjZDLCAweEExMTI4QjAxLAorMHhFNjg0MDAwOSwgMHgzMDYwNjY2QywgMHhBMTBDOEIwMSwgMHhFNjg1MDAwOSwKKzB4MzA2MDY2NkMsIDB4QTEwNjhCMDEsIDB4RTY4NjAwMDksIDB4MzA2MDY2NkMsCisweEExMDA4QjAxLCAweEU2ODcwMDA5LCAweDMwNjA2NjZDLCAweEEwRkE4QjAxLAorMHhFNjg4MDAwOSwgMHgzMDYwNjY2QywgMHhBMEY0OEIwMSwgMHhFNjg5MDAwOSwKKzB4MzA2MDY2NkMsIDB4QTBFRThCMDEsIDB4RTY4QTAwMDksIDB4MzA2MDY2NkMsCisweEEwRTg4QjAxLCAweEU2OEIwMDA5LCAweDMwNjA2NjZDLCAweEEwRTI4QjAxLAorMHhFNjhDMDAwOSwgMHgzMDYwNjY2QywgMHhBMERDOEIwMSwgMHhFNjhEMDAwOSwKKzB4MzA2MDY2NkMsIDB4QTBENjhCMDEsIDB4RTY4RTAwMDksIDB4MzA2MDY2NkMsCisweEEwRDA4QjAxLCAweEU2OEYwMDA5LCAweDMwNjA2NjZDLCAweEEwQ0E4QjAxLAorMHhFNjkwMDAwOSwgMHgzMDYwNjY2QywgMHhBMEM0OEIwMSwgMHhFNjkxMDAwOSwKKzB4MzA2MDY2NkMsIDB4QTBCRThCMDEsIDB4RTZGODAwMDksIDB4MzA2MDY2NkMsCisweEEwQjg4QjAxLCAweEU2RjkwMDA5LCAweDMwNjA2NjZDLCAweEEwQjI4QjAxLAorMHhFNkZBMDAwOSwgMHgzMDYwNjY2QywgMHhBMEFDOEIwMSwgMHhFNkZCMDAwOSwKKzB4MzA2MDY2NkMsIDB4QTBBNjhCMDEsIDB4RTZGQzAwMDksIDB4MzA2MDY2NkMsCisweEEwQTA4QjAxLCAweEU2RkQwMDA5LCAweDMwNjA2NjZDLCAweEEwOUE4QjAxLAorMHhFNkZFMDAwOSwgMHgzMDYwNjY2QywgMHhBMDk0OEIwMSwgMHhFNkZGMDAwOSwKKzB4MzA2MDY2NkMsIDB4QTA4RThCMDEsIDB4RTZEMDAwMDksIDB4MzA2MDY2NkMsCisweEEwODg4QjAxLCAweEU2RDEwMDA5LCAweDMwNjA2NjZDLCAweEEwODI4QjAxLAorMHhFNkQyMDAwOSwgMHgzMDYwNjY2QywgMHhBMDdDOEIwMSwgMHhFNkQzMDAwOSwKKzB4MzA2MDY2NkMsIDB4RTZENDg5NzcsIDB4MzA2MDY2NkMsIDB4RTZENTg5NzMsCisweDMwNjA2NjZDLCAweEU2RDY4OTZGLCAweDMwNjA2NjZDLCAweEU2RDc4OTZCLAorMHgzMDYwNjY2QywgMHhFNkQ4ODk2NywgMHgzMDYwNjY2QywgMHhBMDAzODk2MywKKzB4MDAwMDAwMDksIDB4MDAxMTQwMDAsIDB4NjY2Q0U2RDksIDB4ODk1QTMwNjAsCisweDY2NkNFNkRBLCAweDg5NTYzMDYwLCAweDY2NkNFNkRCLCAweDg5NTIzMDYwLAorMHg2NjZDRTZEQywgMHg4OTRFMzA2MCwgMHg2NjZDRTZERCwgMHg4OTRBMzA2MCwKKzB4NjY2Q0U2RjAsIDB4ODk0NjMwNjAsIDB4NjY2Q0U2RjEsIDB4ODk0MjMwNjAsCisweDY2NkNFNkYyLCAweDg5M0UzMDYwLCAweDY2NkNFNkYzLCAweDg5M0EzMDYwLAorMHg2NjZDRTZGNCwgMHg4OTM2MzA2MCwgMHg2NjZDRTZGNSwgMHg4OTMyMzA2MCwKKzB4NjY2Q0U2RjYsIDB4ODkyRTMwNjAsIDB4NjY2Q0U2RjcsIDB4ODkyQTMwNjAsCisweDQ2MDhFNjUwLCAweDg5MjYzMDYwLCAweDMwNjA5NjlBLCAweDk2OTg4OTIzLAorMHg4OTIwMzA2MCwgMHgzMDYwOTY5NiwgMHg5Njk0ODkxRCwgMHg4OTFBMzA2MCwKKzB4MzA2MDk2OTIsIDB4OTY5MDg5MTcsIDB4ODkxNDMwNjAsIDB4MzA2MDk2OEUsCisweDk2OEM4OTExLCAweDg5MEUzMDYwLCAweDMwNjA5NjhBLCAweDk2ODg4OTBCLAorMHg4OTA4MzA2MCwgMHgzMDYwOTY4NiwgMHg5Njg0ODkwNSwgMHg4OTAyMzA2MCwKKzB4MzA2MDk2ODIsIDB4MDAwQjhCMDEsIDB4RTBGRkUwNDAsIDB4NjAwQzAwMEIsCisweEUwMDAwMDBCLCAweDYyNDNEMTU3LCAweEU0MDI4NTEyLCAweDY2MkQ2NzBELAorMHhFNTAwQTAwRSwgMHg2MDUzNjU1RCwgMHgzMDVDNDAwMCwgMHg0MDA4RDE1MiwKKzB4NjIyRDAyMUQsIDB4OEIwMjMyNjAsIDB4QTAwNDcxMDgsIDB4NzUwMTA0MUMsCisweDMyNzM2MjVELCAweDYwNDM4QkVFLCAweEM5MEEwMDBCLCAweDY3NEM3NkZFLAorMHgwMjVDNjA2QywgMHgzNzIzNjIyQywgMHgyMDA4ODkwNiwgMHg3MEZGODkwMiwKKzB4NjYwM0FGRjYsIDB4RTAwMDAwMEIsIDB4MDAwOTAwMEIsIDB4NEYxMjRGMjIsCisweDMyNjA1MkYyLCAweDM0NTA4OTEwLCAweDM0NzA4OTBFLCAweDM3NTA4OTBELAorMHgzMjY4ODkwQSwgMHgwNDI3MzQ1OCwgMHg2MDczMzc1OCwgMHg0NDBCRDQzQiwKKzB4MzA2QzAxMUEsIDB4NjIwM0EwMDEsIDB4NEYxNjYyNjMsIDB4MDAwQjRGMjYsCisweDJGRTY2MDIzLCAweDRGMTI0RjIyLCAweDZFNDM0RjAyLCAweDYxNEM1NEY0LAorMHgyRjE2NDExOCwgMHg2NjZDNjc3QywgMHg2NEVDNjU1QywgMHg0NjE4NDcxOCwKKzB4QkZEMzQ1MTgsIDB4NjUwMzQ0MTgsIDB4NjA1MzdGMDQsIDB4Qzk4MEU3MDIsCisweDZFMDM0NzE4LCAweDM3RUQ0NzI4LCAweDYyNTk0NTE5LCAweDAxMEE2NTJFLAorMHgzMTJDMjI1RCwgMHg0RjA2NjAxQywgMHg0RjI2NEYxNiwgMHg2RUY2MDAwQiwKKzB4MDM0MDAyNDAsIDB4MDU0MDA0NDAsIDB4MDc0MDA2NDAsIDB4MDk0MDA4NDAsCisweDExNDAwQjQwLCAweDBBNDAxMjQwLCAweDRGMjIwQTUwLCAweDYxNEM4NDUxLAorMHgzMTI3NjIwQywgMHhBMDBDODkwMSwgMHg4NDUyRTQwMCwgMHgzMTI3NjIwQywKKzB4QTAwNjg5MDEsIDB4ODQ1M0U0MDEsIDB4MzEyNzYyMEMsIDB4RTQwMzhEMDEsCisweDYyNjNFNDAyLCAweDYwNDM3MjAxLCAweDY3N0MwNzJDLCAweDYyNTMyRjc2LAorMHgwNzJDNzIwMSwgMHgwNTVDMDY2QywgMHg2NjZDNjc3QywgMHhCRkE4NjU1QywKKzB4N0YwNDY0MTMsIDB4MDAwQjRGMjYsIDB4NjA1QzYwMEMsIDB4OEYwNjg4MDEsCisweDYwNkM2MjQzLCAweDhCMDE4ODAxLCAweDcyMEFBMDAxLCAweDAwMEI3MkY2LAorMHgwMDAwNjAyMywgMHgwMDExNDAwMCwgMHgwMDExNDAwOCwgMHgwMDIwMzM3NCwKKzB4RTA0MEQ2OTAsIDB4MDU2RTYxNEMsIDB4OTI3NEQ3OEYsIDB4MzUyQzM1N0MsCisweEU0MDBFNzE4LCAweDYyNkM2NjUwLCAweDg5MDQzMTIwLCAweDYyNEM3NDAxLAorMHg4RkY3MzI3MywgMHgwMDBCNzUwMSwgMHhFMkZGNjA0MywgMHg2MjJDNjQ0QywKKzB4ODkwRDM0MjAsIDB4ODgwMTYwNUMsIDB4OTY1RDhCMDMsIDB4QTAwNTM0NkMsCisweDYyNDM2MjQzLCAweDMyNEM0MjA4LCAweDMyNkM5NjU3LCAweDYwMjMwMDBCLAorMHg2MDQzMDAwQiwgMHgyRjk2MkY4NiwgMHgyRkI2MkZBNiwgMHgyRkQ2MkZDNiwKKzB4NEYyMjJGRTYsIDB4OTI0OTdGRjQsIDB4NkI1MzM1MjYsIDB4MDAyOTY5NDMsCisweEUxM0ZDQTAxLCAweDZFMDNFQUZGLCAweDZBQUMyRjEwLCAweDZENDNFQzAwLAorMHg2MkQwRTgwOCwgMHgzNEEwNjQyQywgMHhCRkNFODkzOSwgMHgzQjAwNjVFMywKKzB4NkNDQzhGMEEsIDB4NDIwMDYyQzMsIDB4MzYyQzY2OTMsIDB4MUZDMTg0NjEsCisweDQxMDk2MTBDLCAweDJGMTBBMDJELCAweDg5MUMyQ0M4LCAweDY1RTM2NEQwLAorMHg2NDRDQkZCQiwgMHg4OTE2M0IwMiwgMHg3MEZGNjBDMywgMHgwNDlDNDAwMCwKKzB4NjQ0QzY1RTMsIDB4MUYwMkJGQjEsIDB4OEQxQTMwQjIsIDB4NTZGMjFGQzEsCisweDM1NkM2NTkzLCAweEM5MDM4NDUxLCAweDg5MTIyMDA4LCAweDY2MEM4NDUxLAorMHhBMDBFNDYwOSwgMHg3QzAxMkY2MCwgMHgzMjgzNjJDQywgMHg4RkM4N0QwMiwKKzB4QTAwNjFGMjEsIDB4MDYyNTAwMDksIDB4MTJDMDA4RkMsIDB4NjJDQzA5QjQsCisweDUwRjExRjIxLCAweDhCMTI4ODA4LCAweDdDRkY2Q0NDLCAweDYwQzM0QzAwLAorMHg2NUUzMDQ5QywgMHg2NDRDQkY4OSwgMHg4QjA4M0IwNiwgMHg4NDkxMzlDQywKKzB4MjAwOEM5MDMsIDB4ODQ5MTg5MDMsIDB4NDIwOTYyMEMsIDB4NjBGMDJGMjAsCisweDRGMjY3RjBDLCAweDZERjY2RUY2LCAweDZCRjY2Q0Y2LCAweDY5RjY2QUY2LAorMHg2OEY2MDAwQiwgMHgyRjk2MkY4NiwgMHgyRkI2MkZBNiwgMHgyRkQ2MkZDNiwKKzB4NEYyMjJGRTYsIDB4OTI3MjdGRkMsIDB4MzQyNkUxMDAsIDB4NkI0MzY5NTMsCisweDJGMTI2NjZDLCAweENBMDEwMDI5LCAweDhEMDMyNjY4LCAweEUyRjA2RTAzLAorMHgyRjIyNjIyQywgMHg2QUFDRUFGRiwgMHg2QzkzRUQwMCwgMHg2NkMwRTgwOCwKKzB4MzRBMDY0NkMsIDB4QkY1MDg5MTMsIDB4M0IwMDY1RTMsIDB4NkREQzhCMEEsCisweDM5REM0RDAwLCAweEM5MDM4NDkxLCAweDhCMDgyMDA4LCAweENCMEY2MEYyLAorMHgyRjAyQTAwNSwgMHg2MkRDN0QwMSwgMHg4RkU4MzI4MywgMHg2MEYyN0MwMiwKKzB4NEYyNjdGMDQsIDB4NkRGNjZFRjYsIDB4NkJGNjZDRjYsIDB4NjlGNjZBRjYsCisweDY4RjYwMDBCLCAweDJGOTYyRjg2LCAweDJGQjYyRkE2LCAweDJGRDYyRkM2LAorMHg0RjIyMkZFNiwgMHg0RjAyNEYxMiwgMHgzRjNDOTMzMiwgMHg0MzA4RTM1QiwKKzB4NjA1MzMzRkMsIDB4ODAzNDEzNTEsIDB4RTc2MDYwNjMsIDB4ODAzODEzNjIsCisweDQ3MDhFMDEyLCAweEUwM0Y4MTM2LCAweEQxMTIzN0ZDLCAweDI3MDA4MTM4LAorMHg4MDc4ODA3NCwgMHhFOTE2NjA1MywgMHg2MDYzODAxMiwgMHgyMTQxNDkxOCwKKzB4NkI5MzgwMTMsIDB4RURGRjZBQjQsIDB4NkFBQzYxQjAsIDB4NkMxQzRBMTgsCisweDY4QzgyQ0FCLCAweDZEREQ2ODhELCAweDIzNDIzOEQwLCAweDhCMTMxMzk4LAorMHhEMjA3RDQwNiwgMHgwMDA5NDIwQiwgMHg0MzJCRDMwNiwgMHgwOUI0MDAwOSwKKzB4MDAwMEZFMTAsIDB4MDAxMTQyRDgsIDB4MDAwREREMDAsIDB4MDAxMTYwQjAsCisweDAwMjAxOEMwLCAweDAwMTE1RTg4LCAweDM0MjI5MkUzLCAweDhGMDJFMTAwLAorMHhBMTYxNjU5MywgMHg5MkREMDAwOSwgMHgzNTJDRTdGRiwgMHhFRTA0Njc3QywKKzB4NjIyQzYyNTAsIDB4ODkwNDMyNzAsIDB4NjIxQzcxMDEsIDB4OEZGNzMyRTMsCisweEU4RkM3NTAxLCAweDM0ODg2ODhDLCAweDlBQ0JFMDY0LCAweDQwMDg2ODkzLAorMHgwRjQ0MzhBQywgMHg2NjFDNjU4MywgMHg2NDRDQkUxOCwgMHg2NEUzNkUwQywKKzB4NjVFMzc0MDEsIDB4NDUwODY2NDMsIDB4MzVFQzQ2MDgsIDB4NDUwODM2NEMsCisweDQ1MDA0NjA4LCAweDM2OUM0NjAwLCAweDYxQTM5QUI1LCAweEUwNjU2NzYzLAorMHg0MDA4MzdBQywgMHg2MjYzNzExNCwgMHgzMjFDMEY3NiwgMHg5NEFCNzAwNCwKKzB4NjE0MzBGMjYsIDB4MzU5QzYyNjMsIDB4NzAwNDMyNEMsIDB4MEYyNjcxMTQsCisweDcwMDQzNjFDLCAweDBGNjY2NzUzLCAweDcwMDQzN0FDLCAweDdBMTQwRjc2LAorMHgzN0FDNjc1MywgMHg2NjUzNzAwNCwgMHgzNjRDMEY3NiwgMHg3NDE0NzAwNCwKKzB4MzU0QzBGNjYsIDB4MEY1NjcwMDQsIDB4Mzk1Qzk1OEYsIDB4RUQwMDZBOTMsCisweDZCRDNFOTU2LCAweEVDMDU0OTA4LCAweDQwMDhFMDY1LCAweDYwQjMwMkZFLAorMHg2NDRDMDQyQywgMHg2MEUzMkY0NiwgMHhFMDZBMDdBQywgMHgwMUZFNDAwOCwKKzB4MDYxQzYwQjMsIDB4MDU4QzYwRTMsIDB4NDAwOEUwNjUsIDB4Njc3QzAxRkMsCisweDY1NUM2NjZDLCAweDY0MUNCREVELCAweDdGMDQ2NDAzLCAweDYwRDM2RERDLAorMHhFMDY2MEY0NCwgMHgwNEZFNDAwOCwgMHgwNTRDNjBCMywgMHgyRjU2NjU1QywKKzB4MDdBQzYwRTMsIDB4NDAwOEUwNkIsIDB4NjBCMzAxRkUsIDB4NjBFMzA2MUMsCisweEUwNjUwNThDLCAweDAxRkM0MDA4LCAweDY2NkM2NzdDLCAweEJERDA2NTVDLAorMHg2NDAzNjQxQywgMHg2NUYzN0YwNCwgMHg2MEQzNzUxMCwgMHhFMDY1MDU0NCwKKzB4MDdGRTQwMDgsIDB4MDU3QzYwQzMsIDB4MkY1NjY1NUMsIDB4MDdBQzYwRTMsCisweDQwMDhFMDZBLCAweDYwQzMwMUZFLCAweDYwRTMwNjFDLCAweEUwNjUwNThDLAorMHgwMUZDNDAwOCwgMHg2NjZDNjc3QywgMHhCREIyNjU1QywgMHg2NDAzNjQxQywKKzB4NjFGMzdGMDQsIDB4NjBEMzcxMjAsIDB4RTA2NjAxNDQsIDB4MDJGRTQwMDgsCisweDA1MkM2MEMzLCAweDJGNTY2NTVDLCAweDA3QUM2MEUzLCAweDQwMDhFMDZCLAorMHg2MEMzMDFGRSwgMHg2MEUzMDYxQywgMHhFMDY1MDU4QywgMHgwMUZDNDAwOCwKKzB4NjY2QzY3N0MsIDB4QkQ5NDY1NUMsIDB4NjUwMzY0MUMsIDB4NjRGMzdGMDQsCisweDYwRDMzNDlDLCAweEUwNjcwNDU0LCAweDA3RkU0MDA4LCAweDA1N0M2MEIzLAorMHgyRjU2NjU1QywgMHgwN0FDNjBFMywgMHg0MDA4RTA2QywgMHhBMDA1MDFGRSwKKzB4MEJCODYwQjMsIDB4MDNDMjAxM0UsIDB4MDEzRjA0NjIsIDB4NjBFMzA2MUMsCisweEUwNjUwNThDLCAweDAxRkM0MDA4LCAweDY2NkM2NzdDLCAweEJENzA2NTVDLAorMHg2MjAzNjQxQywgMHhFMUI4N0YwNCwgMHg2NEYzNjExQywgMHg2MEQzMzQxQywKKzB4RTA2ODA0MjQsIDB4MDVGRTQwMDgsIDB4MDc1QzYwQjMsIDB4MkY3NjY3N0MsCisweDA3QUM2MEUzLCAweDQwMDhFMDZELCAweDYwQjMwMUZFLCAweDYwRTMwNjFDLAorMHhFMDY1MDU4QywgMHgwMkZDNDAwOCwgMHg2NjZDNjc3QywgMHhCRDUwNjU1QywKKzB4NjcwMzY0MkMsIDB4RTJDMDdGMDQsIDB4NjZGMzYyMkMsIDB4NjBEMzM2MkMsCisweEUwNjcwNjc0LCAweDA3RkU0MDA4LCAweDAyN0M2MEMzLCAweDJGMjY2MjJDLAorMHgwN0FDNjBFMywgMHg0MDA4RTA2QywgMHg2MEMzMDJGRSwgMHg2MEUzMDYyQywKKzB4RTA2NTA1OEMsIDB4MDJGQzQwMDgsIDB4NjY2QzY3N0MsIDB4QkQzMDY1NUMsCisweDYyMDM2NDJDLCAweEU3Qzg3RjA0LCAweDY2RjM2NzdDLCAweDYwRDMzNjdDLAorMHhFMDY4MDYyNCwgMHgwNkZFNDAwOCwgMHgwMjZDNjBDMywgMHgyRjI2NjIyQywKKzB4MDdBQzYwRTMsIDB4NDAwOEUwNkQsIDB4NjBDMzAyRkUsIDB4NjBFMzA2MkMsCisweEUwNjUwNThDLCAweDAyRkM0MDA4LCAweDY2NkM2NzdDLCAweEJEMTA2NTVDLAorMHg2MTAzNjQyQywgMHg2NjkzN0YwNCwgMHg2MkYzNzYwOCwgMHg2MEQzMzI2QywKKzB4MDIxNDdEMDEsIDB4RTYwNTYyREMsIDB4N0MwMTMyNjMsIDB4N0IwMThEMDIsCisweDAwMDlBRUZBLCAweDAwMDlBMTdCLCAweEU3RkY5QkQ1LCAweDY3N0MzNUJDLAorMHg2MjUwRUUwOCwgMHgzMjcwNjIyQywgMHg3MTAxODkwNCwgMHgzMkUzNjIxQywKKzB4NzUwMThGRjcsIDB4REREODlDQzgsIDB4M0Q0NTM0QzgsIDB4NDAwOEUwNjQsCisweDRFMDkwRTBBLCAweDBGRTQ2NTkzLCAweDcwMjQzNUJDLCAweDY0RUM2NjFDLAorMHgwRjU2QkNCNCwgMHg2NEUzNkUwQywgMHg2NUUzNzQwMSwgMHg0NTA4NjI0MywKKzB4MzVFQzQyMDgsIDB4NDUwODMyNEMsIDB4NDUwMDQyMDgsIDB4MzI5QzQyMDAsCisweDYxQjM3QjBDLCAweDM4QkM2ODIzLCAweDcxMTRFMDZFLCAweDQwMDg2QjIzLAorMHg5MUEyM0IxQywgMHg3MDA0MEY4NiwgMHg2ODIzNjQxMywgMHgwRkI2MzU5QywKKzB4NzAwNDM4MUMsIDB4MEY4Njc0MTQsIDB4NzAwNDM0MkMsIDB4Njc1Mzk4OTYsCisweDBGNDY2MjUzLCAweDcwMDQzNzhDLCAweDZCNTM3ODE0LCAweDcxMTQzMjFDLAorMHgzQjhDMEY3NiwgMHgzNTFDNzAwNCwgMHgwRkI2OTc4OSwgMHgzOTdDNzAwNCwKKzB4NzAwNDBGMjYsIDB4RUQwMDY4OTMsIDB4MEY1NkVDMDUsIDB4NkFEM0U5NTYsCisweEUwNkU0OTA4LCAweDAyRkU0MDA4LCAweDAxMkM2MEEzLCAweDJGMTY2MTFDLAorMHgwNzhDNjBFMywgMHg0MDA4RTA3MywgMHg2MEEzMDRGRSwgMHhFMDZFMDY0QywKKzB4MEJGRTQwMDgsIDB4MDVCQzYwRTMsIDB4NDAwOEUwNjUsIDB4Njc3QzAxRkMsCisweDY1NUM2NjZDLCAweDY0MUNCQzg1LCAweDdGMDQ2NDAzLCAweDYwRDM2RERDLAorMHhFMDZGMEY0NCwgMHgwNEZFNDAwOCwgMHgwNTRDNjBBMywgMHgyRjU2NjU1QywKKzB4MDc4QzYwRTMsIDB4NDAwOEUwNzQsIDB4NjBBMzBCRkUsIDB4RTA2RTA2QkMsCisweDBCRkU0MDA4LCAweDA1QkM2MEUzLCAweDQwMDhFMDY1LCAweDY3N0MwMUZDLAorMHg2NTVDNjY2QywgMHg2NDFDQkM2NSwgMHg3RjA0NjQwMywgMHg3NTEwNjVGMywKKzB4MDU0NDYwRDMsIDB4NDAwOEUwNkUsIDB4NjBDMzA3RkUsIDB4NjU1QzA1N0MsCisweDYwRTMyRjU2LCAweEUwNzMwNzhDLCAweDBCRkU0MDA4LCAweDA2QkM2MEMzLAorMHg0MDA4RTA2RSwgMHg2MEUzMDFGRSwgMHhFMDY1MDUxQywgMHgwQkZDNDAwOCwKKzB4NjY2QzY3N0MsIDB4QkM0NDY1NUMsIDB4NjEwMzY0QkMsIDB4NkJGMzdGMDQsCisweDYwRDM3QjIwLCAweEUwNkYwQjE0LCAweDAxRkU0MDA4LCAweDA0MUM2MEMzLAorMHgyRjQ2NjQ0QywgMHgwNzhDNjBFMywgMHg0MDA4RTA3NCwgMHg2MEMzMDFGRSwKKzB4RTA2RTA2MUMsIDB4MEJGRTQwMDgsIDB4MDVCQzYwRTMsIDB4NDAwOEUwNjUsCisweEEwMDUwMUZDLCAweDAxMzY2NzdDLCAweDAyODIxMkMwLCAweDAxMzcwMTQyLAorMHg2NTVDNjY2QywgMHg2NDFDQkMxRCwgMHg3RjA0NjIwMywgMHgzNDlDNjRGMywKKzB4MDQyNDYwRDMsIDB4NDAwOEUwNzAsIDB4NjBBMzA0RkUsIDB4NjU1QzA1NEMsCisweDYwRTMyRjU2LCAweEUwNzUwNzhDLCAweDBCRkU0MDA4LCAweDA2QkM2MEEzLAorMHg0MDA4RTA2RSwgMHg2MEUzMDFGRSwgMHhFMDY1MDUxQywgMHgwQkZDNDAwOCwKKzB4NjY2QzY3N0MsIDB4QkJGQzY1NUMsIDB4NjEwMzY0QkMsIDB4RUJCODdGMDQsCisweDY1RjM2QkJDLCAweDYwRDMzNUJDLCAweEUwNzEwNTE0LCAweDA3RkU0MDA4LAorMHgwNDdDNjBBMywgMHgyRjQ2NjQ0QywgMHgwNzhDNjBFMywgMHg0MDA4RTA3NiwKKzB4NjBBMzBCRkUsIDB4RTA2RTA2QkMsIDB4MDFGRTQwMDgsIDB4MDUxQzYwRTMsCisweDQwMDhFMDY1LCAweDY3N0MwQkZDLCAweDY1NUM2NjZDLCAweDY0QkNCQkQ5LAorMHg3RjA0NjEwMywgMHg2MjJDRTJDMCwgMHgzQjJDNkJGMywgMHgwQjE0NjBEMywKKzB4NDAwOEUwNzAsIDB4NjBDMzAyRkUsIDB4Njc3QzA3MkMsIDB4NjBFMzJGNzYsCisweEUwNzUwNzhDLCAweDAyRkU0MDA4LCAweDA2MkM2MEMzLCAweDQwMDhFMDZFLAorMHg2MEUzMDJGRSwgMHhFMDY1MDUyQywgMHgwMkZDNDAwOCwgMHg2NjZDNjc3QywKKzB4QkJCNjY1NUMsIDB4NjcwMzY0MkMsIDB4RUJDODdGMDQsIDB4NjZGMzZCQkMsCisweDYwRDMzNkJDLCAweEUwNzEwNjc0LCAweDA2RkU0MDA4LCAweDAyNkM2MEMzLAorMHgyRjI2NjIyQywgMHgwNzhDNjBFMywgMHg0MDA4RTA3NiwgMHg2MEMzMDJGRSwKKzB4RTA2RTA2MkMsIDB4MDJGRTQwMDgsIDB4MDUyQzYwRTMsIDB4NDAwOEUwNjUsCisweDY3N0MwMkZDLCAweDY1NUM2NjZDLCAweDY0MkNCQjkzLCAweDdGMDQ2MTAzLAorMHg3MjA4NjI5MywgMHgzNjJDNjZGMywgMHg3RDAxNjBEMywgMHg2MkRDMDYxNCwKKzB4MzI2M0U2MDUsIDB4OEQwMjdDMDEsIDB4QUVFMjdBMDEsIDB4NkVGMzAwMDksCisweEUyQjA2OEYzLCAweDZBRjNFMDVBLCAweDM4OUM3RTE4LCAweDY5RjM2MjJDLAorMHg3QTA4NDAwOCwgMHg2N0YzNkRGMywgMHgzOTJDNjFGMywgMHg2Q0EzMEZFNiwKKzB4NzcyMDdEMTAsIDB4RTQwMDcxMjgsIDB4RUIwNTY1RjMsIDB4NjA0QzY2NTQsCisweDY2RDQ2MjZDLCAweDJFNjA0MjIxLCAweDA0OEM2Njc0LCAweDYyNkMyQzIwLAorMHgwOTQ0NDIyMSwgMHgyMTIwNzAwMSwgMHgzMkIzNjIwQywgMHg3MTAxNjQwMywKKzB4OEZFQjdFMDEsIDB4RTA1QTdDMDEsIDB4NkVGMzQwMDgsIDB4N0UzMDBCRkUsCisweEVDMTlFRDAwLCAweDY2QjM2NUEzLCAweEJCN0U2NERDLCAweDYyREM3RDAxLAorMHgyRTAwMzJDMywgMHg3RTAxOEZGNiwgMHg2NjZDRTZCMCwgMHg2QkYzNkVGMywKKzB4N0IyODNFNkMsIDB4RUM0Q0EwMTAsIDB4Q0NDQ0NDQ0QsIDB4NjREMzZEREMsCisweDY0NEM3NEY0LCAweEJCNjg2NUIzLCAweDY3RjM2NkUzLCAweDc3MzA2NTAzLAorMHgwNzU0NjBEMywgMHg2MkRDN0QwMSwgMHg4QkVGMzJDMywgMHg3QjMwNkJGMywKKzB4NjFCMzY3QjMsIDB4RUQ4MDY0QjMsIDB4NzEwMjc3MDEsIDB4NkREQzc0MDMsCisweERDMzdFNTAwLCAweDYwNUNERTM3LCAweDA5MUMwODRDLCAweDBBN0M2NjhDLAorMHg2OTlDNDYyOCwgMHg0OTI4NDYxOCwgMHgwNUJDNkFBQywgMHg0QTE4MjY5QiwKKzB4NzAwNDY4MDMsIDB4NjU1QzI2QUIsIDB4NjIwQzM4Q0MsIDB4MzhFQzI2NUIsCisweDI4NjIzMkQzLCAweDY1MDM4RkU3LCAweDY0NENFNEI4LCAweDNDNEM2Q0YzLAorMHg2RUYzNzQwOCwgMHhFMkIwRTY1OCwgMHgzRTRDNkFGMywgMHg3NDA4NkJGMywKKzB4NDYwODYxRjMsIDB4NjIyQzY4RjMsIDB4N0EwODY5RjMsIDB4MzE0QzdCMTgsCisweDM4NkM2NEYzLCAweDZEQTMzOTJDLCAweDc0Mjg2N0IzLCAweDY2QzRFNTAwLAorMHg2MjZDNjA1QywgMHg0MjIxNjZFNCwgMHg2NjE0Mjc2MCwgMHgyRDIwMDU4QywKKzB4NDIyMTYyNkMsIDB4NzAwMTA5NTQsIDB4NjIwQzI0MjAsIDB4MzI2M0U2MDUsCisweDc0MDE2NTAzLCAweDhGRUE3NzAxLCAweEUwNUU3RDAxLCAweDAyRkQ0MDA4LAorMHg2RDJERTlEMCwgMHg2OTlDN0QwNywgMHhFRTAwQTAwQiwgMHg2NkIzNjVBMywKKzB4NjRFQ0JBRkIsIDB4NjIwMzY3RjMsIDB4NjBFQzM3OUMsIDB4NzAwMTA3MjQsCisweDYyRUM2RTAzLCAweDhCRjEzMkQzLCAweDQwMDhFMDVGLCAweEVBQjAwOEZELAorMHg2REYzNkFBQywgMHg2QkYzNkM4RCwgMHg3QzBEM0RBQywgMHg3QjI4QTAxMiwKKzB4MDAwMEEyODAsIDB4MDAxQkMwMDAsIDB4NjRFMzZFRUMsIDB4NjQ0Qzc0RjQsCisweEJBREE2NUIzLCAweDYyRjM2NkQzLCAweDMyOUM2MTAzLCAweDdFMDE2MEUzLAorMHg2MkVDMDIxNCwgMHg4QkVGMzJDMywgMHgzRDlDNkRGMywgMHg2N0QzNkVEMywKKzB4RUM4MDYxRDMsIDB4NzcwMjdFMDEsIDB4NkNDQzcxMDMsIDB4REJCOUU0MDAsCisweDYwNENEQUI5LCAweDA2N0MwNDFDLCAweDA4RUM2NTRDLCAweDY2NkM0NTI4LAorMHg0NjI4NDUxOCwgMHgwOURDNjg4QywgMHg0ODE4MjU2QiwgMHg3MDA0NjYwMywKKzB4Njk5QzI1OEIsIDB4NjIwQzM2QkMsIDB4MzZBQzI1OUIsIDB4MjY1MjMyQzMsCisweDY0MDM4RkU3LCAweDQwMDhFMDY0LCAweDcwRTAwN0ZDLCAweDcwNkMwQ0ZDLAorMHgwRjg2NjhDQywgMHgwREZDNzA5OCwgMHg2QURDNzA2QywgMHg3MDhDMEZBNiwKKzB4OUJCRjBFRkUsIDB4RTI1NDNFQjIsIDB4Njk3Q0UxMDAsIDB4NDIwODhGMDIsCisweDAwMDlBMTYzLCAweDQwMDhFMDYzLCAweDZFRjMwNUZFLCAweDNFMkM5NkIzLAorMHg2NEUzMzU2QywgMHhFREZGRTcwMywgMHgzMkQwNjI1MCwgMHg2MjJDOEQwNywKKzB4NjgxQzcxMDEsIDB4MjQyMDM4NzMsIDB4OEZGNTc1MDUsIDB4RTA2NDc0MDEsCisweDBBRkM0MDA4LCAweDY0QUM2NUUzLCAweDY2MUNCQTE4LCAweEUwNjM2NzBDLAorMHg2MjczNDAwOCwgMHg0MjA4MEJGRSwgMHg3NzAxMzI3QywgMHgzQTJDNkFCMywKKzB4NDgwODY4NzMsIDB4OTQ4RjZFQTMsIDB4M0U0QzM4N0MsIDB4M0I4Qzc0RkYsCisweDM4MjgzQTRDLCAweEVDMDAzQjRDLCAweDYwODNERDg4LCAweDY1NUMwNUVDLAorMHhFMDY1MkY1NiwgMHg2N0IwNDAwOCwgMHg2NUEwNjZFNCwgMHg2NzdDMDFGQywKKzB4NjU1QzY2NkMsIDB4NjQxQ0JBMUQsIDB4N0MwMTdGMDQsIDB4RTQwNDYyQ0MsCisweDJEMDAzMjQzLCAweDdEMDE4RkU5LCAweEUwNjNFNTU0LCAweDY3RjM0NTA4LAorMHgzNzVDNDAwOCwgMHg5NjY4MDVGRSwgMHgzNTZDRURGRiwgMHg2RERDNjQ3MywKKzB4RUUwNEUxMDAsIDB4NjY2QzY2NTAsIDB4ODkwNjM2RDAsIDB4NjIxQzcxMDEsCisweDI0NjAzMkUzLCAweDhGRjU3NTA1LCAweEUwNjQ3NDAxLCAweDAyRkM0MDA4LAorMHg2NDJDNjU3MywgMHg2NjFDQjlDQSwgMHg2RTIzNjIwQywgMHhFMDYzNEUwOCwKKzB4NzIwMTNFMkMsIDB4MEJGRTQwMDgsIDB4NDcwODY3MjMsIDB4NkFCMzM3MkMsCisweDY4NzMzQUVDLCAweDZFQTMzOEU4LCAweDNFMUM5MTQwLCAweDNCN0M3MUZGLAorMHgzQjFDM0ExQywgMHgwRjk2NzA0QywgMHhFQzAwRTkwNCwgMHg2MDgzREQ2MCwKKzB4NjQ0QzA0RUMsIDB4RTA2NTJGNDYsIDB4NjdCMDQwMDgsIDB4NjVBMDY2RTQsCisweDY3N0MwMUZDLCAweDY1NUM2NjZDLCAweDY0MUNCOUNCLCAweDdDMDE3RjA0LAorMHgzMjkzNjJDQywgMHg4RkVBMkQwMCwgMHhFMDc2N0QwMSwgMHgwOUZFNDAwOCwKKzB4NzBCNEU0NTQsIDB4NjdGMzQ0MDgsIDB4Mzc0QzA1RkUsIDB4RURGRjk2MTcsCisweDM1NkM2NDczLCAweEUxMDA2RERDLCAweDY2NTBFRTA0LCAweDM2RDA2NjZDLAorMHg3MTAxODkwNiwgMHgzMkUzNjIxQywgMHg3NTA5MjQ2MCwgMHg3NDAxOEZGNSwKKzB4RTA2NEEwMDYsIDB4MDVCQTBCQjgsIDB4MDVDOTA1QkIsIDB4MDVERDA1Q0EsCisweDY1NzM0MDA4LCAweDY2MUMwN0ZDLCAweDY0N0NCOTcwLCAweDY2MjM2MjBDLAorMHg0NjA4RTA2MywgMHg0NjAwNDAwOCwgMHgzNjJDMEJGRSwgMHg2ODIzNzIwMSwKKzB4M0E2QzZBQjMsIDB4NDgwMDQ4MDgsIDB4OTE2NzZFQTMsIDB4M0UxQzM4MkMsCisweDNCOEM3MUZGLCAweDM4NjgzQTFDLCAweEVDMDAzQjFDLCAweDYwODNERDM1LAorMHg2NDRDMDRFQywgMHhFMDY1MkY0NiwgMHg2N0IwNDAwOCwgMHg2NUEwNjZFNCwKKzB4Njc3QzAxRkMsIDB4NjU1QzY2NkMsIDB4NjQxQ0I5NzMsIDB4N0MwMTdGMDQsCisweEU1MDg2MkNDLCAweDJEMDAzMjUzLCAweDdEMDE4RkU5LCAweDQwMDhFMDYzLAorMHgwNUZFRTY1NCwgMHg2NEYzNDYwOCwgMHhFQ0ZGOTc0MSwgMHgzNTdDMzQ2QywKKzB4RUUwMDZDQ0MsIDB4NjI1MEVEMDQsIDB4MzJDMDYyMkMsIDB4N0UwMTg5MDYsCisweDM4RDM2OEVDLCAweDc1MDkyNDIwLCAweDc0MDE4RkY1LCAweDQwMDhFMDc3LAorMHg3MDA0MDVGRSwgMHg2NDkzMDZGRSwgMHhFQTU0QjlBNywgMHg2NUYzNEEwOCwKKzB4NjQwQzM1QUMsIDB4NjZFQ0I5MUEsIDB4NjYxMzYxMEMsIDB4NDYwOEUwNjMsCisweDQ2MDA0MDA4LCAweDM2MUMwQkZFLCAweDY4MTM3MTAxLCAweDNBNkM2QUIzLAorMHg0ODAwNDgwOCwgMHg5MjEzNkVBMywgMHgzRTJDMzgxQywgMHgzQjhDNzJGRiwKKzB4Mzg2ODNBMkMsIDB4RUMwMDNCMkMsIDB4RTA3N0REMEIsIDB4MDVGRTQwMDgsCisweDA2RkU3MDA0LCAweDY0OTNCOTgxLCAweDAwMDlBMDEwLCAweDA2MDEwNURFLAorMHgwMDAwMDYwMiwgMHgwMDAwQjI4MCwgMHgwMDFCQzAwMCwgMHgwMDExNDJFNCwKKzB4MDAxMTQyRTgsIDB4MDAxMTQyRUQsIDB4MDAxMTQyRjUsIDB4NjA4MzY0MDMsCisweDY3N0MwN0VDLCAweDY3QjAyRjc2LCAweDY1QTA2NkU0LCAweDY2NkM2NzdDLAorMHhCOTA2NjU1QywgMHg3RjA0NjQ0QywgMHg2MUNDN0MwMSwgMHgzMTIzRTIwOCwKKzB4OEZEMjJEMDAsIDB4QTBGQzdEMDEsIDB4RTA2MzAwMDksIDB4MDVGRTQwMDgsCisweDk2RDA2N0YzLCAweDM1NkMzNzJDLCAweEVFRkY2NDczLCAweDMyRTA2MjUwLAorMHg2MjJDOEQwOCwgMHg2ODFDNzEwMSwgMHgzODYzRTYwOCwgMHg3NTA1MjQyMCwKKzB4NzQwMThGRjQsIDB4NDAwOEUwNjQsIDB4NjU3MzAyRkMsIDB4QjhCNTY0MkMsCisweDY1MEM2NjFDLCAweDQwMDhFMDYzLCAweDBCRkU2MjUzLCAweDMyNUM0MjA4LAorMHg2QUIzNzUwMSwgMHg2ODUzM0EyQywgMHg2RUEzNDgwOCwgMHgzODVDOTRBQywKKzB4NzRGRjNFNEMsIDB4M0E0QzNCOEMsIDB4M0I0QzM4MjgsIDB4REQ5NkVDMDAsCisweDA2RUM2MDgzLCAweDJGNjY2NjZDLCAweDQwMDhFMDY1LCAweDY2RTQ2N0IwLAorMHgwMUZDNjVBMCwgMHg2NjZDNjc3QywgMHhCOEJBNjU1QywgMHg3RjA0NjQxQywKKzB4NjJDQzdDMDEsIDB4MzI0M0U0MDQsIDB4OEZFOTJEMDAsIDB4RTU1NDdEMDEsCisweDQ1MDhFMDYzLCAweDQwMDg2N0YzLCAweDA1RkUzNzVDLCAweEVFRkY5Njg1LAorMHg2NDczMzU2QywgMHhFMTAwNkVFQywgMHg2NjZDNjY1MCwgMHg4OTA3MzZFMCwKKzB4NjIxQzcxMDEsIDB4MzI4M0U4MDgsIDB4NzUwOTI0NjAsIDB4NzQwMThGRjQsCisweDQwMDhFMDY0LCAweDY1NzMwQUZDLCAweEI4Njc2NEFDLCAweDYyMEM2NjFDLAorMHhFMDYzNjYyMywgMHg0MDA4NDYwOCwgMHgwQkZFNDYwMCwgMHg3MjAxMzYyQywKKzB4NkFCMzY4MjMsIDB4NDgwODNBNkMsIDB4NkVBMzQ4MDAsIDB4MzgyQzkxNUUsCisweDcxRkYzRTFDLCAweDNBMUMzQjhDLCAweDNCMUMzODY4LCAweERENkZFQzAwLAorMHgwNEVDNjA4MywgMHgyRjQ2NjQ0QywgMHg0MDA4RTA2NSwgMHg2NkU0NjdCMCwKKzB4MDFGQzY1QTAsIDB4NjY2QzY3N0MsIDB4Qjg2QTY1NUMsIDB4N0YwNDY0MUMsCisweDYyQ0M3QzAxLCAweDMyNTNFNTA4LCAweDhGRTkyRDAwLCAweEUwNjM3RDAxLAorMHhFNjU0NDAwOCwgMHg0NjA4MDVGRSwgMHg5NzM4NjRGMywgMHgzNDZDRUNGRiwKKzB4NkNDQzM1N0MsIDB4RUQwOEVFMDAsIDB4NjY2QzY2NTAsIDB4ODkwNjM2QzAsCisweDYyRUM3RTAxLCAweDI0NjAzMkQzLCAweDhGRjU3NTA5LCAweEUwNzc3NDAxLAorMHgwNUZFNDAwOCwgMHgwNkZFNzAwNCwgMHhCODlFNjQ5MywgMHg0ODA4RTg1NCwKKzB4MzU4QzY1RjMsIDB4QjgxMTY0MEMsIDB4NjEwQzY2RUMsIDB4RTA2MzY2MTMsCisweDQwMDg0NjA4LCAweDBCRkU0NjAwLCAweDcxMDEzNjFDLCAweDZBQjM2ODEzLAorMHg0ODA4M0E2QywgMHg2RUEzNDgwMCwgMHgzODFDOTIwQSwgMHg3MkZGM0UyQywKKzB4QTAwNjNCOEMsIDB4MDUwMjNBMkMsIDB4MDUyQTA1MDMsIDB4MDU3MjA1MkIsCisweDM4NjgwNTczLCAweEVDMDAzQjJDLCAweEUwNzdERDQxLCAweDA1RkU0MDA4LAorMHgwNkZFNzAwNCwgMHg2NDkzQjg3MSwgMHg2MDgzNjQwMywgMHg2NzdDMDdFQywKKzB4NjdCMDJGNzYsIDB4NjVBMDY2RTQsIDB4NjY2QzY3N0MsIDB4QjgwODY1NUMsCisweDdGMDQ2NDRDLCAweDYxQ0M3QzAxLCAweDMxMjNFMjA4LCAweDhGRTQyRDAwLAorMHhEMzM0N0QwMSwgMHgwMDA5NDMwQiwgMHhFMDc5NjIwQywgMHgwRjI0NDAwOCwKKzB4ODgzMDYwMjMsIDB4QTI0RDhCMDEsIDB4ODg0MDAwMDksIDB4QTI0OThCMDEsCisweDIyMjgwMDA5LCAweEEyNDU4QjAxLCAweEU1RkYwMDA5LCAweDY1NUNENDJBLAorMHhFMDNBRTYwMSwgMHg4RjA0MzI1MCwgMHhFMDc5MDQ2NCwgMHg0MDA4RTIxMCwKKzB4RTA1QjBGMjQsIDB4MDVGRTQwMDgsIDB4MzU2Njk2M0IsIDB4QTE0OThCMDEsCisweDYwMjMwMDA5LCAweDY0MENDQjAxLCAweDZFMjNCODQyLCAweEUxMTg2NjBDLAorMHg4OTBGMzYxMywgMHg0MDA4RTA2MywgMHgwNEZFNDYwOCwgMHg5NzI5NDYwOCwKKzB4NDYwMDcwRTAsIDB4MDVGRTM0N0MsIDB4MzQ2Q0I4NUMsIDB4RTA2MDYyMDMsCisweDBGMjQ0MDA4LCAweENCMDI2MEUzLCAweDY0MENCODJBLCAweEUxMTg2NjBDLAorMHg4OTBGMzYxMywgMHg0MDA4RTA2MywgMHgwNEZFNDYwOCwgMHg5MTExNDYwOCwKKzB4NDYwMDcwRTAsIDB4MDVGRTM0MUMsIDB4MzQ2Q0I4NDQsIDB4RTA2MTYyMDMsCisweDBGMjQ0MDA4LCAweENCMDU2MEUzLCAweDY0MENCODEyLCAweEEwMEQ2NjBDLAorMHgwOUI0RTA3QSwgMHgwMDAwMDY0RCwgMHgwMDExNDJGRCwgMHgwMDExNDMwMSwKKzB4MDAxMTQzMDksIDB4MDAxMTQ0MDAsIDB4MDAxMTQyRDgsIDB4NDAwOEUxMTgsCisweDhGMDQzNjEzLCAweEUwNjEwRjY0LCAweEEwMTA0MDA4LCAweEUwN0EwREZDLAorMHgwNkZDNDAwOCwgMHg2MjZDNzBBNCwgMHgwNEZFNDIwOCwgMHg5N0I0NDIwOCwKKzB4NDIwMDcwRTAsIDB4MDVGRTM0N0MsIDB4MzQyQ0I4MTQsIDB4RTA3OTZEMDMsCisweDAwRkM0MDA4LCAweENCMDdEQjhFLCAweDQzMEJEMzhFLCAweDYxMEM2NDBDLAorMHg0MDA4RTA3QSwgMHg3MDlDMEYxNCwgMHhFNjE4MDJGQywgMHg4RDFDMzE2MywKKzB4RTA1RDY4MkMsIDB4MDFGQzQwMDgsIDB4MDlGQzcwRkMsIDB4MDRGRTcwRkMsCisweEQzODU2NjFDLCAweDY1OUM0MzBCLCAweEUwN0E2NTAzLCAweDAxRkM0MDA4LAorMHg2MTFDNzBBNCwgMHgwNEZFNDEwOCwgMHg5Nzg2NDEwOCwgMHgzNDdDNDEwMCwKKzB4NDMwQkQzN0UsIDB4QTAwMzM0MUMsIDB4RTA2MTZDMDMsIDB4MENGQzQwMDgsCisweEU1MDBENjdCLCAweDY0MEQ4NTYyLCAweDQwMDhFMDVCLCAweDBBRkVBMDM2LAorMHg2MDUzNjU1QywgMHgzMDVDNDAwMCwgMHg0MDA4RDY3NiwgMHg2MjJEMDI2RCwKKzB4OEYyQTMyQTAsIDB4RDM3NDZFMDMsIDB4NjRBRDQzMEIsIDB4MjIyODYyMEQsCisweEQ2NzI4OTI3LCAweDA2NkM2MEUzLCAweDQwMDhFMDYwLCAweDQ2MDAwMkZDLAorMHgzRTY3NkUyQywgMHg2MjYzOEIwMCwgMHg0MDA4RTA2MCwgMHgwRjI0Mzg2NywKKzB4NjI2MzhEMDMsIDB4NDAwOEUwNjEsIDB4RTA2MTAyRkMsIDB4NDAwODYxREMsCisweDBGMjQzMTY3LCAweDhGMDE2ODJDLCAweDYyNjM2MkQzLCAweDM0Njc2NENDLAorMHg2RDIzOEQwMSwgMHhBMDA0NjZDMywgMHg3NTAxNkM2MywgMHgzMjQzNjI1QywKKzB4RTA2MDhCQzYsIDB4MDdGQzQwMDgsIDB4NjE3Q0U0MDAsIDB4RTkwNEQ1NUMsCisweDY2NkM2NjUwLCAweDhCMDEzNjE3LCAweDY2NzM2NzdDLCAweDYyNEM3NDAxLAorMHgyNTYwMzI5MywgMHg3NTAxOEZGNCwgMHhFMDNBRDY1NiwgMHhFNDAwMDU2QywKKzB4OEQwMTI1NTgsIDB4RTIwMjYyNDMsIDB4NDAwOEUwNjEsIDB4Njc4MzBFRkMsCisweDNFMjgzODI4LCAweDkxMTlFNTAwLCAweDYwNTM2NTVDLCAweDNBMTAwMkJDLAorMHg2MjJDOEQwQiwgMHgzQTYwOTYxMywgMHgzMjc3ODkwNywgMHhFMDYxOEIwMiwKKzB4MDJGQzQwMDgsIDB4QTAxRDYwNTMsIDB4MjU1ODBCMjQsIDB4MzI4Nzg5MDgsCisweDYyODM4QjAwLCAweEEwMTU2MDUzLCAweDA2NEQwQjI0LCAweDA5OUUwOTZDLAorMHg4RjA4MzI3NywgMHhFMDdCNjYyMywgMHgwRjE2NDAwOCwgMHgwMkZDNzA5OCwKKzB4MDFGRTcwNjgsIDB4NjI2QzY2MkMsIDB4MzI4NzYwNTMsIDB4MEI2NDhGMDIsCisweDY0NjMzNkU4LCAweDYyNUM3NTAxLCAweDhCQ0QzMjkzLCAweEUwMTRENjM1LAorMHhFNDAwMDY0NCwgMHhENTM0NjFEQywgMHg2MjUwRTcwOCwgMHgzMjE3NjIyQywKKzB4NkREQzhCMDEsIDB4NzQwMTYyRDMsIDB4MzY3MzY2NEMsIDB4OEZGNDI1MjAsCisweEU0MDA3NTAxLCAweEQ1MkQ2MUNDLCAweDYyMkM2MjUwLCAweDhCMDEzMjE3LAorMHg2MkMzNkNDQywgMHg2NjRDNzQwMSwgMHgyNTIwMzY3MywgMHg3NTAxOEZGNCwKKzB4MDAwOUEwRUMsIDB4NDAwOEUwNzksIDB4NjQyQzAyRkMsIDB4NDMwQkQzMTksCisweDY2MEM2RTQzLCAweDM2NTNFNTE4LCAweEUwNjM4OTEwLCAweDQ2MDg0MDA4LAorMHg0NjA4MDRGRSwgMHg3MEUwOTcyMiwgMHgzNDdDNDYwMCwgMHhEMzEzMDVGRSwKKzB4MzQ2QzQzMEIsIDB4RTA2MjYyMDMsIDB4MEYyNDQwMDgsIDB4Q0IwNjYwRTMsCisweDQzMEJEMzBDLCAweDY2MEM2NDAzLCAweDM2NTNFNTE4LCAweEUwNjM4OTI4LAorMHg0NjA4NDAwOCwgMHg0NjA4MDRGRSwgMHg3MEUwOTcwOCwgMHgzNDdDNDYwMCwKKzB4RDMwNjA1RkUsIDB4MzQ2QzQzMEIsIDB4NkMwM0EwMUQsIDB4MDAwMDA2NEQsCisweDAwMTE0MkU4LCAweDAwMTE0OEUwLCAweDAwMTE0OEJBLCAweDAwMTE0OTM0LAorMHgwMDExNDAwMCwgMHgwMDExNDAwOCwgMHgwMDExNDc3NCwgMHgwMDExNDAxMSwKKzB4MDAxMTQyRTQsIDB4MDAxMTQyRDgsIDB4MDAxMTQyRUQsIDB4MDAxMTQyRjUsCisweDQwMDhFMDYyLCAweDYwRTMwQ0ZDLCAweEQzOUNDQjA4LCAweDY0MDM0MzBCLAorMHhFMDdBNjEwQywgMHg0MDA4RTYxOCwgMHg4RDFDMzE2MywgMHhFMDVEMEYxNCwKKzB4MDdGQzQwMDgsIDB4MDlGQzcwRkMsIDB4MDRGRTcwRkMsIDB4RDM5NDY2N0MsCisweDY1OUM0MzBCLCAweEUwN0E2NTAzLCAweDAxRkM0MDA4LCAweDYxMUM3MEE0LAorMHgwNEZFNDEwOCwgMHg5RDc0NDEwOCwgMHgzNERDNDEwMCwgMHg0MzBCRDM4RCwKKzB4QTAwMzM0MUMsIDB4RTA2MjZEMDMsIDB4MERGQzQwMDgsIDB4RTUwMEQ2OEEsCisweDY0MEQ4NTYyLCAweDQwMDhFMDVCLCAweDAxRkVBMDJDLCAweDYwNTM2NTVDLAorMHgzMDVDNDAwMCwgMHg0MDA4RDY4NSwgMHg2MjJEMDI2RCwgMHg4RjIwMzIxMCwKKzB4RDM4MzZFMDMsIDB4NjQxRDQzMEIsIDB4MjIyODYyMEQsIDB4RDY4MTg5MUQsCisweDA2NkM2MEUzLCAweDQwMDhFMDYyLCAweDQ2MDAwMkZDLCAweDMxNjc2MTJDLAorMHg2MjYzOEIwMCwgMHg2NENDRTA2MiwgMHgzNDY3NDAwOCwgMHg4RjAxMEYyNCwKKzB4NjI2MzYyQzMsIDB4MzU2NzY1REMsIDB4NkMyMzhEMDEsIDB4QTAwNDY2RDMsCisweDc1MDE2RDYzLCAweDMyNDM2MjVDLCAweEUwNjI4QkQwLCAweDA3RkM0MDA4LAorMHg2MTdDRTQwMCwgMHhFOTA0RDU3MCwgMHg2MjJDNjI1MCwgMHg4QjAxMzIxNywKKzB4NjI3MzY3N0MsIDB4NjY0Qzc0MDEsIDB4MjUyMDM2OTMsIDB4NzUwMThGRjQsCisweDYxQ0NFNDAwLCAweEU3MDhENTY5LCAweDY2NkM2NjUwLCAweDhCMDEzNjE3LAorMHg2NkMzNkNDQywgMHg2MjRDNzQwMSwgMHgyNTYwMzI3MywgMHg3NTAxOEZGNCwKKzB4NjFEQ0U0MDAsIDB4NjY1MEQ1NjIsIDB4MzYxNzY2NkMsIDB4NkREQzhCMDEsCisweDc0MDE2NkQzLCAweDMyNzM2MjRDLCAweDhGRjQyNTYwLCAweEEwMDU3NTAxLAorMHgwNjREMDAwOSwgMHhFMjAwRDY1QiwgMHgwNjI0RTAzQSwgMHhFMDNBRDY1OSwKKzB4MjIyODAyNkMsIDB4RTAzOTg5NEIsIDB4MjIyODAyNkMsIDB4RTA1Qjg5NDcsCisweDBFRkU0MDA4LCAweDNFNjY5NjkwLCAweEUwNzk4OTQxLCAweDAwRkM0MDA4LAorMHg4RDAyM0U2NiwgMHhDQjAyNjQwQywgMHhEMzQ0NjQwQywgMHgwMDA5NDMwQiwKKzB4RTA1QzY2MEMsIDB4MDdGQzQwMDgsIDB4NDYwODcwMUMsIDB4NjE3QzA1RkUsCisweDk3N0E0NjA4LCAweDM1N0M0NjAwLCAweDY2MTMzNTZDLCAweDQzMEJEMzQ2LAorMHhENTQ0NjRFMywgMHg2MjAzMjAwOCwgMHgwMDI5MTUwRiwgMHg2NjAzQ0EwMSwKKzB4MjY2OEUwM0IsIDB4MDU2NDhEMjAsIDB4QzhGMDYwMjMsIDB4RDUzRjg5MDksCisweDc2RkY2NjUwLCAweDg0NTEyNTYwLCAweDgwNTE3MEZGLCAweDcwRkY4NDUyLAorMHg2MDIzODA1MiwgMHg4OTBGQzgwRiwgMHg2MjYwRDYzOSwgMHgyNjIwNzIwMSwKKzB4NzAwMTg0NjEsIDB4ODQ2MjgwNjEsIDB4QTAwNTcwMDEsIDB4RDYzMTgwNjIsCisweEUwM0JFMjAwLCAweDE2MkYwNjI0LCAweDQwMDhFMDVCLCAweDk2NDMwMkZFLAorMHg4QjY1MzI2NiwgMHhENzJCRDQyOCwgMHhENTJFNjA0MCwgMHg0MDI4QzkzRiwKKzB4NDAwODQwMDgsIDB4NTA3MjYyMDMsIDB4QzgwMkQxMkIsIDB4RTYwNDg5MUEsCisweDQ2Mjg0NjE4LCAweDI1MjIyMjZCLCAweEUyMDg2MDQwLCAweDY1MDNDOTNGLAorMHg2NjAzNDUwOCwgMHg0NTAwNDUwOCwgMHg0NjI4NDIxOCwgMHg2MjYzMjUyQiwKKzB4NDIwODQyMDgsIDB4MjUyQjQyMDAsIDB4NDIxOEUyMDgsIDB4MjUyQjQyMjgsCisweDIxNTJBMDYyLCAweDQ2MThFNjE0LCAweDIyNkI0NjI4LCAweDYwNDAyNTIyLAorMHhDOTNGRTQyOCwgMHg0NTA4NjUwMywgMHg0NTA4NDAyOCwgMHg0NTAwNDAwOCwKKzB4NDAwODQ0MTgsIDB4MjU0QkU3MjgsIDB4NDcxODQwMDAsIDB4NDcyODI1MEIsCisweEQ0MTIyNTdCLCAweDIxNTJBMDQ0LCAweDA2NEQwOUI0LCAweDAwMTE0OEUwLAorMHgwMDExNDhCQSwgMHgwMDExNDkzNCwgMHgwMDExNDAwMCwgMHgwMDExNDAwOCwKKzB4MDAxMTQ3NzQsIDB4MDAxMTQwMTEsIDB4MDAxMTQyRkQsIDB4MDAxMTQzMDEsCisweDAwMTE0MzA5LCAweDAwMTE0MkQ4LCAweDAwMTE0QTI0LCAweDAwMTE0MkY1LAorMHgwMDExNDJFRCwgMHgwMDFDMzY5NCwgMHgwMDFDM0JCNCwgMHgwMDExNDJFOCwKKzB4RTIxNEQ0MjksIDB4NDIxODYwNDAsIDB4NDAyOEM5M0YsIDB4NDAwODQwMDgsCisweEQ2MjY0MjI4LCAweDI2MDIyMDJCLCAweEU3Mjg2MDQwLCAweDY1MDNDOTNGLAorMHg0NTA4NDUwOCwgMHg0NTAwNDAyOCwgMHg0MDA4NDcxOCwgMHg0MDA4MjU3QiwKKzB4NDAwMEU3MjgsIDB4MjUwQjQ3MTgsIDB4RDIxRDQ3MjgsIDB4MjI1MjI1N0IsCisweEQ3MUM2MjQwLCAweDA3MjRFMDQ0LCAweDNGM0M5MzJDLCAweDRGMTY0RjA2LAorMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwgMHg2QUY2NkJGNiwgMHgwMDBCNjlGNiwKKzB4MkZFNjY4RjYsIDB4NjI0M0QxMTQsIDB4RTQwMjg1MTIsIDB4NkUyRDY3MEQsCisweEU1MDBBMDBGLCAweDYwNTM2NTVELCAweDMwNUM0MDAwLCAweDQwMDhEMTBGLAorMHg2MjJEMDIxRCwgMHg4QjAzMzJFMCwgMHgwNDFDNzEwOCwgMHg2NDRDQTAwNCwKKzB4NjI1RDc1MDEsIDB4OEJFRDMyNzMsIDB4NDYxOEU2MDIsIDB4NjA0RDI0NjksCisweDZFRjYwMDBCLCAweDAwMDAwMUYwLCAweDAwMTE0MkU4LCAweDAwMUMzNjk0LAorMHgwMDFDM0JCNCwgMHgwMDExNDJEOCwgMHgwMDExNDAwMCwgMHgwMDExNDAwOCwKKzB4RDc2NkQ1NjUsIDB4NjI3MjUxNTEsIDB4MzIxQ0UzNDAsIDB4NTE1MjI3MjIsCisweDMzN0M1MjcxLCAweDE3MjEzMjFDLCAweDUyNzI1MTUzLCAweDMyMUM2NDRDLAorMHgxNzIyRDE1RiwgMHg2NjEyNTI1NSwgMHgyMTYyMzYyQywgMHgzMTZDNTE3MywKKzB4NjE1MjE3MTMsIDB4RDY1QjUyNzQsIDB4MTcyNDMyMUMsIDB4NTI3NTUxNTQsCisweDE3MjUzMjFDLCAweDUyNzY1MTU4LCAweDE3MjYzMjFDLCAweDUxNzc2MjYyLAorMHgxNzE3MzEyQywgMHg1MTc4NTI2MSwgMHgxNzE4MzEyQywgMHg1MTc5NTI2MiwKKzB4MTcxOTMxMkMsIDB4NTE3QTUyNjMsIDB4MTcxQTMxMkMsIDB4NTE3QjUyNjQsCisweDE3MUIzMTJDLCAweDUxN0M1MjY1LCAweDE3MUMzMTJDLCAweDUxN0Q1MjY2LAorMHgxNzFEMzEyQywgMHg1MTdFNTI2NywgMHgxNzFFMzEyQywgMHg1MjdGNTE2OCwKKzB4MzIxQ0Q2NDUsIDB4NjI2MjE3MkYsIDB4NzY5NDYxMzIsIDB4MjMxMjMxMkMsCisweDUyMzE2MTYyLCAweDMyMUNENjQxLCAweDUxNUMxMzIxLCAweDM1MUM1NTMyLAorMHg2MTYyMTM1MiwgMHg0MTI5NTIzNSwgMHgxMzI1MzIxQywgMHg1NjM2NTU2MSwKKzB4MzY1QzQ1MjksIDB4MTM2NkU1MzgsIDB4NTUzMTI0NTAsIDB4NzEwNDYxNDMsCisweDY2NzIyMTUyLCAweDc1MDg2NTQzLCAweDU2NzEyNTYyLCAweDc1MEM2NTQzLAorMHg1NjcyMjU2MiwgMHg3NTEwNjU0MywgMHg1Njc1MjU2MiwgMHg3NTE0NjU0MywKKzB4NTY3MzI1NjIsIDB4NzUxODY1NDMsIDB4NTY3NjI1NjIsIDB4NzUxQzY1NDMsCisweDU2MzIyNTYyLCAweDc1MjA2NTQzLCAweDY2MzIyNTYyLCAweDc1MjQ2NTQzLAorMHg1Njc0MjU2MiwgMHg3NTI4NjU0MywgMHg1NjM0MjU2MiwgMHg3NTJDNjU0MywKKzB4NTUzMzI1NjIsIDB4NzIzMDYyNDMsIDB4NTUzNTIyNTIsIDB4NzIzNDYyNDMsCisweDU2MzYyMjUyLCAweDI0NjI3NDM4LCAweDEzNDFFNDAwLCAweDE3NDEyNzQyLAorMHgxNzQ1MTc0MiwgMHgxNzQ2MTc0MywgMHgyMzQyMTM0MiwgMHgxMzQ0MTc0NCwKKzB4MTM0NTEzNDMsIDB4MTM0NjAwMEIsIDB4RDUxMEUxMjQsIDB4NTE1NzI0MTAsCisweDUyNTgxNDExLCAweDU3NTkxNDIyLCAweDUxNUExNDczLCAweDUyNUIxNDE0LAorMHg1NzVDMTQyNSwgMHg1MjVEMTQ3NiwgMHgxNDI3RTcwMCwgMHgxNDY4NTY1RSwKKzB4MTQ2OTU2NUYsIDB4MTU3ODE1NzcsIDB4MTU3QTE1NzksIDB4MTU3QzE1N0IsCisweDE1N0UxNTdELCAweDE1N0YwMDBCLCAweDAwMUMzNjlDLCAweDAwMjAzNTFDLAorMHgwMDIwMzU3OCwgMHgwMDFDM0NBMCwgMHgwMDFDMzZGNCwgMHgwMDFDM0I4OCwKKzB4NkU3MjYxNTcsIDB4MjE2NzZFNjksIDB4Njk2ODU0MjAsIDB4NkY2NDIwNzMsCisweDY1NkM2NzZFLCAweDc0NkY2RTIwLCAweDY1NjU2MjIwLCAweDYxNjMyMDZFLAorMHg3MjYyNjk2QywgMHg2NDY1NzQ2MSwgMHgwMDAwMDAwQSwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorfTsKKworY29uc3QgdTMyX3QgemNGd0J1ZkltYWdlU2l6ZT04Mzk2ODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGZ3c3BpdS5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwZndzcGl1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRhN2ZmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGZ3c3BpdS5jCkBAIC0wLDAgKzEsNjU1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICIuLi84MDIxMWNvcmUvY3ByZWNvbXAuaCIKKworY29uc3QgdTMyX3QgemNGd0ltYWdlU1BJW109eworMHgwMDA5MDAwQiwgMHg0RjIyMkZFNiwgMHhCMDE4N0ZGQywgMHhFNjAwMDAwOSwKKzB4OTQzREQ1MjAsIDB4Qzg0MDYwNTIsIDB4MkYwMjhGMDMsIDB4OEZGOTM2NDIsCisweEQ0MUQ3NjAxLCAweDRFMEJERTFELCAweEQ0MUQwMDA5LCAweDAwMDk0RTBCLAorMHg0RTBCRDQxQywgMHg3RjA0MDAwOSwgMHhBMDIxNEYyNiwgMHg0RjIyNkVGNiwKKzB4RTIwNUQxMTksIDB4MjEyMkU0MDAsIDB4OTIyMjIxNDIsIDB4OEJGRDQyMTAsCisweDQ1MEJENTE2LCAweEQ2MTYwMDA5LCAweDAwMDk0NjBCLCAweEU1RkZENzE1LAorMHgyNzUyNjU1RCwgMHhFMUZGRDcxNCwgMHhENDE0NTA3OSwgMHgxNzA5Q0IwMSwKKzB4MTcxMTI3MTIsIDB4MjQxMkUxMDEsIDB4NEYyNkQ0MTEsIDB4MjQxMDAwMEIsCisweERFMTFERDEwLCAweDAwMDk0RDBCLCAweDAwMDk0RTBCLCAweDAwMDlBRkZBLAorMHgwM0U4MjcxMCwgMHgwMDFDMDAxQywgMHgwMDExNjU5NCwgMHgwMDExNEVCRSwKKzB4MDAxMTY1QTQsIDB4MDAxMTY1QkMsIDB4MDAxRDQwMDQsIDB4MDAxMTRGQTAsCisweDAwMTE0Mzc4LCAweDAwMUMzNTEwLCAweDAwMUMzNjI0LCAweDAwMUUyMTJDLAorMHgwMDExNjRGQywgMHgwMDExNDcwMCwgMHgwMDExNTg5QywgMHgyRkE2MkY5NiwKKzB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsIDB4N0ZDODRGMjIsIDB4RDI4REREOEMsCisweDYxRDM2MEQwLCAweDgwRjQ3MTAxLCAweDQyMEI2MDEwLCAweDIwMDg4MEY4LAorMHg2RTAzOEYxMCwgMHhEQjg5RDQ4OCwgMHhENDg5NkE0MCwgMHg0QjBCREM4OSwKKzB4NjdDMDY1QUMsIDB4Njk3Q0RFODgsIDB4NDEwODYxOTMsIDB4MzE5ODQxMDgsCisweDNFMUM0MTA4LCAweDY2RDI4NEY4LCAweDIwMDg2MDBDLCAweDJFNjI4RjEzLAorMHhFNDAwODRGNCwgMHhEQTgxNjcwQywgMHgzMjczNjI0RCwgMHhBMEQzOEIwMSwKKzB4NjQ0RDAwMDksIDB4MzVBQzY1NDMsIDB4Njk0MzY2NTIsIDB4MzlFQzZCNjIsCisweEFGRjExOUIxLCAweDg4MDE3NDA0LCAweDg0RjQ4QjE1LCAweDJFNzBFNzAwLAorMHhEQTc2NkUwQywgMHgzMkUzNjI3RCwgMHhBMEM0OEIwMSwgMHg2NzdEMDAwOSwKKzB4NkM3MzY2QTMsIDB4NjU3Mzc2MDQsIDB4MzU2QzNDQUMsIDB4NkQ1MjY0QzIsCisweEFGRUY3NzA4LCAweEUyQjAyNEQyLCAweDMwMjA2MjJDLCAweDg0RjQ4QjMwLAorMHg2NTBDRUMwMCwgMHhEQTY5MUY1MywgMHg1NUYzRTkwNCwgMHgzMjUzNjJDRCwKKzB4QTBBODhCMDEsIDB4NkNDRDAwMDksIDB4NjdDMzZFQTMsIDB4NkJDMzdFMDQsCisweDNCRUMzN0FDLCAweDZFQjI2RDcyLCAweERCNjJENDYxLCAweDAwMDk0QjBCLAorMHg0MTBCRDE2MSwgMHhENDYxNjREMywgMHgwMDA5NEIwQiwgMHg0NTBCRDU1RSwKKzB4RDQ1RjY0RTMsIDB4MDAwOTRCMEIsIDB4NjFEM0U2MDAsIDB4MzE2QzY2NkQsCisweDY0NkQ3NjAxLCAweDIxRTAzNDkzLCAweDRFMTk4RkY3LCAweDdDMDhBRkQ1LAorMHg2MjJDRTJCMSwgMHg4QjExMzAyMCwgMHhENTUyRDQ1NiwgMHhEQTU2REM0RiwKKzB4MDAwOTQ1MEIsIDB4NEEwQkU0MDAsIDB4RDc1NDY3QzIsIDB4NDcwQkRCNTIsCisweDRCMEIwMDA5LCAweEU5MDBFNDAzLCAweDJFOTBBMDZELCAweDYyMkNFMkIyLAorMHg4OTY4MzAyMCwgMHg2MjJDRTJCMywgMHg4QjFEMzAyMCwgMHhEQTQ1RDQ0QywKKzB4NEEwQkQ5NDIsIDB4NjU5NjAwMDksIDB4Njc5MkQ0NEEsIDB4MUY3NEREM0IsCisweDFGNUQ0RDBCLCAweEQ2MzlENDQ4LCAweDQ2MEJEQjQ4LCAweDU1RjQ1NUY0LAorMHg0QjBCRDkzNiwgMHhENDQ2NTRGRCwgMHg0OTBCNjUwMywgMHg1REY1MUYwNSwKKzB4MUVEMUVDMDQsIDB4MkVDMEEwNDcsIDB4NjIyQ0UyQjQsIDB4OEIzRTMwMjAsCisweERBMzRENDQwLCAweDRBMEJERDMxLCAweDg0RjQwMDA5LCAweDYwMEM2Q0QyLAorMHgxRjA3MkYwMiwgMHgxRkM2QzkwMywgMHhFNjAwMUYwOCwgMHhENzNBRTAzMCwKKzB4NkNGMkRCM0EsIDB4MUY3OTBGNjUsIDB4QTAyMTFGQkEsIDB4NTFGNkU5MDQsCisweDZENjM2NjZELCAweDRDMTUzNkVDLCAweEQyMzUzRDFDLCAweDFGNkI4RjA1LAorMHg4OTAyM0M5MywgMHhBMDAyNjREMywgMHhFNTA0NTVGOCwgMHg0MjBCNjREMywKKzB4NUJGQjAwMDksIDB4RDYxOTU0RkEsIDB4NDYwQjY1RDMsIDB4NTRGOTFCMDEsCisweERBMTY1NUIxLCAweDdDRkM0QTBCLCAweDA2RkRFMDMwLCAweDBGNjU3NjA0LAorMHg2MjZENTVGNywgMHg4QkRBMzI1MywgMHhBMDA0ODRGNCwgMHhENDI1MkUwMCwKKzB4NDIwQkQyMEUsIDB4N0YzODY1RDIsIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsCisweDZBRjY2QkY2LCAweDY5RjYwMDBCLCAweEU2MDA2MTYzLCAweDQxMDlBMDA0LAorMHg3NjAxNjI1NiwgMHg3NDA0MjQyMiwgMHg4QkY5MzYxMiwgMHgwMDA5MDAwQiwKKzB4MDAxMTc4MDAsIDB4MDAxMTVGRjAsIDB4MDAxMTY0RjYsIDB4MDAxMTRGMkMsCisweDAwMTE2NUMwLCAweDAwMTE2NEY1LCAweDAwMTE2MTFDLCAweDAwMTE3ODA0LAorMHgwMDExNjVFMCwgMHgwMDExNEVCRSwgMHgwMDExNEYwMiwgMHgwMDExNjVGNCwKKzB4MDAxMTY1RkMsIDB4MDAxMTY2MDAsIDB4MDAxMTRCRjAsIDB4MDAxMTQ4RkMsCisweDAwMTE2NjE4LCAweDAwMTE2NjM0LCAweDAwMTE2NjQwLCAweDAwMTE0RTU2LAorMHgwMDExNjY0QywgMHgwMDExNjY1OCwgMHgwMDExNjY3QywgMHgwMDExNjY3MCwKKzB4MDAxMTRCQzQsIDB4MDAxMTY2ODgsIDB4MkY5NjJGODYsIDB4MkZCNjJGQTYsCisweDJGRDYyRkM2LCAweDRGMjIyRkU2LCAweEU1MDA3RkQ4LCAweDY0NTNFMTEwLAorMHg2QzUzNDEyOCwgMHg2NTVERUUwQSwgMHg0NjA4NjY1MywgMHg0NjA4MzY1QywKKzB4MzYxQzc1MDEsIDB4Njc1RDYwNDMsIDB4NjBDMzBGNjYsIDB4MzdFM0VEMDAsCisweDgxNjEyNkMxLCAweDgxNjM4MTYyLCAweDE2RDMxNkQyLCAweDhGRUExNkQ0LAorMHg2OEYyNzQwNCwgMHhEQUIzRDlCMiwgMHgyOTgyMTk4MSwgMHhEMUIyNTlGMSwKKzB4MkE5MjFBOTEsIDB4NUJGMzVBRjIsIDB4NUVGNTVERjQsIDB4MTFBMTU0RjYsCisweDExQjMyMUEyLCAweDExRDUxMUIyLCAweDExRTcxMUQ0LCAweDExNDkxMUU2LAorMHg1NUY3MTE0OCwgMHhFRTAwREJBOSwgMHhEREE5NTdGOCwgMHhENkE5NTJGOSwKKzB4MUI1MTY0RTMsIDB4REJBODJCNTIsIDB4RUFCOEQ4QTgsIDB4MkQ3MkU5NDUsCisweDZBQUMyNjIyLCAweDZFRUQ0OTA4LCAweDREMDg2REUzLCAweDNERUM2MUUzLAorMHg0RDA4NDEwOCwgMHgzREJDMzFFQywgMHg0MTA4NjBDMywgMHg4MUQxMkRDMSwKKzB4NDEwOEUwNTAsIDB4NDEwODQwMDgsIDB4NjBDMzgxRDIsIDB4RTUwMDMxOEMsCisweDgxRDMzNEEyLCAweDFEMTMxREQyLCAweDhEMDFENDk0LCAweEQ0OTExRDU0LAorMHhCMDgxNjVEMywgMHg2NEVEN0UwMSwgMHg4QkRDMzQ5MiwgMHhEQjk0RDE4RCwKKzB4RDI4QjY4MTIsIDB4MUI4MTQ4MjksIDB4MkZEMjY0MTIsIDB4MkI5MjY5NEQsCisweEQ5OEE2NzIyLCAweDFCNzM0NzI5LCAweEQ3ODc2ODIyLCAweDFCQTI2QThELAorMHhEMjhDNkI3MiwgMHgyMkIyRDU4NiwgMHhFMDAzNUQ3MiwgMHg1RTc0MTJEMiwKKzB4MTJFNDQwMTgsIDB4RDY4ODUxNzYsIDB4NTQ3ODEyMTYsIDB4MTI0OEUxRkYsCisweEQ0ODU2NzkyLCAweDY4NTIxMjdBLCAweDI4QzFFNzAzLCAweDgxOTE2OTUyLAorMHg2QTUyRTA1MCwgMHg4MUEyNDAwOCwgMHg2MEMzNkI1MiwgMHg2RDUyODFCMywKKzB4NkU1MjFERDIsIDB4NjI1MjFFNjMsIDB4MTI2NEU2MDAsIDB4NDYwODY1NjMsCisweDc1MDEzNjRDLCAweDY2NUQyNjEyLCAweDhCRjgzNjczLCAweEUwMDNENDcxLAorMHg0MDE4NjU0MiwgMHg2NzQyMjVDMSwgMHg4MTcxRDI3NCwgMHhFRTAwNjg0MiwKKzB4Njk0MjE4ODIsIDB4MTkyM0UwMjQsIDB4RTU4MDZBNDIsIDB4NkI0MjFBRTQsCisweDgxQjI2NkUzLCAweEQ0NkQ2QzQyLCAweDY1NUM4MUMzLCAweDZENjM2NjZELAorMHg2MTZENzYwNCwgMHgzMTUzM0Q0QywgMHgyREUyOEZGOCwgMHhENTY5RDI2OCwKKzB4NzQwNDI0MjIsIDB4N0YyODI0NTIsIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsCisweDZBRjY2QkY2LCAweDAwMEI2OUY2LCAweDY2NDI2OEY2LCAweEM4MDM2MDYxLAorMHhFNTAwOEQwNCwgMHhDOTAzNjA2MSwgMHg4QjAzODgwMiwgMHg2NTYzNTI2MiwKKzB4MjQxMjUxMjQsIDB4NjA1MzAwMEIsIDB4MkZFNjJGRDYsIDB4N0ZFQzRGMjIsCisweDYyNTM2RTUzLCAweDZENDNFNTUwLCAweDQ1MDhFNDAwLCAweEUxMDFBMDAxLAorMHg2MDQzNTIyNCwgMHg4MTIxMjIxMSwgMHg2MDUzODEyMywgMHg1NkUyODEyMiwKKzB4OEJGNTM2MjAsIDB4MTZFNEQyNTAsIDB4RTYxNDY0RjMsIDB4NjVFMzQyMEIsCisweEU0RkM2NUUxLCAweDJFNTEyNTQ5LCAweDY1RjM2MUYxLCAweDJGMTEyMTQ5LAorMHhEMTQ5NTREMSwgMHhFNjE0NDEwQiwgMHg2MDcxNTdEMSwgMHgyNzAxQ0IwMSwKKzB4N0YxNDFERTEsIDB4NkVGNjRGMjYsIDB4NkRGNjAwMEIsIDB4MkZFNjJGRDYsCisweDdGRUM0RjIyLCAweDY2NTM2RTUzLCAweDZENDNFNUZDLCAweDIwNTk2MDYxLAorMHgyNjAxQ0IwMSwgMHgzMjYwNTJFMiwgMHgxMkU0OEIwNiwgMHgzMUUwNTFFMiwKKzB4NTJEMThCMDQsIDB4MUUyMkEwMDIsIDB4NTY2NEFGRjAsIDB4NjRGM0QyMzYsCisweDQyMEJFNjE0LCAweDY3RTE2NUUzLCAweDI3MTlFMUZDLCAweDY3RjEyRTcxLAorMHgyNzE5NTREMSwgMHg2NUYzRDEzMCwgMHg0MTBCRTYxNCwgMHg1MkQxMkY3MSwKKzB4Q0IwMTYwMjEsIDB4MURFMTIyMDEsIDB4NEYyNjdGMTQsIDB4MDAwQjZFRjYsCisweDJGRTY2REY2LCAweDYyNEM0RjIyLCAweDQyMDhERTFCLCAweEEwMDU0MjAwLAorMHg1MjUyM0UyQywgMHg1NjI0RDQxNywgMHgyRTYyQkY4RSwgMHg1MkUxNjVFMiwKKzB4OEJGNjM1MjAsIDB4MjYyMkQ2MUIsIDB4MDAwQjRGMjYsIDB4MkZCNjZFRjYsCisweDJGRDYyRkM2LCAweDRGMjIyRkU2LCAweERCMUNEQzEwLCAweDY2QzI1MkMxLAorMHg4OTQwMzYyMCwgMHhDOTAzNjA2MSwgMHg4OTNDODgwMSwgMHhERDE4REUwQiwKKzB4NjRFM0JGNjMsIDB4ODUwMzY1MDMsIDB4NjIwRDY2QjIsIDB4ODkyQjMyNjIsCisweEJGOUJENDAzLCAweEQ0MTMwMDA5LCAweDAwMDk0RDBCLCAweDAwMDlBRkU2LAorMHgwMDExNjBEQywgMHgwMDExNjBFNCwgMHgwMDExNjBFQywgMHgwMDExNjExNCwKKzB4MDAxMTY0RjgsIDB4MDAxMTY1MDAsIDB4MDAxMDAwQzgsIDB4MDAxMDE2ODAsCisweDAwMUUyMTA4LCAweDAwMUMzRDAwLCAweDAwMTE3ODgwLCAweDAwMTE3NzgwLAorMHgwMDA0MDAyMCwgMHgwMDI2QzQwMSwgMHgwMDExNDJGOCwgMHgwMDExNjREQywKKzB4MDAxMTRFQkUsIDB4MDAxMTY2OUMsIDB4NjRFM0JGM0UsIDB4NEQwQkQ0MDYsCisweEFGQkIwMDA5LCAweEQyMDUwMDA5LCAweDRGMjYyMjYyLCAweDZERjY2RUY2LAorMHgwMDBCNkNGNiwgMHgwMDAwNkJGNiwgMHgwMDExNjZBMCwgMHgwMDFDM0QyOCwKKzB4MkY5NjJGODYsIDB4MkZCNjJGQTYsIDB4MkZENjJGQzYsIDB4NEYyMjJGRTYsCisweEQyM0M3RkZDLCAweEM4MDM2MDIyLCAweDJGMDE4RjNELCAweDAwMDlBMDYxLAorMHhDOTAzNjA2MSwgMHg4OTNCODgwMSwgMHhEMjM4RDgzNywgMHg0MjBCRDkzOCwKKzB4RTQwMDY0ODMsIDB4NkEwMzZEMDMsIDB4NUMwMjQ5MEIsIDB4RDIzNkRCMzUsCisweDU2RDM4NUQyLCAweDY1MEQ2NDIyLCAweDRCMEJFNzQwLCAweEQxMzI2RTAzLAorMHg2NDEyNkVFRCwgMHgyMTQyMzRFQywgMHgzREMwNURENCwgMHg4NUQyOEJFRiwKKzB4NzBGRjU2RDMsIDB4RTc0MDY1MEQsIDB4NkMwMzRCMEIsIDB4NDkwQkRCMkEsCisweDY2QjJFNDAzLCAweDM2Q0M2Q0NELCAweEU3MDBEOTI4LCAweDJCNjJFNUM4LAorMHg2NDczRTY1MCwgMHg0OTBCREMyNiwgMHg2NDgzNjU1QywgMHg2NUEzNEMwQiwKKzB4RUUwMUQxMjQsIDB4RDExQzIxRTIsIDB4NjYxMjUyMTEsIDB4OEJCRjM2MjAsCisweEREMjJERTIxLCAweERDMjNEQjIyLCAweDY1RDI1MkQxLCAweDg5MTgzNTIwLAorMHhDOTAzNjA1MSwgMHg4OTE0ODgwMSwgMHhEMTE0RDQxQywgMHgwMDA5NDEwQiwKKzB4MzZFMDU2MDMsIDB4NjUwMzhGMDQsIDB4MkIyMEUyMDEsIDB4MkM1MkFGRUMsCisweEQyMTNENDE5LCAweDAwMDk0MjBCLCAweEUxMDFENjE4LCAweEFGRTM0MTE4LAorMHg2MEYxMjYxMiwgMHg4OTAyQzgwNCwgMHg0MjBCRDIxNSwgMHg3RjA0MDAwOSwKKzB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkFGNjZCRjYsIDB4MDAwQjY5RjYsCisweDAwMDA2OEY2LCAweDAwMUUyMTAwLCAweDAwMTE2MEU0LCAweDAwMTE0NTNBLAorMHgwMDExNEJGMCwgMHgwMDExNEUwQywgMHgwMDExNjcxNCwgMHgwMDExNTlCMCwKKzB4MDAxMTQ1NTgsIDB4MDAxRTIxMkMsIDB4MDAxMTc4ODAsIDB4MDAxMTYwREMsCisweDAwMTE2NEZDLCAweDAwMTE2NEY4LCAweDAwMTE2MTE0LCAweDAwMUMzRDMwLAorMHgwMDExNDBDQywgMHhENkMyRDVDMSwgMHgyNjIyNjI1MiwgMHhDODAxNjA2MCwKKzB4MDAwQjhCRkEsIDB4MkZFNjAwMDksIDB4QkZGMzRGMjIsIDB4RDJCRDAwMDksCisweEU0MDVFMTAwLCAweDIyNDAyMjEyLCAweDY0MjJERUI4LCAweEU3MDBENUI4LAorMHgyNTcyMUU0MiwgMHhDOThGODQ1MSwgMHhDOUYwQ0IxMCwgMHg4MDUxQ0IwMiwKKzB4Q0IwMjYwNTAsIDB4NjI1MjI1MDAsIDB4MkUyMkJGREMsIDB4RDZCMjUwRTQsCisweDRGMjYyNjAyLCAweDZFRjYwMDBCLCAweDRGMjIyRkQ2LCAweDAwMDlCRkRCLAorMHg2MjBDRERBRSwgMHg2MEQwMkQyMiwgMHg4OTA2QzgwMSwgMHgwMDA5QkZEMywKKzB4MkQyMjYyMEMsIDB4QzgwMTYwRDAsIDB4NEYyNjhCRjgsIDB4NkRGNjAwMEIsCisweDRGMjIyRkU2LCAweDZFNDNCRkU4LCAweEUxMDBEMkEyLCAweDIyRTAyMjEyLAorMHg2NDIyRDU5RSwgMHhFNjAwREU5RSwgMHgyRTYyMTU0MiwgMHhDOUYwODRFMSwKKzB4ODBFMUNCMDEsIDB4Q0IwMjYwRTAsIDB4NjdFMjJFMDAsIDB4NEYyNjI1NzIsCisweDZFRjZBRkE4LCAweEU0MDZBRkU0LCAweEU0MDRBRkUyLCAweEJGRjk0RjIyLAorMHhFNEM3MDAwOSwgMHg2NDRDQkZEQywgMHg0RjI2QUZGNiwgMHhFNDA2QUZEOCwKKzB4RTQwNEFGRDYsIDB4NEYyMjJGRTYsIDB4NkU0M0JGRjgsIDB4RDU4REQyOEQsCisweEU0MDFFMTAwLCAweDIyMTI2MEUzLCAweDgwNTEyMjQwLCAweDY2MjJEMTg3LAorMHhFNzAwREU4NywgMHgyRTcyMTE2MiwgMHhDOUYwODRFMSwgMHg4MEUxQ0IwMiwKKzB4Q0IwMjYwRTAsIDB4NjJFMjJFMDAsIDB4MjEyMkJGN0MsIDB4QUZERjRGMjYsCisweDJGRDY2RUY2LCAweDRGMjIyRkU2LCAweEJGQ0I2RDUzLCAweEJGOUI2RTQzLAorMHhEMjdDMDAwOSwgMHgyMkUwNjFEMywgMHg2MDIyREU3RCwgMHg0MTE4MjFFOSwKKzB4MjAxQkM5RkYsIDB4MjIwMkQ1NzcsIDB4RDY3Njg0NTMsIDB4NjBEMzgwNTEsCisweEQ0NzI4MDUzLCAweEQxNzI2NzYyLCAweDE0NzJFRDAwLCAweDg0MTEyMUQyLAorMHhDQjA0QzlGMCwgMHg2MDEwODAxMSwgMHgyMTAwQ0IwMiwgMHhCRjUxNjIxMiwKKzB4NEYyNjI0MjIsIDB4QUZBNzZFRjYsIDB4NjU0MzZERjYsIDB4QUZEMEU0RDgsCisweDY1NDM2NDRDLCAweEFGQ0NFNEQ4LCAweDJGQzY2NDRDLCAweDJGRTYyRkQ2LAorMHg2RTUzNEYyMiwgMHhCRjY3NkQ0MywgMHhENzYyNkM2MywgMHgyN0QwRDI2NCwKKzB4NjFFMzYwNzIsIDB4NDExODIxMjksIDB4MjAxQkM5RkYsIDB4MjcwMkQ0NUQsCisweEQxNUI4NDQzLCAweDYwRTM4MDQxLCAweERFNTg4MDQzLCAweEU2MDA2NDcyLAorMHgyMTYyMUU0MiwgMHg2NURDODQxMSwgMHg2MEMzNjIwMywgMHg0MDA4QzkwNywKKzB4NjcwMzQwMDgsIDB4RTI5RjYwMjMsIDB4NjIyQ0M5OEYsIDB4MzUyMDIwN0IsCisweDgwMTE4RDE4LCAweDdDMDQ4NDExLCAweDYwQzM2NjAzLCAweDYyMDNDOTBGLAorMHhDOUYwNjA2MywgMHg4MDExMjAyQiwgMHg4ODBCNjA1MywgMHg4NDExOEIxNCwKKzB4QzkwRjY2MDMsIDB4QzkwRjcwMDEsIDB4NjA2MzYyMDMsIDB4MjAyQkM5RjAsCisweDgwMTFBMDBBLCAweDdDMDE4NDExLCAweDYwQzM2NjAzLCAweDYyMDNDOTBGLAorMHhDOUYwNjA2MywgMHg4MDExMjAyQiwgMHhDQjAyNjAxMCwgMHg2MjEyMjEwMCwKKzB4MkUyMkJFRjAsIDB4RDYzQzUwRTQsIDB4NEYyNjI2MDIsIDB4NkRGNjZFRjYsCisweDZDRjYwMDBCLCAweDJGQzYyRkI2LCAweDJGRTYyRkQ2LCAweDZDNjM0RjIyLAorMHg2RTQzNkQ1MywgMHg2QjczQkYzNiwgMHgwMDA5QkYwNiwgMHg2MUQzRDIzMSwKKzB4REUzMzIyRTAsIDB4MjFFOTYwMjIsIDB4QzlGRjQxMTgsIDB4RDQyRDIwMUIsCisweDg0NDMyMjAyLCAweDgwNDFENzJGLCAweDgwNDM2MEQzLCAweDY2MjJENDI3LAorMHgxNDYyRDEyNywgMHgxNEMzMjdDMiwgMHgyMUMyRUMwMCwgMHg3QjA0ODQxMSwKKzB4NjBCMzZEMDMsIDB4NjUwM0M5MEYsIDB4QzlGMDYwRDMsIDB4ODAxMTIwNUIsCisweENCMDI2MDEwLCAweDYyMTIyMTAwLCAweDRGMjYyNDIyLCAweDZERjY2RUY2LAorMHhBRUFGNkNGNiwgMHgyRkI2NkJGNiwgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwKKzB4NkM1MzZENjMsIDB4QkVGRDZFNDMsIDB4QkVDRDZCNzMsIDB4RDIxNTAwMDksCisweDIyRTA2MUMzLCAweDYwMjJERTE2LCAweDQxMTgyMUU5LCAweDIwMUJDOUZGLAorMHgyMjAyRDExMCwgMHhENjBGODQxMywgMHg2MEMzODAxMSwgMHhERTBCODAxMywKKzB4RDQwQjY3NjIsIDB4RUMwMDZCQkQsIDB4MUVCNTFFNzIsIDB4ODQ0MTI0QzIsCisweEM5RjA0QjIxLCAweDgwNDFDQjA0LCAweEUxNDA2MDQwLCAweDI0MDBDQjA2LAorMHhFNTAwNjI0MiwgMHg0QjIxMkUyMiwgMHg0MTI4QTAxNCwgMHgwMDFEMTIwMCwKKzB4MDAxMTY1MjgsIDB4MDAxMTY1MzAsIDB4MDAxMTY1MzgsIDB4MDAxMTY1NDQsCisweDAwRkZGRkZGLCAweDAwMTE2NTM0LCAweDYwNTM2NTVELCAweDA2REU0MDA4LAorMHgyMTYyNzUwMSwgMHgzMkIzNjI1RCwgMHg0RjI2OEJGNiwgMHg2REY2NkVGNiwKKzB4QUU1RjZDRjYsIDB4NEYyMjZCRjYsIDB4QkY3MzY3N0MsIDB4QUVCMzY0NEMsCisweDRGMjI0RjI2LCAweEJGQTY2NzdELCAweEFFQUQ2NDRDLCAweDRGMjI0RjI2LAorMHhFNTAwRTQ5RiwgMHhCRjA4RTYwMywgMHg0RjI2NjQ0QywgMHg2MDBDMDAwQiwKKzB4RTQ5RjRGMjIsIDB4RTYwM0U1MDAsIDB4NjQ0Q0JFRkYsIDB4NEYyNjQwMTksCisweDYwMEQwMDBCLCAweDY1NDM2NjVDLCAweEU0MDNBRUY3LCAweDY1NDM2NjVDLAorMHhFNDBCQUVGMywgMHhEMTc1RDY3NCwgMHg2MDQzNjI2MiwgMHhDODAxMjEyMiwKKzB4OEYwMTYwMTAsIDB4QzlFRkNCMTAsIDB4NjIxMjIxMDAsIDB4MjYyMjAwMEIsCisweDRGMjIyRkU2LCAweEUwMDA0RjEzLCAweEJFMkM0MDFFLCAweEQ1NkM2RTQzLAorMHgyNTIyNjIwQywgMHhFNDAxQkZFNiwgMHg2MDYzRDY2OSwgMHg2MEVDQ0Y4MCwKKzB4ODkwNzIwMDgsIDB4ODkwOTg4MDEsIDB4ODkwRDg4MDIsIDB4ODkxMTg4MDMsCisweDAwMDlBMDEzLCAweEM5RTM2MDYwLCAweDI2MDBBMDBGLCAweENCMTA2MDYwLAorMHhDQjA0QzlGNywgMHgyNjAwQTAwOSwgMHhDQjEwNjA2MCwgMHhDQjA4QzlGQiwKKzB4MjYwMEEwMDMsIDB4Q0IxQzYwNjAsIDB4RDU1OTI2MDAsIDB4QkU2MTYyNTIsCisweEU0MDA2NDJDLCAweDRGMjY0RjE3LCAweDZFRjZBRkJDLCAweDJGOTYyRjg2LAorMHgyRkI2MkZBNiwgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwgMHg2MEMzNkM3QywKKzB4NkE2Mzg4MDIsIDB4Njk1MzhGMDksIDB4NjU0MzYyOTAsIDB4NjYyQ0U0QUYsCisweEJFRjdFNzAxLCAweEEwMEE2NDRDLCAweDJDQzgwMDA5LCAweDg4MDE4OTAxLAorMHg2NTQzOEIwNSwgMHhFNjAwRTRBRiwgMHhCRUVCRTcwMSwgMHhCREQxNjQ0QywKKzB4RUQwMTAwMDksIDB4REU0M0VCQUYsIDB4RTgwMEEwMkMsIDB4MDAwOUJERjQsCisweDYwQzNEMTQxLCAweDg4MDJFMjAwLCAweEQ1NDAyMTIyLCAweDIxQjA4RDA2LAorMHg4OTA4MkNDOCwgMHg4OTBBODgwMSwgMHgwMDA5QTAwQywgMHgwMDlDNjBEMywKKzB4QTAwN0Q2MzksIDB4RDIzODgwNjEsIDB4QTAwMzYwODMsIDB4RDIzNjgwMjEsCisweDgwMjE2MEQzLCAweEQxMzU2NDEyLCAweDFFNDJFNjAwLCAweDg0NTEyMTYyLAorMHhDOUYwN0QwMSwgMHg4MDUxQ0IwMiwgMHhDQjAyNjA1MCwgMHg2NzEyMjUwMCwKKzB4MkU3MkJEQTAsIDB4OEJEMTNEQTIsIDB4MDAwOUJERjYsIDB4MDAwOUJEQTMsCisweDYyMENENjI3LCAweDRGMjYyNjIyLCAweDZERjY2RUY2LCAweDZCRjY2Q0Y2LAorMHg2OUY2NkFGNiwgMHg2OEY2MDAwQiwgMHhFNzAyQUY5OCwgMHgyRjk2MkY4NiwKKzB4MkZCNjJGQTYsIDB4MkZENjJGQzYsIDB4NEYyMjJGRTYsIDB4M0YzQzkzMzEsCisweDBGNTY5MDMwLCAweEU4RkY3MEZDLCAweDY4OEMwRjQ2LCAweEU5MDBBMDQ5LAorMHg0MDE4RTAxMCwgMHhFNTA0MDRGRSwgMHhCRjMzMzQ5QywgMHg4OEZGNkE0MywKKzB4OTAxRjg5M0UsIDB4RTExMDBDRkUsIDB4NDExODNDOTgsIDB4OEIwMzNDMTYsCisweDY0QTNCRTFCLCAweDAwMDlBMDMxLCAweDQwMThFMDEwLCAweEVEMDAwQkZFLAorMHhBMDA3M0JDQywgMHg2NEQzNkVGMywgMHhCRjFGMzRCQywgMHgyRTAwRTUwMSwKKzB4N0UwMTdEMDEsIDB4OEJGNjNEQzIsIDB4NjRBM0JFMDcsIDB4QTAxQUVEMDAsCisweEVGRjg2RUYzLCAweDAwMDAxMDA0LCAweDAwMUQxMjA0LCAweDAwMTE2NTJDLAorMHgwMDExNjU0NCwgMHgwMDFEMTIwMCwgMHgwMDExNjUzMCwgMHgwMDExNjUyOCwKKzB4NjY2QzY2RTAsIDB4ODkwNDM2ODAsIDB4MzVCQzY1RDMsIDB4QkU1MUU3MDEsCisweDdEMDFFNDAyLCAweDNEQzI3RTAxLCAweEUxMTA4QkYyLCAweDM5MUM0MTE4LAorMHg5MDU0NzkwNCwgMHgzOTEyMDFGRSwgMHg5MzUxOEJCMiwgMHg0RjI2M0YzQywKKzB4NkRGNjZFRjYsIDB4NkJGNjZDRjYsIDB4NjlGNjZBRjYsIDB4NjhGNjAwMEIsCisweDY3NkQ2MjUzLCAweDY2MjM2NTQzLCAweEU0MDJBRUMzLCAweDJGQTYyRjk2LAorMHgyRkM2MkZCNiwgMHgyRkU2MkZENiwgMHg2OTdENEYyMiwgMHg0QTIxNkE5MywKKzB4NEEwODRBMjEsIDB4NkM0MzZENjMsIDB4QTAwODZCNzMsIDB4NjRDMzZFNTMsCisweDY2OTM2NUQzLCAweDZCQkRCRkU0LCAweDNEQUMzQ0JDLCAweDZFRUYzRUI4LAorMHg4QkY0MkVFOCwgMHg0RjI2RTAwMCwgMHg2REY2NkVGNiwgMHg2QkY2NkNGNiwKKzB4MDAwQjZBRjYsIDB4MkZBNjY5RjYsIDB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsCisweEVDMDA0RjIyLCAweDZCNTM2RUMzLCAweEEwMDY2RDQzLCAweDY0RDNFQTAxLAorMHg2NUEzQkVBOCwgMHg3RDAxM0MwQywgMHgzRUIyN0UwMSwgMHg2MEMzOEJGNywKKzB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4MDAwQjZCRjYsIDB4MTAwNDZBRjYsCisweDAwMDAxMDA4LCAweDAwMDkwMDBCLCAweDJGRDYyRkM2LCAweDRGMjIyRkU2LAorMHg2RDQzNkM1MywgMHhFRTAwQTAwNCwgMHg3RTAxNjRENCwgMHg2NDRDQkZGMiwKKzB4OEJGOTNFQzIsIDB4NkVGNjRGMjYsIDB4MDAwQjZERjYsIDB4RTUwMDZDRjYsCisweDY2NDNBMDAyLCAweDc2MDE3NTAxLCAweDIyMjg2MjYwLCAweEFGRTM4QkZBLAorMHgyRkU2MDAwOSwgMHg3NTA3NjI1MywgMHhFMTA4Njc1MywgMHg2MDQzRUUwQSwKKzB4NDQwOUM5MEYsIDB4NjUwMzMwRTIsIDB4OEQwMTQ0MDksIDB4RTYzMEU2MzcsCisweDQxMTAzNjVDLCAweDhGRjIyNzYwLCAweEUwMDA3N0ZGLCAweDAwMEI4MDI4LAorMHg0RjIyNkVGNiwgMHhCRkU0N0ZFQywgMHhCRkQ4NjVGMywgMHg3RjE0NjRGMywKKzB4MDAwQjRGMjYsIDB4NEYyMkUwMDAsIDB4QkZEQTdGRUMsIDB4NjRGMzY1RjMsCisweDc0MDZCRkNELCAweDRGMjY3RjE0LCAweEUwMDAwMDBCLCAweDRGMjIyRkU2LAorMHg2MjUzN0ZFQywgMHg2NUYzNkU0MywgMHg2NDIzQkZDQiwgMHg2NEUzQkZCRiwKKzB4NjRGM0JGQkQsIDB4QkZCQUQ0MDMsIDB4N0YxNDAwMDksIDB4MDAwQjRGMjYsCisweDAwMDA2RUY2LCAweDAwMTE2NkE0LCAweEU0RkREMjlBLCAweEQ3OUE2MTIyLAorMHgyMjEyMjE0OSwgMHg3NDAxNjAyMiwgMHgyMjAyQ0IwMSwgMHhENTk3NjYyMiwKKzB4MjI2MjI2NDksIDB4Qzg0MDYwNzAsIDB4NjA1Mjg5MDIsIDB4MjUwMkNCMDQsCisweEUxRjc2NDUyLCAweDI1NDIyNDE5LCAweEU3MDE2MDUyLCAweDI1MDJDOUNGLAorMHhFNjAyNjA1MiwgMHgyNTAyQ0IwMywgMHgxNTYyNDcxOCwgMHgxNTczMDAwQiwKKzB4RDc4Q0Q1OEIsIDB4RDQ4REQyOEMsIDB4RTYwMEUxMDAsIDB4MjcxMTI1MTEsCisweEFGRDEyMjEwLCAweDY2NEMyNDYxLCAweDQ2MDBEMjg5LCAweDYwNjAzNjJDLAorMHgwMDBCQ0IxMCwgMHg2NTRDMjYwMCwgMHg0NTAwRDI4NSwgMHg2NjUwMzUyQywKKzB4MjYxOUUxRUYsIDB4MjU2MDAwMEIsIDB4RDI4MjY2NEMsIDB4MzYyQzQ2MDAsCisweENCMTA2MDYwLCAweDI2MDAwMDBCLCAweEQyN0U2NTRDLCAweDM1MkM0NTAwLAorMHhFMUVGNjY1MCwgMHgwMDBCMjYxOSwgMHg2NjRDMjU2MCwgMHg0NjAwRDI3OCwKKzB4NjA2MDM2MkMsIDB4MDAwQkNCMDgsIDB4NjU0QzI2MDAsIDB4NDUwMEQyNzQsCisweDY2NTAzNTJDLCAweDI2MTlFMUY3LCAweDI1NjAwMDBCLCAweEQyNzE2NjRDLAorMHgzNjJDNDYwMCwgMHhDQjA4NjA2MCwgMHgyNjAwMDAwQiwgMHhEMjZENjU0QywKKzB4MzUyQzQ1MDAsIDB4RTFGNzY2NTAsIDB4MDAwQjI2MTksIDB4NjI0QzI1NjAsCisweDQyMDBENjY3LCAweDYwMjAzMjZDLCAweDQwMjFDOTA4LCAweDQwMjE0MDIxLAorMHg2MDBDMDAwQiwgMHhENjYzNjI0QywgMHgzMjZDNDIwMCwgMHhDOTA4NjAyMCwKKzB4NDAyMTQwMjEsIDB4MDAwQjQwMjEsIDB4RDE1RjYwMEMsIDB4MzQxQzY0NEMsCisweDAwMEI2MjQwLCAweEQxNUQ2MDJDLCAweDM0MUM2NDRDLCAweDAwMEI2MjQwLAorMHgyRkU2NjAyQywgMHg2RTQzNEYyMiwgMHhFNjBBNjQ1QywgMHg4OTE0MzQ2NywKKzB4MDAwOUJGRUIsIDB4NjBFQzY0MEMsIDB4OEIwMjg4MDEsIDB4QTAwMkUwMEYsCisweDQ0MDkyNDA5LCAweDYyNEM0NDA5LCAweDMyNjNFNjBBLCAweEJGRTI4OTA1LAorMHg2MjBDNjQ0QywgMHhDODgwNjAyMywgMHhFMjAwOEIwMCwgMHg0RjI2NjAyMywKKzB4NkVGNjAwMEIsIDB4RDY0QTRGMjIsIDB4ODgwMTYwNjIsIDB4QjI0NThCMDMsCisweEEwMDMwMDA5LCAweEQyNDcwMDA5LCAweDIyNjBFNjQwLCAweEUyMDBENjQ2LAorMHgwMDBCNEYyNiwgMHg0RjIyMjYyMiwgMHg2MDYyRDY0MSwgMHg4QjAxODgwMiwKKzB4MDAwOUIyOEUsIDB4RTIwMEQ2NDAsIDB4MDAwQjRGMjYsIDB4RDUzQzI2MjIsCisweEUxMDBENDNDLCAweDI1MTJFNzAxLCAweDI0NzAwMDBCLCAweEU2MDREMjM5LAorMHgyMjYwMDAwQiwgMHhENDM5NEYyMiwgMHg0MTBCRDEzOSwgMHhENTM5MDAwOSwKKzB4NjY1MEUxRkQsIDB4MjYxOUQyMzgsIDB4MjU2MEU3MDAsIDB4MDAwQjRGMjYsCisweDRGMjIyMjcwLCAweEQxMzJENDM1LCAweDAwMDk0MTBCLCAweEU3RkJENTMxLAorMHgyNjc5NjY1MCwgMHgwMDBCNEYyNiwgMHg0RjIyMjU2MCwgMHhEMTJDRDQzMCwKKzB4MDAwOTQxMEIsIDB4RTdGN0Q1MkIsIDB4MjY3OTY2NTAsIDB4MDAwQjRGMjYsCisweEQ1MjgyNTYwLCAweDYyNTA5NDJELCAweDAwMEIyMjQ5LCAweEQ1MjUyNTIwLAorMHg2MjUwRTRCRiwgMHgwMDBCMjI0OSwgMHg0RjIyMjUyMCwgMHg4NTIyRDIyNSwKKzB4MjAwODYwMEQsIDB4ODgwMTg5MTEsIDB4ODgwMzg5MTMsIDB4ODgwNTg5MTUsCisweDg4MDY4OTQyLCAweDg4MDg4OTQ4LCAweDg4MDk4OTRFLCAweDg4MEE4OTU0LAorMHg4ODBCODk1QSwgMHhBMDY3ODk2MCwgMHhCMDY5MDAwOSwgMHhBMDY0MDAwOSwKKzB4QjA3NzYwMEMsIDB4QTA2MDAwMDksIDB4QjA4MDYwMEMsIDB4QTA1QzAwMDksCisweEZGN0Y2MDBDLCAweDAwMUUyMTQ4LCAweDAwMUUxMDAwLCAweDAwMUUxMTA4LAorMHgwMDExNjU3MCwgMHgwMDExNjU3MiwgMHgwMDExNjU5MSwgMHgwMDExNjU1NCwKKzB4MDAxRTEwM0YsIDB4MDAxRTEwNUYsIDB4MDAxRTEwMkYsIDB4MDAxRTEwOTAsCisweDAwMTE2NTc4LCAweDAwMUUxMDBCLCAweDAwMTE2NTc0LCAweDAwMTE2NkE4LAorMHgwMDExNEVCRSwgMHgwMDFFMTAyOCwgMHgwMDExNjU5MCwgMHgwMDExNjZCNCwKKzB4MDAxMTY2QzQsIDB4MDAxMTY1NDgsIDB4NjI2MEQ2ODQsIDB4OEIyQjIyMjgsCisweDAwMDlCMDYxLCAweDYwMENBMDI5LCAweDYyNjBENjgwLCAweDhCMjMyMjI4LAorMHgwMDA5QjA2OSwgMHg2MDBDQTAyMSwgMHg2MjYwRDY3QywgMHg4QjFCMjIyOCwKKzB4MDAwOUIwQzcsIDB4NjAwQ0EwMTksIDB4NjI2MEQ2NzgsIDB4OEIxMzIyMjgsCisweDAwMDlCMENELCAweDYwMENBMDExLCAweDYyNjBENjc0LCAweDhCMEIyMjI4LAorMHgwMDA5QjEyNSwgMHg2MDBDQTAwOSwgMHg2MjYwRDY3MCwgMHg4QjAzMjIyOCwKKzB4MDAwOUIxM0QsIDB4NjAwQ0EwMDEsIDB4NEYyNkUwMDAsIDB4MDAwOTAwMEIsCisweEQyNkNEMTZCLCAweEQ1NkM4NDEyLCAweDQwMDBDOTBGLCAweEQ3NkIwMTJELAorMHhFNDAzRDY2QiwgMHhFMjBGNjExQywgMHgyNTQwRTAwMSwgMHgyNTIwMjcxMiwKKzB4MjYwMjAwMEIsIDB4RTYwMUQyNjIsIDB4MzA2Njg1MjMsIDB4RTAwMDhEMDUsCisweEQ2NjNEMjYwLCAweEUwMDE4MTIyLCAweDAwMEIyNjAyLCAweEQyNUMwMDA5LAorMHg2MDBEODUyMywgMHg4OTA1MjAwOCwgMHg4QjBBODgwMSwgMHg2MDYwRDY1RCwKKzB4MjYwMENCMDEsIDB4RDQ1N0Q2NUEsIDB4RTAwMUUxMDEsIDB4MDAwQjI2MTIsCisweDAwMEI4MTQyLCAweEQxNTJFMDAwLCAweDg1MTNFNTAxLCAweDY0MEQ0NTE4LAorMHg2NjAzMzQ1MywgMHhFMDAwOEQwNSwgMHhENTUxRDI1MywgMHgyMjYwRTAwMSwKKzB4MDAwQjI1MDIsIDB4NEYyMjAwMDksIDB4ODUxM0QxNDksIDB4NjQ1MzY1MEQsCisweDYyNDk0NDE5LCAweDIyN0Q2NzJFLCAweDg4MDE2MDJDLCAweDg4MDI4OTA5LAorMHg4ODAzODkxMCwgMHg4ODA2ODkxQSwgMHg4ODA3ODkzNSwgMHhBMDRDODkzQiwKKzB4RDU0NjAwMDksIDB4NjY1MkQ3NDYsIDB4Mjc2MkQ0NDYsIDB4NjIyQzYyNjEsCisweDI0MjFBMDM4LCAweDIyMjg2MjVDLCAweEQ0NDM4QjNGLCAweDY2NDJENTQwLAorMHgyNTYyRDQ0MCwgMHgyNDAxODU2MSwgMHg2MjAzQTAyQywgMHgyMDA4NjA1QywKKzB4ODgxMDg5MDcsIDB4ODgyMDg5MDgsIDB4ODgzMDg5MDksIDB4QTAyQzg5MEEsCisweEQyM0EwMDA5LCAweDYyMjJBMDA4LCAweEEwMDVEMjM5LCAweEQyMzk2MjIyLAorMHg2MjIyQTAwMiwgMHg2MjYyRDYzOCwgMHhENDMyRDUzMSwgMHg2NjIxMjUyMiwKKzB4QTAwRjYyNkMsIDB4RDYzNTI0MjEsIDB4NjI2MUQ1MkQsIDB4NjIyQ0Q0MkQsCisweEEwMDcyNTYyLCAweEQ2MzIyNDIxLCAweDg1NjFENTI5LCAweDI1NjJENDI5LAorMHg2MjAzMjQwMSwgMHg2NjJEODUxNSwgMHgzNjE3NjEwRCwgMHg2NTAzOEYwMSwKKzB4QjBDQjI0NTEsIDB4QTAwMTAwMDksIDB4RTAwMEUwMDEsIDB4MDAwQjRGMjYsCisweEQ2MTkwMDA5LCAweEQ0MjdFMTAxLCAweDY1NDEyNjEwLCAweEQxMThENzE3LAorMHhFMjBGNjU1RCwgMHgyNzUyRTAwMSwgMHgwMDBCMjYyMCwgMHgyRkU2MjEwMiwKKzB4RDIwRjRGMjIsIDB4NjQwQzg1MjMsIDB4OEIwODI0NDgsIDB4RDUxMUQ2MUQsCisweDI2MjFFMjAwLCAweDk0MEY4NDUxLCAweEEwNDgyMDQ5LCAweERFMEQ4MDUxLAorMHhDODQwNjBFMCwgMHhFMjAxOEQzMiwgMHg4OTQ0MzQyNywgMHhEMjE2RDYxNSwKKzB4MjY0MTQyMEIsIDB4MDAwOUEwMzAsIDB4MDAwMEZGN0YsIDB4MDAxMTY1OTEsCisweDAwMTE2NTQ4LCAweDAwMTE2NTU0LCAweDAwMUUxMTAwLCAweDAwMUUxMDBDLAorMHgwMDExNjU3NCwgMHgwMDFFMTAwMCwgMHgwMDFFMTAwMSwgMHgwMDExNjU3QywKKzB4MDAxMTY1NUMsIDB4MDAxMTY1NjAsIDB4MDAxMTY1NjQsIDB4MDAxMTY1ODAsCisweDAwMTE2NTg0LCAweDAwMTE2NTg4LCAweDAwMTE2NThDLCAweDAwMTE2Nzc0LAorMHgwMDExNjc3RSwgMHgwMDExNjU2RSwgMHgwMDExNURDQSwgMHg4OTEyMzQyNywKKzB4RDI5NEQ2OTMsIDB4MjY0MTQyMEIsIDB4Q0I4MDg0RTEsIDB4ODBFMUIwRjUsCisweEQ2OTE2MEUwLCAweDJFMDBDQjA0LCAweEM5M0Y2MDYwLCAweEQ2OEYyNjAwLAorMHhBMDAxRTAwMSwgMHhFMDAwMjYwMiwgMHgwMDBCNEYyNiwgMHhENjhDNkVGNiwKKzB4Qzg4MDYwNjAsIDB4RDI4Njg5MTksIDB4ODgwMTYwMjEsIDB4RDI4OThCMTUsCisweDg1MjRFNTAxLCAweDg5MTAzMDU2LCAweEUyMDNEMTg3LCAweDIxMjBENDg3LAorMHhFMDBCNjU0MSwgMHgwNjU2NjU1RCwgMHhFNDBGRDU4NSwgMHgyMTQwRTcwMiwKKzB4RDc3RTI1NzEsIDB4MDAwQkUwMDEsIDB4MDAwQjI3MDIsIDB4MkZFNkUwMDAsCisweERFODA0RjIyLCAweEM4ODA4NEUxLCAweEQ1N0E4OTJDLCAweDIwMDg4NTU0LAorMHg2MTAzOEYyOCwgMHg4NTUzRDc3QywgMHg2NDAzNjY3MiwgMHg4NTY2NjUwQywKKzB4MzUyMDYyMEMsIDB4RDY3OThCMUUsIDB4NjUxQ0Q3NzQsIDB4MjY1MTY0NEMsCisweDYwRTAyNzQxLCAweDg5MDRDODQwLCAweDQyMEJEMjc1LCAweEEwMDMwMDA5LAorMHhEMjY4MDAwOSwgMHgwMDA5NDIwQiwgMHgwMDA5QjA5RiwgMHhFMjAxRDE2NywKKzB4NjBFMDIxMjIsIDB4Q0IwNEQ0NjQsIDB4NjA0MDJFMDAsIDB4MjQwMEM5M0YsCisweDYwMjNBMDAxLCAweDRGMjZFMDAwLCAweDZFRjYwMDBCLCAweDJGQjYyRkE2LAorMHgyRkQ2MkZDNiwgMHhEQTYyMkZFNiwgMHg2NkExRTI0MCwgMHgzNjIyREM1RSwKKzB4NjI2Mzg5MDAsIDB4NkVEMzZEMkMsIDB4NEUyMTM2RDgsIDB4NEUyMTJBNjEsCisweERCNjFENDYwLCAweEU3MDBBMDBGLCAweDc3MDE2MkIyLCAweDcxMDI2MTIzLAorMHg2NjIxMkIxMiwgMHg3MTAyNjIxMywgMHg2MTIxMkIxMiwgMHg2NTFENjY2RCwKKzB4MzU2QzQ1MjgsIDB4NjI3QzI0NTIsIDB4OEJFRDMyRTMsIDB4QzkwMzYwRDMsCisweDhCMTA4ODAzLCAweDYxNzM2N0IyLCAweDJCMTI3MTAyLCAweDcxMDI2RTEzLAorMHgyQjEyNjU3MSwgMHg2NTVENkRFMSwgMHg0MjI4NjJERCwgMHgzMjVDRTEwNywKKzB4QTAwQzJDMTAsIDB4ODgwMjI0MjIsIDB4QTAwMzhCMDEsIDB4ODgwMUUyMDMsCisweEUyMDE4QjA1LCAweDY2QjIyQzIwLCAweDY1NUQ2NTYxLCAweEU2MEYyNDUyLAorMHg2N0ExMkM2MCwgMHg4QjA1Mjc3OCwgMHhERDM4REM0NCwgMHhFQjAxRUEwMCwKKzB4MkRCMjJDQTIsIDB4NkRGNjZFRjYsIDB4NkJGNjZDRjYsIDB4NkFGNjAwMEIsCisweDJGRTYyRkQ2LCAweEUyNDBERDM2LCAweDM2MjI2NkQxLCAweDYyNjM4OTAwLAorMHgzNjc4NjcyQywgMHg3NzAzREUzOCwgMHg0NzIxMkQ2MSwgMHg2NEUyRDYzNSwKKzB4QTAwRTQ3MjEsIDB4NjU2MkUxMDAsIDB4NjI1MzcxMDEsIDB4NzQwMTI0NTAsCisweDI0MjA0MjE5LCAweDQ1Mjk3NDAxLCAweDc0MDEyNDUwLCAweDI0NTA0NTE5LAorMHg2MjFDNzQwMSwgMHg4QkVFMzI3MywgMHg2NkUyNDIwMCwgMHg0MjAwNjFEMSwKKzB4MjExODM2MkMsIDB4MkU2MjhGMDYsIDB4REQxQ0Q3MjgsIDB4RTUwMUU0MDAsCisweDJENTIyNzQyLCAweDAwMEI2RUY2LCAweDJGRDY2REY2LCAweDRGMjIyRkU2LAorMHhFRDBBRUUwMSwgMHg2NEUzQkM5NywgMHhCQzlDNjRFMywgMHg2MkVDN0UwMSwKKzB4OEJGNzMyRDcsIDB4QkM5RkVFMDEsIDB4NjRFMzY0RTMsIDB4N0UwMUJDQTQsCisweDMyRDc2MkVDLCAweDRGMjY4QkY3LCAweDAwMEI2RUY2LCAweEQxMTg2REY2LAorMHhENDE4OTIwRCwgMHg3MjEyMjEyMiwgMHgyNDIyRDYxNywgMHhENzE3NzIwNCwKKzB4NzIyMDI2MjIsIDB4MjcyMkQxMTYsIDB4MDAwQjcyMzAsIDB4MTM3QTIxMjIsCisweDAwMTE2NTZFLCAweDAwMTE1RUQ2LCAweDAwMUUxMDE1LCAweDAwMTE2NTc0LAorMHgwMDFFMTAwMSwgMHgwMDExNjU0OCwgMHgwMDFFMTEwMCwgMHgwMDExNjU3MiwKKzB4MDAxMTY1NjAsIDB4MDAxRTEwMDAsIDB4MDAxMTY1NjQsIDB4MDAxMTY1NzAsCisweDAwMTE1RENBLCAweDAwMUUxMDBDLCAweDAwMTE2NTVDLCAweDAwMTE2NTc4LAorMHgwMDExNjU3QywgMHgwMDExNjU4MCwgMHgwMDExNjU4NCwgMHgwMDExNjU4OCwKKzB4MDAxMTY1OEMsIDB4NEYyMjJGRTYsIDB4RDY1MDdGRkMsIDB4ODgwMTYwNjAsCisweEUyMDE4OTUxLCAweDI2MjBCRkJCLCAweEQ1NEVEMTRELCAweERFNEU2MDEwLAorMHg2NEUzNjU1MiwgMHg3NDAyQzg0MCwgMHg4RDIyRDE0QywgMHhEMjRDNzUwMiwKKzB4RTYwMUQ3NEMsIDB4RTcwNDI3MjIsIDB4NzYwMTYyNTUsIDB4NjI2QzI0MjEsCisweDhGRjkzMjczLCAweEQ0NDM3NDAyLCAweDYyNDJFNjAxLCAweDY0MEQ4NTI4LAorMHg2NzQ5NDQxOSwgMHgyNzVENjU3RSwgMHg4MUU0NjA3QywgMHhFNDE3RDU0MiwKKzB4Njc1NTc2MDEsIDB4MzI0MzYyNkMsIDB4OEZGOTIxNzEsIDB4QTAyMDcxMDIsCisweEQyM0UwMDA5LCAweEU2MDFENzNCLCAweEU3MDQyNzIyLCAweDc2MDE2MjU1LAorMHg2MjZDMjQyMSwgMHg4RkY5MzI3MywgMHhENDMyNzQwMiwgMHg2MjQyRTYwMSwKKzB4NjQwRDg1MjgsIDB4Njc0OTQ0MTksIDB4Mjc1RDY1N0UsIDB4ODFFNDYwN0MsCisweEU0MTdENTMzLCAweDY3NTU3NjAxLCAweDMyNDM2MjZDLCAweDhGRjkyMTcxLAorMHg5MjRBNzEwMiwgMHhEMjI2MkUyMSwgMHg1RTIzRDcyRSwgMHg2NEYyMkZFMiwKKzB4NjA0MzY1RjIsIDB4MjcwMEM5ODAsIDB4Qzk2MDYwNDMsIDB4ODA3MTYxMDMsCisweEM5MDM2MDQzLCAweDgwNzI0NTE5LCAweDY1RjI2MDVDLCAweDgxNzI2NkYyLAorMHg0NjE5NDYyOSwgMHg2MDZDNDUyOSwgMHg0MDE4NjQ1QywgMHg4MTczMzA0QywKKzB4MjExODVFMjMsIDB4NjRGMjJGRTIsIDB4NkU0QzYyRjIsIDB4NjAyQzQyMTksCisweDY2RjI2MkYyLCAweDQ2Mjk0MDE4LCAweDQ2MTkzMEVDLCAweDQyMjk4MTc0LAorMHg2NTJDNjA2QywgMHgzMDVDNDAxOCwgMHg4MTc1OEYwNywgMHgwMDA5QkM5RCwKKzB4MjIyODYyMEMsIDB4QTAwQTg5MDgsIDB4NjAxMzAwMDksIDB4OEIwMzg4NDAsCisweDAwMDlCMDA5LCAweDAwMDlBMDAzLCAweEUyMDJENjBGLCAweDdGMDQyNjIyLAorMHgwMDBCNEYyNiwgMHgwMDBCNkVGNiwgMHgwNjBBMDAwOSwgMHgwMDExNjU5MCwKKzB4MDAxRTEwMDAsIDB4MDAxMTY1N0MsIDB4MDAxMTY3NzQsIDB4MDAxMTY3ODAsCisweDAwMTE2NzE4LCAweDAwMTE2NTY0LCAweDAwMTE2NzQ4LCAweDAwMTE2NzQ2LAorMHgwMDExNjcxQSwgMHgwMDExNjU0OCwgMHgwMDExNjU3NCwgMHg0RjIyMkZFNiwKKzB4ODRFOURFOEUsIDB4MjQ0ODY0MEMsIDB4QjE4Qjg5MDEsIDB4RDI4QzAwMDksCisweDI2Njg2NjIwLCAweDYwRTA4OTAyLCAweDJFMDBDOUJGLCAweDAwMEI0RjI2LAorMHgwMDBCNkVGNiwgMHgyRkU2MDAwOSwgMHhERTg2NEYyMiwgMHg2MEUwRDY4NiwKKzB4Q0JDMEQ0ODYsIDB4NjI2MDJFMDAsIDB4QzgwMzYwMkMsIDB4NDAyMTg5MDQsCisweDcwMDE0MDIxLCAweDY2MDNBMDAyLCAweDY2MDM0MDA5LCAweEQ2ODA2MTZELAorMHhFNTAwQTAwNCwgMHg3NTAxNjI2MiwgMHg3NDA0MjQyMiwgMHgzMjEzNjI1RCwKKzB4RDI3QzhCRjgsIDB4MDAwOTQyMEIsIDB4QzlCRjg0RTIsIDB4NEYyNjgwRTIsCisweDZFRjYwMDBCLCAweDJGRTYyRkQ2LCAweDdGRkM0RjIyLCAweDYyNjBENjc2LAorMHg4OTQwMjIyOCwgMHhENTZERTEwMCwgMHg2MDUwMjYxMCwgMHhDQjQwRDQ3MywKKzB4MjUwMDQ0MEIsIDB4OEQwNTIwMDgsIDB4NjJFMDZFMDMsIDB4NzEwNDYxMkMsCisweDJGMTFBMDA2LCAweEQ0NkVENjY2LCAweERENkU2NzYwLCAweDY1N0M0RDBCLAorMHhFMjNDNkQxRCwgMHg4QjAzM0QyNywgMHhEMjZDRDQ2QiwgMHgwMDA5NDIwQiwKKzB4NEQyMTREMjEsIDB4QTAwNUQ3NkEsIDB4NjZFNkU0MDAsIDB4MzU3QzQ1MDgsCisweDc0MDEyNTYyLCAweDM1RDM2NTRELCAweEQ3NjY4QkY3LCAweDZFNzJFMDAzLAorMHg4MUUxNDAxOCwgMHg2RTcyNjBGMSwgMHg4MUUyNzAwQywgMHhENDYyNjE3MiwKKzB4REQ2MjgxMTMsIDB4NjU3MjREMEIsIDB4RDY1MkQyNjEsIDB4MjIxMkUxMDEsCisweEM5M0Y2MDYwLCAweDdGMDQyNjAwLCAweDZFRjY0RjI2LCAweDZERjYwMDBCLAorMHgyRkM2MkZCNiwgMHgyRkU2MkZENiwgMHhEMjVBNEYyMiwgMHg2QjQzNkU3MywKKzB4NDIwQjZDNTMsIDB4MjAwODZENjMsIDB4NjEwMzhGMDgsIDB4RDI0RkQ0NTYsCisweDZFRjY0RjI2LCAweDZDRjY2REY2LCAweDZCRjY0MjJCLCAweDIxQjA2MEMzLAorMHg2MEQzODAxMSwgMHhFNTAwODExMSwgMHg2NEJDQTAwNywgMHg2MDUzNjU1RCwKKzB4NjY1MzAwRUMsIDB4NzUwMTM2MUMsIDB4NjI1RDgwNjQsIDB4OEJGNTMyNDMsCisweDYwNjBENjM2LCAweDI2MDBDOUJGLCAweDZFRjY0RjI2LCAweDZDRjY2REY2LAorMHg2QkY2MDAwQiwgMHg3RkM0NEYyMiwgMHg3MjAyNjJGMywgMHgyMjUxMkY0MSwKKzB4NDUyOTcyMDIsIDB4NjA2MzIyNTEsIDB4RTVDNEU2ODIsIDB4NjdGMzgxMjEsCisweDY1NUM2NjZDLCAweEU0MDhCRkJDLCAweDRGMjY3RjNDLCAweDAwMDkwMDBCLAorMHgyRjk2MkY4NiwgMHgyRkI2MkZBNiwgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwKKzB4RTEwMDdGQzQsIDB4NjUxM0VDRkYsIDB4NkIxMzZDQ0QsIDB4REUzNEQ3MzMsCisweEVERkY2NEYzLCAweEQ4MzNFQTA0LCAweDYwNTM2NTVDLCAweDAyN0Q0MDAwLAorMHgzMkMwNjIyRCwgMHg2NjAzOEQwRCwgMHgwOUVENjA2MywgMHgyNDkxMDI3RCwKKzB4MjQyMTc0MDIsIDB4Njk4MjAyRUQsIDB4MzkyODYyMkQsIDB4NzQwMjI4OTIsCisweDc1MDE3MTA0LCAweDYwNjM2MjVDLCAweDA3RDUzMkEyLCAweDBFQjU4RkU0LAorMHgyNDQ4NjQxQywgMHhFNjgwODkwNSwgMHg2N0YzRTVDNSwgMHhCRjdGNjY2QywKKzB4N0YzQzY1NUMsIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkFGNjZCRjYsCisweDAwMEI2OUY2LCAweEQxMUM2OEY2LCAweDYwMTJEMjFDLCAweENCMjBFNDA1LAorMHgyMTAyRTUwMCwgMHgwMDBCMjI0MiwgMHgwMDAwMjI1MiwgMHgwMDFFMTAxNywKKzB4MDAxMTY0RjYsIDB4MDAxRTEwMTUsIDB4MDAxRTEwQkYsIDB4MDAxMTc4MDAsCisweDAwMUUxMEZDLCAweDAwMTE0MENDLCAweDAwMTE2NEZDLCAweDAwMTE2MDJFLAorMHgwMDExNjZEMCwgMHgwMDExNEYyQywgMHgwMDExNjZFQywgMHgwMDExNEVCRSwKKzB4MDAxMTc4OEMsIDB4MDAxMTY0RjgsIDB4MDAxMTYwREMsIDB4MDAxMTQ1QkMsCisweDAwMUUyMTMwLCAweDAwMTE1RkYwLCAweDAwMTE2NkY0LCAweDAwMTE2NTEwLAorMHgwMDExNjUxOCwgMHgwMDExNjcxMCwgMHgwMDFDMzUwMCwgMHgwMDFENDAwNCwKKzB4RDU2NUQxNjQsIDB4RTQwMEQ3NjUsIDB4MjE0MkUyMEYsIDB4MTc0MTExNTQsCisweEQ1NjMyNzIyLCAweDk2NjlENzYzLCAweDE1NDEyNTcyLCAweDk2NjYxNTYyLAorMHhFNjAxMTU2NSwgMHhENTYwMTE2NSwgMHg2NjZDRTZGOCwgMHgyNTQyMjU0MiwKKzB4MjU0MjI1NDIsIDB4MjU0MjI1NDIsIDB4MjU2MjI1NDIsIDB4NzYwMUU3MjcsCisweDY3NjMyNTcyLCAweDI1NjI3Nzk3LCAweEU3MDQyNTcyLCAweDI1NzJFMjQ4LAorMHhFMjE5MjUyMiwgMHhFMjcwMjUyMiwgMHgyNTQyMjU0MiwgMHgyNTQyMjU0MiwKKzB4MjUyMjI1NDIsIDB4MjUyMkUyMEMsIDB4MjU0MjI1NDIsIDB4MjU0MjI1NDIsCisweDI1NDIyNTQyLCAweDI1NDIyNTQyLCAweDAwMEIxNTRBLCAweEUyMDgxMTQ1LAorMHgwMDA5NDIyQiwgMHgyRkU2MkZENiwgMHg3RkZDNEYyMiwgMHhDODIwNjA0MywKKzB4NkU0MzhEMDIsIDB4MDAwOUJFNzUsIDB4QzgxMDYwRTMsIDB4QkU3Mjg5MDEsCisweDYwRTMwMDA5LCAweDg5MDFDODQwLCAweDAwMDlCRTk0LCAweEM4MDE2MEUzLAorMHhERDNFODkzOCwgMHhDODAyNjBEMCwgMHgyRjAwOEQwMywgMHg0NjBCRDYzQywKKzB4NjBGMDAwMDksIDB4ODkwMkM4MDQsIDB4NDYwQkQ2M0EsIDB4NjJGMDAwMDksCisweEM4ODA2MDIzLCAweDYwRDA4OTAyLCAweDJEMDBDOTdGLCAweEM4MDE2MDIzLAorMHhENjM1ODkwNiwgMHgwMDA5NDYwQiwgMHgwMDA5QTAwNywgMHg1MTYzMDYwMSwKKzB4ODkwMkM4MDgsIDB4NDYwQkQ2MzEsIDB4NjBGMDAwMDksIDB4ODkwMkM4MTAsCisweDQyMEJEMjJGLCAweEQ1MkYwMDA5LCAweDg4MDI2MDUyLCAweEQyMkU4QjAzLAorMHhBMDA1RTYwNCwgMHg4ODAxMjI2MCwgMHhEMjJCOEIwMiwgMHgyMjYwRTYwMSwKKzB4MjUyMkUyMDAsIDB4Qzg4MDYwRTMsIDB4RDYyODg5MkUsIDB4NjBFMzZFNjAsCisweDg5MDJDODgwLCAweDQyMEJEMjI2LCAweDYwRTMwMDA5LCAweDg5MDJDODQwLAorMHg0MjBCRDIyNCwgMHg2MEUzMDAwOSwgMHg4OTAyQzgwMiwgMHg0MjBCRDIyMiwKKzB4NjBFMzAwMDksIDB4ODkwRUM4MDQsIDB4NDEwQkQxMjAsIDB4QkYxMjAwMDksCisweEJGNEQwMDA5LCAweEQ1MUUwMDA5LCAweDYwNTBENDFFLCAweEM5MDhENzFFLAorMHhCRjg0MjUwMCwgMHg2MEUzMjQ3MiwgMHg4OTA1QzgwOCwgMHg3RjA0RDIxQiwKKzB4NkVGNjRGMjYsIDB4NkRGNjQyMkIsIDB4NEYyNjdGMDQsIDB4MDAwQjZFRjYsCisweDAwMDA2REY2LCAweDAwMUM1ODFDLCAweEEwMDBBMDAwLCAweDAwMUQwMTAwLAorMHgwMDFENDAwMCwgMHgwMDA0MDAyMSwgMHgwMDFDNTg5QywgMHgwMDFFMTAyMSwKKzB4MDAxMTUwQzQsIDB4MDAxMTUwRTYsIDB4MDAxMTU3MjQsIDB4MDAxMTUwRkUsCisweDAwMTE1MTBDLCAweDAwMTE2NTc0LCAweDAwMUUxMDBCLCAweDAwMUUxMDI4LAorMHgwMDExNTE2MiwgMHgwMDExNTE2RSwgMHgwMDExNTExNCwgMHgwMDExNTEzMiwKKzB4MDAxRTEwMDAsIDB4MDAxMEYxMDAsIDB4MTIzNDU2NzgsIDB4MDAxMTUxNEEsCisweDY0NENENkE3LCAweDAwMEIzNDZDLCAweEQ2QTYyNDUwLCAweDM0NkM2NDRDLAorMHgyNDUwMDAwQiwgMHg2NDRDRDZBNCwgMHgwMDBCMzQ2QywgMHg2MjVDMjQ1MCwKKzB4NDIwODYxNkQsIDB4NDIwODQxMTksIDB4NDIwMDYwMTksIDB4NjcwRTYxNEMsCisweEQ0OUUzMjFDLCAweDQyMDAyMDdELCAweDMyNENDOTBGLCAweDIyMDAwMDBCLAorMHg0MjA4NjI1QywgMHg0MjAwNDIwOCwgMHgzMjRDNjQ0QywgMHg0MjAwRDQ5OCwKKzB4MDAwQjMyNEMsIDB4MkZFNjIyNjAsIDB4NjE0QzRGMTIsIDB4NDEwMEQ0OTMsCisweDY3MTAzMTRDLCAweEUyOUY2NjZELCAweDI3Mjk0NjE5LCAweDZFNTM2MjY5LAorMHg2NzJFNjU3MywgMHg0MjIxMjI3RCwgMHg0MjIxNDIyMSwgMHg3NjAxNjYyQywKKzB4RTQwMTQ2MDgsIDB4MzRFODQ2MDgsIDB4NjQ0QzQ2MDAsIDB4MDcxQTA0NjcsCisweDIxNTAyNTdCLCAweDAwMEI0RjE2LCAweDRGMjI2RUY2LCAweEQyODU3RkU4LAorMHg4ODAxNjAyMSwgMHhEMjg0OEI3QiwgMHgyNjY4NjYyMSwgMHhEMjgzOEI3NywKKzB4MjY2ODY2MjEsIDB4RTUwRjhCNzMsIDB4RTQwMUJGQTIsIDB4QkZBNEU1MDEsCisweEU1ODZFNDAwLCAweEU0MDA2NTVDLCAweDJGNTBCRkE0LCAweEJGQTFFNDAxLAorMHhFNjAyRTUwNiwgMHg2MDYzNDYxOCwgMHg4MUYyRTQwMSwgMHg2NTQzQkY5RiwKKzB4RTQwMTg1RjIsIDB4QkZBQjY1NDMsIDB4ODVGMjY2MDMsIDB4NjU0M0U0MDEsCisweDY2MDNCRkIxLCAweEU0MDI2NUYwLCAweDYwNTM3NTZDLCAweDgwRjhCRjgwLAorMHhCRjgyRTQwMiwgMHg4NEY4RTUxMiwgMHg3MDkwRTQwMiwgMHg2NTAzQkY4MiwKKzB4NDYxOEU2MDIsIDB4ODFGNjYwNjMsIDB4QkY4MEU0MDIsIDB4ODVGNkU1MDAsCisweDY2MDNFNDAyLCAweEU1MDBCRjhDLCAweEU0MDI4NUY2LCAweEJGOTI2NjAzLAorMHhFNUZFRTUwMCwgMHhFMDEwNjU1QywgMHhCRjYxRTQwMywgMHhFNTEzMEY1NCwKKzB4RTQwRUJGNjMsIDB4MDVGQ0UwMTAsIDB4QkY2M0U0MEUsIDB4RTUwMDc1ODUsCisweEJGNjRFNDAzLCAweEU1MDBFNjQwLCAweEJGNzFFNDAzLCAweEU1MDBFNjQwLAorMHhCRjc4RTQwMywgMHhFNUZGRTY0MCwgMHhFMDE0NjU1QywgMHhCRjQ3RTQwNCwKKzB4RTQwRjBGNTQsIDB4RTUwNEJGNDksIDB4MDVGQ0UwMTQsIDB4QkY0OUU0MEYsCisweEU1MDE3NTg0LCAweEJGNEFFNjQwLCAweEU1MDFFNDA0LCAweEJGNTdFNjQwLAorMHhFNTAxRTQwNCwgMHhFNDA0RTY0MCwgMHhBRjVDN0YxOCwgMHg3RjE4NEYyNiwKKzB4MDAwQjRGMjYsIDB4NEYyMjAwMDksIDB4RDI0MjdGRjAsIDB4ODgwMTYwMjEsCisweEQyNDE4QjcxLCAweDI2Njg2NjIxLCAweEQyNDA4QjZELCAweDI2Njg2NjIxLAorMHhFNTBGOEI2OSwgMHhFNDAxQkYxQywgMHhCRjFFRTUwMSwgMHhFNTg2RTQwMCwKKzB4RTQwMDY1NUMsIDB4MkY1MEJGMUUsIDB4QkYxQkU0MDEsIDB4RTQwMUU1MDYsCisweEJGMUM2NTQzLCAweEU0MDFFNjQwLCAweEJGMjk2NTQzLCAweEU0MDFFNjQwLAorMHhCRjMwNjU0MywgMHg2NUYwRTY0MCwgMHg3NTZDRTQwMiwgMHhCRUZGNjA1MywKKzB4RTQwMjgwRjQsIDB4RTUxMkJGMDEsIDB4RTQwMjg0RjQsIDB4QkYwMTcwOTAsCisweEU2NDA2NTAzLCAweEJGMDJFNDAyLCAweEU2NDBFNTAwLCAweEJGMEZFNDAyLAorMHhFNjQwRTUwMCwgMHhCRjE2RTQwMiwgMHhFNUZFRTUwMCwgMHg2MDUzNjU1QywKKzB4QkVFNUU0MDMsIDB4RTUxMzgwRjgsIDB4RTQwRUJFRTcsIDB4RTQwRTg0RjgsCisweEJFRTc3MDg1LCAweEU1MDA2NTAzLCAweEJFRThFNjQwLCAweEU1MDBFNDAzLAorMHhCRUY1RTY0MCwgMHhFNTAwRTQwMywgMHhCRUZDRTY0MCwgMHhFNUZGRTQwMywKKzB4NjA1MzY1NUMsIDB4QkVDQkU0MDQsIDB4RTQwRjgwRkMsIDB4RTUwNEJFQ0QsCisweEU0MEY4NEZDLCAweEJFQ0Q3MDgzLCAweEU1MDE2NTAzLCAweEJFQ0VFNjQwLAorMHhFNTAxRTQwNCwgMHhCRURCRTY0MCwgMHhFNTAxRTQwNCwgMHhFNDA0RTY0MCwKKzB4QUVFMDdGMTAsIDB4N0YxMDRGMjYsIDB4MDAwQjRGMjYsIDB4MDAwMDAwMDksCisweDAwMUUxMDJGLCAweDAwMUUxMDgwLCAweDAwMUUxMDkwLCAweDAwMUUxMDNGLAorMHgwMDFFMTAzRSwgMHgwMDExNjU2RSwgMHgwMDExNjU3MCwgMHgwMDExNjU3MiwKKzB4RDIxREQxMUMsIDB4NjYyMDYwMTAsIDB4Njc2QzcwMDEsIDB4MzcwMEM5MEYsCisweEU1MDA4RDEzLCAweDY3MTA2MjEwLCAweDc3MDE2MjJDLCAweDY0MjMyMTcwLAorMHhENjE2NjAxMCwgMHg0NDA4NDQwOCwgMHgzNDI4QzkwRiwgMHg2MjYwMjEwMCwKKzB4NzIwMUQ1MTMsIDB4NDQwODI2MjAsIDB4MDAwQjM1NEMsIDB4RDEwRjYwNTMsCisweDI1NTg2NTEwLCAweEU2MDA4RDEzLCAweEQ2MERENDBCLCAweDY1NUM2NTQwLAorMHg0NzA4Njc1MywgMHgzNzU4NDcwOCwgMHg0NzA4NjU0MCwgMHgyNDUwNzUwMSwKKzB4MzY3QzYwNDAsIDB4MjQwMEM5MEYsIDB4NzJGRjYyMTAsIDB4MDAwQjIxMjAsCisweDAwMDA2MDYzLCAweDAwMTE2NEY1LCAweDAwMTE2NEY0LCAweDAwMTE2NEY2LAorMHgwMDExNjExQywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4NTQ0RjBEMEEsIDB4NTMyMDUzNTUsIDB4NDYyMDQ5NTAsCisweDAwMDAzQTU3LCAweDIwNzQ2MzRGLCAweDMyMjAzMjIwLCAweDIwMzczMDMwLAorMHgzMzNBMzgzMSwgMHgzNjM0M0EzMiwgMHgwMDAwMDAwMCwgMHgwMDAwMEQwQSwKKzB4NDI3MDczNzIsIDB4M0QyMDY2NzUsIDB4NTU0RTIwM0QsIDB4MjAyQzRDNEMsCisweDZFNDk2NzdBLCAweDRFNDk3Mjc0LCAweDZENzU0RTUxLCAweDAwMDAwMDNELAorMHg1MjUwNDU0NSwgMHg1NzIwNEQ0RiwgMHg2NTc0Njk3MiwgMHg2NDYxMjAyQywKKzB4MDAzRDcyNjQsIDB4NkM2MTc2MjAsIDB4MDAwMDAwM0QsIDB4MDAwMDBBMEQsCisweDVBMjA1NzQ2LCAweDRENDM1RjRELCAweDRDNDY1RjQ0LCAweDVGNDg1MzQxLAorMHg1MzQxNTI0NSwgMHgwMDBBMEQ0NSwgMHg1QTIwNTc0NiwgMHg0RDQzNUY0RCwKKzB4NEM0NjVGNDQsIDB4NUY0ODUzNDEsIDB4NTM0QjQ4NDMsIDB4MEEwRDRENTUsCisweDAwMDAwMDAwLCAweDJENDk1MDUzLCAweDcyNjQ2NDYxLCAweDAwMDAwMDNELAorMHgyRDQ5NTA1MywgMHg2NzZFNjU2QywgMHgwMDNENjg3NCwgMHgyRDQ5NTA1MywKKzB4NzM2QjY4NjMsIDB4MDAzRDZENzUsIDB4NUEyMDU3NDYsIDB4NEQ0MzVGNEQsCisweDRDNDY1RjQ0LCAweDVGNDg1MzQxLCAweDQ0NDE0NTUyLCAweDAwMDAwQTBELAorMHg2MTIwMjA3MiwgMHgzRDcyNjQ2NCwgMHgwMDAwMDAwMCwgMHg3MjIwMjAyMCwKKzB4NzU0MjcwNzMsIDB4MDAwMDNENjYsIDB4NkU2QjZFNTUsIDB4MjA2RTc3NkYsCisweDZENkQ2RjYzLCAweDNENjQ2RTYxLCAweDAwMDAwMDAwLCAweDAwMDAwMDcyLAorMHgwMDIwNTIyMCwgMHgwMDAwMEQwQSwgMHg2MjczNTU3NiwgMHg3NDczNzI1RiwKKzB4MDAwMDBBMEQsIDB4NjI3MzU1NzYsIDB4NzM3NTczNUYsIDB4NjQ2RTY1NzAsCisweDAwMDAwQTBELCAweDYyNzM1NTc2LCAweDczNjU3MjVGLCAweDAwMEEwRDZELAorMHg3Mjc0NkU0OSwgMHg2RDY1MjA1MSwgMHgyQzc5NzQ3MCwgMHg0OTY3N0EyMCwKKzB4NDk3Mjc0NkUsIDB4NzU0RTUxNEUsIDB4MDAwMDNENkQsIDB4NjU0QzcyNDUsCisweDAwMDAwMDZFLCAweDIwNzQ2RjRFLCAweDc1NkY2RTY1LCAweDQ5MjA2ODY3LAorMHg0MjIwNTE0RSwgMHgwQTBENjY3NSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAyRTAyMDksIDB4ODAwMDAxMDEsCisweDAwMDQwOUZBLCAweDAwRkYwNDAwLCAweDA1MDcwMDAwLCAweDAyMDAwMjAxLAorMHg4MjA1MDcwMCwgMHgwMDAyMDAwMiwgMHgwMzgzMDUwNywgMHgwNzAxMDA0MCwKKzB4NDAwMjA0MDUsIDB4MDIwOTAwMDAsIDB4MDEwMTAwMkUsIDB4MDlGQTgwMDAsCisweDA0MDAwMDA0LCAweDAwMDAwMEZGLCAweDAyMDEwNTA3LCAweDA3MDAwMDQwLAorMHg0MDAyODIwNSwgMHgwNTA3MDAwMCwgMHgwMDQwMDM4MywgMHgwNDA1MDcwMSwKKzB4MDAwMDQwMDIsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDcwOTAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH07CisKK2NvbnN0IHUzMl90IHpjRndJbWFnZVNQSVNpemU9MTAxNTY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBmd3UuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGZ3dS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNzdjYmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBmd3UuYwpAQCAtMCwwICsxLDEwMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgImNwcmVjb21wLmgiCisKK2NvbnN0IHUzMl90IHpjRndJbWFnZVtdID0geworMHgwMDA5MDAwQiwgMHg0RjIyMkZFNiwgMHhERTk0N0ZGQywgMHhFMTE0RDU5NCwKKzB4MUUxM0Q0OTQsIDB4Njc1MjFFNEMsIDB4RDQ5NEQ2OTMsIDB4Mzc0MDI3NjksCisweDYyNTI4RjA2LCAweDcyMDFENjkyLCAweDYwNjAyNTIyLCAweDI2MDBDOTNGLAorMHhENzkwNjE1MiwgMHgyNTEyNjExRCwgMHgyNjRCNjY1MiwgMHgyNTYyNDcwQiwKKzB4MDAwOUIwMTcsIDB4RTYwMDk1QUMsIDB4Qzg0MDYwRTIsIDB4MkYwMjhGMDMsCisweDhGRjkzNjUyLCAweEQ0ODg3NjAxLCAweDRFMEJERTg4LCAweEQ0ODgwMDA5LAorMHgwMDA5NEUwQiwgMHg0RTBCRDQ4NywgMHg3RjA0MDAwOSwgMHhBMDUyNEYyNiwKKzB4NEYyMjZFRjYsIDB4NDEwQkQxODQsIDB4RDQ4NDAwMDksIDB4MDAwOTQ0MEIsCisweDQ1MEJENTgzLCAweEQ3ODMwMDA5LCAweEQyODNFMUZGLCAweDI3MTI2MTFELAorMHhENDgyNTAyOSwgMHhFMUZGQ0IwMSwgMHgxMjA5RTUwMSwgMHgxMjExMjIxMiwKKzB4RTcyMDI0NTIsIDB4NDcxOEQ1N0UsIDB4MjU3MkQyN0UsIDB4RDE3RUU3MDAsCisweEQ2N0ZENDdFLCAweEUyMDEyMjcwLCAweDI0NzAyMTcyLCAweEQ2N0QyNjIwLAorMHgyNjQxRTRGRiwgMHhENTdDRTYwMCwgMHg2NjZERTEwNCwgMHg3NjAxNjA2MywKKzB4NDAwMDYyNkQsIDB4OEZGODMyMTIsIDB4RDU3ODA1NDUsIDB4MjUyMEUyMDEsCisweEQyNzhENzc3LCAweEU0ODBFMTAwLCAweDIyMTIyNzEwLCAweDY2MTNENTc2LAorMHg2NjZENjQ0QywgMHg3NjA0Njc2MywgMHgzNzVDNjI2RCwgMHg4RkY4MzI0MywKKzB4RDU3MjI3MTIsIDB4RDI3M0Q3NzIsIDB4RTQwMEUxMDEsIDB4MjcxMDI1MTEsCisweDAwMEI0RjI2LCAweDdGQ0MyMjQyLCAweEQxNzBENTZGLCAweEQyNzFEQjcwLAorMHgxRjUxRDQ3MSwgMHhENjcxNzUwOCwgMHgxRjEyRDc3MSwgMHgxRjU1NzEwQywKKzB4MUZCOTc1RkMsIDB4NzIwNDFGMkEsIDB4MUYxM0VCMTAsIDB4MUY1NjFGNDQsCisweDFGNzgxRjY3LCAweEQ4NkIxRjJCLCAweERENkNEOTZCLCAweERDNkNFQTAwLAorMHhEMjZEREU2QywgMHg4OTAwM0EyMiwgMHhEMTVEN0EwMSwgMHg4ODAxNjAxMCwKKzB4NTZGODhCMDMsIDB4NDIxOEUyMDEsIDB4RDE2ODI2MjIsIDB4MDAwOTQxMEIsCisweDQ0MEJENDY3LCAweEQ1NjcwMDA5LCAweDAwMDk0NTBCLCAweDYwMTBEMTUwLAorMHg4QjEwODgwMSwgMHhFNjUwRDE0RiwgMHg0NjE4NjIxMiwgMHg4QjA4MzI2NiwKKzB4NTZGOUQxNEIsIDB4MjEyMEUyMDAsIDB4Q0IwMTYwNjIsIDB4MjYwMkEwMDMsCisweDcyMDEyNzEwLCAweDYwODIyMTIyLCAweDg5MDk4ODAxLCAweEUyQzhEMTVBLAorMHg2MjJDNjYxMiwgMHg4OTAzMzYyNiwgMHg2MDEwRDE1OCwgMHg4QkM4ODgwMSwKKzB4NTFGNjY3OTIsIDB4MjE3MjUyRjUsIDB4RDY1NTUxOTEsIDB4NTVGQTIyMTIsCisweDUyRkI2NDYyLCAweDU1NjEyNTQyLCAweDIyNTJFNDAwLCAweDYxNDM2NjQzLAorMHgwNURFNjAxMywgMHgzNkNDNDYwOCwgMHgwN0RFMjY1MiwgMHhDOTAzNjA3MSwKKzB4OEIwMjg4MDEsIDB4NzIwMTYyRTIsIDB4NzQwMTJFMjIsIDB4MzZCMzY2NEMsCisweDcxMDQ4RkVFLCAweDY2QzJEMTQ3LCAweDQ1Mjg2NTEyLCAweDI2NUI0NTE4LAorMHg2MDgyMkM2MiwgMHg4OTAxODgwMSwgMHgwMDA5QTE2OCwgMHg2MjcyRDc0MiwKKzB4OEIxMzIyMjgsIDB4RDQyQkQ3NDEsIDB4Njc3MkQ1NDEsIDB4NTE1MzYyNDIsCisweDMxMkMzMjdDLCAweDI0MjIyMjI4LCAweDE1MTM4RDA1LCAweDYyNjJENjNELAorMHhCMTYyNzIwMSwgMHhENjIzMjYyMiwgMHgyNjIyRTIwMCwgMHg1MjkxNjY5MiwKKzB4OEIwMTM2MjAsIDB4MDAwOUExNDQsIDB4NjA2MUEwNkUsIDB4MDAxQzAwMUMsCisweDAwMUQ0MDIwLCAweDAwMDBCMzhFLCAweEZGRkYwMDAwLCAweDEyMzQwMDAwLAorMHgwMDFFMTAxNSwgMHgwMDIwMTI3NCwgMHgwMDIwMzlGNCwgMHgwMDIwMThBMiwKKzB4MDAyMDNBMDAsIDB4MDAyMDNBMTgsIDB4MDAyMDE4NjAsIDB4MDAyMDE5NkMsCisweDAwMjAxMjg4LCAweDAwMUMzNTEwLCAweDAwMUMzNjI0LCAweDAwMUUyMTJDLAorMHgwMDIwMzhGNCwgMHgwMDIwMzQ4QywgMHgwMDIwMzhGQywgMHgwMDIwMzkwOCwKKzB4MDAyMDM5MTQsIDB4MDAyMDM5NzAsIDB4MDAyMDM5NzQsIDB4MDAyMDM5MUMsCisweDAwMjAzOTFELCAweDAwMjAzOTIwLCAweDAwMTE3NzAwLCAweDAwMjAzOThDLAorMHgwMDIwMzk4QSwgMHgwMDIwMzRGMCwgMHgwMDExNzcxMCwgMHgwMDFDM0QzMCwKKzB4MDAxQzM2RjgsIDB4MDAxMTc3MzQsIDB4MDAxQzM2ODQsIDB4MDAxQzNEMDAsCisweDAwMUMxMDAwLCAweDAwMUMxMDI4LCAweDAwMjAzNTA0LCAweDAwMjAzOTI0LAorMHgwMDExNzYwMCwgMHgwMDExNzc0MCwgMHg3RkZGRkZGRiwgMHgwMDIwMTczMCwKKzB4MDAyMDMzMkEsIDB4MDAyMDIzMzQsIDB4MDAyMDNEQTQsIDB4MDAyMDM5NzIsCisweDAwMjAzNEZDLCAweDAwMjAzOTY0LCAweDAwMUMzRDJDLCAweDAwMUMzNkIwLAorMHgwMDIwMzQ5NCwgMHgwMDExNzc1QywgMHg4ODAxQzkwRiwgMHhBMENGODkwMSwKKzB4RDE5NjAwMDksIDB4MzYyMDYyMTIsIDB4RDQ5NTg5MDQsIDB4MjQyMUUyMDAsCisweDIxNjJBMENDLCAweDYyMTFEMTkzLCAweDg5MDEyMjI4LCAweDAwMDlBMEMzLAorMHhFMjAyRDc4RiwgMHg3NTAxNjU3MSwgMHgzMTIzNjE1RCwgMHgyNzUxOEQwMiwKKzB4MDAwOUEwQkMsIDB4RDI4QzU3RjIsIDB4NjIyMjYwNzIsIDB4NDAwOTQwMTksCisweEM5MEY0MDA5LCAweDhGMTk4ODBBLCAweDUyRjMxRjJDLCAweDQwMTk2MDIyLAorMHg0MDA5NDAwOSwgMHg4ODA4QzkwRiwgMHhBMEE3ODkwMSwgMHg2MDYzMDAwOSwKKzB4Q0IwMTU0RjcsIDB4RDI3RTU1RjIsIDB4RTcwMTI0MDIsIDB4RDQ3RkUxMDAsCisweDIyMTEyNTcyLCAweDcyMDE2MjQyLCAweDI0MjJBMDk4LCAweDhCM0Y4ODA1LAorMHg2MDIyNTJGMywgMHg0MDA5NDAxOSwgMHhDOTBGNDAwOSwgMHg4QjE2ODgwMiwKKzB4RTRGRkQ1NzcsIDB4NjQ0RDY3NTIsIDB4OEIxMDI3NDgsIDB4NjI3MkQ3NzUsCisweDhCMEMzMjYwLCAweDUxRjI1NUY3LCAweEQyNkRFNzAxLCAweDIxNzIyNTYyLAorMHhENTcxRTEwMCwgMHg2NDUyMjIxMSwgMHhBMDc3NzQwMSwgMHg1MkYzMjU0MiwKKzB4NDAxOTYwMjIsIDB4NDAwOTQwMDksIDB4ODgwNUM5MEYsIDB4MzFCMzhCNkUsCisweEQyNkE4QjZDLCAweDY3MjI1NEY0LCAweDc3MDFENTY5LCAweDYxNDIyMjcyLAorMHgxRjFDRTY0MCwgMHg0NjE4MjE1OSwgMHg4QjAzMzE2MCwgMHg2MjYyRDY2NSwKKzB4MjYyMjcyMDEsIDB4RTIwMEQ2NUEsIDB4MjYyMUIwNjcsIDB4MDAwOUEwNTYsCisweDMxMjNFMjIwLCAweDg4MDM4QjUyLCAweDUyRjM4QjFFLCAweDQwMTk2MDIyLAorMHg0MDA5NDAwOSwgMHg4ODAzQzkwRiwgMHhEMjVCOEIxNiwgMHg2NzIyNTRGNCwKKzB4NzcwMUQ1NTcsIDB4NjE0MjIyNzIsIDB4MUYxQ0U2NDAsIDB4NDYxODIxNTksCisweDhCMDMzMTYwLCAweDYyNjJENjU1LCAweDI2MjI3MjAxLCAweEUyMDBENjQ4LAorMHgyNjIxQjA0MywgMHgwMDA5QTAxMCwgMHhENDUyRDU1MSwgMHhEMjQ0Njc1MiwKKzB4RTEwMDc3MDEsIDB4MjU3MjNBNDYsIDB4MjIxMThGMDYsIDB4RUEwMEQ2NEUsCisweDcyMDE2MjYyLCAweDI2MjJCMDMxLCAweDJGQjJENTRDLCAweDk1NzM2NjUyLAorMHhENDRBNUJGMSwgMHgzNjIwNTI0MSwgMHg2MDYxODkxMCwgMHg4QjAxQzgwMywKKzB4MkIyMkUyMDEsIDB4OEZGNTQ1MTAsIDB4NTdGMTU2NjQsIDB4NjI3MkUxRjAsCisweDQxMjg0MTE4LCAweDI3MjIyMjFCLCAweDZCRjJBMDA4LCAweDZCRjJBMDA2LAorMHhFMjAwRDYyRiwgMHhEMTJGMjYyMSwgMHgyMTIxRTIwMCwgMHhEMTNDRTIwMSwKKzB4NjYxMjI4MjIsIDB4OEIwMTI2NjgsIDB4MDAwOUFFMkIsIDB4NDUwQkQ1MzksCisweEQxMzkwMDA5LCAweEFFMjRFNjAwLCAweDJGODYyMTYwLCAweDJGQTYyRjk2LAorMHgyRkM2MkZCNiwgMHgyRkU2MkZENiwgMHg3RkY0NEYyMiwgMHhERTM0RDEzMywKKzB4NTQxMTYyMTIsIDB4MUY0MTY3RTIsIDB4MkYyMkQ0MzIsIDB4RDUzMjFGNzIsCisweEQyMzI2NzQzLCAweDU4NDE3Nzk0LCAweDY5NDI1QTQyLCAweDVCMTY2QzcyLAorMHg2MDUyNkQyMiwgMHhDQjIwRTYwMCwgMHhFNTQwMjUwMiwgMHg2MjZENzYwMSwKKzB4OEJGQjMyNTMsIDB4NTVGMTYyRjIsIDB4MTE1MTIxMjIsIDB4RDYyODU1RjIsCisweDE0ODEyRTUyLCAweDI0OTIxNEEyLCAweDI3QzJENDI2LCAweDI2RDIxMUI2LAorMHhEQTI1Njc0MiwgMHhFODAxRDkyNSwgMHg0OTBCMkE3MiwgMHhFMjAxMUE4QywKKzB4MUEyQzQyMTgsIDB4NEYyNjdGMEMsIDB4NkRGNjZFRjYsIDB4NkJGNjZDRjYsCisweDY5RjY2QUY2LCAweDY4RjYwMDBCLCAweDAwMDAwN0QxLCAweDAwMjAzOTg0LAorMHgwMDIwMzk4OCwgMHgwMDIwMzk4RSwgMHgwMDFDM0RDMCwgMHgwMDExNzcyQywKKzB4MDAxQzNCODgsIDB4MDAyMDM5NkMsIDB4MDAxMTc3M0MsIDB4MDAxMTc3NDQsCisweDAwMDBGMDAwLCAweDAwMTE3NzY0LCAweDAwMTE3NzQ4LCAweDAwMTE3NzY4LAorMHgwMDExNzc2QywgMHgwMUZGRkZGRiwgMHgwMDExNzc0QywgMHgwMDIwMzRGQywKKzB4MDAyMDNEQTQsIDB4MDAyMDI0RjgsIDB4MDAyMDM5NzIsIDB4MDAxQzNCOUMsCisweDAwMUMzRDk4LCAweDAwMUMzNzAwLCAweDAwMUMzNTAwLCAweDAwMUM1OTYwLAorMHgwMDFDODk2MCwgMHgwMDIwMzUwNCwgMHgwMDFDM0QwMCwgMHgwMDIwMTYwQywKKzB4MkY5NjJGODYsIDB4MkZCNjJGQTYsIDB4MkZENjJGQzYsIDB4NEYyMjJGRTYsCisweERFOTU3RkFDLCAweDYxRTBFMDE0LCAweDBGMTRENDk0LCAweDcxMDE2MUUzLAorMHhFMDE4NjIxMCwgMHhEMjkyMEYyNCwgMHgwMDA5NDIwQiwgMHg0NTBCRDU5MSwKKzB4MjAwODAwMDksIDB4OEYxMjZEMDMsIDB4RDI4RjFGMDcsIDB4NjcyMEQ0OEYsCisweDY1N0NERDhGLCAweDQ3MEJENzhGLCAweEQxOEYwMDA5LCAweDYxOUM2OTEwLAorMHg0NjA4NjYxMywgMHgzNjE4NDYwOCwgMHgzRDZDNDYwOCwgMHhFMDE4MUZENywKKzB4RTU4MDA0RkMsIDB4NjA0QzY2RTIsIDB4MzA1MDY1NUMsIDB4MkQ2MjhGMTUsCisweDAxRkNFMDE0LCAweERFODVFNTAwLCAweDY0MUNBMDA4LCAweDY3NTM2NTVELAorMHg2MDcwMzdFQywgMHgzOURDNjk1MywgMHg4MDk0NzUwMSwgMHgzMjQzNjI1RCwKKzB4RDY3RjhCRjQsIDB4QTM0RUUyMDAsIDB4MjAwODI2MjEsIDB4RTAxNDhCMTMsCisweEU0MDAwMUZDLCAweEEwMDlERTc5LCAweDY0NEQ2NzFDLCAweDM1RUM2NTQzLAorMHg2OTQzNjY1MiwgMHgzOURDNjI2MiwgMHg3NDA0MTkyMSwgMHgzMjczNjI0RCwKKzB4QTMzODhCRjMsIDB4ODgwMTJEMTAsIDB4RTAxNDhCMTcsIDB4RTcwMDAxRkMsCisweDZEMUMyRDcwLCAweERFNkQxRkQ0LCAweDMyRDM2MjdELCAweEEzMkE4QjAxLAorMHg2NzdEMDAwOSwgMHg2NjczNjVFMywgMHg2MTczNzUwNCwgMHgzMTVDMzZFQywKKzB4NjkxMjY0NjIsIDB4QUZFRjc3MDgsIDB4ODgwNDI0OTIsIDB4RTAxNDhCMTgsCisweEU0MDAwMUZDLCAweDY3MUMyRDQwLCAweDYyNERERTYwLCAweDhCMDEzMjczLAorMHgwMDA5QTMxMSwgMHg2OTQzNjQ0RCwgMHgzOUVDNjJFMywgMHg3MjA0NjU5MiwKKzB4M0QyQzZENDMsIDB4NjE1MjY2RDIsIDB4MjE2OTc0MDgsIDB4MjUxMkFGRUQsCisweDhCMTg4ODA1LCAweDAxRkNFMDE0LCAweDJENDBFNDAwLCAweERFNTM2NzFDLAorMHgzMjczNjI0RCwgMHhBMkY2OEIwMSwgMHg2NDREMDAwOSwgMHg2MkUzNjk0MywKKzB4NjU5MjM5RUMsIDB4NkQ0MzcyMDQsIDB4NjZEMjNEMkMsIDB4NzQwODYxNTIsCisweEFGRUQyMTZCLCAweDg4MzEyNTEyLCAweEQ0NEE4QjNBLCAweDYxNDZEOTRBLAorMHg3NTA0NjU0MywgMHg2NzU2NjQ0MiwgMHg2RTUzMUY0OCwgMHg2NTUyN0UwNCwKKzB4N0VFNDYyRTIsIDB4N0UwNDY0RTIsIDB4NkVFMjFGRTksIDB4NUVGOTI5RTAsCisweDdFMDREOTQyLCAweDFGRUE2MEUyLCAweDI5MDBDOTAxLCAweEQ5NDA2RUUyLAorMHgyOUUwNEUwOSwgMHgyRjU2MkYyNiwgMHg1NkZBRDkzRSwgMHg2NTEzNDkwQiwKKzB4RDEzRDdGMDgsIDB4RTcxQzZFMEQsIDB4MURFMTJENzAsIDB4REUzQjY5MTIsCisweDY0RTIxRDkyLCAweDFENDNEMTNBLCAweEQyM0E2NTEyLCAweDY3MjIxRDU0LAorMHgxRDc1RDIzOSwgMHgxRDY2NjYyMiwgMHg2MjYyRDYzOCwgMHgxRDI3QTJBQiwKKzB4OEIzOTg4MzAsIDB4NjU5NkQ5MkIsIDB4Njc5MjY2OTYsIDB4NjE5Njc5MDQsCisweDc0RTQ2NDkzLCAweDZFNDM2OTkyLCAweDFGOUI3RTA0LCAweDFGRUM2NDQyLAorMHhEOTI1NkVFMiwgMHg1RUZDMjlFMCwgMHg3RTA0RDkyNCwgMHgxRkVENjBFMiwKKzB4MjkwMEM5MDEsIDB4RDkyMjZFRTIsIDB4MjlFMDRFMDksIDB4NTlGQzdGRkMsCisweERFMjcyRjkyLCAweDJGMTY0RTBCLCAweEQ0MUY3RjA4LCAweEUyMUM2MTBELAorMHgxRDExMkQyMCwgMHhEMjIwNjQ0MiwgMHhENDFDMUQ0MiwgMHgxRDUzNjU0MiwKKzB4Njc1MkQ1MUIsIDB4RDcxQjFENzQsIDB4MUQxNTYxNzIsIDB4MUQ2NjY2MjIsCisweDYyNjJENjFBLCAweDFEMjdBMjZGLCAweDhCMzU4ODMzLCAweDQ5MEJEOTE5LAorMHhBMjY4RUUwMCwgMHgwMDAwMkRFMCwgMHgwMDExNzgwMCwgMHgwMDIwM0ExQywKKzB4MDAyMDE4QTIsIDB4MDAyMDJBQUMsIDB4MDAyMDM5MEUsIDB4MDAyMDNBMjAsCisweDAwMjAzNTM0LCAweDAwMjAxOEVFLCAweDAwMjAzOTBELCAweDAwMTE3ODA0LAorMHgwMDIwMzk4QywgMHgwMDExNzgxMCwgMHgwMDIwMzkwOSwgMHgwMDIwMzkwQSwKKzB4MDAyMDM5MEIsIDB4MDAyMDBGNjQsIDB4MDAxQzU4NjQsIDB4MDAxQzY4NjQsCisweDAwMUM3ODY0LCAweDAwMUM1OUJDLCAweDAwMUM2OUJDLCAweDAwMUM3OUJDLAorMHgwMDIwMEZCQywgMHgwMDIwMEZCOCwgMHg4OTAxODgyOCwgMHgwMDA5QTBDMCwKKzB4RTY0M0RFQjUsIDB4MzI2NjYyRTEsIDB4MUZFRThGMDIsIDB4MkUyMUUyNDAsCisweDYyMkQ2MkUxLCAweDhCMDEzMjY3LCAweDAwMDlBMEFBLCAweEU1MDE4NUUxLAorMHg4QjAxMzA1NiwgMHgwMDA5QTBBNCwgMHgyRDEwRTEwMSwgMHg2NEUxQjIyNSwKKzB4RTY0MzU3RkUsIDB4NjUyRDYyNzEsIDB4ODk0NDM1NjcsIDB4MzU2M0U2NDAsCisweEU2MDA4QjA1LCAweDBGNjVFMDQwLCAweEEwMEZFMTFBLCAweDYxNTM3MkMwLAorMHg0MTIxNDEyMSwgMHg0MTIxNDEyMSwgMHg0NTIxNDEyMSwgMHg0NTIxNDUyMSwKKzB4QzkwMzYwNTMsIDB4RTA0MDY2MDMsIDB4NzExODBGNjUsIDB4MjIwOUUwMDcsCisweDBGMjVFMDNDLCAweEUwNDQ2NDFELCAweEIyQTM2NUYzLCAweEUzM0MwRjQ2LAorMHg4NTMyMzNGQywgMHg2MjBEREU5NSwgMHg0MjA4NjAzMSwgMHg2MDIzNjEwRCwKKzB4MTMyM0U5NDQsIDB4MDZGRTQxMDgsIDB4RTAwRjM5RkMsIDB4MTMxNDRFMEIsCisweDY3MDc1RDkxLCAweDYwRDMyNjc5LCAweDBGNjY1NEZFLCAweDUxOTI4NTQyLAorMHg2MDBENEUwQiwgMHg2MEQzMjYwQiwgMHgwRjY2NjQ5MiwgMHg2NUYzQjIzNywKKzB4Njk2MTU2RkUsIDB4RTY0MDY1OUQsIDB4ODkzODM1NjMsIDB4RDc4MzU5RkUsCisweDc5MDY2NTkxLCAweEM5MDM2MDUzLCAweDQwMDA0MDA4LCAweDYxMDM2MjAzLAorMHgwRjI2RTA1MCwgMHg0NzBCRTBGRiwgMHg2QzA3NjAwQywgMHg2NjAzNjA1RCwKKzB4NDYyMTQ2MjEsIDB4NDYyMTQ2MjEsIDB4NDIwMDYyNjMsIDB4NDIwMDMyNkMsCisweDQwMjE0MDIxLCAweDQwMDhDOTAzLCAweDZEMkQzMEZDLCAweEU4MDA2QTAzLAorMHhCMjU3NjVGMywgMHg2RUEyNjREMywgMHgyRUM5RTA1MCwgMHg2Njk0MkFFMiwKKzB4RDc2RTAxRkUsIDB4NjA2QzQ3MEIsIDB4MkFFMjJFMEIsIDB4NjREMzY1RjMsCisweDc4MDFCMUZELCAweEVFMDY2MjhELCAweDhGRTkzMkUzLCAweDVFRkU3RDAxLAorMHg2MUUxRTQwMCwgMHg0MTAwODVFMSwgMHg2NkUzMzEwQywgMHg3NjBDNzExQiwKKzB4RTcwNDY1RjMsIDB4Njg2Njc0MDEsIDB4M0E3MzZBNEQsIDB4OEZGOTI1ODIsCisweDY1RjM3NTA0LCAweDY0MURCMUUzLCAweDY0RTFCMUE0LCAweDAwMDlBMTdCLAorMHhENDVCNTZGNywgMHhFQzAxRDI1QiwgMHgyNkMwNDIwQiwgMHgwMDA5QTE3MywKKzB4MDZGQ0UwMTgsIDB4ODgyOTYwNkMsIDB4NThGNzhCMDgsIDB4RTQwMEQyNTIsCisweDY2MjIyODQwLCAweDY0NkRCMTcxLCAweDAwMDlBMTY1LCAweDY2NkNFNjgxLAorMHg4OTAxMzA2MCwgMHgwMDA5QTBBQywgMHhENTUwRDE0RiwgMHg2MjEyNkE1NiwKKzB4MjEyMjMyQUMsIDB4NTQxMTZDNTYsIDB4MzRDQzYyNTMsIDB4NjQ1MjExNDEsCisweDcyMDg1ODEyLCAweEQ0NEEzODRDLCAweDY4MjIxMTgyLCAweDVBMTM2QzQyLAorMHgzQUNDM0M4QywgMHgxMUEzMjRDMiwgMHg2QzIyNzJFQywgMHg3MjEwNTgxNCwKKzB4MTE4NDM4Q0MsIDB4NUExNTY4MjIsIDB4MTFBNTNBOEMsIDB4NkEyMjcyMTAsCisweEQ2NDA1ODE2LCAweDExODYzOEFDLCAweDUyMTc2QzYyLCAweDExMjczMkNDLAorMHg1QTE4NTg2MSwgMHgxMUE4M0E4QywgMHg1QzE5NUE2MiwgMHgxMUM5M0NBQywKKzB4NTIxQTVDNjMsIDB4MTEyQTMyQ0MsIDB4NUExQjU4NjQsIDB4MTFBQjNBOEMsCisweDVDMUM1QTY1LCAweDExQ0MzQ0FDLCAweDUyMUQ1QzY2LCAweDExMkQzMkNDLAorMHg1QTFFNTg2NywgMHgxMUFFM0E4QywgMHg1NjFGNUE2OCwgMHgzNkFDRTg0MCwKKzB4MTE2RkRBMkQsIDB4NkNBMjM4MUMsIDB4N0E5NDY2ODIsIDB4Mjg2MjM2Q0MsCisweDVDODE2MkEyLCAweDE4QzEzQzJDLCAweDYyQTI3QTQ0LCAweDM2MkM1NjgyLAorMHhENjI2MTg2MiwgMHg1QTg1NjI2MiwgMHgzQTJDNDIyOSwgMHg3NjA0MThBNSwKKzB4NTY4NjYyNjIsIDB4MzYyQzQyMjksIDB4NTZGNzE4NjYsIDB4MjYyMEUyMzgsCisweDE2QzE1QzgxLCAweDE2MjI2MjEyLCAweEUyMDA1QzExLCAweDU1MTIxNkMzLAorMHg1NTE1MTY1NCwgMHg1NTEzMTY1NSwgMHg1NTE2MTY1NiwgMHg1NTgyMTY1NywKKzB4NjU4MjE2NTgsIDB4NTUxNDE2NTksIDB4NTU4NDE2NUEsIDB4NTU4MzE2NUIsCisweDU1ODUxNjVDLCAweDU1ODYxNjVELCAweDE4MjExNjVFLCAweDExMjEyMTIyLAorMHgxMTI1MTEyMiwgMHgxMTI2MTEyMywgMHgyODIyMTgyMiwgMHgxODI0MTEyNCwKKzB4MTgyNTE4MjMsIDB4MTgyNkEwQzcsIDB4MDAxMTc4MDQsIDB4MDAyMDMzRTgsCisweDAwMjAzQTQwLCAweDAwMjAxOEEyLCAweDAwMjAzNDk0LCAweDAwMUMzNkEwLAorMHgwMDIwMzRGMCwgMHgwMDFDM0NBMCwgMHgwMDFDMzZGNCwgMHgwMDFDM0I4OCwKKzB4NjY2Q0U2ODIsIDB4OEIyMDMwNjAsIDB4RUEyNDU2RjcsIDB4MjZBMEQxOTQsCisweDE2QzE1QzE3LCAweDE2MjI1MjE4LCAweDE2ODM1ODE5LCAweDE2QTQ1QTFBLAorMHgxNkM1NUMxQiwgMHgxNjI2NTIxQywgMHhFMjAwNTgxRCwgMHg1NTFFMTY4NywKKzB4NTUxRjE2NTgsIDB4MTEyNzE2NTksIDB4MTEyOTExMjgsIDB4MTEyQjExMkEsCisweDExMkQxMTJDLCAweEEwOEUxMTJFLCAweEU2ODMxMTJGLCAweDMwNjA2NjZDLAorMHg1MkY3OEIwQiwgMHhFQTAwRDg4MywgMHg2NTgyMjJBMCwgMHg3ODA0REM4MiwKKzB4NjI4MjJDNTIsIDB4QTA3RUQ2ODEsIDB4RTY5MDI2MjAsIDB4MzA2MDY2NkMsCisweERBN0Y4QjA2LCAweDAwMDk0QTBCLCAweEUyMDA1NkY3LCAweDI2MjBBMDczLAorMHg2NjZDRTY5MSwgMHg4QjEwMzA2MCwgMHg2MjIyRDI3NiwgMHgyMjI4NjIyQywKKzB4RDI3ODg5MDQsIDB4MDAwOTQyMEIsIDB4MDAwOUEwMDMsIDB4NDIwQkQyNzYsCisweDU2RjcwMDA5LCAweEEwNUVFMjAwLCAweEU2OTIyNjIwLCAweDMwNjA2NjZDLAorMHhFMDE4ODk1MSwgMHhFNkIwMEJGQywgMHg2NjZDNjJCQywgMHg4QjJBMzI2MCwKKzB4MDJGQ0UwMTQsIDB4NjgyQ0VBMDAsIDB4NjJBREU5MDQsIDB4ODk0QTMyODMsCisweDZBQURERDY0LCAweDNDREM2Q0EzLCAweDdEMDQ2RUMyLCAweERCNjhENDY3LAorMHgzMkRDNjJBMywgMHg0QjBCREM2NywgMHg0QzBCNkQyMiwgMHhENDY2NjRFMywKKzB4MDAwOTRCMEIsIDB4NjREMzRDMEIsIDB4NEIwQkQ0NjQsIDB4RTYwMDAwMDksCisweDY2NkQ2QkUzLCAweDc2MDEzQjZDLCAweDMyOTM2MjZELCAweDhGRjcyQkQwLAorMHhBRkRBNEQxOSwgMHhFNkI1N0EwOCwgMHgzMjYwNjY2QywgMHhENDVDOEIxMywKKzB4NEIwQkRCNTcsIDB4RDI1QjAwMDksIDB4NjAyMkRCNUIsIDB4Q0IyMEU2RkYsCisweDIyMDI2NjZELCAweERCNTkyQjYyLCAweEUwMTRFMjAwLCAweDU2RjcyQjIwLAorMHhBMDEwMDJGQywgMHhENDU2MjYyMCwgMHg2NTQyRDI1NiwgMHg0MjBCRDQ1NiwKKzB4QTAwODAwMDksIDB4REI1MjAwMDksIDB4NTJCMUU2MDAsIDB4NjIyQ0RCNTMsCisweDUyRjcyQjIxLCAweDdGNTQyMjYwLCAweDZFRjY0RjI2LCAweDZDRjY2REY2LAorMHg2QUY2NkJGNiwgMHgwMDBCNjlGNiwgMHg0RjIyNjhGNiwgMHhFMjQwNjE0RCwKKzB4ODkxNDMxMjMsIDB4MzEyN0UyMUYsIDB4OEIwOUQ3NDksIDB4RDQ0OTYxNEQsCisweEUwMDE3MUUwLCAweDU2NzE0NDBCLCAweDI2NTk2NTA3LCAweDE3NjFBMDA3LAorMHhFMDAxRDQ0NCwgMHg2NjcyNDQwQiwgMHgyNjU5NjUwNywgMHg0RjI2Mjc2MiwKKzB4MDAwOTAwMEIsIDB4NjE0RDRGMjIsIDB4MzEyM0UyNDAsIDB4RTIxRjg5MTIsCisweEQ3M0IzMTI3LCAweDYxNEQ4QjA4LCAweDU2NzFEMjNBLCAweDQyMEI3MUUwLAorMHgyNjBCRTAwMSwgMHgxNzYxQTAwNiwgMHg2NjcyRDIzNiwgMHhFMDAxNDIwQiwKKzB4Mjc2MjI2MEIsIDB4MDAwQjRGMjYsIDB4RTY0MDAwMDksIDB4NDYyODQ2MTgsCisweDYyNTJENTMxLCAweDg5RkMyMjY4LCAweDAwMDkwMDBCLCAweDQ2MThFNjgwLAorMHhENTJENDYyOCwgMHgyMjY4NjI1MiwgMHgwMDBCODlGQywgMHhBMDAxMDAwOSwKKzB4NzIwMUUyMDAsIDB4OEJGQzMyNDIsIDB4MDAwOTAwMEIsIDB4NDYxOEU2ODAsCisweEQ1MjY0NjI4LCAweDIyNjg2MjUyLCAweDAwMEI4QkZDLCAweDJGRTYwMDA5LAorMHg3RkZDNEYyMiwgMHhCRkYxNkU1MywgMHg2MUUyMkY0MiwgMHhFMjgwRDYyMCwKKzB4NTRFMTE2MTUsIDB4MTY0NjQyMTgsIDB4NDIyODU1RTIsIDB4NTdFMzE2NTcsCisweDE2Nzg2RUYyLCAweDI2RTIyRTJCLCAweDRGMjY3RjA0LCAweDZFRjZBRkNFLAorMHgwMDIwMzQ5NCwgMHgwMDExNzgwNCwgMHgwMDIwMzhGNCwgMHgwMDIwMzkwOCwKKzB4MDAyMDA1MEEsIDB4MDAyMDEwMDgsIDB4MDAyMDEwMkUsIDB4MDAyMDNBNTgsCisweDAwMjAxOEEyLCAweDAwMjAxOEU2LCAweDAwMjAzQTZDLCAweDAwMjAzQTc0LAorMHgwMDIwM0E3OCwgMHgwMDFDMzUwMCwgMHgwMDFDMTAwMCwgMHgwMDIwMzk4QSwKKzB4MDAxMTc4MDAsIDB4MDAyMDE4RUUsIDB4MDAyMDNBOEMsIDB4MDAyMDM5OTAsCisweDAwMUMzNzA0LCAweDAwMjAzM0U4LCAweDAwMUMzNzNDLCAweDAwMUMzNzAwLAorMHgwMDFDMzcwQywgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwgMHg2QzUzREQxMCwKKzB4NkU0M0JGQTQsIDB4MkRFMkJGODksIDB4MDAwOUJGQTAsIDB4MkMxMjUxRDUsCisweDFDNDE1NEQ2LCAweDFDNTI1NUQ3LCAweDFDNjM1NkQ4LCAweDZFRjY0RjI2LAorMHgwMDBCNkRGNiwgMHg2MTYzNkNGNiwgMHhBMDA0RTYwMCwgMHg2MjU2NDEwOSwKKzB4MjQyMjc2MDEsIDB4MzYxMjc0MDQsIDB4MDAwQjhCRjksIDB4MDAwMDAwMDksCisweDAwMUMzNzBDLCAweDAwMDlBMTZFLCAweDJGRTYyRkQ2LCAweEREOTQ0RjIyLAorMHhBMDA0OUVCMiwgMHhENDkzMDAwOSwgMHg0MjBCRDI5MywgMHg2MkQyNjVEMiwKKzB4OEJGODIyRTgsIDB4MDAwOUEwMDQsIDB4RDI4RkQ0OTAsIDB4NTVEMTQyMEIsCisweDIyRTg1MkQxLCAweEEwMDQ4QkY4LCAweEQ0OEQwMDA5LCAweDQyMEJEMjhBLAorMHg1MkQyNTVEMiwgMHg4QkY4MjJFOCwgMHgwMDA5QTAwNCwgMHhEMjg2RDQ4OSwKKzB4NTVEMzQyMEIsIDB4MjJFODUyRDMsIDB4QTAwNDhCRjgsIDB4RDQ4NjAwMDksCisweDQyMEJEMjgxLCAweDUyRDQ1NUQ0LCAweDhCRjgyMkU4LCAweDZFRjY0RjI2LAorMHg2REY2MDAwQiwgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwgMHg2RTYzNkM3MywKKzB4NkQ1M0IwMUEsIDB4NjREMzU3RjQsIDB4QjA1RjY1RTMsIDB4QjA3NTY2QzMsCisweEIwQTQwMDA5LCAweEIwQTgwMDA5LCAweEIwQUMwMDA5LCAweEIwQUMwMDA5LAorMHhCMEFGMDAwOSwgMHhCMDMxNTRGNSwgMHg2Q0NENkMwMywgMHg0RjI2NjBDMywKKzB4NkRGNjZFRjYsIDB4NkNGNjAwMEIsIDB4MzQxMkQxNzAsIDB4RDY3MDA1MjksCisweDI2NTBENzcwLCAweDI3NDIwMDBCLCAweDAwMDlBMDE4LCAweDJGRDYyRkM2LAorMHg0RjIyMkZFNiwgMHg2RTYzNkM3MywgMHg2RDUzQkZFRSwgMHg2NEQzNTdGNCwKKzB4QjAzMzY1RTMsIDB4QjA4RDY2QzMsIDB4QjAwRjU0RjUsIDB4NkNDRDZDMDMsCisweDRGMjY2MEMzLCAweDZERjY2RUY2LCAweDZDRjYwMDBCLCAweEU1MDNEMTYyLAorMHhENzYzRDQ2MiwgMHgyMTUyNDUxOCwgMHgyNDcyMDAwQiwgMHhENDVGRDE1RSwKKzB4MjE2MkU2MDAsIDB4MjQ2MjAwMEIsIDB4QkY3MzRGMjIsIDB4QkY3M0U0MEEsCisweEQyNUMwMDA5LCAweDQxMThFMTA0LCAweEU0MEFFNTAwLCAweEJGNjkyMjEyLAorMHhENzU5MjI1MiwgMHhDQjIwNjA3MiwgMHgwMDBCNEYyNiwgMHg0RjIyMjcwMiwKKzB4NDEwQkQxNTYsIDB4RDU1NkU0MDAsIDB4NEYyNjQ1MkIsIDB4RDE1NTJGRTYsCisweDY2MTI2RTYzLCAweDkyMTA0NDE4LCAweDQ0MDg0NTI4LCAweDQ1MDAyNjI5LAorMHgyNjVCNDQwOCwgMHgyNjRCNDQwMCwgMHgyMTYyNDcwOCwgMHhEMTRFNDcwOCwKKzB4MjE3MjI3RUIsIDB4NkVGNjAwMEIsIDB4MUZGRjAzRjAsIDB4NEYyMjJGRTYsCisweEUxMDFERTRBLCAweEJGM0RFNDBBLCAweDY3RTMyRTEyLCAweEU1MDA3NzZDLAorMHhFMjA0RTEzMCwgMHgyNzUyRTQwQSwgMHgyNzUyMjc1MiwgMHgyNzUyMjc1MiwKKzB4Mjc1MjI3NTIsIDB4Mjc1MjI3NTIsIDB4Mjc1MjI3NTIsIDB4Mjc1MjI3NTIsCisweDI3NTIyNzUyLCAweDI3NTIyNzUyLCAweDI3NTIyNzUyLCAweDI3MjIyNzEyLAorMHgyNzUyMjc1MiwgMHgyNzUyMjc1MiwgMHgyNzUyMjc1MiwgMHgyNzUyMjc1MiwKKzB4MTc1QUJGMTgsIDB4MkU2MkU2MDAsIDB4MDAwQjRGMjYsIDB4RDIzNDZFRjYsCisweEU0NDFFMTAxLCAweDAwMEIyMjEyLCAweEQxMzIyMjQyLCAweEU2MDVENDMyLAorMHgwMDBCMjE2MiwgMHgwMDBCMjQ2MiwgMHhEMjMwMDAwOSwgMHhFNDBBRTYwMSwKKzB4MjI2MkFGMDAsIDB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsIDB4N0ZGQzRGMjIsCisweDZDNDNEQjJCLCAweEVEMDA2MEIyLCAweDJCMDJDQjAzLCAweEM5MDM2MEIyLAorMHg2RTAzQTAwOCwgMHg4OTA3M0RDMiwgMHhFNDY0NjBCMiwgMHhCMDdDQzkwMywKKzB4N0QwMTZFMDMsIDB4OEJGNTJFRTgsIDB4OEYwNDNEQzIsIDB4RDQyMTJGRTEsCisweDQ2MEJENjIxLCAweDYyRjEwMDA5LCAweDYwMjM2MjJELCAweDg5RkZDODAxLAorMHg3RjA0NjAyMywgMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwgMHg2QkY2MDAwQiwKKzB4MDAxQzNCODgsIDB4MDAyMDNBQTAsIDB4MDAyMDE4RUUsIDB4MDAyMDNBQTgsCisweDAwMjAzQUIwLCAweDAwMjAzQUI4LCAweDAwMjAzQUMwLCAweDAwMjVFNzIwLAorMHgwMDIwM0RBMCwgMHgwMDIwMzhGOCwgMHgwMDFDNTk2OCwgMHgwMDFDM0I0MCwKKzB4MDAwRjgwMDAsIDB4MDAxRDQwMDQsIDB4MDAxQzM1MDAsIDB4MDAyMDE1RTAsCisweDAwMjAxNjBDLCAweDAwMUM1ODE0LCAweDAwMUM1OUQwLCAweDAwMUM1ODMwLAorMHgwMDFDNjI2OCwgMHgwMDFDNTlBNCwgMHgwMDFDNjM5QywgMHgwMDFDNTgxQywKKzB4MDAxQzU4NjAsIDB4MDAyMDNBQzgsIDB4MDAyMDE4QTIsIDB4OEYwMTQ0MTEsCisweDYwNDM2MDRCLCAweDAwMDkwMDBCLCAweDU2NTFENTJCLCAweDQ2Mjg2MDUyLAorMHgzMDZDMDAwQiwgMHgyRkM2MkZCNiwgMHgyRkU2MkZENiwgMHg0RjEyNEYyMiwKKzB4QkZGMTRGMDIsIDB4NkIwMzZFNDMsIDB4REQyNURDMjQsIDB4MDAwOUJGRUMsCisweDNDMDUzMEI4LCAweDQ2MDkwNjBBLCAweDQ2MDE0NjA5LCAweDAyMEEzRDY1LAorMHg0MjA5NDIwOSwgMHgzMkUyNDIwOSwgMHg0RjA2OEJGMCwgMHg0RjI2NEYxNiwKKzB4NkRGNjZFRjYsIDB4MDAwQjZDRjYsIDB4MkZDNjZCRjYsIDB4MkZFNjJGRDYsCisweDRGMTI0RjIyLCAweEJGQ0Y0RjAyLCAweDZDMDM2RTQzLCAweEJGQ0JERDEzLAorMHgzMEM4MDAwOSwgMHgwNjBBM0QwNSwgMHg0NjA5NDYwOSwgMHgzNkUyNDYwMSwKKzB4NEYwNjhCRjUsIDB4NEYyNjRGMTYsIDB4NkRGNjZFRjYsIDB4NkNGNjAwMEIsCisweDRGMjIyRkU2LCAweEUxMDJERTBCLCAweEU0MDNFNTAwLCAweEJGQjkyRTEyLAorMHhFNjA2MkU1MiwgMHhFNzAwNDYxOCwgMHgyRTYyRTQwMywgMHg0RjI2MkU3MiwKKzB4NkVGNkFGQjAsIDB4MDAwOTAwMEIsIDB4MDAxQzEwNDAsIDB4Q0NDQ0NDQ0QsCisweDEwNjI0REQzLCAweDAwMUQ0MDA0LCAweDJGOTYyRjg2LCAweDJGQjYyRkE2LAorMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwgMHhFNTAwN0Y5OCwgMHg2NDUzRTcxMCwKKzB4NkI1MzQ3MjgsIDB4RUUxQURDQkMsIDB4NjE1MzY1NUQsIDB4MzE1QzQxMDgsCisweDc1MDE0MTA4LCAweDYwNDMzMTdDLCAweDBGMTY2NjVELCAweEVEMDA2MEIzLAorMHgyMUIxMzZFMywgMHg4MTEyODExMSwgMHgxMUQyODExMywgMHgxMUQ0MTFEMywKKzB4NzQwNDhGRUEsIDB4RDhCMTY3RjIsIDB4MTg3MUQ5QjEsIDB4NThGMTI4NzIsCisweDE5ODFEMUIwLCAweDU5RjIyOTgyLCAweDVERjQ1QUYzLCAweDU0RjY1RUY1LAorMHgyMTkyMTE5MSwgMHgxMUEyMTFBMywgMHgxMUQ0MTFENSwgMHgxMUU2MTFFNywKKzB4MTE0ODExNDksIDB4REFBODU1RjcsIDB4NTdGOEVFMDAsIDB4NTJGOUREQTcsCisweDY0RTNENkE3LCAweDJBNTIxQTUxLCAweEQ4QTdEOUE2LCAweDJENzI5QUQ1LAorMHg2RUVEMjYyMiwgMHg0RDA4NkRFMywgMHgzREVDNjFFMywgMHg0RDA4NDEwOCwKKzB4M0Q5QzMxRUMsIDB4NDEwODYwQjMsIDB4ODFEMTJEQjEsIDB4NDEwOEUwNTAsCisweDQwMDhFN0I3LCAweDY3N0M0MTA4LCAweDYwQjM4MUQyLCAweEUyMDAzMThDLAorMHg4MUQzMzQ3MiwgMHgxRDEzMUREMiwgMHg4RDAxRDQ5MywgMHhENDkwMUQyNCwKKzB4QjBCMzY1RDMsIDB4NjRFRDdFMDEsIDB4OEJEQTM0QTIsIDB4MkZEMkRBOEMsCisweEREOTI2OEEyLCAweDJEODI0ODI5LCAweDdERkM2NEEyLCAweEQyODc2OTRELAorMHg2RTIyMkQ5MiwgMHg3RDBDNEUyOSwgMHg2ODIyMkRFMiwgMHg2MThENkFEMywKKzB4MkExNkQ3ODQsIDB4RDQ4QTZENzIsIDB4MjREMkQ1ODMsIDB4RDY4OTVFNzIsCisweDUxNzQxNEUyLCAweDE0MTRFRTAwLCAweEQxODc1ODc2LCAweDU5NzgxNDg2LAorMHgxNDk4RTcxMCwgMHg2NUUzNjI1MiwgMHgyNkUyMTQyQSwgMHhFNjAwNjRFMywKKzB4Njg0MzY0NEQsIDB4Mzg0QzQ4MDgsIDB4MzgxQzQ4MDgsIDB4MEM4NjYwNTMsCisweDA5Q0UyOEIxLCAweDgxOTE2MEIzLCAweDBBQ0U2MDUzLCAweDgxQTI2MDQzLAorMHgwRENFNjA1MywgMHg4MUQzNjBCMywgMHgwOENFNjA1MywgMHgxODgyNzQwMSwKKzB4NjI0RDA5Q0UsIDB4MEFDRTE5RTMsIDB4MUE2NDMyNzMsIDB4NzUwNDhGRTAsCisweEUwMDNEOTZBLCAweDQwMTg2QzkyLCAweDZEOTIyQ0IxLCAweDgxRDFEQTZGLAorMHg2RTkyRTA1MCwgMHg4MUUyNDAwOCwgMHg2MEIzNjE5MiwgMHg2NDkyODExMywKKzB4MTQ0MkU2MDAsIDB4RDQ2OTY3OTIsIDB4Njg5MjE3QTMsIDB4MTg2NEUxRkYsCisweDY1NjNFNzAzLCAweDM2NEM0NjA4LCAweDI2MTI3NTAxLCAweDM2NzM2NjVELAorMHhEQzVCOEJGOCwgMHg2REMyRTAwMywgMHgyREIxNDAxOCwgMHhEMjYwNkVDMiwKKzB4NjFDMjgxRTEsIDB4MTExMkVFMDAsIDB4RTAyNDY0QzIsIDB4NjVDMjE0MjMsCisweDE1RTRENDVCLCAweEU1ODA2N0MyLCAweDY4QzI4MTcyLCAweDgxODM2NkUzLAorMHg2NjZENjU1QywgMHg3NjA0Njk2MywgMHgzOTRDNkE2RCwgMHg4RkY4M0E1MywKKzB4REI1NDI5RTIsIDB4MjRCMkRDNTQsIDB4MjRDMjc0MDQsIDB4NEYyNjdGNjgsCisweDZERjY2RUY2LCAweDZCRjY2Q0Y2LCAweDY5RjY2QUY2LCAweDY4RjYwMDBCLAorMHg2MDExNjE0MiwgMHg4RjAzQzgwMywgMHhEMjNERTUwMCwgMHg4QjA2MzQyMCwKKzB4QzkwMzYwMTEsIDB4OEIwNjg4MDIsIDB4MzQyMEQyMzksIDB4NTYxMjhCMDMsCisweDUyNjQ2NTEzLCAweDAwMEIyNDIyLCAweDAxMTM2MDUzLCAweDJGRTYyRkQ2LAorMHg3RkVDNEYyMiwgMHg2MjUzNkU1MywgMHg2RDQzRTU1MCwgMHg0NTA4RTQwMCwKKzB4RTEwMUEwMDEsIDB4NjA0MzUyMjQsIDB4ODEyMTIyMTEsIDB4NjA1MzgxMjMsCisweDU2RTI4MTIyLCAweDhCRjUzNjIwLCAweDE2RTREMjM4LCAweEU2MTQ2NEYzLAorMHg2NUUzNDIwQiwgMHhFNEZDNjVFMSwgMHgyRTUxMjU0OSwgMHg2NUYzNjFGMSwKKzB4MkYxMTIxNDksIDB4RDEzMTU0RDEsIDB4RTYxNDQxMEIsIDB4NjA3MTU3RDEsCisweDI3MDFDQjAxLCAweDdGMTQxREUxLCAweDZFRjY0RjI2LCAweDZERjYwMDBCLAorMHgyRkU2MkZENiwgMHg3RkVDNEYyMiwgMHg2NjUzNkU1MywgMHg2RDQzRTVGQywKKzB4MjA1OTYwNjEsIDB4MjYwMUNCMDEsIDB4MzI2MDUyRTIsIDB4MTJFNDhCMDYsCisweDMxRTA1MUUyLCAweDUyRDE4QjA0LCAweDFFMjJBMDAyLCAweDU2NjRBRkYwLAorMHg2NEYzRDIxRSwgMHg0MjBCRTYxNCwgMHg2N0UxNjVFMywgMHgyNzE5RTFGQywKKzB4NjdGMTJFNzEsIDB4MjcxOTU0RDEsIDB4NjVGM0QxMTgsIDB4NDEwQkU2MTQsCisweDUyRDEyRjcxLCAweENCMDE2MDIxLCAweDFERTEyMjAxLCAweDRGMjY3RjE0LAorMHgwMDBCNkVGNiwgMHgwMDAwNkRGNiwgMHgwMDIwMzkyNCwgMHgwMDIwMzRGNCwKKzB4MDAyMDM0RkMsIDB4MDAyMDM1MDQsIDB4MDAyMDM1MkMsIDB4MDAyMDM5MTAsCisweDAwMjAzOTE4LCAweDAwMTAwMjA4LCAweDAwMTAxN0MwLCAweDAwMUUyMTBDLAorMHgwMDFDM0QwMCwgMHgwMDIwMzk2NCwgMHgwMDEwMDBDOCwgMHgwMDExNzg4MCwKKzB4MDAxMTc3ODAsIDB4MDAwNDAwMjAsIDB4MDAyNkM0MDEsIDB4MDAyMDBFRDYsCisweDRGMjIyRkU2LCAweERFNDI2MjRDLCAweDQyMDA0MjA4LCAweDNFMkNBMDA1LAorMHhENDQwNTI1MiwgMHhCRjY5NTYyNCwgMHg2NUUyMkU2MiwgMHgzNTIwNTJFMSwKKzB4RDYzRDhCRjYsIDB4NEYyNjI2MjIsIDB4NkVGNjAwMEIsIDB4MkZDNjJGQjYsCisweDJGRTYyRkQ2LCAweERDMzk0RjIyLCAweDUyQzFEQjM5LCAweDM2MjA2NkMyLAorMHg2MDYxODkxQywgMHg4ODAxQzkwMywgMHhERTM0ODkxOCwgMHhCRjM3REQzNSwKKzB4NjUwMzY0RTMsIDB4NjZCMjg1MDMsIDB4MzI2MjYyMEQsIDB4RDQzMjg5MDcsCisweDAwMDlCRjc2LCAweDREMEJENDMxLCAweEFGRTYwMDA5LCAweEJGM0QwMDA5LAorMHhENDJGNjRFMywgMHgwMDA5NEQwQiwgMHgwMDA5QUZERiwgMHgyMjYyRDIyRCwKKzB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkJGNjAwMEIsIDB4MkZENjJGQzYsCisweDRGMjIyRkU2LCAweEREMjlEQzI4LCAweDZFNDM2MEMyLCAweDA0REU0MDA4LAorMHhFNjE0RDEyNywgMHg2NUUzNDEwQiwgMHhEMTI3RDcyNiwgMHg1NUUyMjdFMiwKKzB4MzVFMDUyNTQsIDB4MjEyMjhGMDQsIDB4NDAwODYwQzIsIDB4MTIyMjAyREUsCisweDYwNTM2NUMyLCAweDc1MDE0MDA4LCAweDBERTYwNkRFLCAweEM5MEY2MDUzLAorMHg2MDYzMkMwMiwgMHg2RUY2NEYyNiwgMHgwMDBCNkRGNiwgMHg4NTQzNkNGNiwKKzB4NjUwRDU2NDMsIDB4NjIyRDYyNjIsIDB4MzUyNzcyMDQsIDB4RTEwMDhGMEMsCisweDIyNjg5NjBDLCAweEQ2MTU4QjAzLCAweDcyMDE1MjYxLCAweEQ2MTMxNjIxLAorMHg2MjYyRTEwMSwgMHgyNjIyNzIwMSwgMHg2MDEzMDAwQiwgMHgwMDAwMDFGRiwKKzB4MDAyMDM1MDQsIDB4MDAyMDM0RkMsIDB4MDAxQzNEMDAsIDB4MDAyMDM1MkMsCisweDAwMjAzOEY0LCAweDAwMjAxOEEyLCAweDAwMjAzNEY0LCAweDAwMjAzQUYwLAorMHgwMDIwM0FGNCwgMHgwMDFDM0QyOCwgMHgwMDIwMzk2NCwgMHgwMDIwMzkyNCwKKzB4MDAyMDBFRDYsIDB4MDAyMDM5NjgsIDB4MDAyMDM5NkMsIDB4MDAxMTc3NTQsCisweDJGQzYyRkI2LCAweDJGRTYyRkQ2LCAweDdGRjg0RjIyLCAweDYwMjJEMjM3LAorMHg4RDU4QzgwMywgMHhERTM2MkYwMSwgMHhEQjM3REMzNiwgMHg2NkMyNTJDMSwKKzB4ODkyRjM2MjAsIDB4QzkwMzYwNjEsIDB4ODkyQjg4MDEsIDB4RDIzM0REMzEsCisweDY0RDM0MjBCLCAweDFGMDE2NTAzLCAweDg4MDE2MEIxLCAweEQyMzA4QjA0LAorMHg2NEQzNDIwQiwgMHgwMDA5QUZFQSwgMHg4NTYxNTY1MywgMHg4OTA0QzgyMCwKKzB4RTA1MEQ3MkMsIDB4NzIwMTAyN0UsIDB4RDIyQjA3MjYsIDB4NjQ1MzQyMEIsCisweDg5MDcyMDA4LCAweDU1RjFEMTI2LCAweDY0RDM0MTBCLCAweEU2MDFENzI3LAorMHgyNzYyQUZENCwgMHg1NUYxRDIyNiwgMHg2NEUzNDIwQiwgMHhFNjAxRDEyNSwKKzB4MjE2MkFGQ0MsIDB4REQyNURFMjQsIDB4REMyNkRCMjUsIDB4NjZEMjUyRDEsCisweDg5MTgzNjIwLCAweEM5MDM2MDYxLCAweDg5MTQ4ODAxLCAweEQxMTdENDFGLAorMHgwMDA5NDEwQiwgMHgzNkUwNTYwMywgMHg2NTAzOEYwNCwgMHgyQjIwRTIwMSwKKzB4MkM1MkFGRUMsIDB4RDcxMkQ0MUMsIDB4MDAwOTQ3MEIsIDB4RTYwMUQxMTUsCisweEFGRTM0NjE4LCAweDYwRjEyMTYyLCAweDg5MDdDODA0LCAweDdGMDhEMjE3LAorMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwgMHg2QkY2NDIyQiwgMHg0RjI2N0YwOCwKKzB4NkRGNjZFRjYsIDB4MDAwQjZDRjYsIDB4MDAwMDZCRjYsIDB4MDAxRTIxMDAsCisweDAwMjAzNTA0LCAweDAwMjAzNEZDLCAweDAwMjAzOThDLCAweDAwMjAxNEEwLAorMHgwMDIwMTRDQywgMHgwMDIwMzQ5NCwgMHgwMDIwMTZCRSwgMHgwMDFFMjEyQywKKzB4MDAyMDE1MzAsIDB4MDAxQzNEMzAsIDB4MDAxMTc4ODAsIDB4MDAyMDM0RjQsCisweDAwMjAzOTE0LCAweDAwMjAzOTEwLCAweDAwMjAzNTJDLCAweDAwMjAwNjEwLAorMHhFNjAxRDIwMywgMHgxMjY1RDUwMywgMHgwMDBCMjI1MiwgMHgwMDAwMTI2NiwKKzB4MDAxQzEwMTAsIDB4MDAwMEMzNEYsIDB4MDAwOTAwMEIsIDB4MkZENjJGQzYsCisweDRGMjIyRkU2LCAweDZENDM2QzUzLCAweEVFMDBBMDA0LCAweDdFMDE2NEQ0LAorMHg2NDRDQkZGMiwgMHg4QkY5M0VDMiwgMHg2RUY2NEYyNiwgMHgwMDBCNkRGNiwKKzB4RTUwMDZDRjYsIDB4NjY0M0EwMDIsIDB4NzYwMTc1MDEsIDB4MjIyODYyNjAsCisweEFGRTM4QkZBLCAweDJGRTYwMDA5LCAweDc1MDc2MjUzLCAweEUxMDg2NzUzLAorMHg2MDQzRUUwQSwgMHg0NDA5QzkwRiwgMHg2NTAzMzBFMiwgMHg4RDAxNDQwOSwKKzB4RTYzMEU2MzcsIDB4NDExMDM2NUMsIDB4OEZGMjI3NjAsIDB4RTAwMDc3RkYsCisweDAwMEI4MDI4LCAweDAwMEI2RUY2LCAweDAwMEJFMDAwLCAweDJGRTZFMDAwLAorMHg3RkVDNEYyMiwgMHg2RTQzNjI1MywgMHhCRkRDNjVGMywgMHhCRkQwNjQyMywKKzB4QkZDRTY0RTMsIDB4RDQwMzY0RjMsIDB4MDAwOUJGQ0IsIDB4NEYyNjdGMTQsCisweDZFRjYwMDBCLCAweDAwMjAzQUY4LCAweEU0RkREMjlGLCAweEQ3OUY2MTIyLAorMHgyMjEyMjE0OSwgMHg3NDAxNjAyMiwgMHgyMjAyQ0IwMSwgMHhENTlDNjYyMiwKKzB4MjI2MjI2NDksIDB4Qzg0MDYwNzAsIDB4NjA1Mjg5MDIsIDB4MjUwMkNCMDQsCisweEUxRjc2NDUyLCAweDI1NDIyNDE5LCAweEU3MDE2MDUyLCAweDI1MDJDQjQwLAorMHhFNjAyNjA1MiwgMHgyNTAyQzlDRiwgMHg0NzE4NjA1MiwgMHgyNTAyQ0IxMCwKKzB4Q0IwMzYwNTIsIDB4MTU2MjI1MDIsIDB4MTU3MzAwMEIsIDB4RDc4RUQ1OEQsCisweEQ0OEZEMjhFLCAweEU2MDBFMTAwLCAweDI3MTEyNTExLCAweEFGQ0IyMjEwLAorMHg2NjRDMjQ2MSwgMHg0NjAwRDI4QiwgMHg2MDYwMzYyQywgMHgwMDBCQ0IxMCwKKzB4NjU0QzI2MDAsIDB4NDUwMEQyODcsIDB4NjY1MDM1MkMsIDB4MjYxOUUxRUYsCisweDI1NjAwMDBCLCAweEQyODQ2NjRDLCAweDM2MkM0NjAwLCAweENCMTA2MDYwLAorMHgyNjAwMDAwQiwgMHhEMjgwNjU0QywgMHgzNTJDNDUwMCwgMHhFMUVGNjY1MCwKKzB4MDAwQjI2MTksIDB4NjY0QzI1NjAsIDB4NDYwMEQyN0EsIDB4NjA2MDM2MkMsCisweDAwMEJDQjA4LCAweDY1NEMyNjAwLCAweDQ1MDBEMjc2LCAweDY2NTAzNTJDLAorMHgyNjE5RTFGNywgMHgyNTYwMDAwQiwgMHhEMjczNjY0QywgMHgzNjJDNDYwMCwKKzB4Q0IwODYwNjAsIDB4MjYwMDAwMEIsIDB4RDI2RjY1NEMsIDB4MzUyQzQ1MDAsCisweEUxRjc2NjUwLCAweDAwMEIyNjE5LCAweDYyNEMyNTYwLCAweDQyMDBENjY5LAorMHg2MDIwMzI2QywgMHg0MDIxQzkwOCwgMHg0MDIxNDAyMSwgMHg2MDBDMDAwQiwKKzB4RDY2NTYyNEMsIDB4MzI2QzQyMDAsIDB4QzkwODYwMjAsIDB4NDAyMTQwMjEsCisweDAwMEI0MDIxLCAweEQxNjE2MDBDLCAweDM0MUM2NDRDLCAweDAwMEI2MjQwLAorMHhEMTVGNjAyQywgMHgzNDFDNjQ0QywgMHgwMDBCNjI0MCwgMHgyRkU2NjAyQywKKzB4NkU0MzRGMjIsIDB4RTYwQTY0NUMsIDB4ODkxNDM0NjcsIDB4MDAwOUJGRUIsCisweDYwRUM2NDBDLCAweDhCMDI4ODAxLCAweEEwMDJFMDBGLCAweDQ0MDkyNDA5LAorMHg2MjRDNDQwOSwgMHgzMjYzRTYwQSwgMHhCRkUyODkwNSwgMHg2MjBDNjQ0QywKKzB4Qzg4MDYwMjMsIDB4RTIwMDhCMDAsIDB4NEYyNjYwMjMsIDB4NkVGNjAwMEIsCisweEQ2NEM0RjIyLCAweDg4MDE2MDYyLCAweEIyNTc4QjAzLCAweEEwMDMwMDA5LAorMHhEMjQ5MDAwOSwgMHgyMjYwRTY0MCwgMHhFMjAwRDY0OCwgMHgwMDBCNEYyNiwKKzB4NEYyMjI2MjIsIDB4NjA2MkQ2NDMsIDB4OEIwMTg4MDIsIDB4MDAwOUIyQTAsCisweEUyMDBENjQyLCAweDAwMEI0RjI2LCAweEQ1M0UyNjIyLCAweEUxMDBENDNFLAorMHgyNTEyRTcwMSwgMHgyNDcwMDAwQiwgMHhFNjA0RDIzQiwgMHgyMjYwMDAwQiwKKzB4RDQzQjRGMjIsIDB4NDEwQkQxM0IsIDB4RDUzQjAwMDksIDB4NjY1MEUxRkQsCisweDI2MTlEMjNBLCAweDI1NjBFNzAwLCAweDAwMEI0RjI2LCAweDRGMjIyMjcwLAorMHhEMjM4RDUzNywgMHhENzM4NjE1MiwgMHgyNTEyNjExRCwgMHhFNkZGNjQ1MiwKKzB4MjU0MjI0MkIsIDB4RDIyRkQ0MzUsIDB4NDIwQjY2NkQsIDB4RDUyRTI3NjIsCisweDY3NTBFMUZCLCAweDRGMjYyNzE5LCAweDI1NzAwMDBCLCAweEQ0MzA0RjIyLAorMHg0MTBCRDEyOCwgMHhENTI4MDAwOSwgMHg2NjUwRTdGNywgMHg0RjI2MjY3OSwKKzB4MjU2MDAwMEIsIDB4OTQyNUQ1MjQsIDB4MjI0OTYyNTAsIDB4MjUyMDAwMEIsCisweEU0QkZENTIxLCAweDIyNDk2MjUwLCAweDI1MjAwMDBCLCAweEQyMjU0RjIyLAorMHg2MDBEODUyMiwgMHg4OTExMjAwOCwgMHg4OTQ1ODgwMSwgMHg4OTQ3ODgwMywKKzB4ODk0OTg4MDUsIDB4ODk0Rjg4MDYsIDB4ODk1NTg4MDgsIDB4ODk1Qjg4MDksCisweDg5NjE4ODBBLCAweDg5Njc4ODBCLCAweDAwMDlBMDZFLCAweDAwMDlCMDcwLAorMHg2MDBDQTA2QiwgMHgwMDAwRkY3RiwgMHgwMDFFMjE0OCwgMHgwMDFFMTAwMCwKKzB4MDAxRTExMDgsIDB4MDAyMDM5QzQsIDB4MDAyMDM5QzYsIDB4MDAyMDM5RTUsCisweDAwMjAzOUE4LCAweDAwMUUxMDNGLCAweDAwMUUxMDVGLCAweDAwMUUxMDJGLAorMHgwMDFFMTA5MCwgMHgwMDIwMzlDQywgMHgwMDFFMTAwQiwgMHgwMDIwMzlDOCwKKzB4MDAyMDNBRkMsIDB4MDAyMDE4QTIsIDB4MDAxRTEwMjgsIDB4MDAyMDM5RTQsCisweDAwMUQ0MDIwLCAweDk4NzYwMDAwLCAweDAwMUMxMDAwLCAweDAwMjAzQjA4LAorMHgwMDIwM0IxOCwgMHgwMDIwMzk5QywgMHgwMDA5QjA0QywgMHg2MDBDQTAzNSwKKzB4MDAwOUIwNTUsIDB4NjAwQ0EwMzEsIDB4NjI2MEQ2ODQsIDB4OEIyQjIyMjgsCisweDAwMDlCMDYxLCAweDYwMENBMDI5LCAweDYyNjBENjgwLCAweDhCMjMyMjI4LAorMHgwMDA5QjA2OSwgMHg2MDBDQTAyMSwgMHg2MjYwRDY3QywgMHg4QjFCMjIyOCwKKzB4MDAwOUIwQzcsIDB4NjAwQ0EwMTksIDB4NjI2MEQ2NzgsIDB4OEIxMzIyMjgsCisweDAwMDlCMENELCAweDYwMENBMDExLCAweDYyNjBENjc0LCAweDhCMEIyMjI4LAorMHgwMDA5QjEyNSwgMHg2MDBDQTAwOSwgMHg2MjYwRDY3MCwgMHg4QjAzMjIyOCwKKzB4MDAwOUIxM0QsIDB4NjAwQ0EwMDEsIDB4NEYyNkUwMDAsIDB4MDAwOTAwMEIsCisweEQyNkNEMTZCLCAweEQ1NkM4NDEyLCAweDQwMDBDOTBGLCAweEQ3NkIwMTJELAorMHhFNDAzRDY2QiwgMHhFMjBGNjExQywgMHgyNTQwRTAwMSwgMHgyNTIwMjcxMiwKKzB4MjYwMjAwMEIsIDB4RTYwMUQyNjIsIDB4MzA2Njg1MjMsIDB4RTAwMDhEMDUsCisweEQ2NjNEMjYwLCAweEUwMDE4MTIyLCAweDAwMEIyNjAyLCAweEQyNUMwMDA5LAorMHg2MDBEODUyMywgMHg4OTA1MjAwOCwgMHg4QjBBODgwMSwgMHg2MDYwRDY1RCwKKzB4MjYwMENCMDEsIDB4RDQ1N0Q2NUEsIDB4RTAwMUUxMDEsIDB4MDAwQjI2MTIsCisweDAwMEI4MTQyLCAweEQxNTJFMDAwLCAweDg1MTNFNTAxLCAweDY0MEQ0NTE4LAorMHg2NjAzMzQ1MywgMHhFMDAwOEQwNSwgMHhENTUxRDI1MywgMHgyMjYwRTAwMSwKKzB4MDAwQjI1MDIsIDB4NEYyMjAwMDksIDB4ODUxM0QxNDksIDB4NjQ1MzY1MEQsCisweDYyNDk0NDE5LCAweDIyN0Q2NzJFLCAweDg4MDE2MDJDLCAweDg4MDI4OTA5LAorMHg4ODAzODkxMCwgMHg4ODA2ODkxQSwgMHg4ODA3ODkzNSwgMHhBMDRDODkzQiwKKzB4RDU0NjAwMDksIDB4NjY1MkQ3NDYsIDB4Mjc2MkQ0NDYsIDB4NjIyQzYyNjEsCisweDI0MjFBMDM4LCAweDIyMjg2MjVDLCAweEQ0NDM4QjNGLCAweDY2NDJENTQwLAorMHgyNTYyRDQ0MCwgMHgyNDAxODU2MSwgMHg2MjAzQTAyQywgMHgyMDA4NjA1QywKKzB4ODgxMDg5MDcsIDB4ODgyMDg5MDgsIDB4ODgzMDg5MDksIDB4QTAyQzg5MEEsCisweEQyM0EwMDA5LCAweDYyMjJBMDA4LCAweEEwMDVEMjM5LCAweEQyMzk2MjIyLAorMHg2MjIyQTAwMiwgMHg2MjYyRDYzOCwgMHhENDMyRDUzMSwgMHg2NjIxMjUyMiwKKzB4QTAwRjYyNkMsIDB4RDYzNTI0MjEsIDB4NjI2MUQ1MkQsIDB4NjIyQ0Q0MkQsCisweEEwMDcyNTYyLCAweEQ2MzIyNDIxLCAweDg1NjFENTI5LCAweDI1NjJENDI5LAorMHg2MjAzMjQwMSwgMHg2NjJEODUxNSwgMHgzNjE3NjEwRCwgMHg2NTAzOEYwMSwKKzB4QjBDQjI0NTEsIDB4QTAwMTAwMDksIDB4RTAwMEUwMDEsIDB4MDAwQjRGMjYsCisweEQ2MTkwMDA5LCAweEQ0MjdFMTAxLCAweDY1NDEyNjEwLCAweEQxMThENzE3LAorMHhFMjBGNjU1RCwgMHgyNzUyRTAwMSwgMHgwMDBCMjYyMCwgMHgyRkU2MjEwMiwKKzB4RDIwRjRGMjIsIDB4NjQwQzg1MjMsIDB4OEIwODI0NDgsIDB4RDUxMUQ2MUQsCisweDI2MjFFMjAwLCAweDk0MEY4NDUxLCAweEEwNDgyMDQ5LCAweERFMEQ4MDUxLAorMHhDODQwNjBFMCwgMHhFMjAxOEQzMiwgMHg4OTQ0MzQyNywgMHhEMjE2RDYxNSwKKzB4MjY0MTQyMEIsIDB4MDAwOUEwMzAsIDB4MDAwMEZGN0YsIDB4MDAyMDM5RTUsCisweDAwMjAzOTlDLCAweDAwMjAzOUE4LCAweDAwMUUxMTAwLCAweDAwMUUxMDBDLAorMHgwMDIwMzlDOCwgMHgwMDFFMTAwMCwgMHgwMDFFMTAwMSwgMHgwMDIwMzlEMCwKKzB4MDAyMDM5QjAsIDB4MDAyMDM5QjQsIDB4MDAyMDM5QjgsIDB4MDAyMDM5RDQsCisweDAwMjAzOUQ4LCAweDAwMjAzOURDLCAweDAwMjAzOUUwLCAweDAwMjAzRTA0LAorMHgwMDIwM0UwRSwgMHgwMDIwMzlDMiwgMHgwMDIwMjg4NiwgMHg4OTEyMzQyNywKKzB4RDI5NEQ2OTMsIDB4MjY0MTQyMEIsIDB4Q0I4MDg0RTEsIDB4ODBFMUIwRjUsCisweEQ2OTE2MEUwLCAweDJFMDBDQjA0LCAweEM5M0Y2MDYwLCAweEQ2OEYyNjAwLAorMHhBMDAxRTAwMSwgMHhFMDAwMjYwMiwgMHgwMDBCNEYyNiwgMHhENjhDNkVGNiwKKzB4Qzg4MDYwNjAsIDB4RDI4Njg5MTksIDB4ODgwMTYwMjEsIDB4RDI4OThCMTUsCisweDg1MjRFNTAxLCAweDg5MTAzMDU2LCAweEUyMDNEMTg3LCAweDIxMjBENDg3LAorMHhFMDBCNjU0MSwgMHgwNjU2NjU1RCwgMHhFNDBGRDU4NSwgMHgyMTQwRTcwMiwKKzB4RDc3RTI1NzEsIDB4MDAwQkUwMDEsIDB4MDAwQjI3MDIsIDB4MkZFNkUwMDAsCisweERFODA0RjIyLCAweEM4ODA4NEUxLCAweEQ1N0E4OTJDLCAweDIwMDg4NTU0LAorMHg2MTAzOEYyOCwgMHg4NTUzRDc3QywgMHg2NDAzNjY3MiwgMHg4NTY2NjUwQywKKzB4MzUyMDYyMEMsIDB4RDY3OThCMUUsIDB4NjUxQ0Q3NzQsIDB4MjY1MTY0NEMsCisweDYwRTAyNzQxLCAweDg5MDRDODQwLCAweDQyMEJEMjc1LCAweEEwMDMwMDA5LAorMHhEMjY4MDAwOSwgMHgwMDA5NDIwQiwgMHgwMDA5QjA5RiwgMHhFMjAxRDE2NywKKzB4NjBFMDIxMjIsIDB4Q0IwNEQ0NjQsIDB4NjA0MDJFMDAsIDB4MjQwMEM5M0YsCisweDYwMjNBMDAxLCAweDRGMjZFMDAwLCAweDZFRjYwMDBCLCAweDJGQjYyRkE2LAorMHgyRkQ2MkZDNiwgMHhEQTYyMkZFNiwgMHg2NkExRTI0MCwgMHgzNjIyREM1RSwKKzB4NjI2Mzg5MDAsIDB4NkVEMzZEMkMsIDB4NEUyMTM2RDgsIDB4NEUyMTJBNjEsCisweERCNjFENDYwLCAweEU3MDBBMDBGLCAweDc3MDE2MkIyLCAweDcxMDI2MTIzLAorMHg2NjIxMkIxMiwgMHg3MTAyNjIxMywgMHg2MTIxMkIxMiwgMHg2NTFENjY2RCwKKzB4MzU2QzQ1MjgsIDB4NjI3QzI0NTIsIDB4OEJFRDMyRTMsIDB4QzkwMzYwRDMsCisweDhCMTA4ODAzLCAweDYxNzM2N0IyLCAweDJCMTI3MTAyLCAweDcxMDI2RTEzLAorMHgyQjEyNjU3MSwgMHg2NTVENkRFMSwgMHg0MjI4NjJERCwgMHgzMjVDRTEwNywKKzB4QTAwQzJDMTAsIDB4ODgwMjI0MjIsIDB4QTAwMzhCMDEsIDB4ODgwMUUyMDMsCisweEUyMDE4QjA1LCAweDY2QjIyQzIwLCAweDY1NUQ2NTYxLCAweEU2MEYyNDUyLAorMHg2N0ExMkM2MCwgMHg4QjA1Mjc3OCwgMHhERDM4REM0NCwgMHhFQjAxRUEwMCwKKzB4MkRCMjJDQTIsIDB4NkRGNjZFRjYsIDB4NkJGNjZDRjYsIDB4NkFGNjAwMEIsCisweDJGRTYyRkQ2LCAweEUyNDBERDM2LCAweDM2MjI2NkQxLCAweDYyNjM4OTAwLAorMHgzNjc4NjcyQywgMHg3NzAzREUzOCwgMHg0NzIxMkQ2MSwgMHg2NEUyRDYzNSwKKzB4QTAwRTQ3MjEsIDB4NjU2MkUxMDAsIDB4NjI1MzcxMDEsIDB4NzQwMTI0NTAsCisweDI0MjA0MjE5LCAweDQ1Mjk3NDAxLCAweDc0MDEyNDUwLCAweDI0NTA0NTE5LAorMHg2MjFDNzQwMSwgMHg4QkVFMzI3MywgMHg2NkUyNDIwMCwgMHg0MjAwNjFEMSwKKzB4MjExODM2MkMsIDB4MkU2MjhGMDYsIDB4REQxQ0Q3MjgsIDB4RTUwMUU0MDAsCisweDJENTIyNzQyLCAweDAwMEI2RUY2LCAweDJGRDY2REY2LCAweDRGMjIyRkU2LAorMHhFRDBBRUUwMSwgMHg2NEUzQkM4NSwgMHhCQzhBNjRFMywgMHg2MkVDN0UwMSwKKzB4OEJGNzMyRDcsIDB4QkM4REVFMDEsIDB4NjRFMzY0RTMsIDB4N0UwMUJDOTIsCisweDMyRDc2MkVDLCAweDRGMjY4QkY3LCAweDAwMEI2RUY2LCAweEQxMTg2REY2LAorMHhENDE4OTIwRCwgMHg3MjEyMjEyMiwgMHgyNDIyRDYxNywgMHhENzE3NzIwNCwKKzB4NzIyMDI2MjIsIDB4MjcyMkQxMTYsIDB4MDAwQjcyMzAsIDB4MTM3QTIxMjIsCisweDAwMjAzOUMyLCAweDAwMjAyOTkyLCAweDAwMUUxMDE1LCAweDAwMjAzOUM4LAorMHgwMDFFMTAwMSwgMHgwMDIwMzk5QywgMHgwMDFFMTEwMCwgMHgwMDIwMzlDNiwKKzB4MDAyMDM5QjQsIDB4MDAxRTEwMDAsIDB4MDAyMDM5QjgsIDB4MDAyMDM5QzQsCisweDAwMjAyODg2LCAweDAwMUUxMDBDLCAweDAwMjAzOUIwLCAweDAwMjAzOUNDLAorMHgwMDIwMzlEMCwgMHgwMDIwMzlENCwgMHgwMDIwMzlEOCwgMHgwMDIwMzlEQywKKzB4MDAyMDM5RTAsIDB4NEYyMjJGRTYsIDB4RDY3MDdGRkMsIDB4ODgwMTYwNjAsCisweEUyMDE4OTUxLCAweDI2MjBCRkJCLCAweEQ1NkVEMTZELCAweERFNkU2MDEwLAorMHg2NEUzNjU1MiwgMHg3NDAyQzg0MCwgMHg4RDIyRDE2QywgMHhEMjZDNzUwMiwKKzB4RTYwMUQ3NkMsIDB4RTcwNDI3MjIsIDB4NzYwMTYyNTUsIDB4NjI2QzI0MjEsCisweDhGRjkzMjczLCAweEQ0NjM3NDAyLCAweDYyNDJFNjAxLCAweDY0MEQ4NTI4LAorMHg2NzQ5NDQxOSwgMHgyNzVENjU3RSwgMHg4MUU0NjA3QywgMHhFNDE3RDU2MiwKKzB4Njc1NTc2MDEsIDB4MzI0MzYyNkMsIDB4OEZGOTIxNzEsIDB4QTAyMDcxMDIsCisweEQyNUUwMDA5LCAweEU2MDFENzVCLCAweEU3MDQyNzIyLCAweDc2MDE2MjU1LAorMHg2MjZDMjQyMSwgMHg4RkY5MzI3MywgMHhENDUyNzQwMiwgMHg2MjQyRTYwMSwKKzB4NjQwRDg1MjgsIDB4Njc0OTQ0MTksIDB4Mjc1RDY1N0UsIDB4ODFFNDYwN0MsCisweEU0MTdENTUzLCAweDY3NTU3NjAxLCAweDMyNDM2MjZDLCAweDhGRjkyMTcxLAorMHg5Mjg5NzEwMiwgMHhEMjQ2MkUyMSwgMHg1RTIzRDc0RSwgMHg2NEYyMkZFMiwKKzB4NjA0MzY1RjIsIDB4MjcwMEM5ODAsIDB4Qzk2MDYwNDMsIDB4ODA3MTYxMDMsCisweEM5MDM2MDQzLCAweDgwNzI0NTE5LCAweDY1RjI2MDVDLCAweDgxNzI2NkYyLAorMHg0NjE5NDYyOSwgMHg2MDZDNDUyOSwgMHg0MDE4NjQ1QywgMHg4MTczMzA0QywKKzB4MjExODVFMjMsIDB4NjRGMjJGRTIsIDB4NkU0QzYyRjIsIDB4NjAyQzQyMTksCisweDY2RjI2MkYyLCAweDQ2Mjk0MDE4LCAweDQ2MTkzMEVDLCAweDQyMjk4MTc0LAorMHg2NTJDNjA2QywgMHgzMDVDNDAxOCwgMHg4MTc1OEYwNywgMHgwMDA5QkM5NiwKKzB4MjIyODYyMEMsIDB4QTAwQTg5MDgsIDB4NjAxMzAwMDksIDB4OEIwMzg4NDAsCisweDAwMDlCMDA5LCAweDAwMDlBMDAzLCAweEUyMDJENjJGLCAweDdGMDQyNjIyLAorMHgwMDBCNEYyNiwgMHg0RjIyNkVGNiwgMHg4NTUyRDUyQSwgMHg4ODMwNjAwRCwKKzB4ODgzMTg5MDMsIDB4QTAzNDg5MjMsIDB4ODU1NTAwMDksIDB4RDQyOEQ3MjcsCisweDg1NTMyNzAxLCAweDYxMERENjI3LCAweDI0MTI0MTE4LCAweDQ2MEJENDI2LAorMHhENzIzMDAwOSwgMHhEMjI2RDQyNSwgMHg2NTcyNDIwQiwgMHhFMjMwRDEyMCwKKzB4NDIyODY3MTIsIDB4MjcyOUU2MjAsIDB4Mzc2MDQ2MjgsIDB4RDYyMThCMDMsCisweEEwMTZFMjAwLCAweEQ2MUYyNjIyLCAweEEwMTJFMjAyLCAweEQxMTgyNjIyLAorMHg2MjEyRTUzMCwgMHhFNjIwNDUyOCwgMHg0NjI4MjI1OSwgMHg4OTA4MzI2MCwKKzB4RDQxQUQxMTksIDB4RTYwMUQ1MTMsIDB4MjE2MDQ1MEIsIDB4NDcyQkQ3MTgsCisweDRGMjY0RjI2LCAweDAwMDkwMDBCLCAweDAwMDAwNjBBLCAweDAwMjAzOUU0LAorMHgwMDFFMTAwMCwgMHgwMDIwMzlEMCwgMHgwMDIwM0UwNCwgMHgwMDIwM0UxMCwKKzB4MDAyMDNEQTgsIDB4MDAyMDM5QjgsIDB4MDAyMDNERDgsIDB4MDAyMDNERDYsCisweDAwMjAzREFBLCAweDAwMjAzOTlDLCAweDAwMjAzOUM4LCAweDAwMjAzOUI0LAorMHgwMDIwMzlCMCwgMHgwMDIwMThBMiwgMHgwMDIwM0IyNCwgMHgwMDIwM0IyOCwKKzB4MDAyMDE4RUUsIDB4MDAyMDM5Q0MsIDB4MDAxRTEwMEIsIDB4MDAyMDNCM0MsCisweDAwMTE0MDA0LCAweDRGMjIyRkU2LCAweERFOTY3RkZDLCAweDIwMDg4NEU5LAorMHgyRjAwOEQwNiwgMHhENjk1RDQ5NCwgMHgwMDA5NDYwQiwgMHg2NEYwQjE5QSwKKzB4NjYyMEQyOTMsIDB4ODkwMjI2NjgsIDB4QzlCRjYwRTAsIDB4N0YwNDJFMDAsCisweDAwMEI0RjI2LCAweDAwMEI2RUY2LCAweDJGRTYwMDA5LCAweERFOEQ0RjIyLAorMHg2MEUwRDY4RCwgMHhDQkMwRDQ4RCwgMHg2MjYwMkUwMCwgMHhDODAzNjAyQywKKzB4NDAyMTg5MDQsIDB4NzAwMTQwMjEsIDB4NjYwM0EwMDIsIDB4NjYwMzQwMDksCisweEQ2ODc2MTZELCAweEU1MDBBMDA0LCAweDc1MDE2MjYyLCAweDc0MDQyNDIyLAorMHgzMjEzNjI1RCwgMHhEMjgzOEJGOCwgMHgwMDA5NDIwQiwgMHhDOUJGODRFMiwKKzB4NEYyNjgwRTIsIDB4NkVGNjAwMEIsIDB4MkZFNjJGRDYsIDB4N0ZGQzRGMjIsCisweDYyNjBENjdELCAweDg5NDQyMjI4LCAweEQ1NzJFMTAwLCAweDYwNTAyNjEwLAorMHhDQjQwRDQ3QSwgMHgyNTAwNDQwQiwgMHg4RDA1MjAwOCwgMHg2MkUwNkUwMywKKzB4NzEwNDYxMkMsIDB4MkYxMUEwMDYsIDB4RDQ3NUQ2NkQsIDB4REQ3NTY3NjAsCisweDY1N0M0RDBCLCAweEUyM0M2RDFELCAweDhCMDMzRDI3LCAweEQyNjdENDcyLAorMHgwMDA5NDIwQiwgMHg0RDIxNEQyMSwgMHhBMDA1RDc3MCwgMHg2NkU2RTQwMCwKKzB4MzU3QzQ1MDgsIDB4NzQwMTI1NjIsIDB4MzVEMzY1NEQsIDB4RDc2QzhCRjcsCisweDYxNzJFMDAzLCAweDgxMTE0MDE4LCAweDZFNzI2MEYxLCAweDgxRTI3MDBDLAorMHhENDY4NjE3MiwgMHhERDY4ODExMywgMHg0RDBCREU2OCwgMHhFMjAxNjU3MiwKKzB4RDQ2NzJFMjIsIDB4NDIwQkQyNTUsIDB4RDY1NjAwMDksIDB4QzkzRjYwNjAsCisweDdGMDQyNjAwLCAweDZFRjY0RjI2LCAweDZERjYwMDBCLCAweDJGQzYyRkI2LAorMHgyRkU2MkZENiwgMHhEMjVGNEYyMiwgMHg2QjQzNkU3MywgMHg0MjBCNkM1MywKKzB4MjAwODZENjMsIDB4NjQwMzhEMUMsIDB4RTUwRUQxNDksIDB4MzI1MjYyMTAsCisweDYwQzM4OTE2LCAweDgwNDEyNEIwLCAweDgxNDE2MEQzLCAweEEwMDdFNTAwLAorMHg2NTVENjFCQywgMHgwMEVDNjA1MywgMHgzNjRDNjY1MywgMHg4MDY0NzUwMSwKKzB4MzIxMzYyNUQsIDB4RDYzQjhCRjUsIDB4QzlCRjYwNjAsIDB4MjYwMEEwMDgsCisweEQyM0FENDRELCAweDZFRjY0RjI2LCAweDZDRjY2REY2LCAweDZCRjY0MjJCLAorMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwgMHg2QkY2MDAwQiwgMHg3RkM0NEYyMiwKKzB4NzIwMjYyRjMsIDB4MjI1MTJGNDEsIDB4NDUyOTcyMDIsIDB4NjA2MzIyNTEsCisweEU1QzRFNjgyLCAweDY3RjM4MTIxLCAweDY1NUM2NjZDLCAweEU0MDhCRkI2LAorMHg0RjI2N0YzQywgMHgwMDA5MDAwQiwgMHgyRjk2MkY4NiwgMHgyRkI2MkZBNiwKKzB4MkZENjJGQzYsIDB4NEYyMjJGRTYsIDB4RTEwMDdGQzQsIDB4NjUxM0VDRkYsCisweDZCMTM2Q0NELCAweERFMzZENzM1LCAweEVERkY2NEYzLCAweEQ4MzVFQTA0LAorMHg2MDUzNjU1QywgMHgwMjdENDAwMCwgMHgzMkMwNjIyRCwgMHg2NjAzOEQwRCwKKzB4MDlFRDYwNjMsIDB4MjQ5MTAyN0QsIDB4MjQyMTc0MDIsIDB4Njk4MjAyRUQsCisweDM5Mjg2MjJELCAweDc0MDIyODkyLCAweDc1MDE3MTA0LCAweDYwNjM2MjVDLAorMHgwN0Q1MzJBMiwgMHgwRUI1OEZFNCwgMHgyNDQ4NjQxQywgMHhFNjgwODkwNSwKKzB4NjdGM0U1QzUsIDB4QkY3OTY2NkMsIDB4N0YzQzY1NUMsIDB4NkVGNjRGMjYsCisweDZDRjY2REY2LCAweDZBRjY2QkY2LCAweDAwMEI2OUY2LCAweEQxMUU2OEY2LAorMHg2MDEyRDIxRSwgMHhDQjIwRTQwNSwgMHgyMTAyRTUwMCwgMHgwMDBCMjI0MiwKKzB4MDAwMDIyNTIsIDB4MDAxRTEwMTcsIDB4MDAyMDNCNDAsIDB4MDAyMDE4QTIsCisweDAwMjAzOTBFLCAweDAwMUUxMDE1LCAweDAwMUUxMEJGLCAweDAwMTE3ODAwLAorMHgwMDFFMTBGQywgMHgwMDIwMDYxMCwgMHgwMDIwMzkxNCwgMHgwMDIwMkFFQSwKKzB4MDAyMDNCNDQsIDB4MDAyMDE4RUUsIDB4MDAyMDNCNjAsIDB4MDAxMTc4OEMsCisweDAwMjAzOTEwLCAweDAwMjAzNEY0LCAweDAwMjAxNTMwLCAweDAwMUUyMTMwLAorMHgwMDIwM0I2OCwgMHgwMDIwMkFBQywgMHgwMDIwM0I2QywgMHgwMDIwMzk3NCwKKzB4MDAyMDM5N0MsIDB4MDAyMDNEQTQsIDB4MDAxQzM1MDAsIDB4MDAxRDQwMDQsCisweEQ1NjREMTYzLCAweEU0MDBENzY0LCAweDIxNDJFMjBGLCAweDE3NDExMTU0LAorMHhENTYyMjcyMiwgMHg5NjY5RDc2MiwgMHgxNTQxMjU3MiwgMHg5NjY2MTU2MiwKKzB4RTYwMTE1NjUsIDB4RDU1RjExNjUsIDB4NjY2Q0U2RjgsIDB4MjU0MjI1NDIsCisweDI1NDIyNTQyLCAweDI1NDIyNTQyLCAweDI1NjIyNTQyLCAweDc2MDFFNzI3LAorMHg2NzYzMjU3MiwgMHgyNTYyNzc5NywgMHhFNzA0MjU3MiwgMHgyNTcyRTI0OCwKKzB4RTIxOTI1MjIsIDB4RTI3MDI1MjIsIDB4MjU0MjI1NDIsIDB4MjU0MjI1NDIsCisweDI1MjIyNTQyLCAweDI1MjJFMjBDLCAweDI1NDIyNTQyLCAweDI1NDIyNTQyLAorMHgyNTQyMjU0MiwgMHgyNTQyMjU0MiwgMHgwMDBCMTU0QSwgMHhFMjA4MTE0NSwKKzB4MDAwOTQyMkIsIDB4MkZFNjJGRDYsIDB4N0ZGQzRGMjIsIDB4QzgyMDYwNDMsCisweDZFNDM4RDAyLCAweDAwMDlCRTY3LCAweEM4MTA2MEUzLCAweEJFNjQ4OTAxLAorMHg2MEUzMDAwOSwgMHg4OTAxQzg0MCwgMHgwMDA5QkU4NiwgMHhDODAxNjBFMywKKzB4REQzRDg5MzgsIDB4QzgwMjYwRDAsIDB4MkYwMDhEMDMsIDB4NDYwQkQ2M0IsCisweDYwRjAwMDA5LCAweDg5MDJDODA0LCAweDQ2MEJENjM5LCAweDYyRjAwMDA5LAorMHhDODgwNjAyMywgMHg2MEQwODkwMiwgMHgyRDAwQzk3RiwgMHhDODAxNjAyMywKKzB4RDYzNDg5MDYsIDB4MDAwOTQ2MEIsIDB4MDAwOUEwMDcsIDB4NTE2MzA2MDEsCisweDg5MDJDODA4LCAweDQ2MEJENjMwLCAweDYwRjAwMDA5LCAweDg5MDJDODEwLAorMHg0MjBCRDIyRSwgMHhENTJFMDAwOSwgMHg4ODAyNjA1MiwgMHhEMjJEOEIwMywKKzB4QTAwNUU2MDQsIDB4ODgwMTIyNjAsIDB4RDIyQThCMDIsIDB4MjI2MEU2MDEsCisweDI1MjJFMjAwLCAweEM4ODA2MEUzLCAweEQyMjc4OTJELCAweDYwRTM2RTIwLAorMHg4OTAyQzg4MCwgMHg0MjBCRDIyNSwgMHg2MEUzMDAwOSwgMHg4OTAyQzg0MCwKKzB4NDIwQkQyMjMsIDB4NjBFMzAwMDksIDB4ODkwMkM4MDIsIDB4NDIwQkQyMjEsCisweDYwRTMwMDA5LCAweDg5MERDODA0LCAweEREMjBEMTFGLCAweDAwMDk0MTBCLAorMHgwMDA5QkYwRCwgMHgwMDA5QkY0QywgMHhENTFFRDQxRCwgMHgyNDcwRTcwOCwKKzB4MjVEMkJGODUsIDB4QzgwODYwRTMsIDB4RDIxQjg5MDUsIDB4NEYyNjdGMDQsCisweDQyMkI2RUY2LCAweDdGMDQ2REY2LCAweDZFRjY0RjI2LCAweDZERjYwMDBCLAorMHgwMDFDNTgxQywgMHhBMDAwQTAwMCwgMHgwMDFEMDEwMCwgMHgwMDFENDAwMCwKKzB4MDAwNDAwMjEsIDB4MDAxQzU4OUMsIDB4MDAxRTEwMjEsIDB4MDAyMDFBOTAsCisweDAwMjAxQUIyLCAweDAwMjAyMTE0LCAweDAwMjAxQUNBLCAweDAwMjAxQUQ4LAorMHgwMDIwMzlDOCwgMHgwMDFFMTAwQiwgMHgwMDFFMTAyOCwgMHgwMDIwMUI0NCwKKzB4MDAyMDFCNTAsIDB4MDAyMDFBRTAsIDB4MDAyMDFBRkUsIDB4MTIzNDU2NzgsCisweDAwMUUxMDAwLCAweDAwMTBGMTAwLCAweDAwMjAxQjJDLCAweDY0NENENkE3LAorMHgwMDBCMzQ2QywgMHhENkE2MjQ1MCwgMHgzNDZDNjQ0QywgMHgyNDUwMDAwQiwKKzB4NjQ0Q0Q2QTQsIDB4MDAwQjM0NkMsIDB4NjI1QzI0NTAsIDB4NDIwODYxNkQsCisweDQyMDg0MTE5LCAweDQyMDA2MDE5LCAweDY3MEU2MTRDLCAweEQ0OUUzMjFDLAorMHg0MjAwMjA3RCwgMHgzMjRDQzkwRiwgMHgyMjAwMDAwQiwgMHg0MjA4NjI1QywKKzB4NDIwMDQyMDgsIDB4MzI0QzY0NEMsIDB4NDIwMEQ0OTgsIDB4MDAwQjMyNEMsCisweDJGRTYyMjYwLCAweDYxNEM0RjEyLCAweDQxMDBENDkzLCAweDY3MTAzMTRDLAorMHhFMjlGNjY2RCwgMHgyNzI5NDYxOSwgMHg2RTUzNjI2OSwgMHg2NzJFNjU3MywKKzB4NDIyMTIyN0QsIDB4NDIyMTQyMjEsIDB4NzYwMTY2MkMsIDB4RTQwMTQ2MDgsCisweDM0RTg0NjA4LCAweDY0NEM0NjAwLCAweDA3MUEwNDY3LCAweDIxNTAyNTdCLAorMHgwMDBCNEYxNiwgMHg0RjIyNkVGNiwgMHhEMjg1N0ZFOCwgMHg4ODAxNjAyMSwKKzB4RDI4NDhCN0IsIDB4MjY2ODY2MjEsIDB4RDI4MzhCNzcsIDB4MjY2ODY2MjEsCisweEU1MEY4QjczLCAweEU0MDFCRkEyLCAweEJGQTRFNTAxLCAweEU1ODZFNDAwLAorMHhFNDAwNjU1QywgMHgyRjUwQkZBNCwgMHhCRkExRTQwMSwgMHhFNjAyRTUwNiwKKzB4NjA2MzQ2MTgsIDB4ODFGMkU0MDEsIDB4NjU0M0JGOUYsIDB4RTQwMTg1RjIsCisweEJGQUI2NTQzLCAweDg1RjI2NjAzLCAweDY1NDNFNDAxLCAweDY2MDNCRkIxLAorMHhFNDAyNjVGMCwgMHg2MDUzNzU2QywgMHg4MEY4QkY4MCwgMHhCRjgyRTQwMiwKKzB4ODRGOEU1MTIsIDB4NzA5MEU0MDIsIDB4NjUwM0JGODIsIDB4NDYxOEU2MDIsCisweDgxRjY2MDYzLCAweEJGODBFNDAyLCAweDg1RjZFNTAwLCAweDY2MDNFNDAyLAorMHhFNTAwQkY4QywgMHhFNDAyODVGNiwgMHhCRjkyNjYwMywgMHhFNUZFRTUwMCwKKzB4RTAxMDY1NUMsIDB4QkY2MUU0MDMsIDB4RTUxMzBGNTQsIDB4RTQwRUJGNjMsCisweDA1RkNFMDEwLCAweEJGNjNFNDBFLCAweEU1MDA3NTg1LCAweEJGNjRFNDAzLAorMHhFNTAwRTY0MCwgMHhCRjcxRTQwMywgMHhFNTAwRTY0MCwgMHhCRjc4RTQwMywKKzB4RTVGRkU2NDAsIDB4RTAxNDY1NUMsIDB4QkY0N0U0MDQsIDB4RTQwRjBGNTQsCisweEU1MDRCRjQ5LCAweDA1RkNFMDE0LCAweEJGNDlFNDBGLCAweEU1MDE3NTg0LAorMHhCRjRBRTY0MCwgMHhFNTAxRTQwNCwgMHhCRjU3RTY0MCwgMHhFNTAxRTQwNCwKKzB4RTQwNEU2NDAsIDB4QUY1QzdGMTgsIDB4N0YxODRGMjYsIDB4MDAwQjRGMjYsCisweDRGMjIwMDA5LCAweEQyNDI3RkYwLCAweDg4MDE2MDIxLCAweEQyNDE4QjcxLAorMHgyNjY4NjYyMSwgMHhEMjQwOEI2RCwgMHgyNjY4NjYyMSwgMHhFNTBGOEI2OSwKKzB4RTQwMUJGMUMsIDB4QkYxRUU1MDEsIDB4RTU4NkU0MDAsIDB4RTQwMDY1NUMsCisweDJGNTBCRjFFLCAweEJGMUJFNDAxLCAweEU0MDFFNTA2LCAweEJGMUM2NTQzLAorMHhFNDAxRTY0MCwgMHhCRjI5NjU0MywgMHhFNDAxRTY0MCwgMHhCRjMwNjU0MywKKzB4NjVGMEU2NDAsIDB4NzU2Q0U0MDIsIDB4QkVGRjYwNTMsIDB4RTQwMjgwRjQsCisweEU1MTJCRjAxLCAweEU0MDI4NEY0LCAweEJGMDE3MDkwLCAweEU2NDA2NTAzLAorMHhCRjAyRTQwMiwgMHhFNjQwRTUwMCwgMHhCRjBGRTQwMiwgMHhFNjQwRTUwMCwKKzB4QkYxNkU0MDIsIDB4RTVGRUU1MDAsIDB4NjA1MzY1NUMsIDB4QkVFNUU0MDMsCisweEU1MTM4MEY4LCAweEU0MEVCRUU3LCAweEU0MEU4NEY4LCAweEJFRTc3MDg1LAorMHhFNTAwNjUwMywgMHhCRUU4RTY0MCwgMHhFNTAwRTQwMywgMHhCRUY1RTY0MCwKKzB4RTUwMEU0MDMsIDB4QkVGQ0U2NDAsIDB4RTVGRkU0MDMsIDB4NjA1MzY1NUMsCisweEJFQ0JFNDA0LCAweEU0MEY4MEZDLCAweEU1MDRCRUNELCAweEU0MEY4NEZDLAorMHhCRUNENzA4MywgMHhFNTAxNjUwMywgMHhCRUNFRTY0MCwgMHhFNTAxRTQwNCwKKzB4QkVEQkU2NDAsIDB4RTUwMUU0MDQsIDB4RTQwNEU2NDAsIDB4QUVFMDdGMTAsCisweDdGMTA0RjI2LCAweDAwMEI0RjI2LCAweDAwMDAwMDA5LCAweDAwMUUxMDJGLAorMHgwMDFFMTA4MCwgMHgwMDFFMTA5MCwgMHgwMDFFMTAzRiwgMHgwMDFFMTAzRSwKKzB4MDAyMDM5QzIsIDB4MDAyMDM5QzQsIDB4MDAyMDM5QzYsIDB4RDIxREQxMUMsCisweDY2MjA2MDEwLCAweDY3NkM3MDAxLCAweDM3MDBDOTBGLCAweEU1MDA4RDEzLAorMHg2NzEwNjIxMCwgMHg3NzAxNjIyQywgMHg2NDIzMjE3MCwgMHhENjE2NjAxMCwKKzB4NDQwODQ0MDgsIDB4MzQyOEM5MEYsIDB4NjI2MDIxMDAsIDB4NzIwMUQ1MTMsCisweDQ0MDgyNjIwLCAweDAwMEIzNTRDLCAweEQxMEY2MDUzLCAweDI1NTg2NTEwLAorMHhFNjAwOEQxMywgMHhENjBERDQwQiwgMHg2NTVDNjU0MCwgMHg0NzA4Njc1MywKKzB4Mzc1ODQ3MDgsIDB4NDcwODY1NDAsIDB4MjQ1MDc1MDEsIDB4MzY3QzYwNDAsCisweDI0MDBDOTBGLCAweDcyRkY2MjEwLCAweDAwMEIyMTIwLCAweDAwMDA2MDYzLAorMHgwMDIwMzkwRCwgMHgwMDIwMzkwQywgMHgwMDIwMzkwRSwgMHgwMDIwMzUzNCwKKzB4N0ZGQzRGMjIsIDB4RTY4MEQxOUYsIDB4NjY2QzYyMTIsIDB4RDI5RTJGMjIsCisweDY3RjM2NTYzLCAweDQyMEI3NTQyLCAweDdGMDRFNDA0LCAweDAwMEI0RjI2LAorMHhFNjgwMDAwOSwgMHhEMjk4NjY2QywgMHhFNzAwNjU2MywgMHg0MjJCNzU0MCwKKzB4RTY4MDY0NzMsIDB4RDI5NDY2NkMsIDB4RTcwMDY1NjMsIDB4NDIyQjc1NDMsCisweDJGODY2NDczLCAweDJGQTYyRjk2LCAweDJGQzYyRkI2LCAweDJGRTYyRkQ2LAorMHg3RkNDNEYyMiwgMHhEQzhFRDI4RCwgMHg3MjAxMUYyMSwgMHhEQjhEMUYyMiwKKzB4RDE4RURFOEQsIDB4NjYxMjUyMTEsIDB4OEIwMTM2MjAsIDB4MDAwOUEwRTUsCisweEM5MDM2MDYxLCAweDhCMDE4ODAxLCAweDAwMDlBMERGLCAweEQyODhENDg3LAorMHhFRDg0NDIwQiwgMHgyRjAyNTUwMywgMHgzMEQwODQ1QywgMHhBMEI4ODkwMSwKKzB4RDE4NDAwMDksIDB4NjI2QzY2MTAsIDB4ODgwMTYwMjMsIDB4RDE4MjhCNjgsCisweDYyMTAxRkMzLCAweDg5NUIyMjI4LCAweEUwMDNENDgwLCAweDQwMTg2NzQyLAorMHg2ODQyMTc3MiwgMHhENTdFRTkwMCwgMHg4MTgxNkRCMywgMHg3RDA0MjE5MCwKKzB4NjdEMjZBQjIsIDB4NjRFMjY4NTIsIDB4MUY0OTFGNTcsIDB4NzQwNDY0RTMsCisweDFGQTQ2NTQyLCAweDY1NDMxRjVBLCAweDYyNTI3NUY4LCAweDFGNzYxRkQ1LAorMHg2RDUzMUYyQiwgMHhEQTc0RDc3MywgMHg3RDk0RDI3NCwgMHg2OEQyMUY4OCwKKzB4NkFBMjY5NzIsIDB4RDE3MjYwMjIsIDB4MjIwMkNCMjAsIDB4RTE0MDFGMUMsCisweDc2MDFFNjAwLCAweDMyMTM2MjZELCAweDU2RjQ4QkZCLCAweDUyRjY1MUY1LAorMHgyMTIyMkI2MiwgMHg1MkY4NTFGNywgMHgyMTIyNTZGOSwgMHgyRTYyNTFGQSwKKzB4NTFGQjI0MTIsIDB4MkQ4MjI1MTIsIDB4RDk2NjI3OTIsIDB4MjlBMkRENUYsCisweDZBRDJEOTY1LCAweEQ5NjQ2ODkyLCAweDY4RDIxQTg0LCAweDYwODFEQTYzLAorMHgyODAxQ0IwMSwgMHhEODYyNjZEMiwgMHgyQTYyMjk2MiwgMHhFRDAxNUFGQywKKzB4MkFEMjQ4MEIsIDB4MkFEMjREMTgsIDB4NjJEMkRENUUsIDB4MkQyMjcyMDEsCisweEQxNTA1NkYzLCAweEUyMDI2MDYyLCAweDI2MDJDQjAxLCAweDIxMjBBMDNELAorMHg4QjNBMjIyOCwgMHhFNDAxREQ1OCwgMHgyMTQwRTYwMCwgMHhFMDFDMkQ2MiwKKzB4QzgwMTAwNUMsIDB4RDQ1NThCMEEsIDB4RTYwMEQ3NTUsIDB4RUQ3RDI0NzIsCisweDYyNkM3NjAxLCAweDhCRkIzMkQzLCAweDI0RDJERDUyLCAweEUyRkU2OEMyLAorMHgyQzgyMjgyOSwgMHgwOTVDRTAxRSwgMHhFMDFGNURGMSwgMHgwQTVDMkQ5MCwKKzB4NzUxMDUxRjIsIDB4RUQwNjIxQTAsIDB4RDc0QkU2MDAsIDB4ODQ1NkQ0NEIsCisweDI3MDA3NjAxLCAweDY5NkM2ODU0LCAweDI0ODAzOUQzLCAweDhGRjY3NDAxLAorMHhEQTQ3NzcwMSwgMHgyQTEwRTE5NCwgMHhFMjAwN0EwMSwgMHg3QTBGMkEyMCwKKzB4RDEzMEU4MDUsIDB4NjYxMDJBODAsIDB4NjAyMzYyNkMsIDB4ODkwODg4MDEsCisweEQyNDBENDJBLCAweDQyMEI2NUYyLCAweEQxMzFFRDAxLCAweEFGMzA0RDE4LAorMHg2NUYyMjFEMiwgMHg4NTUzRDQzQywgMHg2MjBENjY0MiwgMHg4OTA3MzI2MiwKKzB4RDEzQkQ0M0EsIDB4MDAwOTQxMEIsIDB4RTYwMUQ3M0EsIDB4Mjc2MkFGMUEsCisweEQxMzRENDFFLCAweDQxMEI2NUYyLCAweEQxMjVFRDAxLCAweEQ2MzdENDM2LAorMHg0NjBCNEQxOCwgMHhBRjBEMjFEMiwgMHg3RjM0MDAwOSwgMHg2RUY2NEYyNiwKKzB4NkNGNjZERjYsIDB4NkFGNjZCRjYsIDB4MDAwQjY5RjYsIDB4NEYyMjY4RjYsCisweDg1NDY3RkY0LCAweDJGMDFFNjgxLCAweDY2NkM4NTQ3LCAweDg1NDg4MUYxLAorMHg4MUYyRDIwOSwgMHg2N0YzODU0MiwgMHg4NTQzODFGMywgMHg4MUY0RTQwQywKKzB4NjU2MzYwNTMsIDB4NDIwQjgxRjUsIDB4N0YwQzc1NDAsIDB4MDAwQjRGMjYsCisweDAwMDAwMDA5LCAweDAwMUMzRDlDLCAweDAwMjAyNDVDLCAweDAwMTE3NzlBLAorMHgwMDFDMzZGOCwgMHgwMDFDM0I5QywgMHgwMDFDMzcwNCwgMHgwMDIwMzUyQywKKzB4MDAyMDE0QTAsIDB4MDAyMDM5MUQsIDB4MDAyMDM5MUMsIDB4MDAyMDM5MTgsCisweDAwMUMzRDk4LCAweDAwMUMzQkI0LCAweDAwMUM1OTYwLCAweDAwMUMzNTAwLAorMHgwMDFDM0QzMCwgMHgwMDFDODk2MCwgMHgwMDIwMzUwNCwgMHgwMDFDM0QwMCwKKzB4MDAyMDE2MEMsIDB4MDAxMTc3MzAsIDB4MDAyMDM5MjAsIDB4MDAxQzU4MkMsCisweDIwMDBBMDAwLCAweDAwMDBBMDAwLCAweDAwMTE3NzhDLCAweDAwMTE3NzkyLAorMHgwMDExNzc4OCwgMHgwMDIwMTRDQywgMHgwMDIwMzhGNCwgMHgwMDIwMzRGNCwKKzB4MDAyMDE1MzAsIDB4MDAxRTIxMzAsIDB4MDAyMDNEODQsIDB4MDAyMDE4QTIsCisweDJGOTYyRjg2LCAweDJGQjYyRkE2LCAweDJGRDYyRkM2LCAweDRGMjIyRkU2LAorMHhEMTlCN0ZFQywgMHgyRjEyRTAwMCwgMHg2MTAzRDQ5QSwgMHgxRjQyODFGMiwKKzB4REQ5QURBOTksIDB4RDY5QTY4MTMsIDB4RTAwMTQ4MDgsIDB4NDYwQkRFOTksCisweDM4RUM0ODAwLCAweDY1QTIxRjAzLCAweDM1MjA1MkExLCAweEEyM0U4QjAxLAorMHg2MDUxMDAwOSwgMHg4ODAxQzkwMywgMHhBMjM4OEIwMSwgMHg1MjUzMDAwOSwKKzB4MzJFMERFOTEsIDB4RDk5MThCMTAsIDB4NjRBMzQ5MEIsIDB4NEIwQkRCOTAsCisweERFOTA2NDAzLCAweEQ3OTFENjkwLCAweEVDMDFENTkxLCAweDJFMDJFMTAwLAorMHgyNzEwMjZDMCwgMHgyNTAyQUZERiwgMHhDODAxODU1MSwgMHhBMTU3OEIwMSwKKzB4NjI1MTAwMDksIDB4NDIwMDYyMkQsIDB4NUU1MzM2NkEsIDB4ODVFMjIyNkQsCisweEM5MDM2NDJDLCAweDg1RTM2NjAzLCAweDYwNTM2NTBELCAweDQwMjE0MDIxLAorMHg0NTAwQzkzRiwgMHgzMjJBNjcwMywgMHg2MDUzMjUyRCwgMHhDOTAxRDE3RiwKKzB4NjAxMDZDMDMsIDB4ODgwMUQ5N0YsIDB4REI3RjhCMDUsIDB4MjEyMEUyMDAsCisweENCMDE2MEIyLCAweEQxN0QyQjAyLCAweDg4MDE2MDExLCAweDY1QTI4QjBBLAorMHg4RDA0MjQ0OCwgMHg5QjlFNjI1MSwgMHhBMDAzMjJCOSwgMHg5MTlCMjUyMSwKKzB4MjUyMTIyMUIsIDB4MzdCM0VCMTAsIDB4MjQ0ODg5NUUsIDB4RDQ3MzhCMDcsCisweDIyMjg2MjQxLCAweDYwNjM4OTAzLCAweEEwNTc4MUY4LCAweEQ1NzA2NDczLAorMHg0NjA4NDYwOCwgMHg4NUUyNjI3MywgMHg0NjAwNkI1MCwgMHgzNjJDNDIwMCwKKzB4MkJCOEM5MTAsIDB4OEYxRjY0NjMsIDB4MjY2ODY2MDMsIDB4RDI2OTg5MTEsCisweDA2MkQ2MDQzLCAweDQxMTk2MTZELCAweDZCMEU2MDE5LCAweDgxRjgyMEJELAorMHg4ODAxNjBDMywgMHg2NDZDOEYyQywgMHg4ODBGNjA3MywgMHhBMDI3OEIxQiwKKzB4RDI2MTAwMDksIDB4MDUyRDYwNDMsIDB4NDExOTYxNUQsIDB4NjcwRTYwMTksCisweDY0NUMyMDdELCAweDgxRjhBMDFDLCAweDg5MEYyNjY4LCAweDYwNDNEMjVCLAorMHg2QjVEMDUyRCwgMHg2MEI5NEIxOSwgMHgyMDFENjEwRSwgMHg2MEMzODFGOCwKKzB4OEYwRDg4MDEsIDB4NjQ3MzY0NUMsIDB4RUMwMEEwMEEsIDB4NjA0M0QyNTQsCisweDYyNUQwNTJELCAweDYwMjk0MjE5LCAweDIwN0Q2NzBFLCAweDgxRjg2NDVDLAorMHg4ODAyODVGOCwgMHg4NUUxODkwQSwgMHg4RDA3QzgyMCwgMHhFNkRDNjIwMywKKzB4NjAyMzIyNjksIDB4ODFFMUEwMDIsIDB4NjQ0Q0U0RkYsIDB4NjIxMEQxNDksCisweDg5MDEyMjI4LCAweDY0NENFNEZGLCAweDY1NERFQkZGLCAweDM1QjA2QkJDLAorMHhEQjM2OEIyQiwgMHg2NEEzNEIwQiwgMHg0MTBCRDEzNSwgMHg1NDAzNjQwMywKKzB4ODU0NDZFMDMsIDB4Qzk0OERCNDAsIDB4REM0MDg4MDgsIDB4QkVBRThCMDEsCisweDY0QjNFNTAyLCAweDY1RTM0QzBCLCAweERCM0RFQzAxLCAweEQxM0QyREMyLAorMHg2MjEyNjBCMiwgMHg3MjAxNzAwMSwgMHgyMTIyODgwNSwgMHgyQjAyOEYwOCwKKzB4NjY2Q0U2ODAsIDB4NjU2M0QyMzgsIDB4NzU0OUU3MDAsIDB4NjQ3MzQyMEIsCisweEEwMzBENDM2LCAweDdGRkYwMDA5LCAweDg1RTI4MDAwLCAweDIwQjlFQkZDLAorMHg2MTAzODFFMiwgMHg5NDJBODVFMywgMHg2MjAzMjA0OSwgMHg0NTA4ODVGOCwKKzB4ODFFMjIwMUIsIDB4QzkwMTYwQzMsIDB4NDAwODQwMTgsIDB4NDAwODQwMDgsCisweDQwMDAyMjVCLCAweDYwMjMyMjBCLCAweDg1RTQ4MUUzLCAweDQxMThFMTA4LAorMHg4MUU0MjAxQiwgMHhFNDAyNjJBMiwgMHgyMEI5ODUyMSwgMHg2N0EyODEyMSwKKzB4Q0IwMTYwNzEsIDB4ODVGODI3MDEsIDB4ODkwMzMwNDIsIDB4RUNFNzg1RTIsCisweDgxRTIyMEM5LCAweDQ5MEJENDFFLCAweEEwM0IwMDA5LCAweDdFMDMwMDA5LAorMHgwMDFDM0QzMCwgMHgwMDIwM0Q5MCwgMHgwMDIwMzUwNCwgMHgwMDFFMjEyQywKKzB4MDAyMDMzRTgsIDB4MDAxQzNEMDAsIDB4MDAxMTc3ODAsIDB4MDAyMDE0QTAsCisweDAwMjAxNjZDLCAweDAwMTE3NzBDLCAweDAwMjAzOTFDLCAweDAwMjAzOTFELAorMHgwMDIwMzkxOCwgMHgwMDIwMThBMiwgMHgwMDFDMzZGOCwgMHgwMDIwMzk5MCwKKzB4MDAyMDNEQTAsIDB4MDAyMDNCODQsIDB4MDAyMDNDMDQsIDB4MDAyMDNDODQsCisweDAwMjAzRDA0LCAweDAwMjAzOTA4LCAweDAwMjAzNEZDLCAweDAwMjAxNENDLAorMHgwMDIwMzk5NCwgMHgwMDIwMzk5OCwgMHgwMDIwMjQ1QywgMHgwMDIwM0Q4OCwKKzB4MDAyMDNEOEMsIDB4NjAyMjYyRjIsIDB4NDAwOTQwMTksIDB4QzkwRjQwMDksCisweDhCMEI4ODBBLCAweDYwRTJERThDLCAweDQwMDk0MDE5LCAweEM5MEY0MDA5LAorMHg4QjAzODgwOCwgMHhDQjAxNjBBMiwgMHgyODAyQTAwNiwgMHg2NUUyREU4NywKKzB4MkU1Mjc1MDEsIDB4Mjg2MjY2QTIsIDB4NTJGMzY2RjIsIDB4MjYyMkFFODMsCisweEQyODM4NTUxLCAweERFODNDODAyLCAweEEwOTU4QjAxLCAweDQyMEIwMDA5LAorMHg0RTBCNjRBMywgMHg1RTAzNjQwMywgMHg4NUU0NjUwMywgMHg0OTE4RTkwOCwKKzB4RDc3RDIwOUIsIDB4RTA0QzgxRTQsIDB4REM3QzBCN0UsIDB4N0IwMUQ5N0MsCisweDYxQzIwN0I2LCAweDcxMDE2NjkwLCAweDhEMDYyNjY4LCAweEQ0NzkyQzEyLAorMHg0MjBCRDI3OSwgMHhBMDcwRUIwMSwgMHg2MjUxMkRCMiwgMHg0QjE4RUIwRiwKKzB4MjJCOUUxMDIsIDB4MzIxMDQxMTgsIDB4ODU1MThCMEYsIDB4MjAyOUUyRkMsCisweDYwNTE4MTUxLCAweENCMDE3MkUwLCAweDg1RTEyNTAxLCAweDIwMjk5NEEzLAorMHg4NUU0ODFFMSwgMHhBMDUyMjA0OSwgMHg2NzUxODFFNCwgMHg0NzE5Njc3RCwKKzB4NjY3RTY3NzksIDB4NzcwMTI3NkQsIDB4NjkwMzYwN0MsIDB4ODgwMTQ5MTgsCisweDI1OTE4RjNFLCAweDZCMTJEMTYxLCAweDIxQjI3QjAxLCAweDY2MEQ4NUUzLAorMHg0MDIxNjA2MywgMHhDOTNGNDAyMSwgMHg2QzAzNDYwMCwgMHgyNjJEMzIyQSwKKzB4QzgwMTYwNjMsIDB4REI1RUQxNUQsIDB4OTY3RDg5MDEsIDB4RTYwMDJDNkIsCisweDY2NkM2N0NELCAweDQwMDA2MDYzLCAweDYyMkQwMjFELCAweDhEMEUzMjcwLAorMHg2MDQzNjQwMywgMHhFOUZGMDIxRCwgMHg4QjAxMzI5MCwgMHgwMUM1QTAwNywKKzB4NjI2Qzc2MDEsIDB4MzI5MkU5MDQsIDB4NjQ2QzhCRUIsIDB4NjA0MzQ0MDAsCisweEQxNTAwNEJELCAweDBCNDU3NDAxLCAweDY2OUQ2OTExLCAweDg5MDczNjcwLAorMHg2MDJENjIxMSwgMHg4OTAzODhGRiwgMHhFMjAxREI0QiwgMHgyQjIwMjFDMSwKKzB4RUNGQzg1NTEsIDB4ODE1MTIwQzksIDB4Q0IwMTYwNTEsIDB4REM0NzI1MDEsCisweDY0QTM0QzBCLCAweDUxRjM2NkYyLCAweDg1RUYyNjEyLCAweDU0RjJEMjQ0LAorMHg2NTBENDIwQiwgMHgwMDA5QURFNywgMHhFNTAwREM0MiwgMHg0MjBCMkM1MiwKKzB4NEUwQjY0QTMsIDB4NTQwMzY0MDMsIDB4ODU0NDZFMDMsIDB4NjcwM0U5MDgsCisweDY1MDM0OTE4LCAweDI3OTk4NTQxLCAweERCMzIzNzkwLCAweDhGMEJEOTMyLAorMHg2MDEzNjEwRCwgMHg4QjA3QzgyMCwgMHhDOTQ4NjA1MywgMHg4QjAzODgwOCwKKzB4RTUwMUJENEQsIDB4MDAwOUEwMDUsIDB4MjEyOEQyMzMsIDB4QkQ0Njg5MDEsCisweDY0QjNFNTAwLCAweDQ5MEI2NUUzLCAweEFEQkNFQzAxLCAweDg1RjIyREMyLAorMHg3MDAxRUUwNCwgMHgzMUU3NjEwRCwgMHg4RDAyODFGMiwgMHhBREE5N0EwOCwKKzB4N0YxNDAwMDksIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkFGNjZCRjYsCisweDAwMEI2OUY2LCAweEY3RkY2OEY2LCAweDJGRTY4MDAwLCAweEQyMjM0RjIyLAorMHg2MEUzNkUyMiwgMHg4RDAyQzg0MCwgMHhCQkY5MjJFMiwgMHhFMjQwMDAwOSwKKzB4MkUyODQyMTgsIDB4QkMwNDg5MDEsIDB4NjBFMzAwMDksIDB4ODkwNUM4MTAsCisweEQyMUNENDFCLCAweDAwMDk0MjBCLCAweDAwMDlCQzAzLCAweEM4MDU2MEUzLAorMHhCRDZEODkwMSwgMHg2MEUzMDAwOSwgMHg4OTAyQzgwMiwgMHhBQzAwNEYyNiwKKzB4NEYyNjZFRjYsIDB4NkVGNjAwMEIsIDB4MDAxQzNEM0MsIDB4MDAxMTc3NjAsCisweDAwMjAxNEEwLCAweDAwMjAxNjZDLCAweDAwMjAzNDk0LCAweDAwMjAzREE0LAorMHgwMDIwMzkwOCwgMHgwMDIwMzRGQywgMHgwMDIwMTRDQywgMHgwMDIwMzk3NCwKKzB4MDAyMDM5N0MsIDB4MDAyMDM5NzAsIDB4MDAyMDM5NzIsIDB4MDAyMDE1MzAsCisweDAwMjAxOEVFLCAweDAwMjAzOTk0LCAweDAwMDA4MDAwLCAweDAwMUMzNTEwLAorMHgwMDIwM0Q5OCwgMHgwMDIwMThBMiwgMHgwODBBMEMwRSwgMHgwMDAyMDQwNiwKKzB4MUExQzFFMjAsIDB4MTIxNDE2MTgsIDB4MkUzMDMyMzQsIDB4MjYyODJBMkMsCisweDNBM0MzRTQwLCAweDZDNjI1NjQ4LCAweDQxMTEyRjI2LCAweEUyMjA4RjE4LAorMHg4OTBCMzEyMywgMHgzMjFDRDIwNCwgMHhEMTAyNjIyMCwgMHg0MTJCMzEyQywKKzB4MDAwOTAwMDksIDB4MDAyMDM0MTIsIDB4MDAyMDMzQzgsIDB4MDAwQkUwMDAsCisweDQwMDA2MkY2LCAweDQwMDA0MDAwLCAweDQwMDA0MDAwLCAweDQwMDA0MDAwLAorMHg2MkY2MDAwQiwgMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwKKzB4NDAxODQwMDAsIDB4NjJGNjAwMEIsIDB4NDAwMDQwMDAsIDB4NDAwMDQwMDAsCisweDQwMDA0MDAwLCAweDQwMjg0MDAwLCAweDYyRjYwMDBCLCAweDQwMDA0MDAwLAorMHg0MDE4NDAwMCwgMHgwMDBCNDAyOCwgMHhDOTBGNjJGNiwgMHg0MDA1NDAwNSwKKzB4NDAwNTQwMDUsIDB4NjJGNjAwMEIsIDB4NDAwNUM5MDcsIDB4NDAwNTQwMDUsCisweDYyRjYwMDBCLCAweDQwMDVDOTAzLCAweDAwMEI0MDA1LCAweEM5MDE2MkY2LAorMHgwMDBCNDAwNSwgMHgwMDAwNjJGNiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHg1NDRGMEQwQSwgMHg0NjIwNTM1NSwgMHgwMDAwM0E1NywKKzB4MjA2Qzc1NEEsIDB4MzIyMDMxMjAsIDB4MjAzODMwMzAsIDB4MzIzQTMxMzIsCisweDM0MzMzQTM4LCAweDAwMDAwMDAwLCAweDAwMDAwRDBBLCAweDAwMDAwMDQzLAorMHg0MjcwNzM3MiwgMHgzRDIwNjY3NSwgMHg1NTRFMjAzRCwgMHgyMDJDNEM0QywKKzB4NkU0OTY3N0EsIDB4NEU0OTcyNzQsIDB4NkQ3NTRFNTEsIDB4MDAwMDAwM0QsCisweDYxNzY2RTQ5LCAweDIwNjQ2OTZDLCAweDcyNjU3Mzc1LCAweDIwNzI2RjIwLAorMHgyMDc5NjU2QiwgMHgwMDIxNDQ0OSwgMHg1MjUwNDU0NSwgMHg1NzIwNEQ0RiwKKzB4NjU3NDY5NzIsIDB4NjQ2MTIwMkMsIDB4MDAzRDcyNjQsIDB4NkM2MTc2MjAsCisweDAwMDAwMDNELCAweDAwMDAwQTBELCAweDQzNUY0RDVBLCAweDQ2NUY0NDRELAorMHg0QzQ0NUY1NywgMHg0OTRFNDk1RiwgMHgwMDAwMDA1NCwgMHg2RTZCNkU1NSwKKzB4MjA2RTc3NkYsIDB4NkQ2RDZGNjMsIDB4M0Q2NDZFNjEsIDB4MDAwMDAwMDAsCisweDIwM0EzMDUxLCAweDAwMDAwMDIwLCAweDIwM0EzMTUxLCAweDAwMDAwMDIwLAorMHgyMDNBMzI1MSwgMHgwMDAwMDAyMCwgMHgyMDNBMzM1MSwgMHgwMDAwMDAyMCwKKzB4MjAzQTM0NTEsIDB4MDAwMDAwMjAsIDB4MkI0MzQ3NDEsIDB4NzM2OTZGNEUsCisweDYxNDMyMDY1LCAweDcyNjI2OTZDLCAweDZGNjk3NDYxLCAweDYxNjYyMDZFLAorMHg2RjIwNkM2OSwgMHg2OTc0MjA2RSwgMHgwRDBBNjU2RCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwNzIsIDB4MDAyMDUyMjAsIDB4MDAwMDBEMEEsIDB4NjI3MzU1NzYsCisweDc0NzM3MjVGLCAweDAwMDAwQTBELCAweDYyNzM1NTc2LCAweDczNzU3MzVGLAorMHg2NDZFNjU3MCwgMHgwMDAwMEEwRCwgMHg2MjczNTU3NiwgMHg3MzY1NzI1RiwKKzB4MDAwQTBENkQsIDB4MDAwMDAwNDQsIDB4NDQzODc1NzAsIDB4NzI2MzczNjUsCisweDZGNzQ3MDY5LCAweDNENTg0NTcyLCAweDAwMDAwMDAwLCAweDAwMDAwMDQ3LAorMHgwMDAwMDA0MiwgMHg3Mjc0NkU0OSwgMHg2RDY1MjA1MSwgMHgyQzc5NzQ3MCwKKzB4NDk2NzdBMjAsIDB4NDk3Mjc0NkUsIDB4NzU0RTUxNEUsIDB4MDAwMDNENkQsCisweDY1NEM3MjQ1LCAweDAwMDAwMDZFLCAweDAwMDAwMDQ5LCAweDIwNzQ2RjRFLAorMHg3NTZGNkU2NSwgMHg0OTIwNjg2NywgMHg0MjIwNTE0RSwgMHgwQTBENjY3NSwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwRkYsIDB4MDAwMjAwMDEsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDEwRTAxMEQsIDB4MDAwMjAwMDMsIDB4MDEwOTAxMDgsCisweDAwMDIwMTBBLCAweDAyMDAwMDAzLCAweDAyMDIwMjAxLCAweDAyMDQwMjAzLAorMHgwMjA2MDIwNSwgMHgwMjAyMDIwMCwgMHgwMjA0MDIwMywgMHgwMjBDMDIwQiwKKzB4MDIwRTAyMEQsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMDAwMDBGRiwgMHgwMDAyMDAwMSwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMTBFMDEwRCwgMHgwMDAyMDAwMywgMHgwMTA5MDEwOCwKKzB4MDAwMjAxMEEsIDB4MDAwMzAwMDMsIDB4MDIwMjAyMDEsIDB4MDIwNDAyMDMsCisweDAyMDYwMjA1LCAweDAyMDIwMjAwLCAweDAyMDQwMjAzLCAweDAyMEMwMjBCLAorMHgwMjBFMDIwRCwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAxMEUwMTBELCAweDAwRkYwMTBGLCAweDAxMDkwMTA4LAorMHgwMTBCMDEwQSwgMHgwMjAwMDEwRiwgMHgwMjAyMDIwMSwgMHgwMjA0MDIwMywKKzB4MDIwNjAyMDUsIDB4MDIwMjAyMDAsIDB4MDIwNDAyMDMsIDB4MDIwQzAyMEIsCisweDAyMEUwMjBELCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDEwRTAxMEQsIDB4MDBGRjAxMEYsIDB4MDEwOTAxMDgsCisweDAxMEIwMTBBLCAweDAxMEYwMTBGLCAweDAyMDIwMjAxLCAweDAyMDQwMjAzLAorMHgwMjA2MDIwNSwgMHgwMjAyMDIwMCwgMHgwMjA0MDIwMywgMHgwMjBDMDIwQiwKKzB4MDIwRTAyMEQsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMDIwNTIyMCwgMHgwMDAwMDA0NiwgMHgwMDAwMDA1OSwKKzB4NzMyMDQxNDIsIDB4MDAzRDcxNjUsIDB4NDk1NDQxMjAsIDB4MDAwMDIwNEQsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMkUwMjA5LCAweDgwMDAwMTAxLAorMHgwMDA0MDlGQSwgMHgwMEZGMDQwMCwgMHgwNTA3MDAwMCwgMHgwMjAwMDIwMSwKKzB4ODIwNTA3MDAsIDB4MDAwMjAwMDIsIDB4MDM4MzA1MDcsIDB4MDcwMTAwNDAsCisweDQwMDMwNDA1LCAweDAyMDkwMTAwLCAweDAxMDEwMDJFLCAweDA5RkE4MDAwLAorMHgwNDAwMDAwNCwgMHgwMDAwMDBGRiwgMHgwMjAxMDUwNywgMHgwNzAwMDA0MCwKKzB4NDAwMjgyMDUsIDB4MDUwNzAwMDAsIDB4MDA0MDAzODMsIDB4MDQwNTA3MDEsCisweDAwMDA0MDAyLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDA3MDkwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorfTsKKworY29uc3QgdTMyX3QgemNGd0ltYWdlU2l6ZT0xNTkzNjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGZ3dS5jLmRydl9iYV9yZXNlbmQgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBmd3UuYy5kcnZfYmFfcmVzZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNWJjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBmd3UuYy5kcnZfYmFfcmVzZW5kCkBAIC0wLDAgKzEsNzQyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJjcHJlY29tcC5oIgorCitjb25zdCB1MzJfdCB6Y0Z3SW1hZ2VbXSA9IHsKKzB4MDAwOTAwMEIsIDB4NEYyMjJGRTYsIDB4REUyOTdGRkMsIDB4RTExNEQ3MjksCisweDFFMTNENDI5LCAweDFFNEM0NzBCLCAweDAwMDlCMDE4LCAweEEwMDM5NTQ1LAorMHgzNjUyRTYwMCwgMHg3NjAxOEQwNCwgMHhDODQwNjBFMiwgMHgyRjAyOERGOSwKKzB4REUyM0Q0MjIsIDB4MDAwOTRFMEIsIDB4NEUwQkQ0MjIsIDB4RDQyMjAwMDksCisweDAwMDk0RTBCLCAweDRGMjY3RjA0LCAweDZFRjZBMDI0LCAweEQxMUY0RjIyLAorMHgwMDA5NDEwQiwgMHg0NDBCRDQxRSwgMHhENTFFMDAwOSwgMHgwMDA5NDUwQiwKKzB4RTFGRkQ3MUQsIDB4RDIxRDYxMUQsIDB4NTAyOTI3MTIsIDB4Q0IwMUQ0MUMsCisweEU1MDFFMUZGLCAweDIyMTIxMjA5LCAweDI0NTIxMjExLCAweEQ2MUFENTE5LAorMHhFMjAwOTcxNCwgMHhENDE5MjU3MiwgMHhENjE5MjYyMCwgMHg0RjI2MjQyMiwKKzB4MjYyMjAwMEIsIDB4REQxOERDMTcsIDB4NEMwQkRFMTgsIDB4NEQwQjAwMDksCisweDRFMEIwMDA5LCAweEFGRjgwMDA5LCAweDI3MTAwMDA5LCAweDAwMDAwNjQwLAorMHgwMDFDMDAxQywgMHgwMDIwMEJDNCwgMHgwMDAwQjM4RSwgMHgwMDIwMjlGOCwKKzB4MDAyMDBGNzIsIDB4MDAyMDJBMDQsIDB4MDAyMDJBMUMsIDB4MDAyMDBGMjAsCisweDAwMjAxMDU2LCAweDAwMjAwQzFDLCAweDAwMUMzNTEwLCAweDAwMUMzNjI0LAorMHgwMDFFMjEyQywgMHgwMDIwMjk5NCwgMHgwMDIwMjUzMCwgMHgwMDIwMjk5QywKKzB4MDAyMDI5QTgsIDB4MDAyMDBFNTAsIDB4MDAyMDIzRTYsIDB4MDAyMDE5MjAsCisweDJGQzYyRjk2LCAweDJGRTYyRkQ2LCAweDdGOTA0RjIyLCAweEUwMjBERThELAorMHhENDhENjFFMCwgMHg2MUUzMEYxNCwgMHg2MjEwNzEwMSwgMHhFMDI0RDc4QiwKKzB4MEYyNDQ3MEIsIDB4NDUwQkQ1OEEsIDB4MjAwODAwMDksIDB4OEYxMTZEMDMsCisweEREODgxRjBBLCAweDY3RDBENDg4LCAweDQxMEJEMTg4LCAweEQyODg2NTdDLAorMHg2OTIwREQ4OCwgMHg2NkMzNkM5QywgMHg0NjA4NDYwOCwgMHg0NjA4MzZDOCwKKzB4MUZEQTNENkMsIDB4MDRGQ0UwMjQsIDB4NjZFMkU1ODAsIDB4NjU1QzYwNEMsCisweDhGMTYzMDUwLCAweEUwMjAyRDYyLCAweEU1MDAwMUZDLCAweERFN0U2NDFDLAorMHgzMjQzNjI1RCwgMHhBMzJDOEIwMSwgMHg2NTVEMDAwOSwgMHgzNkVDNjY1MywKKzB4RTAyQzY3NjAsIDB4Njk1MzBGNzQsIDB4MzlEQzYwN0UsIDB4QUZFRjgwOTQsCisweDIwMDg3NTAxLCAweEUwMjA4QjE0LCAweEU1MDAwMUZDLCAweEEwMEFERTcyLAorMHg2NTVENjQxQywgMHgzOUVDNjk1MywgMHg2NzUzNkM5MiwgMHgzN0RDNjJDMiwKKzB4NzUwNDE3MjEsIDB4NjI1RDFGMkMsIDB4OEJGMjMyNDMsIDB4MkQxMEEzMDksCisweDhCMTc4ODAxLCAweDAxRkNFMDIwLCAweDJENzBFNzAwLCAweDFGRDc2RDFDLAorMHg2MjdEREU2NSwgMHg4QjAxMzJEMywgMHgwMDA5QTJGQiwgMHg2NUUzNjc3RCwKKzB4NzUwNDY2NzMsIDB4MzZFQzZDNzMsIDB4NjQ2MjNDNUMsIDB4NzcwODY5QzIsCisweDI0OTJBRkVGLCAweDhCMTg4ODA0LCAweDAxRkNFMDIwLCAweDJENDBFNDAwLAorMHhERTU5NjcxQywgMHgzMjczNjI0RCwgMHhBMkUyOEIwMSwgMHg2NDREMDAwOSwKKzB4NkNFMzZENDMsIDB4NjVEMjNERUMsIDB4NjE0MzdDMDQsIDB4NjIxMjMxQ0MsCisweDc0MDg2OTUyLCAweEFGRUQyOTI5LCAweDg4MDUyNTkyLCAweEUwMjA4QjE4LAorMHhFNDAwMDFGQywgMHg2NzFDMkQ0MCwgMHg2MjREREU0QiwgMHg4QjAxMzI3MywKKzB4MDAwOUEyQzcsIDB4Njk0MzY0NEQsIDB4MzlFQzYxRTMsIDB4NzEwNDY1OTIsCisweDNDMUM2QzQzLCAweDZENTI2MkMyLCAweDJEMkI3NDA4LCAweDI1RDJBRkVELAorMHg4QjFCODgzMSwgMHhEOTQyRDI0MSwgMHg3MjA0NjQyMiwgMHg3MjA0NjYyMiwKKzB4NzIwNDY3MjIsIDB4NzJFODZDMjIsIDB4MUYyRTFGNEQsIDB4NzIwNDY0MjIsCisweDcyMDQ2RTIyLCAweDY1MjIyOUUwLCAweDI5NTBEOTNBLCAweERFM0EyRkM2LAorMHg1NUZFNEUwQiwgMHhFMjAwN0YwNCwgMHgyRDIwQTI5QiwgMHg4QjFEODgzMCwKKzB4REUzM0QyMzIsIDB4NzIwNDY1MjIsIDB4NzIwNDYxMjIsIDB4NzIwNDY3MjIsCisweDcyRTg2OTIyLCAweDcyMDQ2NDIyLCAweDcyMDQ2QzIyLCAweDZFMjIyRUMwLAorMHgxRjlGRDYyQywgMHg3RkZDMjZFMCwgMHgwOUZFRTA0MCwgMHgyRjkyREMyQiwKKzB4NjYxMzRDMEIsIDB4RTIwMDdGMDQsIDB4MkQyMEEyN0IsIDB4ODkwMTg4MjgsCisweDAwMDlBMTA5LCAweEUxNDNERTIwLCAweEUwNDA2MkUxLCAweDM2MTc2NjJELAorMHgwRkU2OEYwMywgMHg2NjAzMDJGRSwgMHgzNjE3MjIwMSwgMHhBMEYzOEIwMSwKKzB4RTA0MDAwMDksIDB4RTUwMTA0RkUsIDB4MzA1Njg1NDEsIDB4QTBFQjhCMDEsCisweEUwNDAwMDA5LCAweDA5RkVFNzAxLCAweEIyNjEyRDcwLCAweEUwNDA2NDkxLAorMHhFMTQzMENGRSwgMHhFMDY4NjJDMSwgMHgzNTE3NjUyRCwgMHgwRjU2OEQ2OCwKKzB4MzU2M0U2NDAsIDB4RTYwMDhCMjQsIDB4MEY2NUUwNDgsIDB4QTAyRUUxMUEsCisweDAwMDA3MkMwLCAweDAwMTE3ODAwLCAweDAwMjAyQTIwLCAweDAwMjAwRjcyLAorMHgwMDIwMUZEQywgMHgwMDIwMjlCMCwgMHgwMDIwMkEyNCwgMHgwMDIwMEZCQywKKzB4MDAyMDI5QUYsIDB4MDAyMDI1RDQsIDB4MDAxMTc4MDQsIDB4MDAxMTc4MTAsCisweDAwMjAyOUFDLCAweDAwMjAyOUFELCAweDAwMjAwOTQ4LCAweDAwMjAwOTk0LAorMHg0MTIxNjE1MywgMHg0MTIxNDEyMSwgMHg0MTIxNDEyMSwgMHg0NTIxNDUyMSwKKzB4NjA1MzQ1MjEsIDB4NjYwM0M5MDMsIDB4MEY2NUUwNDgsIDB4RTAwNzcxMTgsCisweEUwNDQyMjA5LCAweDY0MUQwRjI1LCAweDY1RjNFMDRDLCAweDBGNDZCMjkxLAorMHgwRUZERTA0OCwgMHgwREZERTA0NCwgMHg2MURENjdFRCwgMHg0MTA4NDcwOCwKKzB4MEYxNkUwNTAsIDB4REQ5NDYwNzMsIDB4NEQwQjA2RkUsIDB4NkUwN0UwMEYsCisweDYwNzMyNkU5LCAweEUwNDAwRjY2LCAweDY1RjMwQ0ZFLCAweDY5MEQ4NUMyLAorMHgwMUZFRTA1MCwgMHg2MDkzNEQwQiwgMHg2MDczMjYwQiwgMHhFMDRDMEY2NiwKKzB4MDRGRUIyNTYsIDB4MDdGRUUwNDAsIDB4NjI3MUUwNjgsIDB4MEY1NjY1MkQsCisweDM1NjNFNjQwLCAweEVEMDA4OTU0LCAweDBGRDVFMDY0LCAweEM5MDM2MDIzLAorMHg0MDAwNDAwOCwgMHg2MTAzNjkwMywgMHgwRjk2RTA1NCwgMHhERTdFRTA1OCwKKzB4MEZGNkVDRkYsIDB4RTA2QzZDQ0MsIDB4NjBDMzBGRTYsIDB4NjI1MzRFMEIsCisweDQyMjE0MjIxLCAweDQyMjE0MjIxLCAweDQyMDA2NzIzLCAweDYxMDczMjdDLAorMHg0MjAwRTA1QywgMHgwRjE2NDUyMSwgMHg0NTIxRTA0MCwgMHg2MDUzMENGRSwKKzB4NDAwOEM5MDMsIDB4N0MwNjMwRkMsIDB4NkUwMzFGQzYsIDB4MUZENTZEMkQsCisweDFGMDRBMDFFLCAweDBGRDZFMDYwLCAweDA1RkVFMDU4LCAweDY0RDNCMjMxLAorMHg2MkUyRTA1QywgMHhFMDU0MDlGRSwgMHgyRTIyMjI5OSwgMHg2NEQzNjFDNCwKKzB4MDFGRTY2MUMsIDB4MDdGRUUwNkMsIDB4NjA2MzQ3MEIsIDB4RTA1ODIyMEIsCisweEIyMDUwNUZFLCAweEUwNjQyRTIyLCAweDdEMDEwMkZELCAweDBGMjU3MjAxLAorMHgwMkZERTA2NCwgMHgzMjYyRTYwNiwgMHhFMDQwOEJEQywgMHg2MjYxMDZGRSwKKzB4MDVGRUUwNDAsIDB4ODU1MTQyMDAsIDB4MzAyQzc1MEMsIDB4NjEwMzcwMUIsCisweDY0RjNFNjAwLCAweEU3MDRBMDA0LCAweDc2MDE2MjU2LCAweDc0MDQyNDIyLAorMHgzMjczNjI2RCwgMHg2NUYzOEJGOCwgMHg2NDFEQjFFMiwgMHgwNkZFRTA0MCwKKzB4NjQ2MUIxOUUsIDB4MDAwOUExNzUsIDB4RDc0REQ0NEMsIDB4NDcwQkUyMDEsCisweEExNkUyRDIwLCAweDg4MjkwMDA5LCAweERFNEE4QjA3LCAweDJEMjBFMjAwLAorMHhCMTZENjZFMiwgMHhBMTY0NjQ2RCwgMHhFMjgxMDAwOSwgMHgzMDIwNjIyQywKKzB4QTBBNzhCMDEsIDB4RTAyNDAwMDksIDB4NjI2QzA2RkMsIDB4NjY2Q0U2ODIsCisweDhCMjEzMjYwLCAweEU0MjQ1MkZBLCAweEQ0M0YyMjQwLCAweDEyNjE1NjQ3LAorMHgxMjYyNTY0OCwgMHgxMjYzNTY0OSwgMHgxMjY0NTY0QSwgMHgxMjY1NTY0QiwKKzB4MTI2NjU2NEMsIDB4MTI2NzU2NEQsIDB4MTI2ODU2NEUsIDB4MTI2OTU2NEYsCisweDE0MjdFMjAwLCAweDE0MjkxNDI4LCAweDE0MkIxNDJBLCAweDE0MkQxNDJDLAorMHgxNDJGMTQyRSwgMHgxRjZDQTEzNSwgMHg2NjZDRTY4MywgMHg4QjA3MzI2MCwKKzB4RTYwMDUyRkEsIDB4RDIyQjIyNjAsIDB4NjIyMkQ2MkMsIDB4MjYyMkExMjksCisweDY2NkNFNjkwLCAweDhCMTgzMjYwLCAweEU2MDA1MkZBLCAweEQyMjgyMjYwLAorMHg2MDIyRTYwNSwgMHgyMjAyQ0IyMCwgMHgyMjYyRDIyNiwgMHgyMjYyRTYwMCwKKzB4NDYwQkQ2MjUsIDB4RDIyNTAwMDksIDB4MDAwOTQyMEIsIDB4RTYwMUQyMjQsCisweEQyMjQyMjYyLCAweEExMEM0NjE4LCAweEU2QjAyMjYyLCAweDMyNjA2NjZDLAorMHhENTE4OEIyMiwgMHhEMjE2RDQyMCwgMHg3NTA0NkQ1MiwgMHg2RTUyNDIwQiwKKzB4NDIwQkQyMUUsIDB4RDQxRTY0RDMsIDB4NDUwQkQ1MTEsIDB4RDIxQjAwMDksCisweDY0RTM0MjBCLCAweEQ2MEVENDFCLCAweDAwMDk0NjBCLCAweEU2MDBFNTA0LAorMHgzMjUzNjI2RCwgMHhBMEVDOEIwMSwgMHg2NjZEMDAwOSwgMHgzMjZDNjJEMywKKzB4MjJFMDc2MDEsIDB4NEUxOUFGRjQsIDB4RDIxNEQ0MTMsIDB4RDQxNDY1NDIsCisweDAwMDk0MjBCLCAweDAwMDlBMERELCAweDAwMjAyNDhDLCAweDAwMjAyQTQ0LAorMHgwMDIwMEY3MiwgMHgwMDExNzgwNCwgMHgwMDIwMjUzOCwgMHgwMDIwMjk5NCwKKzB4MDAxQzM1MDAsIDB4MDAxRDQwMDQsIDB4MDAyMDEwNTYsIDB4MDAyMDBDMUMsCisweDAwMUUyMTJDLCAweDAwMUMzRDMwLCAweDAwMjAyQTVDLCAweDAwMjAwRkI0LAorMHgwMDIwMkE3MCwgMHgwMDIwMkE3OCwgMHgwMDExNzgwMCwgMHgwMDIwMEZCQywKKzB4MDAyMDJBN0MsIDB4RDZBRUQ0QUQsIDB4NjI2MkUwNDAsIDB4NzYwNDY1NDIsCisweDI0NTIzNTJDLCAweDYyNjI2NTYzLCAweDc1MDQ1NjQxLCAweDE0NjEzNjJDLAorMHg2MjUyNjY1MywgMHg3NjA4NTU0MiwgMHgxNDUyMzUyQywgMHg1NTQzNjI2MiwKKzB4MzUyQzc2RUMsIDB4NjU2MzE0NTMsIDB4NTY0NDYyNjIsIDB4MzYyQzc1MTAsCisweDY2NTMxNDY0LCAweDU1NDU2MjUyLCAweDM1MkM3NjEwLCAweDY1NjIxNDU1LAorMHhENjlDNTI0NiwgMHgxNDI2MzI1QywgMHg1NTQ3NjI2MiwgMHgzNTJDNzYwNCwKKzB4NjI2MjE0NTcsIDB4NzYwNDU1NDgsIDB4MTQ1ODM1MkMsIDB4NjI2MjY1NjMsCisweDc1MDQ1NjQ5LCAweDE0NjkzNjJDLCAweDU2NEE2MjUyLCAweDM2MkM3NTA0LAorMHg2NjUzMTQ2QSwgMHg1NTRCNjI1MiwgMHgzNTJDNzYwNCwgMHg2MjYyMTQ1QiwKKzB4NzYwNDU1NEMsIDB4MTQ1QzM1MkMsIDB4NjI2MjY1NjMsIDB4NzUwNDU2NEQsCisweDE0NkQzNjJDLCAweDYyNTI2NjUzLCAweDc2MDQ1NTRFLCAweDE0NUUzNTJDLAorMHg1MjRGNjU2MiwgMHgzMjVDRDY4NCwgMHg2MjYyMTQyRiwgMHg3Njk0MDU0RSwKKzB4MDQ1NjM1MkMsIDB4NjI2M0UwNDQsIDB4MDU0RTY2NjIsIDB4MzU2QzcyNDQsCisweEUwNDgwNDU2LCAweDA1NEU2NjIyLCAweEQ2N0MzNTZDLCAweDYyNjIwNDU2LAorMHgwNTRFRTA1NCwgMHgzNTJDNDIyOSwgMHg3NjA0MDQ1NiwgMHhFMDU4NjI2MiwKKzB4NDIyOTA2NEUsIDB4NTJGQTM2MkMsIDB4RTYzODA0NjYsIDB4RTA0NDIyNjAsCisweEUwNDgwNjRFLCAweDY2NDIxMjYxLCAweDU2NDExMjYyLCAweDU2NDIxMjYzLAorMHg1NjQ1MTI2NCwgMHg1NjQzMTI2NSwgMHg1NjQ2MTI2NiwgMHgwNjRFMTI2NywKKzB4MTI2OEUwNDAsIDB4RTA1MDA2NEUsIDB4NTY0NDEyNjksIDB4MDY0RTEyNkEsCisweDEyNkJFMDRDLCAweEUwNTQwNjRFLCAweDA2NEUxMjZDLCAweDEyNkRFMDU4LAorMHhFMDQ0MDY0RSwgMHhFMjAwMTI2RSwgMHhFMDQ4MDQyNiwgMHgxNDIxMjQyMiwKKzB4MTQyNTE0MjIsIDB4MTQyNjE0MjMsIDB4RTA0MDA0MjYsIDB4RTA1MDA0MjYsCisweDA0MjYxNDI0LCAweDA0MjZFMDRDLCAweDA0MjZFMDU0LCAweDA0MjZFMDU4LAorMHg3RjcwMUY2QywgMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwgMHg2OUY2MDAwQiwKKzB4NjE0RDRGMjIsIDB4MzEyM0UyNDAsIDB4RTIxRjg5MTcsIDB4ODkwODMxMjcsCisweEQ1NTBENDRGLCAweDQ1MEJFMDAxLCAweDY3MDc2NjQyLCAweEEwMEMyNjc5LAorMHhFMjNGMjQ2MiwgMHg4OTA4MzEyNywgMHhENjRBRDc0OSwgMHhFMDAxNzFFMCwKKzB4NTU3MTQ2MEIsIDB4MjUyOTYyMDcsIDB4NEYyNjE3NTEsIDB4MDAwOTAwMEIsCisweDYxNEQ0RjIyLCAweDMxMjNFMjQwLCAweEUyMUY4OTE1LCAweDg5MDczMTI3LAorMHhEMjQwRDQzRiwgMHg0MjBCNjY0MiwgMHgyNjBCRTAwMSwgMHgyNDYyQTAwQiwKKzB4MzEyN0UyM0YsIDB4RDczQTg5MDcsIDB4NTU3MUQ2M0EsIDB4NDYwQjcxRTAsCisweDI1MEJFMDAxLCAweDRGMjYxNzUxLCAweDAwMDkwMDBCLCAweDQ2MThFNjQwLAorMHhENTM1NDYyOCwgMHgyMjY4NjI1MiwgMHgwMDBCODlGQywgMHhFNjgwMDAwOSwKKzB4NDYyODQ2MTgsIDB4NjI1MkQ1MzAsIDB4ODlGQzIyNjgsIDB4MDAwOTAwMEIsCisweEUyMDBBMDAxLCAweDMyNDI3MjAxLCAweDAwMEI4QkZDLCAweEU2ODAwMDA5LAorMHg0NjI4NDYxOCwgMHg2MjUyRDUyOSwgMHg4QkZDMjI2OCwgMHgwMDA5MDAwQiwKKzB4NEYyMjJGRTYsIDB4NkU1MzdGRkMsIDB4MkY0MkJGRjEsIDB4RDYyNDYxRTIsCisweDE2MTVFMjgwLCAweDQyMTg1NEUxLCAweDU1RTIxNjQ2LCAweDE2NTc0MjI4LAorMHg2RUYyNTdFMywgMHgyRTJCMTY3OCwgMHg3RjA0MjZFMiwgMHhBRkNFNEYyNiwKKzB4MkZDNjZFRjYsIDB4MkZFNjJGRDYsIDB4REQxOTRGMjIsIDB4QkZENjZDNTMsCisweEJGQkI2RTQzLCAweEJGRDIyREUyLCAweDUxRDUwMDA5LCAweDU0RDYyQzEyLAorMHg1NUQ3MUM0MSwgMHg1NkQ4MUM1MiwgMHg0RjI2MUM2MywgMHg2REY2NkVGNiwKKzB4NkNGNjAwMEIsIDB4RTYwMDYxNjMsIDB4NDEwOUEwMDQsIDB4NzYwMTYyNTYsCisweDc0MDQyNDIyLCAweDhCRjkzNjEyLCAweDAwMDkwMDBCLCAweDAwMjAyNTM4LAorMHgwMDFDMzZBMCwgMHgwMDFDM0NBMCwgMHgwMDFDMzZGNCwgMHgwMDFDM0I4OCwKKzB4MDAxQzM3MDQsIDB4MDAyMDI0OEMsIDB4MDAxQzM3M0MsIDB4MDAxQzM3MDAsCisweDAwMUMzNzBDLCAweDAwMDlBMTA5LCAweDJGRDYyRkM2LCAweDRGMjIyRkU2LAorMHg2RTYzNkQ3MywgMHg2QzUzQjAxNiwgMHg2NEMzNTdGNCwgMHhCMDI5NjVFMywKKzB4QjAzRDY2RDMsIDB4QjA2RDAwMDksIDB4QjA3MTAwMDksIDB4QjA3NTAwMDksCisweEIwOEEwMDA5LCAweEIwOEQwMDA5LCAweDRGMjYwMDA5LCAweDZERjY2RUY2LAorMHg2Q0Y2QTBCNCwgMHgzNDEyRDE5MCwgMHhENjkwMDUyOSwgMHgyNjUwRDc5MCwKKzB4Mjc0MjAwMEIsIDB4MkZENjJGQzYsIDB4NEYyMjJGRTYsIDB4NkU2MzZENzMsCisweDZDNTNCRkYwLCAweDY0QzM1N0Y0LCAweDY2RDM2NUUzLCAweDZFRjY0RjI2LAorMHg2Q0Y2NkRGNiwgMHhEMTg3MkZFNiwgMHg2NjEyNkU2MywgMHg5MkJDNDQxOCwKKzB4NDQwODQ1MjgsIDB4NDUwMDI2MjksIDB4MjY1QjQ0MDgsIDB4MjY0QjQ0MDAsCisweDIxNjI0NzA4LCAweEQxODA0NzA4LCAweDIxNzIyN0VCLCAweDZFRjYwMDBCLAorMHg0RjIyMkZFNiwgMHhFMTAxREU3RCwgMHhCRkFCRTQwQSwgMHg2MkUzMkUxMiwKKzB4RTEwMDcyNkMsIDB4MjIxMkU0MDEsIDB4MjIxMjIyMTIsIDB4MjIxMjIyMTIsCisweDIyNDIyMjEyLCAweEU1MDNFNzMwLCAweDIyMTJFNDBBLCAweDIyMTIyMjEyLAorMHgyMjEyMjIxMiwgMHgyMjEyMjIxMiwgMHgyMjEyMjIxMiwgMHgyMjEyMjIxMiwKKzB4MjI3MjIyMTIsIDB4MjIxMjIyNTIsIDB4MjIxMjIyMTIsIDB4MjIxMjIyMTIsCisweDIyMTIyMjEyLCAweEJGODUyMjEyLCAweEU2MDAxMjFBLCAweDRGMjYyRTYyLAorMHg2RUY2MDAwQiwgMHhFMTAxRDI2NiwgMHgyMjEyRTQ0MSwgMHgyMjQyMDAwQiwKKzB4RDQ2NUQxNjQsIDB4MjE2MkU2MDUsIDB4MjQ2MjAwMEIsIDB4RDI2NEQ1NjMsCisweDg4MDE2MDUwLCAweEQ0NjM4QjA3LCAweDYwNDA5NjY4LCAweDhCMDk4ODAxLAorMHhBMDA3OTY2NSwgMHhFNjAwMDAwOSwgMHgyMjYyRDQ1RSwgMHg4ODAxNjA0MCwKKzB4RTYwNDhCMDAsIDB4QUY1REU0MEEsIDB4RDI1QjIyNjIsIDB4RTQwQUU2MDEsCisweDIyNjJBRjU4LCAweDJGQzYyRkI2LCAweDJGRTYyRkQ2LCAweERDNTc0RjIyLAorMHg2MEMyRUQwMCwgMHhDQjAxRUI2NCwgMHg2MEMyMkMwMiwgMHhBMDA4QzkwMSwKKzB4M0RCMjZFMDMsIDB4NjBDMjg5MDcsIDB4QzkwMUU0MEEsIDB4NkUwM0JGNDIsCisweDJFRTg3RDAxLCAweDNEQjI4QkY1LCAweEQ0NEQ4QjAzLCAweDQyMEJEMjRELAorMHhFNDBBMDAwOSwgMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwgMHg2QkY2QUYzMiwKKzB4OEYwMTQ0MTEsIDB4NjA0MzYwNEIsIDB4MDAwOTAwMEIsIDB4MkZDNjJGQjYsCisweDJGRTYyRkQ2LCAweDdGRkM0RjIyLCAweEVEMDBEQzQwLCAweEVCNjQ2MEMyLAorMHgyQzAyQ0IwMiwgMHgyRjAyNjBDMiwgMHhBMDA5QzkwMiwgMHgzREIzNkUwMywKKzB4NjBDMjg5MDgsIDB4MkYwMkU0MEEsIDB4QkYxM0M5MDIsIDB4N0QwMTZFMDMsCisweDhCRjQyRUU4LCAweDhCMEIzREIzLCAweEQyMzZENDM3LCAweDRGMjY3RjA0LAorMHg2REY2NkVGNiwgMHg0MjJCNkNGNiwgMHgxRkZGNkJGNiwgMHgwM0M0MDM0MCwKKzB4NEYyNjdGMDQsIDB4NkRGNjZFRjYsIDB4MDAwQjZDRjYsIDB4RDUyRjZCRjYsCisweDYwNTI1NjUxLCAweDAwMEI0NjI4LCAweDJGQjYzMDZDLCAweDJGRDYyRkM2LAorMHg0RjIyMkZFNiwgMHg0RjAyNEYxMiwgMHg2RTQzQkZGMSwgMHhEQzI4NkIwMywKKzB4QkZFQ0REMjgsIDB4MzBCODAwMDksIDB4MDYwQTNDMDUsIDB4NDYwOTQ2MDksCisweDNENjU0NjAxLCAweDQyMDkwMjBBLCAweDQyMDk0MjA5LCAweDhCRjAzMkUyLAorMHg0RjE2NEYwNiwgMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwgMHg2QkY2MDAwQiwKKzB4NEYyMjJGRTYsIDB4RTEwMkRFMUMsIDB4RTQwM0U1MDAsIDB4QkZENDJFMTIsCisweEU2MDYyRTUyLCAweEU3MDA0NjE4LCAweDJFNjJFNDAzLCAweDRGMjYyRTcyLAorMHg2RUY2QUZDQiwgMHgwMDA5MDAwQiwgMHgwMDI1RTcyMCwgMHgwMDIwMkMzQywKKzB4MDAyMDI5OTgsIDB4MDAxQzU4MTQsIDB4MDAxQzU5RDAsIDB4MDAxQzU4MzAsCisweDAwMUM2MjY4LCAweDAwMUM1OUE0LCAweDAwMUM2MzlDLCAweDAwMjAyOUFELAorMHgwMDFDNTgwNCwgMHgwMDIwMjlBQywgMHgwMDFDNTgxQywgMHgwMDFDNTg2MCwKKzB4MDAyMDJBOTAsIDB4MDAyMDBGNzIsIDB4MDAyMDJBQTgsIDB4MDAxQzEwNDAsCisweENDQ0NDQ0NELCAweDEwNjI0REQzLCAweDAwMUQ0MDA0LCAweDJGOTYyRjg2LAorMHgyRkI2MkZBNiwgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwgMHhFNDAwN0ZFMCwKKzB4NDUyOEU1MTAsIDB4Njc0MzZDNDMsIDB4RTEwOEEwMEYsIDB4NjA0MzY0NEQsCisweDBGNTY0MDA4LCAweEVFMDA2MEMzLCAweDgxNTEyNUMxLCAweDgxNTM4MTUyLAorMHgxNTczMTVFMiwgMHg3NTE0MTVFNCwgMHg2MjRENzQwMSwgMHg4QkVEMzIxMywKKzB4REE3MjUxRjEsIDB4MUExMTU0RjIsIDB4RDE3MTJBMTIsIDB4NTZGNDU1RjMsCisweDU4RjY1N0Y1LCAweDIxNDIxMTQxLCAweDExNTIxMTUzLCAweDExNjQxMTY1LAorMHgxMTc2MTE3NywgMHgxMTg4MTE4OSwgMHhEOTZBNkRGMiwgMHhEQjZBNTJGNywKKzB4MjlEMjE5RDEsIDB4MkIyMjFCMjEsIDB4RDg2OEVCNDUsIDB4RTlCOEVBNTAsCisweDRBMDg0QjA4LCAweEEwMjA2OTlDLCAweDZFRURFRTAwLCAweDYxRTM2REUzLAorMHg0MTA4NEQwOCwgMHgzMUVDM0RFQywgMHg0MTA4NEQwOCwgMHg2MEMzM0Q4QywKKzB4RDc1RjQxMDgsIDB4ODFEMTJEQzEsIDB4NDEwODYwQTMsIDB4NjBDMzgxRDIsCisweEUyMDAzMTdDLCAweDgxRDMzNDkyLCAweDFEMTMxREQyLCAweDhEMDFENDU2LAorMHhENDUyMUQyNCwgMHg2NUQzQjAzQywgMHg2NEVEN0UwMSwgMHg4QkRDMzRCMiwKKzB4REI1NEQxNEUsIDB4RDI0RjY1MTIsIDB4MUI1MTQ1MjksIDB4RDE0QzY0MTIsCisweDJCNzI2NzRELCAweEQ2NTA2NzIyLCAweDFCNzM0NzI5LCAweDJGRDI2OTIyLAorMHgxQjgyNjg5RCwgMHgyNjkyNjkxMiwgMHgxNkEyNUExMiwgMHhEQTQ2NUIxNCwKKzB4NUMxNjE2QjQsIDB4NUQxODE2QzYsIDB4NkVBMjE2RDgsIDB4N0YyMDE2RUEsCisweDZFRjY0RjI2LCAweDZDRjY2REY2LCAweDZBRjY2QkY2LCAweDAwMEI2OUY2LAorMHg2NjQyNjhGNiwgMHhDODAzNjA2MSwgMHhFNTAwOEQwNCwgMHhDOTAzNjA2MSwKKzB4OEIwMzg4MDIsIDB4NjU2MzUyNjIsIDB4MjQxMjUxMjQsIDB4NjA1MzAwMEIsCisweDJGRTYyRkQ2LCAweDdGRUM0RjIyLCAweDYyNTM2RTUzLCAweDZENDNFNTUwLAorMHg0NTA4RTQwMCwgMHhFMTAxQTAwMSwgMHg2MDQzNTIyNCwgMHg4MTIxMjIxMSwKKzB4NjA1MzgxMjMsIDB4NTZFMjgxMjIsIDB4OEJGNTM2MjAsIDB4MTZFNEQyMkYsCisweEU2MTQ2NEYzLCAweDY1RTM0MjBCLCAweEU0RkM2NUUxLCAweDJFNTEyNTQ5LAorMHg2NUYzNjFGMSwgMHgyRjExMjE0OSwgMHhEMTI4NTREMSwgMHhFNjE0NDEwQiwKKzB4NjA3MTU3RDEsIDB4MjcwMUNCMDEsIDB4N0YxNDFERTEsIDB4NkVGNjRGMjYsCisweDZERjYwMDBCLCAweDJGRTYyRkQ2LCAweDdGRUM0RjIyLCAweDY2NTM2RTUzLAorMHg2RDQzRTVGQywgMHgyMDU5NjA2MSwgMHgyNjAxQ0IwMSwgMHgzMjYwNTJFMiwKKzB4MTJFNDhCMDYsIDB4MzFFMDUxRTIsIDB4NTJEMThCMDQsIDB4MUUyMkEwMDIsCisweDU2NjRBRkYwLCAweDY0RjNEMjE1LCAweDQyMEJFNjE0LCAweDY3RTE2NUUzLAorMHgyNzE5RTFGQywgMHg2N0YxMkU3MSwgMHgyNzE5NTREMSwgMHg2NUYzRDEwRiwKKzB4NDEwQkU2MTQsIDB4NTJEMTJGNzEsIDB4Q0IwMTYwMjEsIDB4MURFMTIyMDEsCisweDRGMjY3RjE0LCAweDAwMEI2RUY2LCAweDAwMDA2REY2LCAweDAwMjAyNTlDLAorMHgwMDIwMjVBNCwgMHgwMDIwMjU5NCwgMHgwMDIwMjVDQywgMHgwMDEwMDBBMCwKKzB4MDAxMDE2NDAsIDB4MDAxRTIxMDgsIDB4MDAxQzNEMDAsIDB4MDAyMDA5MDQsCisweDJGQzYyRkI2LCAweDJGRTYyRkQ2LCAweDdGRkM0RjIyLCAweDYwMjJEMjI1LAorMHg4RDM1QzgwMywgMHhERTI0MkYwMSwgMHhEQjI1REMyNCwgMHhFRDAxQTAxNiwKKzB4QzkwMzYwNjEsIDB4ODkxNTg4MDEsIDB4RDEyMkQ0MjAsIDB4MDAwOTQxMEIsCisweDY1MDM1NjAzLCAweEM4MjA4NTYxLCAweEUwNTA4OTAzLCAweDcyMDEwMkJFLAorMHhEMjFEMEIyNiwgMHg2NEUzNDIwQiwgMHgyMUQyRDExQywgMHg2NkMyNTJDMSwKKzB4OEJFNTM2MjAsIDB4REQxQUVFMDEsIDB4NEUxOEEwMEUsIDB4QzkwMzYwNjEsCisweDg5MEQ4ODAxLCAweEQ3MTNENDE2LCAweDQ3MEJEQjE2LCAweEQ0MTYwMDA5LAorMHg2NTAzNEIwQiwgMHgyMUUyRDExMSwgMHg2NkQyNTJEMSwgMHg4QkVEMzYyMCwKKzB4QzgwNDYwRjEsIDB4RDIxMTg5MDcsIDB4NEYyNjdGMDQsIDB4NkRGNjZFRjYsCisweDQyMkI2Q0Y2LCAweDdGMDQ2QkY2LCAweDZFRjY0RjI2LCAweDZDRjY2REY2LAorMHg2QkY2MDAwQiwgMHgwMDFFMjEwMCwgMHgwMDIwMjVBNCwgMHgwMDIwMjU5QywKKzB4MDAyMDI1MzgsIDB4MDAyMDBENDIsIDB4MDAyMDBEQzQsIDB4MDAxQzNEMzAsCisweDAwMjAyNTk0LCAweDAwMjAwRDYwLCAweDAwMjAyNUNDLCAweDAwMjAwMTAwLAorMHhFNjAxRDIwMywgMHgxMjY1RDUwMywgMHgwMDBCMjI1MiwgMHgwMDAwMTI2NiwKKzB4MDAxQzEwMTAsIDB4MDAwMEMzNEYsIDB4RDYyQTdGRkMsIDB4MjY0MjY0NEMsCisweEM4MjA1MDY2LCAweDJGMDI4REZDLCAweDdGMDQwMDBCLCAweDJGRDYyRkM2LAorMHg0RjIyMkZFNiwgMHg2RDQzNkM1MywgMHhFRTAwQTAwNCwgMHg3RTAxNjRENCwKKzB4NjQ0Q0JGRUEsIDB4OEJGOTNFQzIsIDB4NkVGNjRGMjYsIDB4MDAwQjZERjYsCisweEEwMDE2Q0Y2LCAweDc2MDE2NjQzLCAweDIyMjg2MjYwLCAweDM2NDg4QkZCLAorMHg2NTYzQUZFNCwgMHg2MjUzMkZFNiwgMHg2NzUzNzUwNywgMHhFRTBBRTEwOCwKKzB4QzkwRjYwNDMsIDB4MzBFMjQ0MDksIDB4NDQwOTY1MDMsIDB4RTYzNzhEMDEsCisweDM2NUNFNjMwLCAweDI3NjA0MTEwLCAweDc3RkY4RkYyLCAweDgwMjhFMDAwLAorMHg2RUY2MDAwQiwgMHhFMDAwMDAwQiwgMHhFMDAwMDAwQiwgMHg0RjIyMkZFNiwKKzB4NjI1MzdGRUMsIDB4NjVGMzZFNDMsIDB4NjQyM0JGREMsIDB4NjRFM0JGRDEsCisweDY0RjNCRkNGLCAweEJGQ0NENDA0LCAweDdGMTQwMDA5LCAweDAwMEI0RjI2LAorMHgwMDAwNkVGNiwgMHgwMDFDMDAwNCwgMHgwMDIwMkFDNCwgMHhFMTEwRDVBMSwKKzB4RTY0MDYwNTAsIDB4MjUwMEM5RkQsIDB4RTBGRjc1RTksIDB4ODA1MTY0NTMsCisweDgwNTM4MDUyLCAweDgwNTY4MDU1LCAweDI1MTA3NUVGLCAweEUxRUY2MjUwLAorMHgyMjE5RTAwMSwgMHhFNzIwMjUyMCwgMHgyNDYwODA1MiwgMHgyNTcwMDAwQiwKKzB4RTRGREQ1OTUsIDB4RTcwMjYxNTIsIDB4MjUxMjIxNDksIDB4NzQwMTYwNTIsCisweDI1MDJDQjAxLCAweEQxOTE2NjUyLCAweDI1NjIyNjQ5LCAweDkyQzQ2MDEyLAorMHgyMTAyQ0IwOCwgMHhDOUNGNjAxMiwgMHg2MDEyMjEwMiwgMHgyMTAyQ0IwMywKKzB4MDAwQjExNzIsIDB4NEYyMjExMjMsIDB4RDc4QUQ1ODksIDB4RDQ4QkQyOEEsCisweEU2MDBFMTAwLCAweDI3MTEyNTExLCAweEJGQkYyMjEwLCAweEFGRDcyNDYxLAorMHg2NjRDNEYyNiwgMHg0NjAwRDI4NiwgMHg2MDYwMzYyQywgMHgwMDBCQ0IxMCwKKzB4NjU0QzI2MDAsIDB4NDUwMEQyODIsIDB4NjY1MDM1MkMsIDB4MjYxOUUxRUYsCisweDI1NjAwMDBCLCAweEQyN0Y2NjRDLCAweDM2MkM0NjAwLCAweENCMTA2MDYwLAorMHgyNjAwMDAwQiwgMHhEMjdCNjU0QywgMHgzNTJDNDUwMCwgMHhFMUVGNjY1MCwKKzB4MDAwQjI2MTksIDB4NjY0QzI1NjAsIDB4NDYwMEQyNzUsIDB4NjA2MDM2MkMsCisweDAwMEJDQjA4LCAweDY1NEMyNjAwLCAweDQ1MDBEMjcxLCAweDY2NTAzNTJDLAorMHgyNjE5RTFGNywgMHgyNTYwMDAwQiwgMHhEMjZFNjY0QywgMHgzNjJDNDYwMCwKKzB4Q0IwODYwNjAsIDB4MjYwMDAwMEIsIDB4RDI2QTY1NEMsIDB4MzUyQzQ1MDAsCisweEUxRjc2NjUwLCAweDAwMEIyNjE5LCAweDYyNEMyNTYwLCAweDQyMDBENjY0LAorMHg2MDIwMzI2QywgMHg0MDIxQzkwOCwgMHg0MDIxNDAyMSwgMHg2MDBDMDAwQiwKKzB4RDY2MDYyNEMsIDB4MzI2QzQyMDAsIDB4QzkwODYwMjAsIDB4NDAyMTQwMjEsCisweDAwMEI0MDIxLCAweDY0NEM2MDBDLCAweDc0RkZEMTVCLCAweDYyNDAzNDFDLAorMHg2MDJDMDAwQiwgMHg2NDRDRDE1OSwgMHg2MjQwMzQxQywgMHg2MDJDMDAwQiwKKzB4NEYyMjJGRTYsIDB4RTYwQTY1NUMsIDB4OEQxNTM1NjcsIDB4QkZFQTZFNDMsCisweDY0MEM2NDUzLCAweDg4MDE2MEVDLCAweEUwMEY4QjAyLCAweDI0MDlBMDAyLAorMHg0NDA5NDQwOSwgMHhFNjBBNjI0QywgMHg4OTA1MzI2MywgMHg2NDRDQkZFMiwKKzB4NjAyMzYyMEMsIDB4OEIwMEM4ODAsIDB4NjAyM0UyMDAsIDB4MDAwQjRGMjYsCisweDRGMjI2RUY2LCAweDYwNjJENjQ2LCAweDhCMDM4ODAxLCAweDAwMDlCMjQxLAorMHgwMDA5QTAwMywgMHhFNjQwRDI0MywgMHhENjQzMjI2MCwgMHg0RjI2RTIwMCwKKzB4MjYyMjAwMEIsIDB4RDYzRTRGMjIsIDB4ODgwMjYwNjIsIDB4QjI4QjhCMDEsCisweEQ2M0QwMDA5LCAweDRGMjZFMjAwLCAweDI2MjIwMDBCLCAweEQ0MzlENTM4LAorMHhFNzAxRTEwMCwgMHgwMDBCMjUxMiwgMHgwRkZGMjQ3MCwgMHhFNjA0RDIzNSwKKzB4MjI2MDAwMEIsIDB4RDQzNTRGMjIsIDB4NDEwQkQxMzUsIDB4RDUyNTAwMDksCisweDY2NTBFMUZELCAweDI2MTlEMjMzLCAweDI1NjBFNzAwLCAweDAwMEI0RjI2LAorMHg0RjIyMjI3MCwgMHhEMTJFRDQzMCwgMHgwMDA5NDEwQiwgMHhFN0ZCRDUxRCwKKzB4MjY3OTY2NTAsIDB4MDAwQjRGMjYsIDB4NEYyMjI1NjAsIDB4RDEyOEQ0MkIsCisweDAwMDk0MTBCLCAweEU3RjdENTE3LCAweDI2Nzk2NjUwLCAweDAwMEI0RjI2LAorMHhENTE0MjU2MCwgMHg2MjUwOTQyNSwgMHgwMDBCMjI0OSwgMHhENTExMjUyMCwKKzB4NjI1MEU0QkYsIDB4MDAwQjIyNDksIDB4NEYyMjI1MjAsIDB4ODUyMkQyMjAsCisweDIwMDg2MDBELCAweDg4MDE4OTExLCAweDg4MDM4OTNDLCAweDg4MDU4OTNFLAorMHg4ODA2ODk0MCwgMHg4ODA4ODk0NiwgMHg4ODA5ODk0QywgMHg4ODBBODk1MiwKKzB4ODgwQjg5NTgsIDB4QTA2NTg5NUUsIDB4QjA2NzAwMDksIDB4QTA2MjAwMDksCisweEZGN0Y2MDBDLCAweDAwMUUxMDI4LCAweDAwMUUyMTQ4LCAweDAwMUUxMTA4LAorMHgwMDIwMjlEQywgMHgwMDIwMjlERSwgMHgwMDIwMjlFOSwgMHgwMDIwMjlDMCwKKzB4MDAxRTEwM0YsIDB4MDAxRTEwNUYsIDB4MDAxRTEwMzAsIDB4MDAxRTEwOTAsCisweDAwMjAyOUU0LCAweDAwMUUxMDBCLCAweDAwMjAyOUUwLCAweDAwMjAyQUM4LAorMHgwMDIwMEY3MiwgMHgwMDIwMjlFOCwgMHgwMDIwMkFENCwgMHgwMDIwMkFFNCwKKzB4MDAyMDI5QjQsIDB4MDAwOUIwNEMsIDB4NjAwQ0EwMzUsIDB4MDAwOUIwNTYsCisweDYwMENBMDMxLCAweDYyNjBENjdDLCAweDhCMkIyMjI4LCAweDAwMDlCMDYyLAorMHg2MDBDQTAyOSwgMHg2MjYwRDY3OCwgMHg4QjIzMjIyOCwgMHgwMDA5QjA2QSwKKzB4NjAwQ0EwMjEsIDB4NjI2MEQ2NzQsIDB4OEIxQjIyMjgsIDB4MDAwOUIwQjQsCisweDYwMENBMDE5LCAweDYyNjBENjcwLCAweDhCMTMyMjI4LCAweDAwMDlCMEJBLAorMHg2MDBDQTAxMSwgMHg2MjYwRDY2QywgMHg4QjBCMjIyOCwgMHgwMDA5QjExQSwKKzB4NjAwQ0EwMDksIDB4NjI2MEQ2NjgsIDB4OEIwMzIyMjgsIDB4MDAwOUIxMzIsCisweDYwMENBMDAxLCAweDRGMjZFMDAwLCAweDAwMDkwMDBCLCAweEQyNjREMTYzLAorMHhENTY0ODQxMiwgMHg0MDAwQzkwRiwgMHhENzYzMDEyRCwgMHg2MTFDRTQwMywKKzB4RDY2MkUyMEYsIDB4MjcxMjI1NDAsIDB4RTAwMTI1MjAsIDB4MjYwMjAwMEIsCisweEU2MDFEMjVBLCAweDMwNjY4NTIzLCAweEUwMDA4RDA2LCAweEUwMDBEMjU4LAorMHg4MTIyRDY1QSwgMHgyNjAyRTAwMSwgMHgwMDA5MDAwQiwgMHg4NTIzRDI1MywKKzB4MjAwODYwMEQsIDB4ODgwMTg5MDUsIDB4RDY1NThCMEEsIDB4Q0IwMTYwNjAsCisweEQ2NTIyNjAwLCAweEUxMDFENDRFLCAweDI2MTJFMDAxLCAweDgxNDIwMDBCLAorMHhFMDAwMDAwQiwgMHhFNTAxRDE0OSwgMHg0NTE4ODUxMywgMHgzNDUzNjQwRCwKKzB4OEQwNTY2MDMsIDB4RDI0QkUwMDAsIDB4RTAwMUQ1NDgsIDB4MjUwMjIyNjAsCisweDAwMDkwMDBCLCAweEQxNDE0RjIyLCAweDY1MEQ4NTEzLCAweDQ0MTk2NDUzLAorMHg2NzJFNjI0OSwgMHg2MDJDMjI3RCwgMHg4OTA5ODgwMSwgMHg4OTBDODgwMiwKKzB4ODkxMDg4MDMsIDB4ODkyNjg4MDYsIDB4ODkyOTg4MDcsIDB4MDAwOUEwMzgsCisweEQ2M0VENTNELCAweEEwMjdFMjEyLCAweDYyNUMyNjUyLCAweDhCMkYyMjI4LAorMHhBMDFFRDYzQiwgMHg2MDVDNjI2MiwgMHg4OTA1MjAwOCwgMHg4OTA4ODgxMCwKKzB4ODkwQjg4MjAsIDB4MDAwOUEwMjQsIDB4RDYzNEQ0MzYsIDB4QTAxM0UyMDQsCisweEQ3MzUyNjQyLCAweEUyMENENjMxLCAweDI2NzJBMDBFLCAweEQ2MkZENTMzLAorMHhBMDA5RTIxOCwgMHhENDMyMjY1MiwgMHhFMjBBRDYyQywgMHgyNjQyQTAwNCwKKzB4RDYyQUQyMzAsIDB4RTIyRTI2MjIsIDB4RDQyRjg1MTUsIDB4MzI3NzY3MEQsCisweDhGMDEyNDIxLCAweDI0NTE2NTAzLCAweDAwMDlCMERCLCAweEUwMDFBMDAxLAorMHg0RjI2RTAwMCwgMHgwMDA5MDAwQiwgMHhFMTAxRDYxQSwgMHgyNjEwRDQyNywKKzB4RDcxOTY1NDEsIDB4NjU1REQxMTksIDB4RTAwMUUyMEYsIDB4MjYyMDI3NTIsCisweDIxMDIwMDBCLCAweDRGMjIyRkU2LCAweDg1MjNEMjEwLCAweDI0NDg2NDBDLAorMHhENjFFOEIwOCwgMHhFMjAwRDUxMiwgMHg4NDUxMjYyMSwgMHgyMDQ5OTQxMiwKKzB4ODA1MUEwNTAsIDB4NjBFMERFMEUsIDB4OEQzNUM4NDAsIDB4MzQyN0UyMDEsCisweEQxMTY4OTRDLCAweDQyMEJEMjE2LCAweEQ1MTYyMTQxLCAweENCMDQ2MDUyLAorMHgyNTAyQTAzNSwgMHgwMDAwRkY3RiwgMHgwMDIwMjlFOSwgMHgwMDIwMjlCNCwKKzB4MDAyMDI5QzAsIDB4MDAxRTExMDAsIDB4MDAxRTEwMEMsIDB4MDAyMDI5RTAsCisweDAwMUUxMDAwLCAweDAwMUUxMDAxLCAweDAwMjAyQzQwLCAweDAwMjAyOUM4LAorMHgwMDIwMjlEMCwgMHgwMDIwMkNBRSwgMHgwMDIwMkNCMiwgMHgwMDIwMkNCRSwKKzB4MDAyMDJDRDYsIDB4MDAyMDJDRTAsIDB4MDAyMDI5Q0MsIDB4MDAyMDI5REEsCisweDAwMjAxREI2LCAweDAwMUUxMTA4LCAweDg5MTczNDI3LCAweEQ3OTREMjkzLAorMHgyMjQxNDcwQiwgMHhFNUZCRDY5MywgMHgyMTU5NjE2MiwgMHg4NEUxMjYxMiwKKzB4QjBGRkNCODAsIDB4NjBFMDgwRTEsIDB4Q0IwNEQ2OEYsIDB4NjA2MDJFMDAsCisweDI2MDBDOTNGLCAweEUwMDFENjhELCAweDI2MDJBMDAxLCAweDRGMjZFMDAwLAorMHg2RUY2MDAwQiwgMHg2MDYwRDY4QSwgMHg4OTE5Qzg4MCwgMHg2MDIxRDI4MywKKzB4OEIxNTg4MDEsIDB4RTUwMUQyODcsIDB4MzA1Njg1MjQsIDB4RDE4Njg5MTAsCisweEQ0ODZFMjAzLCAweDY1NDEyMTIwLCAweDY1NURFMDBCLCAweEQ1ODQwNjU2LAorMHhFNzAyRTQwRiwgMHgyNTcxMjE0MCwgMHhFMDAxRDc3QywgMHgyNzAyMDAwQiwKKzB4RTAwMDAwMEIsIDB4NEYyMjJGRTYsIDB4ODRFMURFN0UsIDB4ODkzNEM4ODAsCisweDg1NTRENTc4LCAweDhGMzAyMDA4LCAweEQ3N0I2MTAzLCAweDY2NzI4NTUzLAorMHg2NTBDNjQwMywgMHg2MjBDODU2NiwgMHg4QjI2MzUyMCwgMHhENzczRDY3NywKKzB4NjQ0QzY1MUMsIDB4Mjc0MTI2NTEsIDB4Qzg0MDYwRTAsIDB4RDI3NDg5MDcsCisweDAwMDk0MjBCLCAweDYwNjJENjY3LCAweEEwMDhDQjA0LCAweEQxNjQyNjAyLAorMHgwMDA5NDEwQiwgMHhFNUZCRDY2MywgMHgyNDU5NjQ2MiwgMHhCMEExMjY0MiwKKzB4RDU2MjAwMDksIDB4MjUyMkUyMDEsIDB4RDc1RjYwRTAsIDB4MkUwMENCMDQsCisweEM5M0Y2MDcwLCAweEEwMDEyNzAwLCAweEUwMDA2MDIzLCAweDAwMEI0RjI2LAorMHgyRkE2NkVGNiwgMHgyRkM2MkZCNiwgMHgyRkU2MkZENiwgMHhFMjQwREE1QywKKzB4REM1OTY2QTEsIDB4MzEyMzYxNkQsIDB4NjI2Mzg5MDAsIDB4NkVEMzZEMkMsCisweDRFMjEzNkQ4LCAweDRFMjEyQTYxLCAweERCNUJENDVBLCAweEU3MDBBMDBGLAorMHg3NzAxNjZCMiwgMHg3MTAyNjE2MywgMHg2NTYxMkIxMiwgMHg3MTAyNjYxMywKKzB4NjI2MTJCMTIsIDB4NjIyRDY1NUQsIDB4MzI1QzQyMjgsIDB4NjI3QzI0MjIsCisweDhCRUQzMkUzLCAweEM5MDM2MEQzLCAweDhCMTA4ODAzLCAweEVEMDc2RUIyLAorMHg3MTAyNjFFMywgMHg2NzEzMkIxMiwgMHg2MkUxNzEwMiwgMHg2NTcxMkIxMiwKKzB4NjU1RDYyMkQsIDB4MzUyQzQ1MjgsIDB4QTAwQzJDRDAsIDB4ODgwMjI0NTIsCisweEEwMDM4QjAxLCAweDg4MDFFMjAzLCAweEUyMDE4QjA1LCAweDY2QjIyQzIwLAorMHg2NzdENjc2MSwgMHhFQjBGMjQ3MiwgMHg2REExMkNCMCwgMHg4QjA1MkREOCwKKzB4RDQzMkQyM0UsIDB4RTEwMUVFMDAsIDB4MjQxMjIyRTIsIDB4NkRGNjZFRjYsCisweDZCRjY2Q0Y2LCAweDZBRjYwMDBCLCAweDJGRTYyRkQ2LCAweEUyNDBERDMwLAorMHg2MTZENjZEMSwgMHg4OTAwMzEyMywgMHg2NzJDNjI2MywgMHhERTMyMzY3OCwKKzB4MkQ2MTc3MDMsIDB4RDYyRjQ3MjEsIDB4NDcyMTY0RTIsIDB4RTEwMEEwMEUsCisweDcxMDE2NTYyLCAweDI0NTA2MjUzLCAweDQyMTk3NDAxLCAweDc0MDEyNDIwLAorMHgyNDUwNDUyOSwgMHg0NTE5NzQwMSwgMHg3NDAxMjQ1MCwgMHgzMjczNjIxQywKKzB4NDIwMDhCRUUsIDB4NjREMTY2RTIsIDB4MzYyQzQyMDAsIDB4OEYwNjI0NDgsCisweEREMjIyRTYyLCAweEU1MDBERTE1LCAweDJENTJFNzAxLCAweDZFRjYyRTcyLAorMHg2REY2MDAwQiwgMHgyRkU2MkZENiwgMHhFRTAxNEYyMiwgMHhFRDBBQTAwNSwKKzB4NjRFM0JDOTcsIDB4NjRFM0JDOUQsIDB4NjJFQzdFMDEsIDB4OEJGNzMyRDcsCisweEVFMDFBMDA1LCAweDY0RTNCQzlFLCAweDY0RTNCQ0E0LCAweDYyRUM3RTAxLAorMHg4QkY3MzJENywgMHg2RUY2NEYyNiwgMHg2REY2MDAwQiwgMHgwMDIwMjlEQSwKKzB4MDAyMDFFQzIsIDB4MDAxRTExMDgsIDB4MDAxRTEwMTUsIDB4MDAyMDI5RTAsCisweDAwMUUxMDAxLCAweDAwMjAyOUI0LCAweDAwMUUxMTAwLCAweDAwMjAyOURFLAorMHgwMDIwMjlDQywgMHgwMDFFMTAwMCwgMHgwMDIwMjlEMCwgMHgwMDIwMjlEQywKKzB4MDAyMDFEQjYsIDB4MDAxRTEwMEMsIDB4MDAyMDI5QzgsIDB4MDAyMDI5RTQsCisweDJGRTYyRkQ2LCAweDdGRkM0RjIyLCAweDYwNjBENjRDLCAweDg5NDg4ODAxLAorMHhFMTAxRDQ0QiwgMHhENzRCODU0OCwgMHg2NTBEMjYxMCwgMHg0NTE5NjA3MCwKKzB4NjY1OURENDksIDB4NjFEMzYyNkUsIDB4Qzg0MDI2MkQsIDB4NzQwMjcxMDIsCisweDhEMUFENzQ2LCAweEQyNDY2NjZDLCAweEU1MDFERTQ2LCAweEEwMDQyRTIyLAorMHg2MjQ1RUUwNCwgMHgyMTIxNzUwMSwgMHg2MjVDNzEwMiwgMHg4QkY4MzJFMywKKzB4ODFENDYwNjMsIDB4RDU0MEU2MDEsIDB4NjI2Q0U0MTcsIDB4ODkxRTMyNDMsCisweDc2MDE2MjU1LCAweEFGRjgyNzIxLCAweEQyM0M3NzAyLCAweEU1MDFERTM5LAorMHhBMDA0MkUyMiwgMHg2MjQ1RUUwNCwgMHgyMTIxNzUwMSwgMHg2MjVDNzEwMiwKKzB4OEJGODMyRTMsIDB4ODFENDYwNjMsIDB4RDUzNUU2MDEsIDB4RTQxN0EwMDQsCisweDc2MDE2MjU1LCAweDc3MDIyNzIxLCAweDMyNDM2MjZDLCAweDkyNEI4QkY4LAorMHhENDMwMkQyMSwgMHg2MTQyRDczMCwgMHg2NUYyMkYxMiwgMHg2MDUzNkRGMiwKKzB4MjcwMEM5ODAsIDB4Qzk2MDYwNTMsIDB4ODA3MTYxMDMsIDB4NkVGMjYwNTMsCisweEM5MDM2NUYyLCAweDQ1Mjk0RDE5LCAweDYwREM4MDcyLCAweDgxNzI0NTE5LAorMHg2MDVDNEUyOSwgMHg0MDE4NjJFQywgMHg4MTczMzAyQywgMHgyMTE4NkQ0MiwKKzB4NkVGMjJGRDIsIDB4NjZGMjYyRjIsIDB4NDYyOTQyMTksIDB4NjZGMjY1NkMsCisweDY0RUM2MDJDLCAweDQ2Mjk0MDE4LCAweDQ2MTkzMDRDLCAweDYwNkM4MTc0LAorMHgzMDVDNDAxOCwgMHg4MTc1OEYwNywgMHgwMDA5QkNCRiwgMHgyMjI4NjIwQywKKzB4QTAwQTg5MDgsIDB4NjAxMzAwMDksIDB4OEIwMzg4NDAsIDB4MDAwOUIwMEEsCisweDAwMDlBMDAzLCAweEUyMDJENjExLCAweDdGMDQyNjIyLCAweDZFRjY0RjI2LAorMHg2REY2MDAwQiwgMHgwMDA5MDAwQiwgMHgwMDAwMDYwQSwgMHgwMDIwMjlFOCwKKzB4MDAyMDJDNDAsIDB4MDAxRTEwMDAsIDB4MDAyMDJDRDYsIDB4MDAyMDJDRTIsCisweDAwMjAyQzUyLCAweDAwMjAyOUQwLCAweDAwMjAyQzgyLCAweDAwMjAyQzgwLAorMHgwMDIwMkM1NCwgMHgwMDFFMTAwQywgMHgwMDIwMjlCNCwgMHgwMDIwMjlFMCwKKzB4NEYyMjJGRTYsIDB4REU5MDdGRkMsIDB4MjAwODg0RTksIDB4MkYwMDhEMDYsCisweEQ2OEZENDhFLCAweDAwMDk0NjBCLCAweDY0RjBCMTQ2LCAweDY2MjBEMjhELAorMHg4OTAyMjY2OCwgMHhDOUJGNjBFMCwgMHg3RjA0MkUwMCwgMHgwMDBCNEYyNiwKKzB4MDAwQjZFRjYsIDB4MkZFNjAwMDksIDB4REU4NzRGMjIsIDB4NjBFMEQ2ODcsCisweENCQzBENDg3LCAweDYyNjAyRTAwLCAweEM4MDM2MDJDLCAweDQwMjE4OTA0LAorMHg3MDAxNDAyMSwgMHg2NjAzQTAwMiwgMHg2NjAzNDAwOSwgMHhENjgxNjE2RCwKKzB4RTUwMEEwMDQsIDB4NzUwMTYyNjIsIDB4NzQwNDI0MjIsIDB4MzIxMzYyNUQsCisweEQyN0Q4QkY4LCAweDAwMDk0MjBCLCAweEM5QkY4NEUyLCAweDRGMjY4MEUyLAorMHg2RUY2MDAwQiwgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwgMHhEQzcyN0ZGQywKKzB4ODRDMkQyNzYsIDB4Q0I0MERENzYsIDB4ODBDMjQyMEIsIDB4OEQwNDIwMDgsCisweDYyRTA2RTAzLCAweEEwMDY2NDJDLCAweEQ2NkE3NDA0LCAweDYxNjBENDcxLAorMHg0NzBCRDc3MSwgMHg2NDRENjUxQywgMHg0NTIxNjU0MywgMHhBMDA0NDUyMSwKKzB4NjJFNkU2MDAsIDB4MkYyMjc2MDEsIDB4NjI2RDJEMjIsIDB4OEJGODMyNTMsCisweEM5MDM2MDQzLCAweDg5MTIyMDA4LCAweDg5MDU4ODAzLCAweDg5MDY4ODAyLAorMHg4OTA3ODgwMSwgMHgwMDA5QTAwOCwgMHhBMDA1RTAwNywgMHhFMDAzODBEOCwKKzB4ODBEOEEwMDIsIDB4ODBEOEUwMDEsIDB4MkYyMjYyRTIsIDB4RTAwRjJEMjIsCisweDgwRDhENjVFLCAweENCMDg2MDYwLCAweDYwQzAyNjAwLCAweDJDMDBDOTNGLAorMHg0RjI2N0YwNCwgMHg2REY2NkVGNiwgMHg2Q0Y2MDAwQiwgMHgyRkM2MkZCNiwKKzB4MkZFNjJGRDYsIDB4RDI1NjRGMjIsIDB4NkU0MzZENzMsIDB4NDIwQjZCNTMsCisweDIwMDg2QzYzLCAweDY0MDM4RjA4LCAweEQyNDVENDUyLCAweDZFRjY0RjI2LAorMHg2Q0Y2NkRGNiwgMHg2QkY2NDIyQiwgMHgyNEUwNjBCMywgMHg2MEMzODA0MSwKKzB4QTAwNzgxNDEsIDB4NjU1REU1MDAsIDB4MDBEQzYwNTMsIDB4MzI0QzYyNTMsCisweDgwMjQ3NTAxLCAweDZFRUM2MjVELCAweDhCRjQzMkUzLCAweDYwNjBENjM2LAorMHgyNjAwQzlCRiwgMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwgMHg2QkY2MDAwQiwKKzB4N0ZDNDRGMjIsIDB4NzIwMjYyRjMsIDB4MjI1MTJGNDEsIDB4NDUyOTcyMDIsCisweDYwNjMyMjUxLCAweEU1QzRFNjgyLCAweDY3RjM4MTIxLCAweDY1NUM2NjZDLAorMHhFNDA4QkZCQywgMHg0RjI2N0YzQywgMHgwMDA5MDAwQiwgMHhEMjM3RDEzNiwKKzB4RTQwNTYwMTIsIDB4RTUwMENCMjAsIDB4MjI0MjIxMDIsIDB4MjI1MjAwMEIsCisweEQ1MzREMTMzLCAweEU0MDBENzM0LCAweDIxNDJFMjBGLCAweDE3NDExMTU0LAorMHhENTMyMjcyMiwgMHg5NjM1RDczMiwgMHgxNTQxMjU3MiwgMHg5NjMyMTU2MiwKKzB4RTYwMTE1NjUsIDB4RDUyRjExNjUsIDB4NjY2Q0U2RjgsIDB4MjU0MjI1NDIsCisweDI1NDIyNTQyLCAweDI1NDIyNTQyLCAweDI1NjIyNTQyLCAweDc2MDFFNzI3LAorMHg2NzYzMjU3MiwgMHgyNTYyNzc5NywgMHhFNzA0MjU3MiwgMHgyNTcyRTI0OCwKKzB4RTIxOTI1MjIsIDB4RTI3MDI1MjIsIDB4MjU0MjI1NDIsIDB4MjU0MjI1NDIsCisweDI1MjIyNTQyLCAweDI1MjJFMjBDLCAweDI1NDIyNTQyLCAweDI1NDIyNTQyLAorMHgyNTQyMjU0MiwgMHgyNTQyMjU0MiwgMHgwMDBCMTU0QSwgMHhFMjA4MTE0NSwKKzB4MDAwOTQyMkIsIDB4NTE2MzA2MDEsIDB4MDAxRTEwMTcsIDB4MDAyMDJBRjAsCisweDAwMjAwRjcyLCAweDAwMjAyOUIwLCAweDAwMUUxMDE1LCAweDAwMUUxMEJGLAorMHgwMDExNzgwMCwgMHgwMDFFMTBGQywgMHgwMDIwMDEwMCwgMHgwMDIwMjAxQSwKKzB4MDAxRTEwRjgsIDB4MDAyMDJBRjQsIDB4MDAyMDBGQkMsIDB4MDAxRTEwQUUsCisweDAwMjAxRkRDLCAweDAwMjAyQjEwLCAweDAwMUMzNTAwLCAweDAwMUQ0MDA0LAorMHgwMDFDNTgxQywgMHhBMDAwQTAwMCwgMHgwMDFEMDEwMCwgMHgwMDFENDAwMCwKKzB4MDAwNDAwMjEsIDB4MDAxQzU4OUMsIDB4MkZFNjJGRDYsIDB4N0ZGQzRGMjIsCisweEM4MjA2MDQzLCAweDZFNDM4RDAyLCAweDAwMDlCRUJCLCAweEM4MTA2MEUzLAorMHhCRUI4ODkwMSwgMHg2MEUzMDAwOSwgMHg4OTAxQzg0MCwgMHgwMDA5QkVEQSwKKzB4QzgwMTYwRTMsIDB4REQzNzg5MzYsIDB4QzgwMjYwRDAsIDB4MkYwMDhEMDMsCisweDQ2MEJENjM1LCAweDYwRjAwMDA5LCAweDg5MDJDODA0LCAweDQ2MEJENjMzLAorMHg2MkYwMDAwOSwgMHhDODgwNjAyMywgMHg2MEQwODkwMiwgMHgyRDAwQzk3RiwKKzB4QzgwMTYwMjMsIDB4RDYyRTg5MDQsIDB4MDAwOTQ2MEIsIDB4MDAwOUEwMDUsCisweDg5MDJDODA4LCAweDQ2MEJENjJCLCAweDYwRjAwMDA5LCAweDg5MDJDODEwLAorMHg0MjBCRDIyOSwgMHhENTI5MDAwOSwgMHg4ODAyNjA1MiwgMHhEMjI4OEIwMywKKzB4QTAwNUU2MDQsIDB4ODgwMTIyNjAsIDB4RDIyNThCMDIsIDB4MjI2MEU2MDEsCisweDI1MjJFMjAwLCAweEM4ODA2MEUzLCAweEQ2MjI4OTJFLCAweDYwRTM2RTYwLAorMHg4OTAyQzg4MCwgMHg0MjBCRDIyMCwgMHg2MEUzMDAwOSwgMHg4OTAyQzg0MCwKKzB4NDIwQkQyMUUsIDB4NjBFMzAwMDksIDB4ODkwMkM4MDIsIDB4NDIwQkQyMUMsCisweDYwRTMwMDA5LCAweDg5MEVDODA0LCAweDQxMEJEMTFBLCAweEJGMTUwMDA5LAorMHhCRjFEMDAwOSwgMHhENTE4MDAwOSwgMHg2MDUwRDQxOCwgMHhDOTA4RDcxOCwKKzB4QkY1NDI1MDAsIDB4NjBFMzI0NzIsIDB4ODkwNUM4MDgsIDB4N0YwNEQyMTUsCisweDZFRjY0RjI2LCAweDZERjY0MjJCLCAweDRGMjY3RjA0LCAweDAwMEI2RUY2LAorMHgwMDAwNkRGNiwgMHgwMDFFMTAyMSwgMHgwMDIwMTE4MiwgMHgwMDIwMTFBNCwKKzB4MDAyMDE3QjAsIDB4MDAyMDExQkMsIDB4MDAyMDExQ0MsIDB4MDAyMDI5RTAsCisweDAwMUUxMDBCLCAweDAwMUUxMDI4LCAweDAwMjAxMjIyLCAweDAwMjAxMjJFLAorMHgwMDIwMTFENCwgMHgwMDIwMTFGMiwgMHgwMDFFMTAwMCwgMHgwMDEwRjEwMCwKKzB4MTIzNDU2NzgsIDB4MDAyMDEyMEEsIDB4RDZBODY0NEMsIDB4MzQ2Qzc0RkYsCisweDI0NTAwMDBCLCAweDY0NENENkE2LCAweDAwMEIzNDZDLCAweEQ2QTUyNDUwLAorMHgzNDZDNjQ0QywgMHgyNDUwMDAwQiwgMHg2MTZENjI1QywgMHg0MTE5NDIwOCwKKzB4NjAxOTQyMDgsIDB4NjQ0QzQyMDAsIDB4MzI0QzY3MEUsIDB4MjA3REQxOUUsCisweEM5MEY0MjAwLCAweDAwMEIzMjFDLCAweDY3NjMyMjAwLCAweDQyMDg2MjVDLAorMHg0MjAwNDIwOCwgMHgzMjRDNjQ0QywgMHg0MjAwRDE5OCwgMHgwMDBCMzIxQywKKzB4MkZFNjIyNzAsIDB4NjE0QzRGMTIsIDB4NDEwMEQ0OTMsIDB4NjcxMDMxNEMsCisweDI3MjlFMjlGLCAweDY1NzM2RTUzLCAweDQ3MTk2NzZELCAweDY3MkU2Mjc5LAorMHg0MjIxMjI3RCwgMHg0MjIxNDIyMSwgMHg3NjAxNjYyQywgMHhFNDAxNDYwOCwKKzB4MzRFODQ2MDgsIDB4NjQ0QzQ2MDAsIDB4MEUxQTA0NjcsIDB4MjE1MDI1RUIsCisweDAwMEI0RjE2LCAweDRGMjI2RUY2LCAweEQyODU3RkU4LCAweDg4MDE2MDIxLAorMHhEMjg0OEI3QiwgMHgyNjY4NjYyMSwgMHhEMjgzOEI3NywgMHgyNjY4NjYyMSwKKzB4RTUwRjhCNzMsIDB4RTQwMUJGQTAsIDB4QkZBM0U1MDEsIDB4RTU4NkU0MDAsCisweEU0MDA2NTVDLCAweDJGNTBCRkEzLCAweEJGQTBFNDAxLCAweEU2MDJFNTA2LAorMHg2MDYzNDYxOCwgMHg4MUYyRTQwMSwgMHg2NTQzQkY5RSwgMHhFNDAxODVGMiwKKzB4QkZBQTY1NDMsIDB4ODVGMjY2MDMsIDB4NjU0M0U0MDEsIDB4NjYwM0JGQjEsCisweEU0MDI2NUYwLCAweDYwNTM3NTZDLCAweDgwRjhCRjdFLCAweEJGODFFNDAyLAorMHg4NEY4RTUxMiwgMHg3MDkwRTQwMiwgMHg2NTAzQkY4MSwgMHg0NjE4RTYwMiwKKzB4ODFGNjYwNjMsIDB4QkY3RkU0MDIsIDB4ODVGNkU1MDAsIDB4NjYwM0U0MDIsCisweEU1MDBCRjhCLCAweEU0MDI4NUY2LCAweEJGOTI2NjAzLCAweEU1RkVFNTAwLAorMHhFMDEwNjU1QywgMHhCRjVGRTQwMywgMHhFNTEzMEY1NCwgMHhFNDBFQkY2MiwKKzB4MDVGQ0UwMTAsIDB4QkY2MkU0MEUsIDB4RTUwMDc1ODUsIDB4QkY2M0U0MDMsCisweEU1MDBFNjQwLCAweEJGNzBFNDAzLCAweEU1MDBFNjQwLCAweEJGNzhFNDAzLAorMHhFNUZGRTY0MCwgMHhFMDE0NjU1QywgMHhCRjQ1RTQwNCwgMHhFNDBGMEY1NCwKKzB4RTUwNEJGNDgsIDB4MDVGQ0UwMTQsIDB4QkY0OEU0MEYsIDB4RTUwMTc1ODQsCisweEJGNDlFNjQwLCAweEU1MDFFNDA0LCAweEJGNTZFNjQwLCAweEU1MDFFNDA0LAorMHhFNDA0RTY0MCwgMHhBRjVDN0YxOCwgMHg3RjE4NEYyNiwgMHgwMDBCNEYyNiwKKzB4NEYyMjAwMDksIDB4RDI0MjdGRjAsIDB4ODgwMTYwMjEsIDB4RDI0MThCNzEsCisweDI2Njg2NjIxLCAweEQyNDA4QjZELCAweDI2Njg2NjIxLCAweEU1MEY4QjY5LAorMHhFNDAxQkYxQSwgMHhCRjFERTUwMSwgMHhFNTg2RTQwMCwgMHhFNDAwNjU1QywKKzB4MkY1MEJGMUQsIDB4QkYxQUU0MDEsIDB4RTQwMUU1MDYsIDB4QkYxQjY1NDMsCisweEU0MDFFNjQwLCAweEJGMjg2NTQzLCAweEU0MDFFNjQwLCAweEJGMzA2NTQzLAorMHg2NUYwRTY0MCwgMHg3NTZDRTQwMiwgMHhCRUZENjA1MywgMHhFNDAyODBGNCwKKzB4RTUxMkJGMDAsIDB4RTQwMjg0RjQsIDB4QkYwMDcwOTAsIDB4RTY0MDY1MDMsCisweEJGMDFFNDAyLCAweEU2NDBFNTAwLCAweEJGMEVFNDAyLCAweEU2NDBFNTAwLAorMHhCRjE2RTQwMiwgMHhFNUZFRTUwMCwgMHg2MDUzNjU1QywgMHhCRUUzRTQwMywKKzB4RTUxMzgwRjgsIDB4RTQwRUJFRTYsIDB4RTQwRTg0RjgsIDB4QkVFNjcwODUsCisweEU1MDA2NTAzLCAweEJFRTdFNjQwLCAweEU1MDBFNDAzLCAweEJFRjRFNjQwLAorMHhFNTAwRTQwMywgMHhCRUZDRTY0MCwgMHhFNUZGRTQwMywgMHg2MDUzNjU1QywKKzB4QkVDOUU0MDQsIDB4RTQwRjgwRkMsIDB4RTUwNEJFQ0MsIDB4RTQwRjg0RkMsCisweEJFQ0M3MDgzLCAweEU1MDE2NTAzLCAweEJFQ0RFNjQwLCAweEU1MDFFNDA0LAorMHhCRURBRTY0MCwgMHhFNTAxRTQwNCwgMHhFNDA0RTY0MCwgMHhBRUUwN0YxMCwKKzB4N0YxMDRGMjYsIDB4MDAwQjRGMjYsIDB4MDAwMDAwMDksIDB4MDAxRTEwMzAsCisweDAwMUUxMDgwLCAweDAwMUUxMDkwLCAweDAwMUUxMDNGLCAweDAwMUUxMDNFLAorMHgwMDIwMjlEQSwgMHgwMDIwMjlEQywgMHgwMDIwMjlERSwgMHhEMjFERDExQywKKzB4NjYyMDYwMTAsIDB4Njc2QzcwMDEsIDB4MzcwMEM5MEYsIDB4RTUwMDhEMTMsCisweDY3MTA2MjEwLCAweDc3MDE2MjJDLCAweDY0MjMyMTcwLCAweEQ2MTY2MDEwLAorMHg0NDA4NDQwOCwgMHgzNDI4QzkwRiwgMHg2MjYwMjEwMCwgMHg3MjAxRDUxMywKKzB4NDQwODI2MjAsIDB4MDAwQjM1NEMsIDB4RDEwRjYwNTMsIDB4MjU1ODY1MTAsCisweEU2MDA4RDEzLCAweEQ2MERENDBCLCAweDY1NUM2NTQwLCAweDQ3MDg2NzUzLAorMHgzNzU4NDcwOCwgMHg0NzA4NjU0MCwgMHgyNDUwNzUwMSwgMHgzNjdDNjA0MCwKKzB4MjQwMEM5MEYsIDB4NzJGRjYyMTAsIDB4MDAwQjIxMjAsIDB4MDAwMDYwNjMsCisweDAwMjAyOUFGLCAweDAwMjAyOUFFLCAweDAwMjAyOUIwLCAweDAwMjAyNUQ0LAorMHg3RkZDNEYyMiwgMHhFNjgwRDE5RCwgMHg2NjZDNjIxMiwgMHhEMjlDMkYyMiwKKzB4NjdGMzY1NjMsIDB4NDIwQjc1NDIsIDB4N0YwNEU0MDQsIDB4MDAwQjRGMjYsCisweEU2ODAwMDA5LCAweEQyOTY2NjZDLCAweEU3MDA2NTYzLCAweDQyMkI3NTQwLAorMHhFNjgwNjQ3MywgMHhEMjkyNjY2QywgMHhFNzAwNjU2MywgMHg0MjJCNzU0MywKKzB4MkZCNjY0NzMsIDB4MkZENjJGQzYsIDB4NEYyMjJGRTYsIDB4NEQxOEVEMDEsCisweERCOEREQzhDLCAweDY1QzI1MkMxLCAweDg5MjAzNTIwLCAweEM5MDM2MDUxLAorMHg4OTFDODgwMSwgMHhEMTg5REU4NywgMHg2NEUzNDEwQiwgMHg4NTAzNjUwMywKKzB4NjcwRDY2QjIsIDB4ODkwNzM3NjIsIDB4RDI4NkQ0ODUsIDB4MDAwOTQyMEIsCisweEU3MDFEMTg1LCAweDIxNzJBRkU2LCAweERFODQ2NEUzLCAweDAwMDk0RTBCLAorMHhENDg0RDY4MywgMHg0MTBCRDE4NCwgMHhBRkRCMjZEMiwgMHg0RjI2MDAwOSwKKzB4NkRGNjZFRjYsIDB4MDAwQjZDRjYsIDB4NEYyMjZCRjYsIDB4ODU0NjdGRjQsCisweDJGMDFFNjgxLCAweDY2NkM4NTQ3LCAweDg1NDg4MUYxLCAweDgxRjJEMjcwLAorMHg2N0YzODU0MiwgMHg4NTQzODFGMywgMHg4MUY0RTQwQywgMHg2NTYzNjA1MywKKzB4NDIwQjgxRjUsIDB4N0YwQzc1NDAsIDB4MDAwQjRGMjYsIDB4MkY4NjAwMDksCisweDJGQTYyRjk2LCAweDJGQzYyRkI2LCAweDJGRTYyRkQ2LCAweDdGRjQ0RjIyLAorMHhEQzZFRTIwMCwgMHgyRjIxQTEzNiwgMHhERDZENkExMywgMHhFMDAxNEEwOCwKKzB4NEQwQkQ5NkMsIDB4M0E5QzRBMDAsIDB4MUY5MTc5MzAsIDB4NjZDMjFGMDIsCisweDM2MjA1MkMxLCAweEExMjE4QjAxLCAweDYwNjEwMDA5LCAweDg4MDFDOTAzLAorMHhBMTFCOEIwMSwgMHg4NTYxMDAwOSwgMHg4OTc3QzgwMSwgMHg4NUQyNUQ2MywKKzB4QzkwMzY2MDMsIDB4ODVEMzY0MDMsIDB4NjA1MzY1MEQsIDB4NDAyMTQwMjEsCisweDQ1MDBDOTNGLCAweDMyMkE2MTAzLCAweDYwNTMyNTJELCAweEM5MDFFMjEwLAorMHhEOTU1MzEyMywgMHg2RTAzOEQyMSwgMHg0NDA4RDc1NywgMHg0NDA4NjU3MCwKKzB4NDQwMDYyMTMsIDB4MjU1ODQyMDAsIDB4MzQyQzhGMEUsIDB4NjA0M0QyNTMsCisweDYwRTMwNzJELCAweDRCMTk2QjdELCAweDY1OEU2OEI5LCAweDI4NUQ4ODAxLAorMHg2QjdDOEYwQiwgMHg2QjEzQTAwOSwgMHg2MDQzRDI0RCwgMHg2MUVEMEUyRCwKKzB4NjgxOTQxMTksIDB4Mjg3RDY3OEUsIDB4RDE0QTZCRUMsIDB4MjIyODYyMTIsCisweEVCRkY4OTAxLCAweEVFRkY2QkJDLCAweDZFRUM2NUJELCAweDhCMEYzNUUwLAorMHg0RDBCREQzNiwgMHg1NDAzNjRDMywgMHhCRjc2RTUwMiwgMHhENDQyNkQwMywKKzB4NDEwQkQxMzYsIDB4RDc0MTY1RDMsIDB4RDQ0MUVFMDEsIDB4MjdFMkEwMUQsCisweDI2RTlFRUZDLCAweDgxRDI2MDYzLCAweDkxNEU4NUQzLCAweDgxRDMyMDE5LAorMHg0NTA4ODVEMiwgMHg4MUQyMjA4QiwgMHhFMjA4ODVEMywgMHg4MUQzMjA1QiwKKzB4NDIxODg1RDQsIDB4ODFENDIwMkIsIDB4ODU0MTY0QzIsIDB4ODE0MTIwRTksCisweEQ0MzQ2NUMyLCAweENCMDE2MDUxLCAweDQ5MEIyNTAxLCAweDYwQzIwMDA5LAorMHg1MkYyNTZGMSwgMHgyQTAyQ0IwMSwgMHgyNjIyQUY3OSwgMHg0MjBCRDIxQiwKKzB4NUUwMzY0QzMsIDB4ODVFMTZEMDMsIDB4NjA1MzY1MEQsIDB4ODk3QkM4MjAsCisweDYyMTBEMTI5LCAweDhCMTEyMjI4LCAweEQ3Mjc4NUVGLCAweDQyMjE2MjBELAorMHg0MjIxNDIyMSwgMHhFNTAxRDYyNSwgMHgyNzUwNDIyMSwgMHhENzI1RDkyNCwKKzB4MjYyMUQ0MjUsIDB4Mjk2MEU2MDAsIDB4MjQ2MTI3NjIsIDB4ODUyMTYyQzIsCisweDhCNDNDODAyLCAweEQ5MTJENzFFLCAweEUwMDE2MjcwLCAweDYxMkM0OTBCLAorMHg2NjkyRDkxQywgMHhBMDNFMjYwQiwgMHg3RTAzMjk2MiwgMHgwMDFDM0Q5QywKKzB4MDAyMDFBM0MsIDB4MDAyMDI1Q0MsIDB4MDAyMDI5OTQsIDB4MDAyMDBENDIsCisweDAwMjAyNTk0LCAweDAwMjAwREM0LCAweDAwMUUyMTMwLCAweDAwMjAwRDYwLAorMHgwMDFDM0QzMCwgMHgwMDIwMkMyOCwgMHgwMDIwMEY3MiwgMHgwMDIwMjVBNCwKKzB4MDAyMDI0OEMsIDB4MDAxQzNEMDAsIDB4MDAyMDJDM0MsIDB4MDAyMDJCMjgsCisweDAwMjAyQkE4LCAweDAwMjAyOUE4LCAweDAwMjAyNTlDLCAweDAwMUUyMTJDLAorMHgwMDIwMkMyQywgMHgwMDIwMkMzMCwgMHgwMDIwMkQxMCwgMHgwMDIwMjlFRSwKKzB4MDAyMDI5RUMsIDB4MDAyMDI5RjAsIDB4MDAyMDI5RjQsIDB4RTA0Q0QxMzksCisweDcyMDEwMjFFLCAweEQ5MzgwMTI2LCAweDYyOTBENDM4LCAweDcyMDE2NTQxLAorMHgyOTIwNzUwMSwgMHg4NUUxMjQ1MSwgMHg0NjE4RTY0MCwgMHg4OTFEMjA2OCwKKzB4RDkzNEQ3MzMsIDB4NjY1RDYxNzEsIDB4NjU5MkQ3MzMsIDB4NjQxRDQ3MEIsCisweEUyMDBERTMyLCAweDJFMjBBMDEyLCAweEU5MDg4NUU0LCAweDQ5MTg2MjAzLAorMHgzMjkwMjI5OSwgMHhFNTAxOEIwNCwgMHg2NEUzQkVCNywgMHgwMDA5QTAwNiwKKzB4MjU5OEQ5MkIsIDB4RTUwMDg5MDIsIDB4NjRFM0JFQUYsIDB4RDIyQUQ0MjksCisweDY1RDM0MjBCLCAweEVFMDFENzI5LCAweDI3RTJBRUQ5LCAweDdDMDg2MkYxLAorMHgyRjIxNzIwMSwgMHhFRTA0NjJGMSwgMHgzMUU3NjEyRCwgMHhBRUMzODkwMSwKKzB4N0YwQzAwMDksIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkFGNjZCRjYsCisweDAwMEI2OUY2LCAweDJGRTY2OEY2LCAweEQyMUQ0RjIyLCAweDYwRTM2RTIyLAorMHg4RDAyQzg0MCwgMHhCRTMzMjJFMiwgMHhFMjQwMDAwOSwgMHgyRTI4NDIxOCwKKzB4QkUzRTg5MDEsIDB4NjBFMzAwMDksIDB4ODkwNUM4MTAsIDB4RDIxNkQ0MTUsCisweDAwMDk0MjBCLCAweDAwMDlCRTNELCAweEM4MDU2MEUzLCAweEJFOEU4OTAxLAorMHg2MEUzMDAwOSwgMHg4OTAyQzgwMiwgMHhBRTNBNEYyNiwgMHg0RjI2NkVGNiwKKzB4NkVGNjAwMEIsIDB4MDAyMDI1MzgsIDB4MDAyMDI5RUMsIDB4MDAyMDI5RjQsCisweDAwMjAyOUVFLCAweDAwMjAyOUYwLCAweDAwMjAxQUEwLCAweDAwMjAyRDEwLAorMHgwMDAwODAwMCwgMHgwMDIwMjU5QywgMHgwMDIwMEQ2MCwgMHgwMDFFMjEyQywKKzB4MDAxQzM1MTAsIDB4MDAyMDJDMzQsIDB4MDAyMDBGNzIsIDB4MDgwQTBDMEUsCisweDAwMDIwNDA2LCAweDFBMUMxRTIwLCAweDEyMTQxNjE4LCAweDJFMzAzMjM0LAorMHgyNjI4MkEyQywgMHgzQTNDM0U0MCwgMHg2QzYyNTY0OCwgMHg0MTExMkYyNiwKKzB4RTIyMDhGMTgsIDB4ODkwQjMxMjMsIDB4MzIxQ0QyMDQsIDB4RDEwMjYyMjAsCisweDQxMkIzMTJDLCAweDAwMDkwMDA5LCAweDAwMjAyNEI2LCAweDAwMjAyNDZDLAorMHgwMDBCRTAwMCwgMHg0MDAwNjJGNiwgMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwKKzB4NDAwMDQwMDAsIDB4NjJGNjAwMEIsIDB4NDAwMDQwMDAsIDB4NDAwMDQwMDAsCisweDQwMDA0MDAwLCAweDQwMTg0MDAwLCAweDYyRjYwMDBCLCAweDQwMDA0MDAwLAorMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwgMHg0MDI4NDAwMCwgMHg2MkY2MDAwQiwKKzB4NDAwMDQwMDAsIDB4NDAxODQwMDAsIDB4MDAwQjQwMjgsIDB4QzkwRjYyRjYsCisweDQwMDU0MDA1LCAweDQwMDU0MDA1LCAweDYyRjYwMDBCLCAweDQwMDVDOTA3LAorMHg0MDA1NDAwNSwgMHg2MkY2MDAwQiwgMHg0MDA1QzkwMywgMHgwMDBCNDAwNSwKKzB4QzkwMTYyRjYsIDB4MDAwQjQwMDUsIDB4MDAwMDYyRjYsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHg1NDRGMEQwQSwgMHg0NjIwNTM1NSwKKzB4MDAwMDNBNTcsIDB4MjA3OTYxNEQsIDB4MzIyMDMwMzMsIDB4MjAzNzMwMzAsCisweDMzM0EzMjMxLCAweDM4MzEzQTM3LCAweDAwMDAwMDAwLCAweDAwMDAwRDBBLAorMHgwMDAwMDA0MywgMHg0MjcwNzM3MiwgMHgzRDIwNjY3NSwgMHg1NTRFMjAzRCwKKzB4MjAyQzRDNEMsIDB4NkU0OTY3N0EsIDB4NEU0OTcyNzQsIDB4NkQ3NTRFNTEsCisweDAwMDAwMDNELCAweDYxNzY2RTQ5LCAweDIwNjQ2OTZDLCAweDcyNjU3Mzc1LAorMHgyMDcyNkYyMCwgMHgyMDc5NjU2QiwgMHgwMDIxNDQ0OSwgMHg1MjUwNDU0NSwKKzB4NTcyMDRENEYsIDB4NjU3NDY5NzIsIDB4NjQ2MTIwMkMsIDB4MDAzRDcyNjQsCisweDZDNjE3NjIwLCAweDAwMDAwMDNELCAweDAwMDAwQTBELCAweDZFNkI2RTU1LAorMHgyMDZFNzc2RiwgMHg2RDZENkY2MywgMHgzRDY0NkU2MSwgMHgwMDAwMDAwMCwKKzB4NjE0Mzc3NDgsIDB4NzI2MjY5NkMsIDB4NkY2OTc0NjEsIDB4NjYyMDIwNkUsCisweDBBNkM2OTYxLCAweDAwMDAwMDBELCAweDczNjk2RjRFLCAweDYxNDMyMDY1LAorMHg3MjYyNjk2QywgMHg2RjY5NzQ2MSwgMHg2MTY2MjA2RSwgMHgyMTIxNkM2OSwKKzB4MDAwMDBEMEEsIDB4MDAwMDBEMEEsIDB4NjI3MzU1NzYsIDB4NzQ3MzcyNUYsCisweDAwMDAwQTBELCAweDYyNzM1NTc2LCAweDczNzU3MzVGLCAweDY0NkU2NTcwLAorMHgwMDAwMEEwRCwgMHg2MjczNTU3NiwgMHg3MzY1NzI1RiwgMHgwMDBBMEQ2RCwKKzB4MDAwMDAwNDIsIDB4NzI3NDZFNDksIDB4NkQ2NTIwNTEsIDB4MkM3OTc0NzAsCisweDQ5Njc3QTIwLCAweDQ5NzI3NDZFLCAweDc1NEU1MTRFLCAweDAwMDAzRDZELAorMHgyMDc0NkY0RSwgMHg3NTZGNkU2NSwgMHg0OTIwNjg2NywgMHg0MjIwNTE0RSwKKzB4MEEwRDY2NzUsIDB4MDAwMDAwMDAsIDB4MDAwMDAwRkYsIDB4MDAwMjAwMDEsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDEwRTAxMEQsIDB4MDAwMjAwMDMsCisweDAxMDkwMTA4LCAweDAwMDIwMTBBLCAweDAwMDMwMDAyLCAweDAyMDIwMjAxLAorMHgwMjA0MDIwMywgMHgwMjA2MDIwNSwgMHgwMjA4MDIwNywgMHgwMjBBMDIwOSwKKzB4MDIwQzAyMEIsIDB4MDIwRTAyMEQsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMTBFMDEwRCwgMHgwMEZGMDEwRiwKKzB4MDEwOTAxMDgsIDB4MDEwQjAxMEEsIDB4MDAwMzAwMDIsIDB4MDIwMjAyMDEsCisweDAyMDQwMjAzLCAweDAyMDYwMjA1LCAweDAyMDgwMjA3LCAweDAyMEEwMjA5LAorMHgwMjBDMDIwQiwgMHgwMjBFMDIwRCwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwMjA1MjIwLCAweDAwMDAwMDQ2LAorMHgwMDAwMDA1OSwgMHg0OTU0NDEyMCwgMHgwMDAwMjA0RCwgMHgwMDAwMDAwMCwKKzB4MDIwMDAxMTIsIDB4NDBGRkZGRkYsIDB4OTE3MDBDRjMsIDB4MjAxMDQ4OTAsCisweDAyMDkwMTAwLCAweDAxMDEwMDJFLCAweDA5RkE4MDAwLCAweDA0MDAwMDA0LAorMHgwMDAwMDBGRiwgMHgwMjAxMDUwNywgMHgwNzAwMDIwMCwgMHgwMDAyODIwNSwKKzB4MDUwNzAwMDIsIDB4MDA0MDAzODMsIDB4MDQwNTA3MDEsIDB4MDEwMDQwMDMsCisweDAwMkUwMjA5LCAweDgwMDAwMTAxLCAweDAwMDQwOUZBLCAweDAwRkYwNDAwLAorMHgwNTA3MDAwMCwgMHgwMDQwMDIwMSwgMHg4MjA1MDcwMCwgMHgwMDAwNDAwMiwKKzB4MDM4MzA1MDcsIDB4MDcwMTAwNDAsIDB4NDAwMzA0MDUsIDB4MDMwNDAxMDAsCisweDAzMEMwNDA5LCAweDAwNzkwMDVBLCAweDAwNDEwMDQ0LCAweDAzMTgwMDUzLAorMHgwMDUzMDA1NSwgMHgwMDMyMDA0MiwgMHgwMDMwMDAyRSwgMHgwMDU3MDAyMCwKKzB4MDA0MTAwNEMsIDB4MDAwMDAwNEUsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwNzA5LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCB9OworCitjb25zdCB1MzJfdCB6Y0Z3SW1hZ2VTaXplPTExNTQwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwZnd1XzJrLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBmd3VfMmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGUyY2FjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwZnd1XzJrLmMKQEAgLTAsMCArMSwxMDE2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJjcHJlY29tcC5oIgorCitjb25zdCB1MzJfdCB6Y0Z3SW1hZ2VbXSA9IHsKKzB4MDAwOTAwMEIsIDB4NEYyMjJGRTYsIDB4REU5NDdGRkMsIDB4RTExNEQ1OTQsCisweDFFMTNENDk0LCAweDY3NTIxRTRDLCAweEQ0OTRENjkzLCAweDM3NDAyNzY5LAorMHg2MjUyOEYwNiwgMHg3MjAxRDY5MiwgMHg2MDYwMjUyMiwgMHgyNjAwQzkzRiwKKzB4RDc5MDYxNTIsIDB4MjUxMjYxMUQsIDB4MjY0QjY2NTIsIDB4MjU2MjQ3MEIsCisweDAwMDlCMDE3LCAweEU2MDA5NUFDLCAweEM4NDA2MEUyLCAweDJGMDI4RjAzLAorMHg4RkY5MzY1MiwgMHhENDg4NzYwMSwgMHg0RTBCREU4OCwgMHhENDg4MDAwOSwKKzB4MDAwOTRFMEIsIDB4NEUwQkQ0ODcsIDB4N0YwNDAwMDksIDB4QTA1MjRGMjYsCisweDRGMjI2RUY2LCAweDQxMEJEMTg0LCAweEQ0ODQwMDA5LCAweDAwMDk0NDBCLAorMHg0NTBCRDU4MywgMHhENzgzMDAwOSwgMHhEMjgzRTFGRiwgMHgyNzEyNjExRCwKKzB4RDQ4MjUwMjksIDB4RTFGRkNCMDEsIDB4MTIwOUU1MDEsIDB4MTIxMTIyMTIsCisweEU3MjAyNDUyLCAweDQ3MThENTdFLCAweDI1NzJEMjdFLCAweEQxN0VFNzAwLAorMHhENjdGRDQ3RSwgMHhFMjAxMjI3MCwgMHgyNDcwMjE3MiwgMHhENjdEMjYyMCwKKzB4MjY0MUU0RkYsIDB4RDU3Q0U2MDAsIDB4NjY2REUxMDQsIDB4NzYwMTYwNjMsCisweDQwMDA2MjZELCAweDhGRjgzMjEyLCAweEQ1NzgwNTQ1LCAweDI1MjBFMjAxLAorMHhEMjc4RDc3NywgMHhFNDgwRTEwMCwgMHgyMjEyMjcxMCwgMHg2NjEzRDU3NiwKKzB4NjY2RDY0NEMsIDB4NzYwNDY3NjMsIDB4Mzc1QzYyNkQsIDB4OEZGODMyNDMsCisweEQ1NzIyNzEyLCAweEQyNzNENzcyLCAweEU0MDBFMTAxLCAweDI3MTAyNTExLAorMHgwMDBCNEYyNiwgMHg3RkNDMjI0MiwgMHhEMTcwRDU2RiwgMHhEMjcxREI3MCwKKzB4MUY1MUQ0NzEsIDB4RDY3MTc1MDgsIDB4MUYxMkQ3NzEsIDB4MUY1NTcxMEMsCisweDFGQjk3NUZDLCAweDcyMDQxRjJBLCAweDFGMTNFQjEwLCAweDFGNTYxRjQ0LAorMHgxRjc4MUY2NywgMHhEODZCMUYyQiwgMHhERDZDRDk2QiwgMHhEQzZDRUEwMCwKKzB4RDI2RERFNkMsIDB4ODkwMDNBMjIsIDB4RDE1RDdBMDEsIDB4ODgwMTYwMTAsCisweDU2Rjg4QjAzLCAweDQyMThFMjAxLCAweEQxNjgyNjIyLCAweDAwMDk0MTBCLAorMHg0NDBCRDQ2NywgMHhENTY3MDAwOSwgMHgwMDA5NDUwQiwgMHg2MDEwRDE1MCwKKzB4OEIxMDg4MDEsIDB4RTY1MEQxNEYsIDB4NDYxODYyMTIsIDB4OEIwODMyNjYsCisweDU2RjlEMTRCLCAweDIxMjBFMjAwLCAweENCMDE2MDYyLCAweDI2MDJBMDAzLAorMHg3MjAxMjcxMCwgMHg2MDgyMjEyMiwgMHg4OTA5ODgwMSwgMHhFMkM4RDE1QSwKKzB4NjIyQzY2MTIsIDB4ODkwMzM2MjYsIDB4NjAxMEQxNTgsIDB4OEJDODg4MDEsCisweDUxRjY2NzkyLCAweDIxNzI1MkY1LCAweEQ2NTU1MTkxLCAweDU1RkEyMjEyLAorMHg1MkZCNjQ2MiwgMHg1NTYxMjU0MiwgMHgyMjUyRTQwMCwgMHg2MTQzNjY0MywKKzB4MDVERTYwMTMsIDB4MzZDQzQ2MDgsIDB4MDdERTI2NTIsIDB4QzkwMzYwNzEsCisweDhCMDI4ODAxLCAweDcyMDE2MkUyLCAweDc0MDEyRTIyLCAweDM2QjM2NjRDLAorMHg3MTA0OEZFRSwgMHg2NkMyRDE0NywgMHg0NTI4NjUxMiwgMHgyNjVCNDUxOCwKKzB4NjA4MjJDNjIsIDB4ODkwMTg4MDEsIDB4MDAwOUExNjgsIDB4NjI3MkQ3NDIsCisweDhCMTMyMjI4LCAweEQ0MkJENzQxLCAweDY3NzJENTQxLCAweDUxNTM2MjQyLAorMHgzMTJDMzI3QywgMHgyNDIyMjIyOCwgMHgxNTEzOEQwNSwgMHg2MjYyRDYzRCwKKzB4QjE2MjcyMDEsIDB4RDYyMzI2MjIsIDB4MjYyMkUyMDAsIDB4NTI5MTY2OTIsCisweDhCMDEzNjIwLCAweDAwMDlBMTQ0LCAweDYwNjFBMDZFLCAweDAwMUMwMDFDLAorMHgwMDFENDAyMCwgMHgwMDAwQjM4RSwgMHhGRkZGMDAwMCwgMHgxMjM0MDAwMCwKKzB4MDAxRTEwMTUsIDB4MDAyMDEyNzQsIDB4MDAyMDM5RUMsIDB4MDAyMDE4QTIsCisweDAwMjAzOUY4LCAweDAwMjAzQTEwLCAweDAwMjAxODYwLCAweDAwMjAxOTY0LAorMHgwMDIwMTI4OCwgMHgwMDFDMzUxMCwgMHgwMDFDMzYyNCwgMHgwMDFFMjEyQywKKzB4MDAyMDM4RUMsIDB4MDAyMDM0ODQsIDB4MDAyMDM4RjQsIDB4MDAyMDM5MDAsCisweDAwMjAzOTBDLCAweDAwMjAzOTY4LCAweDAwMjAzOTZDLCAweDAwMjAzOTE0LAorMHgwMDIwMzkxNSwgMHgwMDIwMzkxOCwgMHgwMDExNzcwMCwgMHgwMDIwMzk4NCwKKzB4MDAyMDM5ODIsIDB4MDAyMDM0RTgsIDB4MDAxMTc3MTAsIDB4MDAxQzNEMzAsCisweDAwMUMzNkY4LCAweDAwMTE3NzM0LCAweDAwMUMzNjg0LCAweDAwMUMzRDAwLAorMHgwMDFDMTAwMCwgMHgwMDFDMTAyOCwgMHgwMDIwMzRGQywgMHgwMDIwMzkxQywKKzB4MDAxMTc2MDAsIDB4MDAxMTc3NDAsIDB4N0ZGRkZGRkYsIDB4MDAyMDE3MzAsCisweDAwMjAzMzIyLCAweDAwMjAyMzJDLCAweDAwMjAzRDlDLCAweDAwMjAzOTZBLAorMHgwMDIwMzRGNCwgMHgwMDIwMzk1QywgMHgwMDFDM0QyQywgMHgwMDFDMzZCMCwKKzB4MDAyMDM0OEMsIDB4MDAxMTc3NUMsIDB4ODgwMUM5MEYsIDB4QTBDRjg5MDEsCisweEQxOTYwMDA5LCAweDM2MjA2MjEyLCAweEQ0OTU4OTA0LCAweDI0MjFFMjAwLAorMHgyMTYyQTBDQywgMHg2MjExRDE5MywgMHg4OTAxMjIyOCwgMHgwMDA5QTBDMywKKzB4RTIwMkQ3OEYsIDB4NzUwMTY1NzEsIDB4MzEyMzYxNUQsIDB4Mjc1MThEMDIsCisweDAwMDlBMEJDLCAweEQyOEM1N0YyLCAweDYyMjI2MDcyLCAweDQwMDk0MDE5LAorMHhDOTBGNDAwOSwgMHg4RjE5ODgwQSwgMHg1MkYzMUYyQywgMHg0MDE5NjAyMiwKKzB4NDAwOTQwMDksIDB4ODgwOEM5MEYsIDB4QTBBNzg5MDEsIDB4NjA2MzAwMDksCisweENCMDE1NEY3LCAweEQyN0U1NUYyLCAweEU3MDEyNDAyLCAweEQ0N0ZFMTAwLAorMHgyMjExMjU3MiwgMHg3MjAxNjI0MiwgMHgyNDIyQTA5OCwgMHg4QjNGODgwNSwKKzB4NjAyMjUyRjMsIDB4NDAwOTQwMTksIDB4QzkwRjQwMDksIDB4OEIxNjg4MDIsCisweEU0RkZENTc3LCAweDY0NEQ2NzUyLCAweDhCMTAyNzQ4LCAweDYyNzJENzc1LAorMHg4QjBDMzI2MCwgMHg1MUYyNTVGNywgMHhEMjZERTcwMSwgMHgyMTcyMjU2MiwKKzB4RDU3MUUxMDAsIDB4NjQ1MjIyMTEsIDB4QTA3Nzc0MDEsIDB4NTJGMzI1NDIsCisweDQwMTk2MDIyLCAweDQwMDk0MDA5LCAweDg4MDVDOTBGLCAweDMxQjM4QjZFLAorMHhEMjZBOEI2QywgMHg2NzIyNTRGNCwgMHg3NzAxRDU2OSwgMHg2MTQyMjI3MiwKKzB4MUYxQ0U2NDAsIDB4NDYxODIxNTksIDB4OEIwMzMxNjAsIDB4NjI2MkQ2NjUsCisweDI2MjI3MjAxLCAweEUyMDBENjVBLCAweDI2MjFCMDY3LCAweDAwMDlBMDU2LAorMHgzMTIzRTIyMCwgMHg4ODAzOEI1MiwgMHg1MkYzOEIxRSwgMHg0MDE5NjAyMiwKKzB4NDAwOTQwMDksIDB4ODgwM0M5MEYsIDB4RDI1QjhCMTYsIDB4NjcyMjU0RjQsCisweDc3MDFENTU3LCAweDYxNDIyMjcyLCAweDFGMUNFNjQwLCAweDQ2MTgyMTU5LAorMHg4QjAzMzE2MCwgMHg2MjYyRDY1NSwgMHgyNjIyNzIwMSwgMHhFMjAwRDY0OCwKKzB4MjYyMUIwNDMsIDB4MDAwOUEwMTAsIDB4RDQ1MkQ1NTEsIDB4RDI0NDY3NTIsCisweEUxMDA3NzAxLCAweDI1NzIzQTQ2LCAweDIyMTE4RjA2LCAweEVBMDBENjRFLAorMHg3MjAxNjI2MiwgMHgyNjIyQjAzMSwgMHgyRkIyRDU0QywgMHg5NTczNjY1MiwKKzB4RDQ0QTVCRjEsIDB4MzYyMDUyNDEsIDB4NjA2MTg5MTAsIDB4OEIwMUM4MDMsCisweDJCMjJFMjAxLCAweDhGRjU0NTEwLCAweDU3RjE1NjY0LCAweDYyNzJFMUYwLAorMHg0MTI4NDExOCwgMHgyNzIyMjIxQiwgMHg2QkYyQTAwOCwgMHg2QkYyQTAwNiwKKzB4RTIwMEQ2MkYsIDB4RDEyRjI2MjEsIDB4MjEyMUUyMDAsIDB4RDEzQ0UyMDEsCisweDY2MTIyODIyLCAweDhCMDEyNjY4LCAweDAwMDlBRTJCLCAweDQ1MEJENTM5LAorMHhEMTM5MDAwOSwgMHhBRTI0RTYwMCwgMHgyRjg2MjE2MCwgMHgyRkE2MkY5NiwKKzB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsIDB4N0ZGNDRGMjIsIDB4REUzNEQxMzMsCisweDU0MTE2MjEyLCAweDFGNDE2N0UyLCAweDJGMjJENDMyLCAweEQ1MzIxRjcyLAorMHhEMjMyNjc0MywgMHg1ODQxNzc5NCwgMHg2OTQyNUE0MiwgMHg1QjE2NkM3MiwKKzB4NjA1MjZEMjIsIDB4Q0IyMEU2MDAsIDB4RTU0MDI1MDIsIDB4NjI2RDc2MDEsCisweDhCRkIzMjUzLCAweDU1RjE2MkYyLCAweDExNTEyMTIyLCAweEQ2Mjg1NUYyLAorMHgxNDgxMkU1MiwgMHgyNDkyMTRBMiwgMHgyN0MyRDQyNiwgMHgyNkQyMTFCNiwKKzB4REEyNTY3NDIsIDB4RTgwMUQ5MjUsIDB4NDkwQjJBNzIsIDB4RTIwMTFBOEMsCisweDFBMkM0MjE4LCAweDRGMjY3RjBDLCAweDZERjY2RUY2LCAweDZCRjY2Q0Y2LAorMHg2OUY2NkFGNiwgMHg2OEY2MDAwQiwgMHgwMDAwMDdEMSwgMHgwMDIwMzk3QywKKzB4MDAyMDM5ODAsIDB4MDAyMDM5ODYsIDB4MDAxQzNEQzAsIDB4MDAxMTc3MkMsCisweDAwMUMzQjg4LCAweDAwMjAzOTY0LCAweDAwMTE3NzNDLCAweDAwMTE3NzQ0LAorMHgwMDAwRjAwMCwgMHgwMDExNzc2NCwgMHgwMDExNzc0OCwgMHgwMDExNzc2OCwKKzB4MDAxMTc3NkMsIDB4MDFGRkZGRkYsIDB4MDAxMTc3NEMsIDB4MDAyMDM0RjQsCisweDAwMjAzRDlDLCAweDAwMjAyNEYwLCAweDAwMjAzOTZBLCAweDAwMUMzQjlDLAorMHgwMDFDM0Q5OCwgMHgwMDFDMzcwMCwgMHgwMDFDMzUwMCwgMHgwMDFDNTk2MCwKKzB4MDAxQzg5NjAsIDB4MDAyMDM0RkMsIDB4MDAxQzNEMDAsIDB4MDAyMDE2MEMsCisweDJGOTYyRjg2LCAweDJGQjYyRkE2LCAweDJGRDYyRkM2LCAweDRGMjIyRkU2LAorMHhERTk1N0ZBQywgMHg2MUUwRTAxNCwgMHgwRjE0RDQ5NCwgMHg3MTAxNjFFMywKKzB4RTAxODYyMTAsIDB4RDI5MjBGMjQsIDB4MDAwOTQyMEIsIDB4NDUwQkQ1OTEsCisweDIwMDgwMDA5LCAweDhGMTI2RDAzLCAweEQyOEYxRjA3LCAweDY3MjBENDhGLAorMHg2NTdDREQ4RiwgMHg0NzBCRDc4RiwgMHhEMThGMDAwOSwgMHg2MTlDNjkxMCwKKzB4NDYwODY2MTMsIDB4MzYxODQ2MDgsIDB4M0Q2QzQ2MDgsIDB4RTAxODFGRDcsCisweEU1ODAwNEZDLCAweDYwNEM2NkUyLCAweDMwNTA2NTVDLCAweDJENjI4RjE1LAorMHgwMUZDRTAxNCwgMHhERTg1RTUwMCwgMHg2NDFDQTAwOCwgMHg2NzUzNjU1RCwKKzB4NjA3MDM3RUMsIDB4MzlEQzY5NTMsIDB4ODA5NDc1MDEsIDB4MzI0MzYyNUQsCisweEQ2N0Y4QkY0LCAweEEzNEVFMjAwLCAweDIwMDgyNjIxLCAweEUwMTQ4QjEzLAorMHhFNDAwMDFGQywgMHhBMDA5REU3OSwgMHg2NDRENjcxQywgMHgzNUVDNjU0MywKKzB4Njk0MzY2NTIsIDB4MzlEQzYyNjIsIDB4NzQwNDE5MjEsIDB4MzI3MzYyNEQsCisweEEzMzg4QkYzLCAweDg4MDEyRDEwLCAweEUwMTQ4QjE3LCAweEU3MDAwMUZDLAorMHg2RDFDMkQ3MCwgMHhERTZEMUZENCwgMHgzMkQzNjI3RCwgMHhBMzJBOEIwMSwKKzB4Njc3RDAwMDksIDB4NjY3MzY1RTMsIDB4NjE3Mzc1MDQsIDB4MzE1QzM2RUMsCisweDY5MTI2NDYyLCAweEFGRUY3NzA4LCAweDg4MDQyNDkyLCAweEUwMTQ4QjE4LAorMHhFNDAwMDFGQywgMHg2NzFDMkQ0MCwgMHg2MjREREU2MCwgMHg4QjAxMzI3MywKKzB4MDAwOUEzMTEsIDB4Njk0MzY0NEQsIDB4MzlFQzYyRTMsIDB4NzIwNDY1OTIsCisweDNEMkM2RDQzLCAweDYxNTI2NkQyLCAweDIxNjk3NDA4LCAweDI1MTJBRkVELAorMHg4QjE4ODgwNSwgMHgwMUZDRTAxNCwgMHgyRDQwRTQwMCwgMHhERTUzNjcxQywKKzB4MzI3MzYyNEQsIDB4QTJGNjhCMDEsIDB4NjQ0RDAwMDksIDB4NjJFMzY5NDMsCisweDY1OTIzOUVDLCAweDZENDM3MjA0LCAweDY2RDIzRDJDLCAweDc0MDg2MTUyLAorMHhBRkVEMjE2QiwgMHg4ODMxMjUxMiwgMHhENDRBOEIzQSwgMHg2MTQ2RDk0QSwKKzB4NzUwNDY1NDMsIDB4Njc1NjY0NDIsIDB4NkU1MzFGNDgsIDB4NjU1MjdFMDQsCisweDdFRTQ2MkUyLCAweDdFMDQ2NEUyLCAweDZFRTIxRkU5LCAweDVFRjkyOUUwLAorMHg3RTA0RDk0MiwgMHgxRkVBNjBFMiwgMHgyOTAwQzkwMSwgMHhEOTQwNkVFMiwKKzB4MjlFMDRFMDksIDB4MkY1NjJGMjYsIDB4NTZGQUQ5M0UsIDB4NjUxMzQ5MEIsCisweEQxM0Q3RjA4LCAweEU3MUM2RTBELCAweDFERTEyRDcwLCAweERFM0I2OTEyLAorMHg2NEUyMUQ5MiwgMHgxRDQzRDEzQSwgMHhEMjNBNjUxMiwgMHg2NzIyMUQ1NCwKKzB4MUQ3NUQyMzksIDB4MUQ2NjY2MjIsIDB4NjI2MkQ2MzgsIDB4MUQyN0EyQUIsCisweDhCMzk4ODMwLCAweDY1OTZEOTJCLCAweDY3OTI2Njk2LCAweDYxOTY3OTA0LAorMHg3NEU0NjQ5MywgMHg2RTQzNjk5MiwgMHgxRjlCN0UwNCwgMHgxRkVDNjQ0MiwKKzB4RDkyNTZFRTIsIDB4NUVGQzI5RTAsIDB4N0UwNEQ5MjQsIDB4MUZFRDYwRTIsCisweDI5MDBDOTAxLCAweEQ5MjI2RUUyLCAweDI5RTA0RTA5LCAweDU5RkM3RkZDLAorMHhERTI3MkY5MiwgMHgyRjE2NEUwQiwgMHhENDFGN0YwOCwgMHhFMjFDNjEwRCwKKzB4MUQxMTJEMjAsIDB4RDIyMDY0NDIsIDB4RDQxQzFENDIsIDB4MUQ1MzY1NDIsCisweDY3NTJENTFCLCAweEQ3MUIxRDc0LCAweDFEMTU2MTcyLCAweDFENjY2NjIyLAorMHg2MjYyRDYxQSwgMHgxRDI3QTI2RiwgMHg4QjM1ODgzMywgMHg0OTBCRDkxOSwKKzB4QTI2OEVFMDAsIDB4MDAwMDJERTAsIDB4MDAxMTc4MDAsIDB4MDAyMDNBMTQsCisweDAwMjAxOEEyLCAweDAwMjAyQUE0LCAweDAwMjAzOTA2LCAweDAwMjAzQTE4LAorMHgwMDIwMzUyQywgMHgwMDIwMThFRSwgMHgwMDIwMzkwNSwgMHgwMDExNzgwNCwKKzB4MDAyMDM5ODQsIDB4MDAxMTc4MTAsIDB4MDAyMDM5MDEsIDB4MDAyMDM5MDIsCisweDAwMjAzOTAzLCAweDAwMjAwRjY0LCAweDAwMUM1ODY0LCAweDAwMUM2ODY0LAorMHgwMDFDNzg2NCwgMHgwMDFDNTlCQywgMHgwMDFDNjlCQywgMHgwMDFDNzlCQywKKzB4MDAyMDBGQkMsIDB4MDAyMDBGQjgsIDB4ODkwMTg4MjgsIDB4MDAwOUEwQzAsCisweEU2NDNERUI1LCAweDMyNjY2MkUxLCAweDFGRUU4RjAyLCAweDJFMjFFMjQwLAorMHg2MjJENjJFMSwgMHg4QjAxMzI2NywgMHgwMDA5QTBBQSwgMHhFNTAxODVFMSwKKzB4OEIwMTMwNTYsIDB4MDAwOUEwQTQsIDB4MkQxMEUxMDEsIDB4NjRFMUIyMjUsCisweEU2NDM1N0ZFLCAweDY1MkQ2MjcxLCAweDg5NDQzNTY3LCAweDM1NjNFNjQwLAorMHhFNjAwOEIwNSwgMHgwRjY1RTA0MCwgMHhBMDBGRTExQSwgMHg2MTUzNzJDMCwKKzB4NDEyMTQxMjEsIDB4NDEyMTQxMjEsIDB4NDUyMTQxMjEsIDB4NDUyMTQ1MjEsCisweEM5MDM2MDUzLCAweEUwNDA2NjAzLCAweDcxMTgwRjY1LCAweDIyMDlFMDA3LAorMHgwRjI1RTAzQywgMHhFMDQ0NjQxRCwgMHhCMkEzNjVGMywgMHhFMzNDMEY0NiwKKzB4ODUzMjMzRkMsIDB4NjIwRERFOTUsIDB4NDIwODYwMzEsIDB4NjAyMzYxMEQsCisweDEzMjNFOTQ0LCAweDA2RkU0MTA4LCAweEUwMEYzOUZDLCAweDEzMTQ0RTBCLAorMHg2NzA3NUQ5MSwgMHg2MEQzMjY3OSwgMHgwRjY2NTRGRSwgMHg1MTkyODU0MiwKKzB4NjAwRDRFMEIsIDB4NjBEMzI2MEIsIDB4MEY2NjY0OTIsIDB4NjVGM0IyMzcsCisweDY5NjE1NkZFLCAweEU2NDA2NTlELCAweDg5MzgzNTYzLCAweEQ3ODM1OUZFLAorMHg3OTA2NjU5MSwgMHhDOTAzNjA1MywgMHg0MDAwNDAwOCwgMHg2MTAzNjIwMywKKzB4MEYyNkUwNTAsIDB4NDcwQkUwRkYsIDB4NkMwNzYwMEMsIDB4NjYwMzYwNUQsCisweDQ2MjE0NjIxLCAweDQ2MjE0NjIxLCAweDQyMDA2MjYzLCAweDQyMDAzMjZDLAorMHg0MDIxNDAyMSwgMHg0MDA4QzkwMywgMHg2RDJEMzBGQywgMHhFODAwNkEwMywKKzB4QjI1NzY1RjMsIDB4NkVBMjY0RDMsIDB4MkVDOUUwNTAsIDB4NjY5NDJBRTIsCisweEQ3NkUwMUZFLCAweDYwNkM0NzBCLCAweDJBRTIyRTBCLCAweDY0RDM2NUYzLAorMHg3ODAxQjFGRCwgMHhFRTA2NjI4RCwgMHg4RkU5MzJFMywgMHg1RUZFN0QwMSwKKzB4NjFFMUU0MDAsIDB4NDEwMDg1RTEsIDB4NjZFMzMxMEMsIDB4NzYwQzcxMUIsCisweEU3MDQ2NUYzLCAweDY4NjY3NDAxLCAweDNBNzM2QTRELCAweDhGRjkyNTgyLAorMHg2NUYzNzUwNCwgMHg2NDFEQjFFMywgMHg2NEUxQjFBNCwgMHgwMDA5QTE3QiwKKzB4RDQ1QjU2RjcsIDB4RUMwMUQyNUIsIDB4MjZDMDQyMEIsIDB4MDAwOUExNzMsCisweDA2RkNFMDE4LCAweDg4Mjk2MDZDLCAweDU4Rjc4QjA4LCAweEU0MDBEMjUyLAorMHg2NjIyMjg0MCwgMHg2NDZEQjE3MSwgMHgwMDA5QTE2NSwgMHg2NjZDRTY4MSwKKzB4ODkwMTMwNjAsIDB4MDAwOUEwQUMsIDB4RDU1MEQxNEYsIDB4NjIxMjZBNTYsCisweDIxMjIzMkFDLCAweDU0MTE2QzU2LCAweDM0Q0M2MjUzLCAweDY0NTIxMTQxLAorMHg3MjA4NTgxMiwgMHhENDRBMzg0QywgMHg2ODIyMTE4MiwgMHg1QTEzNkM0MiwKKzB4M0FDQzNDOEMsIDB4MTFBMzI0QzIsIDB4NkMyMjcyRUMsIDB4NzIxMDU4MTQsCisweDExODQzOENDLCAweDVBMTU2ODIyLCAweDExQTUzQThDLCAweDZBMjI3MjEwLAorMHhENjQwNTgxNiwgMHgxMTg2MzhBQywgMHg1MjE3NkM2MiwgMHgxMTI3MzJDQywKKzB4NUExODU4NjEsIDB4MTFBODNBOEMsIDB4NUMxOTVBNjIsIDB4MTFDOTNDQUMsCisweDUyMUE1QzYzLCAweDExMkEzMkNDLCAweDVBMUI1ODY0LCAweDExQUIzQThDLAorMHg1QzFDNUE2NSwgMHgxMUNDM0NBQywgMHg1MjFENUM2NiwgMHgxMTJEMzJDQywKKzB4NUExRTU4NjcsIDB4MTFBRTNBOEMsIDB4NTYxRjVBNjgsIDB4MzZBQ0U4NDAsCisweDExNkZEQTJELCAweDZDQTIzODFDLCAweDdBOTQ2NjgyLCAweDI4NjIzNkNDLAorMHg1QzgxNjJBMiwgMHgxOEMxM0MyQywgMHg2MkEyN0E0NCwgMHgzNjJDNTY4MiwKKzB4RDYyNjE4NjIsIDB4NUE4NTYyNjIsIDB4M0EyQzQyMjksIDB4NzYwNDE4QTUsCisweDU2ODY2MjYyLCAweDM2MkM0MjI5LCAweDU2RjcxODY2LCAweDI2MjBFMjM4LAorMHgxNkMxNUM4MSwgMHgxNjIyNjIxMiwgMHhFMjAwNUMxMSwgMHg1NTEyMTZDMywKKzB4NTUxNTE2NTQsIDB4NTUxMzE2NTUsIDB4NTUxNjE2NTYsIDB4NTU4MjE2NTcsCisweDY1ODIxNjU4LCAweDU1MTQxNjU5LCAweDU1ODQxNjVBLCAweDU1ODMxNjVCLAorMHg1NTg1MTY1QywgMHg1NTg2MTY1RCwgMHgxODIxMTY1RSwgMHgxMTIxMjEyMiwKKzB4MTEyNTExMjIsIDB4MTEyNjExMjMsIDB4MjgyMjE4MjIsIDB4MTgyNDExMjQsCisweDE4MjUxODIzLCAweDE4MjZBMEM3LCAweDAwMTE3ODA0LCAweDAwMjAzM0UwLAorMHgwMDIwM0EzOCwgMHgwMDIwMThBMiwgMHgwMDIwMzQ4QywgMHgwMDFDMzZBMCwKKzB4MDAyMDM0RTgsIDB4MDAxQzNDQTAsIDB4MDAxQzM2RjQsIDB4MDAxQzNCODgsCisweDY2NkNFNjgyLCAweDhCMjAzMDYwLCAweEVBMjQ1NkY3LCAweDI2QTBEMTk0LAorMHgxNkMxNUMxNywgMHgxNjIyNTIxOCwgMHgxNjgzNTgxOSwgMHgxNkE0NUExQSwKKzB4MTZDNTVDMUIsIDB4MTYyNjUyMUMsIDB4RTIwMDU4MUQsIDB4NTUxRTE2ODcsCisweDU1MUYxNjU4LCAweDExMjcxNjU5LCAweDExMjkxMTI4LCAweDExMkIxMTJBLAorMHgxMTJEMTEyQywgMHhBMDhFMTEyRSwgMHhFNjgzMTEyRiwgMHgzMDYwNjY2QywKKzB4NTJGNzhCMEIsIDB4RUEwMEQ4ODMsIDB4NjU4MjIyQTAsIDB4NzgwNERDODIsCisweDYyODIyQzUyLCAweEEwN0VENjgxLCAweEU2OTAyNjIwLCAweDMwNjA2NjZDLAorMHhEQTdGOEIwNiwgMHgwMDA5NEEwQiwgMHhFMjAwNTZGNywgMHgyNjIwQTA3MywKKzB4NjY2Q0U2OTEsIDB4OEIxMDMwNjAsIDB4NjIyMkQyNzYsIDB4MjIyODYyMkMsCisweEQyNzg4OTA0LCAweDAwMDk0MjBCLCAweDAwMDlBMDAzLCAweDQyMEJEMjc2LAorMHg1NkY3MDAwOSwgMHhBMDVFRTIwMCwgMHhFNjkyMjYyMCwgMHgzMDYwNjY2QywKKzB4RTAxODg5NTEsIDB4RTZCMDBCRkMsIDB4NjY2QzYyQkMsIDB4OEIyQTMyNjAsCisweDAyRkNFMDE0LCAweDY4MkNFQTAwLCAweDYyQURFOTA0LCAweDg5NEEzMjgzLAorMHg2QUFEREQ2NCwgMHgzQ0RDNkNBMywgMHg3RDA0NkVDMiwgMHhEQjY4RDQ2NywKKzB4MzJEQzYyQTMsIDB4NEIwQkRDNjcsIDB4NEMwQjZEMjIsIDB4RDQ2NjY0RTMsCisweDAwMDk0QjBCLCAweDY0RDM0QzBCLCAweDRCMEJENDY0LCAweEU2MDAwMDA5LAorMHg2NjZENkJFMywgMHg3NjAxM0I2QywgMHgzMjkzNjI2RCwgMHg4RkY3MkJEMCwKKzB4QUZEQTREMTksIDB4RTZCNTdBMDgsIDB4MzI2MDY2NkMsIDB4RDQ1QzhCMTMsCisweDRCMEJEQjU3LCAweEQyNUIwMDA5LCAweDYwMjJEQjVCLCAweENCMjBFNkZGLAorMHgyMjAyNjY2RCwgMHhEQjU5MkI2MiwgMHhFMDE0RTIwMCwgMHg1NkY3MkIyMCwKKzB4QTAxMDAyRkMsIDB4RDQ1NjI2MjAsIDB4NjU0MkQyNTYsIDB4NDIwQkQ0NTYsCisweEEwMDgwMDA5LCAweERCNTIwMDA5LCAweDUyQjFFNjAwLCAweDYyMkNEQjUzLAorMHg1MkY3MkIyMSwgMHg3RjU0MjI2MCwgMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwKKzB4NkFGNjZCRjYsIDB4MDAwQjY5RjYsIDB4NEYyMjY4RjYsIDB4RTI0MDYxNEQsCisweDg5MTQzMTIzLCAweDMxMjdFMjFGLCAweDhCMDlENzQ5LCAweEQ0NDk2MTRELAorMHhFMDAxNzFFMCwgMHg1NjcxNDQwQiwgMHgyNjU5NjUwNywgMHgxNzYxQTAwNywKKzB4RTAwMUQ0NDQsIDB4NjY3MjQ0MEIsIDB4MjY1OTY1MDcsIDB4NEYyNjI3NjIsCisweDAwMDkwMDBCLCAweDYxNEQ0RjIyLCAweDMxMjNFMjQwLCAweEUyMUY4OTEyLAorMHhENzNCMzEyNywgMHg2MTREOEIwOCwgMHg1NjcxRDIzQSwgMHg0MjBCNzFFMCwKKzB4MjYwQkUwMDEsIDB4MTc2MUEwMDYsIDB4NjY3MkQyMzYsIDB4RTAwMTQyMEIsCisweDI3NjIyNjBCLCAweDAwMEI0RjI2LCAweEU2NDAwMDA5LCAweDQ2Mjg0NjE4LAorMHg2MjUyRDUzMSwgMHg4OUZDMjI2OCwgMHgwMDA5MDAwQiwgMHg0NjE4RTY4MCwKKzB4RDUyRDQ2MjgsIDB4MjI2ODYyNTIsIDB4MDAwQjg5RkMsIDB4QTAwMTAwMDksCisweDcyMDFFMjAwLCAweDhCRkMzMjQyLCAweDAwMDkwMDBCLCAweDQ2MThFNjgwLAorMHhENTI2NDYyOCwgMHgyMjY4NjI1MiwgMHgwMDBCOEJGQywgMHgyRkU2MDAwOSwKKzB4N0ZGQzRGMjIsIDB4QkZGMTZFNTMsIDB4NjFFMjJGNDIsIDB4RTI4MEQ2MjAsCisweDU0RTExNjE1LCAweDE2NDY0MjE4LCAweDQyMjg1NUUyLCAweDU3RTMxNjU3LAorMHgxNjc4NkVGMiwgMHgyNkUyMkUyQiwgMHg0RjI2N0YwNCwgMHg2RUY2QUZDRSwKKzB4MDAyMDM0OEMsIDB4MDAxMTc4MDQsIDB4MDAyMDM4RUMsIDB4MDAyMDM5MDAsCisweDAwMjAwNTBBLCAweDAwMjAxMDA4LCAweDAwMjAxMDJFLCAweDAwMjAzQTUwLAorMHgwMDIwMThBMiwgMHgwMDIwMThFNiwgMHgwMDIwM0E2NCwgMHgwMDIwM0E2QywKKzB4MDAyMDNBNzAsIDB4MDAxQzM1MDAsIDB4MDAxQzEwMDAsIDB4MDAyMDM5ODIsCisweDAwMTE3ODAwLCAweDAwMjAxOEVFLCAweDAwMjAzQTg0LCAweDAwMjAzOTg4LAorMHgwMDFDMzcwNCwgMHgwMDIwMzNFMCwgMHgwMDFDMzczQywgMHgwMDFDMzcwMCwKKzB4MDAxQzM3MEMsIDB4MkZENjJGQzYsIDB4NEYyMjJGRTYsIDB4NkM1M0REMTAsCisweDZFNDNCRkE0LCAweDJERTJCRjg5LCAweDAwMDlCRkEwLCAweDJDMTI1MUQ1LAorMHgxQzQxNTRENiwgMHgxQzUyNTVENywgMHgxQzYzNTZEOCwgMHg2RUY2NEYyNiwKKzB4MDAwQjZERjYsIDB4NjE2MzZDRjYsIDB4QTAwNEU2MDAsIDB4NjI1NjQxMDksCisweDI0MjI3NjAxLCAweDM2MTI3NDA0LCAweDAwMEI4QkY5LCAweDAwMDAwMDA5LAorMHgwMDFDMzcwQywgMHgwMDA5QTE2RSwgMHgyRkU2MkZENiwgMHhERDk0NEYyMiwKKzB4QTAwNDlFQjIsIDB4RDQ5MzAwMDksIDB4NDIwQkQyOTMsIDB4NjJEMjY1RDIsCisweDhCRjgyMkU4LCAweDAwMDlBMDA0LCAweEQyOEZENDkwLCAweDU1RDE0MjBCLAorMHgyMkU4NTJEMSwgMHhBMDA0OEJGOCwgMHhENDhEMDAwOSwgMHg0MjBCRDI4QSwKKzB4NTJEMjU1RDIsIDB4OEJGODIyRTgsIDB4MDAwOUEwMDQsIDB4RDI4NkQ0ODksCisweDU1RDM0MjBCLCAweDIyRTg1MkQzLCAweEEwMDQ4QkY4LCAweEQ0ODYwMDA5LAorMHg0MjBCRDI4MSwgMHg1MkQ0NTVENCwgMHg4QkY4MjJFOCwgMHg2RUY2NEYyNiwKKzB4NkRGNjAwMEIsIDB4MkZENjJGQzYsIDB4NEYyMjJGRTYsIDB4NkU2MzZDNzMsCisweDZENTNCMDFBLCAweDY0RDM1N0Y0LCAweEIwNUY2NUUzLCAweEIwNzU2NkMzLAorMHhCMEE0MDAwOSwgMHhCMEE4MDAwOSwgMHhCMEFDMDAwOSwgMHhCMEFDMDAwOSwKKzB4QjBBRjAwMDksIDB4QjAzMTU0RjUsIDB4NkNDRDZDMDMsIDB4NEYyNjYwQzMsCisweDZERjY2RUY2LCAweDZDRjYwMDBCLCAweDM0MTJEMTcwLCAweEQ2NzAwNTI5LAorMHgyNjUwRDc3MCwgMHgyNzQyMDAwQiwgMHgwMDA5QTAxOCwgMHgyRkQ2MkZDNiwKKzB4NEYyMjJGRTYsIDB4NkU2MzZDNzMsIDB4NkQ1M0JGRUUsIDB4NjREMzU3RjQsCisweEIwMzM2NUUzLCAweEIwOEQ2NkMzLCAweEIwMEY1NEY1LCAweDZDQ0Q2QzAzLAorMHg0RjI2NjBDMywgMHg2REY2NkVGNiwgMHg2Q0Y2MDAwQiwgMHhFNTAzRDE2MiwKKzB4RDc2M0Q0NjIsIDB4MjE1MjQ1MTgsIDB4MjQ3MjAwMEIsIDB4RDQ1RkQxNUUsCisweDIxNjJFNjAwLCAweDI0NjIwMDBCLCAweEJGNzM0RjIyLCAweEJGNzNFNDBBLAorMHhEMjVDMDAwOSwgMHg0MTE4RTEwNCwgMHhFNDBBRTUwMCwgMHhCRjY5MjIxMiwKKzB4RDc1OTIyNTIsIDB4Q0IyMDYwNzIsIDB4MDAwQjRGMjYsIDB4NEYyMjI3MDIsCisweDQxMEJEMTU2LCAweEQ1NTZFNDAwLCAweDRGMjY0NTJCLCAweEQxNTUyRkU2LAorMHg2NjEyNkU2MywgMHg5MjEwNDQxOCwgMHg0NDA4NDUyOCwgMHg0NTAwMjYyOSwKKzB4MjY1QjQ0MDgsIDB4MjY0QjQ0MDAsIDB4MjE2MjQ3MDgsIDB4RDE0RTQ3MDgsCisweDIxNzIyN0VCLCAweDZFRjYwMDBCLCAweDFGRkYwM0YwLCAweDRGMjIyRkU2LAorMHhFMTAxREU0QSwgMHhCRjNERTQwQSwgMHg2N0UzMkUxMiwgMHhFNTAwNzc2QywKKzB4RTIwNEUxMzAsIDB4Mjc1MkU0MEEsIDB4Mjc1MjI3NTIsIDB4Mjc1MjI3NTIsCisweDI3NTIyNzUyLCAweDI3NTIyNzUyLCAweDI3NTIyNzUyLCAweDI3NTIyNzUyLAorMHgyNzUyMjc1MiwgMHgyNzUyMjc1MiwgMHgyNzUyMjc1MiwgMHgyNzIyMjcxMiwKKzB4Mjc1MjI3NTIsIDB4Mjc1MjI3NTIsIDB4Mjc1MjI3NTIsIDB4Mjc1MjI3NTIsCisweDE3NUFCRjE4LCAweDJFNjJFNjAwLCAweDAwMEI0RjI2LCAweEQyMzQ2RUY2LAorMHhFNDQxRTEwMSwgMHgwMDBCMjIxMiwgMHhEMTMyMjI0MiwgMHhFNjA1RDQzMiwKKzB4MDAwQjIxNjIsIDB4MDAwQjI0NjIsIDB4RDIzMDAwMDksIDB4RTQwQUU2MDEsCisweDIyNjJBRjAwLCAweDJGQzYyRkI2LCAweDJGRTYyRkQ2LCAweDdGRkM0RjIyLAorMHg2QzQzREIyQiwgMHhFRDAwNjBCMiwgMHgyQjAyQ0IwMywgMHhDOTAzNjBCMiwKKzB4NkUwM0EwMDgsIDB4ODkwNzNEQzIsIDB4RTQ2NDYwQjIsIDB4QjA3Q0M5MDMsCisweDdEMDE2RTAzLCAweDhCRjUyRUU4LCAweDhGMDQzREMyLCAweEQ0MjEyRkUxLAorMHg0NjBCRDYyMSwgMHg2MkYxMDAwOSwgMHg2MDIzNjIyRCwgMHg4OUZGQzgwMSwKKzB4N0YwNDYwMjMsIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkJGNjAwMEIsCisweDAwMUMzQjg4LCAweDAwMjAzQTk4LCAweDAwMjAxOEVFLCAweDAwMjAzQUEwLAorMHgwMDIwM0FBOCwgMHgwMDIwM0FCMCwgMHgwMDIwM0FCOCwgMHgwMDI1RTcyMCwKKzB4MDAyMDNEOTgsIDB4MDAyMDM4RjAsIDB4MDAxQzU5NjgsIDB4MDAxQzNCNDAsCisweDAwMEY4MDAwLCAweDAwMUQ0MDA0LCAweDAwMUMzNTAwLCAweDAwMjAxNUUwLAorMHgwMDIwMTYwQywgMHgwMDFDNTgxNCwgMHgwMDFDNTlEMCwgMHgwMDFDNTgzMCwKKzB4MDAxQzYyNjgsIDB4MDAxQzU5QTQsIDB4MDAxQzYzOUMsIDB4MDAxQzU4MUMsCisweDAwMUM1ODYwLCAweDAwMjAzQUMwLCAweDAwMjAxOEEyLCAweDhGMDE0NDExLAorMHg2MDQzNjA0QiwgMHgwMDA5MDAwQiwgMHg1NjUxRDUyQiwgMHg0NjI4NjA1MiwKKzB4MzA2QzAwMEIsIDB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsIDB4NEYxMjRGMjIsCisweEJGRjE0RjAyLCAweDZCMDM2RTQzLCAweEREMjVEQzI0LCAweDAwMDlCRkVDLAorMHgzQzA1MzBCOCwgMHg0NjA5MDYwQSwgMHg0NjAxNDYwOSwgMHgwMjBBM0Q2NSwKKzB4NDIwOTQyMDksIDB4MzJFMjQyMDksIDB4NEYwNjhCRjAsIDB4NEYyNjRGMTYsCisweDZERjY2RUY2LCAweDAwMEI2Q0Y2LCAweDJGQzY2QkY2LCAweDJGRTYyRkQ2LAorMHg0RjEyNEYyMiwgMHhCRkNGNEYwMiwgMHg2QzAzNkU0MywgMHhCRkNCREQxMywKKzB4MzBDODAwMDksIDB4MDYwQTNEMDUsIDB4NDYwOTQ2MDksIDB4MzZFMjQ2MDEsCisweDRGMDY4QkY1LCAweDRGMjY0RjE2LCAweDZERjY2RUY2LCAweDZDRjYwMDBCLAorMHg0RjIyMkZFNiwgMHhFMTAyREUwQiwgMHhFNDAzRTUwMCwgMHhCRkI5MkUxMiwKKzB4RTYwNjJFNTIsIDB4RTcwMDQ2MTgsIDB4MkU2MkU0MDMsIDB4NEYyNjJFNzIsCisweDZFRjZBRkIwLCAweDAwMDkwMDBCLCAweDAwMUMxMDQwLCAweENDQ0NDQ0NELAorMHgxMDYyNEREMywgMHgwMDFENDAwNCwgMHgyRjk2MkY4NiwgMHgyRkI2MkZBNiwKKzB4MkZENjJGQzYsIDB4NEYyMjJGRTYsIDB4RTUwMDdGOTgsIDB4NjQ1M0U3MTAsCisweDZCNTM0NzI4LCAweEVFMUFEQ0JDLCAweDYxNTM2NTVELCAweDMxNUM0MTA4LAorMHg3NTAxNDEwOCwgMHg2MDQzMzE3QywgMHgwRjE2NjY1RCwgMHhFRDAwNjBCMywKKzB4MjFCMTM2RTMsIDB4ODExMjgxMTEsIDB4MTFEMjgxMTMsIDB4MTFENDExRDMsCisweDc0MDQ4RkVBLCAweEQ4QjE2N0YyLCAweDE4NzFEOUIxLCAweDU4RjEyODcyLAorMHgxOTgxRDFCMCwgMHg1OUYyMjk4MiwgMHg1REY0NUFGMywgMHg1NEY2NUVGNSwKKzB4MjE5MjExOTEsIDB4MTFBMjExQTMsIDB4MTFENDExRDUsIDB4MTFFNjExRTcsCisweDExNDgxMTQ5LCAweERBQTg1NUY3LCAweDU3RjhFRTAwLCAweDUyRjlEREE3LAorMHg2NEUzRDZBNywgMHgyQTUyMUE1MSwgMHhEOEE3RDlBNiwgMHgyRDcyOUFENSwKKzB4NkVFRDI2MjIsIDB4NEQwODZERTMsIDB4M0RFQzYxRTMsIDB4NEQwODQxMDgsCisweDNEOUMzMUVDLCAweDQxMDg2MEIzLCAweDgxRDEyREIxLCAweDQxMDhFMDUwLAorMHg0MDA4RTdCNywgMHg2NzdDNDEwOCwgMHg2MEIzODFEMiwgMHhFMjAwMzE4QywKKzB4ODFEMzM0NzIsIDB4MUQxMzFERDIsIDB4OEQwMUQ0OTMsIDB4RDQ5MDFEMjQsCisweEIwQjM2NUQzLCAweDY0RUQ3RTAxLCAweDhCREEzNEEyLCAweDJGRDJEQThDLAorMHhERDkyNjhBMiwgMHgyRDgyNDgyOSwgMHg3REZDNjRBMiwgMHhEMjg3Njk0RCwKKzB4NkUyMjJEOTIsIDB4N0QwQzRFMjksIDB4NjgyMjJERTIsIDB4NjE4RDZBRDMsCisweDJBMTZENzg0LCAweEQ0OEE2RDcyLCAweDI0RDJENTgzLCAweEQ2ODk1RTcyLAorMHg1MTc0MTRFMiwgMHgxNDE0RUUwMCwgMHhEMTg3NTg3NiwgMHg1OTc4MTQ4NiwKKzB4MTQ5OEU3MTAsIDB4NjVFMzYyNTIsIDB4MjZFMjE0MkEsIDB4RTYwMDY0RTMsCisweDY4NDM2NDRELCAweDM4NEM0ODA4LCAweDM4MUM0ODA4LCAweDBDODY2MDUzLAorMHgwOUNFMjhCMSwgMHg4MTkxNjBCMywgMHgwQUNFNjA1MywgMHg4MUEyNjA0MywKKzB4MERDRTYwNTMsIDB4ODFEMzYwQjMsIDB4MDhDRTYwNTMsIDB4MTg4Mjc0MDEsCisweDYyNEQwOUNFLCAweDBBQ0UxOUUzLCAweDFBNjQzMjczLCAweDc1MDQ4RkUwLAorMHhFMDAzRDk2QSwgMHg0MDE4NkM5MiwgMHg2RDkyMkNCMSwgMHg4MUQxREE2RiwKKzB4NkU5MkUwNTAsIDB4ODFFMjQwMDgsIDB4NjBCMzYxOTIsIDB4NjQ5MjgxMTMsCisweDE0NDJFNjAwLCAweEQ0Njk2NzkyLCAweDY4OTIxN0EzLCAweDE4NjRFMUZGLAorMHg2NTYzRTcwMywgMHgzNjRDNDYwOCwgMHgyNjEyNzUwMSwgMHgzNjczNjY1RCwKKzB4REM1QjhCRjgsIDB4NkRDMkUwMDMsIDB4MkRCMTQwMTgsIDB4RDI2MDZFQzIsCisweDYxQzI4MUUxLCAweDExMTJFRTAwLCAweEUwMjQ2NEMyLCAweDY1QzIxNDIzLAorMHgxNUU0RDQ1QiwgMHhFNTgwNjdDMiwgMHg2OEMyODE3MiwgMHg4MTgzNjZFMywKKzB4NjY2RDY1NUMsIDB4NzYwNDY5NjMsIDB4Mzk0QzZBNkQsIDB4OEZGODNBNTMsCisweERCNTQyOUUyLCAweDI0QjJEQzU0LCAweDI0QzI3NDA0LCAweDRGMjY3RjY4LAorMHg2REY2NkVGNiwgMHg2QkY2NkNGNiwgMHg2OUY2NkFGNiwgMHg2OEY2MDAwQiwKKzB4NjAxMTYxNDIsIDB4OEYwM0M4MDMsIDB4RDIzREU1MDAsIDB4OEIwNjM0MjAsCisweEM5MDM2MDExLCAweDhCMDY4ODAyLCAweDM0MjBEMjM5LCAweDU2MTI4QjAzLAorMHg1MjY0NjUxMywgMHgwMDBCMjQyMiwgMHgwMTEzNjA1MywgMHgyRkU2MkZENiwKKzB4N0ZFQzRGMjIsIDB4NjI1MzZFNTMsIDB4NkQ0M0U1NTAsIDB4NDUwOEU0MDAsCisweEUxMDFBMDAxLCAweDYwNDM1MjI0LCAweDgxMjEyMjExLCAweDYwNTM4MTIzLAorMHg1NkUyODEyMiwgMHg4QkY1MzYyMCwgMHgxNkU0RDIzOCwgMHhFNjE0NjRGMywKKzB4NjVFMzQyMEIsIDB4RTRGQzY1RTEsIDB4MkU1MTI1NDksIDB4NjVGMzYxRjEsCisweDJGMTEyMTQ5LCAweEQxMzE1NEQxLCAweEU2MTQ0MTBCLCAweDYwNzE1N0QxLAorMHgyNzAxQ0IwMSwgMHg3RjE0MURFMSwgMHg2RUY2NEYyNiwgMHg2REY2MDAwQiwKKzB4MkZFNjJGRDYsIDB4N0ZFQzRGMjIsIDB4NjY1MzZFNTMsIDB4NkQ0M0U1RkMsCisweDIwNTk2MDYxLCAweDI2MDFDQjAxLCAweDMyNjA1MkUyLCAweDEyRTQ4QjA2LAorMHgzMUUwNTFFMiwgMHg1MkQxOEIwNCwgMHgxRTIyQTAwMiwgMHg1NjY0QUZGMCwKKzB4NjRGM0QyMUUsIDB4NDIwQkU2MTQsIDB4NjdFMTY1RTMsIDB4MjcxOUUxRkMsCisweDY3RjEyRTcxLCAweDI3MTk1NEQxLCAweDY1RjNEMTE4LCAweDQxMEJFNjE0LAorMHg1MkQxMkY3MSwgMHhDQjAxNjAyMSwgMHgxREUxMjIwMSwgMHg0RjI2N0YxNCwKKzB4MDAwQjZFRjYsIDB4MDAwMDZERjYsIDB4MDAyMDM5MUMsIDB4MDAyMDM0RUMsCisweDAwMjAzNEY0LCAweDAwMjAzNEZDLCAweDAwMjAzNTI0LCAweDAwMjAzOTA4LAorMHgwMDIwMzkxMCwgMHgwMDEwMDIwOCwgMHgwMDEwMTdDMCwgMHgwMDFFMjEwQywKKzB4MDAxQzNEMDAsIDB4MDAyMDM5NUMsIDB4MDAxMDAwQzgsIDB4MDAxMTc4ODAsCisweDAwMTE3NzgwLCAweDAwMDQwMDIwLCAweDAwMjZDNDAxLCAweDAwMjAwRUQ2LAorMHg0RjIyMkZFNiwgMHhERTQyNjI0QywgMHg0MjAwNDIwOCwgMHgzRTJDQTAwNSwKKzB4RDQ0MDUyNTIsIDB4QkY2OTU2MjQsIDB4NjVFMjJFNjIsIDB4MzUyMDUyRTEsCisweEQ2M0Q4QkY2LCAweDRGMjYyNjIyLCAweDZFRjYwMDBCLCAweDJGQzYyRkI2LAorMHgyRkU2MkZENiwgMHhEQzM5NEYyMiwgMHg1MkMxREIzOSwgMHgzNjIwNjZDMiwKKzB4NjA2MTg5MUMsIDB4ODgwMUM5MDMsIDB4REUzNDg5MTgsIDB4QkYzN0REMzUsCisweDY1MDM2NEUzLCAweDY2QjI4NTAzLCAweDMyNjI2MjBELCAweEQ0MzI4OTA3LAorMHgwMDA5QkY3NiwgMHg0RDBCRDQzMSwgMHhBRkU2MDAwOSwgMHhCRjNEMDAwOSwKKzB4RDQyRjY0RTMsIDB4MDAwOTREMEIsIDB4MDAwOUFGREYsIDB4MjI2MkQyMkQsCisweDZFRjY0RjI2LCAweDZDRjY2REY2LCAweDZCRjYwMDBCLCAweDJGRDYyRkM2LAorMHg0RjIyMkZFNiwgMHhERDI5REMyOCwgMHg2RTQzNjBDMiwgMHgwNERFNDAwOCwKKzB4RTYxNEQxMjcsIDB4NjVFMzQxMEIsIDB4RDEyN0Q3MjYsIDB4NTVFMjI3RTIsCisweDM1RTA1MjU0LCAweDIxMjI4RjA0LCAweDQwMDg2MEMyLCAweDEyMjIwMkRFLAorMHg2MDUzNjVDMiwgMHg3NTAxNDAwOCwgMHgwREU2MDZERSwgMHhDOTBGNjA1MywKKzB4NjA2MzJDMDIsIDB4NkVGNjRGMjYsIDB4MDAwQjZERjYsIDB4ODU0MzZDRjYsCisweDY1MEQ1NjQzLCAweDYyMkQ2MjYyLCAweDM1Mjc3MjA0LCAweEUxMDA4RjBDLAorMHgyMjY4OTYwQywgMHhENjE1OEIwMywgMHg3MjAxNTI2MSwgMHhENjEzMTYyMSwKKzB4NjI2MkUxMDEsIDB4MjYyMjcyMDEsIDB4NjAxMzAwMEIsIDB4MDAwMDAxRkYsCisweDAwMjAzNEZDLCAweDAwMjAzNEY0LCAweDAwMUMzRDAwLCAweDAwMjAzNTI0LAorMHgwMDIwMzhFQywgMHgwMDIwMThBMiwgMHgwMDIwMzRFQywgMHgwMDIwM0FFOCwKKzB4MDAyMDNBRUMsIDB4MDAxQzNEMjgsIDB4MDAyMDM5NUMsIDB4MDAyMDM5MUMsCisweDAwMjAwRUQ2LCAweDAwMjAzOTYwLCAweDAwMjAzOTY0LCAweDAwMTE3NzU0LAorMHgyRkM2MkZCNiwgMHgyRkU2MkZENiwgMHg3RkY4NEYyMiwgMHg2MDIyRDIzNywKKzB4OEQ1OEM4MDMsIDB4REUzNjJGMDEsIDB4REIzN0RDMzYsIDB4NjZDMjUyQzEsCisweDg5MkYzNjIwLCAweEM5MDM2MDYxLCAweDg5MkI4ODAxLCAweEQyMzNERDMxLAorMHg2NEQzNDIwQiwgMHgxRjAxNjUwMywgMHg4ODAxNjBCMSwgMHhEMjMwOEIwNCwKKzB4NjREMzQyMEIsIDB4MDAwOUFGRUEsIDB4ODU2MTU2NTMsIDB4ODkwNEM4MjAsCisweEUwNTBENzJDLCAweDcyMDEwMjdFLCAweEQyMkIwNzI2LCAweDY0NTM0MjBCLAorMHg4OTA3MjAwOCwgMHg1NUYxRDEyNiwgMHg2NEQzNDEwQiwgMHhFNjAxRDcyNywKKzB4Mjc2MkFGRDQsIDB4NTVGMUQyMjYsIDB4NjRFMzQyMEIsIDB4RTYwMUQxMjUsCisweDIxNjJBRkNDLCAweEREMjVERTI0LCAweERDMjZEQjI1LCAweDY2RDI1MkQxLAorMHg4OTE4MzYyMCwgMHhDOTAzNjA2MSwgMHg4OTE0ODgwMSwgMHhEMTE3RDQxRiwKKzB4MDAwOTQxMEIsIDB4MzZFMDU2MDMsIDB4NjUwMzhGMDQsIDB4MkIyMEUyMDEsCisweDJDNTJBRkVDLCAweEQ3MTJENDFDLCAweDAwMDk0NzBCLCAweEU2MDFEMTE1LAorMHhBRkUzNDYxOCwgMHg2MEYxMjE2MiwgMHg4OTA3QzgwNCwgMHg3RjA4RDIxNywKKzB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkJGNjQyMkIsIDB4NEYyNjdGMDgsCisweDZERjY2RUY2LCAweDAwMEI2Q0Y2LCAweDAwMDA2QkY2LCAweDAwMUUyMTAwLAorMHgwMDIwMzRGQywgMHgwMDIwMzRGNCwgMHgwMDIwMzk4NCwgMHgwMDIwMTRBMCwKKzB4MDAyMDE0Q0MsIDB4MDAyMDM0OEMsIDB4MDAyMDE2QkUsIDB4MDAxRTIxMkMsCisweDAwMjAxNTMwLCAweDAwMUMzRDMwLCAweDAwMTE3ODgwLCAweDAwMjAzNEVDLAorMHgwMDIwMzkwQywgMHgwMDIwMzkwOCwgMHgwMDIwMzUyNCwgMHgwMDIwMDYxMCwKKzB4RTYwMUQyMDMsIDB4MTI2NUQ1MDMsIDB4MDAwQjIyNTIsIDB4MDAwMDEyNjYsCisweDAwMUMxMDEwLCAweDAwMDBDMzRGLCAweDAwMDkwMDBCLCAweDJGRDYyRkM2LAorMHg0RjIyMkZFNiwgMHg2RDQzNkM1MywgMHhFRTAwQTAwNCwgMHg3RTAxNjRENCwKKzB4NjQ0Q0JGRjIsIDB4OEJGOTNFQzIsIDB4NkVGNjRGMjYsIDB4MDAwQjZERjYsCisweEU1MDA2Q0Y2LCAweDY2NDNBMDAyLCAweDc2MDE3NTAxLCAweDIyMjg2MjYwLAorMHhBRkUzOEJGQSwgMHgyRkU2MDAwOSwgMHg3NTA3NjI1MywgMHhFMTA4Njc1MywKKzB4NjA0M0VFMEEsIDB4NDQwOUM5MEYsIDB4NjUwMzMwRTIsIDB4OEQwMTQ0MDksCisweEU2MzBFNjM3LCAweDQxMTAzNjVDLCAweDhGRjIyNzYwLCAweEUwMDA3N0ZGLAorMHgwMDBCODAyOCwgMHgwMDBCNkVGNiwgMHgwMDBCRTAwMCwgMHgyRkU2RTAwMCwKKzB4N0ZFQzRGMjIsIDB4NkU0MzYyNTMsIDB4QkZEQzY1RjMsIDB4QkZEMDY0MjMsCisweEJGQ0U2NEUzLCAweEQ0MDM2NEYzLCAweDAwMDlCRkNCLCAweDRGMjY3RjE0LAorMHg2RUY2MDAwQiwgMHgwMDIwM0FGMCwgMHhFNEZERDI5RCwgMHhENzlENjEyMiwKKzB4MjIxMjIxNDksIDB4NzQwMTYwMjIsIDB4MjIwMkNCMDEsIDB4RDU5QTY2MjIsCisweDIyNjIyNjQ5LCAweEM4NDA2MDcwLCAweDYwNTI4OTAyLCAweDI1MDJDQjA0LAorMHhFNjAxNjA1MiwgMHgyNTAyQ0IwOCwgMHhFNDAyNjA1MiwgMHgyNTAyQzlDRiwKKzB4NDYxODYwNTIsIDB4MjUwMkNCMTAsIDB4Q0IwMzYwNTIsIDB4MTU0MjI1MDIsCisweDE1NjMwMDBCLCAweEQ3OEVENThELCAweEQ0OEZEMjhFLCAweEU2MDBFMTAwLAorMHgyNzExMjUxMSwgMHhBRkNGMjIxMCwgMHg2NjRDMjQ2MSwgMHg0NjAwRDI4QiwKKzB4NjA2MDM2MkMsIDB4MDAwQkNCMTAsIDB4NjU0QzI2MDAsIDB4NDUwMEQyODcsCisweDY2NTAzNTJDLCAweDI2MTlFMUVGLCAweDI1NjAwMDBCLCAweEQyODQ2NjRDLAorMHgzNjJDNDYwMCwgMHhDQjEwNjA2MCwgMHgyNjAwMDAwQiwgMHhEMjgwNjU0QywKKzB4MzUyQzQ1MDAsIDB4RTFFRjY2NTAsIDB4MDAwQjI2MTksIDB4NjY0QzI1NjAsCisweDQ2MDBEMjdBLCAweDYwNjAzNjJDLCAweDAwMEJDQjA4LCAweDY1NEMyNjAwLAorMHg0NTAwRDI3NiwgMHg2NjUwMzUyQywgMHgyNjE5RTFGNywgMHgyNTYwMDAwQiwKKzB4RDI3MzY2NEMsIDB4MzYyQzQ2MDAsIDB4Q0IwODYwNjAsIDB4MjYwMDAwMEIsCisweEQyNkY2NTRDLCAweDM1MkM0NTAwLCAweEUxRjc2NjUwLCAweDAwMEIyNjE5LAorMHg2MjRDMjU2MCwgMHg0MjAwRDY2OSwgMHg2MDIwMzI2QywgMHg0MDIxQzkwOCwKKzB4NDAyMTQwMjEsIDB4NjAwQzAwMEIsIDB4RDY2NTYyNEMsIDB4MzI2QzQyMDAsCisweEM5MDg2MDIwLCAweDQwMjE0MDIxLCAweDAwMEI0MDIxLCAweEQxNjE2MDBDLAorMHgzNDFDNjQ0QywgMHgwMDBCNjI0MCwgMHhEMTVGNjAyQywgMHgzNDFDNjQ0QywKKzB4MDAwQjYyNDAsIDB4MkZFNjYwMkMsIDB4NkU0MzRGMjIsIDB4RTYwQTY0NUMsCisweDg5MTQzNDY3LCAweDAwMDlCRkVCLCAweDYwRUM2NDBDLCAweDhCMDI4ODAxLAorMHhBMDAyRTAwRiwgMHg0NDA5MjQwOSwgMHg2MjRDNDQwOSwgMHgzMjYzRTYwQSwKKzB4QkZFMjg5MDUsIDB4NjIwQzY0NEMsIDB4Qzg4MDYwMjMsIDB4RTIwMDhCMDAsCisweDRGMjY2MDIzLCAweDZFRjYwMDBCLCAweEQ2NEM0RjIyLCAweDg4MDE2MDYyLAorMHhCMjU3OEIwMywgMHhBMDAzMDAwOSwgMHhEMjQ5MDAwOSwgMHgyMjYwRTY0MCwKKzB4RTIwMEQ2NDgsIDB4MDAwQjRGMjYsIDB4NEYyMjI2MjIsIDB4NjA2MkQ2NDMsCisweDhCMDE4ODAyLCAweDAwMDlCMkEwLCAweEUyMDBENjQyLCAweDAwMEI0RjI2LAorMHhENTNFMjYyMiwgMHhFMTAwRDQzRSwgMHgyNTEyRTcwMSwgMHgyNDcwMDAwQiwKKzB4RTYwNEQyM0IsIDB4MjI2MDAwMEIsIDB4RDQzQjRGMjIsIDB4NDEwQkQxM0IsCisweEQ1M0IwMDA5LCAweDY2NTBFMUZELCAweDI2MTlEMjNBLCAweDI1NjBFNzAwLAorMHgwMDBCNEYyNiwgMHg0RjIyMjI3MCwgMHhEMjM4RDUzNywgMHhENzM4NjE1MiwKKzB4MjUxMjYxMUQsIDB4RTZGRjY0NTIsIDB4MjU0MjI0MkIsIDB4RDIyRkQ0MzUsCisweDQyMEI2NjZELCAweEQ1MkUyNzYyLCAweDY3NTBFMUZCLCAweDRGMjYyNzE5LAorMHgyNTcwMDAwQiwgMHhENDMwNEYyMiwgMHg0MTBCRDEyOCwgMHhENTI4MDAwOSwKKzB4NjY1MEU3RjcsIDB4NEYyNjI2NzksIDB4MjU2MDAwMEIsIDB4OTQyNUQ1MjQsCisweDIyNDk2MjUwLCAweDI1MjAwMDBCLCAweEU0QkZENTIxLCAweDIyNDk2MjUwLAorMHgyNTIwMDAwQiwgMHhEMjI1NEYyMiwgMHg2MDBEODUyMiwgMHg4OTExMjAwOCwKKzB4ODk0NTg4MDEsIDB4ODk0Nzg4MDMsIDB4ODk0OTg4MDUsIDB4ODk0Rjg4MDYsCisweDg5NTU4ODA4LCAweDg5NUI4ODA5LCAweDg5NjE4ODBBLCAweDg5Njc4ODBCLAorMHgwMDA5QTA2RSwgMHgwMDA5QjA3MCwgMHg2MDBDQTA2QiwgMHgwMDAwRkY3RiwKKzB4MDAxRTIxNDgsIDB4MDAxRTEwMDAsIDB4MDAxRTExMDgsIDB4MDAyMDM5QkMsCisweDAwMjAzOUJFLCAweDAwMjAzOURELCAweDAwMjAzOUEwLCAweDAwMUUxMDNGLAorMHgwMDFFMTA1RiwgMHgwMDFFMTAyRiwgMHgwMDFFMTA5MCwgMHgwMDIwMzlDNCwKKzB4MDAxRTEwMEIsIDB4MDAyMDM5QzAsIDB4MDAyMDNBRjQsIDB4MDAyMDE4QTIsCisweDAwMUUxMDI4LCAweDAwMjAzOURDLCAweDAwMUQ0MDIwLCAweDk4NzYwMDAwLAorMHgwMDFDMTAwMCwgMHgwMDIwM0IwMCwgMHgwMDIwM0IxMCwgMHgwMDIwMzk5NCwKKzB4MDAwOUIwNEMsIDB4NjAwQ0EwMzUsIDB4MDAwOUIwNTUsIDB4NjAwQ0EwMzEsCisweDYyNjBENjg0LCAweDhCMkIyMjI4LCAweDAwMDlCMDYxLCAweDYwMENBMDI5LAorMHg2MjYwRDY4MCwgMHg4QjIzMjIyOCwgMHgwMDA5QjA2OSwgMHg2MDBDQTAyMSwKKzB4NjI2MEQ2N0MsIDB4OEIxQjIyMjgsIDB4MDAwOUIwQzcsIDB4NjAwQ0EwMTksCisweDYyNjBENjc4LCAweDhCMTMyMjI4LCAweDAwMDlCMENELCAweDYwMENBMDExLAorMHg2MjYwRDY3NCwgMHg4QjBCMjIyOCwgMHgwMDA5QjEyNSwgMHg2MDBDQTAwOSwKKzB4NjI2MEQ2NzAsIDB4OEIwMzIyMjgsIDB4MDAwOUIxM0QsIDB4NjAwQ0EwMDEsCisweDRGMjZFMDAwLCAweDAwMDkwMDBCLCAweEQyNkNEMTZCLCAweEQ1NkM4NDEyLAorMHg0MDAwQzkwRiwgMHhENzZCMDEyRCwgMHhFNDAzRDY2QiwgMHhFMjBGNjExQywKKzB4MjU0MEUwMDEsIDB4MjUyMDI3MTIsIDB4MjYwMjAwMEIsIDB4RTYwMUQyNjIsCisweDMwNjY4NTIzLCAweEUwMDA4RDA1LCAweEQ2NjNEMjYwLCAweEUwMDE4MTIyLAorMHgwMDBCMjYwMiwgMHhEMjVDMDAwOSwgMHg2MDBEODUyMywgMHg4OTA1MjAwOCwKKzB4OEIwQTg4MDEsIDB4NjA2MEQ2NUQsIDB4MjYwMENCMDEsIDB4RDQ1N0Q2NUEsCisweEUwMDFFMTAxLCAweDAwMEIyNjEyLCAweDAwMEI4MTQyLCAweEQxNTJFMDAwLAorMHg4NTEzRTUwMSwgMHg2NDBENDUxOCwgMHg2NjAzMzQ1MywgMHhFMDAwOEQwNSwKKzB4RDU1MUQyNTMsIDB4MjI2MEUwMDEsIDB4MDAwQjI1MDIsIDB4NEYyMjAwMDksCisweDg1MTNEMTQ5LCAweDY0NTM2NTBELCAweDYyNDk0NDE5LCAweDIyN0Q2NzJFLAorMHg4ODAxNjAyQywgMHg4ODAyODkwOSwgMHg4ODAzODkxMCwgMHg4ODA2ODkxQSwKKzB4ODgwNzg5MzUsIDB4QTA0Qzg5M0IsIDB4RDU0NjAwMDksIDB4NjY1MkQ3NDYsCisweDI3NjJENDQ2LCAweDYyMkM2MjYxLCAweDI0MjFBMDM4LCAweDIyMjg2MjVDLAorMHhENDQzOEIzRiwgMHg2NjQyRDU0MCwgMHgyNTYyRDQ0MCwgMHgyNDAxODU2MSwKKzB4NjIwM0EwMkMsIDB4MjAwODYwNUMsIDB4ODgxMDg5MDcsIDB4ODgyMDg5MDgsCisweDg4MzA4OTA5LCAweEEwMkM4OTBBLCAweEQyM0EwMDA5LCAweDYyMjJBMDA4LAorMHhBMDA1RDIzOSwgMHhEMjM5NjIyMiwgMHg2MjIyQTAwMiwgMHg2MjYyRDYzOCwKKzB4RDQzMkQ1MzEsIDB4NjYyMTI1MjIsIDB4QTAwRjYyNkMsIDB4RDYzNTI0MjEsCisweDYyNjFENTJELCAweDYyMkNENDJELCAweEEwMDcyNTYyLCAweEQ2MzIyNDIxLAorMHg4NTYxRDUyOSwgMHgyNTYyRDQyOSwgMHg2MjAzMjQwMSwgMHg2NjJEODUxNSwKKzB4MzYxNzYxMEQsIDB4NjUwMzhGMDEsIDB4QjBDQjI0NTEsIDB4QTAwMTAwMDksCisweEUwMDBFMDAxLCAweDAwMEI0RjI2LCAweEQ2MTkwMDA5LCAweEQ0MjdFMTAxLAorMHg2NTQxMjYxMCwgMHhEMTE4RDcxNywgMHhFMjBGNjU1RCwgMHgyNzUyRTAwMSwKKzB4MDAwQjI2MjAsIDB4MkZFNjIxMDIsIDB4RDIwRjRGMjIsIDB4NjQwQzg1MjMsCisweDhCMDgyNDQ4LCAweEQ1MTFENjFELCAweDI2MjFFMjAwLCAweDk0MEY4NDUxLAorMHhBMDQ4MjA0OSwgMHhERTBEODA1MSwgMHhDODQwNjBFMCwgMHhFMjAxOEQzMiwKKzB4ODk0NDM0MjcsIDB4RDIxNkQ2MTUsIDB4MjY0MTQyMEIsIDB4MDAwOUEwMzAsCisweDAwMDBGRjdGLCAweDAwMjAzOURELCAweDAwMjAzOTk0LCAweDAwMjAzOUEwLAorMHgwMDFFMTEwMCwgMHgwMDFFMTAwQywgMHgwMDIwMzlDMCwgMHgwMDFFMTAwMCwKKzB4MDAxRTEwMDEsIDB4MDAyMDM5QzgsIDB4MDAyMDM5QTgsIDB4MDAyMDM5QUMsCisweDAwMjAzOUIwLCAweDAwMjAzOUNDLCAweDAwMjAzOUQwLCAweDAwMjAzOUQ0LAorMHgwMDIwMzlEOCwgMHgwMDIwM0RGQywgMHgwMDIwM0UwNiwgMHgwMDIwMzlCQSwKKzB4MDAyMDI4N0UsIDB4ODkxMjM0MjcsIDB4RDI5NEQ2OTMsIDB4MjY0MTQyMEIsCisweENCODA4NEUxLCAweDgwRTFCMEY1LCAweEQ2OTE2MEUwLCAweDJFMDBDQjA0LAorMHhDOTNGNjA2MCwgMHhENjhGMjYwMCwgMHhBMDAxRTAwMSwgMHhFMDAwMjYwMiwKKzB4MDAwQjRGMjYsIDB4RDY4QzZFRjYsIDB4Qzg4MDYwNjAsIDB4RDI4Njg5MTksCisweDg4MDE2MDIxLCAweEQyODk4QjE1LCAweDg1MjRFNTAxLCAweDg5MTAzMDU2LAorMHhFMjAzRDE4NywgMHgyMTIwRDQ4NywgMHhFMDBCNjU0MSwgMHgwNjU2NjU1RCwKKzB4RTQwRkQ1ODUsIDB4MjE0MEU3MDIsIDB4RDc3RTI1NzEsIDB4MDAwQkUwMDEsCisweDAwMEIyNzAyLCAweDJGRTZFMDAwLCAweERFODA0RjIyLCAweEM4ODA4NEUxLAorMHhENTdBODkyQywgMHgyMDA4ODU1NCwgMHg2MTAzOEYyOCwgMHg4NTUzRDc3QywKKzB4NjQwMzY2NzIsIDB4ODU2NjY1MEMsIDB4MzUyMDYyMEMsIDB4RDY3OThCMUUsCisweDY1MUNENzc0LCAweDI2NTE2NDRDLCAweDYwRTAyNzQxLCAweDg5MDRDODQwLAorMHg0MjBCRDI3NSwgMHhBMDAzMDAwOSwgMHhEMjY4MDAwOSwgMHgwMDA5NDIwQiwKKzB4MDAwOUIwOUYsIDB4RTIwMUQxNjcsIDB4NjBFMDIxMjIsIDB4Q0IwNEQ0NjQsCisweDYwNDAyRTAwLCAweDI0MDBDOTNGLCAweDYwMjNBMDAxLCAweDRGMjZFMDAwLAorMHg2RUY2MDAwQiwgMHgyRkI2MkZBNiwgMHgyRkQ2MkZDNiwgMHhEQTYyMkZFNiwKKzB4NjZBMUUyNDAsIDB4MzYyMkRDNUUsIDB4NjI2Mzg5MDAsIDB4NkVEMzZEMkMsCisweDRFMjEzNkQ4LCAweDRFMjEyQTYxLCAweERCNjFENDYwLCAweEU3MDBBMDBGLAorMHg3NzAxNjJCMiwgMHg3MTAyNjEyMywgMHg2NjIxMkIxMiwgMHg3MTAyNjIxMywKKzB4NjEyMTJCMTIsIDB4NjUxRDY2NkQsIDB4MzU2QzQ1MjgsIDB4NjI3QzI0NTIsCisweDhCRUQzMkUzLCAweEM5MDM2MEQzLCAweDhCMTA4ODAzLCAweDYxNzM2N0IyLAorMHgyQjEyNzEwMiwgMHg3MTAyNkUxMywgMHgyQjEyNjU3MSwgMHg2NTVENkRFMSwKKzB4NDIyODYyREQsIDB4MzI1Q0UxMDcsIDB4QTAwQzJDMTAsIDB4ODgwMjI0MjIsCisweEEwMDM4QjAxLCAweDg4MDFFMjAzLCAweEUyMDE4QjA1LCAweDY2QjIyQzIwLAorMHg2NTVENjU2MSwgMHhFNjBGMjQ1MiwgMHg2N0ExMkM2MCwgMHg4QjA1Mjc3OCwKKzB4REQzOERDNDQsIDB4RUIwMUVBMDAsIDB4MkRCMjJDQTIsIDB4NkRGNjZFRjYsCisweDZCRjY2Q0Y2LCAweDZBRjYwMDBCLCAweDJGRTYyRkQ2LCAweEUyNDBERDM2LAorMHgzNjIyNjZEMSwgMHg2MjYzODkwMCwgMHgzNjc4NjcyQywgMHg3NzAzREUzOCwKKzB4NDcyMTJENjEsIDB4NjRFMkQ2MzUsIDB4QTAwRTQ3MjEsIDB4NjU2MkUxMDAsCisweDYyNTM3MTAxLCAweDc0MDEyNDUwLCAweDI0MjA0MjE5LCAweDQ1Mjk3NDAxLAorMHg3NDAxMjQ1MCwgMHgyNDUwNDUxOSwgMHg2MjFDNzQwMSwgMHg4QkVFMzI3MywKKzB4NjZFMjQyMDAsIDB4NDIwMDYxRDEsIDB4MjExODM2MkMsIDB4MkU2MjhGMDYsCisweEREMUNENzI4LCAweEU1MDFFNDAwLCAweDJENTIyNzQyLCAweDAwMEI2RUY2LAorMHgyRkQ2NkRGNiwgMHg0RjIyMkZFNiwgMHhFRDBBRUUwMSwgMHg2NEUzQkM4NSwKKzB4QkM4QTY0RTMsIDB4NjJFQzdFMDEsIDB4OEJGNzMyRDcsIDB4QkM4REVFMDEsCisweDY0RTM2NEUzLCAweDdFMDFCQzkyLCAweDMyRDc2MkVDLCAweDRGMjY4QkY3LAorMHgwMDBCNkVGNiwgMHhEMTE4NkRGNiwgMHhENDE4OTIwRCwgMHg3MjEyMjEyMiwKKzB4MjQyMkQ2MTcsIDB4RDcxNzcyMDQsIDB4NzIyMDI2MjIsIDB4MjcyMkQxMTYsCisweDAwMEI3MjMwLCAweDEzN0EyMTIyLCAweDAwMjAzOUJBLCAweDAwMjAyOThBLAorMHgwMDFFMTAxNSwgMHgwMDIwMzlDMCwgMHgwMDFFMTAwMSwgMHgwMDIwMzk5NCwKKzB4MDAxRTExMDAsIDB4MDAyMDM5QkUsIDB4MDAyMDM5QUMsIDB4MDAxRTEwMDAsCisweDAwMjAzOUIwLCAweDAwMjAzOUJDLCAweDAwMjAyODdFLCAweDAwMUUxMDBDLAorMHgwMDIwMzlBOCwgMHgwMDIwMzlDNCwgMHgwMDIwMzlDOCwgMHgwMDIwMzlDQywKKzB4MDAyMDM5RDAsIDB4MDAyMDM5RDQsIDB4MDAyMDM5RDgsIDB4NEYyMjJGRTYsCisweEQ2NzA3RkZDLCAweDg4MDE2MDYwLCAweEUyMDE4OTUxLCAweDI2MjBCRkJCLAorMHhENTZFRDE2RCwgMHhERTZFNjAxMCwgMHg2NEUzNjU1MiwgMHg3NDAyQzg0MCwKKzB4OEQyMkQxNkMsIDB4RDI2Qzc1MDIsIDB4RTYwMUQ3NkMsIDB4RTcwNDI3MjIsCisweDc2MDE2MjU1LCAweDYyNkMyNDIxLCAweDhGRjkzMjczLCAweEQ0NjM3NDAyLAorMHg2MjQyRTYwMSwgMHg2NDBEODUyOCwgMHg2NzQ5NDQxOSwgMHgyNzVENjU3RSwKKzB4ODFFNDYwN0MsIDB4RTQxN0Q1NjIsIDB4Njc1NTc2MDEsIDB4MzI0MzYyNkMsCisweDhGRjkyMTcxLCAweEEwMjA3MTAyLCAweEQyNUUwMDA5LCAweEU2MDFENzVCLAorMHhFNzA0MjcyMiwgMHg3NjAxNjI1NSwgMHg2MjZDMjQyMSwgMHg4RkY5MzI3MywKKzB4RDQ1Mjc0MDIsIDB4NjI0MkU2MDEsIDB4NjQwRDg1MjgsIDB4Njc0OTQ0MTksCisweDI3NUQ2NTdFLCAweDgxRTQ2MDdDLCAweEU0MTdENTUzLCAweDY3NTU3NjAxLAorMHgzMjQzNjI2QywgMHg4RkY5MjE3MSwgMHg5Mjg5NzEwMiwgMHhEMjQ2MkUyMSwKKzB4NUUyM0Q3NEUsIDB4NjRGMjJGRTIsIDB4NjA0MzY1RjIsIDB4MjcwMEM5ODAsCisweEM5NjA2MDQzLCAweDgwNzE2MTAzLCAweEM5MDM2MDQzLCAweDgwNzI0NTE5LAorMHg2NUYyNjA1QywgMHg4MTcyNjZGMiwgMHg0NjE5NDYyOSwgMHg2MDZDNDUyOSwKKzB4NDAxODY0NUMsIDB4ODE3MzMwNEMsIDB4MjExODVFMjMsIDB4NjRGMjJGRTIsCisweDZFNEM2MkYyLCAweDYwMkM0MjE5LCAweDY2RjI2MkYyLCAweDQ2Mjk0MDE4LAorMHg0NjE5MzBFQywgMHg0MjI5ODE3NCwgMHg2NTJDNjA2QywgMHgzMDVDNDAxOCwKKzB4ODE3NThGMDcsIDB4MDAwOUJDOTYsIDB4MjIyODYyMEMsIDB4QTAwQTg5MDgsCisweDYwMTMwMDA5LCAweDhCMDM4ODQwLCAweDAwMDlCMDA5LCAweDAwMDlBMDAzLAorMHhFMjAyRDYyRiwgMHg3RjA0MjYyMiwgMHgwMDBCNEYyNiwgMHg0RjIyNkVGNiwKKzB4ODU1MkQ1MkEsIDB4ODgzMDYwMEQsIDB4ODgzMTg5MDMsIDB4QTAzNDg5MjMsCisweDg1NTUwMDA5LCAweEQ0MjhENzI3LCAweDg1NTMyNzAxLCAweDYxMERENjI3LAorMHgyNDEyNDExOCwgMHg0NjBCRDQyNiwgMHhENzIzMDAwOSwgMHhEMjI2RDQyNSwKKzB4NjU3MjQyMEIsIDB4RTIzMEQxMjAsIDB4NDIyODY3MTIsIDB4MjcyOUU2MjAsCisweDM3NjA0NjI4LCAweEQ2MjE4QjAzLCAweEEwMTZFMjAwLCAweEQ2MUYyNjIyLAorMHhBMDEyRTIwMiwgMHhEMTE4MjYyMiwgMHg2MjEyRTUzMCwgMHhFNjIwNDUyOCwKKzB4NDYyODIyNTksIDB4ODkwODMyNjAsIDB4RDQxQUQxMTksIDB4RTYwMUQ1MTMsCisweDIxNjA0NTBCLCAweDQ3MkJENzE4LCAweDRGMjY0RjI2LCAweDAwMDkwMDBCLAorMHgwMDAwMDYwQSwgMHgwMDIwMzlEQywgMHgwMDFFMTAwMCwgMHgwMDIwMzlDOCwKKzB4MDAyMDNERkMsIDB4MDAyMDNFMDgsIDB4MDAyMDNEQTAsIDB4MDAyMDM5QjAsCisweDAwMjAzREQwLCAweDAwMjAzRENFLCAweDAwMjAzREEyLCAweDAwMjAzOTk0LAorMHgwMDIwMzlDMCwgMHgwMDIwMzlBQywgMHgwMDIwMzlBOCwgMHgwMDIwMThBMiwKKzB4MDAyMDNCMUMsIDB4MDAyMDNCMjAsIDB4MDAyMDE4RUUsIDB4MDAyMDM5QzQsCisweDAwMUUxMDBCLCAweDAwMjAzQjM0LCAweDAwMTE0MDA0LCAweDRGMjIyRkU2LAorMHhERTk2N0ZGQywgMHgyMDA4ODRFOSwgMHgyRjAwOEQwNiwgMHhENjk1RDQ5NCwKKzB4MDAwOTQ2MEIsIDB4NjRGMEIxOUEsIDB4NjYyMEQyOTMsIDB4ODkwMjI2NjgsCisweEM5QkY2MEUwLCAweDdGMDQyRTAwLCAweDAwMEI0RjI2LCAweDAwMEI2RUY2LAorMHgyRkU2MDAwOSwgMHhERThENEYyMiwgMHg2MEUwRDY4RCwgMHhDQkMwRDQ4RCwKKzB4NjI2MDJFMDAsIDB4QzgwMzYwMkMsIDB4NDAyMTg5MDQsIDB4NzAwMTQwMjEsCisweDY2MDNBMDAyLCAweDY2MDM0MDA5LCAweEQ2ODc2MTZELCAweEU1MDBBMDA0LAorMHg3NTAxNjI2MiwgMHg3NDA0MjQyMiwgMHgzMjEzNjI1RCwgMHhEMjgzOEJGOCwKKzB4MDAwOTQyMEIsIDB4QzlCRjg0RTIsIDB4NEYyNjgwRTIsIDB4NkVGNjAwMEIsCisweDJGRTYyRkQ2LCAweDdGRkM0RjIyLCAweDYyNjBENjdELCAweDg5NDQyMjI4LAorMHhENTcyRTEwMCwgMHg2MDUwMjYxMCwgMHhDQjQwRDQ3QSwgMHgyNTAwNDQwQiwKKzB4OEQwNTIwMDgsIDB4NjJFMDZFMDMsIDB4NzEwNDYxMkMsIDB4MkYxMUEwMDYsCisweEQ0NzVENjZELCAweERENzU2NzYwLCAweDY1N0M0RDBCLCAweEUyM0M2RDFELAorMHg4QjAzM0QyNywgMHhEMjY3RDQ3MiwgMHgwMDA5NDIwQiwgMHg0RDIxNEQyMSwKKzB4QTAwNUQ3NzAsIDB4NjZFNkU0MDAsIDB4MzU3QzQ1MDgsIDB4NzQwMTI1NjIsCisweDM1RDM2NTRELCAweEQ3NkM4QkY3LCAweDYxNzJFMDAzLCAweDgxMTE0MDE4LAorMHg2RTcyNjBGMSwgMHg4MUUyNzAwQywgMHhENDY4NjE3MiwgMHhERDY4ODExMywKKzB4NEQwQkRFNjgsIDB4RTIwMTY1NzIsIDB4RDQ2NzJFMjIsIDB4NDIwQkQyNTUsCisweEQ2NTYwMDA5LCAweEM5M0Y2MDYwLCAweDdGMDQyNjAwLCAweDZFRjY0RjI2LAorMHg2REY2MDAwQiwgMHgyRkM2MkZCNiwgMHgyRkU2MkZENiwgMHhEMjVGNEYyMiwKKzB4NkI0MzZFNzMsIDB4NDIwQjZDNTMsIDB4MjAwODZENjMsIDB4NjQwMzhEMUMsCisweEU1MEVEMTQ5LCAweDMyNTI2MjEwLCAweDYwQzM4OTE2LCAweDgwNDEyNEIwLAorMHg4MTQxNjBEMywgMHhBMDA3RTUwMCwgMHg2NTVENjFCQywgMHgwMEVDNjA1MywKKzB4MzY0QzY2NTMsIDB4ODA2NDc1MDEsIDB4MzIxMzYyNUQsIDB4RDYzQjhCRjUsCisweEM5QkY2MDYwLCAweDI2MDBBMDA4LCAweEQyM0FENDRELCAweDZFRjY0RjI2LAorMHg2Q0Y2NkRGNiwgMHg2QkY2NDIyQiwgMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwKKzB4NkJGNjAwMEIsIDB4N0ZDNDRGMjIsIDB4NzIwMjYyRjMsIDB4MjI1MTJGNDEsCisweDQ1Mjk3MjAyLCAweDYwNjMyMjUxLCAweEU1QzRFNjgyLCAweDY3RjM4MTIxLAorMHg2NTVDNjY2QywgMHhFNDA4QkZCNiwgMHg0RjI2N0YzQywgMHgwMDA5MDAwQiwKKzB4MkY5NjJGODYsIDB4MkZCNjJGQTYsIDB4MkZENjJGQzYsIDB4NEYyMjJGRTYsCisweEUxMDA3RkM0LCAweDY1MTNFQ0ZGLCAweDZCMTM2Q0NELCAweERFMzZENzM1LAorMHhFREZGNjRGMywgMHhEODM1RUEwNCwgMHg2MDUzNjU1QywgMHgwMjdENDAwMCwKKzB4MzJDMDYyMkQsIDB4NjYwMzhEMEQsIDB4MDlFRDYwNjMsIDB4MjQ5MTAyN0QsCisweDI0MjE3NDAyLCAweDY5ODIwMkVELCAweDM5Mjg2MjJELCAweDc0MDIyODkyLAorMHg3NTAxNzEwNCwgMHg2MDYzNjI1QywgMHgwN0Q1MzJBMiwgMHgwRUI1OEZFNCwKKzB4MjQ0ODY0MUMsIDB4RTY4MDg5MDUsIDB4NjdGM0U1QzUsIDB4QkY3OTY2NkMsCisweDdGM0M2NTVDLCAweDZFRjY0RjI2LCAweDZDRjY2REY2LCAweDZBRjY2QkY2LAorMHgwMDBCNjlGNiwgMHhEMTFFNjhGNiwgMHg2MDEyRDIxRSwgMHhDQjIwRTQwNSwKKzB4MjEwMkU1MDAsIDB4MDAwQjIyNDIsIDB4MDAwMDIyNTIsIDB4MDAxRTEwMTcsCisweDAwMjAzQjM4LCAweDAwMjAxOEEyLCAweDAwMjAzOTA2LCAweDAwMUUxMDE1LAorMHgwMDFFMTBCRiwgMHgwMDExNzgwMCwgMHgwMDFFMTBGQywgMHgwMDIwMDYxMCwKKzB4MDAyMDM5MEMsIDB4MDAyMDJBRTIsIDB4MDAyMDNCM0MsIDB4MDAyMDE4RUUsCisweDAwMjAzQjU4LCAweDAwMTE3ODhDLCAweDAwMjAzOTA4LCAweDAwMjAzNEVDLAorMHgwMDIwMTUzMCwgMHgwMDFFMjEzMCwgMHgwMDIwM0I2MCwgMHgwMDIwMkFBNCwKKzB4MDAyMDNCNjQsIDB4MDAyMDM5NkMsIDB4MDAyMDM5NzQsIDB4MDAyMDNEOUMsCisweDAwMUMzNTAwLCAweDAwMUQ0MDA0LCAweEQ1NjREMTYzLCAweEU0MDBENzY0LAorMHgyMTQyRTIwRiwgMHgxNzQxMTE1NCwgMHhENTYyMjcyMiwgMHg5NjY5RDc2MiwKKzB4MTU0MTI1NzIsIDB4OTY2NjE1NjIsIDB4RTYwMTE1NjUsIDB4RDU1RjExNjUsCisweDY2NkNFNkY4LCAweDI1NDIyNTQyLCAweDI1NDIyNTQyLCAweDI1NDIyNTQyLAorMHgyNTYyMjU0MiwgMHg3NjAxRTcyNywgMHg2NzYzMjU3MiwgMHgyNTYyNzc5NywKKzB4RTcwNDI1NzIsIDB4MjU3MkUyNDgsIDB4RTIxOTI1MjIsIDB4RTI3MDI1MjIsCisweDI1NDIyNTQyLCAweDI1NDIyNTQyLCAweDI1MjIyNTQyLCAweDI1MjJFMjBDLAorMHgyNTQyMjU0MiwgMHgyNTQyMjU0MiwgMHgyNTQyMjU0MiwgMHgyNTQyMjU0MiwKKzB4MDAwQjE1NEEsIDB4RTIwODExNDUsIDB4MDAwOTQyMkIsIDB4MkZFNjJGRDYsCisweDdGRkM0RjIyLCAweEM4MjA2MDQzLCAweDZFNDM4RDAyLCAweDAwMDlCRTY3LAorMHhDODEwNjBFMywgMHhCRTY0ODkwMSwgMHg2MEUzMDAwOSwgMHg4OTAxQzg0MCwKKzB4MDAwOUJFODYsIDB4QzgwMTYwRTMsIDB4REQzRDg5MzgsIDB4QzgwMjYwRDAsCisweDJGMDA4RDAzLCAweDQ2MEJENjNCLCAweDYwRjAwMDA5LCAweDg5MDJDODA0LAorMHg0NjBCRDYzOSwgMHg2MkYwMDAwOSwgMHhDODgwNjAyMywgMHg2MEQwODkwMiwKKzB4MkQwMEM5N0YsIDB4QzgwMTYwMjMsIDB4RDYzNDg5MDYsIDB4MDAwOTQ2MEIsCisweDAwMDlBMDA3LCAweDUxNjMwNjAxLCAweDg5MDJDODA4LCAweDQ2MEJENjMwLAorMHg2MEYwMDAwOSwgMHg4OTAyQzgxMCwgMHg0MjBCRDIyRSwgMHhENTJFMDAwOSwKKzB4ODgwMjYwNTIsIDB4RDIyRDhCMDMsIDB4QTAwNUU2MDQsIDB4ODgwMTIyNjAsCisweEQyMkE4QjAyLCAweDIyNjBFNjAxLCAweDI1MjJFMjAwLCAweEM4ODA2MEUzLAorMHhEMjI3ODkyRCwgMHg2MEUzNkUyMCwgMHg4OTAyQzg4MCwgMHg0MjBCRDIyNSwKKzB4NjBFMzAwMDksIDB4ODkwMkM4NDAsIDB4NDIwQkQyMjMsIDB4NjBFMzAwMDksCisweDg5MDJDODAyLCAweDQyMEJEMjIxLCAweDYwRTMwMDA5LCAweDg5MERDODA0LAorMHhERDIwRDExRiwgMHgwMDA5NDEwQiwgMHgwMDA5QkYwRCwgMHgwMDA5QkY0QywKKzB4RDUxRUQ0MUQsIDB4MjQ3MEU3MDgsIDB4MjVEMkJGODUsIDB4QzgwODYwRTMsCisweEQyMUI4OTA1LCAweDRGMjY3RjA0LCAweDQyMkI2RUY2LCAweDdGMDQ2REY2LAorMHg2RUY2NEYyNiwgMHg2REY2MDAwQiwgMHgwMDFDNTgxQywgMHhBMDAwQTAwMCwKKzB4MDAxRDAxMDAsIDB4MDAxRDQwMDAsIDB4MDAwNDAwMjEsIDB4MDAxQzU4OUMsCisweDAwMUUxMDIxLCAweDAwMjAxQTg4LCAweDAwMjAxQUFBLCAweDAwMjAyMTBDLAorMHgwMDIwMUFDMiwgMHgwMDIwMUFEMCwgMHgwMDIwMzlDMCwgMHgwMDFFMTAwQiwKKzB4MDAxRTEwMjgsIDB4MDAyMDFCM0MsIDB4MDAyMDFCNDgsIDB4MDAyMDFBRDgsCisweDAwMjAxQUY2LCAweDEyMzQ1Njc4LCAweDAwMUUxMDAwLCAweDAwMTBGMTAwLAorMHgwMDIwMUIyNCwgMHg2NDRDRDZBNywgMHgwMDBCMzQ2QywgMHhENkE2MjQ1MCwKKzB4MzQ2QzY0NEMsIDB4MjQ1MDAwMEIsIDB4NjQ0Q0Q2QTQsIDB4MDAwQjM0NkMsCisweDYyNUMyNDUwLCAweDQyMDg2MTZELCAweDQyMDg0MTE5LCAweDQyMDA2MDE5LAorMHg2NzBFNjE0QywgMHhENDlFMzIxQywgMHg0MjAwMjA3RCwgMHgzMjRDQzkwRiwKKzB4MjIwMDAwMEIsIDB4NDIwODYyNUMsIDB4NDIwMDQyMDgsIDB4MzI0QzY0NEMsCisweDQyMDBENDk4LCAweDAwMEIzMjRDLCAweDJGRTYyMjYwLCAweDYxNEM0RjEyLAorMHg0MTAwRDQ5MywgMHg2NzEwMzE0QywgMHhFMjlGNjY2RCwgMHgyNzI5NDYxOSwKKzB4NkU1MzYyNjksIDB4NjcyRTY1NzMsIDB4NDIyMTIyN0QsIDB4NDIyMTQyMjEsCisweDc2MDE2NjJDLCAweEU0MDE0NjA4LCAweDM0RTg0NjA4LCAweDY0NEM0NjAwLAorMHgwNzFBMDQ2NywgMHgyMTUwMjU3QiwgMHgwMDBCNEYxNiwgMHg0RjIyNkVGNiwKKzB4RDI4NTdGRTgsIDB4ODgwMTYwMjEsIDB4RDI4NDhCN0IsIDB4MjY2ODY2MjEsCisweEQyODM4Qjc3LCAweDI2Njg2NjIxLCAweEU1MEY4QjczLCAweEU0MDFCRkEyLAorMHhCRkE0RTUwMSwgMHhFNTg2RTQwMCwgMHhFNDAwNjU1QywgMHgyRjUwQkZBNCwKKzB4QkZBMUU0MDEsIDB4RTYwMkU1MDYsIDB4NjA2MzQ2MTgsIDB4ODFGMkU0MDEsCisweDY1NDNCRjlGLCAweEU0MDE4NUYyLCAweEJGQUI2NTQzLCAweDg1RjI2NjAzLAorMHg2NTQzRTQwMSwgMHg2NjAzQkZCMSwgMHhFNDAyNjVGMCwgMHg2MDUzNzU2QywKKzB4ODBGOEJGODAsIDB4QkY4MkU0MDIsIDB4ODRGOEU1MTIsIDB4NzA5MEU0MDIsCisweDY1MDNCRjgyLCAweDQ2MThFNjAyLCAweDgxRjY2MDYzLCAweEJGODBFNDAyLAorMHg4NUY2RTUwMCwgMHg2NjAzRTQwMiwgMHhFNTAwQkY4QywgMHhFNDAyODVGNiwKKzB4QkY5MjY2MDMsIDB4RTVGRUU1MDAsIDB4RTAxMDY1NUMsIDB4QkY2MUU0MDMsCisweEU1MTMwRjU0LCAweEU0MEVCRjYzLCAweDA1RkNFMDEwLCAweEJGNjNFNDBFLAorMHhFNTAwNzU4NSwgMHhCRjY0RTQwMywgMHhFNTAwRTY0MCwgMHhCRjcxRTQwMywKKzB4RTUwMEU2NDAsIDB4QkY3OEU0MDMsIDB4RTVGRkU2NDAsIDB4RTAxNDY1NUMsCisweEJGNDdFNDA0LCAweEU0MEYwRjU0LCAweEU1MDRCRjQ5LCAweDA1RkNFMDE0LAorMHhCRjQ5RTQwRiwgMHhFNTAxNzU4NCwgMHhCRjRBRTY0MCwgMHhFNTAxRTQwNCwKKzB4QkY1N0U2NDAsIDB4RTUwMUU0MDQsIDB4RTQwNEU2NDAsIDB4QUY1QzdGMTgsCisweDdGMTg0RjI2LCAweDAwMEI0RjI2LCAweDRGMjIwMDA5LCAweEQyNDI3RkYwLAorMHg4ODAxNjAyMSwgMHhEMjQxOEI3MSwgMHgyNjY4NjYyMSwgMHhEMjQwOEI2RCwKKzB4MjY2ODY2MjEsIDB4RTUwRjhCNjksIDB4RTQwMUJGMUMsIDB4QkYxRUU1MDEsCisweEU1ODZFNDAwLCAweEU0MDA2NTVDLCAweDJGNTBCRjFFLCAweEJGMUJFNDAxLAorMHhFNDAxRTUwNiwgMHhCRjFDNjU0MywgMHhFNDAxRTY0MCwgMHhCRjI5NjU0MywKKzB4RTQwMUU2NDAsIDB4QkYzMDY1NDMsIDB4NjVGMEU2NDAsIDB4NzU2Q0U0MDIsCisweEJFRkY2MDUzLCAweEU0MDI4MEY0LCAweEU1MTJCRjAxLCAweEU0MDI4NEY0LAorMHhCRjAxNzA5MCwgMHhFNjQwNjUwMywgMHhCRjAyRTQwMiwgMHhFNjQwRTUwMCwKKzB4QkYwRkU0MDIsIDB4RTY0MEU1MDAsIDB4QkYxNkU0MDIsIDB4RTVGRUU1MDAsCisweDYwNTM2NTVDLCAweEJFRTVFNDAzLCAweEU1MTM4MEY4LCAweEU0MEVCRUU3LAorMHhFNDBFODRGOCwgMHhCRUU3NzA4NSwgMHhFNTAwNjUwMywgMHhCRUU4RTY0MCwKKzB4RTUwMEU0MDMsIDB4QkVGNUU2NDAsIDB4RTUwMEU0MDMsIDB4QkVGQ0U2NDAsCisweEU1RkZFNDAzLCAweDYwNTM2NTVDLCAweEJFQ0JFNDA0LCAweEU0MEY4MEZDLAorMHhFNTA0QkVDRCwgMHhFNDBGODRGQywgMHhCRUNENzA4MywgMHhFNTAxNjUwMywKKzB4QkVDRUU2NDAsIDB4RTUwMUU0MDQsIDB4QkVEQkU2NDAsIDB4RTUwMUU0MDQsCisweEU0MDRFNjQwLCAweEFFRTA3RjEwLCAweDdGMTA0RjI2LCAweDAwMEI0RjI2LAorMHgwMDAwMDAwOSwgMHgwMDFFMTAyRiwgMHgwMDFFMTA4MCwgMHgwMDFFMTA5MCwKKzB4MDAxRTEwM0YsIDB4MDAxRTEwM0UsIDB4MDAyMDM5QkEsIDB4MDAyMDM5QkMsCisweDAwMjAzOUJFLCAweEQyMUREMTFDLCAweDY2MjA2MDEwLCAweDY3NkM3MDAxLAorMHgzNzAwQzkwRiwgMHhFNTAwOEQxMywgMHg2NzEwNjIxMCwgMHg3NzAxNjIyQywKKzB4NjQyMzIxNzAsIDB4RDYxNjYwMTAsIDB4NDQwODQ0MDgsIDB4MzQyOEM5MEYsCisweDYyNjAyMTAwLCAweDcyMDFENTEzLCAweDQ0MDgyNjIwLCAweDAwMEIzNTRDLAorMHhEMTBGNjA1MywgMHgyNTU4NjUxMCwgMHhFNjAwOEQxMywgMHhENjBERDQwQiwKKzB4NjU1QzY1NDAsIDB4NDcwODY3NTMsIDB4Mzc1ODQ3MDgsIDB4NDcwODY1NDAsCisweDI0NTA3NTAxLCAweDM2N0M2MDQwLCAweDI0MDBDOTBGLCAweDcyRkY2MjEwLAorMHgwMDBCMjEyMCwgMHgwMDAwNjA2MywgMHgwMDIwMzkwNSwgMHgwMDIwMzkwNCwKKzB4MDAyMDM5MDYsIDB4MDAyMDM1MkMsIDB4N0ZGQzRGMjIsIDB4RTY4MEQxOUYsCisweDY2NkM2MjEyLCAweEQyOUUyRjIyLCAweDY3RjM2NTYzLCAweDQyMEI3NTQyLAorMHg3RjA0RTQwNCwgMHgwMDBCNEYyNiwgMHhFNjgwMDAwOSwgMHhEMjk4NjY2QywKKzB4RTcwMDY1NjMsIDB4NDIyQjc1NDAsIDB4RTY4MDY0NzMsIDB4RDI5NDY2NkMsCisweEU3MDA2NTYzLCAweDQyMkI3NTQzLCAweDJGODY2NDczLCAweDJGQTYyRjk2LAorMHgyRkM2MkZCNiwgMHgyRkU2MkZENiwgMHg3RkNDNEYyMiwgMHhEQzhFRDI4RCwKKzB4NzIwMTFGMjEsIDB4REI4RDFGMjIsIDB4RDE4RURFOEQsIDB4NjYxMjUyMTEsCisweDhCMDEzNjIwLCAweDAwMDlBMEU1LCAweEM5MDM2MDYxLCAweDhCMDE4ODAxLAorMHgwMDA5QTBERiwgMHhEMjg4RDQ4NywgMHhFRDg0NDIwQiwgMHgyRjAyNTUwMywKKzB4MzBEMDg0NUMsIDB4QTBCODg5MDEsIDB4RDE4NDAwMDksIDB4NjI2QzY2MTAsCisweDg4MDE2MDIzLCAweEQxODI4QjY4LCAweDYyMTAxRkMzLCAweDg5NUIyMjI4LAorMHhFMDAzRDQ4MCwgMHg0MDE4Njc0MiwgMHg2ODQyMTc3MiwgMHhENTdFRTkwMCwKKzB4ODE4MTZEQjMsIDB4N0QwNDIxOTAsIDB4NjdEMjZBQjIsIDB4NjRFMjY4NTIsCisweDFGNDkxRjU3LCAweDc0MDQ2NEUzLCAweDFGQTQ2NTQyLCAweDY1NDMxRjVBLAorMHg2MjUyNzVGOCwgMHgxRjc2MUZENSwgMHg2RDUzMUYyQiwgMHhEQTc0RDc3MywKKzB4N0Q5NEQyNzQsIDB4NjhEMjFGODgsIDB4NkFBMjY5NzIsIDB4RDE3MjYwMjIsCisweDIyMDJDQjIwLCAweEUxNDAxRjFDLCAweDc2MDFFNjAwLCAweDMyMTM2MjZELAorMHg1NkY0OEJGQiwgMHg1MkY2NTFGNSwgMHgyMTIyMkI2MiwgMHg1MkY4NTFGNywKKzB4MjEyMjU2RjksIDB4MkU2MjUxRkEsIDB4NTFGQjI0MTIsIDB4MkQ4MjI1MTIsCisweEQ5NjYyNzkyLCAweDI5QTJERDVGLCAweDZBRDJEOTY1LCAweEQ5NjQ2ODkyLAorMHg2OEQyMUE4NCwgMHg2MDgxREE2MywgMHgyODAxQ0IwMSwgMHhEODYyNjZEMiwKKzB4MkE2MjI5NjIsIDB4RUQwMTVBRkMsIDB4MkFEMjQ4MEIsIDB4MkFEMjREMTgsCisweDYyRDJERDVFLCAweDJEMjI3MjAxLCAweEQxNTA1NkYzLCAweEUyMDI2MDYyLAorMHgyNjAyQ0IwMSwgMHgyMTIwQTAzRCwgMHg4QjNBMjIyOCwgMHhFNDAxREQ1OCwKKzB4MjE0MEU2MDAsIDB4RTAxQzJENjIsIDB4QzgwMTAwNUMsIDB4RDQ1NThCMEEsCisweEU2MDBENzU1LCAweEVEN0QyNDcyLCAweDYyNkM3NjAxLCAweDhCRkIzMkQzLAorMHgyNEQyREQ1MiwgMHhFMkZFNjhDMiwgMHgyQzgyMjgyOSwgMHgwOTVDRTAxRSwKKzB4RTAxRjVERjEsIDB4MEE1QzJEOTAsIDB4NzUxMDUxRjIsIDB4RUQwNjIxQTAsCisweEQ3NEJFNjAwLCAweDg0NTZENDRCLCAweDI3MDA3NjAxLCAweDY5NkM2ODU0LAorMHgyNDgwMzlEMywgMHg4RkY2NzQwMSwgMHhEQTQ3NzcwMSwgMHgyQTEwRTE5NCwKKzB4RTIwMDdBMDEsIDB4N0EwRjJBMjAsIDB4RDEzMEU4MDUsIDB4NjYxMDJBODAsCisweDYwMjM2MjZDLCAweDg5MDg4ODAxLCAweEQyNDBENDJBLCAweDQyMEI2NUYyLAorMHhEMTMxRUQwMSwgMHhBRjMwNEQxOCwgMHg2NUYyMjFEMiwgMHg4NTUzRDQzQywKKzB4NjIwRDY2NDIsIDB4ODkwNzMyNjIsIDB4RDEzQkQ0M0EsIDB4MDAwOTQxMEIsCisweEU2MDFENzNBLCAweDI3NjJBRjFBLCAweEQxMzRENDFFLCAweDQxMEI2NUYyLAorMHhEMTI1RUQwMSwgMHhENjM3RDQzNiwgMHg0NjBCNEQxOCwgMHhBRjBEMjFEMiwKKzB4N0YzNDAwMDksIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkFGNjZCRjYsCisweDAwMEI2OUY2LCAweDRGMjI2OEY2LCAweDg1NDY3RkY0LCAweDJGMDFFNjgxLAorMHg2NjZDODU0NywgMHg4NTQ4ODFGMSwgMHg4MUYyRDIwOSwgMHg2N0YzODU0MiwKKzB4ODU0MzgxRjMsIDB4ODFGNEU0MEMsIDB4NjU2MzYwNTMsIDB4NDIwQjgxRjUsCisweDdGMEM3NTQwLCAweDAwMEI0RjI2LCAweDAwMDAwMDA5LCAweDAwMUMzRDlDLAorMHgwMDIwMjQ1NCwgMHgwMDExNzc5QSwgMHgwMDFDMzZGOCwgMHgwMDFDM0I5QywKKzB4MDAxQzM3MDQsIDB4MDAyMDM1MjQsIDB4MDAyMDE0QTAsIDB4MDAyMDM5MTUsCisweDAwMjAzOTE0LCAweDAwMjAzOTEwLCAweDAwMUMzRDk4LCAweDAwMUMzQkI0LAorMHgwMDFDNTk2MCwgMHgwMDFDMzUwMCwgMHgwMDFDM0QzMCwgMHgwMDFDODk2MCwKKzB4MDAyMDM0RkMsIDB4MDAxQzNEMDAsIDB4MDAyMDE2MEMsIDB4MDAxMTc3MzAsCisweDAwMjAzOTE4LCAweDAwMUM1ODJDLCAweDIwMDBBMDAwLCAweDAwMDBBMDAwLAorMHgwMDExNzc4QywgMHgwMDExNzc5MiwgMHgwMDExNzc4OCwgMHgwMDIwMTRDQywKKzB4MDAyMDM4RUMsIDB4MDAyMDM0RUMsIDB4MDAyMDE1MzAsIDB4MDAxRTIxMzAsCisweDAwMjAzRDdDLCAweDAwMjAxOEEyLCAweDJGOTYyRjg2LCAweDJGQjYyRkE2LAorMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwgMHhEMTlCN0ZFQywgMHgyRjEyRTAwMCwKKzB4NjEwM0Q0OUEsIDB4MUY0MjgxRjIsIDB4REQ5QURBOTksIDB4RDY5QTY4MTMsCisweEUwMDE0ODA4LCAweDQ2MEJERTk5LCAweDM4RUM0ODAwLCAweDY1QTIxRjAzLAorMHgzNTIwNTJBMSwgMHhBMjNFOEIwMSwgMHg2MDUxMDAwOSwgMHg4ODAxQzkwMywKKzB4QTIzODhCMDEsIDB4NTI1MzAwMDksIDB4MzJFMERFOTEsIDB4RDk5MThCMTAsCisweDY0QTM0OTBCLCAweDRCMEJEQjkwLCAweERFOTA2NDAzLCAweEQ3OTFENjkwLAorMHhFQzAxRDU5MSwgMHgyRTAyRTEwMCwgMHgyNzEwMjZDMCwgMHgyNTAyQUZERiwKKzB4QzgwMTg1NTEsIDB4QTE1NzhCMDEsIDB4NjI1MTAwMDksIDB4NDIwMDYyMkQsCisweDVFNTMzNjZBLCAweDg1RTIyMjZELCAweEM5MDM2NDJDLCAweDg1RTM2NjAzLAorMHg2MDUzNjUwRCwgMHg0MDIxNDAyMSwgMHg0NTAwQzkzRiwgMHgzMjJBNjcwMywKKzB4NjA1MzI1MkQsIDB4QzkwMUQxN0YsIDB4NjAxMDZDMDMsIDB4ODgwMUQ5N0YsCisweERCN0Y4QjA1LCAweDIxMjBFMjAwLCAweENCMDE2MEIyLCAweEQxN0QyQjAyLAorMHg4ODAxNjAxMSwgMHg2NUEyOEIwQSwgMHg4RDA0MjQ0OCwgMHg5QjlFNjI1MSwKKzB4QTAwMzIyQjksIDB4OTE5QjI1MjEsIDB4MjUyMTIyMUIsIDB4MzdCM0VCMTAsCisweDI0NDg4OTVFLCAweEQ0NzM4QjA3LCAweDIyMjg2MjQxLCAweDYwNjM4OTAzLAorMHhBMDU3ODFGOCwgMHhENTcwNjQ3MywgMHg0NjA4NDYwOCwgMHg4NUUyNjI3MywKKzB4NDYwMDZCNTAsIDB4MzYyQzQyMDAsIDB4MkJCOEM5MTAsIDB4OEYxRjY0NjMsCisweDI2Njg2NjAzLCAweEQyNjk4OTExLCAweDA2MkQ2MDQzLCAweDQxMTk2MTZELAorMHg2QjBFNjAxOSwgMHg4MUY4MjBCRCwgMHg4ODAxNjBDMywgMHg2NDZDOEYyQywKKzB4ODgwRjYwNzMsIDB4QTAyNzhCMUIsIDB4RDI2MTAwMDksIDB4MDUyRDYwNDMsCisweDQxMTk2MTVELCAweDY3MEU2MDE5LCAweDY0NUMyMDdELCAweDgxRjhBMDFDLAorMHg4OTBGMjY2OCwgMHg2MDQzRDI1QiwgMHg2QjVEMDUyRCwgMHg2MEI5NEIxOSwKKzB4MjAxRDYxMEUsIDB4NjBDMzgxRjgsIDB4OEYwRDg4MDEsIDB4NjQ3MzY0NUMsCisweEVDMDBBMDBBLCAweDYwNDNEMjU0LCAweDYyNUQwNTJELCAweDYwMjk0MjE5LAorMHgyMDdENjcwRSwgMHg4MUY4NjQ1QywgMHg4ODAyODVGOCwgMHg4NUUxODkwQSwKKzB4OEQwN0M4MjAsIDB4RTZEQzYyMDMsIDB4NjAyMzIyNjksIDB4ODFFMUEwMDIsCisweDY0NENFNEZGLCAweDYyMTBEMTQ5LCAweDg5MDEyMjI4LCAweDY0NENFNEZGLAorMHg2NTRERUJGRiwgMHgzNUIwNkJCQywgMHhEQjM2OEIyQiwgMHg2NEEzNEIwQiwKKzB4NDEwQkQxMzUsIDB4NTQwMzY0MDMsIDB4ODU0NDZFMDMsIDB4Qzk0OERCNDAsCisweERDNDA4ODA4LCAweEJFQUU4QjAxLCAweDY0QjNFNTAyLCAweDY1RTM0QzBCLAorMHhEQjNERUMwMSwgMHhEMTNEMkRDMiwgMHg2MjEyNjBCMiwgMHg3MjAxNzAwMSwKKzB4MjEyMjg4MDUsIDB4MkIwMjhGMDgsIDB4NjY2Q0U2ODAsIDB4NjU2M0QyMzgsCisweDc1NDlFNzAwLCAweDY0NzM0MjBCLCAweEEwMzBENDM2LCAweDdGRkYwMDA5LAorMHg4NUUyODAwMCwgMHgyMEI5RUJGQywgMHg2MTAzODFFMiwgMHg5NDJBODVFMywKKzB4NjIwMzIwNDksIDB4NDUwODg1RjgsIDB4ODFFMjIwMUIsIDB4QzkwMTYwQzMsCisweDQwMDg0MDE4LCAweDQwMDg0MDA4LCAweDQwMDAyMjVCLCAweDYwMjMyMjBCLAorMHg4NUU0ODFFMywgMHg0MTE4RTEwOCwgMHg4MUU0MjAxQiwgMHhFNDAyNjJBMiwKKzB4MjBCOTg1MjEsIDB4NjdBMjgxMjEsIDB4Q0IwMTYwNzEsIDB4ODVGODI3MDEsCisweDg5MDMzMDQyLCAweEVDRTc4NUUyLCAweDgxRTIyMEM5LCAweDQ5MEJENDFFLAorMHhBMDNCMDAwOSwgMHg3RTAzMDAwOSwgMHgwMDFDM0QzMCwgMHgwMDIwM0Q4OCwKKzB4MDAyMDM0RkMsIDB4MDAxRTIxMkMsIDB4MDAyMDMzRTAsIDB4MDAxQzNEMDAsCisweDAwMTE3NzgwLCAweDAwMjAxNEEwLCAweDAwMjAxNjZDLCAweDAwMTE3NzBDLAorMHgwMDIwMzkxNCwgMHgwMDIwMzkxNSwgMHgwMDIwMzkxMCwgMHgwMDIwMThBMiwKKzB4MDAxQzM2RjgsIDB4MDAyMDM5ODgsIDB4MDAyMDNEOTgsIDB4MDAyMDNCN0MsCisweDAwMjAzQkZDLCAweDAwMjAzQzdDLCAweDAwMjAzQ0ZDLCAweDAwMjAzOTAwLAorMHgwMDIwMzRGNCwgMHgwMDIwMTRDQywgMHgwMDIwMzk4QywgMHgwMDIwMzk5MCwKKzB4MDAyMDI0NTQsIDB4MDAyMDNEODAsIDB4MDAyMDNEODQsIDB4NjAyMjYyRjIsCisweDQwMDk0MDE5LCAweEM5MEY0MDA5LCAweDhCMEI4ODBBLCAweDYwRTJERThDLAorMHg0MDA5NDAxOSwgMHhDOTBGNDAwOSwgMHg4QjAzODgwOCwgMHhDQjAxNjBBMiwKKzB4MjgwMkEwMDYsIDB4NjVFMkRFODcsIDB4MkU1Mjc1MDEsIDB4Mjg2MjY2QTIsCisweDUyRjM2NkYyLCAweDI2MjJBRTgzLCAweEQyODM4NTUxLCAweERFODNDODAyLAorMHhBMDk1OEIwMSwgMHg0MjBCMDAwOSwgMHg0RTBCNjRBMywgMHg1RTAzNjQwMywKKzB4ODVFNDY1MDMsIDB4NDkxOEU5MDgsIDB4RDc3RDIwOUIsIDB4RTA0QzgxRTQsCisweERDN0MwQjdFLCAweDdCMDFEOTdDLCAweDYxQzIwN0I2LCAweDcxMDE2NjkwLAorMHg4RDA2MjY2OCwgMHhENDc5MkMxMiwgMHg0MjBCRDI3OSwgMHhBMDcwRUIwMSwKKzB4NjI1MTJEQjIsIDB4NEIxOEVCMEYsIDB4MjJCOUUxMDIsIDB4MzIxMDQxMTgsCisweDg1NTE4QjBGLCAweDIwMjlFMkZDLCAweDYwNTE4MTUxLCAweENCMDE3MkUwLAorMHg4NUUxMjUwMSwgMHgyMDI5OTRBMywgMHg4NUU0ODFFMSwgMHhBMDUyMjA0OSwKKzB4Njc1MTgxRTQsIDB4NDcxOTY3N0QsIDB4NjY3RTY3NzksIDB4NzcwMTI3NkQsCisweDY5MDM2MDdDLCAweDg4MDE0OTE4LCAweDI1OTE4RjNFLCAweDZCMTJEMTYxLAorMHgyMUIyN0IwMSwgMHg2NjBEODVFMywgMHg0MDIxNjA2MywgMHhDOTNGNDAyMSwKKzB4NkMwMzQ2MDAsIDB4MjYyRDMyMkEsIDB4QzgwMTYwNjMsIDB4REI1RUQxNUQsCisweDk2N0Q4OTAxLCAweEU2MDAyQzZCLCAweDY2NkM2N0NELCAweDQwMDA2MDYzLAorMHg2MjJEMDIxRCwgMHg4RDBFMzI3MCwgMHg2MDQzNjQwMywgMHhFOUZGMDIxRCwKKzB4OEIwMTMyOTAsIDB4MDFDNUEwMDcsIDB4NjI2Qzc2MDEsIDB4MzI5MkU5MDQsCisweDY0NkM4QkVCLCAweDYwNDM0NDAwLCAweEQxNTAwNEJELCAweDBCNDU3NDAxLAorMHg2NjlENjkxMSwgMHg4OTA3MzY3MCwgMHg2MDJENjIxMSwgMHg4OTAzODhGRiwKKzB4RTIwMURCNEIsIDB4MkIyMDIxQzEsIDB4RUNGQzg1NTEsIDB4ODE1MTIwQzksCisweENCMDE2MDUxLCAweERDNDcyNTAxLCAweDY0QTM0QzBCLCAweDUxRjM2NkYyLAorMHg4NUVGMjYxMiwgMHg1NEYyRDI0NCwgMHg2NTBENDIwQiwgMHgwMDA5QURFNywKKzB4RTUwMERDNDIsIDB4NDIwQjJDNTIsIDB4NEUwQjY0QTMsIDB4NTQwMzY0MDMsCisweDg1NDQ2RTAzLCAweDY3MDNFOTA4LCAweDY1MDM0OTE4LCAweDI3OTk4NTQxLAorMHhEQjMyMzc5MCwgMHg4RjBCRDkzMiwgMHg2MDEzNjEwRCwgMHg4QjA3QzgyMCwKKzB4Qzk0ODYwNTMsIDB4OEIwMzg4MDgsIDB4RTUwMUJENEQsIDB4MDAwOUEwMDUsCisweDIxMjhEMjMzLCAweEJENDY4OTAxLCAweDY0QjNFNTAwLCAweDQ5MEI2NUUzLAorMHhBREJDRUMwMSwgMHg4NUYyMkRDMiwgMHg3MDAxRUUwNCwgMHgzMUU3NjEwRCwKKzB4OEQwMjgxRjIsIDB4QURBOTdBMDgsIDB4N0YxNDAwMDksIDB4NkVGNjRGMjYsCisweDZDRjY2REY2LCAweDZBRjY2QkY2LCAweDAwMEI2OUY2LCAweEY3RkY2OEY2LAorMHgyRkU2ODAwMCwgMHhEMjIzNEYyMiwgMHg2MEUzNkUyMiwgMHg4RDAyQzg0MCwKKzB4QkJGOTIyRTIsIDB4RTI0MDAwMDksIDB4MkUyODQyMTgsIDB4QkMwNDg5MDEsCisweDYwRTMwMDA5LCAweDg5MDVDODEwLCAweEQyMUNENDFCLCAweDAwMDk0MjBCLAorMHgwMDA5QkMwMywgMHhDODA1NjBFMywgMHhCRDZEODkwMSwgMHg2MEUzMDAwOSwKKzB4ODkwMkM4MDIsIDB4QUMwMDRGMjYsIDB4NEYyNjZFRjYsIDB4NkVGNjAwMEIsCisweDAwMUMzRDNDLCAweDAwMTE3NzYwLCAweDAwMjAxNEEwLCAweDAwMjAxNjZDLAorMHgwMDIwMzQ4QywgMHgwMDIwM0Q5QywgMHgwMDIwMzkwMCwgMHgwMDIwMzRGNCwKKzB4MDAyMDE0Q0MsIDB4MDAyMDM5NkMsIDB4MDAyMDM5NzQsIDB4MDAyMDM5NjgsCisweDAwMjAzOTZBLCAweDAwMjAxNTMwLCAweDAwMjAxOEVFLCAweDAwMjAzOThDLAorMHgwMDAwODAwMCwgMHgwMDFDMzUxMCwgMHgwMDIwM0Q5MCwgMHgwMDIwMThBMiwKKzB4MDgwQTBDMEUsIDB4MDAwMjA0MDYsIDB4MUExQzFFMjAsIDB4MTIxNDE2MTgsCisweDJFMzAzMjM0LCAweDI2MjgyQTJDLCAweDNBM0MzRTQwLCAweDZDNjI1NjQ4LAorMHg0MTExMkYyNiwgMHhFMjIwOEYxOCwgMHg4OTBCMzEyMywgMHgzMjFDRDIwNCwKKzB4RDEwMjYyMjAsIDB4NDEyQjMxMkMsIDB4MDAwOTAwMDksIDB4MDAyMDM0MEEsCisweDAwMjAzM0MwLCAweDAwMEJFMDAwLCAweDQwMDA2MkY2LCAweDQwMDA0MDAwLAorMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwgMHg2MkY2MDAwQiwgMHg0MDAwNDAwMCwKKzB4NDAwMDQwMDAsIDB4NDAwMDQwMDAsIDB4NDAxODQwMDAsIDB4NjJGNjAwMEIsCisweDQwMDA0MDAwLCAweDQwMDA0MDAwLCAweDQwMDA0MDAwLCAweDQwMjg0MDAwLAorMHg2MkY2MDAwQiwgMHg0MDAwNDAwMCwgMHg0MDE4NDAwMCwgMHgwMDBCNDAyOCwKKzB4QzkwRjYyRjYsIDB4NDAwNTQwMDUsIDB4NDAwNTQwMDUsIDB4NjJGNjAwMEIsCisweDQwMDVDOTA3LCAweDQwMDU0MDA1LCAweDYyRjYwMDBCLCAweDQwMDVDOTAzLAorMHgwMDBCNDAwNSwgMHhDOTAxNjJGNiwgMHgwMDBCNDAwNSwgMHgwMDAwNjJGNiwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHg1NDRGMEQwQSwKKzB4NDYyMDUzNTUsIDB4MDAwMDNBNTcsIDB4MjA2Qzc1NEEsIDB4MzIyMDMxMjAsCisweDIwMzgzMDMwLCAweDMyM0EzMTMyLCAweDMyMzEzQTM3LCAweDAwMDAwMDAwLAorMHgwMDAwMEQwQSwgMHgwMDAwMDA0MywgMHg0MjcwNzM3MiwgMHgzRDIwNjY3NSwKKzB4NTU0RTIwM0QsIDB4MjAyQzRDNEMsIDB4NkU0OTY3N0EsIDB4NEU0OTcyNzQsCisweDZENzU0RTUxLCAweDAwMDAwMDNELCAweDYxNzY2RTQ5LCAweDIwNjQ2OTZDLAorMHg3MjY1NzM3NSwgMHgyMDcyNkYyMCwgMHgyMDc5NjU2QiwgMHgwMDIxNDQ0OSwKKzB4NTI1MDQ1NDUsIDB4NTcyMDRENEYsIDB4NjU3NDY5NzIsIDB4NjQ2MTIwMkMsCisweDAwM0Q3MjY0LCAweDZDNjE3NjIwLCAweDAwMDAwMDNELCAweDAwMDAwQTBELAorMHg0MzVGNEQ1QSwgMHg0NjVGNDQ0RCwgMHg0QzQ0NUY1NywgMHg0OTRFNDk1RiwKKzB4MDAwMDAwNTQsIDB4NkU2QjZFNTUsIDB4MjA2RTc3NkYsIDB4NkQ2RDZGNjMsCisweDNENjQ2RTYxLCAweDAwMDAwMDAwLCAweDIwM0EzMDUxLCAweDAwMDAwMDIwLAorMHgyMDNBMzE1MSwgMHgwMDAwMDAyMCwgMHgyMDNBMzI1MSwgMHgwMDAwMDAyMCwKKzB4MjAzQTMzNTEsIDB4MDAwMDAwMjAsIDB4MjAzQTM0NTEsIDB4MDAwMDAwMjAsCisweDJCNDM0NzQxLCAweDczNjk2RjRFLCAweDYxNDMyMDY1LCAweDcyNjI2OTZDLAorMHg2RjY5NzQ2MSwgMHg2MTY2MjA2RSwgMHg2RjIwNkM2OSwgMHg2OTc0MjA2RSwKKzB4MEQwQTY1NkQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwNzIsIDB4MDAyMDUyMjAsCisweDAwMDAwRDBBLCAweDYyNzM1NTc2LCAweDc0NzM3MjVGLCAweDAwMDAwQTBELAorMHg2MjczNTU3NiwgMHg3Mzc1NzM1RiwgMHg2NDZFNjU3MCwgMHgwMDAwMEEwRCwKKzB4NjI3MzU1NzYsIDB4NzM2NTcyNUYsIDB4MDAwQTBENkQsIDB4MDAwMDAwNDQsCisweDQ0Mzg3NTcwLCAweDcyNjM3MzY1LCAweDZGNzQ3MDY5LCAweDNENTg0NTcyLAorMHgwMDAwMDAwMCwgMHgwMDAwMDA0NywgMHgwMDAwMDA0MiwgMHg3Mjc0NkU0OSwKKzB4NkQ2NTIwNTEsIDB4MkM3OTc0NzAsIDB4NDk2NzdBMjAsIDB4NDk3Mjc0NkUsCisweDc1NEU1MTRFLCAweDAwMDAzRDZELCAweDY1NEM3MjQ1LCAweDAwMDAwMDZFLAorMHgwMDAwMDA0OSwgMHgyMDc0NkY0RSwgMHg3NTZGNkU2NSwgMHg0OTIwNjg2NywKKzB4NDIyMDUxNEUsIDB4MEEwRDY2NzUsIDB4MDAwMDAwMDAsIDB4MDAwMDAwRkYsCisweDAwMDIwMDAxLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDEwRTAxMEQsCisweDAwMDIwMDAzLCAweDAxMDkwMTA4LCAweDAwMDIwMTBBLCAweDAyMDAwMDAzLAorMHgwMjAyMDIwMSwgMHgwMjA0MDIwMywgMHgwMjA2MDIwNSwgMHgwMjAyMDIwMCwKKzB4MDIwNDAyMDMsIDB4MDIwQzAyMEIsIDB4MDIwRTAyMEQsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMDAwMDBGRiwKKzB4MDAwMjAwMDEsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMTBFMDEwRCwKKzB4MDAwMjAwMDMsIDB4MDEwOTAxMDgsIDB4MDAwMjAxMEEsIDB4MDAwMzAwMDMsCisweDAyMDIwMjAxLCAweDAyMDQwMjAzLCAweDAyMDYwMjA1LCAweDAyMDIwMjAwLAorMHgwMjA0MDIwMywgMHgwMjBDMDIwQiwgMHgwMjBFMDIwRCwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAxMEUwMTBELAorMHgwMEZGMDEwRiwgMHgwMTA5MDEwOCwgMHgwMTBCMDEwQSwgMHgwMjAwMDEwRiwKKzB4MDIwMjAyMDEsIDB4MDIwNDAyMDMsIDB4MDIwNjAyMDUsIDB4MDIwMjAyMDAsCisweDAyMDQwMjAzLCAweDAyMEMwMjBCLCAweDAyMEUwMjBELCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDEwRTAxMEQsCisweDAwRkYwMTBGLCAweDAxMDkwMTA4LCAweDAxMEIwMTBBLCAweDAxMEYwMTBGLAorMHgwMjAyMDIwMSwgMHgwMjA0MDIwMywgMHgwMjA2MDIwNSwgMHgwMjAyMDIwMCwKKzB4MDIwNDAyMDMsIDB4MDIwQzAyMEIsIDB4MDIwRTAyMEQsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMDIwNTIyMCwKKzB4MDAwMDAwNDYsIDB4MDAwMDAwNTksIDB4NzMyMDQxNDIsIDB4MDAzRDcxNjUsCisweDQ5NTQ0MTIwLCAweDAwMDAyMDRELCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDJFMDIwOSwgMHg4MDAwMDEwMSwgMHgwMDA0MDlGQSwgMHgwMEZGMDQwMCwKKzB4MDUwNzAwMDAsIDB4MDIwMDAyMDEsIDB4ODIwNTA3MDAsIDB4MDAwMjAwMDIsCisweDAzODMwNTA3LCAweDA3MDEwMDQwLCAweDQwMDMwNDA1LCAweDAyMDkwMTAwLAorMHgwMTAxMDAyRSwgMHgwOUZBODAwMCwgMHgwNDAwMDAwNCwgMHgwMDAwMDBGRiwKKzB4MDIwMTA1MDcsIDB4MDcwMDAwNDAsIDB4NDAwMjgyMDUsIDB4MDUwNzAwMDAsCisweDAwNDAwMzgzLCAweDA0MDUwNzAxLCAweDAwMDA0MDAyLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwNzA5MDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfTsKKworY29uc3QgdTMyX3QgemNGd0ltYWdlU2l6ZT0xNTkyODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGZ3dV9CQS5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwZnd1X0JBLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3NDE1NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGZ3dV9CQS5jCkBAIC0wLDAgKzEsODc0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJjcHJlY29tcC5oIgorCitjb25zdCB1MzJfdCB6Y0Z3SW1hZ2VbXSA9IHsKKzB4MDAwOTAwMEIsIDB4NEYyMjJGRTYsIDB4REU5MTdGRkMsIDB4RTExNEQ3OTEsCisweDFFMTNENDkxLCAweDFFNEM0NzBCLCAweDAwMDlCMDE3LCAweDk1QzJFNjAwLAorMHhDODQwNjBFMiwgMHgyRjAyOEYwMywgMHg4RkY5MzY1MiwgMHhENDhCNzYwMSwKKzB4NEUwQkRFOEIsIDB4RDQ4QjAwMDksIDB4MDAwOTRFMEIsIDB4NEUwQkQ0OEEsCisweDdGMDQwMDA5LCAweEEwNDc0RjI2LCAweDRGMjI2RUY2LCAweDQxMEJEMTg3LAorMHhENDg3MDAwOSwgMHgwMDA5NDQwQiwgMHg0NTBCRDU4NiwgMHhENzg2MDAwOSwKKzB4NjExREUxRkYsIDB4RDE4NTI3MTIsIDB4NjAxMkUyRkYsIDB4Q0IwMUQ0ODQsCisweDcxREMyMTAyLCAweDcxMDQyMTIyLCAweDIxMjJFNTAxLCAweEQ1ODEyNDUyLAorMHhEMjgxOTc5MiwgMHhFNzAwMjU3MiwgMHhENDgxRDE4MCwgMHgyMjcwRDY4MSwKKzB4MjE3MkUyMDEsIDB4MjYyMDI0NzAsIDB4RTRGRkQ2N0YsIDB4RTYwMDI2NDEsCisweEUxMDRENTdFLCAweDYwNjM2NjZELCAweDYyNkQ3NjAxLCAweDMyMTI0MDAwLAorMHgwNTQ1OEZGOCwgMHhFNTAxRDI3QSwgMHhEMTdBMjI1MCwgMHhENTdCRDQ3QSwKKzB4RTcwMEU2MDAsIDB4MjU3MjI0NzAsIDB4MTE2MjIxNjIsIDB4MTE2OTExNjYsCisweDRGMjYxMTZBLCAweDExNkUwMDBCLCAweEQxNzU3RkM0LCAweDJGMTJEODc1LAorMHhENDc2RDE3NSwgMHhENTc3RDY3NiwgMHgxRjg3RDc3NywgMHhEOTc3NzhGQywKKzB4MUYxQkQyNzcsIDB4MUY0MTcxMDQsIDB4MUY2NDc0MDQsIDB4MUY4ODc2MDQsCisweDcxRjQxRjFDLCAweDFGNDJFOEM4LCAweDFGNjUxRjUzLCAweDFGOTkxRjc2LAorMHgxRjFEMUYyQSwgMHhERDZGNjg4QywgMHhEQTcwREU2RiwgMHhEQzcxREI3MCwKKzB4MDAwOTRBMEIsIDB4MDAwOTRCMEIsIDB4MDAwOTRDMEIsIDB4NjAxMEQxNUUsCisweDhCMEY4ODAxLCAweEU5NTBEMTVELCAweDQ5MTg2MjEyLCAweDhCMDczMjk2LAorMHg1NkZBRDE1OSwgMHgyMTIwRTIwMCwgMHhDQjAxNjA2MiwgMHgyNjAyQTAwMiwKKzB4MjEyMjcyMDEsIDB4ODgwMTYwRDIsIDB4RDE2Mzg5MDcsIDB4MzI4NjYyMTIsCisweEQxNjI4OTAzLCAweDg4MDE2MDEwLCAweDY0RTI4QkRBLCAweDUyRjc1MUY4LAorMHg1NUUxMjE0MiwgMHgyMjUyRDE1RSwgMHg2NjEyNTRGQiwgMHgyNDYyNTlGQywKKzB4Mjk3MjU3MTEsIDB4ODgwMTYwRDIsIDB4NjZFMjhCNTMsIDB4MzYyMDUyRTEsCisweDYwNjE4OTRDLCAweDg4MDFDOTBGLCAweEQxNTY4QjQ4LCAweDM2MjA2MjEyLAorMHhBMDQzODkwMywgMHgyNzEwMjE2MiwgMHhENTUzMEZBMCwgMHg2NjUxRTcxMCwKKzB4NjI2RDc2MDEsIDB4OEYzQzMyNzMsIDB4NjVGMjI1NjEsIDB4Njk1MjUxRjIsCisweDU0RjM1OUYxLCAweDY3OTI1MkY0LCAweDYxNDI2NTEyLCAweDU2RjY2OTIyLAorMHg2NDIyNTJGNSwgMHhDQjIwNjA2MiwgMHhFNjAwMjYwMiwgMHg3NjAxMUYxRSwKKzB4NjI2REUxMTAsIDB4MzIxMzQxMTgsIDB4NTFGRThGRjgsIDB4MjY3MjU2RjEsCisweDU2RjQ1N0YyLCAweDU1RjMyNzUyLCAweDI1MTI1N0Y1LCAweDI3NDIyNjkyLAorMHg1MUY5NjlFMiwgMHgyMTkyRDQzRCwgMHhFOTAxNjFGMiwgMHgyMTkyNDQwQiwKKzB4NDkxODY1RjIsIDB4RDkzODI1OTIsIDB4RTIwMEQ1MzksIDB4NjI1MTI5MjEsCisweDcyMDE1NEZELCAweDYyMkQyNTIxLCAweDI0MjJBMDAzLCAweEUyMDBEOTMyLAorMHhFOTAxMjkyMSwgMHgyRDkyRDEyQywgMHgyNjY4NjYxMiwgMHhBRjZGOEIwMSwKKzB4RDYzMDAwMDksIDB4MDAwOTQ2MEIsIDB4RTcwMEQxMjgsIDB4MjE3MEFGNjgsCisweDAwMUMwMDFDLCAweDAwMjAwRjdDLCAweDAwMDBCMzhFLCAweDAwMjAzMjJDLAorMHgwMDIwMTQ1RSwgMHgwMDIwMzIzOCwgMHgwMDIwMzI1MCwgMHgwMDIwMTQxQywKKzB4MDAyMDE1MUMsIDB4MDAyMDBGQTAsIDB4MDAxQzM1MTAsIDB4MDAxQzM2NDgsCisweDAwMUUyMTJDLCAweDAwMjAzMTg4LCAweDAwMjAyRDI0LCAweDAwMjAzMTkwLAorMHgwMDIwMzE5QywgMHgwMDIwMzFBOCwgMHgwMDIwMzFCOCwgMHgwMDIwMzFCQywKKzB4MDAyMDMxQjAsIDB4MDAxMTc3MDgsIDB4MDAyMDMxQjEsIDB4MDAyMDMxQjQsCisweDAwMUMzRDMwLCAweDAwMTE3NzE4LCAweDAwMTE3NzM0LCAweDAwMUMzQjlDLAorMHgwMDFDMzcwNCwgMHgwMDFDM0Q5OCwgMHgwMDFDMzUwMCwgMHgwMDFDM0QwMCwKKzB4MDAxQzM2RjgsIDB4MDAxQzEwMjgsIDB4MDAyMDJEOTgsIDB4MDAyMDEzMjgsCisweDAwMjAyQzA0LCAweDAwMjAxRTE4LCAweDAwMjAzNEJDLCAweDAwMjAzMUJBLAorMHgwMDIwMkQ5MCwgMHgwMDIwMzFDQywgMHgwMDIwMzFEMCwgMHgwMDIwMTI3NiwKKzB4MDAyMDMxRDIsIDB4MDAyMDFGRDAsIDB4MkZCNjJGOTYsIDB4MkZENjJGQzYsCisweDRGMjIyRkU2LCAweERFOTQ3RjhDLCAweDYxRTBFMDI0LCAweDBGMTRENDkzLAorMHg3MTAxNjFFMywgMHhENzkyNjIxMCwgMHg0NzBCRTAyOCwgMHhENTkxMEYyNCwKKzB4MDAwOTQ1MEIsIDB4NkQwMzIwMDgsIDB4MUYwQjhGMTEsIDB4RDQ4RkRDOEUsCisweEREOEY2N0MwLCAweDY1N0M0RDBCLCAweEREOEZEMThFLCAweDZCOUM2OTEwLAorMHg0MjA4NjJCMywgMHgzMkI4NDIwOCwgMHgzRDJDNDIwOCwgMHhFMDI4MUZEQiwKKzB4RTU4MDA0RkMsIDB4NjA0QzY2RTIsIDB4MzA1MDY1NUMsIDB4MkQ2MjhGMTMsCisweDAxRkNFMDI0LCAweDY0MUNFNTAwLCAweDYyNURERTg0LCAweDhCMDEzMjQzLAorMHgwMDA5QTMzRCwgMHg2NzUzNjU1RCwgMHg2MDcwMzdFQywgMHgzOURDNjk1MywKKzB4QUZGMjc1MDEsIDB4MjAwODgwOTQsIDB4RTAyNDhCMTMsIDB4RTUwMDAxRkMsCisweEEwMDlERTdBLCAweDY1NUQ2NDFDLCAweDMyRUM2MjUzLCAweDZDNTM2QjIyLAorMHgzQ0RDNjdCMiwgMHg3NTA0MUM3MSwgMHgzMjQzNjI1RCwgMHhBMzFFOEJGMywKKzB4ODgwMTJEMTAsIDB4RTAyNDhCMTYsIDB4RTQwMDAxRkMsIDB4NjcxQzJENDAsCisweDYyNERERTZFLCAweDhCMDEzMjczLCAweDAwMDlBMzExLCAweDZDRTM2NDRELAorMHg3QzA0Njk0MywgMHgzOUVDNkI0MywgMHg2NTkyM0JDQywgMHg3NDA4NkRCMiwKKzB4MjVEMkFGRUYsIDB4OEIxOTg4MDQsIDB4MDFGQ0UwMjQsIDB4MkQ3MEU3MDAsCisweDFGRDg2RDFDLCAweDYyN0RERTYxLCAweDhCMDEzMkQzLCAweDAwMDlBMkY3LAorMHg2QjczNjc3RCwgMHgzQkVDNjFFMywgMHg3MTA0NjRCMiwgMHgzQzFDNkM3MywKKzB4Njk0MjY1QzIsIDB4Mjk1OTc3MDgsIDB4MjQ5MkFGRUQsIDB4OEIxODg4MDUsCisweDAxRkNFMDI0LCAweDJENDBFNDAwLCAweERFNTQ2NzFDLCAweDMyNzM2MjRELAorMHhBMkRDOEIwMSwgMHg2NDREMDAwOSwgMHg2QkUzNkQ0MywgMHg2NUQyM0RFQywKKzB4NjE0MzdCMDQsIDB4NkMxMjMxQkMsIDB4NzQwODY5NTIsIDB4QUZFRDI5Q0IsCisweDg4MzEyNTkyLCAweERFNEE4QjIwLCAweDY1RTZEQjRBLCAweDYxRTZEQzRBLAorMHg2N0UyRDk0QSwgMHg2MkUyN0UwNCwgMHgxRkVDN0VFOCwgMHg3RTA0NjRFMiwKKzB4NkVFMjFGRUQsIDB4NUJGRDJCRTAsIDB4NjBCMjdCMDQsIDB4QzkwMTFGQkUsCisweDZCQjIyQzAwLCAweDI5QjA0QjA5LCAweERDNDEyRjI2LCAweDY2MTM0QzBCLAorMHhFMjAwN0YwNCwgMHgyRDIwQTJBQiwgMHg4QjIxODgzMCwgMHhEOTM5REUzOCwKKzB4RTA2NDY1RTYsIDB4NzIwNDYyRTMsIDB4NjcyNjY2RTIsIDB4NkUyM0RDMzYsCisweDYyMjI3RUU4LCAweDZCRTI2MUU2LCAweDI5QjAxRkVGLCAweDdFMDQwRjE2LAorMHhDOTAxNjBFMiwgMHg2RUUyMkMwMCwgMHg0RTA5REMzMCwgMHgyRjI2MkNFMCwKKzB4RDEzMEUwNjgsIDB4MDRGRTQxMEIsIDB4RTIwMDdGMDQsIDB4MkQyMEEyODcsCisweDhCMDU4ODMzLCAweDRFMEJERTJDLCAweEUxMDAwMDA5LCAweDJEMTBBMjdGLAorMHg4OTAxODgyOCwgMHgwMDA5QTEwNiwgMHhFMTQzREUyMCwgMHhFMDQwNjJFMSwKKzB4MzIxNzYyMkQsIDB4MEZFNjhGMDQsIDB4NjAyM0UyNDAsIDB4MjYyMTA2RkUsCisweDhCMDEzMjE3LCAweDAwMDlBMEVGLCAweDAyRkVFMDQwLCAweDg1MjFFNDAxLAorMHg4QjAxMzA0NiwgMHgwMDA5QTBFNywgMHhFNTAxRTA0MCwgMHgyRDUwMDdGRSwKKzB4NjQ3MUIyNjUsIDB4MDlGRUUwNDAsIDB4NjI5MUUxNDMsIDB4NjUyREUwNjgsCisweDhENkIzNTE3LCAweEU2NDAwRjU2LCAweDhCMjczNTYzLCAweEUwNDhFNjAwLAorMHhFMTFBMEY2NSwgMHg3MkMwQTAzMSwgMHgwMDExNzgwMCwgMHgwMDIwMzI1NCwKKzB4MDAyMDE0NUUsIDB4MDAyMDI1ODgsIDB4MDAyMDMxQTIsIDB4MDAyMDMyNTgsCisweDAwMjAxNEFBLCAweDAwMjAzMUExLCAweDAwMjAyREM4LCAweDAwMTE3ODA0LAorMHgwMDExNzgxMCwgMHgwMDIwMzE5RCwgMHgwMDIwMzE5RSwgMHgwMDIwMzE5RiwKKzB4MDAyMDBDMkMsIDB4MDAyMDBDODAsIDB4MDAyMDBDN0MsIDB4NDEyMTYxNTMsCisweDQxMjE0MTIxLCAweDQxMjE0MTIxLCAweDQ1MjE0NTIxLCAweDYwNTM0NTIxLAorMHg2NjAzQzkwMywgMHgwRjY1RTA0OCwgMHhFMDA3NzExOCwgMHhFMDQ0MjIwOSwKKzB4NjQxRDBGMjUsIDB4NjVGM0UwNEMsIDB4MEY0NkIyOEMsIDB4MDRGREUwNDgsCisweDBCRkRFMDQ0LCAweDYxQkQ2NzRELCAweDQxMDg0NzA4LCAweDBGMTZFMDUwLAorMHhEMjlCNjA3MywgMHg0MjBCMDlGRSwgMHg2QzA3RTAwRiwgMHg2MDczMjlDOSwKKzB4RTA0MDBGOTYsIDB4NjVGMzBFRkUsIDB4NkQwRDg1RTIsIDB4MDFGRUUwNTAsCisweDYwRDM0MjBCLCAweDYwNzMyOTBCLCAweEUwNEMwRjk2LCAweDA0RkVCMjUxLAorMHgwNkZFRTA0MCwgMHg2MjYxRTA2OCwgMHgwRjU2NjUyRCwgMHgzNTYzRTY0MCwKKzB4RTAwMDg5NEUsIDB4NjAyMzgxRjgsIDB4NDAwOEM5MDMsIDB4NkIwMzQwMDAsCisweEUwNTQ2MTAzLCAweEUwNTgwRkI2LCAweEVDRkZERDg1LCAweDZDQ0MwRkY2LAorMHgwRkQ2RTA2QywgMHg0RDBCNjBDMywgMHg0MjIxNjI1MywgMHg0MjIxNDIyMSwKKzB4NjQyMzQyMjEsIDB4MzI0QzQyMDAsIDB4RTA1QzZFMDcsIDB4NDUyMTQyMDAsCisweEUwNDAwRkU2LCAweDBCRkU0NTIxLCAweEM5MDM2MDUzLCAweDMwRkM0MDA4LAorMHg2RDAzN0IwNiwgMHg4NUY4MUYwNSwgMHg2QzJEMUZCNywgMHgxRkM2NkUwMywKKzB4MEZDNkUwNjAsIDB4MDVGRUUwNTgsIDB4NjRDM0IyMkMsIDB4MzNGQ0UzNTQsCisweDU2MzI2MkQyLCAweDIyNjk2MTMyLCAweDY3QjQyRDIyLCAweDQ5MEI1OTM2LAorMHgyMjBCNjA3QywgMHgwNUZFRTA1OCwgMHg2NEMzMkQyMiwgMHg3RTAxQjIwMSwKKzB4RTcwNjYyRUQsIDB4OEZFMzMyNzMsIDB4RTA0MDdDMDEsIDB4NjI2MTA2RkUsCisweDA2RkVFMDQwLCAweDg1NjE0MjAwLCAweDMwMkM3NjBDLCAweDYxMDM3MDFCLAorMHg2NEYzRTUwMCwgMHg3NTAxRTcwNCwgMHg2QjVENjk2NiwgMHgyNDkyM0I3MywKKzB4NzQwNDhGRjksIDB4QjFFNDY1RjMsIDB4RTA0MDY0MUQsIDB4QjFBMzA2RkUsCisweEExN0M2NDYxLCAweEQ0NTcwMDA5LCAweEUyMDFENzU3LCAweDJEMjA0NzBCLAorMHgwMDA5QTE3NSwgMHg4QjA3ODgyOSwgMHhFQzAwREU1NCwgMHg2MUUyMkRDMCwKKzB4NjQxREIxNzUsIDB4MDAwOUExNkIsIDB4NjIyQ0UyODEsIDB4OEIwMTMwMjAsCisweDAwMDlBMEI2LCAweDA2RkNFMDI4LCAweEU2ODI2MjZDLCAweDMyNjA2NjZDLAorMHg1NkZCOEIyMCwgMHgyNjEwRTEyNCwgMHg1MjE3RDE0OSwgMHg1MjE4MTYyMSwKKzB4NTIxOTE2MjIsIDB4NTIxQTE2MjMsIDB4NTUxQjE2MjQsIDB4MTY1NUUyMDAsCisweDE2NTY1NTFDLCAweDE2NTc1NTFELCAweDE2NTg1NTFFLCAweDE2NTk1NTFGLAorMHgxMTI4MTEyNywgMHgxMTJBMTEyOSwgMHgxMTJDMTEyQiwgMHgxMTJFMTEyRCwKKzB4MTEyRkExM0QsIDB4NjY2Q0U2ODMsIDB4OEIwQjMyNjAsIDB4RDYzNzUyRkIsCisweDIyNTBFNTAwLCAweEQyMzc2NTYyLCAweDIyNTI3NjA0LCAweEQ2MzY2MjYyLAorMHgyNjIwQTEyRCwgMHg2NjZDRTY5MCwgMHg4QjAzMzI2MCwgMHgwMDA5QjFDNywKKzB4MDAwOUEwMTEsIDB4NjY2Q0U2OTEsIDB4OEIxMDMyNjAsIDB4NjI1MkQ1MkIsCisweDIyMjg2MjJDLCAweEQyMkQ4OTA0LCAweDAwMDk0MjBCLCAweDAwMDlBMDAzLAorMHg0MjBCRDIyQiwgMHg1NkZCMDAwOSwgMHhBMTEwRTIwMCwgMHhFNkIwMjYyMCwKKzB4MzI2MDY2NkMsIDB4RTAyNDhCMzQsIDB4RTA3MDAyRkMsIDB4MEYxNjYxMkMsCisweEVCMDRFQzAwLCAweDAxRkVFMDcwLCAweDMyMTM2MkNELCAweEEwRkU4QjAxLAorMHhEMjFBMDAwOSwgMHg2REMzNkNDRCwgMHg3MjA0M0QyQywgMHgzMTJDNjFDMywKKzB4NkQxMjZFRDIsIDB4RDExNEQ0MUIsIDB4MDAwOTQxMEIsIDB4NDEwQkQxMUEsCisweEQ0MUE2NEUzLCAweDQyMEJEMjEwLCAweEQyMTcwMDA5LCAweDY0RDM0MjBCLAorMHhENjBERDQxNywgMHgwMDA5NDYwQiwgMHg2MUUzRTYwMCwgMHgzMTZDNjY2RCwKKzB4NjI2RDc2MDEsIDB4MjFEMDMyQjMsIDB4NEQxOThGRjcsIDB4N0MwOEFGRDIsCisweEQyMTFENDEwLCAweEQ0MTE2NTQyLCAweDAwMDk0MjBCLCAweDAwMDlBMENGLAorMHgwMDIwMkM4MCwgMHgwMDIwMzI3OCwgMHgwMDIwMTQ1RSwgMHgwMDExNzgwNCwKKzB4MDAyMDJEMkMsIDB4MDAyMDMxODgsIDB4MDAyMDMxOUMsIDB4MDAyMDBDQkEsCisweDAwMjAwQ0UwLCAweDAwMjAzMjkwLCAweDAwMjAxNEEyLCAweDAwMjAzMkE0LAorMHgwMDIwMzJBQywgMHgwMDExNzgwMCwgMHgwMDIwMTRBQSwgMHgwMDIwMzJCMCwKKzB4RDVCNUQxQjQsIDB4NjI1MkUwNDAsIDB4NzUwNDY2MTIsIDB4MjE2MjM2MkMsCisweDU2MTE2MjU2LCAweDExNjEzNjJDLCAweDYyNTI2NjUzLCAweDc2MDg1NTEyLAorMHgxMTUyMzUyQywgMHg1NTEzNjI2MiwgMHgzNTJDNzZFQywgMHg2NTYzMTE1MywKKzB4NTYxNDYyNjIsIDB4MzYyQzc1MTAsIDB4NjY1MzExNjQsIDB4NTUxNTYyNTIsCisweDM1MkM3NjEwLCAweDYyNjIxMTU1LCAweDM2MkM1NjE2LCAweEQ2QTMxMTY2LAorMHg1NTE3NjI2MiwgMHgzNTJDNzYwNCwgMHg2MjY2MTE1NywgMHgzNTJDNTUxOCwKKzB4NjU2MzExNTgsIDB4NTYxOTYyNjIsIDB4MzYyQzc1MDQsIDB4NjI1NjExNjksCisweDM2MkM1NjFBLCAweDYyNTYxMTZBLCAweDM2MkM1NjFCLCAweDY2NTMxMTZCLAorMHg1NTFDNjI1MiwgMHgzNTJDNzYwNCwgMHg2MjY2MTE1QywgMHgzNTJDNTUxRCwKKzB4NjI2MzExNUQsIDB4NTUxRTY2NjIsIDB4MzU2QzcyMDQsIDB4NjYyMjExNUUsCisweEQ1OEY1MjFGLCAweDExMkYzMjZDLCAweDA2MUU2MjUyLCAweDM2MkM3NTk0LAorMHhFMDQ0MDE2NiwgMHg2MjUyNjY1MywgMHg3NjQ0MDUxRSwgMHgwMTU2MzUyQywKKzB4NjI2MkUwNDgsIDB4MzYyQzA2MUUsIDB4RDY4NjAxNjYsIDB4NjI2MkUwNTQsCisweDQyMjkwNTFFLCAweDAxNTYzNTJDLCAweDYyNjI3NjA0LCAweDA2MUVFMDU4LAorMHgzNjJDNDIyOSwgMHg1NkZCMDE2NiwgMHgyNjIwRTIzOCwgMHgwMjFFRTA0NCwKKzB4MTYyMUUwNDgsIDB4MTYyMjYyMTIsIDB4MTYyMzUyMTEsIDB4RTIwMDU1MTIsCisweDU1MTUxNjU0LCAweDU1MTMxNjU1LCAweDU1MTYxNjU2LCAweDA1MUUxNjU3LAorMHgxNjU4RTA0MCwgMHhFMDUwMDUxRSwgMHg1NTE0MTY1OSwgMHgwNTFFMTY1QSwKKzB4MTY1QkUwNEMsIDB4RTA1NDA1MUUsIDB4MDUxRTE2NUMsIDB4MTY1REUwNTgsCisweEUwNDQwNTFFLCAweDAxMjYxNjVFLCAweDIxMjJFMDQ4LCAweDExMjIxMTIxLAorMHgxMTIzMTEyNSwgMHgwMTI2MTEyNiwgMHgwMTI2RTA0MCwgMHgxMTI0RTA1MCwKKzB4RTA0QzAxMjYsIDB4RTA1NDAxMjYsIDB4RTA1ODAxMjYsIDB4N0Y3NDAxMjYsCisweDZFRjY0RjI2LCAweDZDRjY2REY2LCAweDAwMEI2QkY2LCAweDRGMjI2OUY2LAorMHhFMjQwNjE0RCwgMHg4OTE0MzEyMywgMHgzMTI3RTIxRiwgMHg4QjA5RDc1QSwKKzB4RDQ1QTYxNEQsIDB4RTAwMTcxRTAsIDB4NTY3MTQ0MEIsIDB4MjY1OTY1MDcsCisweDE3NjFBMDA3LCAweEUwMDFENDU1LCAweDY2NzI0NDBCLCAweDI2NTk2NTA3LAorMHg0RjI2Mjc2MiwgMHgwMDA5MDAwQiwgMHg2MTRENEYyMiwgMHgzMTIzRTI0MCwKKzB4RTIxRjg5MTIsIDB4RDc0QzMxMjcsIDB4NjE0RDhCMDgsIDB4NTY3MUQyNEIsCisweDQyMEI3MUUwLCAweDI2MEJFMDAxLCAweDE3NjFBMDA2LCAweDY2NzJEMjQ3LAorMHhFMDAxNDIwQiwgMHgyNzYyMjYwQiwgMHgwMDBCNEYyNiwgMHhFNjQwMDAwOSwKKzB4NDYyODQ2MTgsIDB4NjI1MkQ1NDIsIDB4ODlGQzIyNjgsIDB4MDAwOTAwMEIsCisweDQ2MThFNjgwLCAweEQ1M0U0NjI4LCAweDIyNjg2MjUyLCAweDAwMEI4OUZDLAorMHhBMDAxMDAwOSwgMHg3MjAxRTIwMCwgMHg4QkZDMzI0MiwgMHgwMDA5MDAwQiwKKzB4NDYxOEU2ODAsIDB4RDUzNzQ2MjgsIDB4MjI2ODYyNTIsIDB4MDAwQjhCRkMsCisweDJGRTYwMDA5LCAweDdGRkM0RjIyLCAweEJGRjE2RTUzLCAweDYxRTIyRjQyLAorMHhFMjgwRDYzMSwgMHg1NEUxMTYxNSwgMHgxNjQ2NDIxOCwgMHg0MjI4NTVFMiwKKzB4NTdFMzE2NTcsIDB4MTY3ODZFRjIsIDB4MjZFMjJFMkIsIDB4NEYyNjdGMDQsCisweDZFRjZBRkNFLCAweDJGRDYyRkM2LCAweDRGMjIyRkU2LCAweDZDNTNERDI2LAorMHg2RTQzQkZENiwgMHgyREUyQkZCQiwgMHgwMDA5QkZEMiwgMHgyQzEyNTFENSwKKzB4MUM0MTU0RDYsIDB4MUM1MjU1RDcsIDB4MUM2MzU2RDgsIDB4NkVGNjRGMjYsCisweDAwMEI2REY2LCAweDYxNjM2Q0Y2LCAweEEwMDRFNjAwLCAweDYyNTY0MTA5LAorMHgyNDIyNzYwMSwgMHgzNjEyNzQwNCwgMHgwMDBCOEJGOSwgMHg0RjIyMDAwOSwKKzB4RDExN0Q0MTYsIDB4MDAwOTQxMEIsIDB4RDQxN0QyMTYsIDB4RTUwNTYwMjIsCisweDIyMDJDQjIwLCAweEQ1MTUyNDUyLCAweDQ1MEJFNzAwLCAweEQ3MTQyNDcyLAorMHgwMDA5NDcwQiwgMHhFNjAxRDExMywgMHgyMTYyRDIxMywgMHg0RjI2NDYxOCwKKzB4MjI2MjAwMEIsIDB4MDAyMDJEMkMsIDB4MDAxQzM2QTAsIDB4MDAxQzNDQTAsCisweDAwMUMzNkY0LCAweDAwMUMzQjg4LCAweDAwMUMzNzA0LCAweDAwMjAyQzgwLAorMHgwMDFDMzczQywgMHgwMDFDMzcwMCwgMHgwMDFDMzcwQywgMHgwMDIwMzJDNCwKKzB4MDAyMDE0NUUsIDB4MDAxQzM1MDAsIDB4MDAxRDQwMDQsIDB4MDAyMDE0RDQsCisweDAwMjAwRkEwLCAweDAwMUUyMTJDLCAweDAwMUMzRDMwLCAweDAwMDlBMUE5LAorMHgyRkU2MkZENiwgMHhERDhGNEYyMiwgMHhBMDA0OUVBNywgMHhENDhFMDAwOSwKKzB4NDIwQkQyOEUsIDB4NjJEMjY1RDIsIDB4OEJGODIyRTgsIDB4MDAwOUEwMDQsCisweEQyOEFENDhCLCAweDU1RDE0MjBCLCAweDIyRTg1MkQxLCAweEEwMDQ4QkY4LAorMHhENDg4MDAwOSwgMHg0MjBCRDI4NSwgMHg1MkQyNTVEMiwgMHg4QkY4MjJFOCwKKzB4MDAwOUEwMDQsIDB4RDI4MUQ0ODQsIDB4NTVEMzQyMEIsIDB4MjJFODUyRDMsCisweEEwMDQ4QkY4LCAweEQ0ODEwMDA5LCAweDQyMEJEMjdDLCAweDUyRDQ1NUQ0LAorMHg4QkY4MjJFOCwgMHg2RUY2NEYyNiwgMHg2REY2MDAwQiwgMHgyRkQ2MkZDNiwKKzB4NEYyMjJGRTYsIDB4NkU2MzZENzMsIDB4NkM1M0IwMTgsIDB4NjRDMzU3RjQsCisweEIwNTQ2NUUzLCAweEIwNkE2NkQzLCAweEIwOUEwMDA5LCAweEIwOUUwMDA5LAorMHhCMEEyMDAwOSwgMHhCMEJFMDAwOSwgMHhCMEMxMDAwOSwgMHhCMTI0MDAwOSwKKzB4NEYyNjAwMDksIDB4NkRGNjZFRjYsIDB4NkNGNkEwMjMsIDB4MzQxMkQxNkMsCisweEQ2NkMwNTI5LCAweDI2NTBENzZDLCAweDI3NDIwMDBCLCAweDAwMDlBMDE0LAorMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwgMHg2RTYzNkQ3MywgMHg2QzUzQkZFRSwKKzB4NjRDMzU3RjQsIDB4QjAyQTY1RTMsIDB4QjEwNjY2RDMsIDB4NEYyNjAwMDksCisweDZERjY2RUY2LCAweDZDRjZBMDA1LCAweEU2MDNEMjYwLCAweDAwMEI0NjE4LAorMHhEMjVFMjI2MiwgMHgwMDBCRTYwMCwgMHg0RjIyMjI2MiwgMHhFNDBBQkY3RSwKKzB4MDAwOUJGN0UsIDB4RTEwNEQyNUEsIDB4RTUwMDQxMTgsIDB4MjIxMkU0MEEsCisweDIyNTJCRjc0LCAweDYwNzJENzU3LCAweDRGMjZDQjIwLCAweDI3MDIwMDBCLAorMHhEMTU1NEYyMiwgMHhFNDAwNDEwQiwgMHg0NTJCRDU1NCwgMHgyRkU2NEYyNiwKKzB4NkU2M0QxNTMsIDB4NDQxODY2MTIsIDB4NDUyODkyMTAsIDB4MjYyOTQ0MDgsCisweDQ0MDg0NTAwLCAweDQ0MDAyNjVCLCAweDQ3MDgyNjRCLCAweDQ3MDgyMTYyLAorMHgyN0VCRDE0QywgMHgwMDBCMjE3MiwgMHgwM0YwNkVGNiwgMHgyRkU2MUZGRiwKKzB4REU0OTRGMjIsIDB4RTQwQUUxMDEsIDB4MkUxMkJGNDgsIDB4NzI2QzYyRTMsCisweEU0MDFFMTAwLCAweDIyMTIyMjEyLCAweDIyMTIyMjEyLCAweDIyMTIyMjEyLAorMHhFNzMwMjI0MiwgMHhFNDBBRTUwMywgMHgyMjEyMjIxMiwgMHgyMjEyMjIxMiwKKzB4MjIxMjIyMTIsIDB4MjIxMjIyMTIsIDB4MjIxMjIyMTIsIDB4MjIxMjIyMTIsCisweDIyNTIyMjcyLCAweDIyMTIyMjEyLCAweDIyMTIyMjEyLCAweDIyMTIyMjEyLAorMHgyMjEyMjIxMiwgMHgxMjFBQkYyMiwgMHgyRTYyRTYwMCwgMHgwMDBCNEYyNiwKKzB4RDIzMjZFRjYsIDB4RTQ0MUUxMDEsIDB4MDAwQjIyMTIsIDB4RDEzMDIyNDIsCisweEU2MDVENDMwLCAweDAwMEIyMTYyLCAweEQ1MkYyNDYyLCAweDYwNTBEMjJGLAorMHg4QjBFODgwMSwgMHg2MDQwRDQyRSwgMHg4QjA3ODgwMSwgMHg5NjI2RDUyRCwKKzB4ODgwMTYwNTAsIDB4OTYyMzhCMEMsIDB4MDAwOUEwMEEsIDB4QTAwNzk2MjEsCisweEU2MDAwMDA5LCAweDIyNjJENDI2LCAweDg4MDE2MDQwLCAweEU2MDQ4QjAwLAorMHhBRUYzRTQwQSwgMHhEMjI0MjI2MiwgMHhFNDBBRTYwMSwgMHgyMjYyQUVFRSwKKzB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsIDB4REMyMDRGMjIsIDB4NjBDMkVEMDAsCisweENCMDFFQjY0LCAweDYwQzIyQzAyLCAweEEwNDFDOTAxLCAweDAzQzQ2RTAzLAorMHgwMzQwMDNENCwgMHgwMDFDM0I4OCwgMHgwMDIwMzJDOCwgMHgwMDIwMTRBQSwKKzB4MDAyMDMyRDAsIDB4MDAyMDMyRDgsIDB4MDAyMDMyRTAsIDB4MDAyMDMyRTgsCisweDAwMjVFNzIwLCAweDAwMjAzNEI4LCAweDAwMjAzMThDLCAweDAwMUM1OTY4LAorMHgwMDFENDAwNCwgMHgwMDFDMzUwMCwgMHgwMDIwMTI0QSwgMHgwMDIwMTI3NiwKKzB4MDAxQzU4MTQsIDB4MDAxQzU5RDAsIDB4MDAxQzU4MzAsIDB4MDAxQzYyNjgsCisweDAwMUM1OUE0LCAweDAwMUM2MzlDLCAweDAwMjAzMTlFLCAweDAwMUM1ODA0LAorMHgwMDIwMzE5RCwgMHgwMDIwMzE5RiwgMHgwMDFDNTgxQywgMHgwMDFDNTg2MCwKKzB4ODkwNzNEQjIsIDB4RTQwQTYwQzIsIDB4QkU5RkM5MDEsIDB4N0QwMTZFMDMsCisweDhCRjUyRUU4LCAweDhCMDMzREIyLCAweEQyM0VENDNELCAweDAwMDk0MjBCLAorMHg0RjI2RTQwQSwgMHg2REY2NkVGNiwgMHhBRThGNkNGNiwgMHg0NDExNkJGNiwKKzB4NjA0QjhGMDEsIDB4MDAwQjYwNDMsIDB4MkZCNjAwMDksIDB4MkZENjJGQzYsCisweDRGMjIyRkU2LCAweERDMzQ3RkZDLCAweDYwQzJFRDAwLCAweENCMDJFQjY0LAorMHg2MEMyMkMwMiwgMHhDOTAyMkYwMiwgMHg2RTAzQTAwOSwgMHg4OTA4M0RCMywKKzB4RTQwQTYwQzIsIDB4QzkwMjJGMDIsIDB4NkUwM0JFNzAsIDB4MkVFODdEMDEsCisweDNEQjM4QkY0LCAweEQ0Mjk4QjA4LCAweDdGMDREMjI2LCAweDZFRjY0RjI2LAorMHg2Q0Y2NkRGNiwgMHg2QkY2NDIyQiwgMHg0RjI2N0YwNCwgMHg2REY2NkVGNiwKKzB4MDAwQjZDRjYsIDB4RDUyMjZCRjYsIDB4NjA1MjU2NTEsIDB4MDAwQjQ2MjgsCisweDJGQjYzMDZDLCAweDJGRDYyRkM2LCAweDRGMjIyRkU2LCAweDRGMDI0RjEyLAorMHg2RTQzQkZGMSwgMHhEQzFCNkIwMywgMHhCRkVDREQxQiwgMHgzMEI4MDAwOSwKKzB4MDYwQTNDMDUsIDB4NDYwOTQ2MDksIDB4M0Q2NTQ2MDEsIDB4NDIwOTAyMEEsCisweDQyMDk0MjA5LCAweDhCRjAzMkUyLCAweDRGMTY0RjA2LCAweDZFRjY0RjI2LAorMHg2Q0Y2NkRGNiwgMHg2QkY2MDAwQiwgMHg0RjIyMkZFNiwgMHhFMTAyREUwRiwKKzB4RTQwM0U1MDAsIDB4QkZENDJFMTIsIDB4RTYwNjJFNTIsIDB4RTcwMDQ2MTgsCisweDJFNjJFNDAzLCAweDRGMjYyRTcyLCAweDZFRjZBRkNCLCAweDAwMDkwMDBCLAorMHgwMDIwMzJGMCwgMHgwMDIwMTQ1RSwgMHgwMDFDNTg2MCwgMHgwMDIwMzMwOCwKKzB4MDAxQzEwNDAsIDB4Q0NDQ0NDQ0QsIDB4MTA2MjRERDMsIDB4MDAxRDQwMDQsCisweDJGOTYyRjg2LCAweDJGQjYyRkE2LCAweDJGRDYyRkM2LCAweDRGMjIyRkU2LAorMHhFNTAwN0ZEOCwgMHg2NDUzRTExMCwgMHg2QzUzNDEyOCwgMHg2NTVERUUwQSwKKzB4NDYwODY2NTMsIDB4NDYwODM2NUMsIDB4MzYxQzc1MDEsIDB4Njc1RDYwNDMsCisweDYwQzMwRjY2LCAweDM3RTNFRDAwLCAweDgxNjEyNkMxLCAweDgxNjM4MTYyLAorMHgxNkQzMTZEMiwgMHg4RkVBMTZENCwgMHg2OEYyNzQwNCwgMHhEQUIzRDlCMiwKKzB4Mjk4MjE5ODEsIDB4RDFCMjU5RjEsIDB4MkE5MjFBOTEsIDB4NUJGMzVBRjIsCisweDVFRjU1REY0LCAweDExQTE1NEY2LCAweDExQjMyMUEyLCAweDExRDUxMUIyLAorMHgxMUU3MTFENCwgMHgxMTQ5MTFFNiwgMHg1NUY3MTE0OCwgMHhFRTAwREJBOSwKKzB4RERBOTU3RjgsIDB4RDZBOTUyRjksIDB4MUI1MTY0RTMsIDB4REJBODJCNTIsCisweEVBQjhEOEE4LCAweDJENzJFOTQ1LCAweDZBQUMyNjIyLCAweDZFRUQ0OTA4LAorMHg0RDA4NkRFMywgMHgzREVDNjFFMywgMHg0RDA4NDEwOCwgMHgzREJDMzFFQywKKzB4NDEwODYwQzMsIDB4ODFEMTJEQzEsIDB4NDEwOEUwNTAsIDB4NDEwODQwMDgsCisweDYwQzM4MUQyLCAweEU1MDAzMThDLCAweDgxRDMzNEEyLCAweDFEMTMxREQyLAorMHg4RDAxRDQ5NCwgMHhENDkxMUQ1NCwgMHhCMDgxNjVEMywgMHg2NEVEN0UwMSwKKzB4OEJEQzM0OTIsIDB4REI5NEQxOEQsIDB4RDI4QjY4MTIsIDB4MUI4MTQ4MjksCisweDJGRDI2NDEyLCAweDJCOTI2OTRELCAweEQ5OEE2NzIyLCAweDFCNzM0NzI5LAorMHhENzg3NjgyMiwgMHgxQkEyNkE4RCwgMHhEMjhDNkI3MiwgMHgyMkIyRDU4NiwKKzB4RTAwMzVENzIsIDB4NUU3NDEyRDIsIDB4MTJFNDQwMTgsIDB4RDY4ODUxNzYsCisweDU0NzgxMjE2LCAweDEyNDhFMUZGLCAweEQ0ODU2NzkyLCAweDY4NTIxMjdBLAorMHgyOEMxRTcwMywgMHg4MTkxNjk1MiwgMHg2QTUyRTA1MCwgMHg4MUEyNDAwOCwKKzB4NjBDMzZCNTIsIDB4NkQ1MjgxQjMsIDB4NkU1MjFERDIsIDB4NjI1MjFFNjMsCisweDEyNjRFNjAwLCAweDQ2MDg2NTYzLCAweDc1MDEzNjRDLCAweDY2NUQyNjEyLAorMHg4QkY4MzY3MywgMHhFMDAzRDQ3MSwgMHg0MDE4NjU0MiwgMHg2NzQyMjVDMSwKKzB4ODE3MUQyNzQsIDB4RUUwMDY4NDIsIDB4Njk0MjE4ODIsIDB4MTkyM0UwMjQsCisweEU1ODA2QTQyLCAweDZCNDIxQUU0LCAweDgxQjI2NkUzLCAweEQ0NkQ2QzQyLAorMHg2NTVDODFDMywgMHg2RDYzNjY2RCwgMHg2MTZENzYwNCwgMHgzMTUzM0Q0QywKKzB4MkRFMjhGRjgsIDB4RDU2OUQyNjgsIDB4NzQwNDI0MjIsIDB4N0YyODI0NTIsCisweDZFRjY0RjI2LCAweDZDRjY2REY2LCAweDZBRjY2QkY2LCAweDAwMEI2OUY2LAorMHg2NjQyNjhGNiwgMHhDODAzNjA2MSwgMHhFNTAwOEQwNCwgMHhDOTAzNjA2MSwKKzB4OEIwMzg4MDIsIDB4NjU2MzUyNjIsIDB4MjQxMjUxMjQsIDB4NjA1MzAwMEIsCisweDJGRTYyRkQ2LCAweDdGRUM0RjIyLCAweDYyNTM2RTUzLCAweDZENDNFNTUwLAorMHg0NTA4RTQwMCwgMHhFMTAxQTAwMSwgMHg2MDQzNTIyNCwgMHg4MTIxMjIxMSwKKzB4NjA1MzgxMjMsIDB4NTZFMjgxMjIsIDB4OEJGNTM2MjAsIDB4MTZFNEQyNTAsCisweEU2MTQ2NEYzLCAweDY1RTM0MjBCLCAweEU0RkM2NUUxLCAweDJFNTEyNTQ5LAorMHg2NUYzNjFGMSwgMHgyRjExMjE0OSwgMHhEMTQ5NTREMSwgMHhFNjE0NDEwQiwKKzB4NjA3MTU3RDEsIDB4MjcwMUNCMDEsIDB4N0YxNDFERTEsIDB4NkVGNjRGMjYsCisweDZERjYwMDBCLCAweDJGRTYyRkQ2LCAweDdGRUM0RjIyLCAweDY2NTM2RTUzLAorMHg2RDQzRTVGQywgMHgyMDU5NjA2MSwgMHgyNjAxQ0IwMSwgMHgzMjYwNTJFMiwKKzB4MTJFNDhCMDYsIDB4MzFFMDUxRTIsIDB4NTJEMThCMDQsIDB4MUUyMkEwMDIsCisweDU2NjRBRkYwLCAweDY0RjNEMjM2LCAweDQyMEJFNjE0LCAweDY3RTE2NUUzLAorMHgyNzE5RTFGQywgMHg2N0YxMkU3MSwgMHgyNzE5NTREMSwgMHg2NUYzRDEzMCwKKzB4NDEwQkU2MTQsIDB4NTJEMTJGNzEsIDB4Q0IwMTYwMjEsIDB4MURFMTIyMDEsCisweDRGMjY3RjE0LCAweDAwMEI2RUY2LCAweDJGRTY2REY2LCAweDYyNEM0RjIyLAorMHg0MjA4REUxQiwgMHhBMDA1NDIwMCwgMHg1MjUyM0UyQywgMHg1NjI0RDQxNywKKzB4MkU2MkJGOEUsIDB4NTJFMTY1RTIsIDB4OEJGNjM1MjAsIDB4MjYyMkQ2MUIsCisweDAwMEI0RjI2LCAweDJGQjY2RUY2LCAweDJGRDYyRkM2LCAweDRGMjIyRkU2LAorMHhEQjFDREMxMCwgMHg2NkMyNTJDMSwgMHg4OTQwMzYyMCwgMHhDOTAzNjA2MSwKKzB4ODkzQzg4MDEsIDB4REQxOERFMEIsIDB4NjRFM0JGNjMsIDB4ODUwMzY1MDMsCisweDYyMEQ2NkIyLCAweDg5MkIzMjYyLCAweEJGOUJENDAzLCAweEQ0MTMwMDA5LAorMHgwMDA5NEQwQiwgMHgwMDA5QUZFNiwgMHgwMDIwMkQ4OCwgMHgwMDIwMkQ5MCwKKzB4MDAyMDJEOTgsIDB4MDAyMDJEQzAsIDB4MDAyMDMxQTQsIDB4MDAyMDMxQUMsCisweDAwMTAwMEM4LCAweDAwMTAxNjgwLCAweDAwMUUyMTA4LCAweDAwMUMzRDAwLAorMHgwMDExNzg4MCwgMHgwMDExNzc4MCwgMHgwMDA0MDAyMCwgMHgwMDI2QzQwMSwKKzB4MDAyMDBCMjYsIDB4MDAyMDMxODgsIDB4MDAyMDE0NUUsIDB4MDAyMDMzMjQsCisweDY0RTNCRjNFLCAweDREMEJENDA2LCAweEFGQkIwMDA5LCAweEQyMDUwMDA5LAorMHg0RjI2MjI2MiwgMHg2REY2NkVGNiwgMHgwMDBCNkNGNiwgMHgwMDAwNkJGNiwKKzB4MDAyMDMzMjgsIDB4MDAxQzNEMjgsIDB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsCisweDdGRkM0RjIyLCAweDYwMjJEMjJCLCAweDhENDFDODAzLCAweERFMkEyRjAxLAorMHhEQjJCREMyQSwgMHhFRDAxQTAxNywgMHhDOTAzNjA1MSwgMHg4OTE2ODgwMSwKKzB4RDEyOEQ0MjYsIDB4MDAwOTQxMEIsIDB4NjEwMzU1MDMsIDB4QzgyMDg1NTEsCisweEUwNTA4OTAzLCAweDcyMDEwMkJFLCAweEQyMjMwQjI2LCAweDQyMEI2NEUzLAorMHhENjIyNjUxMywgMHg1MkMxMjZEMiwgMHgzNTIwNjVDMiwgMHhERTIwOEJFNCwKKzB4REIyMUREMjAsIDB4NTJEMURDMjEsIDB4MzUyMDY1RDIsIDB4NjA1MTg5MTgsCisweDg4MDFDOTAzLCAweEQ0MUI4OTE0LCAweDQ2MEJENjE2LCAweDU3MDMwMDA5LAorMHg4RjA0MzdFMCwgMHhFMjAxNjUwMywgMHhBRkVDMkIyMCwgMHhENDE4MkM1MiwKKzB4NDIwQkQyMTgsIDB4RDYxMTAwMDksIDB4NDExOEUxMDEsIDB4MjYxMkFGRTMsCisweEM4MDQ2MEYxLCAweEQyMTQ4OTA3LCAweDRGMjY3RjA0LCAweDZERjY2RUY2LAorMHg0MjJCNkNGNiwgMHg3RjA0NkJGNiwgMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwKKzB4NkJGNjAwMEIsIDB4MDAxRTIxMDAsIDB4MDAyMDJEOTgsIDB4MDAyMDJEOTAsCisweDAwMjAyRDJDLCAweDAwMjAxMTYyLCAweDAwMjAxMUU0LCAweDAwMUMzRDMwLAorMHgwMDExNzg4MCwgMHgwMDIwMkQ4OCwgMHgwMDIwMzFBOCwgMHgwMDIwMzFBNCwKKzB4MDAyMDJEQzAsIDB4MDAyMDExODAsIDB4MDAyMDAzMDgsIDB4RTYwMUQyMDMsCisweDEyNjVENTAzLCAweDAwMEIyMjUyLCAweDAwMDAxMjY2LCAweDAwMUMxMDEwLAorMHgwMDAwQzM0RiwgMHgwMDA5MDAwQiwgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwKKzB4NkQ0MzZDNTMsIDB4RUUwMEEwMDQsIDB4N0UwMTY0RDQsIDB4NjQ0Q0JGRjIsCisweDhCRjkzRUMyLCAweDZFRjY0RjI2LCAweDAwMEI2REY2LCAweEU1MDA2Q0Y2LAorMHg2NjQzQTAwMiwgMHg3NjAxNzUwMSwgMHgyMjI4NjI2MCwgMHhBRkUzOEJGQSwKKzB4MkZFNjAwMDksIDB4NzUwNzYyNTMsIDB4RTEwODY3NTMsIDB4NjA0M0VFMEEsCisweDQ0MDlDOTBGLCAweDY1MDMzMEUyLCAweDhEMDE0NDA5LCAweEU2MzBFNjM3LAorMHg0MTEwMzY1QywgMHg4RkYyMjc2MCwgMHhFMDAwNzdGRiwgMHgwMDBCODAyOCwKKzB4MDAwQjZFRjYsIDB4MDAwQkUwMDAsIDB4MkZFNkUwMDAsIDB4N0ZFQzRGMjIsCisweDZFNDM2MjUzLCAweEJGREM2NUYzLCAweEJGRDA2NDIzLCAweEJGQ0U2NEUzLAorMHhENDAzNjRGMywgMHgwMDA5QkZDQiwgMHg0RjI2N0YxNCwgMHg2RUY2MDAwQiwKKzB4MDAyMDMzMkMsIDB4RTRGREQyOUEsIDB4RDc5QTYxMjIsIDB4MjIxMjIxNDksCisweDc0MDE2MDIyLCAweDIyMDJDQjAxLCAweEQ1OTc2NjIyLCAweDIyNjIyNjQ5LAorMHhDODQwNjA3MCwgMHg2MDUyODkwMiwgMHgyNTAyQ0IwNCwgMHhFMUY3NjQ1MiwKKzB4MjU0MjI0MTksIDB4RTcwMTYwNTIsIDB4MjUwMkM5Q0YsIDB4RTYwMjYwNTIsCisweDI1MDJDQjAzLCAweDE1NjI0NzE4LCAweDE1NzMwMDBCLCAweEQ3OENENThCLAorMHhENDhERDI4QywgMHhFNjAwRTEwMCwgMHgyNzExMjUxMSwgMHhBRkQxMjIxMCwKKzB4NjY0QzI0NjEsIDB4NDYwMEQyODksIDB4NjA2MDM2MkMsIDB4MDAwQkNCMTAsCisweDY1NEMyNjAwLCAweDQ1MDBEMjg1LCAweDY2NTAzNTJDLCAweDI2MTlFMUVGLAorMHgyNTYwMDAwQiwgMHhEMjgyNjY0QywgMHgzNjJDNDYwMCwgMHhDQjEwNjA2MCwKKzB4MjYwMDAwMEIsIDB4RDI3RTY1NEMsIDB4MzUyQzQ1MDAsIDB4RTFFRjY2NTAsCisweDAwMEIyNjE5LCAweDY2NEMyNTYwLCAweDQ2MDBEMjc4LCAweDYwNjAzNjJDLAorMHgwMDBCQ0IwOCwgMHg2NTRDMjYwMCwgMHg0NTAwRDI3NCwgMHg2NjUwMzUyQywKKzB4MjYxOUUxRjcsIDB4MjU2MDAwMEIsIDB4RDI3MTY2NEMsIDB4MzYyQzQ2MDAsCisweENCMDg2MDYwLCAweDI2MDAwMDBCLCAweEQyNkQ2NTRDLCAweDM1MkM0NTAwLAorMHhFMUY3NjY1MCwgMHgwMDBCMjYxOSwgMHg2MjRDMjU2MCwgMHg0MjAwRDY2NywKKzB4NjAyMDMyNkMsIDB4NDAyMUM5MDgsIDB4NDAyMTQwMjEsIDB4NjAwQzAwMEIsCisweEQ2NjM2MjRDLCAweDMyNkM0MjAwLCAweEM5MDg2MDIwLCAweDQwMjE0MDIxLAorMHgwMDBCNDAyMSwgMHhEMTVGNjAwQywgMHgzNDFDNjQ0QywgMHgwMDBCNjI0MCwKKzB4RDE1RDYwMkMsIDB4MzQxQzY0NEMsIDB4MDAwQjYyNDAsIDB4MkZFNjYwMkMsCisweDZFNDM0RjIyLCAweEU2MEE2NDVDLCAweDg5MTQzNDY3LCAweDAwMDlCRkVCLAorMHg2MEVDNjQwQywgMHg4QjAyODgwMSwgMHhBMDAyRTAwRiwgMHg0NDA5MjQwOSwKKzB4NjI0QzQ0MDksIDB4MzI2M0U2MEEsIDB4QkZFMjg5MDUsIDB4NjIwQzY0NEMsCisweEM4ODA2MDIzLCAweEUyMDA4QjAwLCAweDRGMjY2MDIzLCAweDZFRjYwMDBCLAorMHhENjRBNEYyMiwgMHg4ODAxNjA2MiwgMHhCMjQ1OEIwMywgMHhBMDAzMDAwOSwKKzB4RDI0NzAwMDksIDB4MjI2MEU2NDAsIDB4RTIwMEQ2NDYsIDB4MDAwQjRGMjYsCisweDRGMjIyNjIyLCAweDYwNjJENjQxLCAweDhCMDE4ODAyLCAweDAwMDlCMjhFLAorMHhFMjAwRDY0MCwgMHgwMDBCNEYyNiwgMHhENTNDMjYyMiwgMHhFMTAwRDQzQywKKzB4MjUxMkU3MDEsIDB4MjQ3MDAwMEIsIDB4RTYwNEQyMzksIDB4MjI2MDAwMEIsCisweEQ0Mzk0RjIyLCAweDQxMEJEMTM5LCAweEQ1MzkwMDA5LCAweDY2NTBFMUZELAorMHgyNjE5RDIzOCwgMHgyNTYwRTcwMCwgMHgwMDBCNEYyNiwgMHg0RjIyMjI3MCwKKzB4RDEzMkQ0MzUsIDB4MDAwOTQxMEIsIDB4RTdGQkQ1MzEsIDB4MjY3OTY2NTAsCisweDAwMEI0RjI2LCAweDRGMjIyNTYwLCAweEQxMkNENDMwLCAweDAwMDk0MTBCLAorMHhFN0Y3RDUyQiwgMHgyNjc5NjY1MCwgMHgwMDBCNEYyNiwgMHhENTI4MjU2MCwKKzB4NjI1MDk0MkQsIDB4MDAwQjIyNDksIDB4RDUyNTI1MjAsIDB4NjI1MEU0QkYsCisweDAwMEIyMjQ5LCAweDRGMjIyNTIwLCAweDg1MjJEMjI1LCAweDIwMDg2MDBELAorMHg4ODAxODkxMSwgMHg4ODAzODkxMywgMHg4ODA1ODkxNSwgMHg4ODA2ODk0MiwKKzB4ODgwODg5NDgsIDB4ODgwOTg5NEUsIDB4ODgwQTg5NTQsIDB4ODgwQjg5NUEsCisweEEwNjc4OTYwLCAweEIwNjkwMDA5LCAweEEwNjQwMDA5LCAweEIwNzc2MDBDLAorMHhBMDYwMDAwOSwgMHhCMDgwNjAwQywgMHhBMDVDMDAwOSwgMHhGRjdGNjAwQywKKzB4MDAxRTIxNDgsIDB4MDAxRTEwMDAsIDB4MDAxRTExMDgsIDB4MDAyMDMxRkMsCisweDAwMjAzMUZFLCAweDAwMjAzMjFELCAweDAwMjAzMUUwLCAweDAwMUUxMDNGLAorMHgwMDFFMTA1RiwgMHgwMDFFMTAyRiwgMHgwMDFFMTA5MCwgMHgwMDIwMzIwNCwKKzB4MDAxRTEwMEIsIDB4MDAyMDMyMDAsIDB4MDAyMDMzMzAsIDB4MDAyMDE0NUUsCisweDAwMUUxMDI4LCAweDAwMjAzMjFDLCAweDAwMjAzMzNDLCAweDAwMjAzMzRDLAorMHgwMDIwMzFENCwgMHg2MjYwRDY4NCwgMHg4QjJCMjIyOCwgMHgwMDA5QjA2MSwKKzB4NjAwQ0EwMjksIDB4NjI2MEQ2ODAsIDB4OEIyMzIyMjgsIDB4MDAwOUIwNjksCisweDYwMENBMDIxLCAweDYyNjBENjdDLCAweDhCMUIyMjI4LCAweDAwMDlCMEM3LAorMHg2MDBDQTAxOSwgMHg2MjYwRDY3OCwgMHg4QjEzMjIyOCwgMHgwMDA5QjBDRCwKKzB4NjAwQ0EwMTEsIDB4NjI2MEQ2NzQsIDB4OEIwQjIyMjgsIDB4MDAwOUIxMjUsCisweDYwMENBMDA5LCAweDYyNjBENjcwLCAweDhCMDMyMjI4LCAweDAwMDlCMTNELAorMHg2MDBDQTAwMSwgMHg0RjI2RTAwMCwgMHgwMDA5MDAwQiwgMHhEMjZDRDE2QiwKKzB4RDU2Qzg0MTIsIDB4NDAwMEM5MEYsIDB4RDc2QjAxMkQsIDB4RTQwM0Q2NkIsCisweEUyMEY2MTFDLCAweDI1NDBFMDAxLCAweDI1MjAyNzEyLCAweDI2MDIwMDBCLAorMHhFNjAxRDI2MiwgMHgzMDY2ODUyMywgMHhFMDAwOEQwNSwgMHhENjYzRDI2MCwKKzB4RTAwMTgxMjIsIDB4MDAwQjI2MDIsIDB4RDI1QzAwMDksIDB4NjAwRDg1MjMsCisweDg5MDUyMDA4LCAweDhCMEE4ODAxLCAweDYwNjBENjVELCAweDI2MDBDQjAxLAorMHhENDU3RDY1QSwgMHhFMDAxRTEwMSwgMHgwMDBCMjYxMiwgMHgwMDBCODE0MiwKKzB4RDE1MkUwMDAsIDB4ODUxM0U1MDEsIDB4NjQwRDQ1MTgsIDB4NjYwMzM0NTMsCisweEUwMDA4RDA1LCAweEQ1NTFEMjUzLCAweDIyNjBFMDAxLCAweDAwMEIyNTAyLAorMHg0RjIyMDAwOSwgMHg4NTEzRDE0OSwgMHg2NDUzNjUwRCwgMHg2MjQ5NDQxOSwKKzB4MjI3RDY3MkUsIDB4ODgwMTYwMkMsIDB4ODgwMjg5MDksIDB4ODgwMzg5MTAsCisweDg4MDY4OTFBLCAweDg4MDc4OTM1LCAweEEwNEM4OTNCLCAweEQ1NDYwMDA5LAorMHg2NjUyRDc0NiwgMHgyNzYyRDQ0NiwgMHg2MjJDNjI2MSwgMHgyNDIxQTAzOCwKKzB4MjIyODYyNUMsIDB4RDQ0MzhCM0YsIDB4NjY0MkQ1NDAsIDB4MjU2MkQ0NDAsCisweDI0MDE4NTYxLCAweDYyMDNBMDJDLCAweDIwMDg2MDVDLCAweDg4MTA4OTA3LAorMHg4ODIwODkwOCwgMHg4ODMwODkwOSwgMHhBMDJDODkwQSwgMHhEMjNBMDAwOSwKKzB4NjIyMkEwMDgsIDB4QTAwNUQyMzksIDB4RDIzOTYyMjIsIDB4NjIyMkEwMDIsCisweDYyNjJENjM4LCAweEQ0MzJENTMxLCAweDY2MjEyNTIyLCAweEEwMEY2MjZDLAorMHhENjM1MjQyMSwgMHg2MjYxRDUyRCwgMHg2MjJDRDQyRCwgMHhBMDA3MjU2MiwKKzB4RDYzMjI0MjEsIDB4ODU2MUQ1MjksIDB4MjU2MkQ0MjksIDB4NjIwMzI0MDEsCisweDY2MkQ4NTE1LCAweDM2MTc2MTBELCAweDY1MDM4RjAxLCAweEIwQ0IyNDUxLAorMHhBMDAxMDAwOSwgMHhFMDAwRTAwMSwgMHgwMDBCNEYyNiwgMHhENjE5MDAwOSwKKzB4RDQyN0UxMDEsIDB4NjU0MTI2MTAsIDB4RDExOEQ3MTcsIDB4RTIwRjY1NUQsCisweDI3NTJFMDAxLCAweDAwMEIyNjIwLCAweDJGRTYyMTAyLCAweEQyMEY0RjIyLAorMHg2NDBDODUyMywgMHg4QjA4MjQ0OCwgMHhENTExRDYxRCwgMHgyNjIxRTIwMCwKKzB4OTQwRjg0NTEsIDB4QTA0ODIwNDksIDB4REUwRDgwNTEsIDB4Qzg0MDYwRTAsCisweEUyMDE4RDMyLCAweDg5NDQzNDI3LCAweEQyMTZENjE1LCAweDI2NDE0MjBCLAorMHgwMDA5QTAzMCwgMHgwMDAwRkY3RiwgMHgwMDIwMzIxRCwgMHgwMDIwMzFENCwKKzB4MDAyMDMxRTAsIDB4MDAxRTExMDAsIDB4MDAxRTEwMEMsIDB4MDAyMDMyMDAsCisweDAwMUUxMDAwLCAweDAwMUUxMDAxLCAweDAwMjAzMjA4LCAweDAwMjAzMUU4LAorMHgwMDIwMzFFQywgMHgwMDIwMzFGMCwgMHgwMDIwMzIwQywgMHgwMDIwMzIxMCwKKzB4MDAyMDMyMTQsIDB4MDAyMDMyMTgsIDB4MDAyMDM1MUMsIDB4MDAyMDM1MjYsCisweDAwMjAzMUZBLCAweDAwMjAyMzYyLCAweDg5MTIzNDI3LCAweEQyOTRENjkzLAorMHgyNjQxNDIwQiwgMHhDQjgwODRFMSwgMHg4MEUxQjBGNSwgMHhENjkxNjBFMCwKKzB4MkUwMENCMDQsIDB4QzkzRjYwNjAsIDB4RDY4RjI2MDAsIDB4QTAwMUUwMDEsCisweEUwMDAyNjAyLCAweDAwMEI0RjI2LCAweEQ2OEM2RUY2LCAweEM4ODA2MDYwLAorMHhEMjg2ODkxOSwgMHg4ODAxNjAyMSwgMHhEMjg5OEIxNSwgMHg4NTI0RTUwMSwKKzB4ODkxMDMwNTYsIDB4RTIwM0QxODcsIDB4MjEyMEQ0ODcsIDB4RTAwQjY1NDEsCisweDA2NTY2NTVELCAweEU0MEZENTg1LCAweDIxNDBFNzAyLCAweEQ3N0UyNTcxLAorMHgwMDBCRTAwMSwgMHgwMDBCMjcwMiwgMHgyRkU2RTAwMCwgMHhERTgwNEYyMiwKKzB4Qzg4MDg0RTEsIDB4RDU3QTg5MkMsIDB4MjAwODg1NTQsIDB4NjEwMzhGMjgsCisweDg1NTNENzdDLCAweDY0MDM2NjcyLCAweDg1NjY2NTBDLCAweDM1MjA2MjBDLAorMHhENjc5OEIxRSwgMHg2NTFDRDc3NCwgMHgyNjUxNjQ0QywgMHg2MEUwMjc0MSwKKzB4ODkwNEM4NDAsIDB4NDIwQkQyNzUsIDB4QTAwMzAwMDksIDB4RDI2ODAwMDksCisweDAwMDk0MjBCLCAweDAwMDlCMDlGLCAweEUyMDFEMTY3LCAweDYwRTAyMTIyLAorMHhDQjA0RDQ2NCwgMHg2MDQwMkUwMCwgMHgyNDAwQzkzRiwgMHg2MDIzQTAwMSwKKzB4NEYyNkUwMDAsIDB4NkVGNjAwMEIsIDB4MkZCNjJGQTYsIDB4MkZENjJGQzYsCisweERBNjIyRkU2LCAweDY2QTFFMjQwLCAweDM2MjJEQzVFLCAweDYyNjM4OTAwLAorMHg2RUQzNkQyQywgMHg0RTIxMzZEOCwgMHg0RTIxMkE2MSwgMHhEQjYxRDQ2MCwKKzB4RTcwMEEwMEYsIDB4NzcwMTYyQjIsIDB4NzEwMjYxMjMsIDB4NjYyMTJCMTIsCisweDcxMDI2MjEzLCAweDYxMjEyQjEyLCAweDY1MUQ2NjZELCAweDM1NkM0NTI4LAorMHg2MjdDMjQ1MiwgMHg4QkVEMzJFMywgMHhDOTAzNjBEMywgMHg4QjEwODgwMywKKzB4NjE3MzY3QjIsIDB4MkIxMjcxMDIsIDB4NzEwMjZFMTMsIDB4MkIxMjY1NzEsCisweDY1NUQ2REUxLCAweDQyMjg2MkRELCAweDMyNUNFMTA3LCAweEEwMEMyQzEwLAorMHg4ODAyMjQyMiwgMHhBMDAzOEIwMSwgMHg4ODAxRTIwMywgMHhFMjAxOEIwNSwKKzB4NjZCMjJDMjAsIDB4NjU1RDY1NjEsIDB4RTYwRjI0NTIsIDB4NjdBMTJDNjAsCisweDhCMDUyNzc4LCAweEREMzhEQzQ0LCAweEVCMDFFQTAwLCAweDJEQjIyQ0EyLAorMHg2REY2NkVGNiwgMHg2QkY2NkNGNiwgMHg2QUY2MDAwQiwgMHgyRkU2MkZENiwKKzB4RTI0MEREMzYsIDB4MzYyMjY2RDEsIDB4NjI2Mzg5MDAsIDB4MzY3ODY3MkMsCisweDc3MDNERTM4LCAweDQ3MjEyRDYxLCAweDY0RTJENjM1LCAweEEwMEU0NzIxLAorMHg2NTYyRTEwMCwgMHg2MjUzNzEwMSwgMHg3NDAxMjQ1MCwgMHgyNDIwNDIxOSwKKzB4NDUyOTc0MDEsIDB4NzQwMTI0NTAsIDB4MjQ1MDQ1MTksIDB4NjIxQzc0MDEsCisweDhCRUUzMjczLCAweDY2RTI0MjAwLCAweDQyMDA2MUQxLCAweDIxMTgzNjJDLAorMHgyRTYyOEYwNiwgMHhERDFDRDcyOCwgMHhFNTAxRTQwMCwgMHgyRDUyMjc0MiwKKzB4MDAwQjZFRjYsIDB4MkZENjZERjYsIDB4NEYyMjJGRTYsIDB4RUQwQUVFMDEsCisweDY0RTNCQzk3LCAweEJDOUM2NEUzLCAweDYyRUM3RTAxLCAweDhCRjczMkQ3LAorMHhCQzlGRUUwMSwgMHg2NEUzNjRFMywgMHg3RTAxQkNBNCwgMHgzMkQ3NjJFQywKKzB4NEYyNjhCRjcsIDB4MDAwQjZFRjYsIDB4RDExODZERjYsIDB4RDQxODkyMEQsCisweDcyMTIyMTIyLCAweDI0MjJENjE3LCAweEQ3MTc3MjA0LCAweDcyMjAyNjIyLAorMHgyNzIyRDExNiwgMHgwMDBCNzIzMCwgMHgxMzdBMjEyMiwgMHgwMDIwMzFGQSwKKzB4MDAyMDI0NkUsIDB4MDAxRTEwMTUsIDB4MDAyMDMyMDAsIDB4MDAxRTEwMDEsCisweDAwMjAzMUQ0LCAweDAwMUUxMTAwLCAweDAwMjAzMUZFLCAweDAwMjAzMUVDLAorMHgwMDFFMTAwMCwgMHgwMDIwMzFGMCwgMHgwMDIwMzFGQywgMHgwMDIwMjM2MiwKKzB4MDAxRTEwMEMsIDB4MDAyMDMxRTgsIDB4MDAyMDMyMDQsIDB4MDAyMDMyMDgsCisweDAwMjAzMjBDLCAweDAwMjAzMjEwLCAweDAwMjAzMjE0LCAweDAwMjAzMjE4LAorMHg0RjIyMkZFNiwgMHhENjUwN0ZGQywgMHg4ODAxNjA2MCwgMHhFMjAxODk1MSwKKzB4MjYyMEJGQkIsIDB4RDU0RUQxNEQsIDB4REU0RTYwMTAsIDB4NjRFMzY1NTIsCisweDc0MDJDODQwLCAweDhEMjJEMTRDLCAweEQyNEM3NTAyLCAweEU2MDFENzRDLAorMHhFNzA0MjcyMiwgMHg3NjAxNjI1NSwgMHg2MjZDMjQyMSwgMHg4RkY5MzI3MywKKzB4RDQ0Mzc0MDIsIDB4NjI0MkU2MDEsIDB4NjQwRDg1MjgsIDB4Njc0OTQ0MTksCisweDI3NUQ2NTdFLCAweDgxRTQ2MDdDLCAweEU0MTdENTQyLCAweDY3NTU3NjAxLAorMHgzMjQzNjI2QywgMHg4RkY5MjE3MSwgMHhBMDIwNzEwMiwgMHhEMjNFMDAwOSwKKzB4RTYwMUQ3M0IsIDB4RTcwNDI3MjIsIDB4NzYwMTYyNTUsIDB4NjI2QzI0MjEsCisweDhGRjkzMjczLCAweEQ0MzI3NDAyLCAweDYyNDJFNjAxLCAweDY0MEQ4NTI4LAorMHg2NzQ5NDQxOSwgMHgyNzVENjU3RSwgMHg4MUU0NjA3QywgMHhFNDE3RDUzMywKKzB4Njc1NTc2MDEsIDB4MzI0MzYyNkMsIDB4OEZGOTIxNzEsIDB4OTI0QTcxMDIsCisweEQyMjYyRTIxLCAweDVFMjNENzJFLCAweDY0RjIyRkUyLCAweDYwNDM2NUYyLAorMHgyNzAwQzk4MCwgMHhDOTYwNjA0MywgMHg4MDcxNjEwMywgMHhDOTAzNjA0MywKKzB4ODA3MjQ1MTksIDB4NjVGMjYwNUMsIDB4ODE3MjY2RjIsIDB4NDYxOTQ2MjksCisweDYwNkM0NTI5LCAweDQwMTg2NDVDLCAweDgxNzMzMDRDLCAweDIxMTg1RTIzLAorMHg2NEYyMkZFMiwgMHg2RTRDNjJGMiwgMHg2MDJDNDIxOSwgMHg2NkYyNjJGMiwKKzB4NDYyOTQwMTgsIDB4NDYxOTMwRUMsIDB4NDIyOTgxNzQsIDB4NjUyQzYwNkMsCisweDMwNUM0MDE4LCAweDgxNzU4RjA3LCAweDAwMDlCQzlELCAweDIyMjg2MjBDLAorMHhBMDBBODkwOCwgMHg2MDEzMDAwOSwgMHg4QjAzODg0MCwgMHgwMDA5QjAwOSwKKzB4MDAwOUEwMDMsIDB4RTIwMkQ2MEYsIDB4N0YwNDI2MjIsIDB4MDAwQjRGMjYsCisweDAwMEI2RUY2LCAweDA2MEEwMDA5LCAweDAwMjAzMjFDLCAweDAwMUUxMDAwLAorMHgwMDIwMzIwOCwgMHgwMDIwMzUxQywgMHgwMDIwMzUyOCwgMHgwMDIwMzRDMCwKKzB4MDAyMDMxRjAsIDB4MDAyMDM0RjAsIDB4MDAyMDM0RUUsIDB4MDAyMDM0QzIsCisweDAwMjAzMUQ0LCAweDAwMjAzMjAwLCAweDRGMjIyRkU2LCAweERFOTM3RkZDLAorMHgyMDA4ODRFOSwgMHgyRjAwOEQwNiwgMHhENjkyRDQ5MSwgMHgwMDA5NDYwQiwKKzB4NjRGMEIxOTQsIDB4NjYyMEQyOTAsIDB4ODkwMjI2NjgsIDB4QzlCRjYwRTAsCisweDdGMDQyRTAwLCAweDAwMEI0RjI2LCAweDAwMEI2RUY2LCAweDJGRTYwMDA5LAorMHhERThBNEYyMiwgMHg2MEUwRDY4QSwgMHhDQkMwRDQ4QSwgMHg2MjYwMkUwMCwKKzB4QzgwMzYwMkMsIDB4NDAyMTg5MDQsIDB4NzAwMTQwMjEsIDB4NjYwM0EwMDIsCisweDY2MDM0MDA5LCAweEQ2ODQ2MTZELCAweEU1MDBBMDA0LCAweDc1MDE2MjYyLAorMHg3NDA0MjQyMiwgMHgzMjEzNjI1RCwgMHhEMjgwOEJGOCwgMHgwMDA5NDIwQiwKKzB4QzlCRjg0RTIsIDB4NEYyNjgwRTIsIDB4NkVGNjAwMEIsIDB4MkZFNjJGRDYsCisweDdGRkM0RjIyLCAweDYyNjBENjdBLCAweDg5NDQyMjI4LCAweEQ1NkZFMTAwLAorMHg2MDUwMjYxMCwgMHhDQjQwRDQ3NywgMHgyNTAwNDQwQiwgMHg4RDA1MjAwOCwKKzB4NjJFMDZFMDMsIDB4NzEwNDYxMkMsIDB4MkYxMUEwMDYsIDB4RDQ3MkQ2NkEsCisweERENzI2NzYwLCAweDY1N0M0RDBCLCAweEUyM0M2RDFELCAweDhCMDMzRDI3LAorMHhEMjY0RDQ2RiwgMHgwMDA5NDIwQiwgMHg0RDIxNEQyMSwgMHhBMDA1RDc2RCwKKzB4NjZFNkU0MDAsIDB4MzU3QzQ1MDgsIDB4NzQwMTI1NjIsIDB4MzVEMzY1NEQsCisweEQ3Njk4QkY3LCAweDYxNzJFMDAzLCAweDgxMTE0MDE4LCAweDZFNzI2MEYxLAorMHg4MUUyNzAwQywgMHhENDY1NjE3MiwgMHhERDY1ODExMywgMHg0RDBCREU2NSwKKzB4RTIwMTY1NzIsIDB4RDQ2NDJFMjIsIDB4NDIwQkQyNTIsIDB4RDY1MzAwMDksCisweEM5M0Y2MDYwLCAweDdGMDQyNjAwLCAweDZFRjY0RjI2LCAweDZERjYwMDBCLAorMHgyRkM2MkZCNiwgMHgyRkU2MkZENiwgMHhEMjVDNEYyMiwgMHg2QjQzNkU3MywKKzB4NDIwQjZDNTMsIDB4MjAwODZENjMsIDB4NjEwMzhGMDgsIDB4RDI0NUQ0NTgsCisweDZFRjY0RjI2LCAweDZDRjY2REY2LCAweDZCRjY0MjJCLCAweDIxQjA2MEMzLAorMHg2MEQzODAxMSwgMHhFNTAwODExMSwgMHg2NEJDQTAwNywgMHg2MDUzNjU1RCwKKzB4NjY1MzAwRUMsIDB4NzUwMTM2MUMsIDB4NjI1RDgwNjQsIDB4OEJGNTMyNDMsCisweDYwNjBENjM2LCAweDI2MDBDOUJGLCAweDZFRjY0RjI2LCAweDZDRjY2REY2LAorMHg2QkY2MDAwQiwgMHg3RkM0NEYyMiwgMHg3MjAyNjJGMywgMHgyMjUxMkY0MSwKKzB4NDUyOTcyMDIsIDB4NjA2MzIyNTEsIDB4RTVDNEU2ODIsIDB4NjdGMzgxMjEsCisweDY1NUM2NjZDLCAweEU0MDhCRkJDLCAweDRGMjY3RjNDLCAweDAwMDkwMDBCLAorMHgyRjk2MkY4NiwgMHgyRkI2MkZBNiwgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwKKzB4RTEwMDdGQzQsIDB4NjUxM0VDRkYsIDB4NkIxMzZDQ0QsIDB4REUzNkQ3MzUsCisweEVERkY2NEYzLCAweEQ4MzVFQTA0LCAweDYwNTM2NTVDLCAweDAyN0Q0MDAwLAorMHgzMkMwNjIyRCwgMHg2NjAzOEQwRCwgMHgwOUVENjA2MywgMHgyNDkxMDI3RCwKKzB4MjQyMTc0MDIsIDB4Njk4MjAyRUQsIDB4MzkyODYyMkQsIDB4NzQwMjI4OTIsCisweDc1MDE3MTA0LCAweDYwNjM2MjVDLCAweDA3RDUzMkEyLCAweDBFQjU4RkU0LAorMHgyNDQ4NjQxQywgMHhFNjgwODkwNSwgMHg2N0YzRTVDNSwgMHhCRjdGNjY2QywKKzB4N0YzQzY1NUMsIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkFGNjZCRjYsCisweDAwMEI2OUY2LCAweEQxMUU2OEY2LCAweDYwMTJEMjFFLCAweENCMjBFNDA1LAorMHgyMTAyRTUwMCwgMHgwMDBCMjI0MiwgMHgwMDAwMjI1MiwgMHgwMDFFMTAxNywKKzB4MDAyMDMzNTgsIDB4MDAyMDE0NUUsIDB4MDAyMDMxQTIsIDB4MDAxRTEwMTUsCisweDAwMUUxMEJGLCAweDAwMTE3ODAwLCAweDAwMUUxMEZDLCAweDAwMjAwMzA4LAorMHgwMDIwMzFBOCwgMHgwMDIwMjVDNiwgMHgwMDIwMzM1QywgMHgwMDIwMTRBQSwKKzB4MDAyMDMzNzgsIDB4MDAxMTc4OEMsIDB4MDAyMDMxQTQsIDB4MDAyMDJEODgsCisweDAwMjAxMUU0LCAweDAwMUUyMTMwLCAweDAwMjAzMzgwLCAweDAwMjAyNTg4LAorMHgwMDIwMzM4NCwgMHgwMDIwMzFCQywgMHgwMDIwMzFDNCwgMHgwMDIwMzRCQywKKzB4MDAxQzM1MDAsIDB4MDAxRDQwMDQsIDB4RDU2NUQxNjQsIDB4RTQwMEQ3NjUsCisweDIxNDJFMjBGLCAweDE3NDExMTU0LCAweEQ1NjMyNzIyLCAweDk2NjlENzYzLAorMHgxNTQxMjU3MiwgMHg5NjY2MTU2MiwgMHhFNjAxMTU2NSwgMHhENTYwMTE2NSwKKzB4NjY2Q0U2RjgsIDB4MjU0MjI1NDIsIDB4MjU0MjI1NDIsIDB4MjU0MjI1NDIsCisweDI1NjIyNTQyLCAweDc2MDFFNzI3LCAweDY3NjMyNTcyLCAweDI1NjI3Nzk3LAorMHhFNzA0MjU3MiwgMHgyNTcyRTI0OCwgMHhFMjE5MjUyMiwgMHhFMjcwMjUyMiwKKzB4MjU0MjI1NDIsIDB4MjU0MjI1NDIsIDB4MjUyMjI1NDIsIDB4MjUyMkUyMEMsCisweDI1NDIyNTQyLCAweDI1NDIyNTQyLCAweDI1NDIyNTQyLCAweDI1NDIyNTQyLAorMHgwMDBCMTU0QSwgMHhFMjA4MTE0NSwgMHgwMDA5NDIyQiwgMHgyRkU2MkZENiwKKzB4N0ZGQzRGMjIsIDB4QzgyMDYwNDMsIDB4NkU0MzhEMDIsIDB4MDAwOUJFNkQsCisweEM4MTA2MEUzLCAweEJFNkE4OTAxLCAweDYwRTMwMDA5LCAweDg5MDFDODQwLAorMHgwMDA5QkU4QywgMHhDODAxNjBFMywgMHhERDNFODkzOCwgMHhDODAyNjBEMCwKKzB4MkYwMDhEMDMsIDB4NDYwQkQ2M0MsIDB4NjBGMDAwMDksIDB4ODkwMkM4MDQsCisweDQ2MEJENjNBLCAweDYyRjAwMDA5LCAweEM4ODA2MDIzLCAweDYwRDA4OTAyLAorMHgyRDAwQzk3RiwgMHhDODAxNjAyMywgMHhENjM1ODkwNiwgMHgwMDA5NDYwQiwKKzB4MDAwOUEwMDcsIDB4NTE2MzA2MDEsIDB4ODkwMkM4MDgsIDB4NDYwQkQ2MzEsCisweDYwRjAwMDA5LCAweDg5MDJDODEwLCAweDQyMEJEMjJGLCAweEQ1MkYwMDA5LAorMHg4ODAyNjA1MiwgMHhEMjJFOEIwMywgMHhBMDA1RTYwNCwgMHg4ODAxMjI2MCwKKzB4RDIyQjhCMDIsIDB4MjI2MEU2MDEsIDB4MjUyMkUyMDAsIDB4Qzg4MDYwRTMsCisweEQ2Mjg4OTJFLCAweDYwRTM2RTYwLCAweDg5MDJDODgwLCAweDQyMEJEMjI2LAorMHg2MEUzMDAwOSwgMHg4OTAyQzg0MCwgMHg0MjBCRDIyNCwgMHg2MEUzMDAwOSwKKzB4ODkwMkM4MDIsIDB4NDIwQkQyMjIsIDB4NjBFMzAwMDksIDB4ODkwRUM4MDQsCisweDQxMEJEMTIwLCAweEJGMEUwMDA5LCAweEJGNEQwMDA5LCAweEQ1MUUwMDA5LAorMHg2MDUwRDQxRSwgMHhDOTA4RDcxRSwgMHhCRjg0MjUwMCwgMHg2MEUzMjQ3MiwKKzB4ODkwNUM4MDgsIDB4N0YwNEQyMUIsIDB4NkVGNjRGMjYsIDB4NkRGNjQyMkIsCisweDRGMjY3RjA0LCAweDAwMEI2RUY2LCAweDAwMDA2REY2LCAweDAwMUM1ODFDLAorMHhBMDAwQTAwMCwgMHgwMDFEMDEwMCwgMHgwMDFENDAwMCwgMHgwMDA0MDAyMSwKKzB4MDAxQzU4OUMsIDB4MDAxRTEwMjEsIDB4MDAyMDE2NDAsIDB4MDAyMDE2NjIsCisweDAwMjAxQ0EwLCAweDAwMjAxNjdBLCAweDAwMjAxNjg4LCAweDAwMjAzMjAwLAorMHgwMDFFMTAwQiwgMHgwMDFFMTAyOCwgMHgwMDIwMTZERSwgMHgwMDIwMTZFQSwKKzB4MDAyMDE2OTAsIDB4MDAyMDE2QUUsIDB4MDAxRTEwMDAsIDB4MDAxMEYxMDAsCisweDEyMzQ1Njc4LCAweDAwMjAxNkM2LCAweDY0NENENkE3LCAweDAwMEIzNDZDLAorMHhENkE2MjQ1MCwgMHgzNDZDNjQ0QywgMHgyNDUwMDAwQiwgMHg2NDRDRDZBNCwKKzB4MDAwQjM0NkMsIDB4NjI1QzI0NTAsIDB4NDIwODYxNkQsIDB4NDIwODQxMTksCisweDQyMDA2MDE5LCAweDY3MEU2MTRDLCAweEQ0OUUzMjFDLCAweDQyMDAyMDdELAorMHgzMjRDQzkwRiwgMHgyMjAwMDAwQiwgMHg0MjA4NjI1QywgMHg0MjAwNDIwOCwKKzB4MzI0QzY0NEMsIDB4NDIwMEQ0OTgsIDB4MDAwQjMyNEMsIDB4MkZFNjIyNjAsCisweDYxNEM0RjEyLCAweDQxMDBENDkzLCAweDY3MTAzMTRDLCAweEUyOUY2NjZELAorMHgyNzI5NDYxOSwgMHg2RTUzNjI2OSwgMHg2NzJFNjU3MywgMHg0MjIxMjI3RCwKKzB4NDIyMTQyMjEsIDB4NzYwMTY2MkMsIDB4RTQwMTQ2MDgsIDB4MzRFODQ2MDgsCisweDY0NEM0NjAwLCAweDA3MUEwNDY3LCAweDIxNTAyNTdCLCAweDAwMEI0RjE2LAorMHg0RjIyNkVGNiwgMHhEMjg1N0ZFOCwgMHg4ODAxNjAyMSwgMHhEMjg0OEI3QiwKKzB4MjY2ODY2MjEsIDB4RDI4MzhCNzcsIDB4MjY2ODY2MjEsIDB4RTUwRjhCNzMsCisweEU0MDFCRkEyLCAweEJGQTRFNTAxLCAweEU1ODZFNDAwLCAweEU0MDA2NTVDLAorMHgyRjUwQkZBNCwgMHhCRkExRTQwMSwgMHhFNjAyRTUwNiwgMHg2MDYzNDYxOCwKKzB4ODFGMkU0MDEsIDB4NjU0M0JGOUYsIDB4RTQwMTg1RjIsIDB4QkZBQjY1NDMsCisweDg1RjI2NjAzLCAweDY1NDNFNDAxLCAweDY2MDNCRkIxLCAweEU0MDI2NUYwLAorMHg2MDUzNzU2QywgMHg4MEY4QkY4MCwgMHhCRjgyRTQwMiwgMHg4NEY4RTUxMiwKKzB4NzA5MEU0MDIsIDB4NjUwM0JGODIsIDB4NDYxOEU2MDIsIDB4ODFGNjYwNjMsCisweEJGODBFNDAyLCAweDg1RjZFNTAwLCAweDY2MDNFNDAyLCAweEU1MDBCRjhDLAorMHhFNDAyODVGNiwgMHhCRjkyNjYwMywgMHhFNUZFRTUwMCwgMHhFMDEwNjU1QywKKzB4QkY2MUU0MDMsIDB4RTUxMzBGNTQsIDB4RTQwRUJGNjMsIDB4MDVGQ0UwMTAsCisweEJGNjNFNDBFLCAweEU1MDA3NTg1LCAweEJGNjRFNDAzLCAweEU1MDBFNjQwLAorMHhCRjcxRTQwMywgMHhFNTAwRTY0MCwgMHhCRjc4RTQwMywgMHhFNUZGRTY0MCwKKzB4RTAxNDY1NUMsIDB4QkY0N0U0MDQsIDB4RTQwRjBGNTQsIDB4RTUwNEJGNDksCisweDA1RkNFMDE0LCAweEJGNDlFNDBGLCAweEU1MDE3NTg0LCAweEJGNEFFNjQwLAorMHhFNTAxRTQwNCwgMHhCRjU3RTY0MCwgMHhFNTAxRTQwNCwgMHhFNDA0RTY0MCwKKzB4QUY1QzdGMTgsIDB4N0YxODRGMjYsIDB4MDAwQjRGMjYsIDB4NEYyMjAwMDksCisweEQyNDI3RkYwLCAweDg4MDE2MDIxLCAweEQyNDE4QjcxLCAweDI2Njg2NjIxLAorMHhEMjQwOEI2RCwgMHgyNjY4NjYyMSwgMHhFNTBGOEI2OSwgMHhFNDAxQkYxQywKKzB4QkYxRUU1MDEsIDB4RTU4NkU0MDAsIDB4RTQwMDY1NUMsIDB4MkY1MEJGMUUsCisweEJGMUJFNDAxLCAweEU0MDFFNTA2LCAweEJGMUM2NTQzLCAweEU0MDFFNjQwLAorMHhCRjI5NjU0MywgMHhFNDAxRTY0MCwgMHhCRjMwNjU0MywgMHg2NUYwRTY0MCwKKzB4NzU2Q0U0MDIsIDB4QkVGRjYwNTMsIDB4RTQwMjgwRjQsIDB4RTUxMkJGMDEsCisweEU0MDI4NEY0LCAweEJGMDE3MDkwLCAweEU2NDA2NTAzLCAweEJGMDJFNDAyLAorMHhFNjQwRTUwMCwgMHhCRjBGRTQwMiwgMHhFNjQwRTUwMCwgMHhCRjE2RTQwMiwKKzB4RTVGRUU1MDAsIDB4NjA1MzY1NUMsIDB4QkVFNUU0MDMsIDB4RTUxMzgwRjgsCisweEU0MEVCRUU3LCAweEU0MEU4NEY4LCAweEJFRTc3MDg1LCAweEU1MDA2NTAzLAorMHhCRUU4RTY0MCwgMHhFNTAwRTQwMywgMHhCRUY1RTY0MCwgMHhFNTAwRTQwMywKKzB4QkVGQ0U2NDAsIDB4RTVGRkU0MDMsIDB4NjA1MzY1NUMsIDB4QkVDQkU0MDQsCisweEU0MEY4MEZDLCAweEU1MDRCRUNELCAweEU0MEY4NEZDLCAweEJFQ0Q3MDgzLAorMHhFNTAxNjUwMywgMHhCRUNFRTY0MCwgMHhFNTAxRTQwNCwgMHhCRURCRTY0MCwKKzB4RTUwMUU0MDQsIDB4RTQwNEU2NDAsIDB4QUVFMDdGMTAsIDB4N0YxMDRGMjYsCisweDAwMEI0RjI2LCAweDAwMDAwMDA5LCAweDAwMUUxMDJGLCAweDAwMUUxMDgwLAorMHgwMDFFMTA5MCwgMHgwMDFFMTAzRiwgMHgwMDFFMTAzRSwgMHgwMDIwMzFGQSwKKzB4MDAyMDMxRkMsIDB4MDAyMDMxRkUsIDB4RDIxREQxMUMsIDB4NjYyMDYwMTAsCisweDY3NkM3MDAxLCAweDM3MDBDOTBGLCAweEU1MDA4RDEzLCAweDY3MTA2MjEwLAorMHg3NzAxNjIyQywgMHg2NDIzMjE3MCwgMHhENjE2NjAxMCwgMHg0NDA4NDQwOCwKKzB4MzQyOEM5MEYsIDB4NjI2MDIxMDAsIDB4NzIwMUQ1MTMsIDB4NDQwODI2MjAsCisweDAwMEIzNTRDLCAweEQxMEY2MDUzLCAweDI1NTg2NTEwLCAweEU2MDA4RDEzLAorMHhENjBERDQwQiwgMHg2NTVDNjU0MCwgMHg0NzA4Njc1MywgMHgzNzU4NDcwOCwKKzB4NDcwODY1NDAsIDB4MjQ1MDc1MDEsIDB4MzY3QzYwNDAsIDB4MjQwMEM5MEYsCisweDcyRkY2MjEwLCAweDAwMEIyMTIwLCAweDAwMDA2MDYzLCAweDAwMjAzMUExLAorMHgwMDIwMzFBMCwgMHgwMDIwMzFBMiwgMHgwMDIwMkRDOCwgMHg3RkZDNEYyMiwKKzB4RTY4MEQxOUQsIDB4NjY2QzYyMTIsIDB4RDI5QzJGMjIsIDB4NjdGMzY1NjMsCisweDQyMEI3NTQyLCAweDdGMDRFNDA0LCAweDAwMEI0RjI2LCAweEU2ODAwMDA5LAorMHhEMjk2NjY2QywgMHhFNzAwNjU2MywgMHg0MjJCNzU0MCwgMHhFNjgwNjQ3MywKKzB4RDI5MjY2NkMsIDB4RTcwMDY1NjMsIDB4NDIyQjc1NDMsIDB4MkY4NjY0NzMsCisweDJGQTYyRjk2LCAweDJGQzYyRkI2LCAweDJGRTYyRkQ2LCAweDdGRjQ0RjIyLAorMHhERDhDRDI4QiwgMHg3MjAxMUYyMSwgMHhEQjhCMUYyMiwgMHg2QUYyRTg0MCwKKzB4NTIxMUQxOEEsIDB4MzYyMDY2MTIsIDB4QTBBNzhCMDEsIDB4NjA2MTAwMDksCisweDg4MDFDOTAzLCAweEEwQTE4QjAxLCAweEQ5ODQwMDA5LCAweDQyMEJEMjg0LAorMHg1NTAzNjQ5MywgMHg4NDVDNkEwMywgMHgzMEUwRUU4NCwgMHhEMTgxOEI3OSwKKzB4NjA2QzY2MTAsIDB4OEIzRDg4MDEsIDB4NjIxMEQxN0YsIDB4ODkyRjIyMjgsCisweEQ1N0VFNzAxLCAweDY0NTIyQjcyLCAweDE0NDJFMDAzLCAweEQ1N0M2MjUyLAorMHhFNjAwNDAxOCwgMHgyMTYwODEyMSwgMHhEMTdBNjQ1MywgMHg2RTUyNzQwNCwKKzB4NjAxMjY3NDIsIDB4Q0IyMERDNzgsIDB4NzYwMTIxMDIsIDB4MzI4MzYyNkQsCisweDI1RTI4QkZCLCAweDI0NzJERTcxLCAweDYyRTI2N0MyLCAweDEyNzREMTczLAorMHg2MDQxNjRFMiwgMHgyNDAxQ0IwMSwgMHhFRTAwNjZFMiwgMHhEQzcwMkM2MiwKKzB4RUMwMTJDNjIsIDB4MkRDMjQxMEIsIDB4NEMxOEVDMDEsIDB4MkJFMjJEQzIsCisweEQ3NjRERTZDLCAweEQxNkM2MEUyLCAweENCMDFFMjAyLCAweDI3MjAyRTAyLAorMHgyMTIyQTAyRiwgMHg4QjJDMjAwOCwgMHhFNzAxREU2OCwgMHhENDY2RUMwMCwKKzB4MjE3MEQyNjQsIDB4RUUwMTJFQzIsIDB4NjEyMjI0RTIsIDB4MjE2OUU2RkUsCisweEUwMUUyMjEyLCAweDU0RjEwQzVDLCAweDI0QzBFMDFGLCAweDU2RjIwMjVDLAorMHgyNjIwNzUxMCwgMHhENzVFRTYwMCwgMHhFRTA2RDQ1RSwgMHg3NjAxODQ1NiwKKzB4NkM1NDI3MDAsIDB4MzFFMzYxNkMsIDB4NzQwMTI0QzAsIDB4NzcwMThGRjYsCisweEU0OTREMjU5LCAweDcyMDEyMjQwLCAweDIyNTBFNTAwLCAweEU2MDU3MjBGLAorMHhEMjU2MjI2MCwgMHg2NUEzNjQ5MywgMHhFRTAxNDIwQiwgMHhBRjZGNEUxOCwKKzB4MkZBMjJERTIsIDB4RDQ1MjY1RjIsIDB4NjY0Mjg1NTMsIDB4MzI2MjYyMEQsCisweEQ0NTA4OTA3LCAweDQxMEJEMTUwLCAweEQ3NTAwMDA5LCAweEFGNTdFNjAxLAorMHhENDNBMjc2MiwgMHhERDM3RDE0OSwgMHg2NUYyNDEwQiwgMHhENDRDRUUwMSwKKzB4NEUxOEQ2NEMsIDB4MkRFMjQ2MEIsIDB4MDAwOUFGNEEsIDB4N0YwQzJGQTIsCisweDZFRjY0RjI2LCAweDZDRjY2REY2LCAweDZBRjY2QkY2LCAweDAwMEI2OUY2LAorMHg0RjIyNjhGNiwgMHg4NTQ2N0ZGNCwgMHgyRjAxRTY4MSwgMHg2NjZDODU0NywKKzB4ODU0ODgxRjEsIDB4ODFGMkQyMjUsIDB4NjdGMzg1NDIsIDB4ODU0MzgxRjMsCisweDgxRjRFNDBDLCAweDY1NjM2MDUzLCAweDQyMEI4MUY1LCAweDdGMEM3NTQwLAorMHgwMDBCNEYyNiwgMHgyRjg2MDAwOSwgMHgyRkE2MkY5NiwgMHgyRkM2MkZCNiwKKzB4MkZFNjJGRDYsIDB4N0ZFQzRGMjIsIDB4RTgwMEQxMUEsIDB4RDQzMjJGMTIsCisweDFGNDE2MTgzLCAweDZBMTNEQjIwLCAweDRBMDhENjMwLCAweERFMjBFMDAxLAorMHg0QTAwNDYwQiwgMHgxRjAyM0FFQywgMHg1MkIxNjZCMiwgMHg4QjAxMzYyMCwKKzB4MDAwOUExOUIsIDB4QzkwMzYwNjEsIDB4OEIwMTg4MDEsIDB4MDAwOUExOTUsCisweERFMjc1MjYzLCAweDhCNEYzMkUwLCAweDQyMEJEMjBELCAweERFMjU2NEIzLAorMHhENzBERDUwRSwgMHhFRDAxREMwQiwgMHgyRTAyRTEwMCwgMHgyN0QwMjUwMiwKKzB4QUZFMTJDMTAsIDB4MDAwMDJFMTYsIDB4MDAxQzNEOUMsIDB4MDAyMDFGNDAsCisweDAwMTE3NzlBLCAweDAwMUMzRDMwLCAweDAwMUQwMTA0LCAweDAwMjAyREMwLAorMHgwMDIwMTE2MiwgMHgwMDIwMzFCMSwgMHgwMDIwMzFCMCwgMHgwMDIwMzFBQywKKzB4MDAxQzNCOUMsIDB4MDAxQzM1MDAsIDB4MDAyMDJEOTgsIDB4MDAyMDEyNzYsCisweDAwMUMzRDAwLCAweDAwMUMzNkY4LCAweDAwMTE3NzA4LCAweDAwMjAzMUI0LAorMHgwMDExNzc4QywgMHgwMDExNzc5MiwgMHgwMDExNzc4OCwgMHgwMDIwMTE4MCwKKzB4MDAyMDMxODgsIDB4MDAyMDJEODgsIDB4MDAyMDExRTQsIDB4MDAxRTIxMzAsCisweDAwMjAzNDlDLCAweDAwMjAxNDVFLCAweDAwMjAzNEE4LCAweDAwMjAyQzgwLAorMHgwMDExNzc4MCwgMHgwMDExNzcwQywgMHhDODAxODU2MSwgMHg1QzYzODk3QSwKKzB4NjYwMzg1QzIsIDB4NjQwM0M5MDMsIDB4NjUwRDg1QzMsIDB4NDAyMTYwNTMsCisweEM5M0Y0MDIxLCAweDZFMDM0NTAwLCAweDI1MkQzMjJBLCAweEUyMTA2MDUzLAorMHgzRTIzQzkwMSwgMHg2RDAzOEQyMywgMHg0NDA4RDc5RCwgMHg0NDA4NjU3MCwKKzB4NDQwMDYyRTMsIDB4MjU1ODQyMDAsIDB4MzQyQzhGMEYsIDB4NjA0M0QyOTksCisweDY5N0QwNzJELCAweDYwOTk0OTE5LCAweDIwMUQ2MTBFLCAweDYwRDM4MUY2LAorMHg4RjBDODgwMSwgMHhBMDBBNjk3QywgMHhEMjkzNjlFMywgMHgwNTJENjA0MywKKzB4NDIxOTYyNUQsIDB4NjcwRTYwMjksIDB4ODFGNjIwN0QsIDB4RDE4RjY5NUMsCisweDIyMjg2MjEwLCAweEU5RkY4OTAxLCAweEVFRkY2OTlDLCAweDZFRUM2NTlELAorMHg4QjBGMzVFMCwgMHg0QzBCREM4QSwgMHg1NDAzNjRCMywgMHhCRjIwRTUwMiwKKzB4RDQ4ODZFMDMsIDB4NDEwQkQxODgsIDB4RDc4ODY1RTMsIDB4RDQ4OEVEMDEsCisweDI3RDJBMDFFLCAweDI2RTlFRUZDLCAweDgxQzI2MDYzLCAweDk3QzU4NUMzLAorMHg2MjAzMjA3OSwgMHg0NTA4ODVGNiwgMHg2MDYzMjYwQiwgMHg4MUMyMjUyQiwKKzB4ODFDMzYwNTMsIDB4RTEwODg1QzQsIDB4MjAxQjQxMTgsIDB4NjJCMjgxQzQsCisweDIwRTk4NTIxLCAweDY0QjI4MTIxLCAweENCMDE2MDQxLCAweEQ0NzkyNDAxLAorMHg0NTBCRDU3OSwgMHg2MEIyMDAwOSwgMHg1N0YyNjZGMiwgMHgyQTAyQ0IwMSwKKzB4MjY3MkFGMjIsIDB4RDI2RTg1NjEsIDB4OEYwMkM4MDIsIDB4QTA5RjY0QjMsCisweDQyMEIwMDA5LCAweERDNzEwMDA5LCAweDVFMDM2NTAzLCAweDA3Q0VFMDRDLAorMHg3NzAxREQ2RiwgMHg2Q0QyMEM3NiwgMHg3QzAxRDY2NCwgMHg2RDYwMkRDMiwKKzB4ODkwNjJERDgsIDB4RDI2NEQ0NjMsIDB4RUQwMTQyMEIsIDB4QTA3RUQ3NjMsCisweDYyNTEyN0QyLCAweDQxMThFMTBGLCAweDIyMTlFNDAyLCAweDMyNDA0NDE4LAorMHg4NTUxOEIxMSwgMHgyMEQ5RURGQywgMHg2MDUxODE1MSwgMHhDQjAxN0RFMywKKzB4ODVFMTI1MDEsIDB4MjBEOUQ2NUYsIDB4NDYwQjgxRTEsIDB4NkNGMjY0QjMsCisweEEwNjQ1N0YyLCAweDZENTEyQzcyLCAweDREMTk2RERELCAweDY2REU2REQ5LAorMHg3RDAxMkQ2RCwgMHg2MTAzNjBEQywgMHg4ODAxNDExOCwgMHgyNTExOEY0NSwKKzB4NjQ2MkQ2NTMsIDB4MjY0Mjc0MDEsIDB4NjYwRDg1RTMsIDB4NDAyMTYwNjMsCisweEM5M0Y0MDIxLCAweDZEMDM0NjAwLCAweDI2MkQzMjJBLCAweEM4MDE2MDYzLAorMHhEQzRFRDE0RCwgMHg5NjRBODkwMSwgMHhFNjAwMkQ2QiwgMHgwRjY0RTAxMCwKKzB4RTAxMDY0REQsIDB4NjA3QzA3RkMsIDB4MDIxRDQwMDAsIDB4MzI0MDYyMkQsCisweDY2MDM4RDEyLCAweDAyMUQ2MDYzLCAweDMyNzBFN0ZGLCAweEEwMEI4QjAxLAorMHhFMDEwMDFENSwgMHhFNjA0MDJGQywgMHgwRjI0NzIwMSwgMHgzMjYyNjIyQywKKzB4MDZGQzhCRTcsIDB4NDYwMDY2NkMsIDB4MDFDRDYwNjMsIDB4MEMxNTcxMDEsCisweDY3MTFEMTNCLCAweDNDNDA2QzdELCAweDYyMTE4OTA3LCAweDg4RkY2MDJELAorMHgyMUQxODkwMywgMHhFMjAxREQzNywgMHg4NTUxMkQyMCwgMHgyMEQ5RURGQywKKzB4NjA1MTgxNTEsIDB4Q0IwMUQyMkYsIDB4NDIwQjY0QjMsIDB4RTAxMDI1MDEsCisweEQ0MzEwMkZDLCAweEUwMDE2MTJDLCAweDY3RjI0NDBCLCAweDg1RUYyNzAyLAorMHg1NEYxRDIyRSwgMHg2NTBENDIwQiwgMHgwMDA5QUU3RSwgMHg4MDAwN0UwMywKKzB4MDAwOTQyMEIsIDB4NkUwMzU0MDMsIDB4RUQwODg1NDQsIDB4MjBEOTREMTgsCisweDhCMDMzMEQwLCAweEU1MDFCRTNELCAweDAwMDlBMDA3LCAweEREMjQ4NTQxLAorMHgyMkQ4NjIwRCwgMHhCRTM0ODkwMSwgMHhENDEyRTUwMCwgMHg0MjBCRDIxMiwKKzB4RDcxMjY1RTMsIDB4QUU1RkVEMDEsIDB4NzgwMTI3RDIsIDB4RUUwNDYxOEQsCisweDhEMDIzMUU3LCAweEFFNEU3QjA4LCAweDdGMTQwMDA5LCAweDZFRjY0RjI2LAorMHg2Q0Y2NkRGNiwgMHg2QUY2NkJGNiwgMHgwMDBCNjlGNiwgMHgwMDAwNjhGNiwKKzB4MDAyMDM0QjgsIDB4MDAyMDMzOUMsIDB4MDAyMDM0MUMsIDB4MDAyMDMxOUMsCisweDAwMjAxMTYyLCAweDAwMjAyRDkwLCAweDAwMjAxMTgwLCAweDAwMUUyMTJDLAorMHgwMDIwMzRBMCwgMHgwMDIwMzRBNCwgMHgwMDIwMTQ1RSwgMHgwMDIwMkQyQywKKzB4MDAyMDM0QkMsIDB4MDAyMDExRTQsIDB4MDAyMDMxQkMsIDB4MDAyMDMxQzQsCisweDAwMjAzMUI4LCAweDAwMjAzMUJBLCAweDAwMjAyQzgwLCAweDAwMjAxNEFBLAorMHgwMDAwODAwMCwgMHg0RjIyMkZFNiwgMHg2RTIyRDIxMiwgMHhDODQwNjBFMywKKzB4MjJFMjhEMDIsIDB4MDAwOUJDRkEsIDB4NDIxOEUyNDAsIDB4ODkwMTJFMjgsCisweDAwMDlCRDA1LCAweEM4MTA2MEUzLCAweEQ0MEI4OTA1LCAweDQyMEJEMjBCLAorMHhCRDA0MDAwOSwgMHg2MEUzMDAwOSwgMHg4OTAxQzgwNSwgMHgwMDA5QkRFQiwKKzB4QzgwMjYwRTMsIDB4NEYyNjg5MDIsIDB4NkVGNkFEMDEsIDB4MDAwQjRGMjYsCisweDAwMDA2RUY2LCAweDAwMUMzNTEwLCAweDAwMjAzNEIwLCAweDAwMjAxNDVFLAorMHgwODBBMEMwRSwgMHgwMDAyMDQwNiwgMHgxQTFDMUUyMCwgMHgxMjE0MTYxOCwKKzB4MkUzMDMyMzQsIDB4MjYyODJBMkMsIDB4M0EzQzNFNDAsIDB4NkM2MjU2NDgsCisweDQxMTEyRjI2LCAweEUyMjA4RjE4LCAweDg5MEIzMTIzLCAweDMyMUNEMjA0LAorMHhEMTAyNjIyMCwgMHg0MTJCMzEyQywgMHgwMDA5MDAwOSwgMHgwMDIwMkNBQSwKKzB4MDAyMDJDNjAsIDB4MDAwQkUwMDAsIDB4NDAwMDYyRjYsIDB4NDAwMDQwMDAsCisweDQwMDA0MDAwLCAweDQwMDA0MDAwLCAweDYyRjYwMDBCLCAweDQwMDA0MDAwLAorMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwgMHg0MDE4NDAwMCwgMHg2MkY2MDAwQiwKKzB4NDAwMDQwMDAsIDB4NDAwMDQwMDAsIDB4NDAwMDQwMDAsIDB4NDAyODQwMDAsCisweDYyRjYwMDBCLCAweDQwMDA0MDAwLCAweDQwMTg0MDAwLCAweDAwMEI0MDI4LAorMHhDOTBGNjJGNiwgMHg0MDA1NDAwNSwgMHg0MDA1NDAwNSwgMHg2MkY2MDAwQiwKKzB4NDAwNUM5MDcsIDB4NDAwNTQwMDUsIDB4NjJGNjAwMEIsIDB4NDAwNUM5MDMsCisweDAwMEI0MDA1LCAweEM5MDE2MkY2LCAweDAwMEI0MDA1LCAweDAwMDA2MkY2LAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDU0NEYwRDBBLAorMHg0NjIwNTM1NSwgMHgwMDAwM0E1NywgMHgyMDZDNzU0QSwgMHgzMjIwMzUzMiwKKzB4MjAzNzMwMzAsIDB4MzEzQTMxMzIsIDB4MzczMjNBMzIsIDB4MDAwMDAwMDAsCisweDAwMDAwRDBBLCAweDAwMDAwMDQzLCAweDQyNzA3MzcyLCAweDNEMjA2Njc1LAorMHg1NTRFMjAzRCwgMHgyMDJDNEM0QywgMHg2RTQ5Njc3QSwgMHg0RTQ5NzI3NCwKKzB4NkQ3NTRFNTEsIDB4MDAwMDAwM0QsIDB4NjE3NjZFNDksIDB4MjA2NDY5NkMsCisweDcyNjU3Mzc1LCAweDIwNzI2RjIwLCAweDIwNzk2NTZCLCAweDAwMjE0NDQ5LAorMHg1MjUwNDU0NSwgMHg1NzIwNEQ0RiwgMHg2NTc0Njk3MiwgMHg2NDYxMjAyQywKKzB4MDAzRDcyNjQsIDB4NkM2MTc2MjAsIDB4MDAwMDAwM0QsIDB4MDAwMDBBMEQsCisweDZFNkI2RTU1LCAweDIwNkU3NzZGLCAweDZENkQ2RjYzLCAweDNENjQ2RTYxLAorMHgwMDAwMDAwMCwgMHgwMDBBMEQ1MiwgMHgyMDNBMzA1MSwgMHgwMDAwMDAyMCwKKzB4MjAzQTMxNTEsIDB4MDAwMDAwMjAsIDB4MjAzQTMyNTEsIDB4MDAwMDAwMjAsCisweDIwM0EzMzUxLCAweDAwMDAwMDIwLCAweDIwM0EzNDUxLCAweDAwMDAwMDIwLAorMHg2MTQzNzc0OCwgMHg3MjYyNjk2QywgMHg2RjY5NzQ2MSwgMHg2NjIwMjA2RSwKKzB4MEE2QzY5NjEsIDB4MDAwMDAwMEQsIDB4NzM2OTZGNEUsIDB4NjE0MzIwNjUsCisweDcyNjI2OTZDLCAweDZGNjk3NDYxLCAweDYxNjYyMDZFLCAweDIxMjE2QzY5LAorMHgwMDAwMEQwQSwgMHgwMDAwMDA3MiwgMHgwMDIwNTIyMCwgMHgwMDAwMEQwQSwKKzB4NjI3MzU1NzYsIDB4NzQ3MzcyNUYsIDB4MDAwMDBBMEQsIDB4NjI3MzU1NzYsCisweDczNzU3MzVGLCAweDY0NkU2NTcwLCAweDAwMDAwQTBELCAweDYyNzM1NTc2LAorMHg3MzY1NzI1RiwgMHgwMDBBMEQ2RCwgMHgwMDAwMDA0MiwgMHg3Mjc0NkU0OSwKKzB4NkQ2NTIwNTEsIDB4MkM3OTc0NzAsIDB4NDk2NzdBMjAsIDB4NDk3Mjc0NkUsCisweDc1NEU1MTRFLCAweDAwMDAzRDZELCAweDY1NEM3MjQ1LCAweDAwMDAwMDZFLAorMHgwMDAwMDA0OSwgMHgyMDc0NkY0RSwgMHg3NTZGNkU2NSwgMHg0OTIwNjg2NywKKzB4NDIyMDUxNEUsIDB4MEEwRDY2NzUsIDB4MDAwMDAwMDAsIDB4MDAwMDAwRkYsCisweDAwMDIwMDAxLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDEwRTAxMEQsCisweDAwMDIwMDAzLCAweDAxMDkwMTA4LCAweDAwMDIwMTBBLCAweDAyMDAwMDAzLAorMHgwMjAyMDIwMSwgMHgwMjA0MDIwMywgMHgwMjA2MDIwNSwgMHgwMjAyMDIwMCwKKzB4MDIwNDAyMDMsIDB4MDIwQzAyMDcsIDB4MDIwRTAyMEQsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMTBFMDEwRCwKKzB4MDBGRjAxMEYsIDB4MDEwOTAxMDgsIDB4MDEwQjAxMEEsIDB4MDIwMDAwRkYsCisweDAyMDIwMjAxLCAweDAyMDQwMjAzLCAweDAyMDYwMjA1LCAweDAyMDIwMjAwLAorMHgwMjA0MDIwMywgMHgwMjBDMDIwQiwgMHgwMjBFMDIwRCwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwMjA1MjIwLAorMHgwMDAwMDA0NiwgMHgwMDAwMDA1OSwgMHg3MzIwNDE0MiwgMHgwMDNENzE2NSwKKzB4NDk1NDQxMjAsIDB4MDAwMDIwNEQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMkUwMjA5LCAweDgwMDAwMTAxLCAweDAwMDQwOUZBLCAweDAwRkYwNDAwLAorMHgwNTA3MDAwMCwgMHgwMjAwMDIwMSwgMHg4MjA1MDcwMCwgMHgwMDAyMDAwMiwKKzB4MDM4MzA1MDcsIDB4MDcwMTAwNDAsIDB4NDAwMjA0MDUsIDB4MDIwOTAwMDAsCisweDAxMDEwMDJFLCAweDA5RkE4MDAwLCAweDA0MDAwMDA0LCAweDAwMDAwMEZGLAorMHgwMjAxMDUwNywgMHgwNzAwMDA0MCwgMHg0MDAyODIwNSwgMHgwNTA3MDAwMCwKKzB4MDA0MDAzODMsIDB4MDQwNTA3MDEsIDB4MDAwMDQwMDIsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDA3MDkwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9OworCitjb25zdCB1MzJfdCB6Y0Z3SW1hZ2VTaXplPTEzNjU2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwZnd1X0ZCNTBfbWRrLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBmd3VfRkI1MF9tZGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDE3MzZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwZnd1X0ZCNTBfbWRrLmMKQEAgLTAsMCArMSw3MjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgImNwcmVjb21wLmgiCisKK2NvbnN0IHUzMl90IHpjRndJbWFnZVtdID0geworMHgwMDA5MDAwQiwgMHg0RjIyMkZFNiwgMHhEMjI4N0ZGQywgMHgwMDA5NDIwQiwKKzB4MDAwOUIwMTksIDB4OTQ0NkQ1MjYsIDB4RTYwMEEwMDMsIDB4OEQwNDM2NDIsCisweDYwNTI3NjAxLCAweDhERjlDODQwLCAweEQ0MjIyRjAyLCAweDRFMEJERTIyLAorMHhENDIyMDAwOSwgMHgwMDA5NEUwQiwgMHg0RTBCRDQyMSwgMHg3RjA0MDAwOSwKKzB4QTAyNTRGMjYsIDB4NEYyMjZFRjYsIDB4NDEwQkQxMUUsIDB4RDQxRTAwMDksCisweDAwMDk0NDBCLCAweDQ1MEJENTFELCAweEQ3MUQwMDA5LCAweDYxMURFMUZGLAorMHgyNzEyRDIxQywgMHhENDFDNTAyOSwgMHhFMUZGQ0IwMSwgMHgxMjA5RTUwMSwKKzB4MTIxMTIyMTIsIDB4RDUxOTI0NTIsIDB4RDYxOTk3MTYsIDB4RTcwMDI1NzIsCisweDI2NzBEMjE4LCAweDIyNzJENjE4LCAweDRGMjZFMjAxLCAweDI2MjIwMDBCLAorMHhERDE3REMxNiwgMHg0QzBCREUxNywgMHg0RDBCMDAwOSwgMHg0RTBCMDAwOSwKKzB4QUZGODAwMDksIDB4MjcxMDAwMDksIDB4MDAwMDA2NDAsIDB4MDAyMDA5NUEsCisweDAwMUMwMDFDLCAweDAwMjAyOTQwLCAweDAwMjAwRTJBLCAweDAwMjAyOTRDLAorMHgwMDIwMjk2NCwgMHgwMDIwMENGMCwgMHgwMDIwMEYyNiwgMHgwMDIwMDlDNCwKKzB4MDAxQzM1MTAsIDB4MDAxQzM2MjQsIDB4MDAxRTIxMkMsIDB4MDAyMDI4RUMsCisweDAwMjAyODUwLCAweDAwMjAyOEY0LCAweDAwMjAyOTAwLCAweDAwMjAwQkVDLAorMHgwMDIwMUZENCwgMHgwMDIwMTdCOCwgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwKKzB4REVBMTdGQTQsIDB4NjFFMEUwMUMsIDB4N0QwMTZERTMsIDB4NjFEMDBGMTQsCisweEQ1OUZENDlFLCAweDQ1MEJFMDIwLCAweEUwMjAwRjE0LCAweEU3ODAwNEZDLAorMHg2MDRDNjZFMiwgMHg3RDdGNjc3QywgMHgxRjY5MzA3MCwgMHgyRDYyOEYxNywKKzB4MDFGQ0UwMUMsIDB4NjQxQ0U1MDAsIDB4RDc5N0RFOTYsIDB4MzI0MzYyNUQsCisweEEyMUE4QjAxLCAweDY1NUQwMDA5LCAweDMxRUM2MTUzLCAweEUwMjg2QzEwLAorMHg2RDUzMEZDNCwgMHgzRDdDNjJDRSwgMHhBRkVGMkQyMCwgMHgyMDA4NzUwMSwKKzB4RTAxQzhCMTUsIDB4RTUwMDAxRkMsIDB4RDc4QkRFOEEsIDB4NjQxQ0EwMEEsCisweDZDNTM2NTVELCAweDY2QzIzQ0VDLCAweDY2NjI2MjUzLCAweDIyNjIzMjdDLAorMHgxRjY5NzUwNCwgMHgzMjQzNjI1RCwgMHhBMUY2OEJGMiwgMHg4ODAxMkQxMCwKKzB4RTAxQzhCMTYsIDB4RTQwMDAxRkMsIDB4NjcxQzJENDAsIDB4NjI0RERFN0QsCisweDhCMDEzMjczLCAweDAwMDlBMUU5LCAweDYyRTM2NDRELCAweDcyMDQ2RDQzLAorMHgzREVDNjE0MywgMHg2NUQyMzEyQywgMHg3NDA4NkMxMiwgMHgyNUMyQUZFRiwKKzB4OEIxODg4MDQsIDB4MDFGQ0UwMUMsIDB4MkQ0MEU0MDAsIDB4REU3MTY3MUMsCisweDMyNzM2MjRELCAweEExRDA4QjAxLCAweDY0NEQwMDA5LCAweDYyRTM2RDQzLAorMHg2NUQyM0RFQywgMHg2MTQzNzIwNCwgMHg2NjEyMzEyQywgMHg3NDA4NkM1MiwKKzB4QUZFRDJDNjksIDB4ODgwNTI1QzIsIDB4RTAxQzhCMTgsIDB4RTQwMDAxRkMsCisweDY3MUMyRDQwLCAweDYyNERERTYzLCAweDhCMDEzMjczLCAweDAwMDlBMUI1LAorMHg2QzQzNjQ0RCwgMHgzQ0VDNjJFMywgMHg3MjA0NjVDMiwgMHgzRDJDNkQ0MywKKzB4NjE1MjY2RDIsIDB4MjE2Qjc0MDgsIDB4MjUxMkFGRUQsIDB4OEIxMzg4MzAsCisweEUyMDBERTU4LCAweDY0RTIyRDIwLCAweDhCMDQyNDQ4LCAweDQyMEJEMjU3LAorMHhBMTlBMDAwOSwgMHg1NUUxMDAwOSwgMHg1N0UzNTZFMiwgMHhERDU0NUNFNCwKKzB4MkZDNjREMEIsIDB4N0YwNEExOTEsIDB4ODkwMTg4MjgsIDB4MDAwOUEwRUEsCisweEUxNDNERTRDLCAweDYyMkQ2MkUxLCAweDhGMDMzMjE3LCAweDU2RkIxRkVCLAorMHgyNjIxRTI0MCwgMHg4QjAxMzIxNywgMHgwMDA5QTBENSwgMHhFMTAxNUVGQiwKKzB4MzAxNjg1RTEsIDB4QTBDRThCMDEsIDB4RTQwMTAwMDksIDB4MkQ0MDU1RkIsCisweDY0NTFCMTc5LCAweEUxNDM1N0ZCLCAweEUwNTQ2MjcxLCAweDM1MTc2NTJELAorMHgwRjU2OEQ0MSwgMHgzNTYzRTY0MCwgMHhFNjAwOEIwNSwgMHgwRjY1RTAzNCwKKzB4QTAwRkUxMUEsIDB4NjE1MzcyQzAsIDB4NDEyMTQxMjEsIDB4NDEyMTQxMjEsCisweDQ1MjE0MTIxLCAweDQ1MjE0NTIxLCAweEM5MDM2MDUzLCAweEUwMzQ2NjAzLAorMHg3MTE4MEY2NSwgMHgyMjA5RTAwNywgMHg2NDFERTAzMCwgMHgwRjI1NjVGMywKKzB4MUY0RUIxRjEsIDB4MDRGREUwMzQsIDB4Njc0REUwMzAsIDB4NDcwODBDRkQsCisweDYwNzM2MUNELCAweDQxMDhEMjJCLCAweEUwMEYwQ0ZFLCAweDFGMUY0MjBCLAorMHgyQ0Q5NkQwNywgMHg1RUZCNjA3MywgMHg4NUUyMEZDNiwgMHg0MjBCNTFGRiwKKzB4MkMwQjYwMEQsIDB4NTRGRTYwNzMsIDB4QjFCQjBGQzYsIDB4RTA1NDY1RjMsCisweDY1MkQ2MkUxLCAweEU2NDAwRjU2LCAweDg5NjIzNTYzLCAweEUwNTBFMTAwLAorMHg2MDIzMEYxNSwgMHg0MDA4QzkwMywgMHg2RDAzNDAwMCwgMHhFMDQwNjEwMywKKzB4RTA0NDBGRDYsIDB4RDIxN0VFRkYsIDB4NkVFQzBGRjYsIDB4MEYyNkUwNTgsCisweDYwRTM0MjBCLCAweDQyMjE2MjUzLCAweDQyMjE0MjIxLCAweDY2MjM0MjIxLAorMHgzMjZDNDIwMCwgMHg0NTIxNDIwMCwgMHhFMDQ4NjcwNywgMHgwRjc2NDUyMSwKKzB4QzkwMzYwNTMsIDB4NDAwODVDRkIsIDB4N0MwNjMwRkMsIDB4NkUwMzZEMkQsCisweDFGRDUxRkM2LCAweDFGMDRBMDJFLCAweDAwMTE3RDAwLCAweDAwMjAyOTY4LAorMHgwMDIwMEUyQSwgMHgwMDExN0QwNCwgMHgwMDExN0Q4NCwgMHgwMDIwMDcwMCwKKzB4MDAyMDA3NEMsIDB4MDAyMDIwMzQsIDB4MEZENkUwNEMsIDB4MDVGRUUwNDQsCisweDY0RDNCMTg5LCAweDY0RTJFMDQ4LCAweEUwNDAwNkZFLCAweDJFNDIyNDY5LAorMHgwMUZFNjdDNCwgMHg2NjdDRTA1OCwgMHg0MjBCMDJGRSwgMHgyNDBCNjA2MywKKzB4MDVGRUUwNDQsIDB4QjE1RDJFNDIsIDB4RTA1MDY0RDMsIDB4N0QwMTAxRkQsCisweDBGMTU3MTAxLCAweDAyRkRFMDUwLCAweDMyNjJFNjA2LCAweDU2RkI4QkRDLAorMHg1NUZCNjI2MSwgMHg4NTUxNDIwMCwgMHgzMDJDNzUwQywgMHg2MTAzNzAxQiwKKzB4NjRGM0U2MDAsIDB4RTcwNEEwMDQsIDB4NzYwMTYyNTYsIDB4NzQwNDI0MjIsCisweDMyNzM2MjZELCAweDY1RjM4QkY4LCAweDY0MURCMTNDLCAweEIwRDI1NkZCLAorMHhBMEFBNjQ2MSwgMHhENDg4MDAwOSwgMHhFMjAxRDU4OCwgMHgyRDIwNDUwQiwKKzB4MDAwOUEwQTMsIDB4OEIwNzg4MjksIDB4RTIwMERFODUsIDB4NjZFMjJEMjAsCisweDY0NkRCMEExLCAweDAwMDlBMDk5LCAweDYyMkNFMjgxLCAweDhCM0QzMDIwLAorMHhENjgwRTczOCwgMHhFMDQ0MkQ3MCwgMHhFMDQ4MEM2RSwgMHg2RTYyMURDMSwKKzB4NTE2MTFERTIsIDB4NTQ2MjFEMTMsIDB4NTU2NTFENDQsIDB4NTc2MzFENTUsCisweDVDNjYxRDc2LCAweDBFNkUxREM3LCAweDFERThFMDQwLCAweEUwNTAwMTZFLAorMHg1NDY0MUQxOSwgMHgwNTZFMUQ0QSwgMHgxRDVCRTA0QywgMHhFMDU0MDc2RSwKKzB4MEM2RTFEN0MsIDB4MURDREUwNTgsIDB4RTA0NDAyNkUsIDB4RUQwMDFEMkUsCisweEUwNDgwNkQ2LCAweDE2RDEyNkQyLCAweDE2RDUxNkQyLCAweDE2RDYxNkQzLAorMHhFMDQwMDZENiwgMHhFMDUwMDZENiwgMHgwNkQ2MTZENCwgMHgwNkQ2RTA0QywKKzB4MDZENkUwNTQsIDB4MDZENkUwNTgsIDB4MUYyOUEwNTcsIDB4NjIyQ0UyODIsCisweDg5MzEzMDIwLCAweDA1RkNFMDIwLCAweDYyNUNFNjgzLCAweDMyNjA2NjZDLAorMHhENjVEOEIwNywgMHgyNjUwRTUwMCwgMHg1MjYxNzY4MCwgMHhBMDQ0RDY1QiwKKzB4RTY5MDI2MjIsIDB4MzI2MDY2NkMsIDB4RDI1NzhCMTYsIDB4RTUwMEQ2NTgsCisweDYwNjIyMjUwLCAweENCMjBEMjU3LCAweEU2MDUyNjAyLCAweEQ2NTYyMjYyLAorMHgyMjUyNDYwQiwgMHg0MjBCRDI1NSwgMHhEMjU1MDAwOSwgMHgyMjYyRTYwMSwKKzB4NDYxOEQyNTQsIDB4MjI2MkEwMjksIDB4RDI1NEQ0NTMsIDB4RDQ1NDY1NDIsCisweDAwMDk0MjBCLCAweDAwMDlBMDIxLCAweEU1MjRENjQ3LCAweEQ1NDUyNjUwLAorMHgxNjIxNTI1NywgMHgxNjIyNTI1OCwgMHgxNjIzNTI1OSwgMHgxNjI0NTI1QSwKKzB4MTYyNTUyNUIsIDB4MTYyNjUyNUMsIDB4MTYyNzUyNUQsIDB4MTYyODUyNUUsCisweDFGMjk1MjVGLCAweEUyMDAxNjI5LCAweDE1MjgxNTI3LCAweDE1MkExNTI5LAorMHgxNTJDMTUyQiwgMHgxNTJFMTUyRCwgMHg3RjVDMTUyRiwgMHg2RUY2NEYyNiwKKzB4MDAwQjZERjYsIDB4NEYyMjZDRjYsIDB4RTI0MDYxNEQsIDB4ODkxNzMxMjMsCisweDMxMjdFMjFGLCAweEQ0M0I4OTA4LCAweEUwMDFENTNCLCAweDY2NDI0NTBCLAorMHgyNjc5NjcwNywgMHgyNDYyQTAwQywgMHgzMTI3RTIzRiwgMHhENzM1ODkwOCwKKzB4NzFFMEQ2MzUsIDB4NDYwQkUwMDEsIDB4NjIwNzU1NzEsIDB4MTc1MTI1MjksCisweDAwMEI0RjI2LCAweDRGMjIwMDA5LCAweEUyNDA2MTRELCAweDg5MTUzMTIzLAorMHgzMTI3RTIxRiwgMHhENDJCODkwNywgMHg2NjQyRDIyQiwgMHhFMDAxNDIwQiwKKzB4QTAwQjI2MEIsIDB4RTIzRjI0NjIsIDB4ODkwNzMxMjcsIDB4RDYyNkQ3MjUsCisweDcxRTA1NTcxLCAweEUwMDE0NjBCLCAweDE3NTEyNTBCLCAweDAwMEI0RjI2LAorMHhFNjQwMDAwOSwgMHg0NjI4NDYxOCwgMHg2MjUyRDUyMCwgMHg4OUZDMjI2OCwKKzB4MDAwOTAwMEIsIDB4NDYxOEU2ODAsIDB4RDUxQzQ2MjgsIDB4MjI2ODYyNTIsCisweDAwMEI4OUZDLCAweEEwMDEwMDA5LCAweDcyMDFFMjAwLCAweDhCRkMzMjQyLAorMHgwMDA5MDAwQiwgMHg0NjE4RTY4MCwgMHhENTE1NDYyOCwgMHgyMjY4NjI1MiwKKzB4MDAwQjhCRkMsIDB4MDAwMDAwMDksIDB4MDAyMDI5NkMsIDB4MDAyMDBFMkEsCisweDAwMTE3RDA0LCAweDAwMjAyODU4LCAweDAwMTE3RDgwLCAweDAwMjAyOEVDLAorMHgwMDFDMzUwMCwgMHgwMDFENDAwNCwgMHgwMDIwMEYyNiwgMHgwMDIwMDlDNCwKKzB4MDAxRTIxMkMsIDB4MDAxQzNEMjgsIDB4MDAxMTdEMDAsIDB4MDAyMDBFOEEsCisweDAwMjAyOTg0LCAweDAwMUMzNzA0LCAweDAwMjAyMDM0LCAweDAwMUMzNzNDLAorMHgwMDFDMzcwMCwgMHg0RjIyMkZFNiwgMHg2RTUzN0ZGQywgMHgyRjQyQkZDQSwKKzB4RDYxNTYxRTIsIDB4MTYxNUUyODAsIDB4NDIxODU0RTEsIDB4NTVFMjE2NDYsCisweDE2NTc0MjI4LCAweDZFRjI1N0UzLCAweDJFMkIxNjc4LCAweDdGMDQyNkUyLAorMHhBRkE3NEYyNiwgMHgyRkM2NkVGNiwgMHgyRkU2MkZENiwgMHhERDBBNEYyMiwKKzB4QkZBRjZDNTMsIDB4QkY5NDZFNDMsIDB4QkZBQjJERTIsIDB4NTFENTAwMDksCisweDU0RDYyQzEyLCAweDU1RDcxQzQxLCAweDU2RDgxQzUyLCAweDRGMjYxQzYzLAorMHg2REY2NkVGNiwgMHg2Q0Y2MDAwQiwgMHgwMDFDMzcwQywgMHgwMDA5QTBGOCwKKzB4RDE5QjRGMjIsIDB4RDQ5QjkyOTksIDB4MjEyMkIwMEQsIDB4OTc5NUU2MDUsCisweEIwMjI5NTk1LCAweEIwMzY2NDYzLCAweEIwM0EwMDA5LCAweEIwM0QwMDA5LAorMHhBMDZDMDAwOSwgMHg0RjEyNEYyNiwgMHhEMTkzNEYwMiwgMHg5NDg3MzE0NSwKKzB4NDYwOTA2MEEsIDB4NDYwOTQ2MDksIDB4MDAyOTM2NDYsIDB4RDc4Q0Q1OEYsCisweDI1MDBDQTAxLCAweDRGMDYyNzYyLCAweDRGMTYwMDBCLCAweEJGRUE0RjIyLAorMHhCMDIzMDAwOSwgMHhBMDUyMDAwOSwgMHgyRkU2NEYyNiwgMHg2RTYzRDE4OCwKKzB4NDQxODY2MTIsIDB4NDUyODkyNkQsIDB4MjYyOTQ0MDgsIDB4NDQwODQ1MDAsCisweDQ0MDAyNjVCLCAweDQ3MDgyNjRCLCAweDQ3MDgyMTYyLCAweDI3RUJEMTgxLAorMHgwMDBCMjE3MiwgMHhEMTgwNkVGNiwgMHhFNjAzRDQ4MCwgMHgwMDBCMjE2MiwKKzB4RDI3RjI0NjIsIDB4RTQwQTk2NTYsIDB4MjI2MkFGQjAsIDB4MkZDNjJGQjYsCisweDJGRTYyRkQ2LCAweERDN0I0RjIyLCAweDJDMjJFMjAxLCAweEJGQTVFNDBBLAorMHg2MEMyN0M0NCwgMHhDQjAxRUQwMCwgMHg2MEMyMkMwMiwgMHhDOTAxRUI2NCwKKzB4NkUwM0EwMDgsIDB4ODkwNzNEQjIsIDB4RTQwMTYwQzIsIDB4QkY5NUM5MDEsCisweDdEMDE2RTAzLCAweDhCRjUyRUU4LCAweDhCMDMzREIyLCAweEQyNkZENDZFLAorMHgwMDA5NDIwQiwgMHg0RjI2RTQwQSwgMHg2REY2NkVGNiwgMHhBRjg1NkNGNiwKKzB4NDQxMTZCRjYsIDB4NjA0QjhGMDEsIDB4MDAwQjYwNDMsIDB4MkY4NjAwMDksCisweDJGQTYyRjk2LCAweDJGQzYyRkI2LCAweDJGRTYyRkQ2LCAweDdGRkM0RjIyLAorMHg2REEzRUEwMCwgMHhEQzYyNkJBMywgMHg5OTE0RTg2NCwgMHg4QjRFMkJCOCwKKzB4M0FFM0VFMEEsIDB4NjBDMjg5NEIsIDB4Q0IwMkVEMDAsIDB4NjJDMjJDMDIsCisweDJGMDI2MEMyLCAweEEwMTBDOTAyLCAweDA5NkM2RTAzLCAweDVCQjQ1Mjg4LAorMHgxRkZGMDlCNCwgMHgwMUZGMDNDNCwgMHg4OTA4M0Q4MywgMHhFNDY0NjBDMiwKKzB4QzkwMjJGMDIsIDB4NkUwM0JGNTIsIDB4MkVFODdEMDEsIDB4RDE1MThCRjQsCisweDU0QzFENTUxLCAweDY2NTI2NDEyLCAweDYyNjlFRTAxLCAweDQyMjA2MjJGLAorMHg2MjJGNDIxOSwgMHg0RTE4MjI5OSwgMHg4RDAzMjJFOCwgMHhFNEZGNjQyMywKKzB4MzQyODIyOUEsIDB4NjU3MkQ3NDksIDB4NjIyRjYyNTksIDB4NDIxOTQyMjAsCisweDIyOTk2MjJGLCAweDhEMDMyMkU4LCAweEU2RkY2NjIzLCAweDM2MjgyMjlBLAorMHgzNDY4QkZBNywgMHgzMEUyRUUwMiwgMHhBRkI3ODkwMSwgMHhEMjQwRUIwMSwKKzB4NkVFQ0VFRTYsIDB4QkYyMUU0MEEsIDB4QUZBRjIyRTIsIDB4RUUwQTdBMDEsCisweDg5MDEzQUUzLCAweDhCMDMzRDgzLCAweEQyMzRENDNBLCAweDAwMDk0MjBCLAorMHg0RjI2N0YwNCwgMHg2REY2NkVGNiwgMHg2QkY2NkNGNiwgMHg2OUY2NkFGNiwKKzB4NjhGNjAwMEIsIDB4NTY1MUQ1MzQsIDB4NDYyODYwNTIsIDB4MzA2QzAwMEIsCisweDJGQzYyRkI2LCAweDJGRTYyRkQ2LCAweDRGMTI0RjIyLCAweEJGRjE0RjAyLAorMHg2QjAzNkU0MywgMHhERDFDREMyRCwgMHgwMDA5QkZFQywgMHgzQzA1MzBCOCwKKzB4NDYwOTA2MEEsIDB4NDYwMTQ2MDksIDB4MDIwQTNENjUsIDB4NDIwOTQyMDksCisweDMyRTI0MjA5LCAweDRGMDY4QkYwLCAweDRGMjY0RjE2LCAweDZERjY2RUY2LAorMHgwMDBCNkNGNiwgMHgyRkU2NkJGNiwgMHhERTIxNEYyMiwgMHhFNTAwRTEwMiwKKzB4MkUxMkU0MDMsIDB4MkU1MkJGRDQsIDB4NDYxOEU2MDYsIDB4RTQwM0U3MDAsCisweDJFNzIyRTYyLCAweEFGQ0I0RjI2LCAweDRGMjI2RUY2LCAweDAwMDlCRkVCLAorMHhFNkU2RDIxMywgMHhFNDBBNjY2QywgMHgyMjYyQkZDMiwgMHg0RjI2QUZFMywKKzB4MDAyMDI4RjAsIDB4MDAyNENERTAsIDB4MTA2MjRERDMsIDB4MDAyMDJBRjAsCisweDAwMUM1ODE0LCAweDAwMUM1OUQwLCAweDAwMUM1OUE0LCAweDAwMUM2MzlDLAorMHgwMDFDNTgwNCwgMHgwMDFDNTgxQywgMHgwMDIwMjk5OCwgMHgwMDIwMEUyQSwKKzB4MDAxQzU4NjAsIDB4MDAxQzY4NjQsIDB4MDAxQzU5QkMsIDB4MDAxQzY5QkMsCisweDAwMUM5NDdDLCAweDAwMjAyOUIwLCAweDAwMUMxMDQwLCAweENDQ0NDQ0NELAorMHgwMDFENDAwNCwgMHgyRjk2MkY4NiwgMHgyRkI2MkZBNiwgMHgyRkQ2MkZDNiwKKzB4NEYyMjJGRTYsIDB4RTQwMDdGRTQsIDB4NDUyOEU1MTAsIDB4Njc0MzZDNDMsCisweEUxMDdBMDBGLCAweDYwNDM2NDRELCAweDBGNTY0MDA4LCAweEVFMDA2MEMzLAorMHg4MTUxMjVDMSwgMHg4MTUzODE1MiwgMHgxNTczMTVFMiwgMHg3NTE0MTVFNCwKKzB4NjI0RDc0MDEsIDB4OEJFRDMyMTMsIDB4REE2RjUxRjEsIDB4MUExMTU0RjIsCisweEQxNkUyQTEyLCAweDU3RjQ1NUYzLCAweDZERjI1OEY1LCAweDExNDFEOTZDLAorMHgxMTUzMjE0MiwgMHgxMTc1MTE1MiwgMHgxMTg3MTE3NCwgMHg1MkY2MTE4NiwKKzB4MTlEMUQ2NjgsIDB4RDg2ODI5RDIsIDB4REE2OEU5NTAsIDB4MTYyMUVCQjQsCisweDZCQkMyNjIyLCAweEEwMjE0OTA4LCAweDZFRURFRTAwLCAweDYxRTM2REUzLAorMHg0MTA4NEQwOCwgMHgzMUVDM0RFQywgMHg0MTA4NEQwOCwgMHg2MEMzM0Q4QywKKzB4RTc5MDQxMDgsIDB4ODFEMTJEQzEsIDB4NDEwODYwOTMsIDB4ODFEMjY3N0MsCisweDMxQUM2MEMzLCAweDM0NzJFMjAwLCAweDFERDI4MUQzLCAweEQ0NTUxRDEzLAorMHgxRDI0OEQwMSwgMHhCMDNBRDQ1MCwgMHg3RTAxNjVEMywgMHgzNEIyNjRFRCwKKzB4RDE0RDhCREIsIDB4NjUxMkRCNTIsIDB4NDUyOUQyNEQsIDB4NjQxMjFCNTEsCisweDY3NEREMTRBLCAweDY3MjIyQjcyLCAweDQ3MjlENjRFLCAweDY5MjIxQjczLAorMHg2ODlEMkZEMiwgMHg2OTEyMUI4MiwgMHg1QTEyMjY5MiwgMHg1QjE0MTZBMiwKKzB4MTZCNERBNDQsIDB4MTZDNjVDMTYsIDB4MTZFQTZFQTIsIDB4NEYyNjdGMUMsCisweDZERjY2RUY2LCAweDZCRjY2Q0Y2LCAweDY5RjY2QUY2LCAweDY4RjYwMDBCLAorMHg2MDYxNjY0MiwgMHg4RDA0QzgwMywgMHg2MDYxRTUwMCwgMHg4ODAyQzkwMywKKzB4NTI2MjhCMDMsIDB4NTEyNDY1NjMsIDB4MDAwQjI0MTIsIDB4MkZENjYwNTMsCisweDRGMjIyRkU2LCAweDZFNTM3RkVDLCAweEU1NTA2MjUzLCAweEU0MDA2RDQzLAorMHhBMDAxNDUwOCwgMHg1MjI0RTEwMSwgMHgyMjExNjA0MywgMHg4MTIzODEyMSwKKzB4ODEyMjYwNTMsIDB4MzYyMDU2RTIsIDB4RDIyRjhCRjUsIDB4NjRGMzE2RTQsCisweDQyMEJFNjE0LCAweDY1RTE2NUUzLCAweDI1NDlFNEZDLCAweDYxRjEyRTUxLAorMHgyMTQ5NjVGMywgMHg1NEQxMkYxMSwgMHg0MTBCRDEyNywgMHg1N0QxRTYxNCwKKzB4Q0IwMTYwNzEsIDB4MURFMTI3MDEsIDB4NEYyNjdGMTQsIDB4MDAwQjZFRjYsCisweDJGRDY2REY2LCAweDRGMjIyRkU2LCAweDZFNTM3RkVDLCAweEU1RkM2NjUzLAorMHg2MDYxNkQ0MywgMHhDQjAxMjA1OSwgMHg1MkUyMjYwMSwgMHg4QjA2MzI2MCwKKzB4NTFFMjEyRTQsIDB4OEIwNDMxRTAsIDB4QTAwMjUyRDEsIDB4QUZGMDFFMjIsCisweEQyMTU1NjY0LCAweEU2MTQ2NEYzLCAweDY1RTM0MjBCLCAweEUxRkM2N0UxLAorMHgyRTcxMjcxOSwgMHg1NEQxNjdGMSwgMHhEMTBGMjcxOSwgMHhFNjE0NjVGMywKKzB4MkY3MTQxMEIsIDB4NjAyMTUyRDEsIDB4MjIwMUNCMDEsIDB4N0YxNDFERTEsCisweDZFRjY0RjI2LCAweDZERjYwMDBCLCAweDAwMjAyOEJDLCAweDAwMjAyOEM0LAorMHgwMDIwMjhCNCwgMHgwMDIwMjhFNCwgMHgwMDEwMDA4QywgMHgwMDEwMEVDMCwKKzB4MDAxRTIxMDgsIDB4MDAxQzNEMDAsIDB4MDAyMDIxOTQsIDB4MkZDNjJGQjYsCisweDJGRTYyRkQ2LCAweEQ2MzE0RjIyLCAweDYwRDM2RDYyLCAweDg5NERDODAzLAorMHhEQjMwREMyRiwgMHgwMDA5QTAyQywgMHhDOTAzNjA2MSwgMHg4OTJCODgwMSwKKzB4RDIyREQ0MkIsIDB4MDAwOTQyMEIsIDB4NjUwMzU2MDMsIDB4QzgyMDg1NjEsCisweEUwNTA4OTAzLCAweDcyMDEwMkJFLCAweDg1NjIwQjI2LCAweDQwMDA2MDBELAorMHg0MDAwMzY2QSwgMHg0MDAwNDYyNCwgMHgyMDZENDYyNCwgMHhENDIzQzkwMywKKzB4NDAwODZFMDMsIDB4RDEyMjQwMDAsIDB4MzQwQzQxMEIsIDB4NjFFM0Q1MjEsCisweEQ3MjFFMDAxLCAweDQ1MEJEMjIxLCAweDY0RTM3RTMwLCAweDI3MDI0MjBCLAorMHg2NkMyNTJDMSwgMHg4QkNGMzYyMCwgMHg0RTE4RUUwMSwgMHhBMDExREIxQywKKzB4NjA2MUVDNzUsIDB4ODgwMUM5MDMsIDB4RDQxOTg5MTAsIDB4NDYwQkQ2MTIsCisweEQ0MTgwMDA5LCAweDQ3MEJENzE4LCAweEQyMTM2NTAzLCAweDY0QzNEMTEzLAorMHgyMkUyNDEwQiwgMHg2NkIyNTJCMSwgMHg4QkVBMzYyMCwgMHhDODA0NjBEMywKKzB4RDIxMjg5MDYsIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkJGNjQyMkIsCisweDZFRjY0RjI2LCAweDZDRjY2REY2LCAweDZCRjYwMDBCLCAweDAwMUUyMTAwLAorMHgwMDIwMjhCQywgMHgwMDIwMjg1OCwgMHgwMDIwMEFFMCwgMHgwMDIwMjhDNCwKKzB4MDAyMDBCNjIsIDB4MDAyMDIwMzQsIDB4MDAxQzNEMzAsIDB4MDAyMDBERjAsCisweDAwMjAyOEI0LCAweDAwMjAyOEU0LCAweDAwMjAwQUZFLCAweDAwMjAwMEY4LAorMHhFNjAxRDIzNywgMHgxMjY1RDUzNywgMHgwMDBCMjI1MiwgMHhENjM2MTI2NiwKKzB4ODgwMTYwNjIsIDB4RTEwMThCNjIsIDB4RDUzNDI2MTIsIDB4NTQ1MUQxMzQsCisweEUwNDA2MjEyLCAweDIxMjIzMjRDLCAweDU0MTE1NzUyLCAweDExNDEzNDdDLAorMHg1NzEyNTQ1MywgMHgxMTcyMzc0QywgMHg1MjEzNTc1NSwgMHgxMTIzMzI3QywKKzB4NTYxNDY0NTIsIDB4MTE2NDM2NEMsIDB4NTQxNTU3NTQsIDB4MTE0NTM0N0MsCisweDU2MTY1NDU4LCAweDExNjYzNjRDLCAweDY3NjJENjI2LCAweDMyN0M1MjE3LAorMHg1NzYxMTEyNywgMHgzMjdDNTIxOCwgMHg1NzYyMTEyOCwgMHgzMjdDNTIxOSwKKzB4NTc2MzExMjksIDB4MzQ3QzU0MUEsIDB4NTc2NDExNEEsIDB4MzQ3QzU0MUIsCisweDU3NjUxMTRCLCAweDM0N0M1NDFDLCAweDUyNjYxMTRDLCAweDM3MkM1NzFELAorMHg1MjY3MTE3RCwgMHgzNDJDNTQxRSwgMHg1MjY4MTE0RSwgMHgzNjJDNTYxRiwKKzB4RDYxNTExNkYsIDB4MDQxRTYyNjIsIDB4MzQyQzc2OTQsIDB4RTA0NDAxNDYsCisweDA2MUU2MjYyLCAweDAxNjYzNjJDLCAweDUyNUNFMDQ4LCAweEQ2MEYwNTFFLAorMHgwMTU2MzUyQywgMHhFMDU0NjI2MiwgMHg0MjI5MDUxRSwgMHgwMTU2MzUyQywKKzB4RTA1ODU1NjEsIDB4NDUyOTA2MUUsIDB4MDE2NjM2NUMsIDB4MDAwOTAwMEIsCisweDAwMUMxMDEwLCAweDAwMDBDMzRGLCAweDAwMUMxMDI4LCAweDAwMUMzNjlDLAorMHgwMDIwMjg1OCwgMHgwMDFDM0NBMCwgMHgwMDFDMzZGNCwgMHgwMDFDM0I4OCwKKzB4RDYyRjdGRkMsIDB4MjY0MjY0NEMsIDB4QzgyMDUwNjYsIDB4MkYwMjhERkMsCisweDdGMDQwMDBCLCAweDJGRDYyRkM2LCAweDRGMjIyRkU2LCAweDZENDM2QzUzLAorMHhFRTAwQTAwNCwgMHg3RTAxNjRENCwgMHg2NDRDQkZFQSwgMHg4QkY5M0VDMiwKKzB4NkVGNjRGMjYsIDB4MDAwQjZERjYsIDB4QTAwMTZDRjYsIDB4NzYwMTY2NDMsCisweDIyMjg2MjYwLCAweDM2NDg4QkZCLCAweDY1NjNBRkU0LCAweDJGQjYyRjk2LAorMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwgMHhFQzFDRUQwOCwgMHhEQjE5NkU1MywKKzB4NjFDM0U5MEEsIDB4NjA0MzRCMEIsIDB4MzA5MkM5MEYsIDB4NjYwMzhEMDIsCisweDc2MzBBMDAxLCAweDREMTA3NjM3LCAweDdFMDEyRTYwLCAweDdDRkM4RkYxLAorMHg4MDU4RTAwMCwgMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwgMHgwMDBCNkJGNiwKKzB4MDAwQjY5RjYsIDB4MDAwQkUwMDAsIDB4MkZFNkUwMDAsIDB4N0ZFQzRGMjIsCisweDZFNDM2MjUzLCAweEJGRDE2NUYzLCAweEJGQzY2NDIzLCAweEJGQzQ2NEUzLAorMHhENDA1NjRGMywgMHgwMDA5QkZDMSwgMHg0RjI2N0YxNCwgMHg2RUY2MDAwQiwKKzB4MDAxQzAwMDQsIDB4MDAyMDIwRjQsIDB4MDAyMDI5Q0MsIDB4RTExMEQ1OUMsCisweEU2NDA2MDUwLCAweDI1MDBDOUZELCAweEUwRkY3NUU5LCAweDgwNTE2NDUzLAorMHg4MDUzODA1MiwgMHg4MDU2ODA1NSwgMHgyNTEwNzVFRiwgMHhFMUVGNjI1MCwKKzB4MjIxOUUwMDEsIDB4RTcyMDI1MjAsIDB4MjQ2MDgwNTIsIDB4MjU3MDAwMEIsCisweEU0RkRENTkwLCAweEU3MDI2MTUyLCAweDI1MTIyMTQ5LCAweDc0MDE2MDUyLAorMHgyNTAyQ0IwMSwgMHhEMThDNjY1MiwgMHgyNTYyMjY0OSwgMHg5MkMyNjAxMiwKKzB4MjEwMkNCMDgsIDB4QzlDRjYwMTIsIDB4NjAxMjIxMDIsIDB4MjEwMkNCMDMsCisweDAwMEIxMTcyLCAweDRGMjIxMTIzLCAweEUxMDBENDg0LCAweEQyODVENzg0LAorMHhENTg1MjQxMCwgMHgyNzExRDQ4NSwgMHgyMjExRTcwMCwgMHhCRkJEMjUxMSwKKzB4RDU4MzI0NzEsIDB4MjU2MEU2MDAsIDB4NEYyNkFGRDIsIDB4RDI4MTY2NEMsCisweDM2MkM0NjAwLCAweENCMTA2MDYwLCAweDI2MDAwMDBCLCAweEQyN0Q2NTRDLAorMHgzNTJDNDUwMCwgMHhFMUVGNjY1MCwgMHgwMDBCMjYxOSwgMHg2NjRDMjU2MCwKKzB4NDYwMEQyNzksIDB4NjA2MDM2MkMsIDB4MDAwQkNCMTAsIDB4NjU0QzI2MDAsCisweDQ1MDBEMjc1LCAweDY2NTAzNTJDLCAweDI2MTlFMUVGLCAweDI1NjAwMDBCLAorMHhEMjcwNjY0QywgMHgzNjJDNDYwMCwgMHhDQjA4NjA2MCwgMHgyNjAwMDAwQiwKKzB4RDI2QzY1NEMsIDB4MzUyQzQ1MDAsIDB4RTFGNzY2NTAsIDB4MDAwQjI2MTksCisweDY2NEMyNTYwLCAweDQ2MDBEMjY4LCAweDYwNjAzNjJDLCAweDAwMEJDQjA4LAorMHg2NTRDMjYwMCwgMHg0NTAwRDI2NCwgMHg2NjUwMzUyQywgMHgyNjE5RTFGNywKKzB4MjU2MDAwMEIsIDB4RDY1RjYyNEMsIDB4MzI2QzQyMDAsIDB4QzkwODYwMjAsCisweDQwMjE0MDIxLCAweDAwMEI0MDIxLCAweDYyNEM2MDBDLCAweDQyMDBENjVBLAorMHg2MDIwMzI2QywgMHg0MDIxQzkwOCwgMHg0MDIxNDAyMSwgMHg2MDBDMDAwQiwKKzB4RDE1NjY0NEMsIDB4MzQxQzc0RkYsIDB4MDAwQjYyNDAsIDB4RDE1NDYwMkMsCisweDM0MUM2NDRDLCAweDAwMEI2MjQwLCAweDJGRTY2MDJDLCAweDY1NUM0RjIyLAorMHgzNTY3RTYwQSwgMHg2RTQzOEQxNSwgMHg2NDUzQkZFQSwgMHg2MEVDNjQwQywKKzB4OEIwMjg4MDEsIDB4QTAwMkUwMEYsIDB4NDQwOTI0MDksIDB4NjI0QzQ0MDksCisweDMyNjNFNjBBLCAweEJGRTI4OTA1LCAweDYyMEM2NDRDLCAweEM4ODA2MDIzLAorMHhFMjAwOEIwMCwgMHg0RjI2NjAyMywgMHg2RUY2MDAwQiwgMHhENjQxNEYyMiwKKzB4ODgwMTYwNjIsIDB4QjIyMjhCMDMsIDB4QTAwMzAwMDksIDB4RDIzRTAwMDksCisweDIyNjBFNjQwLCAweEUyMDBENjNELCAweDAwMEI0RjI2LCAweDRGMjIyNjIyLAorMHg2MDYyRDYzOCwgMHg4QjAxODgwMiwgMHgwMDA5QjI2QywgMHhFMjAwRDYzNywKKzB4MDAwQjRGMjYsIDB4MEZGRjI2MjIsIDB4RDQzM0Q1MzIsIDB4RTcwMUUxMDAsCisweDAwMEIyNTEyLCAweEQyMzAyNDcwLCAweDAwMEJFNjA0LCAweEQ1MjAyMjYwLAorMHg2MTUwRTRGRCwgMHgyMTQ5RDYyRSwgMHgyNTEwRTcwMCwgMHgyNjcwMDAwQiwKKzB4RTRGQkQ1MUIsIDB4MjI0OTYyNTAsIDB4MjUyMDAwMEIsIDB4RTRGN0Q1MTgsCisweDIyNDk2MjUwLCAweDI1MjAwMDBCLCAweEQyMjY0RjIyLCAweDYwMEQ4NTIyLAorMHg4OTExMjAwOCwgMHg4OTEzODgwMSwgMHg4OTE1ODgwMywgMHg4OTE3ODgwNSwKKzB4ODk0MTg4MDYsIDB4ODk0Nzg4MDgsIDB4ODk0RDg4MDksIDB4ODk1Mzg4MEEsCisweDg5NTk4ODBCLCAweDAwMDlBMDYwLCAweDAwMDlCMDYyLCAweDYwMENBMDVELAorMHgwMDA5QjA3MCwgMHg2MDBDQTA1OSwgMHgwMDA5QjA3QSwgMHg2MDBDQTA1NSwKKzB4NjI2MEQ2MDYsIDB4OEI0RjIyMjgsIDB4MDAwOUIwODYsIDB4NjAwQ0EwNEQsCisweDAwMUUxMDI4LCAweDAwMUUyMTQ4LCAweDAwMUUxMTA4LCAweDAwMjAyOTNELAorMHgwMDIwMjkyQywgMHgwMDIwMjkyRSwgMHgwMDIwMjkzMCwgMHgwMDIwMjkxMCwKKzB4MDAxRTEwMDgsIDB4MDAxRTEwM0YsIDB4MDAxRTEwNUYsIDB4MDAxRTEwMzAsCisweDAwMUUxMDkwLCAweDAwMjAyOTM4LCAweDAwMUUxMDBCLCAweDAwMjAyOTM0LAorMHgwMDIwMjkzQywgMHgwMDIwMjkwNCwgMHg2MjYwRDY4NywgMHg4QjIzMjIyOCwKKzB4MDAwOUIwNkEsIDB4NjAwQ0EwMjEsIDB4NjI2MEQ2ODMsIDB4OEIxQjIyMjgsCisweDAwMDlCMEI0LCAweDYwMENBMDE5LCAweDYyNjBENjdGLCAweDhCMTMyMjI4LAorMHgwMDA5QjBCQSwgMHg2MDBDQTAxMSwgMHg2MjYwRDY3QiwgMHg4QjBCMjIyOCwKKzB4MDAwOUIxMUUsIDB4NjAwQ0EwMDksIDB4NjI2MEQ2NzcsIDB4OEIwMzIyMjgsCisweDAwMDlCMTM2LCAweDYwMENBMDAxLCAweDRGMjZFMDAwLCAweDAwMDkwMDBCLAorMHhEMjczRDE3MiwgMHhENTczODQxMiwgMHg0MDAwQzkwRiwgMHhENzcyMDEyRCwKKzB4NjExQ0U0MDMsIDB4RDY3MUUyMEYsIDB4MjcxMjI1NDAsIDB4RTAwMTI1MjAsCisweDI2MDIwMDBCLCAweEU2MDFEMjY5LCAweDMwNjY4NTIzLCAweEUwMDA4RDA2LAorMHhFMDAwRDI2NywgMHg4MTIyRDY2OSwgMHgyNjAyRTAwMSwgMHgwMDA5MDAwQiwKKzB4ODUyM0QyNjIsIDB4MjAwODYwMEQsIDB4ODgwMTg5MDUsIDB4RDY2NDhCMEEsCisweENCMDE2MDYwLCAweEQ2NjEyNjAwLCAweEUxMDFENDVELCAweDI2MTJFMDAxLAorMHg4MTQyMDAwQiwgMHhFMDAwMDAwQiwgMHhFNTAxRDE1OCwgMHg0NTE4ODUxMywKKzB4MzQ1MzY0MEQsIDB4OEQwNTY2MDMsIDB4RDI1QUUwMDAsIDB4RTAwMUQ1NTcsCisweDI1MDIyMjYwLCAweDAwMDkwMDBCLCAweEQxNTA0RjIyLCAweDY1MEQ4NTEzLAorMHg0NDE5NjQ1MywgMHg2NzJFNjI0OSwgMHg2MDJDMjI3RCwgMHg4OTA5ODgwMSwKKzB4ODkwQzg4MDIsIDB4ODkxMDg4MDMsIDB4ODkyNjg4MDYsIDB4ODkyOTg4MDcsCisweDAwMDlBMDM4LCAweEQ2NERENTRDLCAweEEwMjdFMjEyLCAweDYyNUMyNjUyLAorMHg4QjJGMjIyOCwgMHhBMDFFRDY0QSwgMHg2MDVDNjI2MiwgMHg4OTA1MjAwOCwKKzB4ODkwODg4MTAsIDB4ODkwQjg4MjAsIDB4MDAwOUEwMjQsIDB4RDY0M0Q0NDUsCisweEEwMTNFMjA0LCAweEQ3NDQyNjQyLCAweEUyMENENjQwLCAweDI2NzJBMDBFLAorMHhENjNFRDU0MiwgMHhBMDA5RTIxOCwgMHhENDQxMjY1MiwgMHhFMjBBRDYzQiwKKzB4MjY0MkEwMDQsIDB4RDYzOUQyM0YsIDB4RTIyRTI2MjIsIDB4RDQzRTg1MTUsCisweDMyNzc2NzBELCAweDhGMDEyNDIxLCAweDI0NTE2NTAzLCAweDAwMDlCMERGLAorMHhFMDAxQTAwMSwgMHg0RjI2RTAwMCwgMHgwMDA5MDAwQiwgMHhFMTAxRDYyOSwKKzB4MjYxMEQ0MzYsIDB4RDcyODY1NDEsIDB4NjU1REQxMjgsIDB4RTAwMUUyMEYsCisweDI2MjAyNzUyLCAweDIxMDIwMDBCLCAweDRGMjIyRkU2LCAweDg1MjNEMjFGLAorMHgyNDQ4NjQwQywgMHhENjJEOEIwOCwgMHhFMjAwRDUyMSwgMHg4NDUxMjYyMSwKKzB4MjA0OTk0MzAsIDB4ODA1MUEwMjYsIDB4NjBFMERFMUQsIDB4OEQwQkM4NDAsCisweDM0MjdFMjAxLCAweEQxMjU4OTIyLCAweDQyMEJEMjI1LCAweEQ1MjUyMTQxLAorMHhDQjA0NjA1MiwgMHgyNTAyQTAwQiwgMHg4OTE3MzQyNywgMHhENzIyRDIxRiwKKzB4MjI0MTQ3MEIsIDB4RTVGQkQ2MUYsIDB4MjE1OTYxNjIsIDB4ODRFMTI2MTIsCisweEIxMkRDQjgwLCAweDYwRTA4MEUxLCAweENCMDRENjFDLCAweDYwNjAyRTAwLAorMHgyNjAwQzkzRiwgMHhFMDAxRDYwOSwgMHgyNjAyQTAwMSwgMHg0RjI2RTAwMCwKKzB4NkVGNjAwMEIsIDB4MDAwMEZGN0YsIDB4MDAyMDI5M0QsIDB4MDAyMDI5MDQsCisweDAwMjAyOTEwLCAweDAwMUUxMTAwLCAweDAwMUUxMDBDLCAweDAwMjAyOTM0LAorMHgwMDFFMTAwMCwgMHgwMDFFMTAwMSwgMHgwMDIwMkFGNCwgMHgwMDIwMjkxOCwKKzB4MDAyMDI5MjAsIDB4MDAyMDJCNjIsIDB4MDAyMDJCNjYsIDB4MDAyMDJCNzIsCisweDAwMjAyQjhBLCAweDAwMjAyQjk0LCAweDAwMjAyOTFDLCAweDAwMjAyOTJBLAorMHgwMDIwMUFCNiwgMHgwMDFFMTEwOCwgMHgwMDIwMUJDMiwgMHgwMDFFMTAxNSwKKzB4NjA2MEQ2OTYsIDB4ODkxOUM4ODAsIDB4NjAyMUQyOTUsIDB4OEIxNTg4MDEsCisweEU1MDFEMjk0LCAweDMwNTY4NTI0LCAweEQxOTM4OTEwLCAweEQ0OTNFMjAzLAorMHg2NTQxMjEyMCwgMHg2NTVERTAwQiwgMHhENTkxMDY1NiwgMHhFNzAyRTQwRiwKKzB4MjU3MTIxNDAsIDB4RTAwMUQ3OEYsIDB4MjcwMjAwMEIsIDB4RTAwMDAwMEIsCisweDRGMjIyRkU2LCAweDg0RTFERThDLCAweDg5MzRDODgwLCAweDg1NTRENTg1LAorMHg4RjMwMjAwOCwgMHhENzg5NjEwMywgMHg2NjcyODU1MywgMHg2NTBDNjQwMywKKzB4NjIwQzg1NjYsIDB4OEIyNjM1MjAsIDB4RDc4MEQ2ODUsIDB4NjQ0QzY1MUMsCisweDI3NDEyNjUxLCAweEM4NDA2MEUwLCAweEQyODI4OTA3LCAweDAwMDk0MjBCLAorMHg2MDYyRDY4MSwgMHhBMDA4Q0IwNCwgMHhEMTgwMjYwMiwgMHgwMDA5NDEwQiwKKzB4RTVGQkQ2N0QsIDB4MjQ1OTY0NjIsIDB4QjBBMTI2NDIsIDB4RDU3NTAwMDksCisweDI1MjJFMjAxLCAweEQ3N0E2MEUwLCAweDJFMDBDQjA0LCAweEM5M0Y2MDcwLAorMHhBMDAxMjcwMCwgMHhFMDAwNjAyMywgMHgwMDBCNEYyNiwgMHgyRkE2NkVGNiwKKzB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsIDB4RTI0MERBNjksIDB4REM2NjY2QTEsCisweDMxMjM2MTZELCAweDYyNjM4OTAwLCAweDZFRDM2RDJDLCAweDRFMjEzNkQ4LAorMHg0RTIxMkE2MSwgMHhEQjZDRDQ2QiwgMHhFNzAwQTAwRiwgMHg3NzAxNjZCMiwKKzB4NzEwMjYxNjMsIDB4NjU2MTJCMTIsIDB4NzEwMjY2MTMsIDB4NjI2MTJCMTIsCisweDYyMkQ2NTVELCAweDMyNUM0MjI4LCAweDYyN0MyNDIyLCAweDhCRUQzMkUzLAorMHhDOTAzNjBEMywgMHg4QjEwODgwMywgMHhFRDA3NkVCMiwgMHg3MTAyNjFFMywKKzB4NjcxMzJCMTIsIDB4NjJFMTcxMDIsIDB4NjU3MTJCMTIsIDB4NjU1RDYyMkQsCisweDM1MkM0NTI4LCAweEEwMEMyQ0QwLCAweDg4MDIyNDUyLCAweEEwMDM4QjAxLAorMHg4ODAxRTIwMywgMHhFMjAxOEIwNSwgMHg2NkIyMkMyMCwgMHg2NzdENjc2MSwKKzB4RUIwRjI0NzIsIDB4NkRBMTJDQjAsIDB4OEIwNTJERDgsIDB4RDQ0NUQyNEYsCisweEUxMDFFRTAwLCAweDI0MTIyMkUyLCAweDZERjY2RUY2LCAweDZCRjY2Q0Y2LAorMHg2QUY2MDAwQiwgMHgyRkU2MkZENiwgMHhFMjQwREQzRCwgMHg2MTZENjZEMSwKKzB4ODkwMDMxMjMsIDB4NjcyQzYyNjMsIDB4REU0MzM2NzgsIDB4MkQ2MTc3MDMsCisweEQ2NDA0NzIxLCAweDQ3MjE2NEUyLCAweEUxMDBBMDBFLCAweDcxMDE2NTYyLAorMHgyNDUwNjI1MywgMHg0MjE5NzQwMSwgMHg3NDAxMjQyMCwgMHgyNDUwNDUyOSwKKzB4NDUxOTc0MDEsIDB4NzQwMTI0NTAsIDB4MzI3MzYyMUMsIDB4NDIwMDhCRUUsCisweDY0RDE2NkUyLCAweDM2MkM0MjAwLCAweDhGMDYyNDQ4LCAweEREMzMyRTYyLAorMHhFNTAwREUyOCwgMHgyRDUyRTcwMSwgMHg2RUY2MkU3MiwgMHg2REY2MDAwQiwKKzB4MkZFNjJGRDYsIDB4RUUwMTRGMjIsIDB4RUQwQUEwMDUsIDB4NjRFM0JDQjYsCisweDY0RTNCQ0JDLCAweDYyRUM3RTAxLCAweDhCRjczMkQ3LCAweEVFMDFBMDA1LAorMHg2NEUzQkNCRCwgMHg2NEUzQkNDMywgMHg2MkVDN0UwMSwgMHg4QkY3MzJENywKKzB4NkVGNjRGMjYsIDB4NkRGNjAwMEIsIDB4MkZFNjJGRDYsIDB4N0ZGQzRGMjIsCisweDYwNjBENjFGLCAweDg5NzU4ODAxLCAweEUxMDFENDFFLCAweEQ3MTI4NTQ4LAorMHg2NTBEMjYxMCwgMHg0NTE5NjA3MCwgMHg2NjU5REQxQiwgMHg2MUQzNjI2RSwKKzB4Qzg0MDI2MkQsIDB4NzQwMjcxMDIsIDB4OEQ0N0Q3MTgsIDB4RDIxODY2NkMsCisweEU1MDFERTBBLCAweEEwMzEyRTIyLCAweDAwMDBFRTA0LCAweDAwMUUxMDAxLAorMHgwMDIwMjkyQSwgMHgwMDIwMjkwNCwgMHgwMDFFMTEwMCwgMHgwMDIwMjkyRSwKKzB4MDAyMDI5MUMsIDB4MDAyMDI5MzQsIDB4MDAxRTEwMDAsIDB4MDAyMDI5MjAsCisweDAwMjAyOTJDLCAweDAwMjAxQUI2LCAweDAwMUUxMTA4LCAweDAwMjAxQkMyLAorMHgwMDFFMTAxNSwgMHgwMDFFMTAwQywgMHgwMDIwMjkxOCwgMHgwMDIwMjkzOCwKKzB4MDAyMDI5M0MsIDB4MDAyMDJBRjQsIDB4MDAyMDJCOEEsIDB4MDAyMDJCOTYsCisweDAwMjAyQjA2LCAweDc1MDE2MjQ1LCAweDcxMDIyMTIxLCAweDMyRTM2MjVDLAorMHg2MDYzOEJGOCwgMHhFNjAxODFENCwgMHhFNDE3RDUzOCwgMHgzMjQzNjI2QywKKzB4NjI1NTg5MUUsIDB4MjcyMTc2MDEsIDB4NzcwMkFGRjgsIDB4REUzNUQyMzQsCisweDJFMjJFNTAxLCAweEVFMDRBMDA0LCAweDc1MDE2MjQ1LCAweDcxMDIyMTIxLAorMHgzMkUzNjI1QywgMHg2MDYzOEJGOCwgMHhFNjAxODFENCwgMHhBMDA0RDUyRSwKKzB4NjI1NUU0MTcsIDB4MjcyMTc2MDEsIDB4NjI2Qzc3MDIsIDB4OEJGODMyNDMsCisweDJEMjE5MjRCLCAweEQ3MkFENDI5LCAweDJGMTI2MTQyLCAweDZERjI2NUYyLAorMHhDOTgwNjA1MywgMHg2MDUzMjcwMCwgMHg2MTAzQzk2MCwgMHg2MDUzODA3MSwKKzB4NjVGMjZFRjIsIDB4NEQxOUM5MDMsIDB4ODA3MjQ1MjksIDB4NDUxOTYwREMsCisweDRFMjk4MTcyLCAweDYyRUM2MDVDLCAweDMwMkM0MDE4LCAweDZENDI4MTczLAorMHgyRkQyMjExOCwgMHg2MkYyNkVGMiwgMHg0MjE5NjZGMiwgMHg2NTZDNDYyOSwKKzB4NjAyQzY2RjIsIDB4NDAxODY0RUMsIDB4MzA0QzQ2MjksIDB4ODE3NDQ2MTksCisweDQwMTg2MDZDLCAweDhGMDczMDVDLCAweEJDQjU4MTc1LCAweDYyMEMwMDA5LAorMHg4OTA4MjIyOCwgMHgwMDA5QTAwQSwgMHg4ODQwNjAxMywgMHhCMDBBOEIwMywKKzB4QTAwMzAwMDksIDB4RDYwQjAwMDksIDB4MjYyMkUyMDIsIDB4NEYyNjdGMDQsCisweDAwMEI2RUY2LCAweDAwMEI2REY2LCAweDA2MEEwMDA5LCAweDAwMjAyQjM2LAorMHgwMDIwMkIzNCwgMHgwMDIwMjkyMCwgMHgwMDIwMkIwOCwgMHgwMDFFMTAwQywKKzB4MDAyMDI5MDQsIDB4MDAyMDI5MzQsIDB4N0ZGQzRGMjIsIDB4NjYyMEQyN0UsCisweDhEMDgyNjY4LCAweEQ0N0QyRjYwLCAweDQyMEJEMjdELCAweDY0RjAwMDA5LAorMHhBMDkwN0YwNCwgMHg3RjA0NEYyNiwgMHgwMDBCNEYyNiwgMHgwMDBCMDAwOSwKKzB4MkZFNjAwMDksIDB4REU3NzRGMjIsIDB4NjBFMEQ2NzcsIDB4Q0JDMEQ0NzcsCisweDYyNjAyRTAwLCAweEM4MDM2MDJDLCAweDQwMjE4OTA0LCAweDcwMDE0MDIxLAorMHg2NjAzQTAwMiwgMHg2NjAzNDAwOSwgMHhENjcxNjE2RCwgMHhFNTAwQTAwNCwKKzB4NzUwMTYyNjIsIDB4NzQwNDI0MjIsIDB4MzIxMzYyNUQsIDB4RDE2RDhCRjgsCisweDAwMDk0MTBCLCAweEU0MDFENjZDLCAweDg0RTIyNjQxLCAweDgwRTJDOUJGLAorMHgwMDBCNEYyNiwgMHgyRkU2NkVGNiwgMHhENTY4N0ZGQywgMHg2MjUwREU2MSwKKzB4NjQyQzg0RTIsIDB4Q0I0MDc0MDQsIDB4ODBFMjYxNEQsIDB4NDQyMTY0MTMsCisweEQ3NjM0NDIxLCAweEU2MDBBMDA0LCAweDc2MDE2MjU2LCAweDI3MjIyRjIyLAorMHgzMjQzNjI2RCwgMHg2MDEzOEJGOCwgMHgyMDA4QzkwMywgMHg4ODAzODkxMiwKKzB4ODgwMjg5MDUsIDB4ODgwMTg5MDYsIDB4QTAwODg5MDcsIDB4RTAwNzAwMDksCisweDgwNzhBMDA1LCAweEEwMDJFMDAzLCAweEUwMDE4MDc4LCAweDYyNTI4MDc4LAorMHgyNzIyMkYyMiwgMHhENjUwRTAwRiwgMHg2MDYxODA3OCwgMHg4QjAxODgwMSwKKzB4MjYyMUUyMDAsIDB4NjA2MEQ2NEYsIDB4MjYwMENCMDgsIDB4QzkzRjYwRTAsCisweDdGMDQyRTAwLCAweDZFRjYwMDBCLCAweDYwMjFEMjQ3LCAweDhEMTg4ODAxLAorMHhEMjQ2NjE0MywgMHgyMjEwNjA1MywgMHg2MDYzODAyMSwgMHhENDQ2ODEyMSwKKzB4RTUwMEEwMDcsIDB4MDI3QzYwNUQsIDB4MzY0QzY2MDMsIDB4MjYyMDcwMDEsCisweDYyNUQ2NTAzLCAweDMyMTM2MTFDLCAweEQ2NDA4QkY0LCAweEM5QkY2MDYwLAorMHgwMDBCMjYwMCwgMHgyRkQ2MDAwOSwgMHg0RjIyMkZFNiwgMHg2MDQzN0ZGQywKKzB4OEQwMkM4MjAsIDB4QkY2QTZFNDMsIDB4NjBFMzAwMDksIDB4ODkwMUM4MTAsCisweDAwMDlCRjY3LCAweEM4NDA2MEUzLCAweEJGOEM4OTAxLCAweDYwRTMwMDA5LAorMHg4OTI5QzgwMSwgMHg2MEQwREQzMiwgMHg4RDAzQzgwMiwgMHhENjMxMkYwMCwKKzB4MDAwOTQ2MEIsIDB4QzgwNDYwRjAsIDB4RDYyRjg5MDIsIDB4MDAwOTQ2MEIsCisweDYwMjM2MkYwLCAweDg5MDJDODgwLCAweEM5N0Y2MEQwLCAweDYwMjMyRDAwLAorMHg4OTAyQzgwMSwgMHg0MjBCRDIyOSwgMHhENTI5MDAwOSwgMHg4ODAyNjA1MiwKKzB4RDIyODhCMDMsIDB4QTAwNUU2MDQsIDB4ODgwMTIyNjAsIDB4RDIyNThCMDIsCisweDIyNjBFNjAxLCAweDI1MjJFMjAwLCAweEM4ODA2MEUzLCAweEQyMjI4OTE2LAorMHg2MEUzNkUyMCwgMHg4OTAyQzgwMiwgMHg0MjBCRDIyMCwgMHg2MEUzMDAwOSwKKzB4ODkwMkM4MDQsIDB4NDIwQkQyMUUsIDB4NjBFMzAwMDksIDB4ODkwNUM4MDgsCisweDdGMDREMjFDLCAweDZFRjY0RjI2LCAweDZERjY0MjJCLCAweDRGMjY3RjA0LAorMHgwMDBCNkVGNiwgMHgwMDAwNkRGNiwgMHgwMDFFMTAyMCwgMHgwMDIwMjlEMCwKKzB4MDAyMDBFMkEsIDB4MDAxRTEwMTUsIDB4MDAxRTEwQkYsIDB4MDAxMTdEMDAsCisweDAwMUUxMEZDLCAweDAwMjAwMEY4LCAweDAwMjAyOTMwLCAweDAwMTE3RDgwLAorMHgwMDFFMTBGOCwgMHgwMDFFMTBBRSwgMHgwMDExN0Q4NCwgMHgwMDFFMTAxNywKKzB4MDAxRTEwMjEsIDB4MDAyMDEwNUMsIDB4MDAyMDEwN0UsIDB4MDAyMDE2MDgsCisweDAwMjAyOTM0LCAweDAwMUUxMDBCLCAweDAwMUUxMDI4LCAweDAwMjAxMEFFLAorMHgwMDIwMTBDMCwgMHgwMDIwMTBDQywgMHhENkE4NjQ0QywgMHgzNDZDNzRGRiwKKzB4MjQ1MDAwMEIsIDB4NjQ0Q0Q2QTYsIDB4MDAwQjM0NkMsIDB4RDZBNTI0NTAsCisweDM0NkM2NDRDLCAweDI0NTAwMDBCLCAweDYxNkQ2MjVDLCAweDQxMTk0MjA4LAorMHg2MDE5NDIwOCwgMHg2NDRDNDIwMCwgMHgzMjRDNjcwRSwgMHgyMDdERDE5RSwKKzB4QzkwRjQyMDAsIDB4MDAwQjMyMUMsIDB4Njc2MzIyMDAsIDB4NDIwODYyNUMsCisweDQyMDA0MjA4LCAweDMyNEM2NDRDLCAweDQyMDBEMTk4LCAweDAwMEIzMjFDLAorMHgyRkU2MjI3MCwgMHg2MTRDNEYxMiwgMHg0MTAwRDQ5MywgMHg2NzEwMzE0QywKKzB4MjcyOUUyOUYsIDB4NjU3MzZFNTMsIDB4NDcxOTY3NkQsIDB4NjcyRTYyNzksCisweDQyMjEyMjdELCAweDQyMjE0MjIxLCAweDc2MDE2NjJDLCAweEU0MDE0NjA4LAorMHgzNEU4NDYwOCwgMHg2NDRDNDYwMCwgMHgwRTFBMDQ2NywgMHgyMTUwMjVFQiwKKzB4MDAwQjRGMTYsIDB4NEYyMjZFRjYsIDB4RDI4NTdGRTgsIDB4ODgwMTYwMjEsCisweEQyODQ4QjdCLCAweDI2Njg2NjIxLCAweEQyODM4Qjc3LCAweDI2Njg2NjIxLAorMHhFNTBGOEI3MywgMHhFNDAxQkZBMCwgMHhCRkEzRTUwMSwgMHhFNTg2RTQwMCwKKzB4RTQwMDY1NUMsIDB4MkY1MEJGQTMsIDB4QkZBMEU0MDEsIDB4RTYwMkU1MDYsCisweDYwNjM0NjE4LCAweDgxRjJFNDAxLCAweDY1NDNCRjlFLCAweEU0MDE4NUYyLAorMHhCRkFBNjU0MywgMHg4NUYyNjYwMywgMHg2NTQzRTQwMSwgMHg2NjAzQkZCMSwKKzB4RTQwMjY1RjAsIDB4NjA1Mzc1NkMsIDB4ODBGOEJGN0UsIDB4QkY4MUU0MDIsCisweDg0RjhFNTEyLCAweDcwOTBFNDAyLCAweDY1MDNCRjgxLCAweDQ2MThFNjAyLAorMHg4MUY2NjA2MywgMHhCRjdGRTQwMiwgMHg4NUY2RTUwMCwgMHg2NjAzRTQwMiwKKzB4RTUwMEJGOEIsIDB4RTQwMjg1RjYsIDB4QkY5MjY2MDMsIDB4RTVGRUU1MDAsCisweEUwMTA2NTVDLCAweEJGNUZFNDAzLCAweEU1MTMwRjU0LCAweEU0MEVCRjYyLAorMHgwNUZDRTAxMCwgMHhCRjYyRTQwRSwgMHhFNTAwNzU4NSwgMHhCRjYzRTQwMywKKzB4RTUwMEU2NDAsIDB4QkY3MEU0MDMsIDB4RTUwMEU2NDAsIDB4QkY3OEU0MDMsCisweEU1RkZFNjQwLCAweEUwMTQ2NTVDLCAweEJGNDVFNDA0LCAweEU0MEYwRjU0LAorMHhFNTA0QkY0OCwgMHgwNUZDRTAxNCwgMHhCRjQ4RTQwRiwgMHhFNTAxNzU4NCwKKzB4QkY0OUU2NDAsIDB4RTUwMUU0MDQsIDB4QkY1NkU2NDAsIDB4RTUwMUU0MDQsCisweEU0MDRFNjQwLCAweEFGNUM3RjE4LCAweDdGMTg0RjI2LCAweDAwMEI0RjI2LAorMHg0RjIyMDAwOSwgMHhEMjQyN0ZGMCwgMHg4ODAxNjAyMSwgMHhEMjQxOEI3MSwKKzB4MjY2ODY2MjEsIDB4RDI0MDhCNkQsIDB4MjY2ODY2MjEsIDB4RTUwRjhCNjksCisweEU0MDFCRjFBLCAweEJGMURFNTAxLCAweEU1ODZFNDAwLCAweEU0MDA2NTVDLAorMHgyRjUwQkYxRCwgMHhCRjFBRTQwMSwgMHhFNDAxRTUwNiwgMHhCRjFCNjU0MywKKzB4RTQwMUU2NDAsIDB4QkYyODY1NDMsIDB4RTQwMUU2NDAsIDB4QkYzMDY1NDMsCisweDY1RjBFNjQwLCAweDc1NkNFNDAyLCAweEJFRkQ2MDUzLCAweEU0MDI4MEY0LAorMHhFNTEyQkYwMCwgMHhFNDAyODRGNCwgMHhCRjAwNzA5MCwgMHhFNjQwNjUwMywKKzB4QkYwMUU0MDIsIDB4RTY0MEU1MDAsIDB4QkYwRUU0MDIsIDB4RTY0MEU1MDAsCisweEJGMTZFNDAyLCAweEU1RkVFNTAwLCAweDYwNTM2NTVDLCAweEJFRTNFNDAzLAorMHhFNTEzODBGOCwgMHhFNDBFQkVFNiwgMHhFNDBFODRGOCwgMHhCRUU2NzA4NSwKKzB4RTUwMDY1MDMsIDB4QkVFN0U2NDAsIDB4RTUwMEU0MDMsIDB4QkVGNEU2NDAsCisweEU1MDBFNDAzLCAweEJFRkNFNjQwLCAweEU1RkZFNDAzLCAweDYwNTM2NTVDLAorMHhCRUM5RTQwNCwgMHhFNDBGODBGQywgMHhFNTA0QkVDQywgMHhFNDBGODRGQywKKzB4QkVDQzcwODMsIDB4RTUwMTY1MDMsIDB4QkVDREU2NDAsIDB4RTUwMUU0MDQsCisweEJFREFFNjQwLCAweEU1MDFFNDA0LCAweEU0MDRFNjQwLCAweEFFRTA3RjEwLAorMHg3RjEwNEYyNiwgMHgwMDBCNEYyNiwgMHgwMDAwMDAwOSwgMHgwMDFFMTAzMCwKKzB4MDAxRTEwODAsIDB4MDAxRTEwOTAsIDB4MDAxRTEwM0YsIDB4MDAxRTEwM0UsCisweDAwMjAyOTJBLCAweDAwMjAyOTJDLCAweDAwMjAyOTJFLCAweDAwMDkwMDBCLAorMHg2NjZDRTY4MCwgMHg2NTYzRDJBMCwgMHg3NTQwRTcwMCwgMHg2NDczNDIyQiwKKzB4MkZCNjJGQTYsIDB4MkZENjJGQzYsIDB4NEYyMjJGRTYsIDB4NEMxOEVDMDEsCisweERBOUJEQjlBLCAweDY1QjI1MkIxLCAweDg5MjIzNTIwLCAweEM5MDM2MDUxLAorMHg4OTFFODgwMSwgMHhEMTk3REU5NSwgMHg2NEUzNDEwQiwgMHg4NTAzNjUwMywKKzB4NjcwRDY2QTIsIDB4REQ5NDM3NjIsIDB4RDQ5NDg5MEEsIDB4NDIwQkQyOTQsCisweEQxOTQwMDA5LCAweEU3MDFENDk0LCAweDIxNzI0RDBCLCAweDAwMDlBRkUyLAorMHg0MjBCRDI5MiwgMHhENjkyNjRFMywgMHg0RDBCRDQ5MiwgMHhBRkQ5MjZDMiwKKzB4NEYyNjAwMDksIDB4NkRGNjZFRjYsIDB4NkJGNjZDRjYsIDB4NkFGNjAwMEIsCisweDdGRjQ0RjIyLCAweEU2ODE4NTQ2LCAweDg1NDcyRjAxLCAweDgxRjE2NjZDLAorMHhEMjdEODU0OCwgMHg4NTQyODFGMiwgMHg4MUYzNjdGMywgMHhFNDBDODU0MywKKzB4NjA1MzgxRjQsIDB4ODFGNTY1NjMsIDB4NzU0MDQyMEIsIDB4NEYyNjdGMEMsCisweDAwMDkwMDBCLCAweDJGOTYyRjg2LCAweDJGQjYyRkE2LCAweDJGRDYyRkM2LAorMHg0RjIyMkZFNiwgMHhFMjAwN0ZFQywgMHhBMENCREI3QiwgMHg2QTEzMkYyMSwKKzB4NEEwOEQyN0EsIDB4REU3QUUwMDEsIDB4NEEwMDQyMEIsIDB4N0UzMDNBRUMsCisweDFGMDIxRkUxLCAweDY2QjJERDc3LCAweDM2MjA1MkIxLCAweEEwQjU4QjAxLAorMHg2MDYxMDAwOSwgMHg4ODAxQzkwMywgMHhBMEFGOEIwMSwgMHg4NTYxMDAwOSwKKzB4ODk3NEM4MDEsIDB4RUUxMDUxNjMsIDB4REM2Mzg1MTIsIDB4QzkwMzY2MDMsCisweDg1MTM2NDAzLCAweDQwMjE2MDBELCAweEM5M0Y0MDIxLCAweDhEMjAzMEUzLAorMHhENzY5NjUwMywgMHg2MjcwNDQwOCwgMHg0NDAwNDQwOCwgMHgyMjI4NDUwMCwKKzB4MzQ1QzhGMEMsIDB4NjA0M0QyNjUsIDB4NjI1RDA1MkQsIDB4NjAyOTQyMTksCisweDIwN0Q2NzBFLCAweDYwNUM4MUY2LCAweDgxRjhBMDBCLCAweDYwNDNEMjYwLAorMHg2ODVEMDUyRCwgMHg2MDg5NDgxOSwgMHgyMDlENjkwRSwgMHg2MDVDODFGNiwKKzB4RDc1QzgxRjgsIDB4MjIyODYyNzIsIDB4RTBGRjg5MDIsIDB4ODFGODYwMEMsCisweEVFRkY4NUY4LCAweDZFRUM2NTBELCAweDhCMEYzNUUwLCAweDRFMEJERTQ1LAorMHg1NDAzNjRCMywgMHhCRjdCRTUwMiwgMHhENDUzNjgwMywgMHg0MTBCRDE0NywKKzB4RDc1MjY1ODMsIDB4RDQ1MkU5MDEsIDB4Mjc5MkEwMjAsIDB4MjZFOUVFRkMsCisweDgxMTI2MDYzLCAweDk0NkU4NTEzLCAweDgxMTMyMDQ5LCAweDQ1MDg4NTEyLAorMHg2MjAzNjk1MywgMHhFNTA4ODVGNiwgMHg4MTEyMjAyQiwgMHg0NTE4ODUxMywKKzB4ODExMzIwOUIsIDB4RDQ0Nzg1MTQsIDB4ODExNDIwNUIsIDB4ODUxMTYxQjIsCisweDgxMTEyMEU5LCAweDYwMjE2MkIyLCAweDIyMDFDQjAxLCAweDAwMDk0QzBCLAorMHg1NkYxNjBCMiwgMHhDQjAxNTJGMiwgMHhBRjdDMkEwMiwgMHg4NTYxMjYyMiwKKzB4QzgwMkRDM0EsIDB4RDkzOEQyMjcsIDB4OEQwRkQ4MkMsIDB4NDIwQjY0QjMsCisweDY1MDMwMDA5LCAweDQ4MEI2NDkzLCAweEU4MDE1RTAzLCAweDg1RUYyQzgyLAorMHg2NTBERDYzNSwgMHg2NEQzNDYwQiwgMHgwMDA5QUY2NSwgMHgwMDA5NDIwQiwKKzB4NkUwMzU0MDMsIDB4RTUwODg1NDQsIDB4NDUxODYxMDMsIDB4MzE1MDIxNTksCisweEJGMjU4QjAzLCAweEEwMDdFNTAxLCAweDg1NDEwMDA5LCAweDYyMERENTJCLAorMHg4OTAxMjI1OCwgMHhFNTAwQkYxQywgMHg0ODBCNjQ5MywgMHhENDI4NjVFMywKKzB4RTgwMUQ2MTEsIDB4MkM4MjQ2MEIsIDB4MDAwOUFGNDUsIDB4N0IwODYyRjEsCisweDJGMjE3MjAxLCAweEVFMDM2MkYxLCAweDMxRTc2MTJELCAweEFGMkU4OTAxLAorMHg3RjE0MDAwOSwgMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwgMHg2QUY2NkJGNiwKKzB4MDAwQjY5RjYsIDB4RkUwMzY4RjYsIDB4MDAyMDE4QjgsIDB4MDAyMDI4RTQsCisweDAwMjAyOEVDLCAweDAwMjAwQUUwLCAweDAwMjAwRTJBLCAweDAwMjAyOEI0LAorMHgwMDIwMEI2MiwgMHgwMDFFMjEzMCwgMHgwMDIwMkFENCwgMHgwMDIwMEFGRSwKKzB4MDAxQzNEMzAsIDB4MDAyMDJBRDgsIDB4MDAyMDI4QzQsIDB4MDAyMDIwMzQsCisweDAwMUMzRDAwLCAweDAwMjAyQUU0LCAweDAwMjAyQUYwLCAweDAwMjAyOUQ0LAorMHgwMDIwMkE1NCwgMHgwMDIwMjkwMCwgMHgwMDIwMjhCQywgMHgwMDFFMjEyQywKKzB4MDAyMDJBREMsIDB4MDAyMDJBRTAsIDB4MDAyMDBFOEEsIDB4MDAwMDgwMDAsCisweDAwMjAyQUVDLCAweDRGMjIyRkU2LCAweDZFMjJEMjBELCAweEM4NDA2MEUzLAorMHgyMkUyOEQwMiwgMHgwMDA5QkU3QSwgMHg0MjE4RTI0MCwgMHg4OTAxMkUyOCwKKzB4MDAwOUJFNzYsIDB4QzgwNTYwRTMsIDB4QkVDQjg5MDEsIDB4NjBFMzAwMDksCisweDg5MDJDODAyLCAweEFFNzM0RjI2LCAweDRGMjY2RUY2LCAweDZFRjYwMDBCLAorMHgwMDFDMzUxMCwgMHgwODBBMEMwRSwgMHgwMDAyMDQwNiwgMHgxQTFDMUUyMCwKKzB4MTIxNDE2MTgsIDB4MkUzMDMyMzQsIDB4MjYyODJBMkMsIDB4M0EzQzNFNDAsCisweDZDNjI1NjQ4LCAweDQxMTEyRjI2LCAweEUyMjA4RjE4LCAweDg5MEIzMTIzLAorMHgzMjFDRDIwNCwgMHhEMTAyNjIyMCwgMHg0MTJCMzEyQywgMHgwMDA5MDAwOSwKKzB4MDAyMDIwNUUsIDB4MDAyMDIwMTQsIDB4MDAwQkUwMDAsIDB4NDAwMDYyRjYsCisweDQwMDA0MDAwLCAweDQwMDA0MDAwLCAweDQwMDA0MDAwLCAweDYyRjYwMDBCLAorMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwgMHg0MDE4NDAwMCwKKzB4NjJGNjAwMEIsIDB4NDAwMDQwMDAsIDB4NDAwMDQwMDAsIDB4NDAwMDQwMDAsCisweDQwMjg0MDAwLCAweDYyRjYwMDBCLCAweDQwMDA0MDAwLCAweDQwMTg0MDAwLAorMHgwMDBCNDAyOCwgMHhDOTBGNjJGNiwgMHg0MDA1NDAwNSwgMHg0MDA1NDAwNSwKKzB4NjJGNjAwMEIsIDB4NDAwNUM5MDcsIDB4NDAwNTQwMDUsIDB4NjJGNjAwMEIsCisweDQwMDVDOTAzLCAweDAwMEI0MDA1LCAweEM5MDE2MkY2LCAweDAwMEI0MDA1LAorMHgwMDAwNjJGNiwgMHgwODBBMEMwRSwgMHgwMDAyMDQwNiwgMHgxQTFDMUUyMCwKKzB4MTIxNDE2MTgsIDB4MkUzMDMyMzQsIDB4MjYyODJBMkMsIDB4M0EzQzNFNDAsCisweDZDNjI1NjQ4LCAweDQxMTEyRjI2LCAweEUyMjA4RjE4LCAweDg5MEIzMTIzLAorMHgzMjFDRDIwNCwgMHhEMTAyNjIyMCwgMHg0MTJCMzEyQywgMHgwMDA5MDAwOSwKKzB4MDAyMDIxMUUsIDB4MDAyMDIwRDQsIDB4MDAwQkUwMDAsIDB4NDAwMTYyRjYsCisweDQwMDE0MDAxLCAweDQwMDE0MDAxLCAweDQwMDE0MDAxLCAweDYyRjYwMDBCLAorMHg0MDAxNDAwMSwgMHg0MDAxNDAwMSwgMHg0MDAxNDAwMSwgMHg0MDE5NDAwMSwKKzB4NjJGNjAwMEIsIDB4NDAwMTQwMDEsIDB4NDAwMTQwMDEsIDB4NDAwMTQwMDEsCisweDQwMjk0MDAxLCAweDYyRjYwMDBCLCAweDQwMDE0MDAxLCAweDQwMTk0MDAxLAorMHgwMDBCNDAyOSwgMHg0MDA0NjJGNiwgMHg0MDA0NDAwNCwgMHhDOTBGNDAwNCwKKzB4NjJGNjAwMEIsIDB4NDAwNDQwMDQsIDB4QzkwNzQwMDQsIDB4NjJGNjAwMEIsCisweDQwMDQ0MDA0LCAweDAwMEJDOTAzLCAweDQwMDQ2MkY2LCAweDAwMEJDOTAxLAorMHgwMDAwNjJGNiwgMHgzNjIyRTIxOCwgMHg2NzQzOEYxMiwgMHgwMDA5QTAwNCwKKzB4NzZGRjYyNTQsIDB4NzQwMTI0MjAsIDB4QzgwMzYwNTMsIDB4NjA0MzhCRjgsCisweDg5MDJDODAzLCAweDQyMkJEMjJCLCAweEQyMkIwMDA5LCAweDAwMDk0MjJCLAorMHgyRkU2NjQ3MywgMHg4RDRBMzQ1MCwgMHgyNzc4Njc2MywgMHg2MjQzODk0NywKKzB4MjI3QjIyNUIsIDB4QzkwMTYwMjMsIDB4OEQyMDM0NTIsIDB4MkVFODZFMDMsCisweDYwMjM4QjE1LCAweDhCMDhDODAzLCAweDQ3MDk2NjQzLCAweDQ3MTA2MjU2LAorMHg4RkZCMjYyMiwgMHhBMDMyNzYwNCwgMHg0NzAxMDAwOSwgMHg2MTQzNjY3MywKKzB4NDYxMDYyNTUsIDB4OEZGQjIxMjEsIDB4QTAyODcxMDIsIDB4NjY0MzAwMDksCisweDQ3MTA2MjU0LCAweDhGRkIyNjIwLCAweEEwMjA3NjAxLCAweDYxNDMwMDA5LAorMHgyRUU4MzU3QywgMHg4RjE1MzE3QywgMHg2MDIzNjY1MywgMHg4QjA3QzgwMywKKzB4NzZGQzQ3MDksIDB4NDcxMDYyNjIsIDB4MjEyNjhGRkIsIDB4MDAwOUEwMEYsCisweDY1NjM0NzAxLCAweDc1RkU2NjczLCAweDQ2MTA2MjUxLCAweDIxMjU4RkZCLAorMHgwMDA5QTAwNSwgMHg2MjYwNzZGRiwgMHg4RkZCNDcxMCwgMHg2MDQzMjEyNCwKKzB4NkVGNjAwMEIsIDB4MDAyMDIzMDYsIDB4MDAyMDI3QjIsIDB4RTIxRTJGRTYsCisweDY3NjMzNjI2LCAweDhEMUI2MTUzLCAweDNFMTA2RTQzLCAweDNFMTI4OTE2LAorMHg2NUUzODkwOCwgMHgzNjcyRTYwMCwgMHg2MjE0ODkxMCwgMHgyNTIwNzYwMSwKKzB4NzUwMUFGRjksIDB4MzE3QzY0RTMsIDB4NjUxMzM0N0MsIDB4RTYwMEEwMDQsCisweDYyNTA3NUZGLCAweDI0MjQ3NjAxLCAweDhCRjkzNjcyLCAweDYwRTNBMDExLAorMHg4OTA4MzFFMiwgMHgzMjdDNjIxMywgMHg4QjA0MzJFNiwgMHg2NTEzNjRFMywKKzB4QTAwODY2NzMsIDB4RDI4RjZFRjYsIDB4NjUxMzY0RTMsIDB4NDIyQjY2NzMsCisweDAwMEI2RUY2LCAweEUyMDQ2RUY2LCAweDY3NDMzNjIyLCAweDhGMTAzNTZDLAorMHhBMDA0MzQ2QywgMHg3NUZGMDAwOSwgMHg3NkZGNjI1MCwgMHg2MDUzMjQyNCwKKzB4OEJGOEM4MDMsIDB4QzgwMzYwNDMsIDB4QTEwNTg5MDEsIDB4QTI3NzAwMDksCisweEEyOTkwMDA5LCAweDJGQjYwMDA5LCAweDJGRDYyRkM2LCAweDdGRTQyRkU2LAorMHg2QzYzNjA0MywgMHg2NjUyMUY2MiwgMHhDOTAzNzUwNCwgMHgxRjUxNkU1MywKKzB4NDUwODY1MDMsIDB4RTFGQzZENDMsIDB4MkQxOTQ1MDAsIDB4MUY3MzI1NTgsCisweDFGNjUxRjQ0LCAweDJGRDI4RDBCLCAweDg4MDg2MDUzLCAweDg4MTA4OTIzLAorMHg4ODE4ODk1QiwgMHhBMDg5OEIwMSwgMHhBMEJEMDAwOSwgMHg2MjYzMDAwOSwKKzB4MkQyMkU2MDAsIDB4N0NGQzdEMDQsIDB4RUIxMEEwMEQsIDB4RTYwMDY0RTYsCisweDdDRjA2NUU2LCAweDYyRTI2MUU2LCAweDFENTEyRDQyLCAweDFEMjMxRDEyLAorMHg3RTA0N0QxMCwgMHgzQ0IyMUZFMSwgMHgxRjY1ODlGMCwgMHgyRkQyMUZDMiwKKzB4QTBBMTFGRTYsIDB4NjREMjFGRDQsIDB4NDQyODYyNjMsIDB4NDQyOTQ0MTgsCisweDQyMTg0NDE5LCAweDQ2MjkyNDJCLCAweDJENDI0NjE5LCAweDY1NjM3RDA0LAorMHhBMDIxN0NGRCwgMHg2N0U2RUIxMCwgMHg2MkU2N0NGMCwgMHg2NEU2NjY3MywKKzB4MjU2QjQ2MTgsIDB4MkQ1MjYxRTIsIDB4NjUyMzQ3MjksIDB4NDUxODQ3MTksCisweDQyMjkyNzVCLCAweDQyMTkxRDcxLCAweDQ3MTg2NzQzLCAweDQ0MjkyMjdCLAorMHg0NDE5NjcxMywgMHgyNDdCNDcxOCwgMHgxRDQzMUQyMiwgMHg0MTE5NDEyOSwKKzB4NjUxMzdEMTAsIDB4MUZFMTdFMDQsIDB4ODlEQzNDQjIsIDB4MUZFNjdFRkYsCisweDFGQzIxRjU1LCAweEEwNjcyRkQyLCAweDZDRjIxRkQ0LCAweDY2QzI1N0Y1LAorMHg0NjI4NjI3MywgMHg0MjI4NDYyOSwgMHgyQzYyMjYyQiwgMHg3QzA0NURGMiwKKzB4N0RGRTQ3MjksIDB4QTAxQ0VCMTAsIDB4NjVFNjVFRjEsIDB4NjZFNjYyNzMsCisweDQ3Mjg2NzUzLCAweDY3NjMyMjdCLCAweDQ1Mjk2MUU2LCAweDI1N0I0NzI4LAorMHgyQzIyNjRFNiwgMHg2NTEzMUM1MSwgMHg0NTI4NDYyOSwgMHgxQzYyMjY1QiwKKzB4NDEyOTY2NDMsIDB4MjE2QjQ2MjgsIDB4NDQyOTFDMTMsIDB4Njc0MzdDMTAsCisweDNEQjI3REYwLCAweDFGRDI4OUUxLCAweDdFRkVBMDM0LCAweDUxRjU2Q0YyLAorMHg2MjEzNjZDMiwgMHg0MjI4NDYxOCwgMHg0MjE4NDYxOSwgMHgyQzYyMjYyQiwKKzB4N0MwNDVERjIsIDB4N0RGRjQxMTksIDB4QTAxRkVCMTAsIDB4NjVFNjVFRjEsCisweDY0RTY3REYwLCAweDQyMjg2MjUzLCAweDQyMTg2N0U2LCAweDY2RTYyMTJCLAorMHg2MTQzMkMxMiwgMHg0NTE5NDEyOCwgMHgyNTFCNDExOCwgMHg2NTczMUM1MSwKKzB4NDQxOTQ1MjgsIDB4MjQ1QjQ1MTgsIDB4NjQ2MzFDNDIsIDB4NDcxOTQ0MjgsCisweDI3NEI0NDE4LCAweDQ2MTkxQzczLCAweDYxNjM3QzEwLCAweDg5REUzREIyLAorMHg3RUZEMUZEMiwgMHgxRkM0MUZFNiwgMHg1REYyRTcwNCwgMHhBMDBENUVGNiwKKzB4NjJFNDUxRjQsIDB4NjZFNDdERkMsIDB4NjVFNDY0RTQsIDB4NzEwMTIxMjAsCisweDcxMDEyMTYwLCAweDcxMDEyMTQwLCAweDcxMDEyMTUwLCAweDg5RjAzRDcyLAorMHg2NkQzNTdGMywgMHg2NDEzNjVFMywgMHg2RUY2N0YxQywgMHg2Q0Y2NkRGNiwKKzB4NkJGNkExOTAsIDB4MDAyMDIxOTQsIDB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsCisweDYwNDM3RkU0LCAweDZDNjNDOTAzLCAweDY2MDMxRjYyLCAweDQ2MDg3NUZDLAorMHg2MTUyNkU0MywgMHg0NjAwRTJGQywgMHgyNjY4MkUyOSwgMHgxRjQ0MUY3MywKKzB4MUY1MTZENTMsIDB4OEQwQjFGMTUsIDB4NjA2MzJGRTIsIDB4ODkxRjg4MDgsCisweDg5NTM4ODEwLCAweDhCMDE4ODE4LCAweDAwMDlBMDgxLCAweDAwMDlBMEI5LAorMHhFQjEwQTAwRCwgMHg1MkQzN0RGMCwgMHg1NEQxNTZEMiwgMHgyRTE2NjVEMiwKKzB4MkU2NjJFMjYsIDB4MkU0MjdFRkMsIDB4MUZEMTYxNTMsIDB4M0NCMjdDRjAsCisweDdEMDQ4OUYwLCAweDFGMTUxRkQ2LCAweDJGRTIxRkMyLCAweDFGRTRBMEExLAorMHg2MjEzNjZFMiwgMHg0MjI5NDYxOSwgMHg0MjE5NDYxOCwgMHgyRTYyMjYyQiwKKzB4N0NGRjQxMTgsIDB4RUIxMEEwMjEsIDB4NTREMzdERjAsIDB4NjI0MzU3RDIsCisweDQyMTk0MjI5LCAweDU1RDEyMTJCLCAweDJFMTY2NkQyLCAweDQxMjk2MTczLAorMHg0MTE5NDQxOCwgMHgyRTQ2MjQxQiwgMHg0NDI5NjQ1MywgMHg0NDE5NDcxOCwKKzB4MkU3NjI3NEIsIDB4NDcyOTY3NjMsIDB4NDcxOTQ1MTgsIDB4MjU3QjdFRkMsCisweDQ2MTgyRTUyLCAweDFGRDE2MTYzLCAweDNDQjI3Q0YwLCAweDdEMDM4OURDLAorMHgxRjE1MUZENiwgMHgyRkUyMUZDMiwgMHgxRkU0QTA2QiwgMHg1N0Y1NkVGMiwKKzB4NjI3MzY2RTIsIDB4NDYyODQ2MjksIDB4MjYyQjQyMjksIDB4MkU2MjVDRjIsCisweDdDRkU0NzI4LCAweEEwMUJFQjEwLCAweDdERjA1REYxLCAweDU1RDI1MUQzLAorMHg0NjI5NjYxMywgMHg1NEQxMjc2QiwgMHgyRTc2NjJEMiwgMHg0MTI4Njc1MywKKzB4MjE3QjQ3MjksIDB4NjE0MzJFMTYsIDB4NDEyOTQ1MjgsIDB4MkU1NjI1MUIsCisweDQ0Mjg2NTIzLCAweDI0NUI0NTI5LCAweDQyMjgyRTQ2LCAweDdDRjA2NzIzLAorMHg4OUUyM0NCMiwgMHgxRkQ2N0QwMiwgMHhBMDNBMUZDMiwgMHg2N0YyMUZFNCwKKzB4NjU3MjUxRjUsIDB4NDUyOTYyMTMsIDB4NDUyODQ1MTksIDB4NDIxOTQ1MTgsCisweDVDRjIyNTJCLCAweDQxMjgyNzUyLCAweDdDRkQ0MTE4LCAweEEwMjJFQjEwLAorMHg3REYwNURGMSwgMHg1NEQyNTZEMywgMHg0NTE5NjU2MywgMHg1MkQxNDYyOCwKKzB4NDYxODIxNUIsIDB4NkVEMjY1NDMsIDB4NDUxOTI3MTYsIDB4MjY1QjQ0MjgsCisweDY1NDM2MTYzLCAweDQ1MTg2NDIzLCAweDQyMjg0NDE5LCAweDQyMTgyNTRCLAorMHgyNzE2NjRFMywgMHg0NDE5NjYyMywgMHgyNjRCMjc1NiwgMHg0RTI4Mjc2NiwKKzB4NjFFMzRFMTgsIDB4M0NCMjdDRjAsIDB4N0QwMTg5REIsIDB4MUZDMjFGRDYsCisweEU3MDQxRjc0LCAweDUxRjQ1REYyLCAweDVFRjZBMDBELCAweDg0RTI3RUZDLAorMHg2MjAzNjRFMCwgMHg3REZDODRFMSwgMHg4NEUzNjUwMywgMHgyMTY0NjYwMywKKzB4MjE1NDIxMjQsIDB4M0Q3MjIxNDQsIDB4NTdGMzg5RjAsIDB4NjQxMzY2RDMsCisweDdGMUM2NUUzLCAweDZERjY2RUY2LCAweEEwOUQ2Q0Y2LCAweDJGODY2QkY2LAorMHgyRkE2MkY5NiwgMHgyRkM2MkZCNiwgMHgyRkU2MkZENiwgMHg2MTQzNzRFMCwKKzB4NkE2MzY4NzMsIDB4NkI1NkU5MjAsIDB4NkM1NjdBRTAsIDB4NkQ1NjcxMjAsCisweDZFNTYzQTkyLCAweDY0NTY2NzU2LCAweDYyNTY2NjU2LCAweDExQzEyMUIyLAorMHgxMUUzMTFEMiwgMHgxMTQ1MTE3NCwgMHg4REVDMTE2NiwgMHg3MTIwMTEyNywKKzB4NjYxM0EwMDQsIDB4N0FGRjYyNTQsIDB4NzYwMTI2MjAsIDB4OEJGOTJBQTgsCisweDZFRjY2MDgzLCAweDZDRjY2REY2LCAweDZBRjY2QkY2LCAweDAwMEI2OUY2LAorMHgyRjg2NjhGNiwgMHgyRkE2MkY5NiwgMHgyRkM2MkZCNiwgMHgyRkU2MkZENiwKKzB4NkE2MzY4NzMsIDB4NzVFMEU5MjAsIDB4NTY1NjUyNTcsIDB4NTc1NDUxNTUsCisweDVENTI1RTUzLCAweDZCNTI1QzUxLCAweDI0NjYyNDI2LCAweDI0NzYyNDE2LAorMHg3QUUwMjRFNiwgMHgyNEM2MjRENiwgMHg4REVDM0E5MiwgMHg2NkEzMjRCNiwKKzB4NkVGNjY3ODMsIDB4NkNGNjZERjYsIDB4NkFGNjZCRjYsIDB4QTA0MzY5RjYsCisweDJGRTY2OEY2LCAweEM4MDQ2MDYzLCAweDhEMDQ2RTYzLCAweDYyMTY2MTUzLAorMHgyNDIyN0VGQywgMHg2MEUzNzQwNCwgMHg4OTA4QzgxOCwgMHg3MTA0NjUxMywKKzB4NjI1MjY2MTYsIDB4MjQyMjdFRjgsIDB4QUZGNDE0NjEsIDB4RTIwNDc0MDgsCisweDY1MTMzRTIyLCAweDY2RTM4RDAyLCAweDZFRjZBMDFDLCAweDZFRjZBRjg3LAorMHhDODA0NjA2MywgMHg2MTYzOEQwNCwgMHg2MjUyNzVGQywgMHgyNDI2NzFGQywKKzB4QzgxODYwMTMsIDB4NzVGODg5MDYsIDB4NjY1MjUyNTEsIDB4MjQ2NjI0MjYsCisweDcxRjhBRkY2LCAweDMxMjJFMjA0LCAweDY2MTM4RjAyLCAweDAwMDlBRkExLAorMHgwMDA5QTAwQSwgMHgwMDA5QTAwNCwgMHg3NkZGNjI1NCwgMHg3NDAxMjQyMCwKKzB4OEJGOTI2NjgsIDB4NjA3MzAwMEIsIDB4MDAwOUEwMDQsIDB4NjI1MDc1RkYsCisweDI0MjQ3NkZGLCAweDhCRjkyNjY4LCAweDYwNzMwMDBCLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHg1NDRGMEQwQSwgMHg0NjIwNTM1NSwgMHgwMDAwM0E1NywgMHgyMDcyNjE0RCwKKzB4MzIyMDMyMzIsIDB4MjAzNzMwMzAsIDB4MzUzQTM3MzEsIDB4MzczMzNBMzIsCisweDAwMDAwMDAwLCAweDAwMDAwRDBBLCAweDAwMDAwMDQzLCAweDYxNzY2RTQ5LAorMHgyMDY0Njk2QywgMHg3MjY1NzM3NSwgMHgyMDcyNkYyMCwgMHgyMDc5NjU2QiwKKzB4MDAyMTQ0NDksIDB4NkU2QjZFNTUsIDB4MjA2RTc3NkYsIDB4NkQ2RDZGNjMsCisweDNENjQ2RTYxLCAweDAwMDAwMDAwLCAweDYxNDM3NzQ4LCAweDcyNjI2OTZDLAorMHg2RjY5NzQ2MSwgMHg2NjIwMjA2RSwgMHgwQTZDNjk2MSwgMHgwMDAwMDAwRCwKKzB4NzM2OTZGNEUsIDB4NjE0MzIwNjUsIDB4NzI2MjY5NkMsIDB4NkY2OTc0NjEsCisweDYxNjYyMDZFLCAweDIxMjE2QzY5LCAweDAwMDAwRDBBLCAweDAwMDAwRDBBLAorMHgwMDAwMDA0MiwgMHgwMDAwMDBGRiwgMHgwMDAyMDAwMSwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMTBFMDEwRCwgMHgwMDAyMDAwMywgMHgwMTA5MDEwOCwKKzB4MDAwMjAxMEEsIDB4MDAwMzAwMDIsIDB4MDIwMjAyMDEsIDB4MDIwNDAyMDMsCisweDAyMDYwMjA1LCAweDAyMDgwMjA3LCAweDAyMEEwMjA5LCAweDAyMEMwMjBCLAorMHgwMjBFMDIwRCwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAxMEUwMTBELCAweDAwRkYwMTBGLCAweDAxMDkwMTA4LAorMHgwMTBCMDEwQSwgMHgwMDAzMDAwMiwgMHgwMjAyMDIwMSwgMHgwMjA0MDIwMywKKzB4MDIwNjAyMDUsIDB4MDIwODAyMDcsIDB4MDIwQTAyMDksIDB4MDIwQzAyMEIsCisweDAyMEUwMjBELCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDAwMDAwNzIsIDB4MDAyMDUyMjAsIDB4MDAwMDAwNDYsCisweDAwMDAwMDU5LCAweDczMjA0MTQyLCAweDAwM0Q3MTY1LCAweDAwMDAwMDc0LAorMHgwMDAwMDAwMCwgMHgwMjAwMDExMiwgMHg0MEZGRkZGRiwgMHgxMjIxMEFDRSwKKzB4MjAxMDQ4OTAsIDB4MDIwOTAxMDAsIDB4MDEwMTAwMkUsIDB4MDlGQTgwMDAsCisweDA0MDAwMDA0LCAweDAwMDAwMEZGLCAweDAyMDEwNTA3LCAweDA3MDAwMjAwLAorMHgwMDAyODIwNSwgMHgwNTA3MDAwMiwgMHgwMDQwMDM4MywgMHgwNDA1MDcwMSwKKzB4MDEwMDQwMDMsIDB4MDAyRTAyMDksIDB4ODAwMDAxMDEsIDB4MDAwNDA5RkEsCisweDAwRkYwNDAwLCAweDA1MDcwMDAwLCAweDAwNDAwMjAxLCAweDgyMDUwNzAwLAorMHgwMDAwNDAwMiwgMHgwMzgzMDUwNywgMHgwNzAxMDA0MCwgMHg0MDAzMDQwNSwKKzB4MDMwNDAxMDAsIDB4MDMwQzA0MDksIDB4MDA3OTAwNUEsIDB4MDA0MTAwNDQsCisweDAzMTgwMDUzLCAweDAwNTMwMDU1LCAweDAwMzIwMDQyLCAweDAwMzAwMDJFLAorMHgwMDU3MDAyMCwgMHgwMDQxMDA0QywgMHgwMDAwMDA0RSwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDA3MDksIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIH07CisKK2NvbnN0IHUzMl90IHpjRndJbWFnZVNpemU9MTEyMDQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBmd3VfT1RVU19SQy5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwZnd1X09UVVNfUkMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODlkM2UwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwZnd1X09UVVNfUkMuYwpAQCAtMCwwICsxLDcxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAiY3ByZWNvbXAuaCIKKworY29uc3QgdTMyX3QgemNGd0ltYWdlW10gPSB7CisweDAwMDkwMDBCLCAweDRGMjIyRkU2LCAweERFMjg3RkZDLCAweEUxMTRENzI4LAorMHgxRTEzRDQyOCwgMHgxRTRDNDcwQiwgMHgwMDA5QjAxOCwgMHhBMDAzOTU0MywKKzB4MzY1MkU2MDAsIDB4NzYwMThEMDQsIDB4Qzg0MDYwRTIsIDB4MkYwMjhERjksCisweERFMjJENDIxLCAweDAwMDk0RTBCLCAweDRFMEJENDIxLCAweEQ0MjEwMDA5LAorMHgwMDA5NEUwQiwgMHg0RjI2N0YwNCwgMHg2RUY2QTAyMiwgMHhEMTFFNEYyMiwKKzB4MDAwOTQxMEIsIDB4NDQwQkQ0MUQsIDB4RDUxRDAwMDksIDB4MDAwOTQ1MEIsCisweEUxRkZENzFDLCAweEQyMUM2MTFELCAweDUwMjkyNzEyLCAweENCMDFFMUZGLAorMHhENjFCRDQxQSwgMHgyMjEyMTIwOSwgMHhFNTAxMTIxMSwgMHgyNDUyRTIwMCwKKzB4RDUxODI2MjIsIDB4OTcwRkQ2MTgsIDB4NEYyNjI1NzIsIDB4MjYyMDAwMEIsCisweEREMTdEQzE2LCAweDRDMEJERTE3LCAweDREMEIwMDA5LCAweDRFMEIwMDA5LAorMHhBRkY4MDAwOSwgMHgyNzEwMDAwOSwgMHgwMDAwMDY0MCwgMHgwMDFDMDAxQywKKzB4MDAyMDA4RUEsIDB4MDAwMEIzOEUsIDB4MDAyMDI4REMsIDB4MDAyMDBEQTYsCisweDAwMjAyOEU4LCAweDAwMjAyOTAwLCAweDAwMjAwQzZDLCAweDAwMjAwRUEyLAorMHgwMDIwMDk0MCwgMHgwMDFDMzUxMCwgMHgwMDFDMzYyNCwgMHgwMDFFMjEyQywKKzB4MDAyMDI4OTQsIDB4MDAyMDI4OEMsIDB4MDAyMDI3RjAsIDB4MDAyMDBCNjgsCisweDAwMjAxRjc0LCAweDAwMjAxNzM0LCAweDJGRDYyRkM2LCAweDRGMjIyRkU2LAorMHhERUExN0ZBNCwgMHg2MUUwRTAxQywgMHg3RDAxNkRFMywgMHg2MUQwMEYxNCwKKzB4RDU5RkQ0OUUsIDB4NDUwQkUwMjAsIDB4RTAyMDBGMTQsIDB4RTc4MDA0RkMsCisweDYwNEM2NkUyLCAweDdEN0Y2NzdDLCAweDFGNjkzMDcwLCAweDJENjI4RjE3LAorMHgwMUZDRTAxQywgMHg2NDFDRTUwMCwgMHhENzk3REU5NiwgMHgzMjQzNjI1RCwKKzB4QTIxQThCMDEsIDB4NjU1RDAwMDksIDB4MzFFQzYxNTMsIDB4RTAyODZDMTAsCisweDZENTMwRkM0LCAweDNEN0M2MkNFLCAweEFGRUYyRDIwLCAweDIwMDg3NTAxLAorMHhFMDFDOEIxNSwgMHhFNTAwMDFGQywgMHhENzhCREU4QSwgMHg2NDFDQTAwQSwKKzB4NkM1MzY1NUQsIDB4NjZDMjNDRUMsIDB4NjY2MjYyNTMsIDB4MjI2MjMyN0MsCisweDFGNjk3NTA0LCAweDMyNDM2MjVELCAweEExRjY4QkYyLCAweDg4MDEyRDEwLAorMHhFMDFDOEIxNiwgMHhFNDAwMDFGQywgMHg2NzFDMkQ0MCwgMHg2MjREREU3RCwKKzB4OEIwMTMyNzMsIDB4MDAwOUExRTksIDB4NjJFMzY0NEQsIDB4NzIwNDZENDMsCisweDNERUM2MTQzLCAweDY1RDIzMTJDLCAweDc0MDg2QzEyLCAweDI1QzJBRkVGLAorMHg4QjE4ODgwNCwgMHgwMUZDRTAxQywgMHgyRDQwRTQwMCwgMHhERTcxNjcxQywKKzB4MzI3MzYyNEQsIDB4QTFEMDhCMDEsIDB4NjQ0RDAwMDksIDB4NjJFMzZENDMsCisweDY1RDIzREVDLCAweDYxNDM3MjA0LCAweDY2MTIzMTJDLCAweDc0MDg2QzUyLAorMHhBRkVEMkM2OSwgMHg4ODA1MjVDMiwgMHhFMDFDOEIxOCwgMHhFNDAwMDFGQywKKzB4NjcxQzJENDAsIDB4NjI0RERFNjMsIDB4OEIwMTMyNzMsIDB4MDAwOUExQjUsCisweDZDNDM2NDRELCAweDNDRUM2MkUzLCAweDcyMDQ2NUMyLCAweDNEMkM2RDQzLAorMHg2MTUyNjZEMiwgMHgyMTZCNzQwOCwgMHgyNTEyQUZFRCwgMHg4QjEzODgzMCwKKzB4RTIwMERFNTgsIDB4NjRFMjJEMjAsIDB4OEIwNDI0NDgsIDB4NDIwQkQyNTcsCisweEExOUEwMDA5LCAweDU1RTEwMDA5LCAweDU3RTM1NkUyLCAweERENTQ1Q0U0LAorMHgyRkM2NEQwQiwgMHg3RjA0QTE5MSwgMHg4OTAxODgyOCwgMHgwMDA5QTBFQSwKKzB4RTE0M0RFNEMsIDB4NjIyRDYyRTEsIDB4OEYwMzMyMTcsIDB4NTZGQjFGRUIsCisweDI2MjFFMjQwLCAweDhCMDEzMjE3LCAweDAwMDlBMEQ1LCAweEUxMDE1RUZCLAorMHgzMDE2ODVFMSwgMHhBMENFOEIwMSwgMHhFNDAxMDAwOSwgMHgyRDQwNTVGQiwKKzB4NjQ1MUIxNzksIDB4RTE0MzU3RkIsIDB4RTA1NDYyNzEsIDB4MzUxNzY1MkQsCisweDBGNTY4RDQxLCAweDM1NjNFNjQwLCAweEU2MDA4QjA1LCAweDBGNjVFMDM0LAorMHhBMDBGRTExQSwgMHg2MTUzNzJDMCwgMHg0MTIxNDEyMSwgMHg0MTIxNDEyMSwKKzB4NDUyMTQxMjEsIDB4NDUyMTQ1MjEsIDB4QzkwMzYwNTMsIDB4RTAzNDY2MDMsCisweDcxMTgwRjY1LCAweDIyMDlFMDA3LCAweDY0MURFMDMwLCAweDBGMjU2NUYzLAorMHgxRjRFQjFGMSwgMHgwNEZERTAzNCwgMHg2NzRERTAzMCwgMHg0NzA4MENGRCwKKzB4NjA3MzYxQ0QsIDB4NDEwOEQyMkIsIDB4RTAwRjBDRkUsIDB4MUYxRjQyMEIsCisweDJDRDk2RDA3LCAweDVFRkI2MDczLCAweDg1RTIwRkM2LCAweDQyMEI1MUZGLAorMHgyQzBCNjAwRCwgMHg1NEZFNjA3MywgMHhCMUJCMEZDNiwgMHhFMDU0NjVGMywKKzB4NjUyRDYyRTEsIDB4RTY0MDBGNTYsIDB4ODk2MjM1NjMsIDB4RTA1MEUxMDAsCisweDYwMjMwRjE1LCAweDQwMDhDOTAzLCAweDZEMDM0MDAwLCAweEUwNDA2MTAzLAorMHhFMDQ0MEZENiwgMHhEMjE3RUVGRiwgMHg2RUVDMEZGNiwgMHgwRjI2RTA1OCwKKzB4NjBFMzQyMEIsIDB4NDIyMTYyNTMsIDB4NDIyMTQyMjEsIDB4NjYyMzQyMjEsCisweDMyNkM0MjAwLCAweDQ1MjE0MjAwLCAweEUwNDg2NzA3LCAweDBGNzY0NTIxLAorMHhDOTAzNjA1MywgMHg0MDA4NUNGQiwgMHg3QzA2MzBGQywgMHg2RTAzNkQyRCwKKzB4MUZENTFGQzYsIDB4MUYwNEEwMkUsIDB4MDAxMTdEMDAsIDB4MDAyMDI5MDQsCisweDAwMjAwREE2LCAweDAwMTE3RDA0LCAweDAwMTE3RDg0LCAweDAwMjAwNzAwLAorMHgwMDIwMDc0QywgMHgwMDIwMUZENCwgMHgwRkQ2RTA0QywgMHgwNUZFRTA0NCwKKzB4NjREM0IxODksIDB4NjRFMkUwNDgsIDB4RTA0MDA2RkUsIDB4MkU0MjI0NjksCisweDAxRkU2N0M0LCAweDY2N0NFMDU4LCAweDQyMEIwMkZFLCAweDI0MEI2MDYzLAorMHgwNUZFRTA0NCwgMHhCMTVEMkU0MiwgMHhFMDUwNjREMywgMHg3RDAxMDFGRCwKKzB4MEYxNTcxMDEsIDB4MDJGREUwNTAsIDB4MzI2MkU2MDYsIDB4NTZGQjhCREMsCisweDU1RkI2MjYxLCAweDg1NTE0MjAwLCAweDMwMkM3NTBDLCAweDYxMDM3MDFCLAorMHg2NEYzRTYwMCwgMHhFNzA0QTAwNCwgMHg3NjAxNjI1NiwgMHg3NDA0MjQyMiwKKzB4MzI3MzYyNkQsIDB4NjVGMzhCRjgsIDB4NjQxREIxM0MsIDB4QjBEMjU2RkIsCisweEEwQUE2NDYxLCAweEQ0ODgwMDA5LCAweEUyMDFENTg4LCAweDJEMjA0NTBCLAorMHgwMDA5QTBBMywgMHg4QjA3ODgyOSwgMHhFMjAwREU4NSwgMHg2NkUyMkQyMCwKKzB4NjQ2REIwQTEsIDB4MDAwOUEwOTksIDB4NjIyQ0UyODEsIDB4OEIzRDMwMjAsCisweEQ2ODBFNzM4LCAweEUwNDQyRDcwLCAweEUwNDgwQzZFLCAweDZFNjIxREMxLAorMHg1MTYxMURFMiwgMHg1NDYyMUQxMywgMHg1NTY1MUQ0NCwgMHg1NzYzMUQ1NSwKKzB4NUM2NjFENzYsIDB4MEU2RTFEQzcsIDB4MURFOEUwNDAsIDB4RTA1MDAxNkUsCisweDU0NjQxRDE5LCAweDA1NkUxRDRBLCAweDFENUJFMDRDLCAweEUwNTQwNzZFLAorMHgwQzZFMUQ3QywgMHgxRENERTA1OCwgMHhFMDQ0MDI2RSwgMHhFRDAwMUQyRSwKKzB4RTA0ODA2RDYsIDB4MTZEMTI2RDIsIDB4MTZENTE2RDIsIDB4MTZENjE2RDMsCisweEUwNDAwNkQ2LCAweEUwNTAwNkQ2LCAweDA2RDYxNkQ0LCAweDA2RDZFMDRDLAorMHgwNkQ2RTA1NCwgMHgwNkQ2RTA1OCwgMHgxRjI5QTA1NywgMHg2MjJDRTI4MiwKKzB4ODkzMTMwMjAsIDB4MDVGQ0UwMjAsIDB4NjI1Q0U2ODMsIDB4MzI2MDY2NkMsCisweEQ2NUQ4QjA3LCAweDI2NTBFNTAwLCAweDUyNjE3NjgwLCAweEEwNDRENjVCLAorMHhFNjkwMjYyMiwgMHgzMjYwNjY2QywgMHhEMjU3OEIxNiwgMHhFNTAwRDY1OCwKKzB4NjA2MjIyNTAsIDB4Q0IyMEQyNTcsIDB4RTYwNTI2MDIsIDB4RDY1NjIyNjIsCisweDIyNTI0NjBCLCAweDQyMEJEMjU1LCAweEQyNTUwMDA5LCAweDIyNjJFNjAxLAorMHg0NjE4RDI1NCwgMHgyMjYyQTAyOSwgMHhEMjU0RDQ1MywgMHhENDU0NjU0MiwKKzB4MDAwOTQyMEIsIDB4MDAwOUEwMjEsIDB4RTUyNEQ2NDcsIDB4RDU0NTI2NTAsCisweDE2MjE1MjU3LCAweDE2MjI1MjU4LCAweDE2MjM1MjU5LCAweDE2MjQ1MjVBLAorMHgxNjI1NTI1QiwgMHgxNjI2NTI1QywgMHgxNjI3NTI1RCwgMHgxNjI4NTI1RSwKKzB4MUYyOTUyNUYsIDB4RTIwMDE2MjksIDB4MTUyODE1MjcsIDB4MTUyQTE1MjksCisweDE1MkMxNTJCLCAweDE1MkUxNTJELCAweDdGNUMxNTJGLCAweDZFRjY0RjI2LAorMHgwMDBCNkRGNiwgMHg0RjIyNkNGNiwgMHhFMjQwNjE0RCwgMHg4OTE3MzEyMywKKzB4MzEyN0UyMUYsIDB4RDQzQjg5MDgsIDB4RTAwMUQ1M0IsIDB4NjY0MjQ1MEIsCisweDI2Nzk2NzA3LCAweDI0NjJBMDBDLCAweDMxMjdFMjNGLCAweEQ3MzU4OTA4LAorMHg3MUUwRDYzNSwgMHg0NjBCRTAwMSwgMHg2MjA3NTU3MSwgMHgxNzUxMjUyOSwKKzB4MDAwQjRGMjYsIDB4NEYyMjAwMDksIDB4RTI0MDYxNEQsIDB4ODkxNTMxMjMsCisweDMxMjdFMjFGLCAweEQ0MkI4OTA3LCAweDY2NDJEMjJCLCAweEUwMDE0MjBCLAorMHhBMDBCMjYwQiwgMHhFMjNGMjQ2MiwgMHg4OTA3MzEyNywgMHhENjI2RDcyNSwKKzB4NzFFMDU1NzEsIDB4RTAwMTQ2MEIsIDB4MTc1MTI1MEIsIDB4MDAwQjRGMjYsCisweEU2NDAwMDA5LCAweDQ2Mjg0NjE4LCAweDYyNTJENTIwLCAweDg5RkMyMjY4LAorMHgwMDA5MDAwQiwgMHg0NjE4RTY4MCwgMHhENTFDNDYyOCwgMHgyMjY4NjI1MiwKKzB4MDAwQjg5RkMsIDB4QTAwMTAwMDksIDB4NzIwMUUyMDAsIDB4OEJGQzMyNDIsCisweDAwMDkwMDBCLCAweDQ2MThFNjgwLCAweEQ1MTU0NjI4LCAweDIyNjg2MjUyLAorMHgwMDBCOEJGQywgMHgwMDAwMDAwOSwgMHgwMDIwMjkwOCwgMHgwMDIwMERBNiwKKzB4MDAxMTdEMDQsIDB4MDAyMDI3RjgsIDB4MDAxMTdEODAsIDB4MDAyMDI4OEMsCisweDAwMUMzNTAwLCAweDAwMUQ0MDA0LCAweDAwMjAwRUEyLCAweDAwMjAwOTQwLAorMHgwMDFFMjEyQywgMHgwMDFDM0QyOCwgMHgwMDExN0QwMCwgMHgwMDIwMEUwNiwKKzB4MDAyMDI5MjAsIDB4MDAxQzM3MDQsIDB4MDAyMDFGRDQsIDB4MDAxQzM3M0MsCisweDAwMUMzNzAwLCAweDRGMjIyRkU2LCAweDZFNTM3RkZDLCAweDJGNDJCRkNBLAorMHhENjE1NjFFMiwgMHgxNjE1RTI4MCwgMHg0MjE4NTRFMSwgMHg1NUUyMTY0NiwKKzB4MTY1NzQyMjgsIDB4NkVGMjU3RTMsIDB4MkUyQjE2NzgsIDB4N0YwNDI2RTIsCisweEFGQTc0RjI2LCAweDJGQzY2RUY2LCAweDJGRTYyRkQ2LCAweEREMEE0RjIyLAorMHhCRkFGNkM1MywgMHhCRjk0NkU0MywgMHhCRkFCMkRFMiwgMHg1MUQ1MDAwOSwKKzB4NTRENjJDMTIsIDB4NTVENzFDNDEsIDB4NTZEODFDNTIsIDB4NEYyNjFDNjMsCisweDZERjY2RUY2LCAweDZDRjYwMDBCLCAweDAwMUMzNzBDLCAweDAwMDlBMEMwLAorMHhEMTdCNEYyMiwgMHhENDdCOTJCNiwgMHgyMTIyQjAwRCwgMHg5N0IyRTYwNSwKKzB4QjAyMjk1QjIsIDB4QjAzNjY0NjMsIDB4QjAzNjAwMDksIDB4QjAzOTAwMDksCisweEEwNjgwMDA5LCAweDRGMTI0RjI2LCAweEQxNzM0RjAyLCAweDk0QTQzMTQ1LAorMHg0NjA5MDYwQSwgMHg0NjA5NDYwOSwgMHgwMDI5MzY0NiwgMHhENzZDRDU2RiwKKzB4MjUwMENBMDEsIDB4NEYwNjI3NjIsIDB4NEYxNjAwMEIsIDB4QkZFQTRGMjIsCisweEIwMUYwMDA5LCAweEEwNEUwMDA5LCAweDJGRTY0RjI2LCAweDZFNjNEMTY4LAorMHg0NDE4NjYxMiwgMHg0NTI4OTI4QSwgMHgyNjI5NDQwOCwgMHg0NDA4NDUwMCwKKzB4NDQwMDI2NUIsIDB4NDcwODI2NEIsIDB4NDcwODIxNjIsIDB4MjdFQkQxNjEsCisweDAwMEIyMTcyLCAweDAwMEI2RUY2LCAweEQyNUYwMDA5LCAweEU0MEE5Njc3LAorMHgyMjYyQUZCNCwgMHgyRkM2MkZCNiwgMHgyRkU2MkZENiwgMHhEQzVCNEYyMiwKKzB4MkMyMkUyMDEsIDB4QkZBOUU0MEEsIDB4NjBDMjdDNDQsIDB4Q0IwMUVEMDAsCisweDYwQzIyQzAyLCAweEM5MDFFQjY0LCAweDZFMDNBMDA4LCAweDg5MDczREIyLAorMHhFNDAxNjBDMiwgMHhCRjk5QzkwMSwgMHg3RDAxNkUwMywgMHg4QkY1MkVFOCwKKzB4OEIwMzNEQjIsIDB4RDI0RkQ0NEUsIDB4MDAwOTQyMEIsIDB4NEYyNkU0MEEsCisweDZERjY2RUY2LCAweEFGODk2Q0Y2LCAweDQ0MTE2QkY2LCAweDYwNEI4RjAxLAorMHgwMDBCNjA0MywgMHgyRkI2MDAwOSwgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwKKzB4REM0NTdGRkMsIDB4NjBDMkVEMDAsIDB4Q0IwMkVCNjQsIDB4NjBDMjJDMDIsCisweEM5MDIyRjAyLCAweDZFMDNBMDA5LCAweDg5MDgzREIzLCAweEU0NjQ2MEMyLAorMHhDOTAyMkYwMiwgMHg2RTAzQkY2QSwgMHgyRUU4N0QwMSwgMHhENzNCOEJGNCwKKzB4NjE3MjUxQzEsIDB4REUzQkRDM0EsIDB4RDIzQ0QxM0IsIDB4NjRDMjNEQjMsCisweDY1MTI2NEUyLCAweDY1MjI4RjA5LCAweEQyMzJENDM5LCAweDRGMjY3RjA0LAorMHg2REY2NkVGNiwgMHg0MjJCNkNGNiwgMHg3RjA0NkJGNiwgMHg2RUY2NEYyNiwKKzB4NkNGNjZERjYsIDB4NkJGNjAwMEIsIDB4NTY1MUQ1MzIsIDB4NDYyODYwNTIsCisweDMwNkMwMDBCLCAweDUyODgwOTZDLCAweDA5QjQ1QkI0LCAweDAzQzQxRkZGLAorMHgyRkM2MkZCNiwgMHgyRkU2MkZENiwgMHg0RjEyNEYyMiwgMHhCRkVCNEYwMiwKKzB4NkIwMzZFNDMsIDB4REQxOERDMjgsIDB4MDAwOUJGRTYsIDB4M0MwNTMwQjgsCisweDQ2MDkwNjBBLCAweDQ2MDE0NjA5LCAweDAyMEEzRDY1LCAweDQyMDk0MjA5LAorMHgzMkUyNDIwOSwgMHg0RjA2OEJGMCwgMHg0RjI2NEYxNiwgMHg2REY2NkVGNiwKKzB4MDAwQjZDRjYsIDB4MkZFNjZCRjYsIDB4REUxQzRGMjIsIDB4RTUwMEUxMDIsCisweDJFMTJFNDAzLCAweDJFNTJCRkQ0LCAweDQ2MThFNjA2LCAweEU0MDNFNzAwLAorMHgyRTcyMkU2MiwgMHhBRkNCNEYyNiwgMHgwMDBCNkVGNiwgMHgwMDAwMDAwOSwKKzB4MDAyMDI4OTAsIDB4MDAyNENERTAsIDB4MTA2MjRERDMsIDB4MDAyMDJBOEMsCisweDAwMUM1ODE0LCAweDAwMUM1OUQwLCAweDAwMUM1ODA0LCAweDAwMUM1ODFDLAorMHgwMDIwMjkzNCwgMHgwMDIwMERBNiwgMHgwMDFDNTg2MCwgMHgwMDFDNjg2NCwKKzB4MDAxQzc4NjQsIDB4MDAxQzU5QkMsIDB4MDAxQzY5QkMsIDB4MDAxQzc5QkMsCisweDAwMjAyOTRDLCAweDAwMUMxMDQwLCAweENDQ0NDQ0NELCAweDAwMUQ0MDA0LAorMHgyRjk2MkY4NiwgMHgyRkI2MkZBNiwgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwKKzB4RTQwMDdGRTQsIDB4NDUyOEU1MTAsIDB4Njc0MzZDNDMsIDB4RTEwN0EwMEYsCisweDYwNDM2NDRELCAweDBGNTY0MDA4LCAweEVFMDA2MEMzLCAweDgxNTEyNUMxLAorMHg4MTUzODE1MiwgMHgxNTczMTVFMiwgMHg3NTE0MTVFNCwgMHg2MjRENzQwMSwKKzB4OEJFRDMyMTMsIDB4REE2RjUxRjEsIDB4MUExMTU0RjIsIDB4RDE2RTJBMTIsCisweDU3RjQ1NUYzLCAweDZERjI1OEY1LCAweDExNDFEOTZDLCAweDExNTMyMTQyLAorMHgxMTc1MTE1MiwgMHgxMTg3MTE3NCwgMHg1MkY2MTE4NiwgMHgxOUQxRDY2OCwKKzB4RDg2ODI5RDIsIDB4REE2OEU5NTAsIDB4MTYyMUVCQjQsIDB4NkJCQzI2MjIsCisweEEwMjE0OTA4LCAweDZFRURFRTAwLCAweDYxRTM2REUzLCAweDQxMDg0RDA4LAorMHgzMUVDM0RFQywgMHg0MTA4NEQwOCwgMHg2MEMzM0Q4QywgMHhFNzkwNDEwOCwKKzB4ODFEMTJEQzEsIDB4NDEwODYwOTMsIDB4ODFEMjY3N0MsIDB4MzFBQzYwQzMsCisweDM0NzJFMjAwLCAweDFERDI4MUQzLCAweEQ0NTUxRDEzLCAweDFEMjQ4RDAxLAorMHhCMDNBRDQ1MCwgMHg3RTAxNjVEMywgMHgzNEIyNjRFRCwgMHhEMTREOEJEQiwKKzB4NjUxMkRCNTIsIDB4NDUyOUQyNEQsIDB4NjQxMjFCNTEsIDB4Njc0REQxNEEsCisweDY3MjIyQjcyLCAweDQ3MjlENjRFLCAweDY5MjIxQjczLCAweDY4OUQyRkQyLAorMHg2OTEyMUI4MiwgMHg1QTEyMjY5MiwgMHg1QjE0MTZBMiwgMHgxNkI0REE0NCwKKzB4MTZDNjVDMTYsIDB4MTZFQTZFQTIsIDB4NEYyNjdGMUMsIDB4NkRGNjZFRjYsCisweDZCRjY2Q0Y2LCAweDY5RjY2QUY2LCAweDY4RjYwMDBCLCAweDYwNjE2NjQyLAorMHg4RDA0QzgwMywgMHg2MDYxRTUwMCwgMHg4ODAyQzkwMywgMHg1MjYyOEIwMywKKzB4NTEyNDY1NjMsIDB4MDAwQjI0MTIsIDB4MkZENjYwNTMsIDB4NEYyMjJGRTYsCisweDZFNTM3RkVDLCAweEU1NTA2MjUzLCAweEU0MDA2RDQzLCAweEEwMDE0NTA4LAorMHg1MjI0RTEwMSwgMHgyMjExNjA0MywgMHg4MTIzODEyMSwgMHg4MTIyNjA1MywKKzB4MzYyMDU2RTIsIDB4RDIyRjhCRjUsIDB4NjRGMzE2RTQsIDB4NDIwQkU2MTQsCisweDY1RTE2NUUzLCAweDI1NDlFNEZDLCAweDYxRjEyRTUxLCAweDIxNDk2NUYzLAorMHg1NEQxMkYxMSwgMHg0MTBCRDEyNywgMHg1N0QxRTYxNCwgMHhDQjAxNjA3MSwKKzB4MURFMTI3MDEsIDB4NEYyNjdGMTQsIDB4MDAwQjZFRjYsIDB4MkZENjZERjYsCisweDRGMjIyRkU2LCAweDZFNTM3RkVDLCAweEU1RkM2NjUzLCAweDYwNjE2RDQzLAorMHhDQjAxMjA1OSwgMHg1MkUyMjYwMSwgMHg4QjA2MzI2MCwgMHg1MUUyMTJFNCwKKzB4OEIwNDMxRTAsIDB4QTAwMjUyRDEsIDB4QUZGMDFFMjIsIDB4RDIxNTU2NjQsCisweEU2MTQ2NEYzLCAweDY1RTM0MjBCLCAweEUxRkM2N0UxLCAweDJFNzEyNzE5LAorMHg1NEQxNjdGMSwgMHhEMTBGMjcxOSwgMHhFNjE0NjVGMywgMHgyRjcxNDEwQiwKKzB4NjAyMTUyRDEsIDB4MjIwMUNCMDEsIDB4N0YxNDFERTEsIDB4NkVGNjRGMjYsCisweDZERjYwMDBCLCAweDAwMjAyODVDLCAweDAwMjAyODY0LCAweDAwMjAyODU0LAorMHgwMDIwMjg4NCwgMHgwMDEwMDA4QywgMHgwMDEwMEVDMCwgMHgwMDFFMjEwOCwKKzB4MDAxQzNEMDAsIDB4MDAyMDIxMzQsIDB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsCisweEQ2MzE0RjIyLCAweDYwRDM2RDYyLCAweDg5NERDODAzLCAweERCMzBEQzJGLAorMHgwMDA5QTAyQywgMHhDOTAzNjA2MSwgMHg4OTJCODgwMSwgMHhEMjJERDQyQiwKKzB4MDAwOTQyMEIsIDB4NjUwMzU2MDMsIDB4QzgyMDg1NjEsIDB4RTA1MDg5MDMsCisweDcyMDEwMkJFLCAweDg1NjIwQjI2LCAweDQwMDA2MDBELCAweDQwMDAzNjZBLAorMHg0MDAwNDYyNCwgMHgyMDZENDYyNCwgMHhENDIzQzkwMywgMHg0MDA4NkUwMywKKzB4RDEyMjQwMDAsIDB4MzQwQzQxMEIsIDB4NjFFM0Q1MjEsIDB4RDcyMUUwMDEsCisweDQ1MEJEMjIxLCAweDY0RTM3RTMwLCAweDI3MDI0MjBCLCAweDY2QzI1MkMxLAorMHg4QkNGMzYyMCwgMHg0RTE4RUUwMSwgMHhBMDExREIxQywgMHg2MDYxRUM3NSwKKzB4ODgwMUM5MDMsIDB4RDQxOTg5MTAsIDB4NDYwQkQ2MTIsIDB4RDQxODAwMDksCisweDQ3MEJENzE4LCAweEQyMTM2NTAzLCAweDY0QzNEMTEzLCAweDIyRTI0MTBCLAorMHg2NkIyNTJCMSwgMHg4QkVBMzYyMCwgMHhDODA0NjBEMywgMHhEMjEyODkwNiwKKzB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkJGNjQyMkIsIDB4NkVGNjRGMjYsCisweDZDRjY2REY2LCAweDZCRjYwMDBCLCAweDAwMUUyMTAwLCAweDAwMjAyODVDLAorMHgwMDIwMjdGOCwgMHgwMDIwMEE1QywgMHgwMDIwMjg2NCwgMHgwMDIwMEFERSwKKzB4MDAyMDFGRDQsIDB4MDAxQzNEMzAsIDB4MDAyMDBENkMsIDB4MDAyMDI4NTQsCisweDAwMjAyODg0LCAweDAwMjAwQTdBLCAweDAwMjAwMEY4LCAweEU2MDFEMjM3LAorMHgxMjY1RDUzNywgMHgwMDBCMjI1MiwgMHhENjM2MTI2NiwgMHg4ODAxNjA2MiwKKzB4RTEwMThCNjIsIDB4RDUzNDI2MTIsIDB4NTQ1MUQxMzQsIDB4RTA0MDYyMTIsCisweDIxMjIzMjRDLCAweDU0MTE1NzUyLCAweDExNDEzNDdDLCAweDU3MTI1NDUzLAorMHgxMTcyMzc0QywgMHg1MjEzNTc1NSwgMHgxMTIzMzI3QywgMHg1NjE0NjQ1MiwKKzB4MTE2NDM2NEMsIDB4NTQxNTU3NTQsIDB4MTE0NTM0N0MsIDB4NTYxNjU0NTgsCisweDExNjYzNjRDLCAweDY3NjJENjI2LCAweDMyN0M1MjE3LCAweDU3NjExMTI3LAorMHgzMjdDNTIxOCwgMHg1NzYyMTEyOCwgMHgzMjdDNTIxOSwgMHg1NzYzMTEyOSwKKzB4MzQ3QzU0MUEsIDB4NTc2NDExNEEsIDB4MzQ3QzU0MUIsIDB4NTc2NTExNEIsCisweDM0N0M1NDFDLCAweDUyNjYxMTRDLCAweDM3MkM1NzFELCAweDUyNjcxMTdELAorMHgzNDJDNTQxRSwgMHg1MjY4MTE0RSwgMHgzNjJDNTYxRiwgMHhENjE1MTE2RiwKKzB4MDQxRTYyNjIsIDB4MzQyQzc2OTQsIDB4RTA0NDAxNDYsIDB4MDYxRTYyNjIsCisweDAxNjYzNjJDLCAweDUyNUNFMDQ4LCAweEQ2MEYwNTFFLCAweDAxNTYzNTJDLAorMHhFMDU0NjI2MiwgMHg0MjI5MDUxRSwgMHgwMTU2MzUyQywgMHhFMDU4NTU2MSwKKzB4NDUyOTA2MUUsIDB4MDE2NjM2NUMsIDB4MDAwOTAwMEIsIDB4MDAxQzEwMTAsCisweDAwMDBDMzRGLCAweDAwMUMxMDI4LCAweDAwMUMzNjlDLCAweDAwMjAyN0Y4LAorMHgwMDFDM0NBMCwgMHgwMDFDMzZGNCwgMHgwMDFDM0I4OCwgMHhENjJGN0ZGQywKKzB4MjY0MjY0NEMsIDB4QzgyMDUwNjYsIDB4MkYwMjhERkMsIDB4N0YwNDAwMEIsCisweDJGRDYyRkM2LCAweDRGMjIyRkU2LCAweDZENDM2QzUzLCAweEVFMDBBMDA0LAorMHg3RTAxNjRENCwgMHg2NDRDQkZFQSwgMHg4QkY5M0VDMiwgMHg2RUY2NEYyNiwKKzB4MDAwQjZERjYsIDB4QTAwMTZDRjYsIDB4NzYwMTY2NDMsIDB4MjIyODYyNjAsCisweDM2NDg4QkZCLCAweDY1NjNBRkU0LCAweDJGQjYyRjk2LCAweDJGRDYyRkM2LAorMHg0RjIyMkZFNiwgMHhFQzFDRUQwOCwgMHhEQjE5NkU1MywgMHg2MUMzRTkwQSwKKzB4NjA0MzRCMEIsIDB4MzA5MkM5MEYsIDB4NjYwMzhEMDIsIDB4NzYzMEEwMDEsCisweDREMTA3NjM3LCAweDdFMDEyRTYwLCAweDdDRkM4RkYxLCAweDgwNThFMDAwLAorMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwgMHgwMDBCNkJGNiwgMHgwMDBCNjlGNiwKKzB4MDAwQkUwMDAsIDB4MkZFNkUwMDAsIDB4N0ZFQzRGMjIsIDB4NkU0MzYyNTMsCisweEJGRDE2NUYzLCAweEJGQzY2NDIzLCAweEJGQzQ2NEUzLCAweEQ0MDU2NEYzLAorMHgwMDA5QkZDMSwgMHg0RjI2N0YxNCwgMHg2RUY2MDAwQiwgMHgwMDFDMDAwNCwKKzB4MDAyMDIwOTQsIDB4MDAyMDI5NjgsIDB4RTExMEQ1OUMsIDB4RTY0MDYwNTAsCisweDI1MDBDOUZELCAweEUwRkY3NUU5LCAweDgwNTE2NDUzLCAweDgwNTM4MDUyLAorMHg4MDU2ODA1NSwgMHgyNTEwNzVFRiwgMHhFMUVGNjI1MCwgMHgyMjE5RTAwMSwKKzB4RTcyMDI1MjAsIDB4MjQ2MDgwNTIsIDB4MjU3MDAwMEIsIDB4RTRGREQ1OTAsCisweEU3MDI2MTUyLCAweDI1MTIyMTQ5LCAweDc0MDE2MDUyLCAweDI1MDJDQjAxLAorMHhEMThDNjY1MiwgMHgyNTYyMjY0OSwgMHg5MkMyNjAxMiwgMHgyMTAyQ0IwOCwKKzB4QzlDRjYwMTIsIDB4NjAxMjIxMDIsIDB4MjEwMkNCMDMsIDB4MDAwQjExNzIsCisweDRGMjIxMTIzLCAweEUxMDBENDg0LCAweEQyODVENzg0LCAweEQ1ODUyNDEwLAorMHgyNzExRDQ4NSwgMHgyMjExRTcwMCwgMHhCRkJEMjUxMSwgMHhENTgzMjQ3MSwKKzB4MjU2MEU2MDAsIDB4NEYyNkFGRDIsIDB4RDI4MTY2NEMsIDB4MzYyQzQ2MDAsCisweENCMTA2MDYwLCAweDI2MDAwMDBCLCAweEQyN0Q2NTRDLCAweDM1MkM0NTAwLAorMHhFMUVGNjY1MCwgMHgwMDBCMjYxOSwgMHg2NjRDMjU2MCwgMHg0NjAwRDI3OSwKKzB4NjA2MDM2MkMsIDB4MDAwQkNCMTAsIDB4NjU0QzI2MDAsIDB4NDUwMEQyNzUsCisweDY2NTAzNTJDLCAweDI2MTlFMUVGLCAweDI1NjAwMDBCLCAweEQyNzA2NjRDLAorMHgzNjJDNDYwMCwgMHhDQjA4NjA2MCwgMHgyNjAwMDAwQiwgMHhEMjZDNjU0QywKKzB4MzUyQzQ1MDAsIDB4RTFGNzY2NTAsIDB4MDAwQjI2MTksIDB4NjY0QzI1NjAsCisweDQ2MDBEMjY4LCAweDYwNjAzNjJDLCAweDAwMEJDQjA4LCAweDY1NEMyNjAwLAorMHg0NTAwRDI2NCwgMHg2NjUwMzUyQywgMHgyNjE5RTFGNywgMHgyNTYwMDAwQiwKKzB4RDY1RjYyNEMsIDB4MzI2QzQyMDAsIDB4QzkwODYwMjAsIDB4NDAyMTQwMjEsCisweDAwMEI0MDIxLCAweDYyNEM2MDBDLCAweDQyMDBENjVBLCAweDYwMjAzMjZDLAorMHg0MDIxQzkwOCwgMHg0MDIxNDAyMSwgMHg2MDBDMDAwQiwgMHhEMTU2NjQ0QywKKzB4MzQxQzc0RkYsIDB4MDAwQjYyNDAsIDB4RDE1NDYwMkMsIDB4MzQxQzY0NEMsCisweDAwMEI2MjQwLCAweDJGRTY2MDJDLCAweDY1NUM0RjIyLCAweDM1NjdFNjBBLAorMHg2RTQzOEQxNSwgMHg2NDUzQkZFQSwgMHg2MEVDNjQwQywgMHg4QjAyODgwMSwKKzB4QTAwMkUwMEYsIDB4NDQwOTI0MDksIDB4NjI0QzQ0MDksIDB4MzI2M0U2MEEsCisweEJGRTI4OTA1LCAweDYyMEM2NDRDLCAweEM4ODA2MDIzLCAweEUyMDA4QjAwLAorMHg0RjI2NjAyMywgMHg2RUY2MDAwQiwgMHhENjQxNEYyMiwgMHg4ODAxNjA2MiwKKzB4QjIyMjhCMDMsIDB4QTAwMzAwMDksIDB4RDIzRTAwMDksIDB4MjI2MEU2NDAsCisweEUyMDBENjNELCAweDAwMEI0RjI2LCAweDRGMjIyNjIyLCAweDYwNjJENjM4LAorMHg4QjAxODgwMiwgMHgwMDA5QjI2QywgMHhFMjAwRDYzNywgMHgwMDBCNEYyNiwKKzB4MEZGRjI2MjIsIDB4RDQzM0Q1MzIsIDB4RTcwMUUxMDAsIDB4MDAwQjI1MTIsCisweEQyMzAyNDcwLCAweDAwMEJFNjA0LCAweEQ1MjAyMjYwLCAweDYxNTBFNEZELAorMHgyMTQ5RDYyRSwgMHgyNTEwRTcwMCwgMHgyNjcwMDAwQiwgMHhFNEZCRDUxQiwKKzB4MjI0OTYyNTAsIDB4MjUyMDAwMEIsIDB4RTRGN0Q1MTgsIDB4MjI0OTYyNTAsCisweDI1MjAwMDBCLCAweEQyMjY0RjIyLCAweDYwMEQ4NTIyLCAweDg5MTEyMDA4LAorMHg4OTEzODgwMSwgMHg4OTE1ODgwMywgMHg4OTE3ODgwNSwgMHg4OTQxODgwNiwKKzB4ODk0Nzg4MDgsIDB4ODk0RDg4MDksIDB4ODk1Mzg4MEEsIDB4ODk1OTg4MEIsCisweDAwMDlBMDYwLCAweDAwMDlCMDYyLCAweDYwMENBMDVELCAweDAwMDlCMDcwLAorMHg2MDBDQTA1OSwgMHgwMDA5QjA3QSwgMHg2MDBDQTA1NSwgMHg2MjYwRDYwNiwKKzB4OEI0RjIyMjgsIDB4MDAwOUIwODYsIDB4NjAwQ0EwNEQsIDB4MDAxRTEwMjgsCisweDAwMUUyMTQ4LCAweDAwMUUxMTA4LCAweDAwMjAyOEQ5LCAweDAwMjAyOEM4LAorMHgwMDIwMjhDQSwgMHgwMDIwMjhDQywgMHgwMDIwMjhBQywgMHgwMDFFMTAwOCwKKzB4MDAxRTEwM0YsIDB4MDAxRTEwNUYsIDB4MDAxRTEwMzAsIDB4MDAxRTEwOTAsCisweDAwMjAyOEQ0LCAweDAwMUUxMDBCLCAweDAwMjAyOEQwLCAweDAwMjAyOEQ4LAorMHgwMDIwMjhBMCwgMHg2MjYwRDY4NywgMHg4QjIzMjIyOCwgMHgwMDA5QjA2QSwKKzB4NjAwQ0EwMjEsIDB4NjI2MEQ2ODMsIDB4OEIxQjIyMjgsIDB4MDAwOUIwQjQsCisweDYwMENBMDE5LCAweDYyNjBENjdGLCAweDhCMTMyMjI4LCAweDAwMDlCMEJBLAorMHg2MDBDQTAxMSwgMHg2MjYwRDY3QiwgMHg4QjBCMjIyOCwgMHgwMDA5QjExRSwKKzB4NjAwQ0EwMDksIDB4NjI2MEQ2NzcsIDB4OEIwMzIyMjgsIDB4MDAwOUIxMzYsCisweDYwMENBMDAxLCAweDRGMjZFMDAwLCAweDAwMDkwMDBCLCAweEQyNzNEMTcyLAorMHhENTczODQxMiwgMHg0MDAwQzkwRiwgMHhENzcyMDEyRCwgMHg2MTFDRTQwMywKKzB4RDY3MUUyMEYsIDB4MjcxMjI1NDAsIDB4RTAwMTI1MjAsIDB4MjYwMjAwMEIsCisweEU2MDFEMjY5LCAweDMwNjY4NTIzLCAweEUwMDA4RDA2LCAweEUwMDBEMjY3LAorMHg4MTIyRDY2OSwgMHgyNjAyRTAwMSwgMHgwMDA5MDAwQiwgMHg4NTIzRDI2MiwKKzB4MjAwODYwMEQsIDB4ODgwMTg5MDUsIDB4RDY2NDhCMEEsIDB4Q0IwMTYwNjAsCisweEQ2NjEyNjAwLCAweEUxMDFENDVELCAweDI2MTJFMDAxLCAweDgxNDIwMDBCLAorMHhFMDAwMDAwQiwgMHhFNTAxRDE1OCwgMHg0NTE4ODUxMywgMHgzNDUzNjQwRCwKKzB4OEQwNTY2MDMsIDB4RDI1QUUwMDAsIDB4RTAwMUQ1NTcsIDB4MjUwMjIyNjAsCisweDAwMDkwMDBCLCAweEQxNTA0RjIyLCAweDY1MEQ4NTEzLCAweDQ0MTk2NDUzLAorMHg2NzJFNjI0OSwgMHg2MDJDMjI3RCwgMHg4OTA5ODgwMSwgMHg4OTBDODgwMiwKKzB4ODkxMDg4MDMsIDB4ODkyNjg4MDYsIDB4ODkyOTg4MDcsIDB4MDAwOUEwMzgsCisweEQ2NERENTRDLCAweEEwMjdFMjEyLCAweDYyNUMyNjUyLCAweDhCMkYyMjI4LAorMHhBMDFFRDY0QSwgMHg2MDVDNjI2MiwgMHg4OTA1MjAwOCwgMHg4OTA4ODgxMCwKKzB4ODkwQjg4MjAsIDB4MDAwOUEwMjQsIDB4RDY0M0Q0NDUsIDB4QTAxM0UyMDQsCisweEQ3NDQyNjQyLCAweEUyMENENjQwLCAweDI2NzJBMDBFLCAweEQ2M0VENTQyLAorMHhBMDA5RTIxOCwgMHhENDQxMjY1MiwgMHhFMjBBRDYzQiwgMHgyNjQyQTAwNCwKKzB4RDYzOUQyM0YsIDB4RTIyRTI2MjIsIDB4RDQzRTg1MTUsIDB4MzI3NzY3MEQsCisweDhGMDEyNDIxLCAweDI0NTE2NTAzLCAweDAwMDlCMERGLCAweEUwMDFBMDAxLAorMHg0RjI2RTAwMCwgMHgwMDA5MDAwQiwgMHhFMTAxRDYyOSwgMHgyNjEwRDQzNiwKKzB4RDcyODY1NDEsIDB4NjU1REQxMjgsIDB4RTAwMUUyMEYsIDB4MjYyMDI3NTIsCisweDIxMDIwMDBCLCAweDRGMjIyRkU2LCAweDg1MjNEMjFGLCAweDI0NDg2NDBDLAorMHhENjJEOEIwOCwgMHhFMjAwRDUyMSwgMHg4NDUxMjYyMSwgMHgyMDQ5OTQzMCwKKzB4ODA1MUEwMjYsIDB4NjBFMERFMUQsIDB4OEQwQkM4NDAsIDB4MzQyN0UyMDEsCisweEQxMjU4OTIyLCAweDQyMEJEMjI1LCAweEQ1MjUyMTQxLCAweENCMDQ2MDUyLAorMHgyNTAyQTAwQiwgMHg4OTE3MzQyNywgMHhENzIyRDIxRiwgMHgyMjQxNDcwQiwKKzB4RTVGQkQ2MUYsIDB4MjE1OTYxNjIsIDB4ODRFMTI2MTIsIDB4QjEyRENCODAsCisweDYwRTA4MEUxLCAweENCMDRENjFDLCAweDYwNjAyRTAwLCAweDI2MDBDOTNGLAorMHhFMDAxRDYwOSwgMHgyNjAyQTAwMSwgMHg0RjI2RTAwMCwgMHg2RUY2MDAwQiwKKzB4MDAwMEZGN0YsIDB4MDAyMDI4RDksIDB4MDAyMDI4QTAsIDB4MDAyMDI4QUMsCisweDAwMUUxMTAwLCAweDAwMUUxMDBDLCAweDAwMjAyOEQwLCAweDAwMUUxMDAwLAorMHgwMDFFMTAwMSwgMHgwMDIwMkE5MCwgMHgwMDIwMjhCNCwgMHgwMDIwMjhCQywKKzB4MDAyMDJBRkUsIDB4MDAyMDJCMDIsIDB4MDAyMDJCMEUsIDB4MDAyMDJCMjYsCisweDAwMjAyQjMwLCAweDAwMjAyOEI4LCAweDAwMjAyOEM2LCAweDAwMjAxQTMyLAorMHgwMDFFMTEwOCwgMHgwMDIwMUIzRSwgMHgwMDFFMTAxNSwgMHg2MDYwRDY5NiwKKzB4ODkxOUM4ODAsIDB4NjAyMUQyOTUsIDB4OEIxNTg4MDEsIDB4RTUwMUQyOTQsCisweDMwNTY4NTI0LCAweEQxOTM4OTEwLCAweEQ0OTNFMjAzLCAweDY1NDEyMTIwLAorMHg2NTVERTAwQiwgMHhENTkxMDY1NiwgMHhFNzAyRTQwRiwgMHgyNTcxMjE0MCwKKzB4RTAwMUQ3OEYsIDB4MjcwMjAwMEIsIDB4RTAwMDAwMEIsIDB4NEYyMjJGRTYsCisweDg0RTFERThDLCAweDg5MzRDODgwLCAweDg1NTRENTg1LCAweDhGMzAyMDA4LAorMHhENzg5NjEwMywgMHg2NjcyODU1MywgMHg2NTBDNjQwMywgMHg2MjBDODU2NiwKKzB4OEIyNjM1MjAsIDB4RDc4MEQ2ODUsIDB4NjQ0QzY1MUMsIDB4Mjc0MTI2NTEsCisweEM4NDA2MEUwLCAweEQyODI4OTA3LCAweDAwMDk0MjBCLCAweDYwNjJENjgxLAorMHhBMDA4Q0IwNCwgMHhEMTgwMjYwMiwgMHgwMDA5NDEwQiwgMHhFNUZCRDY3RCwKKzB4MjQ1OTY0NjIsIDB4QjBBMTI2NDIsIDB4RDU3NTAwMDksIDB4MjUyMkUyMDEsCisweEQ3N0E2MEUwLCAweDJFMDBDQjA0LCAweEM5M0Y2MDcwLCAweEEwMDEyNzAwLAorMHhFMDAwNjAyMywgMHgwMDBCNEYyNiwgMHgyRkE2NkVGNiwgMHgyRkM2MkZCNiwKKzB4MkZFNjJGRDYsIDB4RTI0MERBNjksIDB4REM2NjY2QTEsIDB4MzEyMzYxNkQsCisweDYyNjM4OTAwLCAweDZFRDM2RDJDLCAweDRFMjEzNkQ4LCAweDRFMjEyQTYxLAorMHhEQjZDRDQ2QiwgMHhFNzAwQTAwRiwgMHg3NzAxNjZCMiwgMHg3MTAyNjE2MywKKzB4NjU2MTJCMTIsIDB4NzEwMjY2MTMsIDB4NjI2MTJCMTIsIDB4NjIyRDY1NUQsCisweDMyNUM0MjI4LCAweDYyN0MyNDIyLCAweDhCRUQzMkUzLCAweEM5MDM2MEQzLAorMHg4QjEwODgwMywgMHhFRDA3NkVCMiwgMHg3MTAyNjFFMywgMHg2NzEzMkIxMiwKKzB4NjJFMTcxMDIsIDB4NjU3MTJCMTIsIDB4NjU1RDYyMkQsIDB4MzUyQzQ1MjgsCisweEEwMEMyQ0QwLCAweDg4MDIyNDUyLCAweEEwMDM4QjAxLCAweDg4MDFFMjAzLAorMHhFMjAxOEIwNSwgMHg2NkIyMkMyMCwgMHg2NzdENjc2MSwgMHhFQjBGMjQ3MiwKKzB4NkRBMTJDQjAsIDB4OEIwNTJERDgsIDB4RDQ0NUQyNEYsIDB4RTEwMUVFMDAsCisweDI0MTIyMkUyLCAweDZERjY2RUY2LCAweDZCRjY2Q0Y2LCAweDZBRjYwMDBCLAorMHgyRkU2MkZENiwgMHhFMjQwREQzRCwgMHg2MTZENjZEMSwgMHg4OTAwMzEyMywKKzB4NjcyQzYyNjMsIDB4REU0MzM2NzgsIDB4MkQ2MTc3MDMsIDB4RDY0MDQ3MjEsCisweDQ3MjE2NEUyLCAweEUxMDBBMDBFLCAweDcxMDE2NTYyLCAweDI0NTA2MjUzLAorMHg0MjE5NzQwMSwgMHg3NDAxMjQyMCwgMHgyNDUwNDUyOSwgMHg0NTE5NzQwMSwKKzB4NzQwMTI0NTAsIDB4MzI3MzYyMUMsIDB4NDIwMDhCRUUsIDB4NjREMTY2RTIsCisweDM2MkM0MjAwLCAweDhGMDYyNDQ4LCAweEREMzMyRTYyLCAweEU1MDBERTI4LAorMHgyRDUyRTcwMSwgMHg2RUY2MkU3MiwgMHg2REY2MDAwQiwgMHgyRkU2MkZENiwKKzB4RUUwMTRGMjIsIDB4RUQwQUEwMDUsIDB4NjRFM0JDQjYsIDB4NjRFM0JDQkMsCisweDYyRUM3RTAxLCAweDhCRjczMkQ3LCAweEVFMDFBMDA1LCAweDY0RTNCQ0JELAorMHg2NEUzQkNDMywgMHg2MkVDN0UwMSwgMHg4QkY3MzJENywgMHg2RUY2NEYyNiwKKzB4NkRGNjAwMEIsIDB4MkZFNjJGRDYsIDB4N0ZGQzRGMjIsIDB4NjA2MEQ2MUYsCisweDg5NzU4ODAxLCAweEUxMDFENDFFLCAweEQ3MTI4NTQ4LCAweDY1MEQyNjEwLAorMHg0NTE5NjA3MCwgMHg2NjU5REQxQiwgMHg2MUQzNjI2RSwgMHhDODQwMjYyRCwKKzB4NzQwMjcxMDIsIDB4OEQ0N0Q3MTgsIDB4RDIxODY2NkMsIDB4RTUwMURFMEEsCisweEEwMzEyRTIyLCAweDAwMDBFRTA0LCAweDAwMUUxMDAxLCAweDAwMjAyOEM2LAorMHgwMDIwMjhBMCwgMHgwMDFFMTEwMCwgMHgwMDIwMjhDQSwgMHgwMDIwMjhCOCwKKzB4MDAyMDI4RDAsIDB4MDAxRTEwMDAsIDB4MDAyMDI4QkMsIDB4MDAyMDI4QzgsCisweDAwMjAxQTMyLCAweDAwMUUxMTA4LCAweDAwMjAxQjNFLCAweDAwMUUxMDE1LAorMHgwMDFFMTAwQywgMHgwMDIwMjhCNCwgMHgwMDIwMjhENCwgMHgwMDIwMjhEOCwKKzB4MDAyMDJBOTAsIDB4MDAyMDJCMjYsIDB4MDAyMDJCMzIsIDB4MDAyMDJBQTIsCisweDc1MDE2MjQ1LCAweDcxMDIyMTIxLCAweDMyRTM2MjVDLCAweDYwNjM4QkY4LAorMHhFNjAxODFENCwgMHhFNDE3RDUzOCwgMHgzMjQzNjI2QywgMHg2MjU1ODkxRSwKKzB4MjcyMTc2MDEsIDB4NzcwMkFGRjgsIDB4REUzNUQyMzQsIDB4MkUyMkU1MDEsCisweEVFMDRBMDA0LCAweDc1MDE2MjQ1LCAweDcxMDIyMTIxLCAweDMyRTM2MjVDLAorMHg2MDYzOEJGOCwgMHhFNjAxODFENCwgMHhBMDA0RDUyRSwgMHg2MjU1RTQxNywKKzB4MjcyMTc2MDEsIDB4NjI2Qzc3MDIsIDB4OEJGODMyNDMsIDB4MkQyMTkyNEIsCisweEQ3MkFENDI5LCAweDJGMTI2MTQyLCAweDZERjI2NUYyLCAweEM5ODA2MDUzLAorMHg2MDUzMjcwMCwgMHg2MTAzQzk2MCwgMHg2MDUzODA3MSwgMHg2NUYyNkVGMiwKKzB4NEQxOUM5MDMsIDB4ODA3MjQ1MjksIDB4NDUxOTYwREMsIDB4NEUyOTgxNzIsCisweDYyRUM2MDVDLCAweDMwMkM0MDE4LCAweDZENDI4MTczLCAweDJGRDIyMTE4LAorMHg2MkYyNkVGMiwgMHg0MjE5NjZGMiwgMHg2NTZDNDYyOSwgMHg2MDJDNjZGMiwKKzB4NDAxODY0RUMsIDB4MzA0QzQ2MjksIDB4ODE3NDQ2MTksIDB4NDAxODYwNkMsCisweDhGMDczMDVDLCAweEJDQjU4MTc1LCAweDYyMEMwMDA5LCAweDg5MDgyMjI4LAorMHgwMDA5QTAwQSwgMHg4ODQwNjAxMywgMHhCMDBBOEIwMywgMHhBMDAzMDAwOSwKKzB4RDYwQjAwMDksIDB4MjYyMkUyMDIsIDB4NEYyNjdGMDQsIDB4MDAwQjZFRjYsCisweDAwMEI2REY2LCAweDA2MEEwMDA5LCAweDAwMjAyQUQyLCAweDAwMjAyQUQwLAorMHgwMDIwMjhCQywgMHgwMDIwMkFBNCwgMHgwMDFFMTAwQywgMHgwMDIwMjhBMCwKKzB4MDAyMDI4RDAsIDB4N0ZGQzRGMjIsIDB4NjYyMEQyN0UsIDB4OEQwODI2NjgsCisweEQ0N0QyRjYwLCAweDQyMEJEMjdELCAweDY0RjAwMDA5LCAweEEwOTA3RjA0LAorMHg3RjA0NEYyNiwgMHgwMDBCNEYyNiwgMHgwMDBCMDAwOSwgMHgyRkU2MDAwOSwKKzB4REU3NzRGMjIsIDB4NjBFMEQ2NzcsIDB4Q0JDMEQ0NzcsIDB4NjI2MDJFMDAsCisweEM4MDM2MDJDLCAweDQwMjE4OTA0LCAweDcwMDE0MDIxLCAweDY2MDNBMDAyLAorMHg2NjAzNDAwOSwgMHhENjcxNjE2RCwgMHhFNTAwQTAwNCwgMHg3NTAxNjI2MiwKKzB4NzQwNDI0MjIsIDB4MzIxMzYyNUQsIDB4RDE2RDhCRjgsIDB4MDAwOTQxMEIsCisweEU0MDFENjZDLCAweDg0RTIyNjQxLCAweDgwRTJDOUJGLCAweDAwMEI0RjI2LAorMHgyRkU2NkVGNiwgMHhENTY4N0ZGQywgMHg2MjUwREU2MSwgMHg2NDJDODRFMiwKKzB4Q0I0MDc0MDQsIDB4ODBFMjYxNEQsIDB4NDQyMTY0MTMsIDB4RDc2MzQ0MjEsCisweEU2MDBBMDA0LCAweDc2MDE2MjU2LCAweDI3MjIyRjIyLCAweDMyNDM2MjZELAorMHg2MDEzOEJGOCwgMHgyMDA4QzkwMywgMHg4ODAzODkxMiwgMHg4ODAyODkwNSwKKzB4ODgwMTg5MDYsIDB4QTAwODg5MDcsIDB4RTAwNzAwMDksIDB4ODA3OEEwMDUsCisweEEwMDJFMDAzLCAweEUwMDE4MDc4LCAweDYyNTI4MDc4LCAweDI3MjIyRjIyLAorMHhENjUwRTAwRiwgMHg2MDYxODA3OCwgMHg4QjAxODgwMSwgMHgyNjIxRTIwMCwKKzB4NjA2MEQ2NEYsIDB4MjYwMENCMDgsIDB4QzkzRjYwRTAsIDB4N0YwNDJFMDAsCisweDZFRjYwMDBCLCAweDYwMjFEMjQ3LCAweDhEMTg4ODAxLCAweEQyNDY2MTQzLAorMHgyMjEwNjA1MywgMHg2MDYzODAyMSwgMHhENDQ2ODEyMSwgMHhFNTAwQTAwNywKKzB4MDI3QzYwNUQsIDB4MzY0QzY2MDMsIDB4MjYyMDcwMDEsIDB4NjI1RDY1MDMsCisweDMyMTM2MTFDLCAweEQ2NDA4QkY0LCAweEM5QkY2MDYwLCAweDAwMEIyNjAwLAorMHgyRkQ2MDAwOSwgMHg0RjIyMkZFNiwgMHg2MDQzN0ZGQywgMHg4RDAyQzgyMCwKKzB4QkY2QTZFNDMsIDB4NjBFMzAwMDksIDB4ODkwMUM4MTAsIDB4MDAwOUJGNjcsCisweEM4NDA2MEUzLCAweEJGOEM4OTAxLCAweDYwRTMwMDA5LCAweDg5MjlDODAxLAorMHg2MEQwREQzMiwgMHg4RDAzQzgwMiwgMHhENjMxMkYwMCwgMHgwMDA5NDYwQiwKKzB4QzgwNDYwRjAsIDB4RDYyRjg5MDIsIDB4MDAwOTQ2MEIsIDB4NjAyMzYyRjAsCisweDg5MDJDODgwLCAweEM5N0Y2MEQwLCAweDYwMjMyRDAwLCAweDg5MDJDODAxLAorMHg0MjBCRDIyOSwgMHhENTI5MDAwOSwgMHg4ODAyNjA1MiwgMHhEMjI4OEIwMywKKzB4QTAwNUU2MDQsIDB4ODgwMTIyNjAsIDB4RDIyNThCMDIsIDB4MjI2MEU2MDEsCisweDI1MjJFMjAwLCAweEM4ODA2MEUzLCAweEQyMjI4OTE2LCAweDYwRTM2RTIwLAorMHg4OTAyQzgwMiwgMHg0MjBCRDIyMCwgMHg2MEUzMDAwOSwgMHg4OTAyQzgwNCwKKzB4NDIwQkQyMUUsIDB4NjBFMzAwMDksIDB4ODkwNUM4MDgsIDB4N0YwNEQyMUMsCisweDZFRjY0RjI2LCAweDZERjY0MjJCLCAweDRGMjY3RjA0LCAweDAwMEI2RUY2LAorMHgwMDAwNkRGNiwgMHgwMDFFMTAyMCwgMHgwMDIwMjk2QywgMHgwMDIwMERBNiwKKzB4MDAxRTEwMTUsIDB4MDAxRTEwQkYsIDB4MDAxMTdEMDAsIDB4MDAxRTEwRkMsCisweDAwMjAwMEY4LCAweDAwMjAyOENDLCAweDAwMTE3RDgwLCAweDAwMUUxMEY4LAorMHgwMDFFMTBBRSwgMHgwMDExN0Q4NCwgMHgwMDFFMTAxNywgMHgwMDFFMTAyMSwKKzB4MDAyMDBGRDgsIDB4MDAyMDBGRkEsIDB4MDAyMDE1ODQsIDB4MDAyMDI4RDAsCisweDAwMUUxMDBCLCAweDAwMUUxMDI4LCAweDAwMjAxMDJBLCAweDAwMjAxMDNDLAorMHgwMDIwMTA0OCwgMHhENkE4NjQ0QywgMHgzNDZDNzRGRiwgMHgyNDUwMDAwQiwKKzB4NjQ0Q0Q2QTYsIDB4MDAwQjM0NkMsIDB4RDZBNTI0NTAsIDB4MzQ2QzY0NEMsCisweDI0NTAwMDBCLCAweDYxNkQ2MjVDLCAweDQxMTk0MjA4LCAweDYwMTk0MjA4LAorMHg2NDRDNDIwMCwgMHgzMjRDNjcwRSwgMHgyMDdERDE5RSwgMHhDOTBGNDIwMCwKKzB4MDAwQjMyMUMsIDB4Njc2MzIyMDAsIDB4NDIwODYyNUMsIDB4NDIwMDQyMDgsCisweDMyNEM2NDRDLCAweDQyMDBEMTk4LCAweDAwMEIzMjFDLCAweDJGRTYyMjcwLAorMHg2MTRDNEYxMiwgMHg0MTAwRDQ5MywgMHg2NzEwMzE0QywgMHgyNzI5RTI5RiwKKzB4NjU3MzZFNTMsIDB4NDcxOTY3NkQsIDB4NjcyRTYyNzksIDB4NDIyMTIyN0QsCisweDQyMjE0MjIxLCAweDc2MDE2NjJDLCAweEU0MDE0NjA4LCAweDM0RTg0NjA4LAorMHg2NDRDNDYwMCwgMHgwRTFBMDQ2NywgMHgyMTUwMjVFQiwgMHgwMDBCNEYxNiwKKzB4NEYyMjZFRjYsIDB4RDI4NTdGRTgsIDB4ODgwMTYwMjEsIDB4RDI4NDhCN0IsCisweDI2Njg2NjIxLCAweEQyODM4Qjc3LCAweDI2Njg2NjIxLCAweEU1MEY4QjczLAorMHhFNDAxQkZBMCwgMHhCRkEzRTUwMSwgMHhFNTg2RTQwMCwgMHhFNDAwNjU1QywKKzB4MkY1MEJGQTMsIDB4QkZBMEU0MDEsIDB4RTYwMkU1MDYsIDB4NjA2MzQ2MTgsCisweDgxRjJFNDAxLCAweDY1NDNCRjlFLCAweEU0MDE4NUYyLCAweEJGQUE2NTQzLAorMHg4NUYyNjYwMywgMHg2NTQzRTQwMSwgMHg2NjAzQkZCMSwgMHhFNDAyNjVGMCwKKzB4NjA1Mzc1NkMsIDB4ODBGOEJGN0UsIDB4QkY4MUU0MDIsIDB4ODRGOEU1MTIsCisweDcwOTBFNDAyLCAweDY1MDNCRjgxLCAweDQ2MThFNjAyLCAweDgxRjY2MDYzLAorMHhCRjdGRTQwMiwgMHg4NUY2RTUwMCwgMHg2NjAzRTQwMiwgMHhFNTAwQkY4QiwKKzB4RTQwMjg1RjYsIDB4QkY5MjY2MDMsIDB4RTVGRUU1MDAsIDB4RTAxMDY1NUMsCisweEJGNUZFNDAzLCAweEU1MTMwRjU0LCAweEU0MEVCRjYyLCAweDA1RkNFMDEwLAorMHhCRjYyRTQwRSwgMHhFNTAwNzU4NSwgMHhCRjYzRTQwMywgMHhFNTAwRTY0MCwKKzB4QkY3MEU0MDMsIDB4RTUwMEU2NDAsIDB4QkY3OEU0MDMsIDB4RTVGRkU2NDAsCisweEUwMTQ2NTVDLCAweEJGNDVFNDA0LCAweEU0MEYwRjU0LCAweEU1MDRCRjQ4LAorMHgwNUZDRTAxNCwgMHhCRjQ4RTQwRiwgMHhFNTAxNzU4NCwgMHhCRjQ5RTY0MCwKKzB4RTUwMUU0MDQsIDB4QkY1NkU2NDAsIDB4RTUwMUU0MDQsIDB4RTQwNEU2NDAsCisweEFGNUM3RjE4LCAweDdGMTg0RjI2LCAweDAwMEI0RjI2LCAweDRGMjIwMDA5LAorMHhEMjQyN0ZGMCwgMHg4ODAxNjAyMSwgMHhEMjQxOEI3MSwgMHgyNjY4NjYyMSwKKzB4RDI0MDhCNkQsIDB4MjY2ODY2MjEsIDB4RTUwRjhCNjksIDB4RTQwMUJGMUEsCisweEJGMURFNTAxLCAweEU1ODZFNDAwLCAweEU0MDA2NTVDLCAweDJGNTBCRjFELAorMHhCRjFBRTQwMSwgMHhFNDAxRTUwNiwgMHhCRjFCNjU0MywgMHhFNDAxRTY0MCwKKzB4QkYyODY1NDMsIDB4RTQwMUU2NDAsIDB4QkYzMDY1NDMsIDB4NjVGMEU2NDAsCisweDc1NkNFNDAyLCAweEJFRkQ2MDUzLCAweEU0MDI4MEY0LCAweEU1MTJCRjAwLAorMHhFNDAyODRGNCwgMHhCRjAwNzA5MCwgMHhFNjQwNjUwMywgMHhCRjAxRTQwMiwKKzB4RTY0MEU1MDAsIDB4QkYwRUU0MDIsIDB4RTY0MEU1MDAsIDB4QkYxNkU0MDIsCisweEU1RkVFNTAwLCAweDYwNTM2NTVDLCAweEJFRTNFNDAzLCAweEU1MTM4MEY4LAorMHhFNDBFQkVFNiwgMHhFNDBFODRGOCwgMHhCRUU2NzA4NSwgMHhFNTAwNjUwMywKKzB4QkVFN0U2NDAsIDB4RTUwMEU0MDMsIDB4QkVGNEU2NDAsIDB4RTUwMEU0MDMsCisweEJFRkNFNjQwLCAweEU1RkZFNDAzLCAweDYwNTM2NTVDLCAweEJFQzlFNDA0LAorMHhFNDBGODBGQywgMHhFNTA0QkVDQywgMHhFNDBGODRGQywgMHhCRUNDNzA4MywKKzB4RTUwMTY1MDMsIDB4QkVDREU2NDAsIDB4RTUwMUU0MDQsIDB4QkVEQUU2NDAsCisweEU1MDFFNDA0LCAweEU0MDRFNjQwLCAweEFFRTA3RjEwLCAweDdGMTA0RjI2LAorMHgwMDBCNEYyNiwgMHgwMDAwMDAwOSwgMHgwMDFFMTAzMCwgMHgwMDFFMTA4MCwKKzB4MDAxRTEwOTAsIDB4MDAxRTEwM0YsIDB4MDAxRTEwM0UsIDB4MDAyMDI4QzYsCisweDAwMjAyOEM4LCAweDAwMjAyOENBLCAweDAwMDkwMDBCLCAweDY2NkNFNjgwLAorMHg2NTYzRDJBOCwgMHg3NTQwRTcwMCwgMHg2NDczNDIyQiwgMHgyRkI2MkZBNiwKKzB4MkZENjJGQzYsIDB4NEYyMjJGRTYsIDB4NEMxOEVDMDEsIDB4REFBM0RCQTIsCisweDY1QjI1MkIxLCAweDg5MjIzNTIwLCAweEM5MDM2MDUxLCAweDg5MUU4ODAxLAorMHhEMTlGREU5RCwgMHg2NEUzNDEwQiwgMHg4NTAzNjUwMywgMHg2NzBENjZBMiwKKzB4REQ5QzM3NjIsIDB4RDQ5Qzg5MEEsIDB4NDIwQkQyOUMsIDB4RDE5QzAwMDksCisweEU3MDFENDlDLCAweDIxNzI0RDBCLCAweDAwMDlBRkUyLCAweDQyMEJEMjlBLAorMHhENjlBNjRFMywgMHg0RDBCRDQ5QSwgMHhBRkQ5MjZDMiwgMHg0RjI2MDAwOSwKKzB4NkRGNjZFRjYsIDB4NkJGNjZDRjYsIDB4NkFGNjAwMEIsIDB4N0ZGNDRGMjIsCisweEU2ODE4NTQ2LCAweDg1NDcyRjAxLCAweDgxRjE2NjZDLCAweEQyODU4NTQ4LAorMHg4NTQyODFGMiwgMHg4MUYzNjdGMywgMHhFNDBDODU0MywgMHg2MDUzODFGNCwKKzB4ODFGNTY1NjMsIDB4NzU0MDQyMEIsIDB4NEYyNjdGMEMsIDB4MDAwOTAwMEIsCisweDJGOTYyRjg2LCAweDJGQjYyRkE2LCAweDJGRDYyRkM2LCAweDRGMjIyRkU2LAorMHhEQzg0N0ZGMCwgMHhFODAwQTBERCwgMHhEMjgzNkIxMywgMHhFMDAxNEIwOCwKKzB4NEIwMDQyMEIsIDB4MUYwM0RFODEsIDB4M0JFQzg1RjIsIDB4MkY4MjdFMzAsCisweDFGRTI2ODAzLCAweDY2QzJERDdFLCAweDM2MjA1MkMxLCAweEEwQzM4QjAxLAorMHg2MDYxMDAwOSwgMHg4ODAxQzkwMywgMHhBMEJEOEIwMSwgMHg4NTYxMDAwOSwKKzB4ODk2NUM4MDEsIDB4RUUxMDUxNjMsIDB4REE2QTg1MTIsIDB4QzkwMzY2MDMsCisweDg1MTM2NDAzLCAweDQwMjE2MDBELCAweEM5M0Y0MDIxLCAweDhEMUMzMEUzLAorMHhENzcwNjUwMywgMHg2MjcwNDQwOCwgMHg0NDAwNDQwOCwgMHgyMjI4NDUwMCwKKzB4MzQ1QzhGMEEsIDB4NjA0M0QyNkMsIDB4Njk3RDA3MkQsIDB4Njg5OTQ5MTksCisweDY5N0M2RThFLCAweDI4RURBMDA5LCAweDYwNDNEMjY4LCAweDY5N0QwNzJELAorMHg2ODk5NDkxOSwgMHg2OTdDNkU4RSwgMHhFRUZGMjhFRCwgMHg2RUVDNjI5RCwKKzB4OEIwRjMyRTAsIDB4NDEwQkQxNTIsIDB4NTQwMzY0QzMsIDB4QkY4NUU1MDIsCisweEQ0NUY2RTAzLCAweDQ2MEJENjU0LCAweEQ3NUU2NUUzLCAweEQ0NUVFRTAxLAorMHgyN0UyQTAxRCwgMHgyNkU5RUVGQywgMHg4MTEyNjA2MywgMHg5Nzg4ODUxMywKKzB4MjA3OTQyMDgsIDB4ODUxMjgxMTMsIDB4ODExMjIwOEIsIDB4MjAyQjg1MTMsCisweDg1MTQ4MTEzLCAweDQyMThFMjA4LCAweDgxMTQyMDJCLCAweDg1NDE2NEMyLAorMHg4MTQxMjBFOSwgMHhENDUxNjVDMiwgMHhDQjAxNjA1MSwgMHg0QTBCMjUwMSwKKzB4NjBDMjAwMDksIDB4NTJGMzU2RjIsIDB4MkIwMkNCMDEsIDB4MjYyMkFGOEIsCisweEQyMzc4NTYxLCAweDhEMkVDODAyLCAweDQyMEI2NEMzLCAweEQ2NDgwMDA5LAorMHg1RTAzNjUwMywgMHgwNzZFRTA0QywgMHg3NzAxRDE0NiwgMHg2MDEyMDY3NiwKKzB4OEIwNTg4MDEsIDB4RUEwQzg1RTEsIDB4MjBBQjRBMTgsIDB4ODFFMUEwMDcsCisweDg4MDI2MDEyLCAweDg1RTE4QjAzLCAweDIwQTlFQURGLCAweDg1NTE4MUUxLAorMHgyMEE5RUFGQywgMHg2MDUxODE1MSwgMHhDQjAxREEyOCwgMHg0QTBCNjRDMywKKzB4NTZGMjI1MDEsIDB4RDczODUxRjMsIDB4ODVFRjI2MTIsIDB4NDcwQjY0RDMsCisweEFGNTg2NTBELCAweDQyMEIwMDA5LCAweDU0MDMwMDA5LCAweDg1NDQ2RTAzLAorMHg0QTE4RUEwOCwgMHgzMEEwMjBBOSwgMHg4QjAzREExQSwgMHhFNTAxQkYxNiwKKzB4MDAwOUEwMDcsIDB4RDYyRDg1NDEsIDB4MjI2ODYyMEQsIDB4QkYwRDg5MDEsCisweEQ0MjNFNTAwLCAweDQyMEJEMjE4LCAweEQ3MjI2NUUzLCAweEVFMDFENDI4LAorMHgyN0UyNEEwQiwgMHgwMDA5QUYzNywgMHg2OEYyNjA4MywgMHg3ODAxODFGMiwKKzB4NjE4RDdDMDgsIDB4MzFFN0VFMDMsIDB4QUYxRDg5MDEsIDB4N0YxMDAwMDksCisweDZFRjY0RjI2LCAweDZDRjY2REY2LCAweDZBRjY2QkY2LCAweDAwMEI2OUY2LAorMHhGRTAzNjhGNiwgMHgwMDIwMTgzNCwgMHgwMDIwMjg4NCwgMHgwMDIwMjg4QywKKzB4MDAyMDBBNUMsIDB4MDAyMDBEQTYsIDB4MDAyMDI4NTQsIDB4MDAyMDBBREUsCisweDAwMUUyMTMwLCAweDAwMjAyQTcwLCAweDAwMjAwQTdBLCAweDAwMUMzRDMwLAorMHgwMDIwMkE3NCwgMHgwMDIwMjg2NCwgMHgwMDIwMUZENCwgMHgwMDFDM0QwMCwKKzB4MDAyMDJBODAsIDB4MDAyMDJBOEMsIDB4MDAyMDI5NzAsIDB4MDAyMDI5RjAsCisweDAwMjAyODVDLCAweDAwMUUyMTJDLCAweDAwMjAyQTc4LCAweDAwMjAyQTdDLAorMHgwMDIwMjdGOCwgMHgwMDIwMjdGNCwgMHgwMDIwMEUwNiwgMHgwMDAwODAwMCwKKzB4MDAyMDJBODgsIDB4NEYyMjJGRTYsIDB4NkUyMkQyMEQsIDB4Qzg0MDYwRTMsCisweDIyRTI4RDAyLCAweDAwMDlCRTY4LCAweDQyMThFMjQwLCAweDg5MDEyRTI4LAorMHgwMDA5QkU2NCwgMHhDODA1NjBFMywgMHhCRUI5ODkwMSwgMHg2MEUzMDAwOSwKKzB4ODkwMkM4MDIsIDB4QUU2MTRGMjYsIDB4NEYyNjZFRjYsIDB4NkVGNjAwMEIsCisweDAwMUMzNTEwLCAweDA4MEEwQzBFLCAweDAwMDIwNDA2LCAweDFBMUMxRTIwLAorMHgxMjE0MTYxOCwgMHgyRTMwMzIzNCwgMHgyNjI4MkEyQywgMHgzQTNDM0U0MCwKKzB4NkM2MjU2NDgsIDB4NDExMTJGMjYsIDB4RTIyMDhGMTgsIDB4ODkwQjMxMjMsCisweDMyMUNEMjA0LCAweEQxMDI2MjIwLCAweDQxMkIzMTJDLCAweDAwMDkwMDA5LAorMHgwMDIwMUZGRSwgMHgwMDIwMUZCNCwgMHgwMDBCRTAwMCwgMHg0MDAwNjJGNiwKKzB4NDAwMDQwMDAsIDB4NDAwMDQwMDAsIDB4NDAwMDQwMDAsIDB4NjJGNjAwMEIsCisweDQwMDA0MDAwLCAweDQwMDA0MDAwLCAweDQwMDA0MDAwLCAweDQwMTg0MDAwLAorMHg2MkY2MDAwQiwgMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwKKzB4NDAyODQwMDAsIDB4NjJGNjAwMEIsIDB4NDAwMDQwMDAsIDB4NDAxODQwMDAsCisweDAwMEI0MDI4LCAweEM5MEY2MkY2LCAweDQwMDU0MDA1LCAweDQwMDU0MDA1LAorMHg2MkY2MDAwQiwgMHg0MDA1QzkwNywgMHg0MDA1NDAwNSwgMHg2MkY2MDAwQiwKKzB4NDAwNUM5MDMsIDB4MDAwQjQwMDUsIDB4QzkwMTYyRjYsIDB4MDAwQjQwMDUsCisweDAwMDA2MkY2LCAweDA4MEEwQzBFLCAweDAwMDIwNDA2LCAweDFBMUMxRTIwLAorMHgxMjE0MTYxOCwgMHgyRTMwMzIzNCwgMHgyNjI4MkEyQywgMHgzQTNDM0U0MCwKKzB4NkM2MjU2NDgsIDB4NDExMTJGMjYsIDB4RTIyMDhGMTgsIDB4ODkwQjMxMjMsCisweDMyMUNEMjA0LCAweEQxMDI2MjIwLCAweDQxMkIzMTJDLCAweDAwMDkwMDA5LAorMHgwMDIwMjBCRSwgMHgwMDIwMjA3NCwgMHgwMDBCRTAwMCwgMHg0MDAxNjJGNiwKKzB4NDAwMTQwMDEsIDB4NDAwMTQwMDEsIDB4NDAwMTQwMDEsIDB4NjJGNjAwMEIsCisweDQwMDE0MDAxLCAweDQwMDE0MDAxLCAweDQwMDE0MDAxLCAweDQwMTk0MDAxLAorMHg2MkY2MDAwQiwgMHg0MDAxNDAwMSwgMHg0MDAxNDAwMSwgMHg0MDAxNDAwMSwKKzB4NDAyOTQwMDEsIDB4NjJGNjAwMEIsIDB4NDAwMTQwMDEsIDB4NDAxOTQwMDEsCisweDAwMEI0MDI5LCAweDQwMDQ2MkY2LCAweDQwMDQ0MDA0LCAweEM5MEY0MDA0LAorMHg2MkY2MDAwQiwgMHg0MDA0NDAwNCwgMHhDOTA3NDAwNCwgMHg2MkY2MDAwQiwKKzB4NDAwNDQwMDQsIDB4MDAwQkM5MDMsIDB4NDAwNDYyRjYsIDB4MDAwQkM5MDEsCisweDAwMDA2MkY2LCAweDM2MjJFMjE4LCAweDY3NDM4RjEyLCAweDAwMDlBMDA0LAorMHg3NkZGNjI1NCwgMHg3NDAxMjQyMCwgMHhDODAzNjA1MywgMHg2MDQzOEJGOCwKKzB4ODkwMkM4MDMsIDB4NDIyQkQyMkIsIDB4RDIyQjAwMDksIDB4MDAwOTQyMkIsCisweDJGRTY2NDczLCAweDhENEEzNDUwLCAweDI3Nzg2NzYzLCAweDYyNDM4OTQ3LAorMHgyMjdCMjI1QiwgMHhDOTAxNjAyMywgMHg4RDIwMzQ1MiwgMHgyRUU4NkUwMywKKzB4NjAyMzhCMTUsIDB4OEIwOEM4MDMsIDB4NDcwOTY2NDMsIDB4NDcxMDYyNTYsCisweDhGRkIyNjIyLCAweEEwMzI3NjA0LCAweDQ3MDEwMDA5LCAweDYxNDM2NjczLAorMHg0NjEwNjI1NSwgMHg4RkZCMjEyMSwgMHhBMDI4NzEwMiwgMHg2NjQzMDAwOSwKKzB4NDcxMDYyNTQsIDB4OEZGQjI2MjAsIDB4QTAyMDc2MDEsIDB4NjE0MzAwMDksCisweDJFRTgzNTdDLCAweDhGMTUzMTdDLCAweDYwMjM2NjUzLCAweDhCMDdDODAzLAorMHg3NkZDNDcwOSwgMHg0NzEwNjI2MiwgMHgyMTI2OEZGQiwgMHgwMDA5QTAwRiwKKzB4NjU2MzQ3MDEsIDB4NzVGRTY2NzMsIDB4NDYxMDYyNTEsIDB4MjEyNThGRkIsCisweDAwMDlBMDA1LCAweDYyNjA3NkZGLCAweDhGRkI0NzEwLCAweDYwNDMyMTI0LAorMHg2RUY2MDAwQiwgMHgwMDIwMjJBNiwgMHgwMDIwMjc1MiwgMHhFMjFFMkZFNiwKKzB4Njc2MzM2MjYsIDB4OEQxQjYxNTMsIDB4M0UxMDZFNDMsIDB4M0UxMjg5MTYsCisweDY1RTM4OTA4LCAweDM2NzJFNjAwLCAweDYyMTQ4OTEwLCAweDI1MjA3NjAxLAorMHg3NTAxQUZGOSwgMHgzMTdDNjRFMywgMHg2NTEzMzQ3QywgMHhFNjAwQTAwNCwKKzB4NjI1MDc1RkYsIDB4MjQyNDc2MDEsIDB4OEJGOTM2NzIsIDB4NjBFM0EwMTEsCisweDg5MDgzMUUyLCAweDMyN0M2MjEzLCAweDhCMDQzMkU2LCAweDY1MTM2NEUzLAorMHhBMDA4NjY3MywgMHhEMjhGNkVGNiwgMHg2NTEzNjRFMywgMHg0MjJCNjY3MywKKzB4MDAwQjZFRjYsIDB4RTIwNDZFRjYsIDB4Njc0MzM2MjIsIDB4OEYxMDM1NkMsCisweEEwMDQzNDZDLCAweDc1RkYwMDA5LCAweDc2RkY2MjUwLCAweDYwNTMyNDI0LAorMHg4QkY4QzgwMywgMHhDODAzNjA0MywgMHhBMTA1ODkwMSwgMHhBMjc3MDAwOSwKKzB4QTI5OTAwMDksIDB4MkZCNjAwMDksIDB4MkZENjJGQzYsIDB4N0ZFNDJGRTYsCisweDZDNjM2MDQzLCAweDY2NTIxRjYyLCAweEM5MDM3NTA0LCAweDFGNTE2RTUzLAorMHg0NTA4NjUwMywgMHhFMUZDNkQ0MywgMHgyRDE5NDUwMCwgMHgxRjczMjU1OCwKKzB4MUY2NTFGNDQsIDB4MkZEMjhEMEIsIDB4ODgwODYwNTMsIDB4ODgxMDg5MjMsCisweDg4MTg4OTVCLCAweEEwODk4QjAxLCAweEEwQkQwMDA5LCAweDYyNjMwMDA5LAorMHgyRDIyRTYwMCwgMHg3Q0ZDN0QwNCwgMHhFQjEwQTAwRCwgMHhFNjAwNjRFNiwKKzB4N0NGMDY1RTYsIDB4NjJFMjYxRTYsIDB4MUQ1MTJENDIsIDB4MUQyMzFEMTIsCisweDdFMDQ3RDEwLCAweDNDQjIxRkUxLCAweDFGNjU4OUYwLCAweDJGRDIxRkMyLAorMHhBMEExMUZFNiwgMHg2NEQyMUZENCwgMHg0NDI4NjI2MywgMHg0NDI5NDQxOCwKKzB4NDIxODQ0MTksIDB4NDYyOTI0MkIsIDB4MkQ0MjQ2MTksIDB4NjU2MzdEMDQsCisweEEwMjE3Q0ZELCAweDY3RTZFQjEwLCAweDYyRTY3Q0YwLCAweDY0RTY2NjczLAorMHgyNTZCNDYxOCwgMHgyRDUyNjFFMiwgMHg2NTIzNDcyOSwgMHg0NTE4NDcxOSwKKzB4NDIyOTI3NUIsIDB4NDIxOTFENzEsIDB4NDcxODY3NDMsIDB4NDQyOTIyN0IsCisweDQ0MTk2NzEzLCAweDI0N0I0NzE4LCAweDFENDMxRDIyLCAweDQxMTk0MTI5LAorMHg2NTEzN0QxMCwgMHgxRkUxN0UwNCwgMHg4OURDM0NCMiwgMHgxRkU2N0VGRiwKKzB4MUZDMjFGNTUsIDB4QTA2NzJGRDIsIDB4NkNGMjFGRDQsIDB4NjZDMjU3RjUsCisweDQ2Mjg2MjczLCAweDQyMjg0NjI5LCAweDJDNjIyNjJCLCAweDdDMDQ1REYyLAorMHg3REZFNDcyOSwgMHhBMDFDRUIxMCwgMHg2NUU2NUVGMSwgMHg2NkU2NjI3MywKKzB4NDcyODY3NTMsIDB4Njc2MzIyN0IsIDB4NDUyOTYxRTYsIDB4MjU3QjQ3MjgsCisweDJDMjI2NEU2LCAweDY1MTMxQzUxLCAweDQ1Mjg0NjI5LCAweDFDNjIyNjVCLAorMHg0MTI5NjY0MywgMHgyMTZCNDYyOCwgMHg0NDI5MUMxMywgMHg2NzQzN0MxMCwKKzB4M0RCMjdERjAsIDB4MUZEMjg5RTEsIDB4N0VGRUEwMzQsIDB4NTFGNTZDRjIsCisweDYyMTM2NkMyLCAweDQyMjg0NjE4LCAweDQyMTg0NjE5LCAweDJDNjIyNjJCLAorMHg3QzA0NURGMiwgMHg3REZGNDExOSwgMHhBMDFGRUIxMCwgMHg2NUU2NUVGMSwKKzB4NjRFNjdERjAsIDB4NDIyODYyNTMsIDB4NDIxODY3RTYsIDB4NjZFNjIxMkIsCisweDYxNDMyQzEyLCAweDQ1MTk0MTI4LCAweDI1MUI0MTE4LCAweDY1NzMxQzUxLAorMHg0NDE5NDUyOCwgMHgyNDVCNDUxOCwgMHg2NDYzMUM0MiwgMHg0NzE5NDQyOCwKKzB4Mjc0QjQ0MTgsIDB4NDYxOTFDNzMsIDB4NjE2MzdDMTAsIDB4ODlERTNEQjIsCisweDdFRkQxRkQyLCAweDFGQzQxRkU2LCAweDVERjJFNzA0LCAweEEwMEQ1RUY2LAorMHg2MkU0NTFGNCwgMHg2NkU0N0RGQywgMHg2NUU0NjRFNCwgMHg3MTAxMjEyMCwKKzB4NzEwMTIxNjAsIDB4NzEwMTIxNDAsIDB4NzEwMTIxNTAsIDB4ODlGMDNENzIsCisweDY2RDM1N0YzLCAweDY0MTM2NUUzLCAweDZFRjY3RjFDLCAweDZDRjY2REY2LAorMHg2QkY2QTE5MCwgMHgwMDIwMjEzNCwgMHgyRkM2MkZCNiwgMHgyRkU2MkZENiwKKzB4NjA0MzdGRTQsIDB4NkM2M0M5MDMsIDB4NjYwMzFGNjIsIDB4NDYwODc1RkMsCisweDYxNTI2RTQzLCAweDQ2MDBFMkZDLCAweDI2NjgyRTI5LCAweDFGNDQxRjczLAorMHgxRjUxNkQ1MywgMHg4RDBCMUYxNSwgMHg2MDYzMkZFMiwgMHg4OTFGODgwOCwKKzB4ODk1Mzg4MTAsIDB4OEIwMTg4MTgsIDB4MDAwOUEwODEsIDB4MDAwOUEwQjksCisweEVCMTBBMDBELCAweDUyRDM3REYwLCAweDU0RDE1NkQyLCAweDJFMTY2NUQyLAorMHgyRTY2MkUyNiwgMHgyRTQyN0VGQywgMHgxRkQxNjE1MywgMHgzQ0IyN0NGMCwKKzB4N0QwNDg5RjAsIDB4MUYxNTFGRDYsIDB4MkZFMjFGQzIsIDB4MUZFNEEwQTEsCisweDYyMTM2NkUyLCAweDQyMjk0NjE5LCAweDQyMTk0NjE4LCAweDJFNjIyNjJCLAorMHg3Q0ZGNDExOCwgMHhFQjEwQTAyMSwgMHg1NEQzN0RGMCwgMHg2MjQzNTdEMiwKKzB4NDIxOTQyMjksIDB4NTVEMTIxMkIsIDB4MkUxNjY2RDIsIDB4NDEyOTYxNzMsCisweDQxMTk0NDE4LCAweDJFNDYyNDFCLCAweDQ0Mjk2NDUzLCAweDQ0MTk0NzE4LAorMHgyRTc2Mjc0QiwgMHg0NzI5Njc2MywgMHg0NzE5NDUxOCwgMHgyNTdCN0VGQywKKzB4NDYxODJFNTIsIDB4MUZEMTYxNjMsIDB4M0NCMjdDRjAsIDB4N0QwMzg5REMsCisweDFGMTUxRkQ2LCAweDJGRTIxRkMyLCAweDFGRTRBMDZCLCAweDU3RjU2RUYyLAorMHg2MjczNjZFMiwgMHg0NjI4NDYyOSwgMHgyNjJCNDIyOSwgMHgyRTYyNUNGMiwKKzB4N0NGRTQ3MjgsIDB4QTAxQkVCMTAsIDB4N0RGMDVERjEsIDB4NTVEMjUxRDMsCisweDQ2Mjk2NjEzLCAweDU0RDEyNzZCLCAweDJFNzY2MkQyLCAweDQxMjg2NzUzLAorMHgyMTdCNDcyOSwgMHg2MTQzMkUxNiwgMHg0MTI5NDUyOCwgMHgyRTU2MjUxQiwKKzB4NDQyODY1MjMsIDB4MjQ1QjQ1MjksIDB4NDIyODJFNDYsIDB4N0NGMDY3MjMsCisweDg5RTIzQ0IyLCAweDFGRDY3RDAyLCAweEEwM0ExRkMyLCAweDY3RjIxRkU0LAorMHg2NTcyNTFGNSwgMHg0NTI5NjIxMywgMHg0NTI4NDUxOSwgMHg0MjE5NDUxOCwKKzB4NUNGMjI1MkIsIDB4NDEyODI3NTIsIDB4N0NGRDQxMTgsIDB4QTAyMkVCMTAsCisweDdERjA1REYxLCAweDU0RDI1NkQzLCAweDQ1MTk2NTYzLCAweDUyRDE0NjI4LAorMHg0NjE4MjE1QiwgMHg2RUQyNjU0MywgMHg0NTE5MjcxNiwgMHgyNjVCNDQyOCwKKzB4NjU0MzYxNjMsIDB4NDUxODY0MjMsIDB4NDIyODQ0MTksIDB4NDIxODI1NEIsCisweDI3MTY2NEUzLCAweDQ0MTk2NjIzLCAweDI2NEIyNzU2LCAweDRFMjgyNzY2LAorMHg2MUUzNEUxOCwgMHgzQ0IyN0NGMCwgMHg3RDAxODlEQiwgMHgxRkMyMUZENiwKKzB4RTcwNDFGNzQsIDB4NTFGNDVERjIsIDB4NUVGNkEwMEQsIDB4ODRFMjdFRkMsCisweDYyMDM2NEUwLCAweDdERkM4NEUxLCAweDg0RTM2NTAzLCAweDIxNjQ2NjAzLAorMHgyMTU0MjEyNCwgMHgzRDcyMjE0NCwgMHg1N0YzODlGMCwgMHg2NDEzNjZEMywKKzB4N0YxQzY1RTMsIDB4NkRGNjZFRjYsIDB4QTA5RDZDRjYsIDB4MkY4NjZCRjYsCisweDJGQTYyRjk2LCAweDJGQzYyRkI2LCAweDJGRTYyRkQ2LCAweDYxNDM3NEUwLAorMHg2QTYzNjg3MywgMHg2QjU2RTkyMCwgMHg2QzU2N0FFMCwgMHg2RDU2NzEyMCwKKzB4NkU1NjNBOTIsIDB4NjQ1NjY3NTYsIDB4NjI1NjY2NTYsIDB4MTFDMTIxQjIsCisweDExRTMxMUQyLCAweDExNDUxMTc0LCAweDhERUMxMTY2LCAweDcxMjAxMTI3LAorMHg2NjEzQTAwNCwgMHg3QUZGNjI1NCwgMHg3NjAxMjYyMCwgMHg4QkY5MkFBOCwKKzB4NkVGNjYwODMsIDB4NkNGNjZERjYsIDB4NkFGNjZCRjYsIDB4MDAwQjY5RjYsCisweDJGODY2OEY2LCAweDJGQTYyRjk2LCAweDJGQzYyRkI2LCAweDJGRTYyRkQ2LAorMHg2QTYzNjg3MywgMHg3NUUwRTkyMCwgMHg1NjU2NTI1NywgMHg1NzU0NTE1NSwKKzB4NUQ1MjVFNTMsIDB4NkI1MjVDNTEsIDB4MjQ2NjI0MjYsIDB4MjQ3NjI0MTYsCisweDdBRTAyNEU2LCAweDI0QzYyNEQ2LCAweDhERUMzQTkyLCAweDY2QTMyNEI2LAorMHg2RUY2Njc4MywgMHg2Q0Y2NkRGNiwgMHg2QUY2NkJGNiwgMHhBMDQzNjlGNiwKKzB4MkZFNjY4RjYsIDB4QzgwNDYwNjMsIDB4OEQwNDZFNjMsIDB4NjIxNjYxNTMsCisweDI0MjI3RUZDLCAweDYwRTM3NDA0LCAweDg5MDhDODE4LCAweDcxMDQ2NTEzLAorMHg2MjUyNjYxNiwgMHgyNDIyN0VGOCwgMHhBRkY0MTQ2MSwgMHhFMjA0NzQwOCwKKzB4NjUxMzNFMjIsIDB4NjZFMzhEMDIsIDB4NkVGNkEwMUMsIDB4NkVGNkFGODcsCisweEM4MDQ2MDYzLCAweDYxNjM4RDA0LCAweDYyNTI3NUZDLCAweDI0MjY3MUZDLAorMHhDODE4NjAxMywgMHg3NUY4ODkwNiwgMHg2NjUyNTI1MSwgMHgyNDY2MjQyNiwKKzB4NzFGOEFGRjYsIDB4MzEyMkUyMDQsIDB4NjYxMzhGMDIsIDB4MDAwOUFGQTEsCisweDAwMDlBMDBBLCAweDAwMDlBMDA0LCAweDc2RkY2MjU0LCAweDc0MDEyNDIwLAorMHg4QkY5MjY2OCwgMHg2MDczMDAwQiwgMHgwMDA5QTAwNCwgMHg2MjUwNzVGRiwKKzB4MjQyNDc2RkYsIDB4OEJGOTI2NjgsIDB4NjA3MzAwMEIsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4NTQ0RjBEMEEsCisweDQ2MjA1MzU1LCAweDAwMDAzQTU3LCAweDIwNzI2MTRELCAweDMyMjAzMjMyLAorMHgyMDM3MzAzMCwgMHgzNTNBMzQzMSwgMHgzMzM1M0EzNCwgMHgwMDAwMDAwMCwKKzB4MDAwMDBEMEEsIDB4MDAwMDAwNDMsIDB4NjE3NjZFNDksIDB4MjA2NDY5NkMsCisweDcyNjU3Mzc1LCAweDIwNzI2RjIwLCAweDIwNzk2NTZCLCAweDAwMjE0NDQ5LAorMHg2RTZCNkU1NSwgMHgyMDZFNzc2RiwgMHg2RDZENkY2MywgMHgzRDY0NkU2MSwKKzB4MDAwMDAwMDAsIDB4NjE0Mzc3NDgsIDB4NzI2MjY5NkMsIDB4NkY2OTc0NjEsCisweDY2MjAyMDZFLCAweDBBNkM2OTYxLCAweDAwMDAwMDBELCAweDczNjk2RjRFLAorMHg2MTQzMjA2NSwgMHg3MjYyNjk2QywgMHg2RjY5NzQ2MSwgMHg2MTY2MjA2RSwKKzB4MjEyMTZDNjksIDB4MDAwMDBEMEEsIDB4MDAwMDBEMEEsIDB4MDAwMDAwNDIsCisweDAwMDAwMEZGLCAweDAwMDIwMDAxLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAxMEUwMTBELCAweDAwMDIwMDAzLCAweDAxMDkwMTA4LCAweDAwMDIwMTBBLAorMHgwMDAzMDAwMiwgMHgwMjAyMDIwMSwgMHgwMjA0MDIwMywgMHgwMjA2MDIwNSwKKzB4MDIwODAyMDcsIDB4MDIwQTAyMDksIDB4MDIwQzAyMEIsIDB4MDIwRTAyMEQsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDEwRTAxMEQsIDB4MDBGRjAxMEYsIDB4MDEwOTAxMDgsIDB4MDEwQjAxMEEsCisweDAwMDMwMDAyLCAweDAyMDIwMjAxLCAweDAyMDQwMjAzLCAweDAyMDYwMjA1LAorMHgwMjA4MDIwNywgMHgwMjBBMDIwOSwgMHgwMjBDMDIwQiwgMHgwMjBFMDIwRCwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMDAwMDA3MiwgMHgwMDIwNTIyMCwgMHgwMDAwMDA0NiwgMHgwMDAwMDA1OSwKKzB4NzMyMDQxNDIsIDB4MDAzRDcxNjUsIDB4MDAwMDAwNzQsIDB4MDAwMDAwMDAsCisweDAyMDAwMTEyLCAweDQwRkZGRkZGLCAweDEyMjEwQUNFLCAweDIwMTA0ODkwLAorMHgwMjA5MDEwMCwgMHgwMTAxMDAyRSwgMHgwOUZBODAwMCwgMHgwNDAwMDAwNCwKKzB4MDAwMDAwRkYsIDB4MDIwMTA1MDcsIDB4MDcwMDAyMDAsIDB4MDAwMjgyMDUsCisweDA1MDcwMDAyLCAweDAwNDAwMzgzLCAweDA0MDUwNzAxLCAweDAxMDA0MDAzLAorMHgwMDJFMDIwOSwgMHg4MDAwMDEwMSwgMHgwMDA0MDlGQSwgMHgwMEZGMDQwMCwKKzB4MDUwNzAwMDAsIDB4MDA0MDAyMDEsIDB4ODIwNTA3MDAsIDB4MDAwMDQwMDIsCisweDAzODMwNTA3LCAweDA3MDEwMDQwLCAweDQwMDMwNDA1LCAweDAzMDQwMTAwLAorMHgwMzBDMDQwOSwgMHgwMDc5MDA1QSwgMHgwMDQxMDA0NCwgMHgwMzE4MDA1MywKKzB4MDA1MzAwNTUsIDB4MDAzMjAwNDIsIDB4MDAzMDAwMkUsIDB4MDA1NzAwMjAsCisweDAwNDEwMDRDLCAweDAwMDAwMDRFLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDcwOSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorfTsKKworY29uc3QgdTMyX3QgemNGd0ltYWdlU2l6ZT0xMTEwNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGZ3dV90eHN0cmVhbS5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwZnd1X3R4c3RyZWFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI3N2NiYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGZ3dV90eHN0cmVhbS5jCkBAIC0wLDAgKzEsMTAxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAiY3ByZWNvbXAuaCIKKworY29uc3QgdTMyX3QgemNGd0ltYWdlW10gPSB7CisweDAwMDkwMDBCLCAweDRGMjIyRkU2LCAweERFOTQ3RkZDLCAweEUxMTRENTk0LAorMHgxRTEzRDQ5NCwgMHg2NzUyMUU0QywgMHhENDk0RDY5MywgMHgzNzQwMjc2OSwKKzB4NjI1MjhGMDYsIDB4NzIwMUQ2OTIsIDB4NjA2MDI1MjIsIDB4MjYwMEM5M0YsCisweEQ3OTA2MTUyLCAweDI1MTI2MTFELCAweDI2NEI2NjUyLCAweDI1NjI0NzBCLAorMHgwMDA5QjAxNywgMHhFNjAwOTVBQywgMHhDODQwNjBFMiwgMHgyRjAyOEYwMywKKzB4OEZGOTM2NTIsIDB4RDQ4ODc2MDEsIDB4NEUwQkRFODgsIDB4RDQ4ODAwMDksCisweDAwMDk0RTBCLCAweDRFMEJENDg3LCAweDdGMDQwMDA5LCAweEEwNTI0RjI2LAorMHg0RjIyNkVGNiwgMHg0MTBCRDE4NCwgMHhENDg0MDAwOSwgMHgwMDA5NDQwQiwKKzB4NDUwQkQ1ODMsIDB4RDc4MzAwMDksIDB4RDI4M0UxRkYsIDB4MjcxMjYxMUQsCisweEQ0ODI1MDI5LCAweEUxRkZDQjAxLCAweDEyMDlFNTAxLCAweDEyMTEyMjEyLAorMHhFNzIwMjQ1MiwgMHg0NzE4RDU3RSwgMHgyNTcyRDI3RSwgMHhEMTdFRTcwMCwKKzB4RDY3RkQ0N0UsIDB4RTIwMTIyNzAsIDB4MjQ3MDIxNzIsIDB4RDY3RDI2MjAsCisweDI2NDFFNEZGLCAweEQ1N0NFNjAwLCAweDY2NkRFMTA0LCAweDc2MDE2MDYzLAorMHg0MDAwNjI2RCwgMHg4RkY4MzIxMiwgMHhENTc4MDU0NSwgMHgyNTIwRTIwMSwKKzB4RDI3OEQ3NzcsIDB4RTQ4MEUxMDAsIDB4MjIxMjI3MTAsIDB4NjYxM0Q1NzYsCisweDY2NkQ2NDRDLCAweDc2MDQ2NzYzLCAweDM3NUM2MjZELCAweDhGRjgzMjQzLAorMHhENTcyMjcxMiwgMHhEMjczRDc3MiwgMHhFNDAwRTEwMSwgMHgyNzEwMjUxMSwKKzB4MDAwQjRGMjYsIDB4N0ZDQzIyNDIsIDB4RDE3MEQ1NkYsIDB4RDI3MURCNzAsCisweDFGNTFENDcxLCAweEQ2NzE3NTA4LCAweDFGMTJENzcxLCAweDFGNTU3MTBDLAorMHgxRkI5NzVGQywgMHg3MjA0MUYyQSwgMHgxRjEzRUIxMCwgMHgxRjU2MUY0NCwKKzB4MUY3ODFGNjcsIDB4RDg2QjFGMkIsIDB4REQ2Q0Q5NkIsIDB4REM2Q0VBMDAsCisweEQyNkRERTZDLCAweDg5MDAzQTIyLCAweEQxNUQ3QTAxLCAweDg4MDE2MDEwLAorMHg1NkY4OEIwMywgMHg0MjE4RTIwMSwgMHhEMTY4MjYyMiwgMHgwMDA5NDEwQiwKKzB4NDQwQkQ0NjcsIDB4RDU2NzAwMDksIDB4MDAwOTQ1MEIsIDB4NjAxMEQxNTAsCisweDhCMTA4ODAxLCAweEU2NTBEMTRGLCAweDQ2MTg2MjEyLCAweDhCMDgzMjY2LAorMHg1NkY5RDE0QiwgMHgyMTIwRTIwMCwgMHhDQjAxNjA2MiwgMHgyNjAyQTAwMywKKzB4NzIwMTI3MTAsIDB4NjA4MjIxMjIsIDB4ODkwOTg4MDEsIDB4RTJDOEQxNUEsCisweDYyMkM2NjEyLCAweDg5MDMzNjI2LCAweDYwMTBEMTU4LCAweDhCQzg4ODAxLAorMHg1MUY2Njc5MiwgMHgyMTcyNTJGNSwgMHhENjU1NTE5MSwgMHg1NUZBMjIxMiwKKzB4NTJGQjY0NjIsIDB4NTU2MTI1NDIsIDB4MjI1MkU0MDAsIDB4NjE0MzY2NDMsCisweDA1REU2MDEzLCAweDM2Q0M0NjA4LCAweDA3REUyNjUyLCAweEM5MDM2MDcxLAorMHg4QjAyODgwMSwgMHg3MjAxNjJFMiwgMHg3NDAxMkUyMiwgMHgzNkIzNjY0QywKKzB4NzEwNDhGRUUsIDB4NjZDMkQxNDcsIDB4NDUyODY1MTIsIDB4MjY1QjQ1MTgsCisweDYwODIyQzYyLCAweDg5MDE4ODAxLCAweDAwMDlBMTY4LCAweDYyNzJENzQyLAorMHg4QjEzMjIyOCwgMHhENDJCRDc0MSwgMHg2NzcyRDU0MSwgMHg1MTUzNjI0MiwKKzB4MzEyQzMyN0MsIDB4MjQyMjIyMjgsIDB4MTUxMzhEMDUsIDB4NjI2MkQ2M0QsCisweEIxNjI3MjAxLCAweEQ2MjMyNjIyLCAweDI2MjJFMjAwLCAweDUyOTE2NjkyLAorMHg4QjAxMzYyMCwgMHgwMDA5QTE0NCwgMHg2MDYxQTA2RSwgMHgwMDFDMDAxQywKKzB4MDAxRDQwMjAsIDB4MDAwMEIzOEUsIDB4RkZGRjAwMDAsIDB4MTIzNDAwMDAsCisweDAwMUUxMDE1LCAweDAwMjAxMjc0LCAweDAwMjAzOUY0LCAweDAwMjAxOEEyLAorMHgwMDIwM0EwMCwgMHgwMDIwM0ExOCwgMHgwMDIwMTg2MCwgMHgwMDIwMTk2QywKKzB4MDAyMDEyODgsIDB4MDAxQzM1MTAsIDB4MDAxQzM2MjQsIDB4MDAxRTIxMkMsCisweDAwMjAzOEY0LCAweDAwMjAzNDhDLCAweDAwMjAzOEZDLCAweDAwMjAzOTA4LAorMHgwMDIwMzkxNCwgMHgwMDIwMzk3MCwgMHgwMDIwMzk3NCwgMHgwMDIwMzkxQywKKzB4MDAyMDM5MUQsIDB4MDAyMDM5MjAsIDB4MDAxMTc3MDAsIDB4MDAyMDM5OEMsCisweDAwMjAzOThBLCAweDAwMjAzNEYwLCAweDAwMTE3NzEwLCAweDAwMUMzRDMwLAorMHgwMDFDMzZGOCwgMHgwMDExNzczNCwgMHgwMDFDMzY4NCwgMHgwMDFDM0QwMCwKKzB4MDAxQzEwMDAsIDB4MDAxQzEwMjgsIDB4MDAyMDM1MDQsIDB4MDAyMDM5MjQsCisweDAwMTE3NjAwLCAweDAwMTE3NzQwLCAweDdGRkZGRkZGLCAweDAwMjAxNzMwLAorMHgwMDIwMzMyQSwgMHgwMDIwMjMzNCwgMHgwMDIwM0RBNCwgMHgwMDIwMzk3MiwKKzB4MDAyMDM0RkMsIDB4MDAyMDM5NjQsIDB4MDAxQzNEMkMsIDB4MDAxQzM2QjAsCisweDAwMjAzNDk0LCAweDAwMTE3NzVDLCAweDg4MDFDOTBGLCAweEEwQ0Y4OTAxLAorMHhEMTk2MDAwOSwgMHgzNjIwNjIxMiwgMHhENDk1ODkwNCwgMHgyNDIxRTIwMCwKKzB4MjE2MkEwQ0MsIDB4NjIxMUQxOTMsIDB4ODkwMTIyMjgsIDB4MDAwOUEwQzMsCisweEUyMDJENzhGLCAweDc1MDE2NTcxLCAweDMxMjM2MTVELCAweDI3NTE4RDAyLAorMHgwMDA5QTBCQywgMHhEMjhDNTdGMiwgMHg2MjIyNjA3MiwgMHg0MDA5NDAxOSwKKzB4QzkwRjQwMDksIDB4OEYxOTg4MEEsIDB4NTJGMzFGMkMsIDB4NDAxOTYwMjIsCisweDQwMDk0MDA5LCAweDg4MDhDOTBGLCAweEEwQTc4OTAxLCAweDYwNjMwMDA5LAorMHhDQjAxNTRGNywgMHhEMjdFNTVGMiwgMHhFNzAxMjQwMiwgMHhENDdGRTEwMCwKKzB4MjIxMTI1NzIsIDB4NzIwMTYyNDIsIDB4MjQyMkEwOTgsIDB4OEIzRjg4MDUsCisweDYwMjI1MkYzLCAweDQwMDk0MDE5LCAweEM5MEY0MDA5LCAweDhCMTY4ODAyLAorMHhFNEZGRDU3NywgMHg2NDRENjc1MiwgMHg4QjEwMjc0OCwgMHg2MjcyRDc3NSwKKzB4OEIwQzMyNjAsIDB4NTFGMjU1RjcsIDB4RDI2REU3MDEsIDB4MjE3MjI1NjIsCisweEQ1NzFFMTAwLCAweDY0NTIyMjExLCAweEEwNzc3NDAxLCAweDUyRjMyNTQyLAorMHg0MDE5NjAyMiwgMHg0MDA5NDAwOSwgMHg4ODA1QzkwRiwgMHgzMUIzOEI2RSwKKzB4RDI2QThCNkMsIDB4NjcyMjU0RjQsIDB4NzcwMUQ1NjksIDB4NjE0MjIyNzIsCisweDFGMUNFNjQwLCAweDQ2MTgyMTU5LCAweDhCMDMzMTYwLCAweDYyNjJENjY1LAorMHgyNjIyNzIwMSwgMHhFMjAwRDY1QSwgMHgyNjIxQjA2NywgMHgwMDA5QTA1NiwKKzB4MzEyM0UyMjAsIDB4ODgwMzhCNTIsIDB4NTJGMzhCMUUsIDB4NDAxOTYwMjIsCisweDQwMDk0MDA5LCAweDg4MDNDOTBGLCAweEQyNUI4QjE2LCAweDY3MjI1NEY0LAorMHg3NzAxRDU1NywgMHg2MTQyMjI3MiwgMHgxRjFDRTY0MCwgMHg0NjE4MjE1OSwKKzB4OEIwMzMxNjAsIDB4NjI2MkQ2NTUsIDB4MjYyMjcyMDEsIDB4RTIwMEQ2NDgsCisweDI2MjFCMDQzLCAweDAwMDlBMDEwLCAweEQ0NTJENTUxLCAweEQyNDQ2NzUyLAorMHhFMTAwNzcwMSwgMHgyNTcyM0E0NiwgMHgyMjExOEYwNiwgMHhFQTAwRDY0RSwKKzB4NzIwMTYyNjIsIDB4MjYyMkIwMzEsIDB4MkZCMkQ1NEMsIDB4OTU3MzY2NTIsCisweEQ0NEE1QkYxLCAweDM2MjA1MjQxLCAweDYwNjE4OTEwLCAweDhCMDFDODAzLAorMHgyQjIyRTIwMSwgMHg4RkY1NDUxMCwgMHg1N0YxNTY2NCwgMHg2MjcyRTFGMCwKKzB4NDEyODQxMTgsIDB4MjcyMjIyMUIsIDB4NkJGMkEwMDgsIDB4NkJGMkEwMDYsCisweEUyMDBENjJGLCAweEQxMkYyNjIxLCAweDIxMjFFMjAwLCAweEQxM0NFMjAxLAorMHg2NjEyMjgyMiwgMHg4QjAxMjY2OCwgMHgwMDA5QUUyQiwgMHg0NTBCRDUzOSwKKzB4RDEzOTAwMDksIDB4QUUyNEU2MDAsIDB4MkY4NjIxNjAsIDB4MkZBNjJGOTYsCisweDJGQzYyRkI2LCAweDJGRTYyRkQ2LCAweDdGRjQ0RjIyLCAweERFMzREMTMzLAorMHg1NDExNjIxMiwgMHgxRjQxNjdFMiwgMHgyRjIyRDQzMiwgMHhENTMyMUY3MiwKKzB4RDIzMjY3NDMsIDB4NTg0MTc3OTQsIDB4Njk0MjVBNDIsIDB4NUIxNjZDNzIsCisweDYwNTI2RDIyLCAweENCMjBFNjAwLCAweEU1NDAyNTAyLCAweDYyNkQ3NjAxLAorMHg4QkZCMzI1MywgMHg1NUYxNjJGMiwgMHgxMTUxMjEyMiwgMHhENjI4NTVGMiwKKzB4MTQ4MTJFNTIsIDB4MjQ5MjE0QTIsIDB4MjdDMkQ0MjYsIDB4MjZEMjExQjYsCisweERBMjU2NzQyLCAweEU4MDFEOTI1LCAweDQ5MEIyQTcyLCAweEUyMDExQThDLAorMHgxQTJDNDIxOCwgMHg0RjI2N0YwQywgMHg2REY2NkVGNiwgMHg2QkY2NkNGNiwKKzB4NjlGNjZBRjYsIDB4NjhGNjAwMEIsIDB4MDAwMDA3RDEsIDB4MDAyMDM5ODQsCisweDAwMjAzOTg4LCAweDAwMjAzOThFLCAweDAwMUMzREMwLCAweDAwMTE3NzJDLAorMHgwMDFDM0I4OCwgMHgwMDIwMzk2QywgMHgwMDExNzczQywgMHgwMDExNzc0NCwKKzB4MDAwMEYwMDAsIDB4MDAxMTc3NjQsIDB4MDAxMTc3NDgsIDB4MDAxMTc3NjgsCisweDAwMTE3NzZDLCAweDAxRkZGRkZGLCAweDAwMTE3NzRDLCAweDAwMjAzNEZDLAorMHgwMDIwM0RBNCwgMHgwMDIwMjRGOCwgMHgwMDIwMzk3MiwgMHgwMDFDM0I5QywKKzB4MDAxQzNEOTgsIDB4MDAxQzM3MDAsIDB4MDAxQzM1MDAsIDB4MDAxQzU5NjAsCisweDAwMUM4OTYwLCAweDAwMjAzNTA0LCAweDAwMUMzRDAwLCAweDAwMjAxNjBDLAorMHgyRjk2MkY4NiwgMHgyRkI2MkZBNiwgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwKKzB4REU5NTdGQUMsIDB4NjFFMEUwMTQsIDB4MEYxNEQ0OTQsIDB4NzEwMTYxRTMsCisweEUwMTg2MjEwLCAweEQyOTIwRjI0LCAweDAwMDk0MjBCLCAweDQ1MEJENTkxLAorMHgyMDA4MDAwOSwgMHg4RjEyNkQwMywgMHhEMjhGMUYwNywgMHg2NzIwRDQ4RiwKKzB4NjU3Q0REOEYsIDB4NDcwQkQ3OEYsIDB4RDE4RjAwMDksIDB4NjE5QzY5MTAsCisweDQ2MDg2NjEzLCAweDM2MTg0NjA4LCAweDNENkM0NjA4LCAweEUwMTgxRkQ3LAorMHhFNTgwMDRGQywgMHg2MDRDNjZFMiwgMHgzMDUwNjU1QywgMHgyRDYyOEYxNSwKKzB4MDFGQ0UwMTQsIDB4REU4NUU1MDAsIDB4NjQxQ0EwMDgsIDB4Njc1MzY1NUQsCisweDYwNzAzN0VDLCAweDM5REM2OTUzLCAweDgwOTQ3NTAxLCAweDMyNDM2MjVELAorMHhENjdGOEJGNCwgMHhBMzRFRTIwMCwgMHgyMDA4MjYyMSwgMHhFMDE0OEIxMywKKzB4RTQwMDAxRkMsIDB4QTAwOURFNzksIDB4NjQ0RDY3MUMsIDB4MzVFQzY1NDMsCisweDY5NDM2NjUyLCAweDM5REM2MjYyLCAweDc0MDQxOTIxLCAweDMyNzM2MjRELAorMHhBMzM4OEJGMywgMHg4ODAxMkQxMCwgMHhFMDE0OEIxNywgMHhFNzAwMDFGQywKKzB4NkQxQzJENzAsIDB4REU2RDFGRDQsIDB4MzJEMzYyN0QsIDB4QTMyQThCMDEsCisweDY3N0QwMDA5LCAweDY2NzM2NUUzLCAweDYxNzM3NTA0LCAweDMxNUMzNkVDLAorMHg2OTEyNjQ2MiwgMHhBRkVGNzcwOCwgMHg4ODA0MjQ5MiwgMHhFMDE0OEIxOCwKKzB4RTQwMDAxRkMsIDB4NjcxQzJENDAsIDB4NjI0RERFNjAsIDB4OEIwMTMyNzMsCisweDAwMDlBMzExLCAweDY5NDM2NDRELCAweDM5RUM2MkUzLCAweDcyMDQ2NTkyLAorMHgzRDJDNkQ0MywgMHg2MTUyNjZEMiwgMHgyMTY5NzQwOCwgMHgyNTEyQUZFRCwKKzB4OEIxODg4MDUsIDB4MDFGQ0UwMTQsIDB4MkQ0MEU0MDAsIDB4REU1MzY3MUMsCisweDMyNzM2MjRELCAweEEyRjY4QjAxLCAweDY0NEQwMDA5LCAweDYyRTM2OTQzLAorMHg2NTkyMzlFQywgMHg2RDQzNzIwNCwgMHg2NkQyM0QyQywgMHg3NDA4NjE1MiwKKzB4QUZFRDIxNkIsIDB4ODgzMTI1MTIsIDB4RDQ0QThCM0EsIDB4NjE0NkQ5NEEsCisweDc1MDQ2NTQzLCAweDY3NTY2NDQyLCAweDZFNTMxRjQ4LCAweDY1NTI3RTA0LAorMHg3RUU0NjJFMiwgMHg3RTA0NjRFMiwgMHg2RUUyMUZFOSwgMHg1RUY5MjlFMCwKKzB4N0UwNEQ5NDIsIDB4MUZFQTYwRTIsIDB4MjkwMEM5MDEsIDB4RDk0MDZFRTIsCisweDI5RTA0RTA5LCAweDJGNTYyRjI2LCAweDU2RkFEOTNFLCAweDY1MTM0OTBCLAorMHhEMTNEN0YwOCwgMHhFNzFDNkUwRCwgMHgxREUxMkQ3MCwgMHhERTNCNjkxMiwKKzB4NjRFMjFEOTIsIDB4MUQ0M0QxM0EsIDB4RDIzQTY1MTIsIDB4NjcyMjFENTQsCisweDFENzVEMjM5LCAweDFENjY2NjIyLCAweDYyNjJENjM4LCAweDFEMjdBMkFCLAorMHg4QjM5ODgzMCwgMHg2NTk2RDkyQiwgMHg2NzkyNjY5NiwgMHg2MTk2NzkwNCwKKzB4NzRFNDY0OTMsIDB4NkU0MzY5OTIsIDB4MUY5QjdFMDQsIDB4MUZFQzY0NDIsCisweEQ5MjU2RUUyLCAweDVFRkMyOUUwLCAweDdFMDREOTI0LCAweDFGRUQ2MEUyLAorMHgyOTAwQzkwMSwgMHhEOTIyNkVFMiwgMHgyOUUwNEUwOSwgMHg1OUZDN0ZGQywKKzB4REUyNzJGOTIsIDB4MkYxNjRFMEIsIDB4RDQxRjdGMDgsIDB4RTIxQzYxMEQsCisweDFEMTEyRDIwLCAweEQyMjA2NDQyLCAweEQ0MUMxRDQyLCAweDFENTM2NTQyLAorMHg2NzUyRDUxQiwgMHhENzFCMUQ3NCwgMHgxRDE1NjE3MiwgMHgxRDY2NjYyMiwKKzB4NjI2MkQ2MUEsIDB4MUQyN0EyNkYsIDB4OEIzNTg4MzMsIDB4NDkwQkQ5MTksCisweEEyNjhFRTAwLCAweDAwMDAyREUwLCAweDAwMTE3ODAwLCAweDAwMjAzQTFDLAorMHgwMDIwMThBMiwgMHgwMDIwMkFBQywgMHgwMDIwMzkwRSwgMHgwMDIwM0EyMCwKKzB4MDAyMDM1MzQsIDB4MDAyMDE4RUUsIDB4MDAyMDM5MEQsIDB4MDAxMTc4MDQsCisweDAwMjAzOThDLCAweDAwMTE3ODEwLCAweDAwMjAzOTA5LCAweDAwMjAzOTBBLAorMHgwMDIwMzkwQiwgMHgwMDIwMEY2NCwgMHgwMDFDNTg2NCwgMHgwMDFDNjg2NCwKKzB4MDAxQzc4NjQsIDB4MDAxQzU5QkMsIDB4MDAxQzY5QkMsIDB4MDAxQzc5QkMsCisweDAwMjAwRkJDLCAweDAwMjAwRkI4LCAweDg5MDE4ODI4LCAweDAwMDlBMEMwLAorMHhFNjQzREVCNSwgMHgzMjY2NjJFMSwgMHgxRkVFOEYwMiwgMHgyRTIxRTI0MCwKKzB4NjIyRDYyRTEsIDB4OEIwMTMyNjcsIDB4MDAwOUEwQUEsIDB4RTUwMTg1RTEsCisweDhCMDEzMDU2LCAweDAwMDlBMEE0LCAweDJEMTBFMTAxLCAweDY0RTFCMjI1LAorMHhFNjQzNTdGRSwgMHg2NTJENjI3MSwgMHg4OTQ0MzU2NywgMHgzNTYzRTY0MCwKKzB4RTYwMDhCMDUsIDB4MEY2NUUwNDAsIDB4QTAwRkUxMUEsIDB4NjE1MzcyQzAsCisweDQxMjE0MTIxLCAweDQxMjE0MTIxLCAweDQ1MjE0MTIxLCAweDQ1MjE0NTIxLAorMHhDOTAzNjA1MywgMHhFMDQwNjYwMywgMHg3MTE4MEY2NSwgMHgyMjA5RTAwNywKKzB4MEYyNUUwM0MsIDB4RTA0NDY0MUQsIDB4QjJBMzY1RjMsIDB4RTMzQzBGNDYsCisweDg1MzIzM0ZDLCAweDYyMERERTk1LCAweDQyMDg2MDMxLCAweDYwMjM2MTBELAorMHgxMzIzRTk0NCwgMHgwNkZFNDEwOCwgMHhFMDBGMzlGQywgMHgxMzE0NEUwQiwKKzB4NjcwNzVEOTEsIDB4NjBEMzI2NzksIDB4MEY2NjU0RkUsIDB4NTE5Mjg1NDIsCisweDYwMEQ0RTBCLCAweDYwRDMyNjBCLCAweDBGNjY2NDkyLCAweDY1RjNCMjM3LAorMHg2OTYxNTZGRSwgMHhFNjQwNjU5RCwgMHg4OTM4MzU2MywgMHhENzgzNTlGRSwKKzB4NzkwNjY1OTEsIDB4QzkwMzYwNTMsIDB4NDAwMDQwMDgsIDB4NjEwMzYyMDMsCisweDBGMjZFMDUwLCAweDQ3MEJFMEZGLCAweDZDMDc2MDBDLCAweDY2MDM2MDVELAorMHg0NjIxNDYyMSwgMHg0NjIxNDYyMSwgMHg0MjAwNjI2MywgMHg0MjAwMzI2QywKKzB4NDAyMTQwMjEsIDB4NDAwOEM5MDMsIDB4NkQyRDMwRkMsIDB4RTgwMDZBMDMsCisweEIyNTc2NUYzLCAweDZFQTI2NEQzLCAweDJFQzlFMDUwLCAweDY2OTQyQUUyLAorMHhENzZFMDFGRSwgMHg2MDZDNDcwQiwgMHgyQUUyMkUwQiwgMHg2NEQzNjVGMywKKzB4NzgwMUIxRkQsIDB4RUUwNjYyOEQsIDB4OEZFOTMyRTMsIDB4NUVGRTdEMDEsCisweDYxRTFFNDAwLCAweDQxMDA4NUUxLCAweDY2RTMzMTBDLCAweDc2MEM3MTFCLAorMHhFNzA0NjVGMywgMHg2ODY2NzQwMSwgMHgzQTczNkE0RCwgMHg4RkY5MjU4MiwKKzB4NjVGMzc1MDQsIDB4NjQxREIxRTMsIDB4NjRFMUIxQTQsIDB4MDAwOUExN0IsCisweEQ0NUI1NkY3LCAweEVDMDFEMjVCLCAweDI2QzA0MjBCLCAweDAwMDlBMTczLAorMHgwNkZDRTAxOCwgMHg4ODI5NjA2QywgMHg1OEY3OEIwOCwgMHhFNDAwRDI1MiwKKzB4NjYyMjI4NDAsIDB4NjQ2REIxNzEsIDB4MDAwOUExNjUsIDB4NjY2Q0U2ODEsCisweDg5MDEzMDYwLCAweDAwMDlBMEFDLCAweEQ1NTBEMTRGLCAweDYyMTI2QTU2LAorMHgyMTIyMzJBQywgMHg1NDExNkM1NiwgMHgzNENDNjI1MywgMHg2NDUyMTE0MSwKKzB4NzIwODU4MTIsIDB4RDQ0QTM4NEMsIDB4NjgyMjExODIsIDB4NUExMzZDNDIsCisweDNBQ0MzQzhDLCAweDExQTMyNEMyLCAweDZDMjI3MkVDLCAweDcyMTA1ODE0LAorMHgxMTg0MzhDQywgMHg1QTE1NjgyMiwgMHgxMUE1M0E4QywgMHg2QTIyNzIxMCwKKzB4RDY0MDU4MTYsIDB4MTE4NjM4QUMsIDB4NTIxNzZDNjIsIDB4MTEyNzMyQ0MsCisweDVBMTg1ODYxLCAweDExQTgzQThDLCAweDVDMTk1QTYyLCAweDExQzkzQ0FDLAorMHg1MjFBNUM2MywgMHgxMTJBMzJDQywgMHg1QTFCNTg2NCwgMHgxMUFCM0E4QywKKzB4NUMxQzVBNjUsIDB4MTFDQzNDQUMsIDB4NTIxRDVDNjYsIDB4MTEyRDMyQ0MsCisweDVBMUU1ODY3LCAweDExQUUzQThDLCAweDU2MUY1QTY4LCAweDM2QUNFODQwLAorMHgxMTZGREEyRCwgMHg2Q0EyMzgxQywgMHg3QTk0NjY4MiwgMHgyODYyMzZDQywKKzB4NUM4MTYyQTIsIDB4MThDMTNDMkMsIDB4NjJBMjdBNDQsIDB4MzYyQzU2ODIsCisweEQ2MjYxODYyLCAweDVBODU2MjYyLCAweDNBMkM0MjI5LCAweDc2MDQxOEE1LAorMHg1Njg2NjI2MiwgMHgzNjJDNDIyOSwgMHg1NkY3MTg2NiwgMHgyNjIwRTIzOCwKKzB4MTZDMTVDODEsIDB4MTYyMjYyMTIsIDB4RTIwMDVDMTEsIDB4NTUxMjE2QzMsCisweDU1MTUxNjU0LCAweDU1MTMxNjU1LCAweDU1MTYxNjU2LCAweDU1ODIxNjU3LAorMHg2NTgyMTY1OCwgMHg1NTE0MTY1OSwgMHg1NTg0MTY1QSwgMHg1NTgzMTY1QiwKKzB4NTU4NTE2NUMsIDB4NTU4NjE2NUQsIDB4MTgyMTE2NUUsIDB4MTEyMTIxMjIsCisweDExMjUxMTIyLCAweDExMjYxMTIzLCAweDI4MjIxODIyLCAweDE4MjQxMTI0LAorMHgxODI1MTgyMywgMHgxODI2QTBDNywgMHgwMDExNzgwNCwgMHgwMDIwMzNFOCwKKzB4MDAyMDNBNDAsIDB4MDAyMDE4QTIsIDB4MDAyMDM0OTQsIDB4MDAxQzM2QTAsCisweDAwMjAzNEYwLCAweDAwMUMzQ0EwLCAweDAwMUMzNkY0LCAweDAwMUMzQjg4LAorMHg2NjZDRTY4MiwgMHg4QjIwMzA2MCwgMHhFQTI0NTZGNywgMHgyNkEwRDE5NCwKKzB4MTZDMTVDMTcsIDB4MTYyMjUyMTgsIDB4MTY4MzU4MTksIDB4MTZBNDVBMUEsCisweDE2QzU1QzFCLCAweDE2MjY1MjFDLCAweEUyMDA1ODFELCAweDU1MUUxNjg3LAorMHg1NTFGMTY1OCwgMHgxMTI3MTY1OSwgMHgxMTI5MTEyOCwgMHgxMTJCMTEyQSwKKzB4MTEyRDExMkMsIDB4QTA4RTExMkUsIDB4RTY4MzExMkYsIDB4MzA2MDY2NkMsCisweDUyRjc4QjBCLCAweEVBMDBEODgzLCAweDY1ODIyMkEwLCAweDc4MDREQzgyLAorMHg2MjgyMkM1MiwgMHhBMDdFRDY4MSwgMHhFNjkwMjYyMCwgMHgzMDYwNjY2QywKKzB4REE3RjhCMDYsIDB4MDAwOTRBMEIsIDB4RTIwMDU2RjcsIDB4MjYyMEEwNzMsCisweDY2NkNFNjkxLCAweDhCMTAzMDYwLCAweDYyMjJEMjc2LCAweDIyMjg2MjJDLAorMHhEMjc4ODkwNCwgMHgwMDA5NDIwQiwgMHgwMDA5QTAwMywgMHg0MjBCRDI3NiwKKzB4NTZGNzAwMDksIDB4QTA1RUUyMDAsIDB4RTY5MjI2MjAsIDB4MzA2MDY2NkMsCisweEUwMTg4OTUxLCAweEU2QjAwQkZDLCAweDY2NkM2MkJDLCAweDhCMkEzMjYwLAorMHgwMkZDRTAxNCwgMHg2ODJDRUEwMCwgMHg2MkFERTkwNCwgMHg4OTRBMzI4MywKKzB4NkFBRERENjQsIDB4M0NEQzZDQTMsIDB4N0QwNDZFQzIsIDB4REI2OEQ0NjcsCisweDMyREM2MkEzLCAweDRCMEJEQzY3LCAweDRDMEI2RDIyLCAweEQ0NjY2NEUzLAorMHgwMDA5NEIwQiwgMHg2NEQzNEMwQiwgMHg0QjBCRDQ2NCwgMHhFNjAwMDAwOSwKKzB4NjY2RDZCRTMsIDB4NzYwMTNCNkMsIDB4MzI5MzYyNkQsIDB4OEZGNzJCRDAsCisweEFGREE0RDE5LCAweEU2QjU3QTA4LCAweDMyNjA2NjZDLCAweEQ0NUM4QjEzLAorMHg0QjBCREI1NywgMHhEMjVCMDAwOSwgMHg2MDIyREI1QiwgMHhDQjIwRTZGRiwKKzB4MjIwMjY2NkQsIDB4REI1OTJCNjIsIDB4RTAxNEUyMDAsIDB4NTZGNzJCMjAsCisweEEwMTAwMkZDLCAweEQ0NTYyNjIwLCAweDY1NDJEMjU2LCAweDQyMEJENDU2LAorMHhBMDA4MDAwOSwgMHhEQjUyMDAwOSwgMHg1MkIxRTYwMCwgMHg2MjJDREI1MywKKzB4NTJGNzJCMjEsIDB4N0Y1NDIyNjAsIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsCisweDZBRjY2QkY2LCAweDAwMEI2OUY2LCAweDRGMjI2OEY2LCAweEUyNDA2MTRELAorMHg4OTE0MzEyMywgMHgzMTI3RTIxRiwgMHg4QjA5RDc0OSwgMHhENDQ5NjE0RCwKKzB4RTAwMTcxRTAsIDB4NTY3MTQ0MEIsIDB4MjY1OTY1MDcsIDB4MTc2MUEwMDcsCisweEUwMDFENDQ0LCAweDY2NzI0NDBCLCAweDI2NTk2NTA3LCAweDRGMjYyNzYyLAorMHgwMDA5MDAwQiwgMHg2MTRENEYyMiwgMHgzMTIzRTI0MCwgMHhFMjFGODkxMiwKKzB4RDczQjMxMjcsIDB4NjE0RDhCMDgsIDB4NTY3MUQyM0EsIDB4NDIwQjcxRTAsCisweDI2MEJFMDAxLCAweDE3NjFBMDA2LCAweDY2NzJEMjM2LCAweEUwMDE0MjBCLAorMHgyNzYyMjYwQiwgMHgwMDBCNEYyNiwgMHhFNjQwMDAwOSwgMHg0NjI4NDYxOCwKKzB4NjI1MkQ1MzEsIDB4ODlGQzIyNjgsIDB4MDAwOTAwMEIsIDB4NDYxOEU2ODAsCisweEQ1MkQ0NjI4LCAweDIyNjg2MjUyLCAweDAwMEI4OUZDLCAweEEwMDEwMDA5LAorMHg3MjAxRTIwMCwgMHg4QkZDMzI0MiwgMHgwMDA5MDAwQiwgMHg0NjE4RTY4MCwKKzB4RDUyNjQ2MjgsIDB4MjI2ODYyNTIsIDB4MDAwQjhCRkMsIDB4MkZFNjAwMDksCisweDdGRkM0RjIyLCAweEJGRjE2RTUzLCAweDYxRTIyRjQyLCAweEUyODBENjIwLAorMHg1NEUxMTYxNSwgMHgxNjQ2NDIxOCwgMHg0MjI4NTVFMiwgMHg1N0UzMTY1NywKKzB4MTY3ODZFRjIsIDB4MjZFMjJFMkIsIDB4NEYyNjdGMDQsIDB4NkVGNkFGQ0UsCisweDAwMjAzNDk0LCAweDAwMTE3ODA0LCAweDAwMjAzOEY0LCAweDAwMjAzOTA4LAorMHgwMDIwMDUwQSwgMHgwMDIwMTAwOCwgMHgwMDIwMTAyRSwgMHgwMDIwM0E1OCwKKzB4MDAyMDE4QTIsIDB4MDAyMDE4RTYsIDB4MDAyMDNBNkMsIDB4MDAyMDNBNzQsCisweDAwMjAzQTc4LCAweDAwMUMzNTAwLCAweDAwMUMxMDAwLCAweDAwMjAzOThBLAorMHgwMDExNzgwMCwgMHgwMDIwMThFRSwgMHgwMDIwM0E4QywgMHgwMDIwMzk5MCwKKzB4MDAxQzM3MDQsIDB4MDAyMDMzRTgsIDB4MDAxQzM3M0MsIDB4MDAxQzM3MDAsCisweDAwMUMzNzBDLCAweDJGRDYyRkM2LCAweDRGMjIyRkU2LCAweDZDNTNERDEwLAorMHg2RTQzQkZBNCwgMHgyREUyQkY4OSwgMHgwMDA5QkZBMCwgMHgyQzEyNTFENSwKKzB4MUM0MTU0RDYsIDB4MUM1MjU1RDcsIDB4MUM2MzU2RDgsIDB4NkVGNjRGMjYsCisweDAwMEI2REY2LCAweDYxNjM2Q0Y2LCAweEEwMDRFNjAwLCAweDYyNTY0MTA5LAorMHgyNDIyNzYwMSwgMHgzNjEyNzQwNCwgMHgwMDBCOEJGOSwgMHgwMDAwMDAwOSwKKzB4MDAxQzM3MEMsIDB4MDAwOUExNkUsIDB4MkZFNjJGRDYsIDB4REQ5NDRGMjIsCisweEEwMDQ5RUIyLCAweEQ0OTMwMDA5LCAweDQyMEJEMjkzLCAweDYyRDI2NUQyLAorMHg4QkY4MjJFOCwgMHgwMDA5QTAwNCwgMHhEMjhGRDQ5MCwgMHg1NUQxNDIwQiwKKzB4MjJFODUyRDEsIDB4QTAwNDhCRjgsIDB4RDQ4RDAwMDksIDB4NDIwQkQyOEEsCisweDUyRDI1NUQyLCAweDhCRjgyMkU4LCAweDAwMDlBMDA0LCAweEQyODZENDg5LAorMHg1NUQzNDIwQiwgMHgyMkU4NTJEMywgMHhBMDA0OEJGOCwgMHhENDg2MDAwOSwKKzB4NDIwQkQyODEsIDB4NTJENDU1RDQsIDB4OEJGODIyRTgsIDB4NkVGNjRGMjYsCisweDZERjYwMDBCLCAweDJGRDYyRkM2LCAweDRGMjIyRkU2LCAweDZFNjM2QzczLAorMHg2RDUzQjAxQSwgMHg2NEQzNTdGNCwgMHhCMDVGNjVFMywgMHhCMDc1NjZDMywKKzB4QjBBNDAwMDksIDB4QjBBODAwMDksIDB4QjBBQzAwMDksIDB4QjBBQzAwMDksCisweEIwQUYwMDA5LCAweEIwMzE1NEY1LCAweDZDQ0Q2QzAzLCAweDRGMjY2MEMzLAorMHg2REY2NkVGNiwgMHg2Q0Y2MDAwQiwgMHgzNDEyRDE3MCwgMHhENjcwMDUyOSwKKzB4MjY1MEQ3NzAsIDB4Mjc0MjAwMEIsIDB4MDAwOUEwMTgsIDB4MkZENjJGQzYsCisweDRGMjIyRkU2LCAweDZFNjM2QzczLCAweDZENTNCRkVFLCAweDY0RDM1N0Y0LAorMHhCMDMzNjVFMywgMHhCMDhENjZDMywgMHhCMDBGNTRGNSwgMHg2Q0NENkMwMywKKzB4NEYyNjYwQzMsIDB4NkRGNjZFRjYsIDB4NkNGNjAwMEIsIDB4RTUwM0QxNjIsCisweEQ3NjNENDYyLCAweDIxNTI0NTE4LCAweDI0NzIwMDBCLCAweEQ0NUZEMTVFLAorMHgyMTYyRTYwMCwgMHgyNDYyMDAwQiwgMHhCRjczNEYyMiwgMHhCRjczRTQwQSwKKzB4RDI1QzAwMDksIDB4NDExOEUxMDQsIDB4RTQwQUU1MDAsIDB4QkY2OTIyMTIsCisweEQ3NTkyMjUyLCAweENCMjA2MDcyLCAweDAwMEI0RjI2LCAweDRGMjIyNzAyLAorMHg0MTBCRDE1NiwgMHhENTU2RTQwMCwgMHg0RjI2NDUyQiwgMHhEMTU1MkZFNiwKKzB4NjYxMjZFNjMsIDB4OTIxMDQ0MTgsIDB4NDQwODQ1MjgsIDB4NDUwMDI2MjksCisweDI2NUI0NDA4LCAweDI2NEI0NDAwLCAweDIxNjI0NzA4LCAweEQxNEU0NzA4LAorMHgyMTcyMjdFQiwgMHg2RUY2MDAwQiwgMHgxRkZGMDNGMCwgMHg0RjIyMkZFNiwKKzB4RTEwMURFNEEsIDB4QkYzREU0MEEsIDB4NjdFMzJFMTIsIDB4RTUwMDc3NkMsCisweEUyMDRFMTMwLCAweDI3NTJFNDBBLCAweDI3NTIyNzUyLCAweDI3NTIyNzUyLAorMHgyNzUyMjc1MiwgMHgyNzUyMjc1MiwgMHgyNzUyMjc1MiwgMHgyNzUyMjc1MiwKKzB4Mjc1MjI3NTIsIDB4Mjc1MjI3NTIsIDB4Mjc1MjI3NTIsIDB4MjcyMjI3MTIsCisweDI3NTIyNzUyLCAweDI3NTIyNzUyLCAweDI3NTIyNzUyLCAweDI3NTIyNzUyLAorMHgxNzVBQkYxOCwgMHgyRTYyRTYwMCwgMHgwMDBCNEYyNiwgMHhEMjM0NkVGNiwKKzB4RTQ0MUUxMDEsIDB4MDAwQjIyMTIsIDB4RDEzMjIyNDIsIDB4RTYwNUQ0MzIsCisweDAwMEIyMTYyLCAweDAwMEIyNDYyLCAweEQyMzAwMDA5LCAweEU0MEFFNjAxLAorMHgyMjYyQUYwMCwgMHgyRkM2MkZCNiwgMHgyRkU2MkZENiwgMHg3RkZDNEYyMiwKKzB4NkM0M0RCMkIsIDB4RUQwMDYwQjIsIDB4MkIwMkNCMDMsIDB4QzkwMzYwQjIsCisweDZFMDNBMDA4LCAweDg5MDczREMyLCAweEU0NjQ2MEIyLCAweEIwN0NDOTAzLAorMHg3RDAxNkUwMywgMHg4QkY1MkVFOCwgMHg4RjA0M0RDMiwgMHhENDIxMkZFMSwKKzB4NDYwQkQ2MjEsIDB4NjJGMTAwMDksIDB4NjAyMzYyMkQsIDB4ODlGRkM4MDEsCisweDdGMDQ2MDIzLCAweDZFRjY0RjI2LCAweDZDRjY2REY2LCAweDZCRjYwMDBCLAorMHgwMDFDM0I4OCwgMHgwMDIwM0FBMCwgMHgwMDIwMThFRSwgMHgwMDIwM0FBOCwKKzB4MDAyMDNBQjAsIDB4MDAyMDNBQjgsIDB4MDAyMDNBQzAsIDB4MDAyNUU3MjAsCisweDAwMjAzREEwLCAweDAwMjAzOEY4LCAweDAwMUM1OTY4LCAweDAwMUMzQjQwLAorMHgwMDBGODAwMCwgMHgwMDFENDAwNCwgMHgwMDFDMzUwMCwgMHgwMDIwMTVFMCwKKzB4MDAyMDE2MEMsIDB4MDAxQzU4MTQsIDB4MDAxQzU5RDAsIDB4MDAxQzU4MzAsCisweDAwMUM2MjY4LCAweDAwMUM1OUE0LCAweDAwMUM2MzlDLCAweDAwMUM1ODFDLAorMHgwMDFDNTg2MCwgMHgwMDIwM0FDOCwgMHgwMDIwMThBMiwgMHg4RjAxNDQxMSwKKzB4NjA0MzYwNEIsIDB4MDAwOTAwMEIsIDB4NTY1MUQ1MkIsIDB4NDYyODYwNTIsCisweDMwNkMwMDBCLCAweDJGQzYyRkI2LCAweDJGRTYyRkQ2LCAweDRGMTI0RjIyLAorMHhCRkYxNEYwMiwgMHg2QjAzNkU0MywgMHhERDI1REMyNCwgMHgwMDA5QkZFQywKKzB4M0MwNTMwQjgsIDB4NDYwOTA2MEEsIDB4NDYwMTQ2MDksIDB4MDIwQTNENjUsCisweDQyMDk0MjA5LCAweDMyRTI0MjA5LCAweDRGMDY4QkYwLCAweDRGMjY0RjE2LAorMHg2REY2NkVGNiwgMHgwMDBCNkNGNiwgMHgyRkM2NkJGNiwgMHgyRkU2MkZENiwKKzB4NEYxMjRGMjIsIDB4QkZDRjRGMDIsIDB4NkMwMzZFNDMsIDB4QkZDQkREMTMsCisweDMwQzgwMDA5LCAweDA2MEEzRDA1LCAweDQ2MDk0NjA5LCAweDM2RTI0NjAxLAorMHg0RjA2OEJGNSwgMHg0RjI2NEYxNiwgMHg2REY2NkVGNiwgMHg2Q0Y2MDAwQiwKKzB4NEYyMjJGRTYsIDB4RTEwMkRFMEIsIDB4RTQwM0U1MDAsIDB4QkZCOTJFMTIsCisweEU2MDYyRTUyLCAweEU3MDA0NjE4LCAweDJFNjJFNDAzLCAweDRGMjYyRTcyLAorMHg2RUY2QUZCMCwgMHgwMDA5MDAwQiwgMHgwMDFDMTA0MCwgMHhDQ0NDQ0NDRCwKKzB4MTA2MjRERDMsIDB4MDAxRDQwMDQsIDB4MkY5NjJGODYsIDB4MkZCNjJGQTYsCisweDJGRDYyRkM2LCAweDRGMjIyRkU2LCAweEU1MDA3Rjk4LCAweDY0NTNFNzEwLAorMHg2QjUzNDcyOCwgMHhFRTFBRENCQywgMHg2MTUzNjU1RCwgMHgzMTVDNDEwOCwKKzB4NzUwMTQxMDgsIDB4NjA0MzMxN0MsIDB4MEYxNjY2NUQsIDB4RUQwMDYwQjMsCisweDIxQjEzNkUzLCAweDgxMTI4MTExLCAweDExRDI4MTEzLCAweDExRDQxMUQzLAorMHg3NDA0OEZFQSwgMHhEOEIxNjdGMiwgMHgxODcxRDlCMSwgMHg1OEYxMjg3MiwKKzB4MTk4MUQxQjAsIDB4NTlGMjI5ODIsIDB4NURGNDVBRjMsIDB4NTRGNjVFRjUsCisweDIxOTIxMTkxLCAweDExQTIxMUEzLCAweDExRDQxMUQ1LCAweDExRTYxMUU3LAorMHgxMTQ4MTE0OSwgMHhEQUE4NTVGNywgMHg1N0Y4RUUwMCwgMHg1MkY5RERBNywKKzB4NjRFM0Q2QTcsIDB4MkE1MjFBNTEsIDB4RDhBN0Q5QTYsIDB4MkQ3MjlBRDUsCisweDZFRUQyNjIyLCAweDREMDg2REUzLCAweDNERUM2MUUzLCAweDREMDg0MTA4LAorMHgzRDlDMzFFQywgMHg0MTA4NjBCMywgMHg4MUQxMkRCMSwgMHg0MTA4RTA1MCwKKzB4NDAwOEU3QjcsIDB4Njc3QzQxMDgsIDB4NjBCMzgxRDIsIDB4RTIwMDMxOEMsCisweDgxRDMzNDcyLCAweDFEMTMxREQyLCAweDhEMDFENDkzLCAweEQ0OTAxRDI0LAorMHhCMEIzNjVEMywgMHg2NEVEN0UwMSwgMHg4QkRBMzRBMiwgMHgyRkQyREE4QywKKzB4REQ5MjY4QTIsIDB4MkQ4MjQ4MjksIDB4N0RGQzY0QTIsIDB4RDI4NzY5NEQsCisweDZFMjIyRDkyLCAweDdEMEM0RTI5LCAweDY4MjIyREUyLCAweDYxOEQ2QUQzLAorMHgyQTE2RDc4NCwgMHhENDhBNkQ3MiwgMHgyNEQyRDU4MywgMHhENjg5NUU3MiwKKzB4NTE3NDE0RTIsIDB4MTQxNEVFMDAsIDB4RDE4NzU4NzYsIDB4NTk3ODE0ODYsCisweDE0OThFNzEwLCAweDY1RTM2MjUyLCAweDI2RTIxNDJBLCAweEU2MDA2NEUzLAorMHg2ODQzNjQ0RCwgMHgzODRDNDgwOCwgMHgzODFDNDgwOCwgMHgwQzg2NjA1MywKKzB4MDlDRTI4QjEsIDB4ODE5MTYwQjMsIDB4MEFDRTYwNTMsIDB4ODFBMjYwNDMsCisweDBEQ0U2MDUzLCAweDgxRDM2MEIzLCAweDA4Q0U2MDUzLCAweDE4ODI3NDAxLAorMHg2MjREMDlDRSwgMHgwQUNFMTlFMywgMHgxQTY0MzI3MywgMHg3NTA0OEZFMCwKKzB4RTAwM0Q5NkEsIDB4NDAxODZDOTIsIDB4NkQ5MjJDQjEsIDB4ODFEMURBNkYsCisweDZFOTJFMDUwLCAweDgxRTI0MDA4LCAweDYwQjM2MTkyLCAweDY0OTI4MTEzLAorMHgxNDQyRTYwMCwgMHhENDY5Njc5MiwgMHg2ODkyMTdBMywgMHgxODY0RTFGRiwKKzB4NjU2M0U3MDMsIDB4MzY0QzQ2MDgsIDB4MjYxMjc1MDEsIDB4MzY3MzY2NUQsCisweERDNUI4QkY4LCAweDZEQzJFMDAzLCAweDJEQjE0MDE4LCAweEQyNjA2RUMyLAorMHg2MUMyODFFMSwgMHgxMTEyRUUwMCwgMHhFMDI0NjRDMiwgMHg2NUMyMTQyMywKKzB4MTVFNEQ0NUIsIDB4RTU4MDY3QzIsIDB4NjhDMjgxNzIsIDB4ODE4MzY2RTMsCisweDY2NkQ2NTVDLCAweDc2MDQ2OTYzLCAweDM5NEM2QTZELCAweDhGRjgzQTUzLAorMHhEQjU0MjlFMiwgMHgyNEIyREM1NCwgMHgyNEMyNzQwNCwgMHg0RjI2N0Y2OCwKKzB4NkRGNjZFRjYsIDB4NkJGNjZDRjYsIDB4NjlGNjZBRjYsIDB4NjhGNjAwMEIsCisweDYwMTE2MTQyLCAweDhGMDNDODAzLCAweEQyM0RFNTAwLCAweDhCMDYzNDIwLAorMHhDOTAzNjAxMSwgMHg4QjA2ODgwMiwgMHgzNDIwRDIzOSwgMHg1NjEyOEIwMywKKzB4NTI2NDY1MTMsIDB4MDAwQjI0MjIsIDB4MDExMzYwNTMsIDB4MkZFNjJGRDYsCisweDdGRUM0RjIyLCAweDYyNTM2RTUzLCAweDZENDNFNTUwLCAweDQ1MDhFNDAwLAorMHhFMTAxQTAwMSwgMHg2MDQzNTIyNCwgMHg4MTIxMjIxMSwgMHg2MDUzODEyMywKKzB4NTZFMjgxMjIsIDB4OEJGNTM2MjAsIDB4MTZFNEQyMzgsIDB4RTYxNDY0RjMsCisweDY1RTM0MjBCLCAweEU0RkM2NUUxLCAweDJFNTEyNTQ5LCAweDY1RjM2MUYxLAorMHgyRjExMjE0OSwgMHhEMTMxNTREMSwgMHhFNjE0NDEwQiwgMHg2MDcxNTdEMSwKKzB4MjcwMUNCMDEsIDB4N0YxNDFERTEsIDB4NkVGNjRGMjYsIDB4NkRGNjAwMEIsCisweDJGRTYyRkQ2LCAweDdGRUM0RjIyLCAweDY2NTM2RTUzLCAweDZENDNFNUZDLAorMHgyMDU5NjA2MSwgMHgyNjAxQ0IwMSwgMHgzMjYwNTJFMiwgMHgxMkU0OEIwNiwKKzB4MzFFMDUxRTIsIDB4NTJEMThCMDQsIDB4MUUyMkEwMDIsIDB4NTY2NEFGRjAsCisweDY0RjNEMjFFLCAweDQyMEJFNjE0LCAweDY3RTE2NUUzLCAweDI3MTlFMUZDLAorMHg2N0YxMkU3MSwgMHgyNzE5NTREMSwgMHg2NUYzRDExOCwgMHg0MTBCRTYxNCwKKzB4NTJEMTJGNzEsIDB4Q0IwMTYwMjEsIDB4MURFMTIyMDEsIDB4NEYyNjdGMTQsCisweDAwMEI2RUY2LCAweDAwMDA2REY2LCAweDAwMjAzOTI0LCAweDAwMjAzNEY0LAorMHgwMDIwMzRGQywgMHgwMDIwMzUwNCwgMHgwMDIwMzUyQywgMHgwMDIwMzkxMCwKKzB4MDAyMDM5MTgsIDB4MDAxMDAyMDgsIDB4MDAxMDE3QzAsIDB4MDAxRTIxMEMsCisweDAwMUMzRDAwLCAweDAwMjAzOTY0LCAweDAwMTAwMEM4LCAweDAwMTE3ODgwLAorMHgwMDExNzc4MCwgMHgwMDA0MDAyMCwgMHgwMDI2QzQwMSwgMHgwMDIwMEVENiwKKzB4NEYyMjJGRTYsIDB4REU0MjYyNEMsIDB4NDIwMDQyMDgsIDB4M0UyQ0EwMDUsCisweEQ0NDA1MjUyLCAweEJGNjk1NjI0LCAweDY1RTIyRTYyLCAweDM1MjA1MkUxLAorMHhENjNEOEJGNiwgMHg0RjI2MjYyMiwgMHg2RUY2MDAwQiwgMHgyRkM2MkZCNiwKKzB4MkZFNjJGRDYsIDB4REMzOTRGMjIsIDB4NTJDMURCMzksIDB4MzYyMDY2QzIsCisweDYwNjE4OTFDLCAweDg4MDFDOTAzLCAweERFMzQ4OTE4LCAweEJGMzdERDM1LAorMHg2NTAzNjRFMywgMHg2NkIyODUwMywgMHgzMjYyNjIwRCwgMHhENDMyODkwNywKKzB4MDAwOUJGNzYsIDB4NEQwQkQ0MzEsIDB4QUZFNjAwMDksIDB4QkYzRDAwMDksCisweEQ0MkY2NEUzLCAweDAwMDk0RDBCLCAweDAwMDlBRkRGLCAweDIyNjJEMjJELAorMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwgMHg2QkY2MDAwQiwgMHgyRkQ2MkZDNiwKKzB4NEYyMjJGRTYsIDB4REQyOURDMjgsIDB4NkU0MzYwQzIsIDB4MDRERTQwMDgsCisweEU2MTREMTI3LCAweDY1RTM0MTBCLCAweEQxMjdENzI2LCAweDU1RTIyN0UyLAorMHgzNUUwNTI1NCwgMHgyMTIyOEYwNCwgMHg0MDA4NjBDMiwgMHgxMjIyMDJERSwKKzB4NjA1MzY1QzIsIDB4NzUwMTQwMDgsIDB4MERFNjA2REUsIDB4QzkwRjYwNTMsCisweDYwNjMyQzAyLCAweDZFRjY0RjI2LCAweDAwMEI2REY2LCAweDg1NDM2Q0Y2LAorMHg2NTBENTY0MywgMHg2MjJENjI2MiwgMHgzNTI3NzIwNCwgMHhFMTAwOEYwQywKKzB4MjI2ODk2MEMsIDB4RDYxNThCMDMsIDB4NzIwMTUyNjEsIDB4RDYxMzE2MjEsCisweDYyNjJFMTAxLCAweDI2MjI3MjAxLCAweDYwMTMwMDBCLCAweDAwMDAwMUZGLAorMHgwMDIwMzUwNCwgMHgwMDIwMzRGQywgMHgwMDFDM0QwMCwgMHgwMDIwMzUyQywKKzB4MDAyMDM4RjQsIDB4MDAyMDE4QTIsIDB4MDAyMDM0RjQsIDB4MDAyMDNBRjAsCisweDAwMjAzQUY0LCAweDAwMUMzRDI4LCAweDAwMjAzOTY0LCAweDAwMjAzOTI0LAorMHgwMDIwMEVENiwgMHgwMDIwMzk2OCwgMHgwMDIwMzk2QywgMHgwMDExNzc1NCwKKzB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsIDB4N0ZGODRGMjIsIDB4NjAyMkQyMzcsCisweDhENThDODAzLCAweERFMzYyRjAxLCAweERCMzdEQzM2LCAweDY2QzI1MkMxLAorMHg4OTJGMzYyMCwgMHhDOTAzNjA2MSwgMHg4OTJCODgwMSwgMHhEMjMzREQzMSwKKzB4NjREMzQyMEIsIDB4MUYwMTY1MDMsIDB4ODgwMTYwQjEsIDB4RDIzMDhCMDQsCisweDY0RDM0MjBCLCAweDAwMDlBRkVBLCAweDg1NjE1NjUzLCAweDg5MDRDODIwLAorMHhFMDUwRDcyQywgMHg3MjAxMDI3RSwgMHhEMjJCMDcyNiwgMHg2NDUzNDIwQiwKKzB4ODkwNzIwMDgsIDB4NTVGMUQxMjYsIDB4NjREMzQxMEIsIDB4RTYwMUQ3MjcsCisweDI3NjJBRkQ0LCAweDU1RjFEMjI2LCAweDY0RTM0MjBCLCAweEU2MDFEMTI1LAorMHgyMTYyQUZDQywgMHhERDI1REUyNCwgMHhEQzI2REIyNSwgMHg2NkQyNTJEMSwKKzB4ODkxODM2MjAsIDB4QzkwMzYwNjEsIDB4ODkxNDg4MDEsIDB4RDExN0Q0MUYsCisweDAwMDk0MTBCLCAweDM2RTA1NjAzLCAweDY1MDM4RjA0LCAweDJCMjBFMjAxLAorMHgyQzUyQUZFQywgMHhENzEyRDQxQywgMHgwMDA5NDcwQiwgMHhFNjAxRDExNSwKKzB4QUZFMzQ2MTgsIDB4NjBGMTIxNjIsIDB4ODkwN0M4MDQsIDB4N0YwOEQyMTcsCisweDZFRjY0RjI2LCAweDZDRjY2REY2LCAweDZCRjY0MjJCLCAweDRGMjY3RjA4LAorMHg2REY2NkVGNiwgMHgwMDBCNkNGNiwgMHgwMDAwNkJGNiwgMHgwMDFFMjEwMCwKKzB4MDAyMDM1MDQsIDB4MDAyMDM0RkMsIDB4MDAyMDM5OEMsIDB4MDAyMDE0QTAsCisweDAwMjAxNENDLCAweDAwMjAzNDk0LCAweDAwMjAxNkJFLCAweDAwMUUyMTJDLAorMHgwMDIwMTUzMCwgMHgwMDFDM0QzMCwgMHgwMDExNzg4MCwgMHgwMDIwMzRGNCwKKzB4MDAyMDM5MTQsIDB4MDAyMDM5MTAsIDB4MDAyMDM1MkMsIDB4MDAyMDA2MTAsCisweEU2MDFEMjAzLCAweDEyNjVENTAzLCAweDAwMEIyMjUyLCAweDAwMDAxMjY2LAorMHgwMDFDMTAxMCwgMHgwMDAwQzM0RiwgMHgwMDA5MDAwQiwgMHgyRkQ2MkZDNiwKKzB4NEYyMjJGRTYsIDB4NkQ0MzZDNTMsIDB4RUUwMEEwMDQsIDB4N0UwMTY0RDQsCisweDY0NENCRkYyLCAweDhCRjkzRUMyLCAweDZFRjY0RjI2LCAweDAwMEI2REY2LAorMHhFNTAwNkNGNiwgMHg2NjQzQTAwMiwgMHg3NjAxNzUwMSwgMHgyMjI4NjI2MCwKKzB4QUZFMzhCRkEsIDB4MkZFNjAwMDksIDB4NzUwNzYyNTMsIDB4RTEwODY3NTMsCisweDYwNDNFRTBBLCAweDQ0MDlDOTBGLCAweDY1MDMzMEUyLCAweDhEMDE0NDA5LAorMHhFNjMwRTYzNywgMHg0MTEwMzY1QywgMHg4RkYyMjc2MCwgMHhFMDAwNzdGRiwKKzB4MDAwQjgwMjgsIDB4MDAwQjZFRjYsIDB4MDAwQkUwMDAsIDB4MkZFNkUwMDAsCisweDdGRUM0RjIyLCAweDZFNDM2MjUzLCAweEJGREM2NUYzLCAweEJGRDA2NDIzLAorMHhCRkNFNjRFMywgMHhENDAzNjRGMywgMHgwMDA5QkZDQiwgMHg0RjI2N0YxNCwKKzB4NkVGNjAwMEIsIDB4MDAyMDNBRjgsIDB4RTRGREQyOUYsIDB4RDc5RjYxMjIsCisweDIyMTIyMTQ5LCAweDc0MDE2MDIyLCAweDIyMDJDQjAxLCAweEQ1OUM2NjIyLAorMHgyMjYyMjY0OSwgMHhDODQwNjA3MCwgMHg2MDUyODkwMiwgMHgyNTAyQ0IwNCwKKzB4RTFGNzY0NTIsIDB4MjU0MjI0MTksIDB4RTcwMTYwNTIsIDB4MjUwMkNCNDAsCisweEU2MDI2MDUyLCAweDI1MDJDOUNGLCAweDQ3MTg2MDUyLCAweDI1MDJDQjEwLAorMHhDQjAzNjA1MiwgMHgxNTYyMjUwMiwgMHgxNTczMDAwQiwgMHhENzhFRDU4RCwKKzB4RDQ4RkQyOEUsIDB4RTYwMEUxMDAsIDB4MjcxMTI1MTEsIDB4QUZDQjIyMTAsCisweDY2NEMyNDYxLCAweDQ2MDBEMjhCLCAweDYwNjAzNjJDLCAweDAwMEJDQjEwLAorMHg2NTRDMjYwMCwgMHg0NTAwRDI4NywgMHg2NjUwMzUyQywgMHgyNjE5RTFFRiwKKzB4MjU2MDAwMEIsIDB4RDI4NDY2NEMsIDB4MzYyQzQ2MDAsIDB4Q0IxMDYwNjAsCisweDI2MDAwMDBCLCAweEQyODA2NTRDLCAweDM1MkM0NTAwLCAweEUxRUY2NjUwLAorMHgwMDBCMjYxOSwgMHg2NjRDMjU2MCwgMHg0NjAwRDI3QSwgMHg2MDYwMzYyQywKKzB4MDAwQkNCMDgsIDB4NjU0QzI2MDAsIDB4NDUwMEQyNzYsIDB4NjY1MDM1MkMsCisweDI2MTlFMUY3LCAweDI1NjAwMDBCLCAweEQyNzM2NjRDLCAweDM2MkM0NjAwLAorMHhDQjA4NjA2MCwgMHgyNjAwMDAwQiwgMHhEMjZGNjU0QywgMHgzNTJDNDUwMCwKKzB4RTFGNzY2NTAsIDB4MDAwQjI2MTksIDB4NjI0QzI1NjAsIDB4NDIwMEQ2NjksCisweDYwMjAzMjZDLCAweDQwMjFDOTA4LCAweDQwMjE0MDIxLCAweDYwMEMwMDBCLAorMHhENjY1NjI0QywgMHgzMjZDNDIwMCwgMHhDOTA4NjAyMCwgMHg0MDIxNDAyMSwKKzB4MDAwQjQwMjEsIDB4RDE2MTYwMEMsIDB4MzQxQzY0NEMsIDB4MDAwQjYyNDAsCisweEQxNUY2MDJDLCAweDM0MUM2NDRDLCAweDAwMEI2MjQwLCAweDJGRTY2MDJDLAorMHg2RTQzNEYyMiwgMHhFNjBBNjQ1QywgMHg4OTE0MzQ2NywgMHgwMDA5QkZFQiwKKzB4NjBFQzY0MEMsIDB4OEIwMjg4MDEsIDB4QTAwMkUwMEYsIDB4NDQwOTI0MDksCisweDYyNEM0NDA5LCAweDMyNjNFNjBBLCAweEJGRTI4OTA1LCAweDYyMEM2NDRDLAorMHhDODgwNjAyMywgMHhFMjAwOEIwMCwgMHg0RjI2NjAyMywgMHg2RUY2MDAwQiwKKzB4RDY0QzRGMjIsIDB4ODgwMTYwNjIsIDB4QjI1NzhCMDMsIDB4QTAwMzAwMDksCisweEQyNDkwMDA5LCAweDIyNjBFNjQwLCAweEUyMDBENjQ4LCAweDAwMEI0RjI2LAorMHg0RjIyMjYyMiwgMHg2MDYyRDY0MywgMHg4QjAxODgwMiwgMHgwMDA5QjJBMCwKKzB4RTIwMEQ2NDIsIDB4MDAwQjRGMjYsIDB4RDUzRTI2MjIsIDB4RTEwMEQ0M0UsCisweDI1MTJFNzAxLCAweDI0NzAwMDBCLCAweEU2MDREMjNCLCAweDIyNjAwMDBCLAorMHhENDNCNEYyMiwgMHg0MTBCRDEzQiwgMHhENTNCMDAwOSwgMHg2NjUwRTFGRCwKKzB4MjYxOUQyM0EsIDB4MjU2MEU3MDAsIDB4MDAwQjRGMjYsIDB4NEYyMjIyNzAsCisweEQyMzhENTM3LCAweEQ3Mzg2MTUyLCAweDI1MTI2MTFELCAweEU2RkY2NDUyLAorMHgyNTQyMjQyQiwgMHhEMjJGRDQzNSwgMHg0MjBCNjY2RCwgMHhENTJFMjc2MiwKKzB4Njc1MEUxRkIsIDB4NEYyNjI3MTksIDB4MjU3MDAwMEIsIDB4RDQzMDRGMjIsCisweDQxMEJEMTI4LCAweEQ1MjgwMDA5LCAweDY2NTBFN0Y3LCAweDRGMjYyNjc5LAorMHgyNTYwMDAwQiwgMHg5NDI1RDUyNCwgMHgyMjQ5NjI1MCwgMHgyNTIwMDAwQiwKKzB4RTRCRkQ1MjEsIDB4MjI0OTYyNTAsIDB4MjUyMDAwMEIsIDB4RDIyNTRGMjIsCisweDYwMEQ4NTIyLCAweDg5MTEyMDA4LCAweDg5NDU4ODAxLCAweDg5NDc4ODAzLAorMHg4OTQ5ODgwNSwgMHg4OTRGODgwNiwgMHg4OTU1ODgwOCwgMHg4OTVCODgwOSwKKzB4ODk2MTg4MEEsIDB4ODk2Nzg4MEIsIDB4MDAwOUEwNkUsIDB4MDAwOUIwNzAsCisweDYwMENBMDZCLCAweDAwMDBGRjdGLCAweDAwMUUyMTQ4LCAweDAwMUUxMDAwLAorMHgwMDFFMTEwOCwgMHgwMDIwMzlDNCwgMHgwMDIwMzlDNiwgMHgwMDIwMzlFNSwKKzB4MDAyMDM5QTgsIDB4MDAxRTEwM0YsIDB4MDAxRTEwNUYsIDB4MDAxRTEwMkYsCisweDAwMUUxMDkwLCAweDAwMjAzOUNDLCAweDAwMUUxMDBCLCAweDAwMjAzOUM4LAorMHgwMDIwM0FGQywgMHgwMDIwMThBMiwgMHgwMDFFMTAyOCwgMHgwMDIwMzlFNCwKKzB4MDAxRDQwMjAsIDB4OTg3NjAwMDAsIDB4MDAxQzEwMDAsIDB4MDAyMDNCMDgsCisweDAwMjAzQjE4LCAweDAwMjAzOTlDLCAweDAwMDlCMDRDLCAweDYwMENBMDM1LAorMHgwMDA5QjA1NSwgMHg2MDBDQTAzMSwgMHg2MjYwRDY4NCwgMHg4QjJCMjIyOCwKKzB4MDAwOUIwNjEsIDB4NjAwQ0EwMjksIDB4NjI2MEQ2ODAsIDB4OEIyMzIyMjgsCisweDAwMDlCMDY5LCAweDYwMENBMDIxLCAweDYyNjBENjdDLCAweDhCMUIyMjI4LAorMHgwMDA5QjBDNywgMHg2MDBDQTAxOSwgMHg2MjYwRDY3OCwgMHg4QjEzMjIyOCwKKzB4MDAwOUIwQ0QsIDB4NjAwQ0EwMTEsIDB4NjI2MEQ2NzQsIDB4OEIwQjIyMjgsCisweDAwMDlCMTI1LCAweDYwMENBMDA5LCAweDYyNjBENjcwLCAweDhCMDMyMjI4LAorMHgwMDA5QjEzRCwgMHg2MDBDQTAwMSwgMHg0RjI2RTAwMCwgMHgwMDA5MDAwQiwKKzB4RDI2Q0QxNkIsIDB4RDU2Qzg0MTIsIDB4NDAwMEM5MEYsIDB4RDc2QjAxMkQsCisweEU0MDNENjZCLCAweEUyMEY2MTFDLCAweDI1NDBFMDAxLCAweDI1MjAyNzEyLAorMHgyNjAyMDAwQiwgMHhFNjAxRDI2MiwgMHgzMDY2ODUyMywgMHhFMDAwOEQwNSwKKzB4RDY2M0QyNjAsIDB4RTAwMTgxMjIsIDB4MDAwQjI2MDIsIDB4RDI1QzAwMDksCisweDYwMEQ4NTIzLCAweDg5MDUyMDA4LCAweDhCMEE4ODAxLCAweDYwNjBENjVELAorMHgyNjAwQ0IwMSwgMHhENDU3RDY1QSwgMHhFMDAxRTEwMSwgMHgwMDBCMjYxMiwKKzB4MDAwQjgxNDIsIDB4RDE1MkUwMDAsIDB4ODUxM0U1MDEsIDB4NjQwRDQ1MTgsCisweDY2MDMzNDUzLCAweEUwMDA4RDA1LCAweEQ1NTFEMjUzLCAweDIyNjBFMDAxLAorMHgwMDBCMjUwMiwgMHg0RjIyMDAwOSwgMHg4NTEzRDE0OSwgMHg2NDUzNjUwRCwKKzB4NjI0OTQ0MTksIDB4MjI3RDY3MkUsIDB4ODgwMTYwMkMsIDB4ODgwMjg5MDksCisweDg4MDM4OTEwLCAweDg4MDY4OTFBLCAweDg4MDc4OTM1LCAweEEwNEM4OTNCLAorMHhENTQ2MDAwOSwgMHg2NjUyRDc0NiwgMHgyNzYyRDQ0NiwgMHg2MjJDNjI2MSwKKzB4MjQyMUEwMzgsIDB4MjIyODYyNUMsIDB4RDQ0MzhCM0YsIDB4NjY0MkQ1NDAsCisweDI1NjJENDQwLCAweDI0MDE4NTYxLCAweDYyMDNBMDJDLCAweDIwMDg2MDVDLAorMHg4ODEwODkwNywgMHg4ODIwODkwOCwgMHg4ODMwODkwOSwgMHhBMDJDODkwQSwKKzB4RDIzQTAwMDksIDB4NjIyMkEwMDgsIDB4QTAwNUQyMzksIDB4RDIzOTYyMjIsCisweDYyMjJBMDAyLCAweDYyNjJENjM4LCAweEQ0MzJENTMxLCAweDY2MjEyNTIyLAorMHhBMDBGNjI2QywgMHhENjM1MjQyMSwgMHg2MjYxRDUyRCwgMHg2MjJDRDQyRCwKKzB4QTAwNzI1NjIsIDB4RDYzMjI0MjEsIDB4ODU2MUQ1MjksIDB4MjU2MkQ0MjksCisweDYyMDMyNDAxLCAweDY2MkQ4NTE1LCAweDM2MTc2MTBELCAweDY1MDM4RjAxLAorMHhCMENCMjQ1MSwgMHhBMDAxMDAwOSwgMHhFMDAwRTAwMSwgMHgwMDBCNEYyNiwKKzB4RDYxOTAwMDksIDB4RDQyN0UxMDEsIDB4NjU0MTI2MTAsIDB4RDExOEQ3MTcsCisweEUyMEY2NTVELCAweDI3NTJFMDAxLCAweDAwMEIyNjIwLCAweDJGRTYyMTAyLAorMHhEMjBGNEYyMiwgMHg2NDBDODUyMywgMHg4QjA4MjQ0OCwgMHhENTExRDYxRCwKKzB4MjYyMUUyMDAsIDB4OTQwRjg0NTEsIDB4QTA0ODIwNDksIDB4REUwRDgwNTEsCisweEM4NDA2MEUwLCAweEUyMDE4RDMyLCAweDg5NDQzNDI3LCAweEQyMTZENjE1LAorMHgyNjQxNDIwQiwgMHgwMDA5QTAzMCwgMHgwMDAwRkY3RiwgMHgwMDIwMzlFNSwKKzB4MDAyMDM5OUMsIDB4MDAyMDM5QTgsIDB4MDAxRTExMDAsIDB4MDAxRTEwMEMsCisweDAwMjAzOUM4LCAweDAwMUUxMDAwLCAweDAwMUUxMDAxLCAweDAwMjAzOUQwLAorMHgwMDIwMzlCMCwgMHgwMDIwMzlCNCwgMHgwMDIwMzlCOCwgMHgwMDIwMzlENCwKKzB4MDAyMDM5RDgsIDB4MDAyMDM5REMsIDB4MDAyMDM5RTAsIDB4MDAyMDNFMDQsCisweDAwMjAzRTBFLCAweDAwMjAzOUMyLCAweDAwMjAyODg2LCAweDg5MTIzNDI3LAorMHhEMjk0RDY5MywgMHgyNjQxNDIwQiwgMHhDQjgwODRFMSwgMHg4MEUxQjBGNSwKKzB4RDY5MTYwRTAsIDB4MkUwMENCMDQsIDB4QzkzRjYwNjAsIDB4RDY4RjI2MDAsCisweEEwMDFFMDAxLCAweEUwMDAyNjAyLCAweDAwMEI0RjI2LCAweEQ2OEM2RUY2LAorMHhDODgwNjA2MCwgMHhEMjg2ODkxOSwgMHg4ODAxNjAyMSwgMHhEMjg5OEIxNSwKKzB4ODUyNEU1MDEsIDB4ODkxMDMwNTYsIDB4RTIwM0QxODcsIDB4MjEyMEQ0ODcsCisweEUwMEI2NTQxLCAweDA2NTY2NTVELCAweEU0MEZENTg1LCAweDIxNDBFNzAyLAorMHhENzdFMjU3MSwgMHgwMDBCRTAwMSwgMHgwMDBCMjcwMiwgMHgyRkU2RTAwMCwKKzB4REU4MDRGMjIsIDB4Qzg4MDg0RTEsIDB4RDU3QTg5MkMsIDB4MjAwODg1NTQsCisweDYxMDM4RjI4LCAweDg1NTNENzdDLCAweDY0MDM2NjcyLCAweDg1NjY2NTBDLAorMHgzNTIwNjIwQywgMHhENjc5OEIxRSwgMHg2NTFDRDc3NCwgMHgyNjUxNjQ0QywKKzB4NjBFMDI3NDEsIDB4ODkwNEM4NDAsIDB4NDIwQkQyNzUsIDB4QTAwMzAwMDksCisweEQyNjgwMDA5LCAweDAwMDk0MjBCLCAweDAwMDlCMDlGLCAweEUyMDFEMTY3LAorMHg2MEUwMjEyMiwgMHhDQjA0RDQ2NCwgMHg2MDQwMkUwMCwgMHgyNDAwQzkzRiwKKzB4NjAyM0EwMDEsIDB4NEYyNkUwMDAsIDB4NkVGNjAwMEIsIDB4MkZCNjJGQTYsCisweDJGRDYyRkM2LCAweERBNjIyRkU2LCAweDY2QTFFMjQwLCAweDM2MjJEQzVFLAorMHg2MjYzODkwMCwgMHg2RUQzNkQyQywgMHg0RTIxMzZEOCwgMHg0RTIxMkE2MSwKKzB4REI2MUQ0NjAsIDB4RTcwMEEwMEYsIDB4NzcwMTYyQjIsIDB4NzEwMjYxMjMsCisweDY2MjEyQjEyLCAweDcxMDI2MjEzLCAweDYxMjEyQjEyLCAweDY1MUQ2NjZELAorMHgzNTZDNDUyOCwgMHg2MjdDMjQ1MiwgMHg4QkVEMzJFMywgMHhDOTAzNjBEMywKKzB4OEIxMDg4MDMsIDB4NjE3MzY3QjIsIDB4MkIxMjcxMDIsIDB4NzEwMjZFMTMsCisweDJCMTI2NTcxLCAweDY1NUQ2REUxLCAweDQyMjg2MkRELCAweDMyNUNFMTA3LAorMHhBMDBDMkMxMCwgMHg4ODAyMjQyMiwgMHhBMDAzOEIwMSwgMHg4ODAxRTIwMywKKzB4RTIwMThCMDUsIDB4NjZCMjJDMjAsIDB4NjU1RDY1NjEsIDB4RTYwRjI0NTIsCisweDY3QTEyQzYwLCAweDhCMDUyNzc4LCAweEREMzhEQzQ0LCAweEVCMDFFQTAwLAorMHgyREIyMkNBMiwgMHg2REY2NkVGNiwgMHg2QkY2NkNGNiwgMHg2QUY2MDAwQiwKKzB4MkZFNjJGRDYsIDB4RTI0MEREMzYsIDB4MzYyMjY2RDEsIDB4NjI2Mzg5MDAsCisweDM2Nzg2NzJDLCAweDc3MDNERTM4LCAweDQ3MjEyRDYxLCAweDY0RTJENjM1LAorMHhBMDBFNDcyMSwgMHg2NTYyRTEwMCwgMHg2MjUzNzEwMSwgMHg3NDAxMjQ1MCwKKzB4MjQyMDQyMTksIDB4NDUyOTc0MDEsIDB4NzQwMTI0NTAsIDB4MjQ1MDQ1MTksCisweDYyMUM3NDAxLCAweDhCRUUzMjczLCAweDY2RTI0MjAwLCAweDQyMDA2MUQxLAorMHgyMTE4MzYyQywgMHgyRTYyOEYwNiwgMHhERDFDRDcyOCwgMHhFNTAxRTQwMCwKKzB4MkQ1MjI3NDIsIDB4MDAwQjZFRjYsIDB4MkZENjZERjYsIDB4NEYyMjJGRTYsCisweEVEMEFFRTAxLCAweDY0RTNCQzg1LCAweEJDOEE2NEUzLCAweDYyRUM3RTAxLAorMHg4QkY3MzJENywgMHhCQzhERUUwMSwgMHg2NEUzNjRFMywgMHg3RTAxQkM5MiwKKzB4MzJENzYyRUMsIDB4NEYyNjhCRjcsIDB4MDAwQjZFRjYsIDB4RDExODZERjYsCisweEQ0MTg5MjBELCAweDcyMTIyMTIyLCAweDI0MjJENjE3LCAweEQ3MTc3MjA0LAorMHg3MjIwMjYyMiwgMHgyNzIyRDExNiwgMHgwMDBCNzIzMCwgMHgxMzdBMjEyMiwKKzB4MDAyMDM5QzIsIDB4MDAyMDI5OTIsIDB4MDAxRTEwMTUsIDB4MDAyMDM5QzgsCisweDAwMUUxMDAxLCAweDAwMjAzOTlDLCAweDAwMUUxMTAwLCAweDAwMjAzOUM2LAorMHgwMDIwMzlCNCwgMHgwMDFFMTAwMCwgMHgwMDIwMzlCOCwgMHgwMDIwMzlDNCwKKzB4MDAyMDI4ODYsIDB4MDAxRTEwMEMsIDB4MDAyMDM5QjAsIDB4MDAyMDM5Q0MsCisweDAwMjAzOUQwLCAweDAwMjAzOUQ0LCAweDAwMjAzOUQ4LCAweDAwMjAzOURDLAorMHgwMDIwMzlFMCwgMHg0RjIyMkZFNiwgMHhENjcwN0ZGQywgMHg4ODAxNjA2MCwKKzB4RTIwMTg5NTEsIDB4MjYyMEJGQkIsIDB4RDU2RUQxNkQsIDB4REU2RTYwMTAsCisweDY0RTM2NTUyLCAweDc0MDJDODQwLCAweDhEMjJEMTZDLCAweEQyNkM3NTAyLAorMHhFNjAxRDc2QywgMHhFNzA0MjcyMiwgMHg3NjAxNjI1NSwgMHg2MjZDMjQyMSwKKzB4OEZGOTMyNzMsIDB4RDQ2Mzc0MDIsIDB4NjI0MkU2MDEsIDB4NjQwRDg1MjgsCisweDY3NDk0NDE5LCAweDI3NUQ2NTdFLCAweDgxRTQ2MDdDLCAweEU0MTdENTYyLAorMHg2NzU1NzYwMSwgMHgzMjQzNjI2QywgMHg4RkY5MjE3MSwgMHhBMDIwNzEwMiwKKzB4RDI1RTAwMDksIDB4RTYwMUQ3NUIsIDB4RTcwNDI3MjIsIDB4NzYwMTYyNTUsCisweDYyNkMyNDIxLCAweDhGRjkzMjczLCAweEQ0NTI3NDAyLCAweDYyNDJFNjAxLAorMHg2NDBEODUyOCwgMHg2NzQ5NDQxOSwgMHgyNzVENjU3RSwgMHg4MUU0NjA3QywKKzB4RTQxN0Q1NTMsIDB4Njc1NTc2MDEsIDB4MzI0MzYyNkMsIDB4OEZGOTIxNzEsCisweDkyODk3MTAyLCAweEQyNDYyRTIxLCAweDVFMjNENzRFLCAweDY0RjIyRkUyLAorMHg2MDQzNjVGMiwgMHgyNzAwQzk4MCwgMHhDOTYwNjA0MywgMHg4MDcxNjEwMywKKzB4QzkwMzYwNDMsIDB4ODA3MjQ1MTksIDB4NjVGMjYwNUMsIDB4ODE3MjY2RjIsCisweDQ2MTk0NjI5LCAweDYwNkM0NTI5LCAweDQwMTg2NDVDLCAweDgxNzMzMDRDLAorMHgyMTE4NUUyMywgMHg2NEYyMkZFMiwgMHg2RTRDNjJGMiwgMHg2MDJDNDIxOSwKKzB4NjZGMjYyRjIsIDB4NDYyOTQwMTgsIDB4NDYxOTMwRUMsIDB4NDIyOTgxNzQsCisweDY1MkM2MDZDLCAweDMwNUM0MDE4LCAweDgxNzU4RjA3LCAweDAwMDlCQzk2LAorMHgyMjI4NjIwQywgMHhBMDBBODkwOCwgMHg2MDEzMDAwOSwgMHg4QjAzODg0MCwKKzB4MDAwOUIwMDksIDB4MDAwOUEwMDMsIDB4RTIwMkQ2MkYsIDB4N0YwNDI2MjIsCisweDAwMEI0RjI2LCAweDRGMjI2RUY2LCAweDg1NTJENTJBLCAweDg4MzA2MDBELAorMHg4ODMxODkwMywgMHhBMDM0ODkyMywgMHg4NTU1MDAwOSwgMHhENDI4RDcyNywKKzB4ODU1MzI3MDEsIDB4NjEwREQ2MjcsIDB4MjQxMjQxMTgsIDB4NDYwQkQ0MjYsCisweEQ3MjMwMDA5LCAweEQyMjZENDI1LCAweDY1NzI0MjBCLCAweEUyMzBEMTIwLAorMHg0MjI4NjcxMiwgMHgyNzI5RTYyMCwgMHgzNzYwNDYyOCwgMHhENjIxOEIwMywKKzB4QTAxNkUyMDAsIDB4RDYxRjI2MjIsIDB4QTAxMkUyMDIsIDB4RDExODI2MjIsCisweDYyMTJFNTMwLCAweEU2MjA0NTI4LCAweDQ2MjgyMjU5LCAweDg5MDgzMjYwLAorMHhENDFBRDExOSwgMHhFNjAxRDUxMywgMHgyMTYwNDUwQiwgMHg0NzJCRDcxOCwKKzB4NEYyNjRGMjYsIDB4MDAwOTAwMEIsIDB4MDAwMDA2MEEsIDB4MDAyMDM5RTQsCisweDAwMUUxMDAwLCAweDAwMjAzOUQwLCAweDAwMjAzRTA0LCAweDAwMjAzRTEwLAorMHgwMDIwM0RBOCwgMHgwMDIwMzlCOCwgMHgwMDIwM0REOCwgMHgwMDIwM0RENiwKKzB4MDAyMDNEQUEsIDB4MDAyMDM5OUMsIDB4MDAyMDM5QzgsIDB4MDAyMDM5QjQsCisweDAwMjAzOUIwLCAweDAwMjAxOEEyLCAweDAwMjAzQjI0LCAweDAwMjAzQjI4LAorMHgwMDIwMThFRSwgMHgwMDIwMzlDQywgMHgwMDFFMTAwQiwgMHgwMDIwM0IzQywKKzB4MDAxMTQwMDQsIDB4NEYyMjJGRTYsIDB4REU5NjdGRkMsIDB4MjAwODg0RTksCisweDJGMDA4RDA2LCAweEQ2OTVENDk0LCAweDAwMDk0NjBCLCAweDY0RjBCMTlBLAorMHg2NjIwRDI5MywgMHg4OTAyMjY2OCwgMHhDOUJGNjBFMCwgMHg3RjA0MkUwMCwKKzB4MDAwQjRGMjYsIDB4MDAwQjZFRjYsIDB4MkZFNjAwMDksIDB4REU4RDRGMjIsCisweDYwRTBENjhELCAweENCQzBENDhELCAweDYyNjAyRTAwLCAweEM4MDM2MDJDLAorMHg0MDIxODkwNCwgMHg3MDAxNDAyMSwgMHg2NjAzQTAwMiwgMHg2NjAzNDAwOSwKKzB4RDY4NzYxNkQsIDB4RTUwMEEwMDQsIDB4NzUwMTYyNjIsIDB4NzQwNDI0MjIsCisweDMyMTM2MjVELCAweEQyODM4QkY4LCAweDAwMDk0MjBCLCAweEM5QkY4NEUyLAorMHg0RjI2ODBFMiwgMHg2RUY2MDAwQiwgMHgyRkU2MkZENiwgMHg3RkZDNEYyMiwKKzB4NjI2MEQ2N0QsIDB4ODk0NDIyMjgsIDB4RDU3MkUxMDAsIDB4NjA1MDI2MTAsCisweENCNDBENDdBLCAweDI1MDA0NDBCLCAweDhEMDUyMDA4LCAweDYyRTA2RTAzLAorMHg3MTA0NjEyQywgMHgyRjExQTAwNiwgMHhENDc1RDY2RCwgMHhERDc1Njc2MCwKKzB4NjU3QzREMEIsIDB4RTIzQzZEMUQsIDB4OEIwMzNEMjcsIDB4RDI2N0Q0NzIsCisweDAwMDk0MjBCLCAweDREMjE0RDIxLCAweEEwMDVENzcwLCAweDY2RTZFNDAwLAorMHgzNTdDNDUwOCwgMHg3NDAxMjU2MiwgMHgzNUQzNjU0RCwgMHhENzZDOEJGNywKKzB4NjE3MkUwMDMsIDB4ODExMTQwMTgsIDB4NkU3MjYwRjEsIDB4ODFFMjcwMEMsCisweEQ0Njg2MTcyLCAweERENjg4MTEzLCAweDREMEJERTY4LCAweEUyMDE2NTcyLAorMHhENDY3MkUyMiwgMHg0MjBCRDI1NSwgMHhENjU2MDAwOSwgMHhDOTNGNjA2MCwKKzB4N0YwNDI2MDAsIDB4NkVGNjRGMjYsIDB4NkRGNjAwMEIsIDB4MkZDNjJGQjYsCisweDJGRTYyRkQ2LCAweEQyNUY0RjIyLCAweDZCNDM2RTczLCAweDQyMEI2QzUzLAorMHgyMDA4NkQ2MywgMHg2NDAzOEQxQywgMHhFNTBFRDE0OSwgMHgzMjUyNjIxMCwKKzB4NjBDMzg5MTYsIDB4ODA0MTI0QjAsIDB4ODE0MTYwRDMsIDB4QTAwN0U1MDAsCisweDY1NUQ2MUJDLCAweDAwRUM2MDUzLCAweDM2NEM2NjUzLCAweDgwNjQ3NTAxLAorMHgzMjEzNjI1RCwgMHhENjNCOEJGNSwgMHhDOUJGNjA2MCwgMHgyNjAwQTAwOCwKKzB4RDIzQUQ0NEQsIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsIDB4NkJGNjQyMkIsCisweDZFRjY0RjI2LCAweDZDRjY2REY2LCAweDZCRjYwMDBCLCAweDdGQzQ0RjIyLAorMHg3MjAyNjJGMywgMHgyMjUxMkY0MSwgMHg0NTI5NzIwMiwgMHg2MDYzMjI1MSwKKzB4RTVDNEU2ODIsIDB4NjdGMzgxMjEsIDB4NjU1QzY2NkMsIDB4RTQwOEJGQjYsCisweDRGMjY3RjNDLCAweDAwMDkwMDBCLCAweDJGOTYyRjg2LCAweDJGQjYyRkE2LAorMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwgMHhFMTAwN0ZDNCwgMHg2NTEzRUNGRiwKKzB4NkIxMzZDQ0QsIDB4REUzNkQ3MzUsIDB4RURGRjY0RjMsIDB4RDgzNUVBMDQsCisweDYwNTM2NTVDLCAweDAyN0Q0MDAwLCAweDMyQzA2MjJELCAweDY2MDM4RDBELAorMHgwOUVENjA2MywgMHgyNDkxMDI3RCwgMHgyNDIxNzQwMiwgMHg2OTgyMDJFRCwKKzB4MzkyODYyMkQsIDB4NzQwMjI4OTIsIDB4NzUwMTcxMDQsIDB4NjA2MzYyNUMsCisweDA3RDUzMkEyLCAweDBFQjU4RkU0LCAweDI0NDg2NDFDLCAweEU2ODA4OTA1LAorMHg2N0YzRTVDNSwgMHhCRjc5NjY2QywgMHg3RjNDNjU1QywgMHg2RUY2NEYyNiwKKzB4NkNGNjZERjYsIDB4NkFGNjZCRjYsIDB4MDAwQjY5RjYsIDB4RDExRTY4RjYsCisweDYwMTJEMjFFLCAweENCMjBFNDA1LCAweDIxMDJFNTAwLCAweDAwMEIyMjQyLAorMHgwMDAwMjI1MiwgMHgwMDFFMTAxNywgMHgwMDIwM0I0MCwgMHgwMDIwMThBMiwKKzB4MDAyMDM5MEUsIDB4MDAxRTEwMTUsIDB4MDAxRTEwQkYsIDB4MDAxMTc4MDAsCisweDAwMUUxMEZDLCAweDAwMjAwNjEwLCAweDAwMjAzOTE0LCAweDAwMjAyQUVBLAorMHgwMDIwM0I0NCwgMHgwMDIwMThFRSwgMHgwMDIwM0I2MCwgMHgwMDExNzg4QywKKzB4MDAyMDM5MTAsIDB4MDAyMDM0RjQsIDB4MDAyMDE1MzAsIDB4MDAxRTIxMzAsCisweDAwMjAzQjY4LCAweDAwMjAyQUFDLCAweDAwMjAzQjZDLCAweDAwMjAzOTc0LAorMHgwMDIwMzk3QywgMHgwMDIwM0RBNCwgMHgwMDFDMzUwMCwgMHgwMDFENDAwNCwKKzB4RDU2NEQxNjMsIDB4RTQwMEQ3NjQsIDB4MjE0MkUyMEYsIDB4MTc0MTExNTQsCisweEQ1NjIyNzIyLCAweDk2NjlENzYyLCAweDE1NDEyNTcyLCAweDk2NjYxNTYyLAorMHhFNjAxMTU2NSwgMHhENTVGMTE2NSwgMHg2NjZDRTZGOCwgMHgyNTQyMjU0MiwKKzB4MjU0MjI1NDIsIDB4MjU0MjI1NDIsIDB4MjU2MjI1NDIsIDB4NzYwMUU3MjcsCisweDY3NjMyNTcyLCAweDI1NjI3Nzk3LCAweEU3MDQyNTcyLCAweDI1NzJFMjQ4LAorMHhFMjE5MjUyMiwgMHhFMjcwMjUyMiwgMHgyNTQyMjU0MiwgMHgyNTQyMjU0MiwKKzB4MjUyMjI1NDIsIDB4MjUyMkUyMEMsIDB4MjU0MjI1NDIsIDB4MjU0MjI1NDIsCisweDI1NDIyNTQyLCAweDI1NDIyNTQyLCAweDAwMEIxNTRBLCAweEUyMDgxMTQ1LAorMHgwMDA5NDIyQiwgMHgyRkU2MkZENiwgMHg3RkZDNEYyMiwgMHhDODIwNjA0MywKKzB4NkU0MzhEMDIsIDB4MDAwOUJFNjcsIDB4QzgxMDYwRTMsIDB4QkU2NDg5MDEsCisweDYwRTMwMDA5LCAweDg5MDFDODQwLCAweDAwMDlCRTg2LCAweEM4MDE2MEUzLAorMHhERDNEODkzOCwgMHhDODAyNjBEMCwgMHgyRjAwOEQwMywgMHg0NjBCRDYzQiwKKzB4NjBGMDAwMDksIDB4ODkwMkM4MDQsIDB4NDYwQkQ2MzksIDB4NjJGMDAwMDksCisweEM4ODA2MDIzLCAweDYwRDA4OTAyLCAweDJEMDBDOTdGLCAweEM4MDE2MDIzLAorMHhENjM0ODkwNiwgMHgwMDA5NDYwQiwgMHgwMDA5QTAwNywgMHg1MTYzMDYwMSwKKzB4ODkwMkM4MDgsIDB4NDYwQkQ2MzAsIDB4NjBGMDAwMDksIDB4ODkwMkM4MTAsCisweDQyMEJEMjJFLCAweEQ1MkUwMDA5LCAweDg4MDI2MDUyLCAweEQyMkQ4QjAzLAorMHhBMDA1RTYwNCwgMHg4ODAxMjI2MCwgMHhEMjJBOEIwMiwgMHgyMjYwRTYwMSwKKzB4MjUyMkUyMDAsIDB4Qzg4MDYwRTMsIDB4RDIyNzg5MkQsIDB4NjBFMzZFMjAsCisweDg5MDJDODgwLCAweDQyMEJEMjI1LCAweDYwRTMwMDA5LCAweDg5MDJDODQwLAorMHg0MjBCRDIyMywgMHg2MEUzMDAwOSwgMHg4OTAyQzgwMiwgMHg0MjBCRDIyMSwKKzB4NjBFMzAwMDksIDB4ODkwREM4MDQsIDB4REQyMEQxMUYsIDB4MDAwOTQxMEIsCisweDAwMDlCRjBELCAweDAwMDlCRjRDLCAweEQ1MUVENDFELCAweDI0NzBFNzA4LAorMHgyNUQyQkY4NSwgMHhDODA4NjBFMywgMHhEMjFCODkwNSwgMHg0RjI2N0YwNCwKKzB4NDIyQjZFRjYsIDB4N0YwNDZERjYsIDB4NkVGNjRGMjYsIDB4NkRGNjAwMEIsCisweDAwMUM1ODFDLCAweEEwMDBBMDAwLCAweDAwMUQwMTAwLCAweDAwMUQ0MDAwLAorMHgwMDA0MDAyMSwgMHgwMDFDNTg5QywgMHgwMDFFMTAyMSwgMHgwMDIwMUE5MCwKKzB4MDAyMDFBQjIsIDB4MDAyMDIxMTQsIDB4MDAyMDFBQ0EsIDB4MDAyMDFBRDgsCisweDAwMjAzOUM4LCAweDAwMUUxMDBCLCAweDAwMUUxMDI4LCAweDAwMjAxQjQ0LAorMHgwMDIwMUI1MCwgMHgwMDIwMUFFMCwgMHgwMDIwMUFGRSwgMHgxMjM0NTY3OCwKKzB4MDAxRTEwMDAsIDB4MDAxMEYxMDAsIDB4MDAyMDFCMkMsIDB4NjQ0Q0Q2QTcsCisweDAwMEIzNDZDLCAweEQ2QTYyNDUwLCAweDM0NkM2NDRDLCAweDI0NTAwMDBCLAorMHg2NDRDRDZBNCwgMHgwMDBCMzQ2QywgMHg2MjVDMjQ1MCwgMHg0MjA4NjE2RCwKKzB4NDIwODQxMTksIDB4NDIwMDYwMTksIDB4NjcwRTYxNEMsIDB4RDQ5RTMyMUMsCisweDQyMDAyMDdELCAweDMyNENDOTBGLCAweDIyMDAwMDBCLCAweDQyMDg2MjVDLAorMHg0MjAwNDIwOCwgMHgzMjRDNjQ0QywgMHg0MjAwRDQ5OCwgMHgwMDBCMzI0QywKKzB4MkZFNjIyNjAsIDB4NjE0QzRGMTIsIDB4NDEwMEQ0OTMsIDB4NjcxMDMxNEMsCisweEUyOUY2NjZELCAweDI3Mjk0NjE5LCAweDZFNTM2MjY5LCAweDY3MkU2NTczLAorMHg0MjIxMjI3RCwgMHg0MjIxNDIyMSwgMHg3NjAxNjYyQywgMHhFNDAxNDYwOCwKKzB4MzRFODQ2MDgsIDB4NjQ0QzQ2MDAsIDB4MDcxQTA0NjcsIDB4MjE1MDI1N0IsCisweDAwMEI0RjE2LCAweDRGMjI2RUY2LCAweEQyODU3RkU4LCAweDg4MDE2MDIxLAorMHhEMjg0OEI3QiwgMHgyNjY4NjYyMSwgMHhEMjgzOEI3NywgMHgyNjY4NjYyMSwKKzB4RTUwRjhCNzMsIDB4RTQwMUJGQTIsIDB4QkZBNEU1MDEsIDB4RTU4NkU0MDAsCisweEU0MDA2NTVDLCAweDJGNTBCRkE0LCAweEJGQTFFNDAxLCAweEU2MDJFNTA2LAorMHg2MDYzNDYxOCwgMHg4MUYyRTQwMSwgMHg2NTQzQkY5RiwgMHhFNDAxODVGMiwKKzB4QkZBQjY1NDMsIDB4ODVGMjY2MDMsIDB4NjU0M0U0MDEsIDB4NjYwM0JGQjEsCisweEU0MDI2NUYwLCAweDYwNTM3NTZDLCAweDgwRjhCRjgwLCAweEJGODJFNDAyLAorMHg4NEY4RTUxMiwgMHg3MDkwRTQwMiwgMHg2NTAzQkY4MiwgMHg0NjE4RTYwMiwKKzB4ODFGNjYwNjMsIDB4QkY4MEU0MDIsIDB4ODVGNkU1MDAsIDB4NjYwM0U0MDIsCisweEU1MDBCRjhDLCAweEU0MDI4NUY2LCAweEJGOTI2NjAzLCAweEU1RkVFNTAwLAorMHhFMDEwNjU1QywgMHhCRjYxRTQwMywgMHhFNTEzMEY1NCwgMHhFNDBFQkY2MywKKzB4MDVGQ0UwMTAsIDB4QkY2M0U0MEUsIDB4RTUwMDc1ODUsIDB4QkY2NEU0MDMsCisweEU1MDBFNjQwLCAweEJGNzFFNDAzLCAweEU1MDBFNjQwLCAweEJGNzhFNDAzLAorMHhFNUZGRTY0MCwgMHhFMDE0NjU1QywgMHhCRjQ3RTQwNCwgMHhFNDBGMEY1NCwKKzB4RTUwNEJGNDksIDB4MDVGQ0UwMTQsIDB4QkY0OUU0MEYsIDB4RTUwMTc1ODQsCisweEJGNEFFNjQwLCAweEU1MDFFNDA0LCAweEJGNTdFNjQwLCAweEU1MDFFNDA0LAorMHhFNDA0RTY0MCwgMHhBRjVDN0YxOCwgMHg3RjE4NEYyNiwgMHgwMDBCNEYyNiwKKzB4NEYyMjAwMDksIDB4RDI0MjdGRjAsIDB4ODgwMTYwMjEsIDB4RDI0MThCNzEsCisweDI2Njg2NjIxLCAweEQyNDA4QjZELCAweDI2Njg2NjIxLCAweEU1MEY4QjY5LAorMHhFNDAxQkYxQywgMHhCRjFFRTUwMSwgMHhFNTg2RTQwMCwgMHhFNDAwNjU1QywKKzB4MkY1MEJGMUUsIDB4QkYxQkU0MDEsIDB4RTQwMUU1MDYsIDB4QkYxQzY1NDMsCisweEU0MDFFNjQwLCAweEJGMjk2NTQzLCAweEU0MDFFNjQwLCAweEJGMzA2NTQzLAorMHg2NUYwRTY0MCwgMHg3NTZDRTQwMiwgMHhCRUZGNjA1MywgMHhFNDAyODBGNCwKKzB4RTUxMkJGMDEsIDB4RTQwMjg0RjQsIDB4QkYwMTcwOTAsIDB4RTY0MDY1MDMsCisweEJGMDJFNDAyLCAweEU2NDBFNTAwLCAweEJGMEZFNDAyLCAweEU2NDBFNTAwLAorMHhCRjE2RTQwMiwgMHhFNUZFRTUwMCwgMHg2MDUzNjU1QywgMHhCRUU1RTQwMywKKzB4RTUxMzgwRjgsIDB4RTQwRUJFRTcsIDB4RTQwRTg0RjgsIDB4QkVFNzcwODUsCisweEU1MDA2NTAzLCAweEJFRThFNjQwLCAweEU1MDBFNDAzLCAweEJFRjVFNjQwLAorMHhFNTAwRTQwMywgMHhCRUZDRTY0MCwgMHhFNUZGRTQwMywgMHg2MDUzNjU1QywKKzB4QkVDQkU0MDQsIDB4RTQwRjgwRkMsIDB4RTUwNEJFQ0QsIDB4RTQwRjg0RkMsCisweEJFQ0Q3MDgzLCAweEU1MDE2NTAzLCAweEJFQ0VFNjQwLCAweEU1MDFFNDA0LAorMHhCRURCRTY0MCwgMHhFNTAxRTQwNCwgMHhFNDA0RTY0MCwgMHhBRUUwN0YxMCwKKzB4N0YxMDRGMjYsIDB4MDAwQjRGMjYsIDB4MDAwMDAwMDksIDB4MDAxRTEwMkYsCisweDAwMUUxMDgwLCAweDAwMUUxMDkwLCAweDAwMUUxMDNGLCAweDAwMUUxMDNFLAorMHgwMDIwMzlDMiwgMHgwMDIwMzlDNCwgMHgwMDIwMzlDNiwgMHhEMjFERDExQywKKzB4NjYyMDYwMTAsIDB4Njc2QzcwMDEsIDB4MzcwMEM5MEYsIDB4RTUwMDhEMTMsCisweDY3MTA2MjEwLCAweDc3MDE2MjJDLCAweDY0MjMyMTcwLCAweEQ2MTY2MDEwLAorMHg0NDA4NDQwOCwgMHgzNDI4QzkwRiwgMHg2MjYwMjEwMCwgMHg3MjAxRDUxMywKKzB4NDQwODI2MjAsIDB4MDAwQjM1NEMsIDB4RDEwRjYwNTMsIDB4MjU1ODY1MTAsCisweEU2MDA4RDEzLCAweEQ2MERENDBCLCAweDY1NUM2NTQwLCAweDQ3MDg2NzUzLAorMHgzNzU4NDcwOCwgMHg0NzA4NjU0MCwgMHgyNDUwNzUwMSwgMHgzNjdDNjA0MCwKKzB4MjQwMEM5MEYsIDB4NzJGRjYyMTAsIDB4MDAwQjIxMjAsIDB4MDAwMDYwNjMsCisweDAwMjAzOTBELCAweDAwMjAzOTBDLCAweDAwMjAzOTBFLCAweDAwMjAzNTM0LAorMHg3RkZDNEYyMiwgMHhFNjgwRDE5RiwgMHg2NjZDNjIxMiwgMHhEMjlFMkYyMiwKKzB4NjdGMzY1NjMsIDB4NDIwQjc1NDIsIDB4N0YwNEU0MDQsIDB4MDAwQjRGMjYsCisweEU2ODAwMDA5LCAweEQyOTg2NjZDLCAweEU3MDA2NTYzLCAweDQyMkI3NTQwLAorMHhFNjgwNjQ3MywgMHhEMjk0NjY2QywgMHhFNzAwNjU2MywgMHg0MjJCNzU0MywKKzB4MkY4NjY0NzMsIDB4MkZBNjJGOTYsIDB4MkZDNjJGQjYsIDB4MkZFNjJGRDYsCisweDdGQ0M0RjIyLCAweERDOEVEMjhELCAweDcyMDExRjIxLCAweERCOEQxRjIyLAorMHhEMThFREU4RCwgMHg2NjEyNTIxMSwgMHg4QjAxMzYyMCwgMHgwMDA5QTBFNSwKKzB4QzkwMzYwNjEsIDB4OEIwMTg4MDEsIDB4MDAwOUEwREYsIDB4RDI4OEQ0ODcsCisweEVEODQ0MjBCLCAweDJGMDI1NTAzLCAweDMwRDA4NDVDLCAweEEwQjg4OTAxLAorMHhEMTg0MDAwOSwgMHg2MjZDNjYxMCwgMHg4ODAxNjAyMywgMHhEMTgyOEI2OCwKKzB4NjIxMDFGQzMsIDB4ODk1QjIyMjgsIDB4RTAwM0Q0ODAsIDB4NDAxODY3NDIsCisweDY4NDIxNzcyLCAweEQ1N0VFOTAwLCAweDgxODE2REIzLCAweDdEMDQyMTkwLAorMHg2N0QyNkFCMiwgMHg2NEUyNjg1MiwgMHgxRjQ5MUY1NywgMHg3NDA0NjRFMywKKzB4MUZBNDY1NDIsIDB4NjU0MzFGNUEsIDB4NjI1Mjc1RjgsIDB4MUY3NjFGRDUsCisweDZENTMxRjJCLCAweERBNzRENzczLCAweDdEOTREMjc0LCAweDY4RDIxRjg4LAorMHg2QUEyNjk3MiwgMHhEMTcyNjAyMiwgMHgyMjAyQ0IyMCwgMHhFMTQwMUYxQywKKzB4NzYwMUU2MDAsIDB4MzIxMzYyNkQsIDB4NTZGNDhCRkIsIDB4NTJGNjUxRjUsCisweDIxMjIyQjYyLCAweDUyRjg1MUY3LCAweDIxMjI1NkY5LCAweDJFNjI1MUZBLAorMHg1MUZCMjQxMiwgMHgyRDgyMjUxMiwgMHhEOTY2Mjc5MiwgMHgyOUEyREQ1RiwKKzB4NkFEMkQ5NjUsIDB4RDk2NDY4OTIsIDB4NjhEMjFBODQsIDB4NjA4MURBNjMsCisweDI4MDFDQjAxLCAweEQ4NjI2NkQyLCAweDJBNjIyOTYyLCAweEVEMDE1QUZDLAorMHgyQUQyNDgwQiwgMHgyQUQyNEQxOCwgMHg2MkQyREQ1RSwgMHgyRDIyNzIwMSwKKzB4RDE1MDU2RjMsIDB4RTIwMjYwNjIsIDB4MjYwMkNCMDEsIDB4MjEyMEEwM0QsCisweDhCM0EyMjI4LCAweEU0MDFERDU4LCAweDIxNDBFNjAwLCAweEUwMUMyRDYyLAorMHhDODAxMDA1QywgMHhENDU1OEIwQSwgMHhFNjAwRDc1NSwgMHhFRDdEMjQ3MiwKKzB4NjI2Qzc2MDEsIDB4OEJGQjMyRDMsIDB4MjREMkRENTIsIDB4RTJGRTY4QzIsCisweDJDODIyODI5LCAweDA5NUNFMDFFLCAweEUwMUY1REYxLCAweDBBNUMyRDkwLAorMHg3NTEwNTFGMiwgMHhFRDA2MjFBMCwgMHhENzRCRTYwMCwgMHg4NDU2RDQ0QiwKKzB4MjcwMDc2MDEsIDB4Njk2QzY4NTQsIDB4MjQ4MDM5RDMsIDB4OEZGNjc0MDEsCisweERBNDc3NzAxLCAweDJBMTBFMTk0LCAweEUyMDA3QTAxLCAweDdBMEYyQTIwLAorMHhEMTMwRTgwNSwgMHg2NjEwMkE4MCwgMHg2MDIzNjI2QywgMHg4OTA4ODgwMSwKKzB4RDI0MEQ0MkEsIDB4NDIwQjY1RjIsIDB4RDEzMUVEMDEsIDB4QUYzMDREMTgsCisweDY1RjIyMUQyLCAweDg1NTNENDNDLCAweDYyMEQ2NjQyLCAweDg5MDczMjYyLAorMHhEMTNCRDQzQSwgMHgwMDA5NDEwQiwgMHhFNjAxRDczQSwgMHgyNzYyQUYxQSwKKzB4RDEzNEQ0MUUsIDB4NDEwQjY1RjIsIDB4RDEyNUVEMDEsIDB4RDYzN0Q0MzYsCisweDQ2MEI0RDE4LCAweEFGMEQyMUQyLCAweDdGMzQwMDA5LCAweDZFRjY0RjI2LAorMHg2Q0Y2NkRGNiwgMHg2QUY2NkJGNiwgMHgwMDBCNjlGNiwgMHg0RjIyNjhGNiwKKzB4ODU0NjdGRjQsIDB4MkYwMUU2ODEsIDB4NjY2Qzg1NDcsIDB4ODU0ODgxRjEsCisweDgxRjJEMjA5LCAweDY3RjM4NTQyLCAweDg1NDM4MUYzLCAweDgxRjRFNDBDLAorMHg2NTYzNjA1MywgMHg0MjBCODFGNSwgMHg3RjBDNzU0MCwgMHgwMDBCNEYyNiwKKzB4MDAwMDAwMDksIDB4MDAxQzNEOUMsIDB4MDAyMDI0NUMsIDB4MDAxMTc3OUEsCisweDAwMUMzNkY4LCAweDAwMUMzQjlDLCAweDAwMUMzNzA0LCAweDAwMjAzNTJDLAorMHgwMDIwMTRBMCwgMHgwMDIwMzkxRCwgMHgwMDIwMzkxQywgMHgwMDIwMzkxOCwKKzB4MDAxQzNEOTgsIDB4MDAxQzNCQjQsIDB4MDAxQzU5NjAsIDB4MDAxQzM1MDAsCisweDAwMUMzRDMwLCAweDAwMUM4OTYwLCAweDAwMjAzNTA0LCAweDAwMUMzRDAwLAorMHgwMDIwMTYwQywgMHgwMDExNzczMCwgMHgwMDIwMzkyMCwgMHgwMDFDNTgyQywKKzB4MjAwMEEwMDAsIDB4MDAwMEEwMDAsIDB4MDAxMTc3OEMsIDB4MDAxMTc3OTIsCisweDAwMTE3Nzg4LCAweDAwMjAxNENDLCAweDAwMjAzOEY0LCAweDAwMjAzNEY0LAorMHgwMDIwMTUzMCwgMHgwMDFFMjEzMCwgMHgwMDIwM0Q4NCwgMHgwMDIwMThBMiwKKzB4MkY5NjJGODYsIDB4MkZCNjJGQTYsIDB4MkZENjJGQzYsIDB4NEYyMjJGRTYsCisweEQxOUI3RkVDLCAweDJGMTJFMDAwLCAweDYxMDNENDlBLCAweDFGNDI4MUYyLAorMHhERDlBREE5OSwgMHhENjlBNjgxMywgMHhFMDAxNDgwOCwgMHg0NjBCREU5OSwKKzB4MzhFQzQ4MDAsIDB4NjVBMjFGMDMsIDB4MzUyMDUyQTEsIDB4QTIzRThCMDEsCisweDYwNTEwMDA5LCAweDg4MDFDOTAzLCAweEEyMzg4QjAxLCAweDUyNTMwMDA5LAorMHgzMkUwREU5MSwgMHhEOTkxOEIxMCwgMHg2NEEzNDkwQiwgMHg0QjBCREI5MCwKKzB4REU5MDY0MDMsIDB4RDc5MUQ2OTAsIDB4RUMwMUQ1OTEsIDB4MkUwMkUxMDAsCisweDI3MTAyNkMwLCAweDI1MDJBRkRGLCAweEM4MDE4NTUxLCAweEExNTc4QjAxLAorMHg2MjUxMDAwOSwgMHg0MjAwNjIyRCwgMHg1RTUzMzY2QSwgMHg4NUUyMjI2RCwKKzB4QzkwMzY0MkMsIDB4ODVFMzY2MDMsIDB4NjA1MzY1MEQsIDB4NDAyMTQwMjEsCisweDQ1MDBDOTNGLCAweDMyMkE2NzAzLCAweDYwNTMyNTJELCAweEM5MDFEMTdGLAorMHg2MDEwNkMwMywgMHg4ODAxRDk3RiwgMHhEQjdGOEIwNSwgMHgyMTIwRTIwMCwKKzB4Q0IwMTYwQjIsIDB4RDE3RDJCMDIsIDB4ODgwMTYwMTEsIDB4NjVBMjhCMEEsCisweDhEMDQyNDQ4LCAweDlCOUU2MjUxLCAweEEwMDMyMkI5LCAweDkxOUIyNTIxLAorMHgyNTIxMjIxQiwgMHgzN0IzRUIxMCwgMHgyNDQ4ODk1RSwgMHhENDczOEIwNywKKzB4MjIyODYyNDEsIDB4NjA2Mzg5MDMsIDB4QTA1NzgxRjgsIDB4RDU3MDY0NzMsCisweDQ2MDg0NjA4LCAweDg1RTI2MjczLCAweDQ2MDA2QjUwLCAweDM2MkM0MjAwLAorMHgyQkI4QzkxMCwgMHg4RjFGNjQ2MywgMHgyNjY4NjYwMywgMHhEMjY5ODkxMSwKKzB4MDYyRDYwNDMsIDB4NDExOTYxNkQsIDB4NkIwRTYwMTksIDB4ODFGODIwQkQsCisweDg4MDE2MEMzLCAweDY0NkM4RjJDLCAweDg4MEY2MDczLCAweEEwMjc4QjFCLAorMHhEMjYxMDAwOSwgMHgwNTJENjA0MywgMHg0MTE5NjE1RCwgMHg2NzBFNjAxOSwKKzB4NjQ1QzIwN0QsIDB4ODFGOEEwMUMsIDB4ODkwRjI2NjgsIDB4NjA0M0QyNUIsCisweDZCNUQwNTJELCAweDYwQjk0QjE5LCAweDIwMUQ2MTBFLCAweDYwQzM4MUY4LAorMHg4RjBEODgwMSwgMHg2NDczNjQ1QywgMHhFQzAwQTAwQSwgMHg2MDQzRDI1NCwKKzB4NjI1RDA1MkQsIDB4NjAyOTQyMTksIDB4MjA3RDY3MEUsIDB4ODFGODY0NUMsCisweDg4MDI4NUY4LCAweDg1RTE4OTBBLCAweDhEMDdDODIwLCAweEU2REM2MjAzLAorMHg2MDIzMjI2OSwgMHg4MUUxQTAwMiwgMHg2NDRDRTRGRiwgMHg2MjEwRDE0OSwKKzB4ODkwMTIyMjgsIDB4NjQ0Q0U0RkYsIDB4NjU0REVCRkYsIDB4MzVCMDZCQkMsCisweERCMzY4QjJCLCAweDY0QTM0QjBCLCAweDQxMEJEMTM1LCAweDU0MDM2NDAzLAorMHg4NTQ0NkUwMywgMHhDOTQ4REI0MCwgMHhEQzQwODgwOCwgMHhCRUFFOEIwMSwKKzB4NjRCM0U1MDIsIDB4NjVFMzRDMEIsIDB4REIzREVDMDEsIDB4RDEzRDJEQzIsCisweDYyMTI2MEIyLCAweDcyMDE3MDAxLCAweDIxMjI4ODA1LCAweDJCMDI4RjA4LAorMHg2NjZDRTY4MCwgMHg2NTYzRDIzOCwgMHg3NTQ5RTcwMCwgMHg2NDczNDIwQiwKKzB4QTAzMEQ0MzYsIDB4N0ZGRjAwMDksIDB4ODVFMjgwMDAsIDB4MjBCOUVCRkMsCisweDYxMDM4MUUyLCAweDk0MkE4NUUzLCAweDYyMDMyMDQ5LCAweDQ1MDg4NUY4LAorMHg4MUUyMjAxQiwgMHhDOTAxNjBDMywgMHg0MDA4NDAxOCwgMHg0MDA4NDAwOCwKKzB4NDAwMDIyNUIsIDB4NjAyMzIyMEIsIDB4ODVFNDgxRTMsIDB4NDExOEUxMDgsCisweDgxRTQyMDFCLCAweEU0MDI2MkEyLCAweDIwQjk4NTIxLCAweDY3QTI4MTIxLAorMHhDQjAxNjA3MSwgMHg4NUY4MjcwMSwgMHg4OTAzMzA0MiwgMHhFQ0U3ODVFMiwKKzB4ODFFMjIwQzksIDB4NDkwQkQ0MUUsIDB4QTAzQjAwMDksIDB4N0UwMzAwMDksCisweDAwMUMzRDMwLCAweDAwMjAzRDkwLCAweDAwMjAzNTA0LCAweDAwMUUyMTJDLAorMHgwMDIwMzNFOCwgMHgwMDFDM0QwMCwgMHgwMDExNzc4MCwgMHgwMDIwMTRBMCwKKzB4MDAyMDE2NkMsIDB4MDAxMTc3MEMsIDB4MDAyMDM5MUMsIDB4MDAyMDM5MUQsCisweDAwMjAzOTE4LCAweDAwMjAxOEEyLCAweDAwMUMzNkY4LCAweDAwMjAzOTkwLAorMHgwMDIwM0RBMCwgMHgwMDIwM0I4NCwgMHgwMDIwM0MwNCwgMHgwMDIwM0M4NCwKKzB4MDAyMDNEMDQsIDB4MDAyMDM5MDgsIDB4MDAyMDM0RkMsIDB4MDAyMDE0Q0MsCisweDAwMjAzOTk0LCAweDAwMjAzOTk4LCAweDAwMjAyNDVDLCAweDAwMjAzRDg4LAorMHgwMDIwM0Q4QywgMHg2MDIyNjJGMiwgMHg0MDA5NDAxOSwgMHhDOTBGNDAwOSwKKzB4OEIwQjg4MEEsIDB4NjBFMkRFOEMsIDB4NDAwOTQwMTksIDB4QzkwRjQwMDksCisweDhCMDM4ODA4LCAweENCMDE2MEEyLCAweDI4MDJBMDA2LCAweDY1RTJERTg3LAorMHgyRTUyNzUwMSwgMHgyODYyNjZBMiwgMHg1MkYzNjZGMiwgMHgyNjIyQUU4MywKKzB4RDI4Mzg1NTEsIDB4REU4M0M4MDIsIDB4QTA5NThCMDEsIDB4NDIwQjAwMDksCisweDRFMEI2NEEzLCAweDVFMDM2NDAzLCAweDg1RTQ2NTAzLCAweDQ5MThFOTA4LAorMHhENzdEMjA5QiwgMHhFMDRDODFFNCwgMHhEQzdDMEI3RSwgMHg3QjAxRDk3QywKKzB4NjFDMjA3QjYsIDB4NzEwMTY2OTAsIDB4OEQwNjI2NjgsIDB4RDQ3OTJDMTIsCisweDQyMEJEMjc5LCAweEEwNzBFQjAxLCAweDYyNTEyREIyLCAweDRCMThFQjBGLAorMHgyMkI5RTEwMiwgMHgzMjEwNDExOCwgMHg4NTUxOEIwRiwgMHgyMDI5RTJGQywKKzB4NjA1MTgxNTEsIDB4Q0IwMTcyRTAsIDB4ODVFMTI1MDEsIDB4MjAyOTk0QTMsCisweDg1RTQ4MUUxLCAweEEwNTIyMDQ5LCAweDY3NTE4MUU0LCAweDQ3MTk2NzdELAorMHg2NjdFNjc3OSwgMHg3NzAxMjc2RCwgMHg2OTAzNjA3QywgMHg4ODAxNDkxOCwKKzB4MjU5MThGM0UsIDB4NkIxMkQxNjEsIDB4MjFCMjdCMDEsIDB4NjYwRDg1RTMsCisweDQwMjE2MDYzLCAweEM5M0Y0MDIxLCAweDZDMDM0NjAwLCAweDI2MkQzMjJBLAorMHhDODAxNjA2MywgMHhEQjVFRDE1RCwgMHg5NjdEODkwMSwgMHhFNjAwMkM2QiwKKzB4NjY2QzY3Q0QsIDB4NDAwMDYwNjMsIDB4NjIyRDAyMUQsIDB4OEQwRTMyNzAsCisweDYwNDM2NDAzLCAweEU5RkYwMjFELCAweDhCMDEzMjkwLCAweDAxQzVBMDA3LAorMHg2MjZDNzYwMSwgMHgzMjkyRTkwNCwgMHg2NDZDOEJFQiwgMHg2MDQzNDQwMCwKKzB4RDE1MDA0QkQsIDB4MEI0NTc0MDEsIDB4NjY5RDY5MTEsIDB4ODkwNzM2NzAsCisweDYwMkQ2MjExLCAweDg5MDM4OEZGLCAweEUyMDFEQjRCLCAweDJCMjAyMUMxLAorMHhFQ0ZDODU1MSwgMHg4MTUxMjBDOSwgMHhDQjAxNjA1MSwgMHhEQzQ3MjUwMSwKKzB4NjRBMzRDMEIsIDB4NTFGMzY2RjIsIDB4ODVFRjI2MTIsIDB4NTRGMkQyNDQsCisweDY1MEQ0MjBCLCAweDAwMDlBREU3LCAweEU1MDBEQzQyLCAweDQyMEIyQzUyLAorMHg0RTBCNjRBMywgMHg1NDAzNjQwMywgMHg4NTQ0NkUwMywgMHg2NzAzRTkwOCwKKzB4NjUwMzQ5MTgsIDB4Mjc5OTg1NDEsIDB4REIzMjM3OTAsIDB4OEYwQkQ5MzIsCisweDYwMTM2MTBELCAweDhCMDdDODIwLCAweEM5NDg2MDUzLCAweDhCMDM4ODA4LAorMHhFNTAxQkQ0RCwgMHgwMDA5QTAwNSwgMHgyMTI4RDIzMywgMHhCRDQ2ODkwMSwKKzB4NjRCM0U1MDAsIDB4NDkwQjY1RTMsIDB4QURCQ0VDMDEsIDB4ODVGMjJEQzIsCisweDcwMDFFRTA0LCAweDMxRTc2MTBELCAweDhEMDI4MUYyLCAweEFEQTk3QTA4LAorMHg3RjE0MDAwOSwgMHg2RUY2NEYyNiwgMHg2Q0Y2NkRGNiwgMHg2QUY2NkJGNiwKKzB4MDAwQjY5RjYsIDB4RjdGRjY4RjYsIDB4MkZFNjgwMDAsIDB4RDIyMzRGMjIsCisweDYwRTM2RTIyLCAweDhEMDJDODQwLCAweEJCRjkyMkUyLCAweEUyNDAwMDA5LAorMHgyRTI4NDIxOCwgMHhCQzA0ODkwMSwgMHg2MEUzMDAwOSwgMHg4OTA1QzgxMCwKKzB4RDIxQ0Q0MUIsIDB4MDAwOTQyMEIsIDB4MDAwOUJDMDMsIDB4QzgwNTYwRTMsCisweEJENkQ4OTAxLCAweDYwRTMwMDA5LCAweDg5MDJDODAyLCAweEFDMDA0RjI2LAorMHg0RjI2NkVGNiwgMHg2RUY2MDAwQiwgMHgwMDFDM0QzQywgMHgwMDExNzc2MCwKKzB4MDAyMDE0QTAsIDB4MDAyMDE2NkMsIDB4MDAyMDM0OTQsIDB4MDAyMDNEQTQsCisweDAwMjAzOTA4LCAweDAwMjAzNEZDLCAweDAwMjAxNENDLCAweDAwMjAzOTc0LAorMHgwMDIwMzk3QywgMHgwMDIwMzk3MCwgMHgwMDIwMzk3MiwgMHgwMDIwMTUzMCwKKzB4MDAyMDE4RUUsIDB4MDAyMDM5OTQsIDB4MDAwMDgwMDAsIDB4MDAxQzM1MTAsCisweDAwMjAzRDk4LCAweDAwMjAxOEEyLCAweDA4MEEwQzBFLCAweDAwMDIwNDA2LAorMHgxQTFDMUUyMCwgMHgxMjE0MTYxOCwgMHgyRTMwMzIzNCwgMHgyNjI4MkEyQywKKzB4M0EzQzNFNDAsIDB4NkM2MjU2NDgsIDB4NDExMTJGMjYsIDB4RTIyMDhGMTgsCisweDg5MEIzMTIzLCAweDMyMUNEMjA0LCAweEQxMDI2MjIwLCAweDQxMkIzMTJDLAorMHgwMDA5MDAwOSwgMHgwMDIwMzQxMiwgMHgwMDIwMzNDOCwgMHgwMDBCRTAwMCwKKzB4NDAwMDYyRjYsIDB4NDAwMDQwMDAsIDB4NDAwMDQwMDAsIDB4NDAwMDQwMDAsCisweDYyRjYwMDBCLCAweDQwMDA0MDAwLCAweDQwMDA0MDAwLCAweDQwMDA0MDAwLAorMHg0MDE4NDAwMCwgMHg2MkY2MDAwQiwgMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwKKzB4NDAwMDQwMDAsIDB4NDAyODQwMDAsIDB4NjJGNjAwMEIsIDB4NDAwMDQwMDAsCisweDQwMTg0MDAwLCAweDAwMEI0MDI4LCAweEM5MEY2MkY2LCAweDQwMDU0MDA1LAorMHg0MDA1NDAwNSwgMHg2MkY2MDAwQiwgMHg0MDA1QzkwNywgMHg0MDA1NDAwNSwKKzB4NjJGNjAwMEIsIDB4NDAwNUM5MDMsIDB4MDAwQjQwMDUsIDB4QzkwMTYyRjYsCisweDAwMEI0MDA1LCAweDAwMDA2MkY2LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCisweDAwMDAwMDAwLCAweDU0NEYwRDBBLCAweDQ2MjA1MzU1LCAweDAwMDAzQTU3LAorMHgyMDZDNzU0QSwgMHgzMjIwMzEyMCwgMHgyMDM4MzAzMCwgMHgzMjNBMzEzMiwKKzB4MzQzMzNBMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDBEMEEsIDB4MDAwMDAwNDMsCisweDQyNzA3MzcyLCAweDNEMjA2Njc1LCAweDU1NEUyMDNELCAweDIwMkM0QzRDLAorMHg2RTQ5Njc3QSwgMHg0RTQ5NzI3NCwgMHg2RDc1NEU1MSwgMHgwMDAwMDAzRCwKKzB4NjE3NjZFNDksIDB4MjA2NDY5NkMsIDB4NzI2NTczNzUsIDB4MjA3MjZGMjAsCisweDIwNzk2NTZCLCAweDAwMjE0NDQ5LCAweDUyNTA0NTQ1LCAweDU3MjA0RDRGLAorMHg2NTc0Njk3MiwgMHg2NDYxMjAyQywgMHgwMDNENzI2NCwgMHg2QzYxNzYyMCwKKzB4MDAwMDAwM0QsIDB4MDAwMDBBMEQsIDB4NDM1RjRENUEsIDB4NDY1RjQ0NEQsCisweDRDNDQ1RjU3LCAweDQ5NEU0OTVGLCAweDAwMDAwMDU0LCAweDZFNkI2RTU1LAorMHgyMDZFNzc2RiwgMHg2RDZENkY2MywgMHgzRDY0NkU2MSwgMHgwMDAwMDAwMCwKKzB4MjAzQTMwNTEsIDB4MDAwMDAwMjAsIDB4MjAzQTMxNTEsIDB4MDAwMDAwMjAsCisweDIwM0EzMjUxLCAweDAwMDAwMDIwLCAweDIwM0EzMzUxLCAweDAwMDAwMDIwLAorMHgyMDNBMzQ1MSwgMHgwMDAwMDAyMCwgMHgyQjQzNDc0MSwgMHg3MzY5NkY0RSwKKzB4NjE0MzIwNjUsIDB4NzI2MjY5NkMsIDB4NkY2OTc0NjEsIDB4NjE2NjIwNkUsCisweDZGMjA2QzY5LCAweDY5NzQyMDZFLCAweDBEMEE2NTZELCAweDAwMDAwMDAwLAorMHgwMDAwMDA3MiwgMHgwMDIwNTIyMCwgMHgwMDAwMEQwQSwgMHg2MjczNTU3NiwKKzB4NzQ3MzcyNUYsIDB4MDAwMDBBMEQsIDB4NjI3MzU1NzYsIDB4NzM3NTczNUYsCisweDY0NkU2NTcwLCAweDAwMDAwQTBELCAweDYyNzM1NTc2LCAweDczNjU3MjVGLAorMHgwMDBBMEQ2RCwgMHgwMDAwMDA0NCwgMHg0NDM4NzU3MCwgMHg3MjYzNzM2NSwKKzB4NkY3NDcwNjksIDB4M0Q1ODQ1NzIsIDB4MDAwMDAwMDAsIDB4MDAwMDAwNDcsCisweDAwMDAwMDQyLCAweDcyNzQ2RTQ5LCAweDZENjUyMDUxLCAweDJDNzk3NDcwLAorMHg0OTY3N0EyMCwgMHg0OTcyNzQ2RSwgMHg3NTRFNTE0RSwgMHgwMDAwM0Q2RCwKKzB4NjU0QzcyNDUsIDB4MDAwMDAwNkUsIDB4MDAwMDAwNDksIDB4MjA3NDZGNEUsCisweDc1NkY2RTY1LCAweDQ5MjA2ODY3LCAweDQyMjA1MTRFLCAweDBBMEQ2Njc1LAorMHgwMDAwMDAwMCwgMHgwMDAwMDBGRiwgMHgwMDAyMDAwMSwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMTBFMDEwRCwgMHgwMDAyMDAwMywgMHgwMTA5MDEwOCwKKzB4MDAwMjAxMEEsIDB4MDIwMDAwMDMsIDB4MDIwMjAyMDEsIDB4MDIwNDAyMDMsCisweDAyMDYwMjA1LCAweDAyMDIwMjAwLCAweDAyMDQwMjAzLCAweDAyMEMwMjBCLAorMHgwMjBFMDIwRCwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwMDAwMEZGLCAweDAwMDIwMDAxLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAxMEUwMTBELCAweDAwMDIwMDAzLCAweDAxMDkwMTA4LAorMHgwMDAyMDEwQSwgMHgwMDAzMDAwMywgMHgwMjAyMDIwMSwgMHgwMjA0MDIwMywKKzB4MDIwNjAyMDUsIDB4MDIwMjAyMDAsIDB4MDIwNDAyMDMsIDB4MDIwQzAyMEIsCisweDAyMEUwMjBELCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDEwRTAxMEQsIDB4MDBGRjAxMEYsIDB4MDEwOTAxMDgsCisweDAxMEIwMTBBLCAweDAyMDAwMTBGLCAweDAyMDIwMjAxLCAweDAyMDQwMjAzLAorMHgwMjA2MDIwNSwgMHgwMjAyMDIwMCwgMHgwMjA0MDIwMywgMHgwMjBDMDIwQiwKKzB4MDIwRTAyMEQsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLCAweDAwRkYwMEZGLAorMHgwMEZGMDBGRiwgMHgwMTBFMDEwRCwgMHgwMEZGMDEwRiwgMHgwMTA5MDEwOCwKKzB4MDEwQjAxMEEsIDB4MDEwRjAxMEYsIDB4MDIwMjAyMDEsIDB4MDIwNDAyMDMsCisweDAyMDYwMjA1LCAweDAyMDIwMjAwLCAweDAyMDQwMjAzLCAweDAyMEMwMjBCLAorMHgwMjBFMDIwRCwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwgMHgwMEZGMDBGRiwKKzB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsIDB4MDBGRjAwRkYsCisweDAwRkYwMEZGLCAweDAwMjA1MjIwLCAweDAwMDAwMDQ2LCAweDAwMDAwMDU5LAorMHg3MzIwNDE0MiwgMHgwMDNENzE2NSwgMHg0OTU0NDEyMCwgMHgwMDAwMjA0RCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAyRTAyMDksIDB4ODAwMDAxMDEsCisweDAwMDQwOUZBLCAweDAwRkYwNDAwLCAweDA1MDcwMDAwLCAweDAyMDAwMjAxLAorMHg4MjA1MDcwMCwgMHgwMDAyMDAwMiwgMHgwMzgzMDUwNywgMHgwNzAxMDA0MCwKKzB4NDAwMzA0MDUsIDB4MDIwOTAxMDAsIDB4MDEwMTAwMkUsIDB4MDlGQTgwMDAsCisweDA0MDAwMDA0LCAweDAwMDAwMEZGLCAweDAyMDEwNTA3LCAweDA3MDAwMDQwLAorMHg0MDAyODIwNSwgMHgwNTA3MDAwMCwgMHgwMDQwMDM4MywgMHgwNDA1MDcwMSwKKzB4MDAwMDQwMDIsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDcwOTAwMDAsCisweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCit9OworCitjb25zdCB1MzJfdCB6Y0Z3SW1hZ2VTaXplPTE1OTM2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwZnd1aW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwZnd1aW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkODBmZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBmd3Vpbml0LmMKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgIi4uLzgwMjExY29yZS9jcHJlY29tcC5oIgorCitjb25zdCB1MzJfdCB6Y0Z3SW1hZ2VbXSA9IHsKKzB4MDAwOTAwMEIsIDB4N0ZGQzRGMjIsIDB4RDY5NUQ0OTQsIDB4MDAwOTQ2MEIsCisweEQ0OTRFNTcwLCAweDQ1MThCMDFFLCAweDg5MDQyMDA4LCAweEQ2OTBENDkyLAorMHg0NjJCN0YwNCwgMHhCMDEyNEYyNiwgMHhEMjkwMDAwOSwgMHg0MjBCRDQ5MCwKKzB4RTYwMDAwMDksIDB4OTQ5QUQ1OEYsIDB4Qzg0MDYwNTIsIDB4MkYwMjhGMDMsCisweDhGRjkzNjQyLCAweDdGMDQ3NjAxLCAweDAwMEI0RjI2LCAweEQyOEEwMDA5LAorMHgwMDA5NDIyQiwgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwgMHhENjg3N0ZFQywKKzB4NjI2MDYxRjMsIDB4MkYyMDg0NjEsIDB4ODQ2MjgwRjEsIDB4ODBGMjcxMTAsCisweDZENDM4NDYzLCAweDg0NjQ4MEYzLCAweDgwRjQ2NDEzLCAweDZDNTM4NDY1LAorMHg4NDY2ODBGNSwgMHg4MEY2RTUwMCwgMHhENzdEODQ2NywgMHg4NDY4ODBGNywKKzB4ODBGOEVFMDQsIDB4ODBGOTg0NjksIDB4ODBGQTg0NkEsIDB4ODBGQjg0NkIsCisweDgwRkM4NDZDLCAweDgwRkQ4NDZELCAweDgwRkU4NDZFLCAweDgwRkY4NDZGLAorMHg2NjUzNjU1QywgMHg3NTAxMzY3QywgMHg2NjVDNjI2MCwgMHgyNDIwMzZFMywKKzB4NzQwMThGRjYsIDB4NjZGMzJGMTYsIDB4RTcxMDc2MDQsIDB4QjAwRDY1QzMsCisweDZFMDM2NEQzLCAweEQ0NkI3RjA0LCAweDQyMEJEMjZCLCAweDYwRTM2NTAzLAorMHg0RjI2N0YxNCwgMHg2REY2NkVGNiwgMHg2Q0Y2MDAwQiwgMHgyRkI2MkZBNiwKKzB4MkZENjJGQzYsIDB4NEYyMjJGRTYsIDB4M0YzQzkzM0EsIDB4NDEwOEUxNDEsCisweDMxRkNFMjAwLCAweDExNzMzNTI2LCAweDIxNTIxMTYyLCAweDExNDE4RDAyLAorMHhFMEZGQTA5OCwgMHg0QTE4RUEwMSwgMHgyNjIwNjZGMywgMHgzMkEyNzIwMSwKKzB4NzYwMThGRkIsIDB4NkJFM0VFMDAsIDB4RTA0NDZDRjMsIDB4MDBGRTQwMDgsCisweDQ1MEJENTU2LCAweDY2MDM2MUIzLCAweDQwMDhFMDQzLCAweDZEQzAwNEZFLAorMHgwMTRDNjA2MywgMHgzMUVDM0VEQywgMHg2MEUzNkUxQywgMHg3QjAxMDdGQywKKzB4MkM3MDNCQTIsIDB4OEZFODBGRDQsIDB4RTA0MjdDMDEsIDB4RUIwMDQwMDgsCisweDcwRkMwN0ZFLCAweDZFQjM2Q0IzLCAweEEwMjAwQUZFLCAweDI3MTBFREZGLAorMHg3QzAxRkVFMCwgMHg2MEMzNkNDQywgMHg2NTcwMDJGQywgMHg2QkJDM0IyQywKKzB4MDFGQzYwQjMsIDB4MEYxNDYwQzMsIDB4MEYyNDYwQjMsIDB4MDRGQzYwQzMsCisweDM0MkM3RTAxLCAweDAxRkM2MDRDLCAweDI1MUE2MkQzLCAweEQ0M0MyMjVBLAorMHgyNzUwNjAyQywgMHgwNjRFNDAwOCwgMHgyRDZBNEQxOSwgMHgzRUEyNzcwMSwKKzB4NjZENzhCREYsIDB4NDAxOEUwMDEsIDB4MEY2NDY1NjMsIDB4NzAwMTQ1MTksCisweDBGNTQ0NjI5LCAweDBGNjQ3MDAxLCAweDcwMDE0NjE5LCAweDkwNDIwRjY0LAorMHhFMDQ1MEVGRSwgMHhFQTAxNDAwOCwgMHhFMDQ2MEZGNiwgMHg0QTE4NDAwOCwKKzB4RUQwMDY3RjMsIDB4MEZGNjM3QUMsIDB4MEZGNjcwMDQsIDB4RTM0NUUxMDQsCisweDdDMDE0MzA4LCAweDZDQ0MzM0ZDLCAweDYwQzM2NDMyLCAweDU1MzEwMjRDLAorMHg2QkJDM0IyQywgMHgwNDVDNjBCMywgMHg2MEMzNUEzMiwgMHg2MEIzMEE0NCwKKzB4NjBDMzBGMjQsIDB4NkE3MDA2RkMsIDB4NjA2QzM2MkMsIDB4NjZFMDA1RkMsCisweDZBNUM2NEFDLCAweDYyNkMyNEFBLCAweDg5MDUzNDIwLCAweDREMDg0RDA4LAorMHhDQjA0NjBEMywgMHg2MDBCQTAwNiwgMHg3RDAxNDExMCwgMHg4RkQ2NzcwMSwKKzB4RTAwMDdFMDEsIDB4M0YzQzkzMDgsIDB4NkVGNjRGMjYsIDB4NkNGNjZERjYsCisweDAwMEI2QkY2LCAweDAxMzg2QUY2LCAweDAwMDAwMTIwLCAweDAwMjAwRDU0LAorMHgwMDIwMDJCRSwgMHgwMDEwMjgwMCwgMHgwMDIwMEQ2NCwgMHgwMDEwRjAwQSwKKzB4MDAxMEYwMDAsIDB4MDAxQzAwMUMsIDB4MDAxMDMyNTIsIDB4MDAyMDBEQTAsCisweDAwMTBGRkZDLCAweDAwMjAwRDdDLCAweDAwMjAwMzJDLCAweDAwMjAwMzcwLAorMHgwMDIwMDk1NCwgMHgwMDA5MDAwQiwgMHgyRkQ2MkZDNiwgMHg0RjIyMkZFNiwKKzB4NkQ0MzZDNTMsIDB4RUUwMEEwMDQsIDB4N0UwMTY0RDQsIDB4NjQ0Q0JGRjIsCisweDhCRjkzRUMyLCAweDZFRjY0RjI2LCAweDAwMEI2REY2LCAweEU1MDA2Q0Y2LAorMHg2NjQzQTAwMiwgMHg3NjAxNzUwMSwgMHgyMjI4NjI2MCwgMHhBRkUzOEJGQSwKKzB4MkZFNjAwMDksIDB4NzUwNzYyNTMsIDB4RTEwODY3NTMsIDB4NjA0M0VFMEEsCisweDQ0MDlDOTBGLCAweDY1MDMzMEUyLCAweDhEMDE0NDA5LCAweEU2MzBFNjM3LAorMHg0MTEwMzY1QywgMHg4RkYyMjc2MCwgMHhFMDAwNzdGRiwgMHgwMDBCODAyOCwKKzB4NEYyMjZFRjYsIDB4QkZFNDdGRUMsIDB4QkZEODY1RjMsIDB4N0YxNDY0RjMsCisweDAwMEI0RjI2LCAweDRGMjJFMDAwLCAweEJGREE3RkVDLCAweDY0RjM2NUYzLAorMHg3NDA2QkZDRCwgMHg0RjI2N0YxNCwgMHhFMDAwMDAwQiwgMHg0RjIyMkZFNiwKKzB4NjI1MzdGRUMsIDB4NjVGMzZFNDMsIDB4NjQyM0JGQ0IsIDB4NjRFM0JGQkYsCisweDY0RjNCRkJELCAweEJGQkFENDAzLCAweDdGMTQwMDA5LCAweDAwMEI0RjI2LAorMHgwMDAwNkVGNiwgMHgwMDIwMERCMCwgMHg4OTAwNDAxMSwgMHg0MTExNjAwQiwKKzB4NEYyMjg5MDYsIDB4NjExQkIwMDQsIDB4MDAwQjRGMjYsIDB4MDAwOTYwMEIsCisweDYyMEQyRjI2LCAweDhGNDEzMDIwLCAweDQwMTgwMDE5LCAweDhCMEQzMDE2LAorMHgzMTA0MzEwNCwgMHgzMTA0MzEwNCwgMHgzMTA0MzEwNCwgMHgzMTA0MzEwNCwKKzB4ODkwMDYyRjYsIDB4NDExOTMxMEMsIDB4NjAxMzAwMEIsIDB4NDEyOTYyMTksCisweDIwMDg0MDE4LCAweDMxMDQ4OTI3LCAweDMxMDQzMTA0LCAweDMxMDQzMTA0LAorMHgzMTA0MzEwNCwgMHgzMTA0MzEwNCwgMHgzMTA0MzEwNCwgMHgzMTA0MzEwNCwKKzB4MzEwNDMxMDQsIDB4NjExOTMxMDQsIDB4MzIwNDIyMUQsIDB4MzIwNDMyMDQsCisweDMyMDQzMjA0LCAweDMyMDQzMjA0LCAweDMyMDQzMjA0LCAweDMyMDQzMjA0LAorMHgzMjA0MzIwNCwgMHgzMjA0MzIwNCwgMHg4OTAwMzIwNCwgMHg0MjI5MzIwQywKKzB4MDAwQjYwMjMsIDB4RTAwMDYyRjYsIDB4NjJGNjAwMEIsIDB4NDIyODYyMTMsCisweDQyMjQ0MTI5LCAweDQyMjQzMTA0LCAweDQyMjQzMTA0LCAweDQyMjQzMTA0LAorMHg0MjI0MzEwNCwgMHg0MjI0MzEwNCwgMHg0MjI0MzEwNCwgMHg0MjI0MzEwNCwKKzB4NDIyNDMxMDQsIDB4NDIyNDMxMDQsIDB4NDIyNDMxMDQsIDB4NDIyNDMxMDQsCisweDQyMjQzMTA0LCAweDQyMjQzMTA0LCAweDQyMjQzMTA0LCAweDQyMjQzMTA0LAorMHg4OTAwMzEwNCwgMHg2MDEzMzEwQywgMHg2MkY2MDAwQiwgMHgyRjI2MkYxNiwKKzB4NTFGNTUyRjMsIDB4NTJGMjIxMjksIDB4NTJGNDEyMTAsIDB4MjEyOTUxRjYsCisweDEyMTE1MkYyLCAweDAwMEI2MkY2LCAweDAwMDA2MUY2LCAweDUxRjMyRjE2LAorMHgzMTAwNTBGMSwgMHg1MUY0OEIwMiwgMHgzMTAwNTBGMiwgMHgwMDBCMDAyOSwKKzB4MDAwMDYxRjYsIDB4NTFGMzJGMTYsIDB4MzEwMDUwRjEsIDB4NTFGNDhCMDYsCisweDMxMDA1MEYyLCAweENBMDEwMDI5LCAweDYxRjYwMDBCLCAweDAwMEJFMDAxLAorMHgwMDAwNjFGNiwgMHg1MEYwMDAwQiwgMHgyRjI2MkYxNiwgMHhFMTAwNTJGMiwKKzB4MTIwMDEyMTEsIDB4MDAwQjYyRjYsIDB4MDAwMDYxRjYsIDB4MkYxNjJGMDYsCisweDhCMjY0MTE1LCAweDMxMDNFMDQwLCAweDJGMjY4OTJCLCAweDUyRjYyRjM2LAorMHhFMDIwNTNGNSwgMHg4QjA1MzEwMywgMHhFMzAwNjIzMywgMHg4OTA5MzEwMCwKKzB4MzEwOEEwMDIsIDB4OEIwRjIzMzgsIDB4RDAwNjRGMjIsIDB4NjAyMzQwMEIsCisweDRGMjY2MjAzLCAweDExMjE1MUY0LCAweDYzRjYxMTMwLCAweDYxRjY2MkY2LAorMHg2MEY2MDAwQiwgMHgwMDIwMDdGNCwgMHg0MTAwQzcwOSwgMHgwMTIzMDExRCwKKzB4NTFGMjAwMDksIDB4MTEwMTUwRjQsIDB4MTEwMDUwRjMsIDB4MDAwQjYxRjYsCisweDUxRjI2MEY2LCAweDExMDFFMDAwLCAweDYxRjYxMTAwLCAweDYwRjYwMDBCLAorMHgwMTMwMDAwMCwgMHgwMTI4MDEyQywgMHgwMTIwMDEyNCwgMHgwMTE4MDExQywKKzB4MDEwNjAxMEEsIDB4MDBGRTAxMDIsIDB4MDBFMjAwRTYsIDB4MDBEQTAwREUsCisweDAwQ0MwMEQwLCAweDAwQzQwMEM4LCAweDAwQTgwMEFDLCAweDAwQTAwMEE0LAorMHgwMDhDMDA5MCwgMHgwMDg0MDA4OCwgMHgwMDY2MDA2QSwgMHgwMDVFMDA2MiwKKzB4NDIyNDQzMDAsIDB4NDIyNDQzMDAsIDB4NDIyNDQzMDAsIDB4NDMyODYxMzMsCisweDQzMDg0MzE4LCAweDQyMjg0MzA4LCAweDQyMDg0MjE4LCAweDQxMDk0MjA4LAorMHhBRkFGNDEwOSwgMHg0MzAwMjIxQiwgMHg0MzAwNDIyNCwgMHg0MzAwNDIyNCwKKzB4NjEzMzQyMjQsIDB4NDMxODQzMjgsIDB4NDIxODQyMjgsIDB4QUZBMTQxMTksCisweDQzMDAyMjFCLCAweDQzMDA0MjI0LCAweDQzMDA0MjI0LCAweDYxMzM0MjI0LAorMHg0MzA4NDMyOCwgMHg0MjI4NDMwOCwgMHg0MjA4NDIwOCwgMHg0MTA5NDExOSwKKzB4QUY4RjQxMDksIDB4NDMwMDIyMUIsIDB4NDMwMDQyMjQsIDB4NDMwMDQyMjQsCisweDYxMzM0MjI0LCAweDIxMkQ0MzI4LCAweDYyMTNBRjg0LCAweDQyMjQ0MzAwLAorMHg0MjI0NDMwMCwgMHg0MjI0NDMwMCwgMHg0MzE4NjEzMywgMHg0MzA4NDMwOCwKKzB4NDIwODQyMTgsIDB4NDEyOTQyMDgsIDB4NDEwOTQxMDksIDB4MjIxQkFGNzIsCisweDQyMjQ0MzAwLCAweDQyMjQ0MzAwLCAweDQyMjQ0MzAwLCAweDQzMTg2MTMzLAorMHg0MTI5NDIxOCwgMHhBRjY1NDExOSwgMHg0MzAwMjIxQiwgMHg0MzAwNDIyNCwKKzB4NDMwMDQyMjQsIDB4NDMwMDQyMjQsIDB4NDMwMDQyMjQsIDB4NDMwMDQyMjQsCisweDQzMDA0MjI0LCAweDQyMjRBRjU2LCAweDJGMTYyRjA2LCAweDhCMjY0MTE1LAorMHgzMTAzRTA0MCwgMHgyRjI2ODkyQiwgMHg1MkY2MkYzNiwgMHhFMDIwNTNGNSwKKzB4OEIwNTMxMDMsIDB4RTIwMDYzMjMsIDB4ODkwOTMxMDAsIDB4MzEwOEEwMDIsCisweDhCMEYyMjI4LCAweEQwMDY0RjIyLCAweDYwMzM0MDBCLCAweDRGMjY2MzAzLAorMHgxMTIxNTFGNCwgMHg2M0Y2MTEzMCwgMHg2MUY2NjJGNiwgMHg2MEY2MDAwQiwKKzB4MDAyMDA4QjQsIDB4NDEwMEM3MDksIDB4MDEyMzAxMUQsIDB4NTFGMjAwMDksCisweDExMDE1MEY0LCAweDExMDA1MEYzLCAweDAwMEI2MUY2LCAweDUxRjI2MEY2LAorMHgxMTAxRTAwMCwgMHg2MUY2MTEwMCwgMHg2MEY2MDAwQiwgMHgwMTJFMDAwMCwKKzB4MDEyNjAxMkEsIDB4MDExRTAxMjIsIDB4MDExNjAxMUEsIDB4MDEwNDAxMDgsCisweDAwRkMwMTAwLCAweDAwRTAwMEU0LCAweDAwRDgwMERDLCAweDAwQ0MwMEQwLAorMHgwMEM0MDBDOCwgMHgwMEE4MDBBQywgMHgwMEEwMDBBNCwgMHgwMDhDMDA5MCwKKzB4MDA4NDAwODgsIDB4MDA2NjAwNkEsIDB4MDA1RTAwNjIsIDB4NDMyNTQyMDEsCisweDQzMjU0MjAxLCAweDQzMjU0MjAxLCAweDQyMjk2MTIzLCAweDQyMDk0MjE5LAorMHg0MzI5NDIwOSwgMHg0MzA5NDMxOSwgMHg0MTA4NDMwOSwgMHhBRkFGNDEwOCwKKzB4NDIwMTIzMUIsIDB4NDIwMTQzMjUsIDB4NDIwMTQzMjUsIDB4NjEyMzQzMjUsCisweDQyMTk0MjI5LCAweDQzMTk0MzI5LCAweEFGQTE0MTE4LCAweDQyMDEyMzFCLAorMHg0MjAxNDMyNSwgMHg0MjAxNDMyNSwgMHg2MTIzNDMyNSwgMHg0MjA5NDIyOSwKKzB4NDMyOTQyMDksIDB4NDMwOTQzMDksIDB4NDEwODQxMTgsIDB4QUY4RjQxMDgsCisweDQyMDEyMzFCLCAweDQyMDE0MzI1LCAweDQyMDE0MzI1LCAweDYxMjM0MzI1LAorMHhBRjg1NDIyOSwgMHg0MjAxMjMxRCwgMHg0MjAxNDMyNSwgMHg0MjAxNDMyNSwKKzB4NjEyMzQzMjUsIDB4NDIwOTQyMTksIDB4NDMxOTQyMDksIDB4NDMwOTQzMDksCisweDQxMDg0MTI4LCAweEFGNzM0MTA4LCAweDQyMDEyMzFCLCAweDQyMDE0MzI1LAorMHg0MjAxNDMyNSwgMHg2MTIzNDMyNSwgMHg0MzE5NDIxOSwgMHg0MTE4NDEyOCwKKzB4MjMxQkFGNjYsIDB4NDMyNTQyMDEsIDB4NDMyNTQyMDEsIDB4NDMyNTQyMDEsCisweDQzMjU0MjAxLCAweDQzMjU0MjAxLCAweDQzMjU0MjAxLCAweEFGNTc0MjAxLAorMHgwMDAwNDMyNSwgMHgwODBBMEMwRSwgMHgwMDAyMDQwNiwgMHgxQTFDMUUyMCwKKzB4MTIxNDE2MTgsIDB4MkUzMDMyMzQsIDB4MjYyODJBMkMsIDB4M0EzQzNFNDAsCisweDZDNjI1NjQ4LCAweDQxMTEyRjI2LCAweEUyMjA4RjE4LCAweDg5MEIzMTIzLAorMHgzMjFDRDIwNCwgMHhEMTAyNjIyMCwgMHg0MTJCMzEyQywgMHgwMDA5MDAwOSwKKzB4MDAyMDA4MUUsIDB4MDAyMDA3RDQsIDB4MDAwQkUwMDAsIDB4NDAwMDYyRjYsCisweDQwMDA0MDAwLCAweDQwMDA0MDAwLCAweDQwMDA0MDAwLCAweDYyRjYwMDBCLAorMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwgMHg0MDAwNDAwMCwgMHg0MDE4NDAwMCwKKzB4NjJGNjAwMEIsIDB4NDAwMDQwMDAsIDB4NDAwMDQwMDAsIDB4NDAwMDQwMDAsCisweDQwMjg0MDAwLCAweDYyRjYwMDBCLCAweDQwMDA0MDAwLCAweDQwMTg0MDAwLAorMHgwMDBCNDAyOCwgMHhDOTBGNjJGNiwgMHg0MDA1NDAwNSwgMHg0MDA1NDAwNSwKKzB4NjJGNjAwMEIsIDB4NDAwNUM5MDcsIDB4NDAwNTQwMDUsIDB4NjJGNjAwMEIsCisweDQwMDVDOTAzLCAweDAwMEI0MDA1LCAweEM5MDE2MkY2LCAweDAwMEI0MDA1LAorMHgwMDAwNjJGNiwgMHgwODBBMEMwRSwgMHgwMDAyMDQwNiwgMHgxQTFDMUUyMCwKKzB4MTIxNDE2MTgsIDB4MkUzMDMyMzQsIDB4MjYyODJBMkMsIDB4M0EzQzNFNDAsCisweDZDNjI1NjQ4LCAweDQxMTEyRjI2LCAweEUyMjA4RjE4LCAweDg5MEIzMTIzLAorMHgzMjFDRDIwNCwgMHhEMTAyNjIyMCwgMHg0MTJCMzEyQywgMHgwMDA5MDAwOSwKKzB4MDAyMDA4REUsIDB4MDAyMDA4OTQsIDB4MDAwQkUwMDAsIDB4NDAwMTYyRjYsCisweDQwMDE0MDAxLCAweDQwMDE0MDAxLCAweDQwMDE0MDAxLCAweDYyRjYwMDBCLAorMHg0MDAxNDAwMSwgMHg0MDAxNDAwMSwgMHg0MDAxNDAwMSwgMHg0MDE5NDAwMSwKKzB4NjJGNjAwMEIsIDB4NDAwMTQwMDEsIDB4NDAwMTQwMDEsIDB4NDAwMTQwMDEsCisweDQwMjk0MDAxLCAweDYyRjYwMDBCLCAweDQwMDE0MDAxLCAweDQwMTk0MDAxLAorMHgwMDBCNDAyOSwgMHg0MDA0NjJGNiwgMHg0MDA0NDAwNCwgMHhDOTBGNDAwNCwKKzB4NjJGNjAwMEIsIDB4NDAwNDQwMDQsIDB4QzkwNzQwMDQsIDB4NjJGNjAwMEIsCisweDQwMDQ0MDA0LCAweDAwMEJDOTAzLCAweDQwMDQ2MkY2LCAweDAwMEJDOTAxLAorMHgwMDAwNjJGNiwgMHgwMDAwMDAwMCwgMHg3NzA3MzA5NiwgMHhFRTBFNjEyQywKKzB4OTkwOTUxQkEsIDB4MDc2REM0MTksIDB4NzA2QUY0OEYsIDB4RTk2M0E1MzUsCisweDlFNjQ5NUEzLCAweDBFREI4ODMyLCAweDc5RENCOEE0LCAweEUwRDVFOTFFLAorMHg5N0QyRDk4OCwgMHgwOUI2NEMyQiwgMHg3RUIxN0NCRCwgMHhFN0I4MkQwNywKKzB4OTBCRjFEOTEsIDB4MURCNzEwNjQsIDB4NkFCMDIwRjIsIDB4RjNCOTcxNDgsCisweDg0QkU0MURFLCAweDFBREFENDdELCAweDZERERFNEVCLCAweEY0RDRCNTUxLAorMHg4M0QzODVDNywgMHgxMzZDOTg1NiwgMHg2NDZCQThDMCwgMHhGRDYyRjk3QSwKKzB4OEE2NUM5RUMsIDB4MTQwMTVDNEYsIDB4NjMwNjZDRDksIDB4RkEwRjNENjMsCisweDhEMDgwREY1LCAweDNCNkUyMEM4LCAweDRDNjkxMDVFLCAweEQ1NjA0MUU0LAorMHhBMjY3NzE3MiwgMHgzQzAzRTREMSwgMHg0QjA0RDQ0NywgMHhEMjBEODVGRCwKKzB4QTUwQUI1NkIsIDB4MzVCNUE4RkEsIDB4NDJCMjk4NkMsIDB4REJCQkM5RDYsCisweEFDQkNGOTQwLCAweDMyRDg2Q0UzLCAweDQ1REY1Qzc1LCAweERDRDYwRENGLAorMHhBQkQxM0Q1OSwgMHgyNkQ5MzBBQywgMHg1MURFMDAzQSwgMHhDOEQ3NTE4MCwKKzB4QkZEMDYxMTYsIDB4MjFCNEY0QjUsIDB4NTZCM0M0MjMsIDB4Q0ZCQTk1OTksCisweEI4QkRBNTBGLCAweDI4MDJCODlFLCAweDVGMDU4ODA4LCAweEM2MENEOUIyLAorMHhCMTBCRTkyNCwgMHgyRjZGN0M4NywgMHg1ODY4NEMxMSwgMHhDMTYxMURBQiwKKzB4QjY2NjJEM0QsIDB4NzZEQzQxOTAsIDB4MDFEQjcxMDYsIDB4OThEMjIwQkMsCisweEVGRDUxMDJBLCAweDcxQjE4NTg5LCAweDA2QjZCNTFGLCAweDlGQkZFNEE1LAorMHhFOEI4RDQzMywgMHg3ODA3QzlBMiwgMHgwRjAwRjkzNCwgMHg5NjA5QTg4RSwKKzB4RTEwRTk4MTgsIDB4N0Y2QTBEQkIsIDB4MDg2RDNEMkQsIDB4OTE2NDZDOTcsCisweEU2NjM1QzAxLCAweDZCNkI1MUY0LCAweDFDNkM2MTYyLCAweDg1NjUzMEQ4LAorMHhGMjYyMDA0RSwgMHg2QzA2OTVFRCwgMHgxQjAxQTU3QiwgMHg4MjA4RjRDMSwKKzB4RjUwRkM0NTcsIDB4NjVCMEQ5QzYsIDB4MTJCN0U5NTAsIDB4OEJCRUI4RUEsCisweEZDQjk4ODdDLCAweDYyREQxRERGLCAweDE1REEyRDQ5LCAweDhDRDM3Q0YzLAorMHhGQkQ0NEM2NSwgMHg0REIyNjE1OCwgMHgzQUI1NTFDRSwgMHhBM0JDMDA3NCwKKzB4RDRCQjMwRTIsIDB4NEFERkE1NDEsIDB4M0REODk1RDcsIDB4QTREMUM0NkQsCisweEQzRDZGNEZCLCAweDQzNjlFOTZBLCAweDM0NkVEOUZDLCAweEFENjc4ODQ2LAorMHhEQTYwQjhEMCwgMHg0NDA0MkQ3MywgMHgzMzAzMURFNSwgMHhBQTBBNEM1RiwKKzB4REQwRDdDQzksIDB4NTAwNTcxM0MsIDB4MjcwMjQxQUEsIDB4QkUwQjEwMTAsCisweEM5MEMyMDg2LCAweDU3NjhCNTI1LCAweDIwNkY4NUIzLCAweEI5NjZENDA5LAorMHhDRTYxRTQ5RiwgMHg1RURFRjkwRSwgMHgyOUQ5Qzk5OCwgMHhCMEQwOTgyMiwKKzB4QzdEN0E4QjQsIDB4NTlCMzNEMTcsIDB4MkVCNDBEODEsIDB4QjdCRDVDM0IsCisweEMwQkE2Q0FELCAweEVEQjg4MzIwLCAweDlBQkZCM0I2LCAweDAzQjZFMjBDLAorMHg3NEIxRDI5QSwgMHhFQUQ1NDczOSwgMHg5REQyNzdBRiwgMHgwNERCMjYxNSwKKzB4NzNEQzE2ODMsIDB4RTM2MzBCMTIsIDB4OTQ2NDNCODQsIDB4MEQ2RDZBM0UsCisweDdBNkE1QUE4LCAweEU0MEVDRjBCLCAweDkzMDlGRjlELCAweDBBMDBBRTI3LAorMHg3RDA3OUVCMSwgMHhGMDBGOTM0NCwgMHg4NzA4QTNEMiwgMHgxRTAxRjI2OCwKKzB4NjkwNkMyRkUsIDB4Rjc2MjU3NUQsIDB4ODA2NTY3Q0IsIDB4MTk2QzM2NzEsCisweDZFNkIwNkU3LCAweEZFRDQxQjc2LCAweDg5RDMyQkUwLCAweDEwREE3QTVBLAorMHg2N0RENEFDQywgMHhGOUI5REY2RiwgMHg4RUJFRUZGOSwgMHgxN0I3QkU0MywKKzB4NjBCMDhFRDUsIDB4RDZENkEzRTgsIDB4QTFEMTkzN0UsIDB4MzhEOEMyQzQsCisweDRGREZGMjUyLCAweEQxQkI2N0YxLCAweEE2QkM1NzY3LCAweDNGQjUwNkRELAorMHg0OEIyMzY0QiwgMHhEODBEMkJEQSwgMHhBRjBBMUI0QywgMHgzNjAzNEFGNiwKKzB4NDEwNDdBNjAsIDB4REY2MEVGQzMsIDB4QTg2N0RGNTUsIDB4MzE2RThFRUYsCisweDQ2NjlCRTc5LCAweENCNjFCMzhDLCAweEJDNjY4MzFBLCAweDI1NkZEMkEwLAorMHg1MjY4RTIzNiwgMHhDQzBDNzc5NSwgMHhCQjBCNDcwMywgMHgyMjAyMTZCOSwKKzB4NTUwNTI2MkYsIDB4QzVCQTNCQkUsIDB4QjJCRDBCMjgsIDB4MkJCNDVBOTIsCisweDVDQjM2QTA0LCAweEMyRDdGRkE3LCAweEI1RDBDRjMxLCAweDJDRDk5RThCLAorMHg1QkRFQUUxRCwgMHg5QjY0QzJCMCwgMHhFQzYzRjIyNiwgMHg3NTZBQTM5QywKKzB4MDI2RDkzMEEsIDB4OUMwOTA2QTksIDB4RUIwRTM2M0YsIDB4NzIwNzY3ODUsCisweDA1MDA1NzEzLCAweDk1QkY0QTgyLCAweEUyQjg3QTE0LCAweDdCQjEyQkFFLAorMHgwQ0I2MUIzOCwgMHg5MkQyOEU5QiwgMHhFNUQ1QkUwRCwgMHg3Q0RDRUZCNywKKzB4MEJEQkRGMjEsIDB4ODZEM0QyRDQsIDB4RjFENEUyNDIsIDB4NjhEREIzRjgsCisweDFGREE4MzZFLCAweDgxQkUxNkNELCAweEY2QjkyNjVCLCAweDZGQjA3N0UxLAorMHgxOEI3NDc3NywgMHg4ODA4NUFFNiwgMHhGRjBGNkE3MCwgMHg2NjA2M0JDQSwKKzB4MTEwMTBCNUMsIDB4OEY2NTlFRkYsIDB4Rjg2MkFFNjksIDB4NjE2QkZGRDMsCisweDE2NkNDRjQ1LCAweEEwMEFFMjc4LCAweEQ3MEREMkVFLCAweDRFMDQ4MzU0LAorMHgzOTAzQjNDMiwgMHhBNzY3MjY2MSwgMHhEMDYwMTZGNywgMHg0OTY5NDc0RCwKKzB4M0U2RTc3REIsIDB4QUVEMTZBNEEsIDB4RDlENjVBREMsIDB4NDBERjBCNjYsCisweDM3RDgzQkYwLCAweEE5QkNBRTUzLCAweERFQkI5RUM1LCAweDQ3QjJDRjdGLAorMHgzMEI1RkZFOSwgMHhCREJERjIxQywgMHhDQUJBQzI4QSwgMHg1M0IzOTMzMCwKKzB4MjRCNEEzQTYsIDB4QkFEMDM2MDUsIDB4Q0RENzA2OTMsIDB4NTRERTU3MjksCisweDIzRDk2N0JGLCAweEIzNjY3QTJFLCAweEM0NjE0QUI4LCAweDVENjgxQjAyLAorMHgyQTZGMkI5NCwgMHhCNDBCQkUzNywgMHhDMzBDOEVBMSwgMHg1QTA1REYxQiwKKzB4MkQwMkVGOEQsIDB4NTQ0RjBEMEEsIDB4NTAyMDUzNTUsIDB4MjAzMTJENDgsCisweDAwM0E1NzQ2LCAweDcyNjM2NTY0LCAweDY5NzQ3MDc5LCAweDY1MjA2RTZGLAorMHg3MjZGNzI3MiwgMHgwQTBEMjEyMSwgMHgwMDAwMDAwMCwgMHg2NTY0NjY3QSwKKzB4NzA3OTcyNjMsIDB4NjU3MjVGNzQsIDB4NjE2Qzc1NjcsIDB4Nzk3MjZGNzQsCisweDYyNjE3NDVGLCAweDcyMjA2NTZDLCAweDIwM0Q3NDY1LCAweDAwMDAwMDAwLAorMHg0NTQ4NTQ0MSwgMHgzODczMTY1MiwgMHg4OUFDRkY5MSwgMHhFRTU1RDE3OCwKKzB4RUUwMDBEMEEsIH07CisKK2NvbnN0IHUzMl90IHpjRndJbWFnZVNpemU9MzUwODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocG1haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocG1haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTY1YzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwbWFpbi5jCkBAIC0wLDAgKzEsNDY0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAiLi4vODAyMTFjb3JlL2NwcmVjb21wLmgiCisjaW5jbHVkZSAiaHBhbmkuaCIKKyNpbmNsdWRlICJocHVzYi5oIgorI2luY2x1ZGUgIm90dXMuaW5pIgorCitleHRlcm4gY29uc3QgdTMyX3QgemNGd0ltYWdlW107CitleHRlcm4gY29uc3QgdTMyX3QgemNGd0ltYWdlU2l6ZTsKK2V4dGVybiBjb25zdCB1MzJfdCB6Y0RLRndJbWFnZVtdOworZXh0ZXJuIGNvbnN0IHUzMl90IHpjREtGd0ltYWdlU2l6ZTsKK2V4dGVybiBjb25zdCB1MzJfdCB6Y0Z3SW1hZ2VTUElbXTsKK2V4dGVybiBjb25zdCB1MzJfdCB6Y0Z3SW1hZ2VTUElTaXplOworCisjaWZkZWYgWk1fT1RVU19MSU5VWF9QSEFTRV8yCitleHRlcm4gY29uc3QgdTMyX3QgemNGd0J1ZkltYWdlW107CitleHRlcm4gY29uc3QgdTMyX3QgemNGd0J1ZkltYWdlU2l6ZTsKK2V4dGVybiBjb25zdCB1MzJfdCB6Y1AyRndJbWFnZVtdOworZXh0ZXJuIGNvbnN0IHUzMl90IHpjUDJGd0ltYWdlU2l6ZTsKKyNlbmRpZgorZXh0ZXJuIHZvaWQgemZJbml0Q21kUXVldWUoemRldl90KiBkZXYpOworZXh0ZXJuIHUxNl90IHpmSXNzdWVDbWQoemRldl90KiBkZXYsIHUzMl90KiBjbWQsIHUxNl90IGNtZExlbiwKKyAgICAgICAgdTE2X3Qgc3JjLCB1OF90KiBidWYpOworZXh0ZXJuIHZvaWQgemZJZGxSc3AoemRldl90KiBkZXYsIHUzMl90KiByc3AsIHUxNl90IHJzcExlbik7CitleHRlcm4gdTE2X3QgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoemRldl90KiBkZXYsIHUzMl90IGFkZHIsIHUzMl90IHZhbCk7CitleHRlcm4gdTE2X3QgemZGbHVzaERlbGF5V3JpdGUoemRldl90KiBkZXYpOworZXh0ZXJuIHZvaWQgemZVc2JJbml0KHpkZXZfdCogZGV2KTsKK2V4dGVybiB1MTZfdCB6ZkZpcm13YXJlRG93bmxvYWQoemRldl90KiBkZXYsIHUzMl90KiBmdywgdTMyX3QgbGVuLCB1MzJfdCBvZmZzZXQpOworZXh0ZXJuIHUxNl90IHpmRmlybXdhcmVEb3dubG9hZE5vdEp1bXAoemRldl90KiBkZXYsIHUzMl90KiBmdywgdTMyX3QgbGVuLCB1MzJfdCBvZmZzZXQpOworZXh0ZXJuIHZvaWQgemZVc2JGcmVlKHpkZXZfdCogZGV2KTsKK2V4dGVybiB1MTZfdCB6ZkN3bUlzRXh0Q2hhbkJ1c3kodTMyX3QgY3RsQnVzeSwgdTMyX3QgZXh0QnVzeSk7CitleHRlcm4gdm9pZCB6ZkNvcmVDd21CdXN5KHpkZXZfdCogZGV2LCB1MTZfdCBidXN5KTsKKworLyogUHJvdG90eXBlcyAqLwordm9pZCB6ZkluaXRSZih6ZGV2X3QqIGRldiwgdTMyX3QgZnJlcXVlbmN5KTsKK3ZvaWQgemZJbml0UGh5KHpkZXZfdCogZGV2LCB1MzJfdCBmcmVxdWVuY3ksIHU4X3QgYnc0MCk7Cit2b2lkIHpmSW5pdE1hYyh6ZGV2X3QqIGRldik7CisKK3ZvaWQgemZTZXRQb3dlckNhbFRhYmxlKHpkZXZfdCogZGV2LCB1MzJfdCBmcmVxdWVuY3ksIHU4X3QgYnc0MCwgdThfdCBleHRPZmZzZXQpOwordm9pZCB6ZkluaXRQb3dlckNhbCh6ZGV2X3QqIGRldik7CisKKyNpZmRlZiBaTV9EUlZfSU5JVF9VU0JfTU9ERQordm9pZCB6ZkluaXRVc2JNb2RlKHpkZXZfdCogZGV2KTsKK3UxNl90IHpmSHBVc2JSZXNldCh6ZGV2X3QqIGRldik7CisjZW5kaWYKKworLyogQmFuayAwIDEgMiAzIDUgNiA3ICovCit2b2lkIHpmU2V0UmZSZWdzKHpkZXZfdCogZGV2LCB1MzJfdCBmcmVxdWVuY3kpOworLyogQmFuayA0ICovCit2b2lkIHpmU2V0QmFuazRBbmRQb3dlclRhYmxlKHpkZXZfdCogZGV2LCB1MzJfdCBmcmVxdWVuY3ksIHU4X3QgYnc0MCwKKyAgICAgICAgdThfdCBleHRPZmZzZXQpOworLyogR2V0IHBhcmFtIGZvciB0dXJub2ZmZHluICovCit2b2lkIHpmR2V0SHdUdXJuT2ZmZHluUGFyYW0oemRldl90KiBkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyX3QgZnJlcXVlbmN5LCB1OF90IGJ3NDAsIHU4X3QgZXh0T2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZGVsdGFfc2xvcGVfY29lZmZfZXhwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZGVsdGFfc2xvcGVfY29lZmZfbWFuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogZGVsdGFfc2xvcGVfY29lZmZfZXhwX3NoZ2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWx0YV9zbG9wZV9jb2VmZl9tYW5fc2hnaSk7CisKK3ZvaWQgemZTZWxBZGNDbGsoemRldl90KiBkZXYsIHU4X3QgYnc0MCwgdTMyX3QgZnJlcXVlbmN5KTsKK3UzMl90IHpmSHBFY2hvQ29tbWFuZCh6ZGV2X3QqIGRldiwgdTMyX3QgdmFsdWUpOworCisKKworI2RlZmluZSB6bV9ocF9wcml2KHgpICgoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPngpCitzdHJ1Y3QgenNIcFByaXYgemdIcFByaXY7CisKKyNkZWZpbmUgWk1fRklSTVdBUkVfV0xBTl9BRERSICAgICAgICAgICAweDIwMDAwMAorI2RlZmluZSBaTV9GSVJNV0FSRV9TUElfQUREUiAgICAgIDB4MTE0MDAwCisvKiAwOiByZWFsIGNoaXAgICAgIDE6IEZQR0EgdGVzdCAqLworI2RlZmluZSBaTV9GUEdBX1BIWSAgMAorCisjZGVmaW5lIHJlZ193cml0ZShhZGRyLCB2YWwpIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgYWRkcisweDFiYzAwMCwgdmFsKQorI2RlZmluZSB6bV9taW4oQSwgQikgKChBPkIpPyBCOkEpCisKKworLyoqKioqKioqKioqKioqKioqKioqIEludGlhbGl6YXRpb24gKioqKioqKioqKioqKioqKioqKiovCit1MTZfdCB6ZkhwSW5pdCh6ZGV2X3QqIGRldiwgdTMyX3QgZnJlcXVlbmN5KQoreworICAgIHUxNl90IHJldDsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvKiBJbml0aWFsaXphIEhBTCBQbHVzIHByaXZhdGUgdmFyaWFibGVzICovCisgICAgd2QtPmhwUHJpdmF0ZSA9ICZ6Z0hwUHJpdjsKKworICAgICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aGFsQ2FwYWJpbGl0eSA9IFpNX0hQX0NBUF8xMU47CisKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmh3RnJlcXVlbmN5ID0gMDsKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmh3Qnc0MCA9IDA7CisgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5od0V4dE9mZnNldCA9IDA7CisKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmRpc2FibGVEZnNDaCA9IDA7CisKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmxlZE1vZGVbMF0gPSAxOworICAgICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+bGVkTW9kZVsxXSA9IDE7CisgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5zdHJvbmdSU1NJID0gMDsKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPnJ4U3Ryb25nUlNTSSA9IDA7CisKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPnNsb3RUeXBlID0gMTsKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmFnZ1BrdE51bSA9IDB4MTAwMDBhOworCisgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5lZXByb21JbWFnZUluZGV4ID0gMDsKKworCisgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5lZXByb21JbWFnZVJkUmVxICAgICA9IDA7CisjaWZkZWYgWk1fT1RVU19SWF9TVFJFQU1fTU9ERQorICAgICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+cmVtYWluQnVmID0gTlVMTDsKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPnVzYlJ4UmVtYWluTGVuID0gMDsKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPnVzYlJ4UGt0TGVuID0gMDsKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPnVzYlJ4UGFkTGVuID0gMDsKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPnVzYlJ4VHJhbnNmZXJMZW4gPSAwOworI2VuZGlmCisKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmVuYWJsZUJCSGVhdnlDbGlwID0gMTsKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmh3QkJIZWF2eUNsaXAgICAgID0gMTsgLy8gZm9yY2UgZW5hYmxlIDgxMDcKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmRvQkJIZWF2eUNsaXAgICAgID0gMDsKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPnNldFZhbHVlSGVhdnlDbGlwID0gMDsKKworCisgICAgLyogSW5pdGlhbGl6ZSBkcml2ZXIgY29yZSAqLworICAgIHpmSW5pdENtZFF1ZXVlKGRldik7CisKKyAgICAvKiBJbml0aWFsaXplIFVTQiAqLworICAgIHpmVXNiSW5pdChkZXYpOworCisjaWYgWk1fU1dfTE9PUF9CQUNLICE9IDEKKworICAgIC8qIFRPRE8gOiBbRG93bmxvYWQgRlddICovCisgICAgaWYgKHdkLT5tb2RlTURLRW5hYmxlKQorICAgIHsKKyAgICAgICAgLyogZG93bmxvYWQgdGhlIE1ESyBmaXJtd2FyZSAqLworICAgICAgICBpZiAoKHJldCA9IHpmRmlybXdhcmVEb3dubG9hZChkZXYsICh1MzJfdCopemNES0Z3SW1hZ2UsCisgICAgICAgICAgICAgICAgKHUzMl90KXpjREtGd0ltYWdlU2l6ZSwgWk1fRklSTVdBUkVfV0xBTl9BRERSKSkgIT0gWk1fU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgLyogVE9ETyA6IGV4Y2VwdGlvbiBoYW5kbGluZyAqLworICAgICAgICAgICAgLy9yZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICNpZm5kZWYgWk1fT1RVU19MSU5VWF9QSEFTRV8yCisgICAgICAgIC8qIGRvbndsb2FkIHRoZSBub3JtYWwgZnJpbXdhcmUgKi8KKyAgICAgICAgaWYgKChyZXQgPSB6ZkZpcm13YXJlRG93bmxvYWQoZGV2LCAodTMyX3QqKXpjRndJbWFnZSwKKyAgICAgICAgICAgICAgICAodTMyX3QpemNGd0ltYWdlU2l6ZSwgWk1fRklSTVdBUkVfV0xBTl9BRERSKSkgIT0gWk1fU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgLyogVE9ETyA6IGV4Y2VwdGlvbiBoYW5kbGluZyAqLworICAgICAgICAgICAgLy9yZXR1cm4gMTsKKyAgICAgICAgfQorICAgICNlbHNlCisKKyAgICAgICAgLy8gMS1QSCBmdzogUmVhZE1hYygpIHN0b3JlIHNvbWUgZ2xvYmFsIHZhcmlhYmxlCisgICAgICAgIGlmICgocmV0ID0gemZGaXJtd2FyZURvd25sb2FkTm90SnVtcChkZXYsICh1MzJfdCopemNGd0J1ZkltYWdlLAorICAgICAgICAgICAgICAgICh1MzJfdCl6Y0Z3QnVmSW1hZ2VTaXplLCAweDEwMjgwMCkpICE9IFpNX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIERiZ1ByaW50KCJEbCB6Y0Z3QnVmSW1hZ2UgZmFpbGVkISIpOworICAgICAgICB9CisKKyAgICAgICAgemZ3U2xlZXAoZGV2LCAxMDAwKTsKKworICAgICAgICBpZiAoKHJldCA9IHpmRmlybXdhcmVEb3dubG9hZChkZXYsICh1MzJfdCopemNGd0ltYWdlLAorICAgICAgICAgICAgICAgICh1MzJfdCl6Y0Z3SW1hZ2VTaXplLCBaTV9GSVJNV0FSRV9XTEFOX0FERFIpKSAhPSBaTV9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBEYmdQcmludCgiRGwgemNGd0J1ZkltYWdlIGZhaWxlZCEiKTsKKyAgICAgICAgfQorICAgICNlbmRpZgorICAgIH0KKyNlbmRpZgorCisjaWZkZWYgWk1fRFJWX0lOSVRfVVNCX01PREUKKyAgICAvKiBJbml0IFVTQiBNb2RlICovCisgICAgemZJbml0VXNiTW9kZShkZXYpOworCisgICAgLyogRG8gdGhlIFVTQiBSZXNldCAqLworICAgIHpmSHBVc2JSZXNldChkZXYpOworI2VuZGlmCisKKy8qIFJlZ2lzdGVyIHNldHRpbmcgKi8KKy8qIFpNX0RSSVZFUl9NT0RFTF9UWVBFX01ESworICogIDE9PmZvciBNREssIGRpc2FibGUgaW5pdCBSRiwgUEhZLCBhbmQgTUFDLAorICogIDA9Pm5vcm1hbCBpbml0CisgKi8KKy8vI2lmICgoWk1fU1dfTE9PUF9CQUNLICE9IDEpICYmIChaTV9EUklWRVJfTU9ERUxfVFlQRV9NREsgIT0xKSkKKyNpZiBaTV9TV19MT09QX0JBQ0sgIT0gMQorICAgIGlmKCF3ZC0+bW9kZU1ES0VuYWJsZSkKKyAgICB7CisgICAgICAgIC8qIEluaXQgTUFDICovCisgICAgICAgIHpmSW5pdE1hYyhkZXYpOworCisgICAgI2lmIFpNX0ZXX0xPT1BfQkFDSyAhPSAxCisgICAgICAgIC8qIEluaXQgUEhZICovCisgICAgICAgIHpmSW5pdFBoeShkZXYsIGZyZXF1ZW5jeSwgMCk7CisKKyAgICAgICAgLyogSW5pdCBSRiAqLworICAgICAgICB6ZkluaXRSZihkZXYsIGZyZXF1ZW5jeSk7CisKKyAgICAgICAgI2lmIFpNX0ZQR0FfUEhZID09IDAKKyAgICAgICAgLyogQnJpbmdVcCBpc3N1ZSAqLworICAgICAgICAvL3pmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHg5ODAwKzB4MWJjMDAwLCAweDEwMDAwMDA3KTsKKyAgICAgICAgLy96ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworICAgICAgICAjZW5kaWYKKworICAgICNlbmRpZiAvKiBlbmQgb2YgWk1fRldfTE9PUF9CQUNLICE9IDEgKi8KKyAgICB9CisjZW5kaWYgLyogZW5kIG9mICgoWk1fU1dfTE9PUF9CQUNLICE9IDEpICYmIChaTV9EUklWRVJfTU9ERUxfVFlQRV9NREsgIT0xKSkgKi8KKworICAgIHpmSHBFY2hvQ29tbWFuZChkZXYsIDB4QUFCQkNDREQpOworCisgICAgcmV0dXJuIDA7Cit9CisKKwordTE2X3QgemZIcFJlaW5pdCh6ZGV2X3QqIGRldiwgdTMyX3QgZnJlcXVlbmN5KQoreworICAgIHUxNl90IHJldDsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmhhbFJlSW5pdCA9IDE7CisKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPnN0cm9uZ1JTU0kgPSAwOworICAgICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+cnhTdHJvbmdSU1NJID0gMDsKKworI2lmZGVmIFpNX09UVVNfUlhfU1RSRUFNX01PREUKKyAgICBpZiAoKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5yZW1haW5CdWYgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPnJlbWFpbkJ1ZiwgMCk7CisgICAgfQorICAgICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+cmVtYWluQnVmID0gTlVMTDsKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPnVzYlJ4UmVtYWluTGVuID0gMDsKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPnVzYlJ4UGt0TGVuID0gMDsKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPnVzYlJ4UGFkTGVuID0gMDsKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPnVzYlJ4VHJhbnNmZXJMZW4gPSAwOworI2VuZGlmCisKKyAgICB6ZkluaXRDbWRRdWV1ZShkZXYpOworICAgIHpmQ29yZVJlaW5pdChkZXYpOworCisgICAgI2lmbmRlZiBaTV9PVFVTX0xJTlVYX1BIQVNFXzIKKyAgICAvKiBEb3dubG9hZCBmaXJtd2FyZSAqLworICAgIGlmICgocmV0ID0gemZGaXJtd2FyZURvd25sb2FkKGRldiwgKHUzMl90Kil6Y0Z3SW1hZ2UsCisgICAgICAgICAgICAodTMyX3QpemNGd0ltYWdlU2l6ZSwgWk1fRklSTVdBUkVfV0xBTl9BRERSKSkgIT0gWk1fU1VDQ0VTUykKKyAgICB7CisgICAgICAgIC8qIFRPRE8gOiBleGNlcHRpb24gaGFuZGxpbmcgKi8KKyAgICAgICAgLy9yZXR1cm4gMTsKKyAgICB9CisgICAgI2Vsc2UKKyAgICBpZiAoKHJldCA9IHpmRmlybXdhcmVEb3dubG9hZChkZXYsICh1MzJfdCopemNQMkZ3SW1hZ2UsCisgICAgICAgICAgICAodTMyX3QpemNQMkZ3SW1hZ2VTaXplLCBaTV9GSVJNV0FSRV9XTEFOX0FERFIpKSAhPSBaTV9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgLyogVE9ETyA6IGV4Y2VwdGlvbiBoYW5kbGluZyAqLworICAgICAgICAvL3JldHVybiAxOworICAgIH0KKyAgICAjZW5kaWYKKworI2lmZGVmIFpNX0RSVl9JTklUX1VTQl9NT0RFCisgICAgLyogSW5pdCBVU0IgTW9kZSAqLworICAgIHpmSW5pdFVzYk1vZGUoZGV2KTsKKworICAgIC8qIERvIHRoZSBVU0IgUmVzZXQgKi8KKyAgICB6ZkhwVXNiUmVzZXQoZGV2KTsKKyNlbmRpZgorCisgICAgLyogSW5pdCBNQUMgKi8KKyAgICB6ZkluaXRNYWMoZGV2KTsKKworICAgIC8qIEluaXQgUEhZICovCisgICAgemZJbml0UGh5KGRldiwgZnJlcXVlbmN5LCAwKTsKKyAgICAvKiBJbml0IFJGICovCisgICAgemZJbml0UmYoZGV2LCBmcmVxdWVuY3kpOworCisgICAgI2lmIFpNX0ZQR0FfUEhZID09IDAKKyAgICAvKiBCcmluZ1VwIGlzc3VlICovCisgICAgLy96ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4OTgwMCsweDFiYzAwMCwgMHgxMDAwMDAwNyk7CisgICAgLy96ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworICAgICNlbmRpZgorCisgICAgemZIcEVjaG9Db21tYW5kKGRldiwgMHhBQUJCQ0NERCk7CisKKyAgICByZXR1cm4gMDsKK30KKworCit1MTZfdCB6ZkhwUmVsZWFzZSh6ZGV2X3QqIGRldikKK3sKKyAgICAvKiBGcmVlIFVTQiByZXNvdXJjZSAqLworICAgIHpmVXNiRnJlZShkZXYpOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIE1ESyBtb2RlIHNldHRpbmcgZm9yIGRvbnRSZXRyYW5zbWl0ICovCit2b2lkIHpmSHBDb25maWdGTSh6ZGV2X3QqIGRldiwgdTMyX3QgUnhNYXhTaXplLCB1MzJfdCBEb250UmV0cmFuc21pdCkKK3sKKyAgICB1MzJfdCBjbWRbM107CisgICAgdTE2X3QgcmV0OworCisgICAgY21kWzBdID0gOCB8IChaTV9DTURfQ09ORklHIDw8IDgpOworICAgIGNtZFsxXSA9IFJ4TWF4U2l6ZTsgICAgICAgICAgLyogemdSeE1heFNpemUgKi8KKyAgICBjbWRbMl0gPSBEb250UmV0cmFuc21pdDsgICAgIC8qIHpnRG9udFJldHJhbnNtaXQgKi8KKworICAgIHJldCA9IHpmSXNzdWVDbWQoZGV2LCBjbWQsIDEyLCBaTV9PSURfSU5URVJOQUxfV1JJVEUsIDApOworfQorCitjb25zdCB1OF90IHpjWHBkVG9QZFsxNl0gPQoreworIC8qIDB4MCwgMHgxLCAweDIsIDB4MywgMHg0LCAweDUsIDB4NiwgMHg3LCAweDgsIDB4OSwgMHhBLCAweEIsIDB4QywgMHhELCAweEUsIDB4RiAqLworICAgIDB4MiwgMHgyLCAweDIsIDB4MSwgMHgyLCAweDIsIDB4NiwgMHgyLCAweDIsIDB4MywgMHg3LCAweDIsIDB4QiwgMHgyLCAweDIsIDB4MgorfTsKKworLyoqKioqKioqKioqKioqKioqKioqIFJGIGFuZCBQSFkgKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgemZJbml0UGh5KHpkZXZfdCogZGV2LCAgdTMyX3QgZnJlcXVlbmN5LCB1OF90IGJ3NDApCit7CisgICAgdTE2X3QgaSwgaiwgazsKKyAgICB1MTZfdCBlbnRyaWVzOworICAgIHUxNl90IG1vZGVzSW5kZXggPSAwOworICAgIHUxNl90IGZyZXFJbmRleCA9IDA7CisgICAgdTMyX3QgdG1wLCB0bXAxOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIHUzMl90IGVlcHJvbUJvYXJkRGF0YVsxNV1bNl0gPSB7CisgICAgLyogUmVnaXN0ZXIgICBBLTIwICAgICAgICBBLTIwLzQwICAgICBHLTIwLzQwICAgICBHLTIwICAgICAgICBHLVR1cmJvICAgICovCisgICAgICAgIHsweDk5NjQsICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMH0sCisgICAgICAgIHsweDk5NjAsICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMH0sCisgICAgICAgIHsweGI5NjAsICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMH0sCisgICAgICAgIHsweDk4NDQsICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMH0sCisgICAgICAgIHsweDk4NTAsICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMH0sCisgICAgICAgIHsweDk4MzQsICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMH0sCisgICAgICAgIHsweDk4MjgsICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMH0sCisgICAgICAgIHsweGM4NjQsICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMH0sCisgICAgICAgIHsweDk4NDgsICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMH0sCisgICAgICAgIHsweGI4NDgsICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMH0sCisgICAgICAgIHsweGEyMGMsICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMH0sCisgICAgICAgIHsweGMyMGMsICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMH0sCisgICAgICAgIHsweDk5MjAsICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMH0sCisgICAgICAgIHsweGI5MjAsICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMH0sCisgICAgICAgIHsweGEyNTgsICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMH0sCisgICAgfTsKKworICAgIC8qICMxIFNhdmUgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHJlbGF0ZWQgUklGUyByZWdpc3RlciBzZXR0aW5ncyAqLworICAgIC8vKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5pc0luaXRpYWxQaHkrKzsKKworICAgIC8qCisgICAgICogU2V0dXAgdGhlIGluZGljZXMgZm9yIHRoZSBuZXh0IHNldCBvZiByZWdpc3RlciBhcnJheSB3cml0ZXMKKyAgICAgKiBQSFkgbW9kZSBpcyBzdGF0aWMyMCAvIDIwNDAKKyAgICAgKiBGcmVxdWVuY3kgaXMgMi40R0h6IChCKSAvIDVHSHogKEEpCisgICAgICovCisgICAgaWYgKCBmcmVxdWVuY3kgPiBaTV9DSF9HXzE0ICkKKyAgICB7CisgICAgICAgIC8qIDVHSHogKi8KKyAgICAgICAgZnJlcUluZGV4ICA9IDE7CisgICAgICAgIGlmIChidzQwKQorICAgICAgICB7CisgICAgICAgICAgICBtb2Rlc0luZGV4ID0gMjsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzAoImluaXQgYXI1NDE2TW9kZXMgaW4gMjogQS0yMC80MCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbW9kZXNJbmRleCA9IDE7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJpbml0IGFyNTQxNk1vZGVzIGluIDE6IEEtMjAiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiAyLjRHSHogKi8KKyAgICAgICAgZnJlcUluZGV4ICA9IDI7CisgICAgICAgIGlmIChidzQwKQorICAgICAgICB7CisgICAgICAgICAgICBtb2Rlc0luZGV4ID0gMzsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzAoImluaXQgYXI1NDE2TW9kZXMgaW4gMzogRy0yMC80MCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbW9kZXNJbmRleCA9IDQ7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJpbml0IGFyNTQxNk1vZGVzIGluIDQ6IEctMjAiKTsKKyAgICAgICAgfQorICAgIH0KKworCisjaWYgWk1fRlBHQV9QSFkgPT0gMQorICAgIC8qIFN0YXJ0aW5nIEV4dGVybmFsIEhhaW5hbiBSZWdpc3RlciBJbml0aWFsaXphdGlvbiAqLworICAgIC8qIFRPRE86ICovCisKKyAgICB6ZndTbGVlcChkZXYsIDEwKTsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKlNldCBjb3JyZWN0IEJhc2ViYW5kIHRvIGFuYWxvZyBzaGlmdCBzZXR0aW5nIHRvIGFjY2VzcyBhbmFsb2cgY2hpcHMuCisgICAgICovCisgICAgLy9yZWdfd3JpdGUoUEhZX0JBU0UsIDB4MDAwMDAwMDcpOworLy8gICAgcmVnX3dyaXRlKDB4OTgwMCwgMHgwMDAwMDAwNyk7CisKKyAgICAvKgorICAgICAqIFdyaXRlIGFkZGFjIHNoaWZ0cworICAgICAqLworICAgICAvLyBkbyB0aGlzIGluIGZpcm13YXJlCisKKworCisgICAgLyogWmVyb2l6ZSBib2FyZCBkYXRhICovCisgICAgZm9yIChqPTA7IGo8MTU7IGorKykKKyAgICB7CisgICAgICAgIGZvciAoaz0xOyBrPD00OyBrKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGVlcHJvbUJvYXJkRGF0YVtqXVtrXSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgIC8qCisgICAgICogUmVnaXN0ZXIgc2V0dGluZyBieSBtb2RlCisgICAgICovCisKKyAgICBlbnRyaWVzID0gc2l6ZW9mKGFyNTQxNk1vZGVzKSAvIHNpemVvZigqYXI1NDE2TW9kZXMpOworICAgIHptX21zZzFfc2NhbihaTV9MVl8yLCAiTW9kZXMgcmVnaXN0ZXIgc2V0dGluZyBlbnRyaWVzPSIsIGVudHJpZXMpOworICAgIGZvciAoaT0wOyBpPGVudHJpZXM7IGkrKykKKyAgICB7CisjaWYgMAorICAgICAgICBpZiAoICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aHdOb3RGaXJzdEluaXQgJiYgKGFyNTQxNk1vZGVzW2ldWzBdID09IDB4YTI3YykgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBGb3JjZSBkaXNhYmxlIENSNjcxIGJpdDIwIC8gNzgyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIC8qIFRoZSBidWcgaGFzIHRvIGRvIHdpdGggdGhlIHBvbGFyaXR5IG9mIHRoZSBwZGFkYyBvZmZzZXQgY2FsaWJyYXRpb24uICBUaGVyZSAqLworICAgICAgICAgICAgLyogaXMgYW4gaW5pdGlhbCBjYWxpYnJhdGlvbiB0aGF0IGlzIE9LLCBhbmQgdGhlcmUgaXMgYSBjb250aW51b3VzICAgICAgICAgICAgICovCisgICAgICAgICAgICAvKiBjYWxpYnJhdGlvbiB0aGF0IHVwZGF0ZXMgdGhlIHBkZGFjIHdpdGggdGhlIHdyb25nIHBvbGFyaXR5LiAgRm9ydHVuYXRlbHkgICAgKi8KKyAgICAgICAgICAgIC8qIHRoZSBzZWNvbmQgbG9vcCBjYW4gYmUgZGlzYWJsZWQgd2l0aCBhIGJpdCBjYWxsZWQgZW5fcGRfZGNfb2Zmc2V0X3Roci4gICAgICAqLworCisgICAgICAgICAgICByZWdfd3JpdGUoYXI1NDE2TW9kZXNbaV1bMF0sIChhcjU0MTZNb2Rlc1tpXVttb2Rlc0luZGV4XSYgMHhmZmVmZmZmZikgKTsKKyAgICAgICAgICAgICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aHdOb3RGaXJzdEluaXQgPSAxOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworI2VuZGlmCisgICAgICAgICAgICAvKiBGaXJzdFRpbWUgSW5pdCBvciBub3QgMHhhMjdjKENSNjcxKSAqLworICAgICAgICAgICAgcmVnX3dyaXRlKGFyNTQxNk1vZGVzW2ldWzBdLCBhcjU0MTZNb2Rlc1tpXVttb2Rlc0luZGV4XSk7CisvLyAgICAgICAgfQorICAgICAgICAvKiBJbml0aWFsaXplIGJvYXJkIGRhdGEgKi8KKyAgICAgICAgZm9yIChqPTA7IGo8MTU7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFyNTQxNk1vZGVzW2ldWzBdID09IGVlcHJvbUJvYXJkRGF0YVtqXVswXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGs9MTsgazw9NDsgaysrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tQm9hcmREYXRhW2pdW2tdID0gYXI1NDE2TW9kZXNbaV1ba107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qICMxIFNhdmUgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHJlbGF0ZWQgUklGUyByZWdpc3RlciBzZXR0aW5ncyAqLworICAgICAgICAvL2lmKCAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmlzSW5pdGlhbFBoeSA9PSAxICkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKGFyNTQxNk1vZGVzW2ldWzBdKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMHg5ODUwIDoKKyAgICAgICAgICAgICAgICAgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5pbml0RGVzaXJlZFNpZ1NpemUgICAgICAgICAgID0gYXI1NDE2TW9kZXNbaV1bbW9kZXNJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMHg5ODVjIDoKKyAgICAgICAgICAgICAgICAgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5pbml0QUdDICAgICAgICAgICAgICAgICAgICAgID0gYXI1NDE2TW9kZXNbaV1bbW9kZXNJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMHg5ODYwIDoKKyAgICAgICAgICAgICAgICAgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5pbml0QWdjQ29udHJvbCAgICAgICAgICAgICAgID0gYXI1NDE2TW9kZXNbaV1bbW9kZXNJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMHg5OTE4IDoKKyAgICAgICAgICAgICAgICAgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5pbml0U2VhcmNoU3RhcnREZWxheSAgICAgICAgID0gYXI1NDE2TW9kZXNbaV1bbW9kZXNJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMHg5OWVjIDoKKyAgICAgICAgICAgICAgICAgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5pbml0UklGU1NlYXJjaFBhcmFtcyAgICAgICAgID0gYXI1NDE2TW9kZXNbaV1bbW9kZXNJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMHhhMzg4IDoKKyAgICAgICAgICAgICAgICAgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5pbml0RmFzdENoYW5uZWxDaGFuZ2VDb250cm9sID0gYXI1NDE2TW9kZXNbaV1bbW9kZXNJbmRleF07CisgICAgICAgICAgICAgICAgZGVmYXVsdCA6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2lmIDAKKyAgICB6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworCisgICAgLyoKKyAgICAgKiBDb21tb24gUmVnaXN0ZXIgc2V0dGluZworICAgICAqLworICAgIGVudHJpZXMgPSBzaXplb2YoYXI1NDE2Q29tbW9uKSAvIHNpemVvZigqYXI1NDE2Q29tbW9uKTsKKyAgICBmb3IgKGk9MDsgaTxlbnRyaWVzOyBpKyspCisgICAgeworICAgICAgICByZWdfd3JpdGUoYXI1NDE2Q29tbW9uW2ldWzBdLCBhcjU0MTZDb21tb25baV1bMV0pOworICAgIH0KKyAgICB6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworCisgICAgLyoKKyAgICAgKiBSRiBHYWluIHNldHRpbmcgYnkgZnJlcUluZGV4CisgICAgICovCisgICAgZW50cmllcyA9IHNpemVvZihhcjU0MTZCQl9SZkdhaW4pIC8gc2l6ZW9mKCphcjU0MTZCQl9SZkdhaW4pOworICAgIGZvciAoaT0wOyBpPGVudHJpZXM7IGkrKykKKyAgICB7CisgICAgICAgIHJlZ193cml0ZShhcjU0MTZCQl9SZkdhaW5baV1bMF0sIGFyNTQxNkJCX1JmR2FpbltpXVtmcmVxSW5kZXhdKTsKKyAgICB9CisgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKworICAgIC8qCisgICAgICogTW92ZWQgYXI1NDE2SW5pdENoYWluTWFzaygpIGhlcmUgdG8gZW5zdXJlIHRoZSBzd2FwIGJpdCBpcyBzZXQgYmVmb3JlCisgICAgICogdGhlIHBkYWRjIHRhYmxlIGlzIHdyaXR0ZW4uICBTd2FwIG11c3Qgb2NjdXIgYmVmb3JlIGFueSByYWRpbyBkZXBlbmRlbnQKKyAgICAgKiByZXBsaWNhdGVkIHJlZ2lzdGVyIGFjY2Vzcy4gIFRoZSBwZGFkYyBjdXJ2ZSBhZGRyZXNzaW5nIGluIHBhcnRpY3VsYXIKKyAgICAgKiBkZXBlbmRzIG9uIHRoZSBjb25zaXN0ZW50IHNldHRpbmcgb2YgdGhlIHN3YXAgYml0LgorICAgICAqLworICAgIC8vYXI1NDE2SW5pdENoYWluTWFzayhwRGV2KTsKKworICAgIC8qIFNldHVwIHRoZSB0cmFuc21pdCBwb3dlciB2YWx1ZXMuICovCisgICAgLy8gVE9ETworI2VuZGlmCisKKyAgICAvKiBVcGRhdGUgNUcgYm9hcmQgZGF0YSAqLworICAgIC8vQW50IGNvbnRyb2wgY29tbW9uCisgICAgdG1wID0gaHBQcml2LT5lZXByb21JbWFnZVsweDEwMCsweDE0NCoyLzRdOworICAgIGVlcHJvbUJvYXJkRGF0YVswXVsxXSA9IHRtcDsKKyAgICBlZXByb21Cb2FyZERhdGFbMF1bMl0gPSB0bXA7CisgICAgLy9BbnQgY29udHJvbCBjaGFpbiAwCisgICAgdG1wID0gaHBQcml2LT5lZXByb21JbWFnZVsweDEwMCsweDE0MCoyLzRdOworICAgIGVlcHJvbUJvYXJkRGF0YVsxXVsxXSA9IHRtcDsKKyAgICBlZXByb21Cb2FyZERhdGFbMV1bMl0gPSB0bXA7CisgICAgLy9BbnQgY29udHJvbCBjaGFpbiAyCisgICAgdG1wID0gaHBQcml2LT5lZXByb21JbWFnZVsweDEwMCsweDE0MioyLzRdOworICAgIGVlcHJvbUJvYXJkRGF0YVsyXVsxXSA9IHRtcDsKKyAgICBlZXByb21Cb2FyZERhdGFbMl1bMl0gPSB0bXA7CisgICAgLy9Td1NldHRsZQorICAgIHRtcCA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxNDYqMi80XTsKKyAgICB0bXAgPSAodG1wID4+IDE2KSAmIDB4N2Y7CisgICAgZWVwcm9tQm9hcmREYXRhWzNdWzFdICY9ICh+KCh1MzJfdCkweDNmODApKTsKKyAgICBlZXByb21Cb2FyZERhdGFbM11bMV0gfD0gKHRtcCA8PCA3KTsKKyNpZiAwCisgICAgLy9zd1NldHRsZUh0NDAKKyAgICB0bXAgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTU4KjIvNF07CisgICAgdG1wID0gKHRtcCkgJiAweDdmOworICAgIGVlcHJvbUJvYXJkRGF0YVszXVsyXSAmPSAofigodTMyX3QpMHgzZjgwKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzNdWzJdIHw9ICh0bXAgPDwgNyk7CisjZW5kaWYKKyAgICAvL2FkY0Rlc2lyZWQsIHBkYURlc2lyZWQKKyAgICB0bXAgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTQ4KjIvNF07CisgICAgdG1wID0gKHRtcCA+PiAyNCk7CisgICAgdG1wMSA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxNGEqMi80XTsKKyAgICB0bXAxID0gdG1wMSAmIDB4ZmY7CisgICAgdG1wID0gdG1wICsgKHRtcDE8PDgpOworICAgIGVlcHJvbUJvYXJkRGF0YVs0XVsxXSAmPSAofigodTMyX3QpMHhmZmZmKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzRdWzFdIHw9IHRtcDsKKyAgICBlZXByb21Cb2FyZERhdGFbNF1bMl0gJj0gKH4oKHUzMl90KTB4ZmZmZikpOworICAgIGVlcHJvbUJvYXJkRGF0YVs0XVsyXSB8PSB0bXA7CisgICAgLy9UeEVuZFRvWHBhT2ZmLCBUeEZyYW1lVG9YcGFPbgorICAgIHRtcCA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxNGEqMi80XTsKKyAgICB0bXAgPSAodG1wID4+IDI0KSAmIDB4ZmY7CisgICAgdG1wMSA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxNGMqMi80XTsKKyAgICB0bXAxID0gKHRtcDEgPj4gOCkgJiAweGZmOworICAgIHRtcCA9ICh0bXA8PDI0KSArICh0bXA8PDE2KSArICh0bXAxPDw4KSArIHRtcDE7CisgICAgZWVwcm9tQm9hcmREYXRhWzVdWzFdID0gdG1wOworICAgIGVlcHJvbUJvYXJkRGF0YVs1XVsyXSA9IHRtcDsKKyAgICAvL1R4RW5hVG9SeE9tCisgICAgdG1wID0gaHBQcml2LT5lZXByb21JbWFnZVsweDEwMCsweDE0YyoyLzRdICYgMHhmZjsKKyAgICBlZXByb21Cb2FyZERhdGFbNl1bMV0gJj0gKH4oKHUzMl90KTB4ZmYwMDAwKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzZdWzFdIHw9ICh0bXA8PDE2KTsKKyAgICBlZXByb21Cb2FyZERhdGFbNl1bMl0gJj0gKH4oKHUzMl90KTB4ZmYwMDAwKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzZdWzJdIHw9ICh0bXA8PDE2KTsKKyAgICAvL1RocmVzaDYyCisgICAgdG1wID0gaHBQcml2LT5lZXByb21JbWFnZVsweDEwMCsweDE0YyoyLzRdOworICAgIHRtcCA9ICh0bXAgPj4gMTYpICYgMHg3ZjsKKyAgICBlZXByb21Cb2FyZERhdGFbN11bMV0gJj0gKH4oKHUzMl90KTB4N2YwMDApKTsKKyAgICBlZXByb21Cb2FyZERhdGFbN11bMV0gfD0gKHRtcDw8MTIpOworICAgIGVlcHJvbUJvYXJkRGF0YVs3XVsyXSAmPSAofigodTMyX3QpMHg3ZjAwMCkpOworICAgIGVlcHJvbUJvYXJkRGF0YVs3XVsyXSB8PSAodG1wPDwxMik7CisgICAgLy9UeFJ4QXR0ZW4gY2hhaW5fMAorICAgIHRtcCA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxNDYqMi80XTsKKyAgICB0bXAgPSAodG1wID4+IDI0KSAmIDB4M2Y7CisgICAgZWVwcm9tQm9hcmREYXRhWzhdWzFdICY9ICh+KCh1MzJfdCkweDNmMDAwKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzhdWzFdIHw9ICh0bXA8PDEyKTsKKyAgICBlZXByb21Cb2FyZERhdGFbOF1bMl0gJj0gKH4oKHUzMl90KTB4M2YwMDApKTsKKyAgICBlZXByb21Cb2FyZERhdGFbOF1bMl0gfD0gKHRtcDw8MTIpOworICAgIC8vVHhSeEF0dGVuIGNoYWluXzIKKyAgICB0bXAgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTQ4KjIvNF0gJiAweDNmOworICAgIGVlcHJvbUJvYXJkRGF0YVs5XVsxXSAmPSAofigodTMyX3QpMHgzZjAwMCkpOworICAgIGVlcHJvbUJvYXJkRGF0YVs5XVsxXSB8PSAodG1wPDwxMik7CisgICAgZWVwcm9tQm9hcmREYXRhWzldWzJdICY9ICh+KCh1MzJfdCkweDNmMDAwKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzldWzJdIHw9ICh0bXA8PDEyKTsKKyAgICAvL1R4UnhNYXJnaW4gY2hhaW5fMAorICAgIHRtcCA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxNDgqMi80XTsKKyAgICB0bXAgPSAodG1wID4+IDgpICYgMHgzZjsKKyAgICBlZXByb21Cb2FyZERhdGFbMTBdWzFdICY9ICh+KCh1MzJfdCkweGZjMDAwMCkpOworICAgIGVlcHJvbUJvYXJkRGF0YVsxMF1bMV0gfD0gKHRtcDw8MTgpOworICAgIGVlcHJvbUJvYXJkRGF0YVsxMF1bMl0gJj0gKH4oKHUzMl90KTB4ZmMwMDAwKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzEwXVsyXSB8PSAodG1wPDwxOCk7CisgICAgLy9UeFJ4TWFyZ2luIGNoYWluXzIKKyAgICB0bXAgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTQ4KjIvNF07CisgICAgdG1wID0gKHRtcCA+PiAxNikgJiAweDNmOworICAgIGVlcHJvbUJvYXJkRGF0YVsxMV1bMV0gJj0gKH4oKHUzMl90KTB4ZmMwMDAwKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzExXVsxXSB8PSAodG1wPDwxOCk7CisgICAgZWVwcm9tQm9hcmREYXRhWzExXVsyXSAmPSAofigodTMyX3QpMHhmYzAwMDApKTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTFdWzJdIHw9ICh0bXA8PDE4KTsKKyAgICAvL2lxQ2FsbCBjaGFpbl8wLCBpcUNhbGxRIGNoYWluXzAKKyAgICB0bXAgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTRlKjIvNF07CisgICAgdG1wID0gKHRtcCA+PiAyNCkgJiAweDNmOworICAgIHRtcDEgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTUwKjIvNF07CisgICAgdG1wMSA9ICh0bXAxID4+IDgpICYgMHgxZjsKKyAgICB0bXAgID0gKHRtcDw8NSkgKyB0bXAxOworICAgIGVlcHJvbUJvYXJkRGF0YVsxMl1bMV0gJj0gKH4oKHUzMl90KTB4N2ZmKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzEyXVsxXSB8PSAodG1wKTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTJdWzJdICY9ICh+KCh1MzJfdCkweDdmZikpOworICAgIGVlcHJvbUJvYXJkRGF0YVsxMl1bMl0gfD0gKHRtcCk7CisgICAgLy9pcUNhbGwgY2hhaW5fMiwgaXFDYWxsUSBjaGFpbl8yCisgICAgdG1wID0gaHBQcml2LT5lZXByb21JbWFnZVsweDEwMCsweDE1MCoyLzRdOworICAgIHRtcCA9IHRtcCAmIDB4M2Y7CisgICAgdG1wMSA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxNTAqMi80XTsKKyAgICB0bXAxID0gKHRtcDEgPj4gMTYpICYgMHgxZjsKKyAgICB0bXAgID0gKHRtcDw8NSkgKyB0bXAxOworICAgIGVlcHJvbUJvYXJkRGF0YVsxM11bMV0gJj0gKH4oKHUzMl90KTB4N2ZmKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzEzXVsxXSB8PSAodG1wKTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTNdWzJdICY9ICh+KCh1MzJfdCkweDdmZikpOworICAgIGVlcHJvbUJvYXJkRGF0YVsxM11bMl0gfD0gKHRtcCk7CisgICAgLy9ic3dfTWFyZ2luIGNoYWluXzAKKyAgICB0bXAgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTU2KjIvNF07CisgICAgdG1wID0gKHRtcCA+PiAxNikgJiAweGY7CisgICAgZWVwcm9tQm9hcmREYXRhWzEwXVsxXSAmPSAofigodTMyX3QpMHgzYzAwKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzEwXVsxXSB8PSAodG1wIDw8IDEwKTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTBdWzJdICY9ICh+KCh1MzJfdCkweDNjMDApKTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTBdWzJdIHw9ICh0bXAgPDwgMTApOworICAgIC8veHBkIGdhaW4gbWFzaworICAgIHRtcCA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxNGUqMi80XTsKKyAgICB0bXAgPSAodG1wID4+IDgpICYgMHhmOworICAgIGVlcHJvbUJvYXJkRGF0YVsxNF1bMV0gJj0gKH4oKHUzMl90KTB4ZjAwMDApKTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTRdWzFdIHw9ICh6Y1hwZFRvUGRbdG1wXSA8PCAxNik7CisgICAgZWVwcm9tQm9hcmREYXRhWzE0XVsyXSAmPSAofigodTMyX3QpMHhmMDAwMCkpOworICAgIGVlcHJvbUJvYXJkRGF0YVsxNF1bMl0gfD0gKHpjWHBkVG9QZFt0bXBdIDw8IDE2KTsKKyNpZiAwCisgICAgLy9ic3dfQXR0ZW4gY2hhaW5fMAorICAgIHRtcCA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxNTYqMi80XTsKKyAgICB0bXAgPSAodG1wKSAmIDB4MWY7CisgICAgZWVwcm9tQm9hcmREYXRhWzEwXVsxXSAmPSAofigodTMyX3QpMHgxZikpOworICAgIGVlcHJvbUJvYXJkRGF0YVsxMF1bMV0gfD0gKHRtcCk7CisgICAgZWVwcm9tQm9hcmREYXRhWzEwXVsyXSAmPSAofigodTMyX3QpMHgxZikpOworICAgIGVlcHJvbUJvYXJkRGF0YVsxMF1bMl0gfD0gKHRtcCk7CisgICAgLy9ic3dfTWFyZ2luIGNoYWluXzIKKyAgICB0bXAgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTU2KjIvNF07CisgICAgdG1wID0gKHRtcCA+PiAyNCkgJiAweGY7CisgICAgZWVwcm9tQm9hcmREYXRhWzExXVsxXSAmPSAofigodTMyX3QpMHgzYzAwKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzExXVsxXSB8PSAodG1wIDw8IDEwKTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTFdWzJdICY9ICh+KCh1MzJfdCkweDNjMDApKTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTFdWzJdIHw9ICh0bXAgPDwgMTApOworICAgIC8vYnN3X0F0dGVuIGNoYWluXzIKKyAgICB0bXAgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTU2KjIvNF07CisgICAgdG1wID0gKHRtcCA+PiA4KSAmIDB4MWY7CisgICAgZWVwcm9tQm9hcmREYXRhWzExXVsxXSAmPSAofigodTMyX3QpMHgxZikpOworICAgIGVlcHJvbUJvYXJkRGF0YVsxMV1bMV0gfD0gKHRtcCk7CisgICAgZWVwcm9tQm9hcmREYXRhWzExXVsyXSAmPSAofigodTMyX3QpMHgxZikpOworICAgIGVlcHJvbUJvYXJkRGF0YVsxMV1bMl0gfD0gKHRtcCk7CisjZW5kaWYKKworICAgIC8qIFVwZGF0ZSAyLjRHIGJvYXJkIGRhdGEgKi8KKyAgICAvL0FudCBjb250cm9sIGNvbW1vbgorICAgIHRtcCA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxNzAqMi80XTsKKyAgICB0bXAgPSB0bXAgPj4gMjQ7CisgICAgdG1wMSA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxNzIqMi80XTsKKyAgICB0bXAgPSB0bXAgKyAodG1wMSA8PCA4KTsKKyAgICBlZXByb21Cb2FyZERhdGFbMF1bM10gPSB0bXA7CisgICAgZWVwcm9tQm9hcmREYXRhWzBdWzRdID0gdG1wOworICAgIC8vQW50IGNvbnRyb2wgY2hhaW4gMAorICAgIHRtcCA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxNmMqMi80XTsKKyAgICB0bXAgPSB0bXAgPj4gMjQ7CisgICAgdG1wMSA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxNmUqMi80XTsKKyAgICB0bXAgPSB0bXAgKyAodG1wMSA8PCA4KTsKKyAgICBlZXByb21Cb2FyZERhdGFbMV1bM10gPSB0bXA7CisgICAgZWVwcm9tQm9hcmREYXRhWzFdWzRdID0gdG1wOworICAgIC8vQW50IGNvbnRyb2wgY2hhaW4gMgorICAgIHRtcCA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxNmUqMi80XTsKKyAgICB0bXAgPSB0bXAgPj4gMjQ7CisgICAgdG1wMSA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxNzAqMi80XTsKKyAgICB0bXAgPSB0bXAgKyAodG1wMSA8PCA4KTsKKyAgICBlZXByb21Cb2FyZERhdGFbMl1bM10gPSB0bXA7CisgICAgZWVwcm9tQm9hcmREYXRhWzJdWzRdID0gdG1wOworICAgIC8vU3dTZXR0bGUKKyAgICB0bXAgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTc0KjIvNF07CisgICAgdG1wID0gKHRtcCA+PiA4KSAmIDB4N2Y7CisgICAgZWVwcm9tQm9hcmREYXRhWzNdWzRdICY9ICh+KCh1MzJfdCkweDNmODApKTsKKyAgICBlZXByb21Cb2FyZERhdGFbM11bNF0gfD0gKHRtcCA8PCA3KTsKKyNpZiAwCisgICAgLy9zd1NldHRsZUh0NDAKKyAgICB0bXAgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTg0KjIvNF07CisgICAgdG1wID0gKHRtcCA+PiAyNCkgJiAweDdmOworICAgIGVlcHJvbUJvYXJkRGF0YVszXVszXSAmPSAofigodTMyX3QpMHgzZjgwKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzNdWzNdIHw9ICh0bXAgPDwgNyk7CisjZW5kaWYKKyAgICAvL2FkY0Rlc2lyZWQsIHBkYURlc2lyZWQKKyAgICB0bXAgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTc2KjIvNF07CisgICAgdG1wID0gKHRtcCA+PiAxNikgJiAweGZmOworICAgIHRtcDEgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTc2KjIvNF07CisgICAgdG1wMSA9IHRtcDEgPj4gMjQ7CisgICAgdG1wID0gdG1wICsgKHRtcDE8PDgpOworICAgIGVlcHJvbUJvYXJkRGF0YVs0XVszXSAmPSAofigodTMyX3QpMHhmZmZmKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzRdWzNdIHw9IHRtcDsKKyAgICBlZXByb21Cb2FyZERhdGFbNF1bNF0gJj0gKH4oKHUzMl90KTB4ZmZmZikpOworICAgIGVlcHJvbUJvYXJkRGF0YVs0XVs0XSB8PSB0bXA7CisgICAgLy9UeEVuZFRvWHBhT2ZmLCBUeEZyYW1lVG9YcGFPbgorICAgIHRtcCA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxNzgqMi80XTsKKyAgICB0bXAgPSAodG1wID4+IDE2KSAmIDB4ZmY7CisgICAgdG1wMSA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxN2EqMi80XTsKKyAgICB0bXAxID0gdG1wMSAmIDB4ZmY7CisgICAgdG1wID0gKHRtcCA8PCAyNCkgKyAodG1wIDw8IDE2KSArICh0bXAxIDw8IDgpICsgdG1wMTsKKyAgICBlZXByb21Cb2FyZERhdGFbNV1bM10gPSB0bXA7CisgICAgZWVwcm9tQm9hcmREYXRhWzVdWzRdID0gdG1wOworICAgIC8vVHhFbmFUb1J4T20KKyAgICB0bXAgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTc4KjIvNF07CisgICAgdG1wID0gKHRtcCA+PiAyNCk7CisgICAgZWVwcm9tQm9hcmREYXRhWzZdWzNdICY9ICh+KCh1MzJfdCkweGZmMDAwMCkpOworICAgIGVlcHJvbUJvYXJkRGF0YVs2XVszXSB8PSAodG1wPDwxNik7CisgICAgZWVwcm9tQm9hcmREYXRhWzZdWzRdICY9ICh+KCh1MzJfdCkweGZmMDAwMCkpOworICAgIGVlcHJvbUJvYXJkRGF0YVs2XVs0XSB8PSAodG1wPDwxNik7CisgICAgLy9UaHJlc2g2MgorICAgIHRtcCA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxN2EqMi80XTsKKyAgICB0bXAgPSAodG1wID4+IDgpICYgMHg3ZjsKKyAgICBlZXByb21Cb2FyZERhdGFbN11bM10gJj0gKH4oKHUzMl90KTB4N2YwMDApKTsKKyAgICBlZXByb21Cb2FyZERhdGFbN11bM10gfD0gKHRtcDw8MTIpOworICAgIGVlcHJvbUJvYXJkRGF0YVs3XVs0XSAmPSAofigodTMyX3QpMHg3ZjAwMCkpOworICAgIGVlcHJvbUJvYXJkRGF0YVs3XVs0XSB8PSAodG1wPDwxMik7CisgICAgLy9UeFJ4QXR0ZW4gY2hhaW5fMAorICAgIHRtcCA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxNzQqMi80XTsKKyAgICB0bXAgPSAodG1wID4+IDE2KSAmIDB4M2Y7CisgICAgZWVwcm9tQm9hcmREYXRhWzhdWzNdICY9ICh+KCh1MzJfdCkweDNmMDAwKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzhdWzNdIHw9ICh0bXA8PDEyKTsKKyAgICBlZXByb21Cb2FyZERhdGFbOF1bNF0gJj0gKH4oKHUzMl90KTB4M2YwMDApKTsKKyAgICBlZXByb21Cb2FyZERhdGFbOF1bNF0gfD0gKHRtcDw8MTIpOworICAgIC8vVHhSeEF0dGVuIGNoYWluXzIKKyAgICB0bXAgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTc0KjIvNF07CisgICAgdG1wID0gKHRtcCA+PiAyNCkgJiAweDNmOworICAgIGVlcHJvbUJvYXJkRGF0YVs5XVszXSAmPSAofigodTMyX3QpMHgzZjAwMCkpOworICAgIGVlcHJvbUJvYXJkRGF0YVs5XVszXSB8PSAodG1wPDwxMik7CisgICAgZWVwcm9tQm9hcmREYXRhWzldWzRdICY9ICh+KCh1MzJfdCkweDNmMDAwKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzldWzRdIHw9ICh0bXA8PDEyKTsKKyAgICAvL1R4UnhNYXJnaW4gY2hhaW5fMAorICAgIHRtcCA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxNzYqMi80XTsKKyAgICB0bXAgPSAodG1wKSAmIDB4M2Y7CisgICAgZWVwcm9tQm9hcmREYXRhWzEwXVszXSAmPSAofigodTMyX3QpMHhmYzAwMDApKTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTBdWzNdIHw9ICh0bXA8PDE4KTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTBdWzRdICY9ICh+KCh1MzJfdCkweGZjMDAwMCkpOworICAgIGVlcHJvbUJvYXJkRGF0YVsxMF1bNF0gfD0gKHRtcDw8MTgpOworICAgIC8vVHhSeE1hcmdpbiBjaGFpbl8yCisgICAgdG1wID0gaHBQcml2LT5lZXByb21JbWFnZVsweDEwMCsweDE3NioyLzRdOworICAgIHRtcCA9ICh0bXAgPj4gOCkgJiAweDNmOworICAgIGVlcHJvbUJvYXJkRGF0YVsxMV1bM10gJj0gKH4oKHUzMl90KTB4ZmMwMDAwKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzExXVszXSB8PSAodG1wPDwxOCk7CisgICAgZWVwcm9tQm9hcmREYXRhWzExXVs0XSAmPSAofigodTMyX3QpMHhmYzAwMDApKTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTFdWzRdIHw9ICh0bXA8PDE4KTsKKyAgICAvL2lxQ2FsbCBjaGFpbl8wLCBpcUNhbGxRIGNoYWluXzAKKyAgICB0bXAgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTdjKjIvNF07CisgICAgdG1wID0gKHRtcCA+PiAxNikgJiAweDNmOworICAgIHRtcDEgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTdlKjIvNF07CisgICAgdG1wMSA9ICh0bXAxKSAmIDB4MWY7CisgICAgdG1wICA9ICh0bXA8PDUpICsgdG1wMTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTJdWzNdICY9ICh+KCh1MzJfdCkweDdmZikpOworICAgIGVlcHJvbUJvYXJkRGF0YVsxMl1bM10gfD0gKHRtcCk7CisgICAgZWVwcm9tQm9hcmREYXRhWzEyXVs0XSAmPSAofigodTMyX3QpMHg3ZmYpKTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTJdWzRdIHw9ICh0bXApOworICAgIC8vaXFDYWxsIGNoYWluXzIsIGlxQ2FsbFEgY2hhaW5fMgorICAgIHRtcCA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxN2MqMi80XTsKKyAgICB0bXAgPSAodG1wPj4yNCkgJiAweDNmOworICAgIHRtcDEgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTdlKjIvNF07CisgICAgdG1wMSA9ICh0bXAxID4+IDgpICYgMHgxZjsKKyAgICB0bXAgID0gKHRtcDw8NSkgKyB0bXAxOworICAgIGVlcHJvbUJvYXJkRGF0YVsxM11bM10gJj0gKH4oKHUzMl90KTB4N2ZmKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzEzXVszXSB8PSAodG1wKTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTNdWzRdICY9ICh+KCh1MzJfdCkweDdmZikpOworICAgIGVlcHJvbUJvYXJkRGF0YVsxM11bNF0gfD0gKHRtcCk7CisgICAgLy94cGQgZ2FpbiBtYXNrCisgICAgdG1wID0gaHBQcml2LT5lZXByb21JbWFnZVsweDEwMCsweDE3YyoyLzRdOworICAgIHRtcCA9IHRtcCAmIDB4ZjsKKyAgICBEYmdQcmludCgieHBkPTB4JXgsIHBkPTB4JXhcbiIsIHRtcCwgemNYcGRUb1BkW3RtcF0pOworICAgIGVlcHJvbUJvYXJkRGF0YVsxNF1bM10gJj0gKH4oKHUzMl90KTB4ZjAwMDApKTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTRdWzNdIHw9ICh6Y1hwZFRvUGRbdG1wXSA8PCAxNik7CisgICAgZWVwcm9tQm9hcmREYXRhWzE0XVs0XSAmPSAofigodTMyX3QpMHhmMDAwMCkpOworICAgIGVlcHJvbUJvYXJkRGF0YVsxNF1bNF0gfD0gKHpjWHBkVG9QZFt0bXBdIDw8IDE2KTsKKyNpZiAwCisgICAgLy9ic3dfTWFyZ2luIGNoYWluXzAKKyAgICB0bXAgPSBocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTg0KjIvNF07CisgICAgdG1wID0gKHRtcCA+PiA4KSAmIDB4ZjsKKyAgICBlZXByb21Cb2FyZERhdGFbMTBdWzNdICY9ICh+KCh1MzJfdCkweDNjMDApKTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTBdWzNdIHw9ICh0bXAgPDwgMTApOworICAgIGVlcHJvbUJvYXJkRGF0YVsxMF1bNF0gJj0gKH4oKHUzMl90KTB4M2MwMCkpOworICAgIGVlcHJvbUJvYXJkRGF0YVsxMF1bNF0gfD0gKHRtcCA8PCAxMCk7CisgICAgLy9ic3dfQXR0ZW4gY2hhaW5fMAorICAgIHRtcCA9IGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxODIqMi80XTsKKyAgICB0bXAgPSAodG1wPj4yNCkgJiAweDFmOworICAgIGVlcHJvbUJvYXJkRGF0YVsxMF1bM10gJj0gKH4oKHUzMl90KTB4MWYpKTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTBdWzNdIHw9ICh0bXApOworICAgIGVlcHJvbUJvYXJkRGF0YVsxMF1bNF0gJj0gKH4oKHUzMl90KTB4MWYpKTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTBdWzRdIHw9ICh0bXApOworICAgIC8vYnN3X01hcmdpbiBjaGFpbl8yCisgICAgdG1wID0gaHBQcml2LT5lZXByb21JbWFnZVsweDEwMCsweDE4NCoyLzRdOworICAgIHRtcCA9ICh0bXAgPj4gMTYpICYgMHhmOworICAgIGVlcHJvbUJvYXJkRGF0YVsxMV1bM10gJj0gKH4oKHUzMl90KTB4M2MwMCkpOworICAgIGVlcHJvbUJvYXJkRGF0YVsxMV1bM10gfD0gKHRtcCA8PCAxMCk7CisgICAgZWVwcm9tQm9hcmREYXRhWzExXVs0XSAmPSAofigodTMyX3QpMHgzYzAwKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzExXVs0XSB8PSAodG1wIDw8IDEwKTsKKyAgICAvL2Jzd19BdHRlbiBjaGFpbl8yCisgICAgdG1wID0gaHBQcml2LT5lZXByb21JbWFnZVsweDEwMCsweDE4NCoyLzRdOworICAgIHRtcCA9ICh0bXApICYgMHgxZjsKKyAgICBlZXByb21Cb2FyZERhdGFbMTFdWzNdICY9ICh+KCh1MzJfdCkweDFmKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzExXVszXSB8PSAodG1wKTsKKyAgICBlZXByb21Cb2FyZERhdGFbMTFdWzRdICY9ICh+KCh1MzJfdCkweDFmKSk7CisgICAgZWVwcm9tQm9hcmREYXRhWzExXVs0XSB8PSAodG1wKTsKKyNlbmRpZgorCisjaWYgMAorICAgIGZvciAoaj0wOyBqPDE0OyBqKyspCisgICAgeworICAgICAgICBEYmdQcmludCgiJTA0eCwgJTA4eCwgJTA4eCwgJTA4eCwgJTA4eFxuIiwgZWVwcm9tQm9hcmREYXRhW2pdWzBdLCBlZXByb21Cb2FyZERhdGFbal1bMV0sIGVlcHJvbUJvYXJkRGF0YVtqXVsyXSwgZWVwcm9tQm9hcmREYXRhW2pdWzNdLCBlZXByb21Cb2FyZERhdGFbal1bNF0pOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKChocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTEwKjIvNF0mMHhmZikgPT0gMHg4MCkgLy9GRU0gVFlQRQorICAgIHsKKyAgICAgICAgLyogVXBkYXRlIGJvYXJkIGRhdGEgdG8gcmVnaXN0ZXJzICovCisgICAgICAgIGZvciAoaj0wOyBqPDE1OyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ193cml0ZShlZXByb21Cb2FyZERhdGFbal1bMF0sIGVlcHJvbUJvYXJkRGF0YVtqXVttb2Rlc0luZGV4XSk7CisKKyAgICAgICAgICAgIC8qICMxIFNhdmUgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHJlbGF0ZWQgUklGUyByZWdpc3RlciBzZXR0aW5ncyAqLworICAgICAgICAgICAgLy9pZiggKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5pc0luaXRpYWxQaHkgPT0gMSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoKGVlcHJvbUJvYXJkRGF0YVtqXVswXSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMHg5ODUwIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aW5pdERlc2lyZWRTaWdTaXplICAgICAgICAgICA9IGVlcHJvbUJvYXJkRGF0YVtqXVttb2Rlc0luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDB4OTg1YyA6CisgICAgICAgICAgICAgICAgICAgICAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmluaXRBR0MgICAgICAgICAgICAgICAgICAgICAgPSBlZXByb21Cb2FyZERhdGFbal1bbW9kZXNJbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAweDk4NjAgOgorICAgICAgICAgICAgICAgICAgICAgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5pbml0QWdjQ29udHJvbCAgICAgICAgICAgICAgID0gZWVwcm9tQm9hcmREYXRhW2pdW21vZGVzSW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMHg5OTE4IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aW5pdFNlYXJjaFN0YXJ0RGVsYXkgICAgICAgICA9IGVlcHJvbUJvYXJkRGF0YVtqXVttb2Rlc0luZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDB4OTllYyA6CisgICAgICAgICAgICAgICAgICAgICAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmluaXRSSUZTU2VhcmNoUGFyYW1zICAgICAgICAgPSBlZXByb21Cb2FyZERhdGFbal1bbW9kZXNJbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAweGEzODggOgorICAgICAgICAgICAgICAgICAgICAgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5pbml0RmFzdENoYW5uZWxDaGFuZ2VDb250cm9sID0gZWVwcm9tQm9hcmREYXRhW2pdW21vZGVzSW5kZXhdOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gLyogaWYgKChocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTEwKjIvNF0mMHhmZikgPT0gMHg4MCkgLy9GRU0gVFlQRSAqLworCisKKyAgICAvKiBCcmluZ3VwIGlzc3VlIDogZm9yY2UgdHggZ2FpbiAqLworICAgIC8vcmVnX3dyaXRlKDB4YTI1OCwgMHgwY2M2NTM4MSk7CisgICAgLy9yZWdfd3JpdGUoMHhhMjc0LCAweDBhMWE3YzE1KTsKKyAgICB6ZkluaXRQb3dlckNhbChkZXYpOworCisgICAgaWYoZnJlcXVlbmN5ID4gWk1fQ0hfR18xNCkKKyAgICB7CisgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxZDQwMTQsIDB4NTE0Myk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxZDQwMTQsIDB4NTE2Myk7CisgICAgfQorCisgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKK30KKworCit2b2lkIHpmSW5pdFJmKHpkZXZfdCogZGV2LCB1MzJfdCBmcmVxdWVuY3kpCit7CisgICAgdTMyX3QgY21kWzhdOworICAgIHUxNl90IHJldDsKKyAgICBpbnQgZGVsdGFfc2xvcGVfY29lZmZfZXhwOworICAgIGludCBkZWx0YV9zbG9wZV9jb2VmZl9tYW47CisgICAgaW50IGRlbHRhX3Nsb3BlX2NvZWZmX2V4cF9zaGdpOworICAgIGludCBkZWx0YV9zbG9wZV9jb2VmZl9tYW5fc2hnaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptX2RlYnVnX21zZzEoIiBpbml0UmYgZnJlcXVlbmN5ID0gIiwgZnJlcXVlbmN5KTsKKworICAgIGlmIChmcmVxdWVuY3kgPT0gMCkKKyAgICB7CisgICAgICAgIGZyZXF1ZW5jeSA9IDI0MTI7CisgICAgfQorCisgICAgLyogQmFuayAwIDEgMiAzIDUgNiA3ICovCisgICAgemZTZXRSZlJlZ3MoZGV2LCBmcmVxdWVuY3kpOworICAgIC8qIEJhbmsgNCAqLworICAgIHpmU2V0QmFuazRBbmRQb3dlclRhYmxlKGRldiwgZnJlcXVlbmN5LCAwLCAwKTsKKworICAgIC8qIHN0cm9lIGZyZXF1ZW5jeSAqLworICAgICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aHdGcmVxdWVuY3kgPSAodTE2X3QpZnJlcXVlbmN5OworCisgICAgemZHZXRId1R1cm5PZmZkeW5QYXJhbShkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3ksIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVsdGFfc2xvcGVfY29lZmZfZXhwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRlbHRhX3Nsb3BlX2NvZWZmX21hbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZWx0YV9zbG9wZV9jb2VmZl9leHBfc2hnaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZWx0YV9zbG9wZV9jb2VmZl9tYW5fc2hnaSk7CisKKyAgICAvKiByZWxhdGVkIGZ1bmN0aW9ucyAqLworICAgIGZyZXF1ZW5jeSA9IGZyZXF1ZW5jeSoxMDAwOworICAgIGNtZFswXSA9IDI4IHwgKFpNX0NNRF9SRl9JTklUIDw8IDgpOworICAgIGNtZFsxXSA9IGZyZXF1ZW5jeTsKKyAgICBjbWRbMl0gPSAwOy8vKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5od19EWU5BTUlDX0hUMjA0MF9FTjsKKyAgICBjbWRbM10gPSAxOy8vKCh3ZC0+RXh0T2Zmc2V0IDw8IDIpIHwgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5od19IVF9FTkFCTEUpOworICAgIGNtZFs0XSA9IGRlbHRhX3Nsb3BlX2NvZWZmX2V4cDsKKyAgICBjbWRbNV0gPSBkZWx0YV9zbG9wZV9jb2VmZl9tYW47CisgICAgY21kWzZdID0gZGVsdGFfc2xvcGVfY29lZmZfZXhwX3NoZ2k7CisgICAgY21kWzddID0gZGVsdGFfc2xvcGVfY29lZmZfbWFuX3NoZ2k7CisKKyAgICByZXQgPSB6Zklzc3VlQ21kKGRldiwgY21kLCAzMiwgWk1fT0lEX0lOVEVSTkFMX1dSSVRFLCAwKTsKKworICAgIC8vIGRlbGF5IHRlbXBvcmFyaWx5LCB3YWl0IGZvciBuZXcgUEhZIGFuZCBSRgorICAgIHpmd1NsZWVwKGRldiwgMTAwMCk7Cit9CisKK2ludCB0bihpbnQgZXhwKQoreworICAgIGludCBpOworCWludCB0bXAgPSAxOworICAgIGZvcihpPTA7IGk8ZXhwOyBpKyspCisgICAgICAgIHRtcCA9IHRtcCoyOworCisgICAgcmV0dXJuIHRtcDsKK30KKworLyppbnQgemZGbG9vcihkb3VibGUgaW5kYXRhKQoreworICAgaWYoaW5kYXRhPDApCisJICAgcmV0dXJuIChpbnQpaW5kYXRhLTE7CisgICBlbHNlCisJICAgcmV0dXJuIChpbnQpaW5kYXRhOworfQorKi8KK3UzMl90IHJldmVyc2VfYml0cyh1MzJfdCBjaGFuX3NlbCkKK3sKKwkvKiByZXZlcnNlX2JpdHMgKi8KKyAgICB1MzJfdCBjaGFuc2VsID0gMDsKKwl1OF90IGk7CisKKwlmb3IgKGk9MDsgaTw4OyBpKyspCisgICAgICAgIGNoYW5zZWwgfD0gKChjaGFuX3NlbD4+KDctaSkgJiAweDEpIDw8IGkpOworCXJldHVybiBjaGFuc2VsOworfQorCisvKiBCYW5rIDAgMSAyIDMgNSA2IDcgKi8KK3ZvaWQgemZTZXRSZlJlZ3MoemRldl90KiBkZXYsIHUzMl90IGZyZXF1ZW5jeSkKK3sKKyAgICB1MTZfdCBlbnRyaWVzOworICAgIHUxNl90IGZyZXFJbmRleCA9IDA7CisgICAgdTE2X3QgaTsKKworICAgIC8vem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaWYgKCBmcmVxdWVuY3kgPiBaTV9DSF9HXzE0ICkKKyAgICB7CisgICAgICAgIC8qIDVHICovCisgICAgICAgIGZyZXFJbmRleCA9IDE7CisgICAgICAgIHptX21zZzBfc2NhbihaTV9MVl8yLCAiU2V0IHRvIDVHSHoiKTsKKworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiAyLjRHICovCisgICAgICAgIGZyZXFJbmRleCA9IDI7CisgICAgICAgIHptX21zZzBfc2NhbihaTV9MVl8yLCAiU2V0IHRvIDIuNEdIeiIpOworICAgIH0KKworI2lmIDEKKyAgICBlbnRyaWVzID0gc2l6ZW9mKG90dXNCYW5rKSAvIHNpemVvZigqb3R1c0JhbmspOworICAgIGZvciAoaT0wOyBpPGVudHJpZXM7IGkrKykKKyAgICB7CisgICAgICAgIHJlZ193cml0ZShvdHVzQmFua1tpXVswXSwgb3R1c0JhbmtbaV1bZnJlcUluZGV4XSk7CisgICAgfQorI2Vsc2UKKyAgICAvKiBCYW5rMCAqLworICAgIGVudHJpZXMgPSBzaXplb2YoYXI1NDE2QmFuazApIC8gc2l6ZW9mKCphcjU0MTZCYW5rMCk7CisgICAgZm9yIChpPTA7IGk8ZW50cmllczsgaSsrKQorICAgIHsKKyAgICAgICAgcmVnX3dyaXRlKGFyNTQxNkJhbmswW2ldWzBdLCBhcjU0MTZCYW5rMFtpXVsxXSk7CisgICAgfQorICAgIC8qIEJhbmsxICovCisgICAgZW50cmllcyA9IHNpemVvZihhcjU0MTZCYW5rMSkgLyBzaXplb2YoKmFyNTQxNkJhbmsxKTsKKyAgICBmb3IgKGk9MDsgaTxlbnRyaWVzOyBpKyspCisgICAgeworICAgICAgICByZWdfd3JpdGUoYXI1NDE2QmFuazFbaV1bMF0sIGFyNTQxNkJhbmsxW2ldWzFdKTsKKyAgICB9CisgICAgLyogQmFuazIgKi8KKyAgICBlbnRyaWVzID0gc2l6ZW9mKGFyNTQxNkJhbmsyKSAvIHNpemVvZigqYXI1NDE2QmFuazIpOworICAgIGZvciAoaT0wOyBpPGVudHJpZXM7IGkrKykKKyAgICB7CisgICAgICAgIHJlZ193cml0ZShhcjU0MTZCYW5rMltpXVswXSwgYXI1NDE2QmFuazJbaV1bMV0pOworICAgIH0KKyAgICAvKiBCYW5rMyAqLworICAgIGVudHJpZXMgPSBzaXplb2YoYXI1NDE2QmFuazMpIC8gc2l6ZW9mKCphcjU0MTZCYW5rMyk7CisgICAgZm9yIChpPTA7IGk8ZW50cmllczsgaSsrKQorICAgIHsKKyAgICAgICAgcmVnX3dyaXRlKGFyNTQxNkJhbmszW2ldWzBdLCBhcjU0MTZCYW5rM1tpXVtmcmVxSW5kZXhdKTsKKyAgICB9CisgICAgLyogQmFuazUgKi8KKyAgICByZWdfd3JpdGUgKDB4OThiMCwgIDB4MDAwMDAwMTMpOworICAgIHJlZ193cml0ZSAoMHg5OGU0LCAgMHgwMDAwMDAwMik7CisgICAgLyogQmFuazYgKi8KKyAgICBlbnRyaWVzID0gc2l6ZW9mKGFyNTQxNkJhbms2KSAvIHNpemVvZigqYXI1NDE2QmFuazYpOworICAgIGZvciAoaT0wOyBpPGVudHJpZXM7IGkrKykKKyAgICB7CisgICAgICAgIHJlZ193cml0ZShhcjU0MTZCYW5rNltpXVswXSwgYXI1NDE2QmFuazZbaV1bZnJlcUluZGV4XSk7CisgICAgfQorICAgIC8qIEJhbms3ICovCisgICAgZW50cmllcyA9IHNpemVvZihhcjU0MTZCYW5rNykgLyBzaXplb2YoKmFyNTQxNkJhbms3KTsKKyAgICBmb3IgKGk9MDsgaTxlbnRyaWVzOyBpKyspCisgICAgeworICAgICAgICByZWdfd3JpdGUoYXI1NDE2QmFuazdbaV1bMF0sIGFyNTQxNkJhbms3W2ldWzFdKTsKKyAgICB9CisjZW5kaWYKKworICAgIHpmRmx1c2hEZWxheVdyaXRlKGRldik7Cit9CisKKy8qIEJhbmsgNCAqLwordm9pZCB6ZlNldEJhbms0QW5kUG93ZXJUYWJsZSh6ZGV2X3QqIGRldiwgdTMyX3QgZnJlcXVlbmN5LCB1OF90IGJ3NDAsCisgICAgICAgIHU4X3QgZXh0T2Zmc2V0KQoreworICAgIHUzMl90IGNodXAgPSAxOworCXUzMl90IGJtb2RlX0xGX3N5bnRoX2ZyZXEgPSAwOworCXUzMl90IGFtb2RlX3JlZnNlbF8xID0gMDsKKwl1MzJfdCBhbW9kZV9yZWZzZWxfMCA9IDE7CisJdTMyX3QgYWRkcjIgPSAxOworCXUzMl90IGFkZHIxID0gMDsKKwl1MzJfdCBhZGRyMCA9IDA7CisKKwl1MzJfdCBkMTsKKwl1MzJfdCBkMDsKKwl1MzJfdCB0bXBfMDsKKwl1MzJfdCB0bXBfMTsKKwl1MzJfdCBkYXRhMDsKKwl1MzJfdCBkYXRhMTsKKworCXU4X3QgY2hhbnNlbDsKKwl1OF90IGNoYW5fc2VsOworCXUzMl90IHRlbXBfY2hhbl9zZWw7CisKKyAgICB1MTZfdCBpOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisKKyAgICAvKiBpZiBlbmFibGUgODAyLjExaCwgbmVlZCB0byByZWNvcmQgY3VyZW50IGNoYW5uZWwgaW5kZXggaW4gY2hhbm5lbCBhcnJheSAqLworICAgIGlmICh3ZC0+c3RhLkRGU0VuYWJsZSkKKyAgICB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbENudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0uY2hhbm5lbCA9PSBmcmVxdWVuY3kpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgd2QtPnJlZ3VsYXRpb25UYWJsZS5DdXJDaEluZGV4ID0gaTsKKyAgICB9CisKKwlpZiAoYnc0MCA9PSAxKQorCXsKKyAgICAgICAgaWYgKGV4dE9mZnNldCA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICBmcmVxdWVuY3kgKz0gMTA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmcmVxdWVuY3kgLT0gMTA7CisgICAgICAgIH0KKworCX0KKworCisJaWYgKCBmcmVxdWVuY3kgPiAzMDAwICkKKwl7CisJICAgIGlmICggZnJlcXVlbmN5ICUgMTAgKQorCSAgICB7CisJICAgICAgICAvKiA1TSAqLworICAgICAgICAgICAgY2hhbl9zZWwgPSAodThfdCkoKGZyZXF1ZW5jeSAtIDQ4MDApLzUpOworICAgICAgICAgICAgY2hhbl9zZWwgPSAodThfdCkoY2hhbl9zZWwgJiAweGZmKTsKKyAgICAgICAgICAgIGNoYW5zZWwgID0gKHU4X3QpcmV2ZXJzZV9iaXRzKGNoYW5fc2VsKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIDEwTSA6IGltcHJvdmUgVHggRVZNICovCisgICAgICAgICAgICBjaGFuX3NlbCA9ICh1OF90KSgoZnJlcXVlbmN5IC0gNDgwMCkvMTApOworICAgICAgICAgICAgY2hhbl9zZWwgPSAodThfdCkoY2hhbl9zZWwgJiAweGZmKTw8MTsKKyAgICAgICAgICAgIGNoYW5zZWwgID0gKHU4X3QpcmV2ZXJzZV9iaXRzKGNoYW5fc2VsKTsKKworCSAgICAgICAgYW1vZGVfcmVmc2VsXzEgPSAxOworCSAgICAgICAgYW1vZGVfcmVmc2VsXzAgPSAwOworICAgICAgICB9CisJfQorCWVsc2UKKwl7CisgICAgICAgIC8vdGVtcF9jaGFuX3NlbCA9ICgoKGZyZXF1ZW5jeSAtIDY3MikqMikgLSAzMDQwKS8xMDsKKyAgICAgICAgaWYgKGZyZXF1ZW5jeSA9PSAyNDg0KQorICAgICAgICB7CisgICAJICAgICAgICB0ZW1wX2NoYW5fc2VsID0gMTAgKyAoZnJlcXVlbmN5IC0gMjI3NCkvNSA7CisgICAJICAgICAgICBibW9kZV9MRl9zeW50aF9mcmVxID0gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXBfY2hhbl9zZWwgPSAxNiArIChmcmVxdWVuY3kgLSAyMjcyKS81IDsKKyAgICAgICAgICAgIGJtb2RlX0xGX3N5bnRoX2ZyZXEgPSAwOworICAgICAgICB9CisgICAgICAgIGNoYW5fc2VsID0gKHU4X3QpKHRlbXBfY2hhbl9zZWwgPDwgMikgJiAweGZmOworICAgICAgICBjaGFuc2VsICA9ICh1OF90KXJldmVyc2VfYml0cyhjaGFuX3NlbCk7CisJfQorCisJZDEgICA9IGNoYW5zZWw7ICAgLy8jIDggYml0cyBvZiBjaGFuCisJZDAgICA9IGFkZHIwPDw3IHwgYWRkcjE8PDYgfCBhZGRyMjw8NQorCQkJfCBhbW9kZV9yZWZzZWxfMDw8MyB8IGFtb2RlX3JlZnNlbF8xPDwyCisJCQl8IGJtb2RlX0xGX3N5bnRoX2ZyZXE8PDEgfCBjaHVwOworCisgICAgdG1wXzAgPSBkMCAmIDB4MWY7ICAvLyMgNS0xCisgICAgdG1wXzEgPSBkMSAmIDB4MWY7ICAvLyMgNS0xCisgICAgZGF0YTAgPSB0bXBfMTw8NSB8IHRtcF8wOworCisgICAgdG1wXzAgPSBkMD4+NSAmIDB4NzsgIC8vIyA4LTYKKyAgICB0bXBfMSA9IGQxPj41ICYgMHg3OyAgLy8jIDgtNgorICAgIGRhdGExID0gdG1wXzE8PDUgfCB0bXBfMDsKKworICAgIC8qIEJhbms0ICovCisJcmVnX3dyaXRlICgweDk4MDArKDB4MmM8PDIpLCBkYXRhMCk7CisJcmVnX3dyaXRlICgweDk4MDArKDB4M2E8PDIpLCBkYXRhMSk7CisJLy96bV9kZWJ1Z19tc2cxKCIweDk4MDArKDB4MmM8PDIgPSAgIiwgZGF0YTApOworCS8vem1fZGVidWdfbXNnMSgiMHg5ODAwKygweDNhPDwyID0gICIsIGRhdGExKTsKKworCisgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKworICAgIHpmd1NsZWVwKGRldiwgMTApOworCisgICAgcmV0dXJuOworfQorCisKK3N0cnVjdCB6c1BoeUZyZXFQYXJhCit7CisgICAgdTMyX3QgY29lZmZfZXhwOworICAgIHUzMl90IGNvZWZmX21hbjsKKyAgICB1MzJfdCBjb2VmZl9leHBfc2hnaTsKKyAgICB1MzJfdCBjb2VmZl9tYW5fc2hnaTsKK307CisKK3N0cnVjdCB6c1BoeUZyZXFUYWJsZQoreworICAgIHUzMl90IGZyZXF1ZW5jeTsKKyAgICBzdHJ1Y3QgenNQaHlGcmVxUGFyYSBGcGdhRHluYW1pY0hUOworICAgIHN0cnVjdCB6c1BoeUZyZXFQYXJhIEZwZ2FTdGF0aWNIVDsKKyAgICBzdHJ1Y3QgenNQaHlGcmVxUGFyYSBDaGlwU1QyME1oejsKKyAgICBzdHJ1Y3QgenNQaHlGcmVxUGFyYSBDaGlwMjA0ME1oejsKKyAgICBzdHJ1Y3QgenNQaHlGcmVxUGFyYSBDaGlwMjA0MEV4dEFib3ZlOworfTsKKworY29uc3Qgc3RydWN0IHpzUGh5RnJlcVRhYmxlIHpnUGh5RnJlcUNvZWZmW10gPQoreworLypJbmRleCAgIGZyZXEgIEZQR0EgRFlOQU1JQ19IVDIwNDBfRU4gIEZQR0EgU1RBVElDX0hUMjAgICAgUmVhbCBDaGlwIHN0YXRpYzIwTUh6ICAgICBSZWFsIENoaXAgMjA0ME1IeiAgIFJlYWwgQ2hpcCAyMDQwTWh6ICAqLworICAgICAgIC8qIGZjbGsgPSAgICAgICAgIDEwLjggICAgICAgICAgICAgICAgMjEuNiAgICAgICAgICAgICAgICAgIDQwICAgICAgICAgICAgICAgICAgZXh0IGJlbG93IDQwICAgICAgIGV4dCBhYm92ZSA0MCAgICAgICAqLworLyogIDAgKi8gezI0MTIsIHs1LCAyMzQ3NiwgNSwgMjExMjh9LCB7NCwgMjM0NzYsIDQsIDIxMTI4fSwgezMsIDIxNzM3LCAzLCAxOTU2M30sIHszLCAyMTgyNywgMywgMTk2NDR9LCB7MywgMjE2NDcsIDMsIDE5NDgyfX0sCisvKiAgMSAqLyB7MjQxNywgezUsIDIzNDI3LCA1LCAyMTA4NH0sIHs0LCAyMzQyNywgNCwgMjEwODR9LCB7MywgMjE2OTIsIDMsIDE5NTIzfSwgezMsIDIxNzgyLCAzLCAxOTYwNH0sIHszLCAyMTYwMiwgMywgMTk0NDJ9fSwKKy8qICAyICovIHsyNDIyLCB7NSwgMjMzNzksIDUsIDIxMDQxfSwgezQsIDIzMzc5LCA0LCAyMTA0MX0sIHszLCAyMTY0NywgMywgMTk0ODJ9LCB7MywgMjE3MzcsIDMsIDE5NTYzfSwgezMsIDIxNTU4LCAzLCAxOTQwMn19LAorLyogIDMgKi8gezI0MjcsIHs1LCAyMzMzMCwgNSwgMjA5OTd9LCB7NCwgMjMzMzAsIDQsIDIwOTk3fSwgezMsIDIxNjAyLCAzLCAxOTQ0Mn0sIHszLCAyMTY5MiwgMywgMTk1MjN9LCB7MywgMjE1MTQsIDMsIDE5MzYyfX0sCisvKiAgNCAqLyB7MjQzMiwgezUsIDIzMjgzLCA1LCAyMDk1NH0sIHs0LCAyMzI4MywgNCwgMjA5NTR9LCB7MywgMjE1NTgsIDMsIDE5NDAyfSwgezMsIDIxNjQ3LCAzLCAxOTQ4Mn0sIHszLCAyMTQ3MCwgMywgMTkzMjN9fSwKKy8qICA1ICovIHsyNDM3LCB7NSwgMjMyMzUsIDUsIDIwOTExfSwgezQsIDIzMjM1LCA0LCAyMDkxMX0sIHszLCAyMTUxNCwgMywgMTkzNjJ9LCB7MywgMjE2MDIsIDMsIDE5NDQyfSwgezMsIDIxNDI2LCAzLCAxOTI4M319LAorLyogIDYgKi8gezI0NDIsIHs1LCAyMzE4NywgNSwgMjA4Njh9LCB7NCwgMjMxODcsIDQsIDIwODY4fSwgezMsIDIxNDcwLCAzLCAxOTMyM30sIHszLCAyMTU1OCwgMywgMTk0MDJ9LCB7MywgMjEzODIsIDMsIDE5MjQ0fX0sCisvKiAgNyAqLyB7MjQ0NywgezUsIDIzMTQwLCA1LCAyMDgyNn0sIHs0LCAyMzE0MCwgNCwgMjA4MjZ9LCB7MywgMjE0MjYsIDMsIDE5MjgzfSwgezMsIDIxNTE0LCAzLCAxOTM2Mn0sIHszLCAyMTMzOSwgMywgMTkyMDV9fSwKKy8qICA4ICovIHsyNDUyLCB7NSwgMjMwOTMsIDUsIDIwNzgzfSwgezQsIDIzMDkzLCA0LCAyMDc4M30sIHszLCAyMTM4MiwgMywgMTkyNDR9LCB7MywgMjE0NzAsIDMsIDE5MzIzfSwgezMsIDIxMjk1LCAzLCAxOTE2Nn19LAorLyogIDkgKi8gezI0NTcsIHs1LCAyMzA0NiwgNSwgMjA3NDF9LCB7NCwgMjMwNDYsIDQsIDIwNzQxfSwgezMsIDIxMzM5LCAzLCAxOTIwNX0sIHszLCAyMTQyNiwgMywgMTkyODN9LCB7MywgMjEyNTIsIDMsIDE5MTI3fX0sCisvKiAxMCAqLyB7MjQ2MiwgezUsIDIyOTk5LCA1LCAyMDY5OX0sIHs0LCAyMjk5OSwgNCwgMjA2OTl9LCB7MywgMjEyOTUsIDMsIDE5MTY2fSwgezMsIDIxMzgyLCAzLCAxOTI0NH0sIHszLCAyMTIwOSwgMywgMTkwODh9fSwKKy8qIDExICovIHsyNDY3LCB7NSwgMjI5NTIsIDUsIDIwNjU3fSwgezQsIDIyOTUyLCA0LCAyMDY1N30sIHszLCAyMTI1MiwgMywgMTkxMjd9LCB7MywgMjEzMzksIDMsIDE5MjA1fSwgezMsIDIxMTY2LCAzLCAxOTA1MH19LAorLyogMTIgKi8gezI0NzIsIHs1LCAyMjkwNiwgNSwgMjA2MTV9LCB7NCwgMjI5MDYsIDQsIDIwNjE1fSwgezMsIDIxMjA5LCAzLCAxOTA4OH0sIHszLCAyMTI5NSwgMywgMTkxNjZ9LCB7MywgMjExMjQsIDMsIDE5MDExfX0sCisvKiAxMyAqLyB7MjQ4NCwgezUsIDIyNzk1LCA1LCAyMDUxNn0sIHs0LCAyMjc5NSwgNCwgMjA1MTZ9LCB7MywgMjExMDcsIDMsIDE4OTk2fSwgezMsIDIxMTkyLCAzLCAxOTA3M30sIHszLCAyMTAyMiwgMywgMTg5MjB9fSwKKy8qIDE0ICovIHs0OTIwLCB7NiwgMjMwMTgsIDYsIDIwNzE2fSwgezUsIDIzMDE4LCA1LCAyMDcxNn0sIHs0LCAyMTMxMywgNCwgMTkxODF9LCB7NCwgMjEzNTYsIDQsIDE5MjIwfSwgezQsIDIxMjY5LCA0LCAxOTE0Mn19LAorLyogMTUgKi8gezQ5NDAsIHs2LCAyMjkyNCwgNiwgMjA2MzJ9LCB7NSwgMjI5MjQsIDUsIDIwNjMyfSwgezQsIDIxMjI2LCA0LCAxOTEwNH0sIHs0LCAyMTI2OSwgNCwgMTkxNDJ9LCB7NCwgMjExODMsIDQsIDE5MDY1fX0sCisvKiAxNiAqLyB7NDk2MCwgezYsIDIyODMyLCA2LCAyMDU0OX0sIHs1LCAyMjgzMiwgNSwgMjA1NDl9LCB7NCwgMjExNDEsIDQsIDE5MDI3fSwgezQsIDIxMTgzLCA0LCAxOTA2NX0sIHs0LCAyMTA5OCwgNCwgMTg5ODh9fSwKKy8qIDE3ICovIHs0OTgwLCB7NiwgMjI3NDAsIDYsIDIwNDY2fSwgezUsIDIyNzQwLCA1LCAyMDQ2Nn0sIHs0LCAyMTA1NiwgNCwgMTg5NTB9LCB7NCwgMjEwOTgsIDQsIDE4OTg4fSwgezQsIDIxMDE0LCA0LCAxODkxMn19LAorLyogMTggKi8gezUwNDAsIHs2LCAyMjQ2OSwgNiwgMjAyMjN9LCB7NSwgMjI0NjksIDUsIDIwMjIzfSwgezQsIDIwODA1LCA0LCAxODcyNX0sIHs0LCAyMDg0NiwgNCwgMTg3NjJ9LCB7NCwgMjA3NjQsIDQsIDE4Njg3fX0sCisvKiAxOSAqLyB7NTA2MCwgezYsIDIyMzgxLCA2LCAyMDE0M30sIHs1LCAyMjM4MSwgNSwgMjAxNDN9LCB7NCwgMjA3MjMsIDQsIDE4NjUxfSwgezQsIDIwNzY0LCA0LCAxODY4N30sIHs0LCAyMDY4MiwgNCwgMTg2MTR9fSwKKy8qIDIwICovIHs1MDgwLCB7NiwgMjIyOTMsIDYsIDIwMDYzfSwgezUsIDIyMjkzLCA1LCAyMDA2M30sIHs0LCAyMDY0MSwgNCwgMTg1Nzd9LCB7NCwgMjA2ODIsIDQsIDE4NjE0fSwgezQsIDIwNjAxLCA0LCAxODU0MX19LAorLyogMjEgKi8gezUxODAsIHs2LCAyMTg2MiwgNiwgMTk2NzZ9LCB7NSwgMjE4NjIsIDUsIDE5Njc2fSwgezQsIDIwMjQzLCA0LCAxODIxOX0sIHs0LCAyMDI4MiwgNCwgMTgyNTR9LCB7NCwgMjAyMDQsIDQsIDE4MTgzfX0sCisvKiAyMiAqLyB7NTIwMCwgezYsIDIxNzc4LCA2LCAxOTYwMH0sIHs1LCAyMTc3OCwgNSwgMTk2MDB9LCB7NCwgMjAxNjUsIDQsIDE4MTQ4fSwgezQsIDIwMjA0LCA0LCAxODE4M30sIHs0LCAyMDEyNiwgNCwgMTgxMTR9fSwKKy8qIDIzICovIHs1MjIwLCB7NiwgMjE2OTUsIDYsIDE5NTI1fSwgezUsIDIxNjk1LCA1LCAxOTUyNX0sIHs0LCAyMDA4OCwgNCwgMTgwNzl9LCB7NCwgMjAxMjYsIDQsIDE4MTE0fSwgezQsIDIwMDQ5LCA0LCAxODA0NH19LAorLyogMjQgKi8gezUyNDAsIHs2LCAyMTYxMiwgNiwgMTk0NTF9LCB7NSwgMjE2MTIsIDUsIDE5NDUxfSwgezQsIDIwMDExLCA0LCAxODAxMH0sIHs0LCAyMDA0OSwgNCwgMTgwNDR9LCB7NCwgMTk5NzMsIDQsIDE3OTc2fX0sCisvKiAyNSAqLyB7NTI2MCwgezYsIDIxNTMwLCA2LCAxOTM3N30sIHs1LCAyMTUzMCwgNSwgMTkzNzd9LCB7NCwgMTk5MzUsIDQsIDE3OTQxfSwgezQsIDE5OTczLCA0LCAxNzk3Nn0sIHs0LCAxOTg5NywgNCwgMTc5MDd9fSwKKy8qIDI2ICovIHs1MjgwLCB7NiwgMjE0NDgsIDYsIDE5MzAzfSwgezUsIDIxNDQ4LCA1LCAxOTMwM30sIHs0LCAxOTg1OSwgNCwgMTc4NzN9LCB7NCwgMTk4OTcsIDQsIDE3OTA3fSwgezQsIDE5ODIyLCA0LCAxNzg0MH19LAorLyogMjcgKi8gezUzMDAsIHs2LCAyMTM2NywgNiwgMTkyMzB9LCB7NSwgMjEzNjcsIDUsIDE5MjMwfSwgezQsIDE5Nzg0LCA0LCAxNzgwNn0sIHs0LCAxOTgyMiwgNCwgMTc4NDB9LCB7NCwgMTk3NDcsIDQsIDE3NzcyfX0sCisvKiAyOCAqLyB7NTMyMCwgezYsIDIxMjg3LCA2LCAxOTE1OH0sIHs1LCAyMTI4NywgNSwgMTkxNTh9LCB7NCwgMTk3MTAsIDQsIDE3NzM5fSwgezQsIDE5NzQ3LCA0LCAxNzc3Mn0sIHs0LCAxOTY3MywgNCwgMTc3MDZ9fSwKKy8qIDI5ICovIHs1NTAwLCB7NiwgMjA1OTAsIDYsIDE4NTMxfSwgezUsIDIwNTkwLCA1LCAxODUzMX0sIHs0LCAxOTA2NSwgNCwgMTcxNTl9LCB7NCwgMTkxMDAsIDQsIDE3MTkwfSwgezQsIDE5MDMwLCA0LCAxNzEyN319LAorLyogMzAgKi8gezU1MjAsIHs2LCAyMDUxNiwgNiwgMTg0NjR9LCB7NSwgMjA1MTYsIDUsIDE4NDY0fSwgezQsIDE4OTk2LCA0LCAxNzA5Nn0sIHs0LCAxOTAzMCwgNCwgMTcxMjd9LCB7NCwgMTg5NjIsIDQsIDE3MDY1fX0sCisvKiAzMSAqLyB7NTU0MCwgezYsIDIwNDQyLCA2LCAxODM5N30sIHs1LCAyMDQ0MiwgNSwgMTgzOTd9LCB7NCwgMTg5MjcsIDQsIDE3MDM1fSwgezQsIDE4OTYyLCA0LCAxNzA2NX0sIHs0LCAxODg5MywgNCwgMTcwMDR9fSwKKy8qIDMyICovIHs1NTYwLCB7NiwgMjAzNjgsIDYsIDE4MzMxfSwgezUsIDIwMzY4LCA1LCAxODMzMX0sIHs0LCAxODg1OSwgNCwgMTY5NzN9LCB7NCwgMTg4OTMsIDQsIDE3MDA0fSwgezQsIDE4ODI1LCA0LCAxNjk0M319LAorLyogMzMgKi8gezU1ODAsIHs2LCAyMDI5NSwgNiwgMTgyNjZ9LCB7NSwgMjAyOTUsIDUsIDE4MjY2fSwgezQsIDE4NzkyLCA0LCAxNjkxM30sIHs0LCAxODgyNSwgNCwgMTY5NDN9LCB7NCwgMTg3NTgsIDQsIDE2ODgyfX0sCisvKiAzNCAqLyB7NTYwMCwgezYsIDIwMjIzLCA2LCAxODIwMH0sIHs1LCAyMDIyMywgNSwgMTgyMDB9LCB7NCwgMTg3MjUsIDQsIDE2ODUyfSwgezQsIDE4NzU4LCA0LCAxNjg4Mn0sIHs0LCAxODY5MSwgNCwgMTY4MjJ9fSwKKy8qIDM1ICovIHs1NjIwLCB7NiwgMjAxNTEsIDYsIDE4MTM2fSwgezUsIDIwMTUxLCA1LCAxODEzNn0sIHs0LCAxODY1OCwgNCwgMTY3OTJ9LCB7NCwgMTg2OTEsIDQsIDE2ODIyfSwgezQsIDE4NjI1LCA0LCAxNjc2Mn19LAorLyogMzYgKi8gezU2NDAsIHs2LCAyMDA3OSwgNiwgMTgwNzF9LCB7NSwgMjAwNzksIDUsIDE4MDcxfSwgezQsIDE4NTkyLCA0LCAxNjczM30sIHs0LCAxODYyNSwgNCwgMTY3NjJ9LCB7NCwgMTg1NTksIDQsIDE2NzAzfX0sCisvKiAzNyAqLyB7NTY2MCwgezYsIDIwMDA4LCA2LCAxODAwN30sIHs1LCAyMDAwOCwgNSwgMTgwMDd9LCB7NCwgMTg1MjYsIDQsIDE2NjczfSwgezQsIDE4NTU5LCA0LCAxNjcwM30sIHs0LCAxODQ5MywgNCwgMTY2NDR9fSwKKy8qIDM4ICovIHs1NjgwLCB7NiwgMTk5MzgsIDYsIDE3OTQ0fSwgezUsIDE5OTM4LCA1LCAxNzk0NH0sIHs0LCAxODQ2MSwgNCwgMTY2MTV9LCB7NCwgMTg0OTMsIDQsIDE2NjQ0fSwgezQsIDE4NDI4LCA0LCAxNjU4Nn19LAorLyogMzkgKi8gezU3MDAsIHs2LCAxOTg2OCwgNiwgMTc4ODF9LCB7NSwgMTk4NjgsIDUsIDE3ODgxfSwgezQsIDE4Mzk2LCA0LCAxNjU1Nn0sIHs0LCAxODQyOCwgNCwgMTY1ODZ9LCB7NCwgMTgzNjQsIDQsIDE2NTI3fX0sCisvKiA0MCAqLyB7NTc0NSwgezYsIDE5NzEyLCA2LCAxNzc0MX0sIHs1LCAxOTcxMiwgNSwgMTc3NDF9LCB7NCwgMTgyNTIsIDQsIDE2NDI3fSwgezQsIDE4Mjg0LCA0LCAxNjQ1NX0sIHs0LCAxODIyMCwgNCwgMTYzOTh9fSwKKy8qIDQxICovIHs1NzY1LCB7NiwgMTk2NDQsIDYsIDE3Njc5fSwgezUsIDE5NjQ0LCA1LCAxNzY3OX0sIHs0LCAxODE4OSwgNSwgMzI3NDB9LCB7NCwgMTgyMjAsIDQsIDE2Mzk4fSwgezQsIDE4MTU3LCA1LCAzMjY4M319LAorLyogNDIgKi8gezU3ODUsIHs2LCAxOTU3NiwgNiwgMTc2MTh9LCB7NSwgMTk1NzYsIDUsIDE3NjE4fSwgezQsIDE4MTI2LCA1LCAzMjYyNn0sIHs0LCAxODE1NywgNSwgMzI2ODN9LCB7NCwgMTgwOTQsIDUsIDMyNTcwfX0sCisvKiA0MyAqLyB7NTgwNSwgezYsIDE5NTA4LCA2LCAxNzU1OH0sIHs1LCAxOTUwOCwgNSwgMTc1NTh9LCB7NCwgMTgwNjMsIDUsIDMyNTE0fSwgezQsIDE4MDk0LCA1LCAzMjU3MH0sIHs0LCAxODAzMiwgNSwgMzI0NTh9fSwKKy8qIDQ0ICovIHs1ODI1LCB7NiwgMTk0NDEsIDYsIDE3NDk3fSwgezUsIDE5NDQxLCA1LCAxNzQ5N30sIHs0LCAxODAwMSwgNSwgMzI0MDJ9LCB7NCwgMTgwMzIsIDUsIDMyNDU4fSwgezQsIDE3OTcwLCA1LCAzMjM0N319LAorLyogNDUgKi8gezUxNzAsIHs2LCAyMTkwNCwgNiwgMTk3MTR9LCB7NSwgMjE5MDQsIDUsIDE5NzE0fSwgezQsIDIwMjgyLCA0LCAxODI1NH0sIHs0LCAyMDMyMSwgNCwgMTgyODl9LCB7NCwgMjAyNDMsIDQsIDE4MjE5fX0sCisvKiA0NiAqLyB7NTE5MCwgezYsIDIxODIwLCA2LCAxOTYzOH0sIHs1LCAyMTgyMCwgNSwgMTk2Mzh9LCB7NCwgMjAyMDQsIDQsIDE4MTgzfSwgezQsIDIwMjQzLCA0LCAxODIxOX0sIHs0LCAyMDE2NSwgNCwgMTgxNDh9fSwKKy8qIDQ3ICovIHs1MjEwLCB7NiwgMjE3MzYsIDYsIDE5NTYzfSwgezUsIDIxNzM2LCA1LCAxOTU2M30sIHs0LCAyMDEyNiwgNCwgMTgxMTR9LCB7NCwgMjAxNjUsIDQsIDE4MTQ4fSwgezQsIDIwMDg4LCA0LCAxODA3OX19LAorLyogNDggKi8gezUyMzAsIHs2LCAyMTY1MywgNiwgMTk0ODh9LCB7NSwgMjE2NTMsIDUsIDE5NDg4fSwgezQsIDIwMDQ5LCA0LCAxODA0NH0sIHs0LCAyMDA4OCwgNCwgMTgwNzl9LCB7NCwgMjAwMTEsIDQsIDE4MDEwfX0KK307CisvKiB0byByZWR1Y2Ugc2VhcmNoIHRpbWUsIHBsZWFzZSBtb2RpZnkgdGhpcyBkZWZpbmUgaWYgeW91IGFkZCBvciBkZWxldGUgY2hhbm5lbCBpbiB0YWJsZSAqLworI2RlZmluZSBGaXJzdDVHQ2hhbm5lbEluZGV4IDE0CisKK3ZvaWQgemZHZXRId1R1cm5PZmZkeW5QYXJhbSh6ZGV2X3QqIGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzJfdCBmcmVxdWVuY3ksIHU4X3QgYnc0MCwgdThfdCBleHRPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWx0YV9zbG9wZV9jb2VmZl9leHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWx0YV9zbG9wZV9jb2VmZl9tYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBkZWx0YV9zbG9wZV9jb2VmZl9leHBfc2hnaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGRlbHRhX3Nsb3BlX2NvZWZmX21hbl9zaGdpKQoreworICAgIC8qIEdldCBwYXJhbSBmb3IgdHVybm9mZmR5biAqLworICAgIHUxNl90IGksIGFycmF5U2l6ZTsKKworICAgIC8vem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgYXJyYXlTaXplID0gc2l6ZW9mKHpnUGh5RnJlcUNvZWZmKS9zaXplb2Yoc3RydWN0IHpzUGh5RnJlcVRhYmxlKTsKKyAgICBpZiAoZnJlcXVlbmN5IDwgMzAwMCkKKyAgICB7CisgICAgICAgIC8qIDIuNEdIeiBDaGFubmVsICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBGaXJzdDVHQ2hhbm5lbEluZGV4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmcmVxdWVuY3kgPT0gemdQaHlGcmVxQ29lZmZbaV0uZnJlcXVlbmN5KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGkgPCBGaXJzdDVHQ2hhbm5lbEluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB6bV9tc2cxX3NjYW4oWk1fTFZfMCwgIlVuc3VwcG9ydGVkIDIuNEcgZnJlcXVlbmN5ID0gIiwgZnJlcXVlbmN5KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiA1R0h6IENoYW5uZWwgKi8KKyAgICAgICAgZm9yIChpID0gRmlyc3Q1R0NoYW5uZWxJbmRleDsgaSA8IGFycmF5U2l6ZTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZnJlcXVlbmN5ID09IHpnUGh5RnJlcUNvZWZmW2ldLmZyZXF1ZW5jeSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpIDwgYXJyYXlTaXplKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB6bV9tc2cxX3NjYW4oWk1fTFZfMCwgIlVuc3VwcG9ydGVkIDVHIGZyZXF1ZW5jeSA9ICIsIGZyZXF1ZW5jeSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBGUEdBIERZTkFNSUNfSFQyMDQwX0VOICAgICAgICBmY2xrID0gMTAuOCAgKi8KKyAgICAvKiBGUEdBIFNUQVRJQ19IVDIwXyAgICAgICAgICAgICBmY2xrID0gMjEuNiAgKi8KKyAgICAvKiBSZWFsIENoaXAgICAgICAgICAgICAgICAgICAgICBmY2xrID0gNDAgICAgKi8KKyAgICAjaWYgWk1fRlBHQV9QSFkgPT0gMQorICAgIC8vZmNsayA9IDEwLjg7CisgICAgKmRlbHRhX3Nsb3BlX2NvZWZmX2V4cCA9IHpnUGh5RnJlcUNvZWZmW2ldLkZwZ2FEeW5hbWljSFQuY29lZmZfZXhwOworICAgICpkZWx0YV9zbG9wZV9jb2VmZl9tYW4gPSB6Z1BoeUZyZXFDb2VmZltpXS5GcGdhRHluYW1pY0hULmNvZWZmX21hbjsKKyAgICAqZGVsdGFfc2xvcGVfY29lZmZfZXhwX3NoZ2kgPSB6Z1BoeUZyZXFDb2VmZltpXS5GcGdhRHluYW1pY0hULmNvZWZmX2V4cF9zaGdpOworICAgICpkZWx0YV9zbG9wZV9jb2VmZl9tYW5fc2hnaSA9IHpnUGh5RnJlcUNvZWZmW2ldLkZwZ2FEeW5hbWljSFQuY29lZmZfbWFuX3NoZ2k7CisgICAgI2Vsc2UKKyAgICAvL2ZjbGsgPSA0MDsKKyAgICBpZiAoYnc0MCkKKyAgICB7CisgICAgICAgIC8qIGh0MjA0MCAqLworICAgICAgICBpZiAoZXh0T2Zmc2V0ID09IDEpIHsKKyAgICAgICAgICAgICpkZWx0YV9zbG9wZV9jb2VmZl9leHAgPSB6Z1BoeUZyZXFDb2VmZltpXS5DaGlwMjA0MEV4dEFib3ZlLmNvZWZmX2V4cDsKKyAgICAgICAgICAgICpkZWx0YV9zbG9wZV9jb2VmZl9tYW4gPSB6Z1BoeUZyZXFDb2VmZltpXS5DaGlwMjA0MEV4dEFib3ZlLmNvZWZmX21hbjsKKyAgICAgICAgICAgICpkZWx0YV9zbG9wZV9jb2VmZl9leHBfc2hnaSA9IHpnUGh5RnJlcUNvZWZmW2ldLkNoaXAyMDQwRXh0QWJvdmUuY29lZmZfZXhwX3NoZ2k7CisgICAgICAgICAgICAqZGVsdGFfc2xvcGVfY29lZmZfbWFuX3NoZ2kgPSB6Z1BoeUZyZXFDb2VmZltpXS5DaGlwMjA0MEV4dEFib3ZlLmNvZWZmX21hbl9zaGdpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgKmRlbHRhX3Nsb3BlX2NvZWZmX2V4cCA9IHpnUGh5RnJlcUNvZWZmW2ldLkNoaXAyMDQwTWh6LmNvZWZmX2V4cDsKKyAgICAgICAgICAgICpkZWx0YV9zbG9wZV9jb2VmZl9tYW4gPSB6Z1BoeUZyZXFDb2VmZltpXS5DaGlwMjA0ME1oei5jb2VmZl9tYW47CisgICAgICAgICAgICAqZGVsdGFfc2xvcGVfY29lZmZfZXhwX3NoZ2kgPSB6Z1BoeUZyZXFDb2VmZltpXS5DaGlwMjA0ME1oei5jb2VmZl9leHBfc2hnaTsKKyAgICAgICAgICAgICpkZWx0YV9zbG9wZV9jb2VmZl9tYW5fc2hnaSA9IHpnUGh5RnJlcUNvZWZmW2ldLkNoaXAyMDQwTWh6LmNvZWZmX21hbl9zaGdpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIHN0YXRpYyAyMCAqLworICAgICAgICAqZGVsdGFfc2xvcGVfY29lZmZfZXhwID0gemdQaHlGcmVxQ29lZmZbaV0uQ2hpcFNUMjBNaHouY29lZmZfZXhwOworICAgICAgICAqZGVsdGFfc2xvcGVfY29lZmZfbWFuID0gemdQaHlGcmVxQ29lZmZbaV0uQ2hpcFNUMjBNaHouY29lZmZfbWFuOworICAgICAgICAqZGVsdGFfc2xvcGVfY29lZmZfZXhwX3NoZ2kgPSB6Z1BoeUZyZXFDb2VmZltpXS5DaGlwU1QyME1oei5jb2VmZl9leHBfc2hnaTsKKyAgICAgICAgKmRlbHRhX3Nsb3BlX2NvZWZmX21hbl9zaGdpID0gemdQaHlGcmVxQ29lZmZbaV0uQ2hpcFNUMjBNaHouY29lZmZfbWFuX3NoZ2k7CisgICAgfQorICAgICNlbmRpZgorfQorCisvKiBNYWluIHJvdXRpbiBmcmVxdWVuY3kgc2V0dGluZyBmdW5jdGlvbiAqLworLyogSWYgMi40Ry81RyBzd2l0Y2gsIFBIWSBuZWVkIHJlc2V0dGluZyBCQiBhbmQgUkYgZm9yIGJhbmQgc3dpdGNoICovCisvKiBEbyB0aGUgc2V0dGluZyBzd2l0Y2ggaW4gemZTZW5kRnJlcXVlbmN5Q21kKCkgKi8KK3ZvaWQgemZIcFNldEZyZXF1ZW5jeUV4KHpkZXZfdCogZGV2LCB1MzJfdCBmcmVxdWVuY3ksIHU4X3QgYnc0MCwKKyAgICAgICAgdThfdCBleHRPZmZzZXQsIHU4X3QgaW5pdFJGKQoreworICAgIHUzMl90IGNtZFs5XTsKKyAgICB1MzJfdCBjbWRCWzNdOworICAgIHUxNl90IHJldDsKKyAgICB1OF90IG9sZF9iYW5kOworICAgIHU4X3QgbmV3X2JhbmQ7CisgICAgdTMyX3QgY2hlY2tMb29wQ291bnQ7CisgICAgdTMyX3QgdG1wVmFsdWU7CisKKyAgICBpbnQgZGVsdGFfc2xvcGVfY29lZmZfZXhwOworICAgIGludCBkZWx0YV9zbG9wZV9jb2VmZl9tYW47CisgICAgaW50IGRlbHRhX3Nsb3BlX2NvZWZmX2V4cF9zaGdpOworICAgIGludCBkZWx0YV9zbG9wZV9jb2VmZl9tYW5fc2hnaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CisKKyAgICB6bV9tc2cxX3NjYW4oWk1fTFZfMSwgIkZyZXF1ZW5jeSA9ICIsIGZyZXF1ZW5jeSk7CisgICAgem1fbXNnMV9zY2FuKFpNX0xWXzEsICJidzQwID0gIiwgYnc0MCk7CisgICAgem1fbXNnMV9zY2FuKFpNX0xWXzEsICJleHRPZmZzZXQgPSAiLCBleHRPZmZzZXQpOworCisgICAgaWYgKCBocFByaXYtPmNvbGRSZXNldE5lZWRGcmVxICkKKyAgICB7CisgICAgICAgIGhwUHJpdi0+Y29sZFJlc2V0TmVlZEZyZXEgPSAwOworICAgICAgICBpbml0UkYgPSAyOworICAgICAgICB6bV9kZWJ1Z19tc2cwKCJ6ZkhwU2V0RnJlcXVlbmN5RXg6IERvIENvbGRSZXNldCAiKTsKKyAgICB9CisgICAgaWYgKCBocFByaXYtPmlzU2l0ZVN1cnZleSA9PSAyICkKKyAgICB7CisgICAgICAgIC8qIHdhaXQgdGltZSBmb3IgQUdDIGFuZCBub2lzZSBjYWxpYnJhdGlvbiA6IG5vdCBpbiBzaXRlc3VydmV5IGFuZCBjb25uZWN0ZWQgKi8KKyAgICAgICAgY2hlY2tMb29wQ291bnQgPSAyMDAwOyAvKiAyMDAwKjEwMCA9IDIwMG1zICovCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIHdhaXQgdGltZSBmb3IgQUdDIGFuZCBub2lzZSBjYWxpYnJhdGlvbiA6IGluIHNpdGVzdXJ2ZXkgKi8KKyAgICAgICAgY2hlY2tMb29wQ291bnQgPSAxMDAwOyAvKiAxMDAwKjEwMCA9IDEwMG1zICovCisgICAgfQorCisgICAgaHBQcml2LT5sYXRlc3RGcmVxdWVuY3kgPSBmcmVxdWVuY3k7CisgICAgaHBQcml2LT5sYXRlc3RCdzQwID0gYnc0MDsKKyAgICBocFByaXYtPmxhdGVzdEV4dE9mZnNldCA9IGV4dE9mZnNldDsKKworICAgIGlmICgoaHBQcml2LT5kb3QxMU1vZGUgPT0gWk1fSEFMXzgwMjExX01PREVfSUJTU19HRU5FUkFMKSB8fAorICAgICAgICAoaHBQcml2LT5kb3QxMU1vZGUgPT0gWk1fSEFMXzgwMjExX01PREVfSUJTU19XUEEyUFNLKSkKKyAgICB7CisgICAgICAgIGlmICggZnJlcXVlbmN5IDw9IFpNX0NIX0dfMTQgKQorICAgICAgICB7CisgICAgICAgICAgICAvKiB3b3JrYXJvdW5kIGZvciAxMWcgQWQgSG9jIGJlYWNvbiBkaXN0cmlidXRpb24gKi8KKyAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19BQzBfQ1csIDB4N2YwMDA3KTsKKyAgICAgICAgICAgIC8vemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX0FDMV9BQzBfQUlGUywgMHgxYzA0OTAxYyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBBSEIsIERBQywgQURDIGNsb2NrIHNlbGVjdGlvbiBieSBzdGF0aWMyMC9odDIwNDAgKi8KKyAgICB6ZlNlbEFkY0NsayhkZXYsIGJ3NDAsIGZyZXF1ZW5jeSk7CisKKyAgICAvKiBjbGVhciBiYl9oZWF2eV9jbGlwX2VuYWJsZSAqLworICAgIHJlZ193cml0ZSgweDk5ZTAsIDB4MjAwKTsKKyAgICB6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworCisgICAgLyogU2V0IENUUy9SVFMgcmF0ZSAqLworICAgIGlmICggZnJlcXVlbmN5ID4gWk1fQ0hfR18xNCApCisgICAgeworICAgICAgICAvL3pmSHBTZXRSVFNDVFNSYXRlKGRldiwgMHgxMGIwMTBiKTsgIC8qIE9GRE0gNk0gKi8KKwkgICAgbmV3X2JhbmQgPSAxOworCX0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvL3pmSHBTZXRSVFNDVFNSYXRlKGRldiwgMHgzMDAwMyk7ICAvKiBDQ0sgMTFNICovCisgICAgICAgIG5ld19iYW5kID0gMDsKKyAgICB9CisKKyAgICBpZiAoKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5od0ZyZXF1ZW5jeSA+IFpNX0NIX0dfMTQpCisgICAgICAgIG9sZF9iYW5kID0gMTsKKyAgICBlbHNlCisgICAgICAgIG9sZF9iYW5kID0gMDsKKworICAgIC8vV29ya2Fyb3VuZCBmb3IgMi40R0h6IG9ubHkgZGV2aWNlCisgICAgaWYgKChocFByaXYtPk9wRmxhZ3MgJiAweDEpID09IDApCisgICAgeworICAgICAgICBpZiAoKCgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aHdGcmVxdWVuY3kgPT0gWk1fQ0hfR18xKSAmJiAoZnJlcXVlbmN5ID09IFpNX0NIX0dfMikpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIEZvcmNlIHRvIGRvIGJhbmQgc3dpdGNoaW5nICovCisgICAgICAgICAgICBvbGRfYmFuZCA9IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBOb3RpZnkgY2hhbm5lbCBzd2l0Y2ggdG8gZmlybXdhcmUgKi8KKyAgICAvKiBUWC9SWCBtdXN0IGJlIHN0b3BwZWQgYnkgbm93ICovCisgICAgY21kWzBdID0gMCB8IChaTV9DTURfRlJFUV9TVFJBVCA8PCA4KTsKKyAgICByZXQgPSB6Zklzc3VlQ21kKGRldiwgY21kLCA4LCBaTV9PSURfSU5URVJOQUxfV1JJVEUsIDApOworCisgICAgaWYgKChpbml0UkYgIT0gMCkgfHwgKG5ld19iYW5kICE9IG9sZF9iYW5kKQorICAgICAgICAgICAgfHwgKCgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aHdCdzQwICE9IGJ3NDApKQorICAgIHsKKyAgICAgICAgLyogYmFuZCBzd2l0Y2ggKi8KKyAgICAgICAgem1fbXNnMF9zY2FuKFpNX0xWXzEsICI9PT09PWJhbmQgc3dpdGNoPT09PT0iKTsKKworICAgICAgICBpZiAoaW5pdFJGID09IDIgKQorICAgICAgICB7CisgICAgICAgICAgICAvL0NvbGQgcmVzZXQgQkIvQUREQQorICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFkNDAwNCwgMHg4MDApOworICAgICAgICAgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKyAgICAgICAgICAgIHptX21zZzBfc2NhbihaTV9MVl8xLCAiRG8gY29sZCByZXNldCBCQi9BRERBIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvL1dhcm0gcmVzZXQgQkIvQUREQQorICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFkNDAwNCwgMHg0MDApOworICAgICAgICAgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHJlc2V0IHdvcmthcm91bmQgc3RhdGUgdG8gZGVmYXVsdCAqLworICAgICAgICBocFByaXYtPnJ4U3Ryb25nUlNTSSA9IDA7CisgICAgICAgIGhwUHJpdi0+c3Ryb25nUlNTSSA9IDA7CisKKyAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFkNDAwNCwgMHgwKTsKKyAgICAgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKworICAgICAgICB6ZkluaXRQaHkoZGV2LCBmcmVxdWVuY3ksIGJ3NDApOworCisvLyAgICAgICAgemZpQ2hlY2tSaWZzKGRldik7CisKKyAgICAgICAgLyogQmFuayAwIDEgMiAzIDUgNiA3ICovCisgICAgICAgIHpmU2V0UmZSZWdzKGRldiwgZnJlcXVlbmN5KTsKKyAgICAgICAgLyogQmFuayA0ICovCisgICAgICAgIHpmU2V0QmFuazRBbmRQb3dlclRhYmxlKGRldiwgZnJlcXVlbmN5LCBidzQwLCBleHRPZmZzZXQpOworCisgICAgICAgIGNtZFswXSA9IDMyIHwgKFpNX0NNRF9SRl9JTklUIDw8IDgpOworICAgIH0KKyAgICBlbHNlIC8vKChuZXdfYmFuZCA9PSBvbGRfYmFuZCkgJiYgIWluaXRSRikKKyAgICB7CisgICAgICAgLyogc2FtZSBiYW5kICovCisKKyAgICAgICAvKiBGb3JjZSBkaXNhYmxlIENSNjcxIGJpdDIwIC8gNzgyMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAvKiBUaGUgYnVnIGhhcyB0byBkbyB3aXRoIHRoZSBwb2xhcml0eSBvZiB0aGUgcGRhZGMgb2Zmc2V0IGNhbGlicmF0aW9uLiAgVGhlcmUgKi8KKyAgICAgICAvKiBpcyBhbiBpbml0aWFsIGNhbGlicmF0aW9uIHRoYXQgaXMgT0ssIGFuZCB0aGVyZSBpcyBhIGNvbnRpbnVvdXMgICAgICAgICAgICAgKi8KKyAgICAgICAvKiBjYWxpYnJhdGlvbiB0aGF0IHVwZGF0ZXMgdGhlIHBkZGFjIHdpdGggdGhlIHdyb25nIHBvbGFyaXR5LiAgRm9ydHVuYXRlbHkgICAgKi8KKyAgICAgICAvKiB0aGUgc2Vjb25kIGxvb3AgY2FuIGJlIGRpc2FibGVkIHdpdGggYSBiaXQgY2FsbGVkIGVuX3BkX2RjX29mZnNldF90aHIuICAgICAgKi8KKyNpZiAwCisgICAgICAgIGNtZEJbMF0gPSA4IHwgKFpNX0NNRF9CSVRBTkQgPDwgOCk7OworICAgICAgICBjbWRCWzFdID0gKDB4YTI3YyArIDB4MWJjMDAwKTsKKyAgICAgICAgY21kQlsyXSA9IDB4ZmZlZmZmZmY7CisgICAgICAgIHJldCA9IHpmSXNzdWVDbWQoZGV2LCBjbWRCLCAxMiwgWk1fT0lEX0lOVEVSTkFMX1dSSVRFLCAwKTsKKyNlbmRpZgorCisgICAgICAgLyogQmFuayA0ICovCisgICAgICAgemZTZXRCYW5rNEFuZFBvd2VyVGFibGUoZGV2LCBmcmVxdWVuY3ksIGJ3NDAsIGV4dE9mZnNldCk7CisKKworICAgICAgICBjbWRbMF0gPSAzMiB8IChaTV9DTURfRlJFUVVFTkNZIDw8IDgpOworICAgIH0KKworICAgIC8qIENvbXBhdGliaWxpdHkgZm9yIG5ldyBsYXlvdXQgVUI4MyAqLworICAgIC8qIFNldHRpbmcgY29kZSBhdCBDUjEgaGVyZSBtb3ZlIGZyb20gdGhlIGZ1bmM6emZId0hURW5hYmxlKCkgaW4gZmlybXdhcmUgKi8KKyAgICBpZiAoKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5oYWxDYXBhYmlsaXR5ICYgWk1fSFBfQ0FQXzExTl9PTkVfVFhfU1RSRUFNKQorICAgIHsKKyAgICAgICAgLyogVUI4MyA6IG9uZSBzdHJlYW0gKi8KKyAgICAgICAgdG1wVmFsdWUgPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBVQjgxLCBVQjgyIDogdHdvIHN0cmVhbSAqLworICAgICAgICB0bXBWYWx1ZSA9IDB4MTAwOworICAgIH0KKworICAgIGlmICgxKSAvL2lmICgoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmh3X0hUX0VOQUJMRSA9PSAxKQorCXsKKyAgICAgICAgaWYgKGJ3NDAgPT0gMSkKKwkJeworCQkJaWYgKGV4dE9mZnNldCA9PSAxKSB7CisgICAgICAgICAgICAJcmVnX3dyaXRlKDB4OTgwNCwgdG1wVmFsdWUgfCAweDJkNCk7IC8vM2Q0IGZvciByZWFsCisJCQl9CisJCQllbHNlIHsKKwkJCQlyZWdfd3JpdGUoMHg5ODA0LCB0bXBWYWx1ZSB8IDB4MmM0KTsgICAvLzNjNCBmb3IgcmVhbAorCQkJfQorCQkJLy8jIER5biBIVDIwNDAuUmVmZXIgdG8gUmVnIDEuCisgICAgICAgICAgICAvLyNbM106c2luZ2xlIGxlbmd0aCAoNHVzKSAxc3QgSFQgbG9uZyB0cmFpbmluZyBzeW1ib2w7IHVzZSBXYWxzaCBzcGF0aWFsIHNwcmVhZGluZyBmb3IgMiBjaGFpbnMgMiBzdHJlYW1zIFRYCisgICAgICAgICAgICAvLyNbY106YWxsb3cgc2hvcnQgR0kgZm9yIEhUNDAgcGFja2V0czsgZW5hYmxlIEhUIGRldGVjdGlvbi4KKyAgICAgICAgICAgIC8vI1s0XTplbmFibGUgMjAvNDAgTUh6IGNoYW5uZWwgZGV0ZWN0aW9uLgorICAgICAgICB9CisgICAgICAgIGVsc2UKKwkgICAgeworICAgICAgICAgICAgcmVnX3dyaXRlKDB4OTgwNCwgdG1wVmFsdWUgfCAweDI0MCk7CisJCSAgICAvLyMgU3RhdGljIEhUMjAKKyAgICAgICAgICAgIC8vI1szXTpzaW5nbGUgbGVuZ3RoICg0dXMpIDFzdCBIVCBsb25nIHRyYWluaW5nIHN5bWJvbDsgdXNlIFdhbHNoIHNwYXRpYWwgc3ByZWFkaW5nIGZvciAyIGNoYWlucyAyIHN0cmVhbXMgVFgKKyAgICAgICAgICAgIC8vI1s0XTpPdHVzIGRvbid0IGFsbG93IHNob3J0IEdJIGZvciBIVDIwIHBhY2tldHMgeWV0OyBlbmFibGUgSFQgZGV0ZWN0aW9uLgorICAgICAgICAgICAgLy8jWzBdOmRpc2FibGUgMjAvNDAgTUh6IGNoYW5uZWwgZGV0ZWN0aW9uLgorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKwl7CisgICAgICAgIHJlZ193cml0ZSgweDk4MDQsIDB4MCk7CisJCS8vIyBMZWdhY3k7IyBEaXJlY3QgTWFwcGluZyBmb3IgZWFjaCBjaGFpbi4KKyAgICAgICAgLy8jQmUgbW9kaWZpZWQgYnkgT2xpZ28gdG8gYWRkIGR5bmFuaWMgZm9yIGxlZ2FjeS4KKyAgICAgICAgaWYgKGJ3NDAgPT0gMSkKKwkJeworICAgICAgICAgICAgcmVnX3dyaXRlKDB4OTgwNCwgMHg0KTsgICAgIC8vIyBEeW4gTGVnYWN5IC5SZWZlciB0byByZWcgMS4KKyAgICAgICAgfQorICAgICAgICBlbHNlCisJCXsKKyAgICAgICAgICAgIHJlZ193cml0ZSgweDk4MDQsIDB4MCk7ICAgIC8vIyBTdGF0aWMgTGVnYWN5CisgICAgICAgIH0KKwl9CisJemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKwkvKiBlbmQgb2YgdWI4MyBjb21wYXRpYmlsaXR5ICovCisKKyAgICAvKiBTZXQgUG93ZXIsIFRQQywgR2FpbiB0YWJsZS4uLiAqLworCXpmU2V0UG93ZXJDYWxUYWJsZShkZXYsIGZyZXF1ZW5jeSwgYnc0MCwgZXh0T2Zmc2V0KTsKKworCisgICAgLyogc3RvcmUgZnJlcXVlbmN5ICovCisgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5od0ZyZXF1ZW5jeSA9ICh1MTZfdClmcmVxdWVuY3k7CisgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5od0J3NDAgPSBidzQwOworICAgICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aHdFeHRPZmZzZXQgPSBleHRPZmZzZXQ7CisKKyAgICB6ZkdldEh3VHVybk9mZmR5blBhcmFtKGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSwgYnc0MCwgZXh0T2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRlbHRhX3Nsb3BlX2NvZWZmX2V4cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZWx0YV9zbG9wZV9jb2VmZl9tYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVsdGFfc2xvcGVfY29lZmZfZXhwX3NoZ2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVsdGFfc2xvcGVfY29lZmZfbWFuX3NoZ2kpOworCisgICAgLyogcmVsYXRlZCBmdW5jdGlvbnMgKi8KKyAgICBmcmVxdWVuY3kgPSBmcmVxdWVuY3kqMTAwMDsKKyAgICAvKiBsZW5bMzZdIDogdHlwZVsweDMwXSA6IHNlcVs/XSAqLworLy8gICAgY21kWzBdID0gMjggfCAoWk1fQ01EX0ZSRVFVRU5DWSA8PCA4KTsKKyAgICBjbWRbMV0gPSBmcmVxdWVuY3k7CisgICAgY21kWzJdID0gYnc0MDsvLygoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aHdfRFlOQU1JQ19IVDIwNDBfRU47CisgICAgY21kWzNdID0gKGV4dE9mZnNldDw8Mil8MHgxOy8vKCh3ZC0+RXh0T2Zmc2V0IDw8IDIpIHwgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5od19IVF9FTkFCTEUpOworICAgIGNtZFs0XSA9IGRlbHRhX3Nsb3BlX2NvZWZmX2V4cDsKKyAgICBjbWRbNV0gPSBkZWx0YV9zbG9wZV9jb2VmZl9tYW47CisgICAgY21kWzZdID0gZGVsdGFfc2xvcGVfY29lZmZfZXhwX3NoZ2k7CisgICAgY21kWzddID0gZGVsdGFfc2xvcGVfY29lZmZfbWFuX3NoZ2k7CisgICAgY21kWzhdID0gY2hlY2tMb29wQ291bnQ7CisKKyAgICByZXQgPSB6Zklzc3VlQ21kKGRldiwgY21kLCAzNiwgWk1fQ01EX1NFVF9GUkVRVUVOQ1ksIDApOworCisgICAgLy8gZGVsYXkgdGVtcG9yYXJpbHksIHdhaXQgZm9yIG5ldyBQSFkgYW5kIFJGCisgICAgLy96ZndTbGVlcChkZXYsIDEwMDApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKiBLZXkgKioqKioqKioqKioqKioqKioqKiovCisKK3UxNl90IHpmSHBSZXNldEtleUNhY2hlKHpkZXZfdCogZGV2KQoreworICAgIHU4X3QgaTsKKyAgICB1MzJfdCBrZXlbNF0gPSB7MCwgMCwgMCwgMH07CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKworICAgIGZvcihpPTA7aTw0O2krKykKKyAgICB7CisgICAgICAgIHpmSHBTZXREZWZhdWx0S2V5KGRldiwgaSwgWk1fV0VQNjQsIGtleSwgTlVMTCk7CisgICAgfQorICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19ST0xMX0NBTExfVEJMX0wsIDB4MDApOworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19ST0xMX0NBTExfVEJMX0gsIDB4MDApOworICAgIHpmRmx1c2hEZWxheVdyaXRlKGRldik7CisKKyAgICBocFByaXYtPmNhbVJvbGxDYWxsVGFibGUgPSAodTY0X3QpIDA7CisKKyAgICByZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZTZXRLZXkgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFNldCBrZXkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIDAgOiBzdWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBvdGhlciA6IGZhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNi4xICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogISBwbGVhc2UgdXNlIHpmQ29yZVNldEtleSgpIGluIDgwMjExQ29yZSBmb3IgU2V0S2V5ICovCit1MzJfdCB6ZkhwU2V0S2V5KHpkZXZfdCogZGV2LCB1OF90IHVzZXIsIHU4X3Qga2V5SWQsIHU4X3QgdHlwZSwKKyAgICAgICAgdTE2X3QqIG1hYywgdTMyX3QqIGtleSkKK3sKKyAgICB1MzJfdCBjbWRbKFpNX01BWF9DTURfU0laRS80KV07CisgICAgdTE2X3QgcmV0OworICAgIHUxNl90IGk7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKworI2lmIDAgICAvKiByZW1vdmUgdG8gemZDb3JlU2V0S2V5KCkgKi8KKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyAgICB3ZC0+c3RhLmZsYWdLZXlDaGFuZ2luZysrOworICAgIHptX2RlYnVnX21zZzEoIiAgIHpmSHBTZXRLZXkrKysrICIsIHdkLT5zdGEuZmxhZ0tleUNoYW5naW5nKTsKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworI2VuZGlmCisKKyAgICBjbWRbMF0gPSAweDAwMDAyODFDOworICAgIGNtZFsxXSA9ICgodTMyX3Qpa2V5SWQ8PDE2KSArICh1MzJfdCl1c2VyOworICAgIGNtZFsyXSA9ICgodTMyX3QpbWFjWzBdPDwxNikgKyAodTMyX3QpdHlwZTsKKyAgICBjbWRbM10gPSAoKHUzMl90KW1hY1syXTw8MTYpICsgKCh1MzJfdCltYWNbMV0pOworCisgICAgZm9yIChpPTA7IGk8NDsgaSsrKQorICAgIHsKKyAgICAgICAgY21kWzQraV0gPSBrZXlbaV07CisgICAgfQorCisgICAgaWYgKHVzZXIgPCA2NCkKKyAgICB7CisgICAgICAgIGhwUHJpdi0+Y2FtUm9sbENhbGxUYWJsZSB8PSAoKHU2NF90KSAxKSA8PCB1c2VyOworICAgIH0KKworICAgIC8vcmV0ID0gemZJc3N1ZUNtZChkZXYsIGNtZCwgMzIsIFpNX09JRF9JTlRFUk5BTF9XUklURSwgTlVMTCk7CisgICAgcmV0ID0gemZJc3N1ZUNtZChkZXYsIGNtZCwgMzIsIFpNX0NNRF9TRVRfS0VZLCBOVUxMKTsKKyAgICByZXR1cm4gcmV0OworfQorCisKK3UzMl90IHpmSHBTZXRBcFBhaXJ3aXNlS2V5KHpkZXZfdCogZGV2LCB1MTZfdCogc3RhTWFjQWRkciwgdThfdCB0eXBlLAorICAgICAgICB1MzJfdCoga2V5LCB1MzJfdCogbWljS2V5LCB1MTZfdCBzdGFBaWQpCit7CisgICAgaWYgKChzdGFBaWQhPTApICYmIChzdGFBaWQ8NjQpKQorICAgIHsKKyAgICAgICAgemZIcFNldEtleShkZXYsIChzdGFBaWQtMSksIDAsIHR5cGUsIHN0YU1hY0FkZHIsIGtleSk7CisgICAgICAgICAgICAgICAgaWYgKCh0eXBlID09IFpNX1RLSVApCisjaWZkZWYgWk1fRU5BQkxFX0NFTkMKKyAgICAgICAgIHx8ICh0eXBlID09IFpNX0NFTkMpCisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworICAgICAgICAgICApCisgICAgICAgICAgICB6ZkhwU2V0S2V5KGRldiwgKHN0YUFpZC0xKSwgMSwgdHlwZSwgc3RhTWFjQWRkciwgbWljS2V5KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiAxOworfQorCit1MzJfdCB6ZkhwU2V0QXBHcm91cEtleSh6ZGV2X3QqIGRldiwgdTE2X3QqIGFwTWFjQWRkciwgdThfdCB0eXBlLAorICAgICAgICB1MzJfdCoga2V5LCB1MzJfdCogbWljS2V5LCB1MTZfdCB2YXBJZCkKK3sKKyAgICB6ZkhwU2V0S2V5KGRldiwgWk1fVVNFUl9LRVlfREVGQVVMVCAtIDEgLSB2YXBJZCwgMCwgdHlwZSwgYXBNYWNBZGRyLCBrZXkpOwkvLyA2RDE4IG1vZGlmeSBmcm9tIDAgdG8gMSA/PworICAgICAgICAgICAgaWYgKCh0eXBlID09IFpNX1RLSVApCisjaWZkZWYgWk1fRU5BQkxFX0NFTkMKKyAgICAgICAgIHx8ICh0eXBlID09IFpNX0NFTkMpCisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworICAgICAgICAgICApCisgICAgICAgIHpmSHBTZXRLZXkoZGV2LCBaTV9VU0VSX0tFWV9ERUZBVUxUIC0gMSAtIHZhcElkLCAxLCB0eXBlLCBhcE1hY0FkZHIsIG1pY0tleSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3UzMl90IHpmSHBTZXREZWZhdWx0S2V5KHpkZXZfdCogZGV2LCB1OF90IGtleUlkLCB1OF90IHR5cGUsIHUzMl90KiBrZXksIHUzMl90KiBtaWNLZXkpCit7CisgICAgdTE2X3QgbWFjQWRkclszXSA9IHswLCAwLCAwfTsKKworICAgICNpZmRlZiBaTV9FTkFCTEVfSUJTU19XUEEyUFNLCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKKworICAgIGlmICggaHBQcml2LT5kb3QxMU1vZGUgPT0gWk1fSEFMXzgwMjExX01PREVfSUJTU19XUEEyUFNLICkKKyAgICB7IC8qIElmIG5vdCB3cGEycHNrICwgdXNlIHRyYWRpdGlvbmFsICovCisgICAgICAvKiBCZWNhdXNlIHRoZSBidWcgb2YgY2hpcCAsIGRlZmF1bHRrZXkgc2hvdWxkIGZvbGxvdyB0aGUga2V5IG1hcCBydWxlIGluIHJlZ2lzdGVyIDcwMCAqLworICAgICAgICBpZiAoIGtleUlkID09IDAgKQorICAgICAgICAgICAgemZIcFNldEtleShkZXYsIFpNX1VTRVJfS0VZX0RFRkFVTFQra2V5SWQsIDAsIHR5cGUsIG1hY0FkZHIsIGtleSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHpmSHBTZXRLZXkoZGV2LCBaTV9VU0VSX0tFWV9ERUZBVUxUK2tleUlkLCAxLCB0eXBlLCBtYWNBZGRyLCBrZXkpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHpmSHBTZXRLZXkoZGV2LCBaTV9VU0VSX0tFWV9ERUZBVUxUK2tleUlkLCAwLCB0eXBlLCBtYWNBZGRyLCBrZXkpOworICAgICNlbHNlCisgICAgICAgIHpmSHBTZXRLZXkoZGV2LCBaTV9VU0VSX0tFWV9ERUZBVUxUK2tleUlkLCAwLCB0eXBlLCBtYWNBZGRyLCBrZXkpOworICAgICNlbmRpZgorICAgICAgICAgICAgaWYgKCh0eXBlID09IFpNX1RLSVApCisKKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQworICAgICAgICAgfHwgKHR5cGUgPT0gWk1fQ0VOQykKKyNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCisgICAgICAgICAgICkKKyAgICB7CisgICAgICAgIHpmSHBTZXRLZXkoZGV2LCBaTV9VU0VSX0tFWV9ERUZBVUxUK2tleUlkLCAxLCB0eXBlLCBtYWNBZGRyLCBtaWNLZXkpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit1MzJfdCB6ZkhwU2V0UGVyVXNlcktleSh6ZGV2X3QqIGRldiwgdThfdCB1c2VyLCB1OF90IGtleUlkLCB1OF90KiBtYWMsIHU4X3QgdHlwZSwgdTMyX3QqIGtleSwgdTMyX3QqIG1pY0tleSkKK3sKKyNpZmRlZiBaTV9FTkFCTEVfSUJTU19XUEEyUFNLCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKKworICAgIGlmICggaHBQcml2LT5kb3QxMU1vZGUgPT0gWk1fSEFMXzgwMjExX01PREVfSUJTU19XUEEyUFNLICkKKyAgICB7IC8qIElmIG5vdCB3cGEycHNrICwgdXNlIHRyYWRpdGlvbmFsICovCisgICAgICAgIGlmKGtleUlkKQorICAgICAgICB7ICAvKiBTZXQgR3JvdXAgS2V5ICovCisgICAgICAgICAgICB6ZkhwU2V0S2V5KGRldiwgdXNlciwgMSwgdHlwZSwgKHUxNl90ICopbWFjLCBrZXkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYoa2V5SWQgPT0gMCkKKyAgICAgICAgeyAgLyogU2V0IFBhaXJ3aXNlIEtleSAqLworICAgICAgICAgICAgemZIcFNldEtleShkZXYsIHVzZXIsIDAsIHR5cGUsICh1MTZfdCAqKW1hYywga2V5KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB6ZkhwU2V0S2V5KGRldiwgdXNlciwga2V5SWQsIHR5cGUsICh1MTZfdCAqKW1hYywga2V5KTsKKyAgICB9CisjZWxzZQorICAgIHpmSHBTZXRLZXkoZGV2LCB1c2VyLCBrZXlJZCwgdHlwZSwgKHUxNl90ICopbWFjLCBrZXkpOworI2VuZGlmCisKKyAgICAgICAgICAgIGlmICgodHlwZSA9PSBaTV9US0lQKQorI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisgICAgICAgICB8fCAodHlwZSA9PSBaTV9DRU5DKQorI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKKyAgICAgICAgICAgKQorICAgIHsKKyAgICAgICAgemZIcFNldEtleShkZXYsIHVzZXIsIGtleUlkICsgMSwgdHlwZSwgKHUxNl90ICopbWFjLCBtaWNLZXkpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmSHBSZW1vdmVLZXkgICAgICAgICAgICAgICAqLworLyogICAgICBSZW1vdmUga2V5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAwIDogc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgb3RoZXIgOiBmYWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgWXVhbi1HdSBXZWkgICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDYuNiAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90IHpmSHBSZW1vdmVLZXkoemRldl90KiBkZXYsIHUxNl90IHVzZXIpCit7CisgICAgdTMyX3QgY21kWyhaTV9NQVhfQ01EX1NJWkUvNCldOworICAgIHUxNl90IHJldCA9IDA7CisKKyAgICBjbWRbMF0gPSAweDAwMDAyOTA0OworICAgIGNtZFsxXSA9ICh1MzJfdCl1c2VyOworCisgICAgcmV0ID0gemZJc3N1ZUNtZChkZXYsIGNtZCwgOCwgWk1fT0lEX0lOVEVSTkFMX1dSSVRFLCBOVUxMKTsKKyAgICByZXR1cm4gcmV0OworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqIERNQSAqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90IHpmSHBTdGFydFJlY3YoemRldl90KiBkZXYpCit7CisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFjM2QzMCwgMHgxMDApOworICAgIHpmRmx1c2hEZWxheVdyaXRlKGRldik7CisKKyAgICByZXR1cm4gMDsKK30KKwordTE2X3QgemZIcFN0b3BSZWN2KHpkZXZfdCogZGV2KQoreworICAgIHJldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKiBNQUMgKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHpmSW5pdE1hYyh6ZGV2X3QqIGRldikKK3sKKyAgICAvKiBBQ0sgZXh0ZW5zaW9uIHJlZ2lzdGVyICovCisgICAgLy8gamhsZWUgdGVtcCA6IGNoYW5nZSB2YWx1ZSAweDJjIC0+IDB4NDAKKyAgICAvLyBob25kYSByZXNvbHZlIHNob3J0IHByZWFtYmxlIHByb2JsZW0gOiAweDQwIC0+IDB4NzUKKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfQUNLX0VYVEVOU0lPTiwgMHg0MCk7IC8vIDB4MjggLT4gMHgyYyA2NTIyOnlmbGVlCisKKyAgICAvKiBUeFEwLzEvMi8zIFJldHJ5IE1BWD0yID0+IHRyYW5zbWl0IDMgdGltZXMgYW5kIGRlZ3JhZGUgcmF0ZSBmb3IgcmV0cnkgKi8KKyAgICAvKiBQQjQyIEFQIGNyYXNoIGlzc3VlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBXb3JrYXJvdW5kIHRoZSBjcmFzaCBpc3N1ZSBieSBDVFMvUlRTLCBzZXQgcmV0cnkgbWF4IHRvIHplcm8gZm9yICAgICAgKi8KKyAgICAvKiAgIHdvcmthcm91bmQgdHggdW5kZXJydW4gd2hpY2ggZW5hYmxlIENUUy9SVFMgKi8KKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfUkVUUllfTUFYLCAwKTsgLy8gMHgxMTExMSA9PiAwCisKKyAgICAvKiB1c2UgaGFyZHdhcmUgTUlDIGNoZWNrICovCisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX1NOSUZGRVIsIDB4MjAwMDAwMCk7CisKKyAgICAvKiBTZXQgUnggdGhyZXNob2xkIHRvIDE2MDAgKi8KKyNpZiBaTV9MQVJHRVBBWUxPQURfVEVTVCA9PSAxCisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX1JYX1RIUkVTSE9MRCwgMHhjNDAwMCk7CisjZWxzZQorICAgICNpZm5kZWYgWk1fRElTQUJMRV9BTVNEVThLX1NVUFBPUlQKKyAgICAvKiBUaGUgbWF4aW11bSBBLU1TRFUgbGVuZ3RoIGlzIDM4MzkvNzkzNSAqLworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19SWF9USFJFU0hPTEQsIDB4YzFmODApOworICAgICNlbHNlCisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX1JYX1RIUkVTSE9MRCwgMHhjMGY4MCk7CisgICAgI2VuZGlmCisjZW5kaWYKKworICAgIC8vemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX0RZTkFNSUNfU0lGU19BQ0ssIDB4MTBBKTsKKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfUlhfUEVfREVMQVksIDB4NzApOworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19FSUZTX0FORF9TSUZTLCAweGExNDQwMDApOworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19TTE9UX1RJTUUsIDk8PDEwKTsKKworICAgIC8qIENGLUVORCBtb2RlICovCisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFjM2IyYywgMHgxOTAwMDAwMCk7CisKKyAgICAvL05BViBwcm90ZWN0cyBBQ0sgb25seSAoaW4gVFhPUCkKKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWMzYjM4LCAweDIwMSk7CisKKworICAgIC8qIFNldCBCZWFjb24gUEhZIENUUkwncyBUUEMgdG8gMHg3LCBUQTE9MSAqLworICAgIC8qIE9UVVMgc2V0IEFNIHRvIDB4MSAqLworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19CQ05fSFQxLCAweDgwMDAxNzApOworCisgICAgLyogVE9ETyA6IHdlcCBiYWNrb2ZmIHByb3RlY3Rpb24gMHg2M2MgKi8KKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfQkFDS09GRl9QUk9URUNULCAweDEwNSk7CisKKyAgICAvKiBBR0cgdGVzdCBjb2RlKi8KKyAgICAvKiBBZ2dyZWdhdGlvbiBNQVggbnVtYmVyIGFuZCB0aW1lb3V0ICovCisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFjM2I5YywgMHgxMDAwMGEpOworICAgIC8qIEZpbHRlciBhbnkgY29udHJvbCBmcmFtZXMsIEJBUiBpcyBiaXQgMjQgKi8KKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWMzNjhjLCAweDA1MDBmZmZmKTsKKyAgICAvKiBFbmFibGUgZGVhZ2dyZWdhdG9yICovCisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFjM2M0MCwgMHgxKTsKKworICAgIC8qIEJhc2ljIHJhdGUgKi8KKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfQkFTSUNfUkFURSwgMHgxNTBmKTsKKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfTUFOREFUT1JZX1JBVEUsIDB4MTUwZik7CisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX1JUU19DVFNfUkFURSwgMHgxMGIwMWJiKTsKKworICAgIC8qIE1JTU8gcmVzcG9zbmUgY29udHJvbCAqLworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzM2OTQsIDB4NDAwM0MxRSk7LyogYml0IDI2fjI4ICBvdHVzLUFNICovCisKKyAgICAvKiBFbmFibGUgTEVEMCBhbmQgTEVEMSAqLworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxZDAxMDAsIDB4Myk7CisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFkMDEwNCwgMHgzKTsKKworICAgIC8qIHN3aXRjaCBNQUMgdG8gT1RVUyBpbnRlcmZhY2UgKi8KKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWMzNjAwLCAweDMpOworCisgICAgLyogUlhNQUMgQS1NUERVIGxlbmd0aCB0aHJlc2hvbGQgKi8KKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWMzYzUwLCAweGZmZmYpOworCisJLyogUGh5IHJlZ2lzdGVyIHJlYWQgdGltZW91dCAqLworCXpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzM2ODAsIDB4ZjAwMDA4KTsKKworCS8qIERpc2FibGUgUnggVGltZU91dCA6IHdvcmthcm91bmQgZm9yIEJCLgorCSAqICBPVFVTIHdvdWxkIGludGVycnVwdCB0aGUgcnggZnJhbWUgdGhhdCBzZW50IGJ5IE9XTCBUeFVuZGVyUnVuCisJICogIGJlY2F1c2UgT1RVUyByeCB0aW1lb3V0IGJlaGF2aW9yLCB0aGVuIE9UVVMgd291bGQgbm90IGFjayB0aGUgQkEgZm9yCisJICogIHRoaXMgQU1QRFUgZnJvbSBPV0wuCisJICogIEZpeCBieSBQZXJyeSBId2FuZy4gIDIwMDcvMDUvMTAuCisJICogIDB4MWMzNjJjIDogUnggdGltZW91dCB2YWx1ZSA6IGJpdCAyN34xNgorCSAqLworCXpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzM2MmMsIDB4MCk7CisKKyAgICAvL1NldCBVU0IgUnggc3RyZWFtIG1vZGUgTUFYIHBhY2tldCBudW1iZXIgdG8gMgorICAgIC8vICAgIE1heCBwYWNrZXQgbnVtYmVyID0gKjB4MWUxMTEwICsgMQorICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxZTExMTAsIDB4NCk7CisgICAgLy9TZXQgVVNCIFJ4IHN0cmVhbSBtb2RlIHRpbWVvdXQgdG8gMTB1cworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxZTExMTQsIDB4ODApOworCisgICAgLy9TZXQgQ1BVIGNsb2NrIGZyZXF1ZW5jeSB0byA4OC84ME1IegorICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxRDQwMDgsIDB4NzMpOworCisgICAgLy9TZXQgV0xBTiBETUEgaW50ZXJydXB0IG1vZGUgOiBnZW5lcmF0ZSBpbnQgcGVyIHBhY2tldAorICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzNkN2MsIDB4MTEwMDExKTsKKworICAgIC8qIDc4MDcgKi8KKyAgICAvKiBlbmFibGUgZnVuYyA6IFJlc2V0IEZJRk8xIGFuZCBGSUZPMiB3aGVuIHF1ZXVlLWdudCBpcyBsb3cgKi8KKyAgICAvKiAweDFjM2JiMCBCaXQyICovCisgICAgLyogRGlzYWJsZSBTd1Jlc2V0IGluIGZpcm13YXJlIGZvciBUeEhhbmcsIGVuYWJsZSByZXNldCBGSUZPIGZ1bmMuICovCisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFjM2JiMCwgMHg0KTsKKworICAgIC8qIERpc2FibGVzIHRoZSBDRl9FTkQgZnJhbWUgKi8KKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfVFhPUF9OT1RfRU5PVUdIX0lORElDQVRJT04sIDB4MTQxRTBGNDgpOworCisJLyogRGlzYWJsZSB0aGUgU1cgRGVjcnlwdCovCisJemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFjMzY3OCwgMHg3MCk7CisgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLyogU2V0IFR4UXMgQ1dNSU4sIENXTUFYLCBBSUZTIGFuZCBUWE8gdG8gV01FIFNUQSBkZWZhdWx0LiAqLworICAgIHpmVXBkYXRlRGVmYXVsdFFvc1BhcmFtZXRlcihkZXYsIDApOworCisgICAgLy96ZlNlbEFkY0NsayhkZXYsIDApOworCisgICAgcmV0dXJuOworfQorCisKK3UxNl90IHpmSHBTZXRTbmlmZmVyTW9kZSh6ZGV2X3QqIGRldiwgdTE2X3Qgb24pCit7CisgICAgaWYgKG9uICE9IDApCisgICAgeworICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfU05JRkZFUiwgMHgyMDAwMDAxKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX1NOSUZGRVIsIDB4MjAwMDAwMCk7CisgICAgfQorICAgIHpmRmx1c2hEZWxheVdyaXRlKGRldik7CisgICAgcmV0dXJuIDA7Cit9CisKKwordTE2X3QgemZIcFNldEFwU3RhTW9kZSh6ZGV2X3QqIGRldiwgdThfdCBtb2RlKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXYtPmRvdDExTW9kZSA9IG1vZGU7CisKKyAgICBzd2l0Y2gobW9kZSkKKyAgICB7CisgICAgICAgIGNhc2UgWk1fSEFMXzgwMjExX01PREVfQVA6CisgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWMzNzAwLCAweDBmMDAwMGExKTsKKyAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzNjNDAsIDB4MSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFpNX0hBTF84MDIxMV9NT0RFX1NUQToKKyAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzM3MDAsIDB4MGYwMDAwMDIpOworICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFjM2M0MCwgMHgxKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWk1fSEFMXzgwMjExX01PREVfSUJTU19HRU5FUkFMOgorICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFjMzcwMCwgMHgwZjAwMDAwMCk7CisgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWMzYzQwLCAweDEpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBaTV9IQUxfODAyMTFfTU9ERV9JQlNTX1dQQTJQU0s6CisgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWMzNzAwLCAweDBmMDAwMGUwKTsKKyAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzNjNDAsIDB4NDEpOyAgICAgICAvLyBmb3IgbXVsdGlwbGUgKCA+IDIgKSBzdGF0aW9ucyBJQlNTIG5ldHdvcmsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBnb3RvIHNraXA7CisgICAgfQorCisgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKworc2tpcDoKKyAgICByZXR1cm4gMDsKK30KKworCit1MTZfdCB6ZkhwU2V0QnNzaWQoemRldl90KiBkZXYsIHU4X3QqIGJzc2lkU3JjKQoreworICAgIHUzMl90ICBhZGRyZXNzOworICAgIHUxNl90ICpic3NpZCA9ICh1MTZfdCAqKWJzc2lkU3JjOworCisgICAgYWRkcmVzcyA9IGJzc2lkWzBdICsgKCgodTMyX3QpYnNzaWRbMV0pIDw8IDE2KTsKKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWMzNjE4LCBhZGRyZXNzKTsKKworICAgIGFkZHJlc3MgPSAodTMyX3QpYnNzaWRbMl07CisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFjMzYxQywgYWRkcmVzcyk7CisgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKyAgICByZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZIcFVwZGF0ZVFvc1BhcmFtZXRlciAgICAgICovCisvKiAgICAgIFVwZGF0ZSBUeFFzIENXTUlOLCBDV01BWCwgQUlGUyBhbmQgVFhPUC4gICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBjd21pblRibCA6IENXTUlOIHBhcmFtZXRlciBmb3IgVHhRcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgY3dtYXhUYmwgOiBDV01BWCBwYXJhbWV0ZXIgZm9yIFR4UXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGFpZnNUYmw6IEFJRlMgcGFyYW1ldGVyIGZvciBUeFFzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICB0eG9wVGJsIDogVFhPUCBwYXJhbWV0ZXIgZm9yIFR4UXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBub25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuICAgICAgICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNi42ICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordThfdCB6ZkhwVXBkYXRlUW9zUGFyYW1ldGVyKHpkZXZfdCogZGV2LCB1MTZfdCogY3dtaW5UYmwsIHUxNl90KiBjd21heFRibCwKKyAgICAgICAgdTE2X3QqIGFpZnNUYmwsIHUxNl90KiB0eG9wVGJsKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CisKKyAgICB6bV9tc2cwX21tKFpNX0xWXzAsICJ6ZkhhbFVwZGF0ZVFvc1BhcmFtZXRlcigpIik7CisKKyAgICAvKiBOb3RlIDogRG8gbm90IGNoYW5nZSBjd21pbiBmb3IgUTAgaW4gQWQgSG9jIG1vZGUgICAgICAgICAgICAgICovCisgICAgLyogICAgICAgIG90aGVyd2lzZSBkcml2ZXIgd2lsbCBmYWlsIGluIFdpZmkgYmVhY29uIGRpc3RyaWJ1dGlvbiAqLworICAgIGlmIChocFByaXYtPmRvdDExTW9kZSA9PSBaTV9IQUxfODAyMTFfTU9ERV9TVEEpCisgICAgeworI2lmIDAgLy9SZXN0b3JlIENXbWluIHRvIGltcHJvdmUgZG93biBsaW5rIHRocm91Z2hwdXQKKyAgICAgICAgLy9jaGVhdGluZyBpbiBCRSB0cmFmZmljCisgICAgICAgIGlmICh3ZC0+c3RhLkVuYWJsZUhUID09IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vY2hlYXRpbmcgaW4gQkUgdHJhZmZpYworICAgICAgICAgICAgY3dtaW5UYmxbMF0gPSA3Oy8vMTU7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBjd21heFRibFswXSA9IDEyNzsvLzEwMjM7CisgICAgICAgIGFpZnNUYmxbMF0gPSAyKjkrMTA7Ly8zICogOSArIDEwOworICAgIH0KKworICAgIC8qIENXTUlOIGFuZCBDV01BWCAqLworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19BQzBfQ1csIGN3bWluVGJsWzBdCisgICAgICAgICAgICArICgodTMyX3QpY3dtYXhUYmxbMF08PDE2KSk7CisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX0FDMV9DVywgY3dtaW5UYmxbMV0KKyAgICAgICAgICAgICsgKCh1MzJfdCljd21heFRibFsxXTw8MTYpKTsKKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfQUMyX0NXLCBjd21pblRibFsyXQorICAgICAgICAgICAgKyAoKHUzMl90KWN3bWF4VGJsWzJdPDwxNikpOworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19BQzNfQ1csIGN3bWluVGJsWzNdCisgICAgICAgICAgICArICgodTMyX3QpY3dtYXhUYmxbM108PDE2KSk7CisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX0FDNF9DVywgY3dtaW5UYmxbNF0KKyAgICAgICAgICAgICsgKCh1MzJfdCljd21heFRibFs0XTw8MTYpKTsKKworICAgIC8qIEFJRlMgKi8KKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfQUMxX0FDMF9BSUZTLCBhaWZzVGJsWzBdCisgICAgICAgICAgICArKCh1MzJfdClhaWZzVGJsWzBdPDwxMikrKCh1MzJfdClhaWZzVGJsWzBdPDwyNCkpOworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19BQzNfQUMyX0FJRlMsIChhaWZzVGJsWzBdPj44KQorICAgICAgICAgICAgKygodTMyX3QpYWlmc1RibFswXTw8NCkrKCh1MzJfdClhaWZzVGJsWzBdPDwxNikpOworCisgICAgLyogVFhPUCAqLworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19BQzFfQUMwX1RYT1AsIHR4b3BUYmxbMF0KKyAgICAgICAgICAgICsgKCh1MzJfdCl0eG9wVGJsWzFdPDwxNikpOworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19BQzNfQUMyX1RYT1AsIHR4b3BUYmxbMl0KKyAgICAgICAgICAgICsgKCh1MzJfdCl0eG9wVGJsWzNdPDwxNikpOworCisgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKworICAgIGhwUHJpdi0+dHhvcFswXSA9IHR4b3BUYmxbMF07CisgICAgaHBQcml2LT50eG9wWzFdID0gdHhvcFRibFsxXTsKKyAgICBocFByaXYtPnR4b3BbMl0gPSB0eG9wVGJsWzJdOworICAgIGhwUHJpdi0+dHhvcFszXSA9IHR4b3BUYmxbM107CisgICAgaHBQcml2LT5jd21pblswXSA9IGN3bWluVGJsWzBdOworICAgIGhwUHJpdi0+Y3dtYXhbMF0gPSBjd21heFRibFswXTsKKyAgICBocFByaXYtPmN3bWluWzFdID0gY3dtaW5UYmxbMV07CisgICAgaHBQcml2LT5jd21heFsxXSA9IGN3bWF4VGJsWzFdOworCisgICAgcmV0dXJuIDA7Cit9CisKKwordm9pZCB6ZkhwU2V0QXRpbVdpbmRvdyh6ZGV2X3QqIGRldiwgdTE2X3QgYXRpbVdpbikKK3sKKyAgICB6bV9tc2cxX21tKFpNX0xWXzAsICJTZXQgQVRJTSB3aW5kb3cgdG8gIiwgYXRpbVdpbik7CisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX0FUSU1fV0lORE9XLCBhdGltV2luKTsKKyAgICB6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworfQorCisKK3ZvaWQgemZIcFNldEJhc2ljUmF0ZVNldCh6ZGV2X3QqIGRldiwgdTE2X3QgYlJhdGVCYXNpYywgdTE2X3QgZ1JhdGVCYXNpYykKK3sKKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfQkFTSUNfUkFURSwgYlJhdGVCYXNpYworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCh1MTZfdClnUmF0ZUJhc2ljPDw4KSk7CisgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKK30KKworCisvKiBIVDQwIHNlbmQgYnkgT0ZETSA2TSAgICAqLworLyogb3RoZXJ3aXNlIHVzZSByZWcgMHg2MzggKi8KK3ZvaWQgemZIcFNldFJUU0NUU1JhdGUoemRldl90KiBkZXYsIHUzMl90IHJhdGUpCit7CisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX1JUU19DVFNfUkFURSwgcmF0ZSk7CisgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKK30KKwordm9pZCB6ZkhwU2V0TWFjQWRkcmVzcyh6ZGV2X3QqIGRldiwgdTE2X3QqIG1hY0FkZHIsIHUxNl90IG1hY0FkZHJJZCkKK3sKKyAgICBpZiAobWFjQWRkcklkID09IDApCisgICAgeworICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfTUFDX0FERFJfTCwKKyAgICAgICAgICAgICAgICAoKCh1MzJfdCltYWNBZGRyWzFdKTw8MTYpIHwgbWFjQWRkclswXSk7CisgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19NQUNfQUREUl9ILCBtYWNBZGRyWzJdKTsKKyAgICB9CisgICAgZWxzZSBpZiAobWFjQWRkcklkIDw9IDcpCisgICAgeworICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfQUNLX1RBQkxFKygobWFjQWRkcklkLTEpKjgpLAorICAgICAgICAgICAgICAgIG1hY0FkZHJbMF0gKyAoKHUzMl90KW1hY0FkZHJbMV08PDE2KSk7CisgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19BQ0tfVEFCTEUrKChtYWNBZGRySWQtMSkqOCkrNCwKKyAgICAgICAgICAgICAgICBtYWNBZGRyWzJdKTsKKyAgICB9CisgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKK30KKwordm9pZCB6ZkhwU2V0TXVsdGljYXN0TGlzdCh6ZGV2X3QqIGRldiwgdThfdCBzaXplLCB1OF90KiBwTGlzdCwgdThfdCBiQWxsTXVsdGljYXN0KQoreworICAgIHN0cnVjdCB6c011bHRpY2FzdEFkZHIqIHBNYWNMaXN0ID0gKHN0cnVjdCB6c011bHRpY2FzdEFkZHIqKSBwTGlzdDsKKyAgICB1OF90ICAgaTsKKyAgICB1MzJfdCAgdmFsdWU7CisgICAgdTMyX3QgIHN3UmVnTXVsSGFzaFZhbHVlSCwgc3dSZWdNdWxIYXNoVmFsdWVMOworCisgICAgc3dSZWdNdWxIYXNoVmFsdWVIID0gMHg4MDAwMDAwMDsKKyAgICBzd1JlZ011bEhhc2hWYWx1ZUwgPSAwOworCisgICAgaWYgKCBiQWxsTXVsdGljYXN0ICkKKyAgICB7CisgICAgICAgIHN3UmVnTXVsSGFzaFZhbHVlSCA9IHN3UmVnTXVsSGFzaFZhbHVlTCA9IH4wOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IoaT0wOyBpPHNpemU7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdmFsdWUgPSBwTWFjTGlzdFtpXS5hZGRyWzVdID4+IDI7CisKKyAgICAgICAgICAgIGlmICggdmFsdWUgPCAzMiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dSZWdNdWxIYXNoVmFsdWVMIHw9ICgxIDw8IHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd1JlZ011bEhhc2hWYWx1ZUggfD0gKDEgPDwgKHZhbHVlLTMyKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfR1JPVVBfSEFTSF9UQkxfTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd1JlZ011bEhhc2hWYWx1ZUwpOworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19HUk9VUF9IQVNIX1RCTF9ILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3UmVnTXVsSGFzaFZhbHVlSCk7CisgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKyAgICByZXR1cm47Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKiBCZWFjb24gKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHpmSHBFbmFibGVCZWFjb24oemRldl90KiBkZXYsIHUxNl90IG1vZGUsIHUxNl90IGJjbkludGVydmFsLCB1MTZfdCBkdGltLCB1OF90IGVuYWJsZUF0aW0pCit7CisgICAgdTMyX3QgIHZhbHVlOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLyogQmVhY29uIFJlYWR5ICovCisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX0JDTl9DVFJMLCAwKTsKKyAgICAvKiBCZWFjb24gRE1BIGJ1ZmZlciBhZGRyZXNzICovCisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX0JDTl9BRERSLCBaTV9CRUFDT05fQlVGRkVSX0FERFJFU1MpOworCisgICAgdmFsdWUgPSBiY25JbnRlcnZhbDsKKworICAgIHZhbHVlIHw9ICgoKHUzMl90KSBkdGltKSA8PCAxNik7CisKKyAgICBpZiAobW9kZSA9PSBaTV9NT0RFX0FQKQorICAgIHsKKworICAgICAgICB2YWx1ZSB8PSAweDEwMDAwMDA7CisgICAgfQorICAgIGVsc2UgaWYgKG1vZGUgPT0gWk1fTU9ERV9JQlNTKQorICAgIHsKKyAgICAgICAgdmFsdWUgfD0gMHgyMDAwMDAwOworCisJCWlmICggZW5hYmxlQXRpbSApCisJCXsKKwkJCXZhbHVlIHw9IDB4NDAwMDAwMDsKKwkJfQorCQkoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmlic3NCY25FbmFibGVkID0gMTsKKyAgICAgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5pYnNzQmNuSW50ZXJ2YWwgPSB2YWx1ZTsKKyAgICB9CisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX1BSRVRCVFQsIChiY25JbnRlcnZhbC02KTw8MTYpOworCisgICAgLyogQmVhY29uIHBlcmlvZCBhbmQgYmVhY29uIGVuYWJsZSAqLworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19CQ05fUEVSSU9ELCB2YWx1ZSk7CisgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKK30KKwordm9pZCB6ZkhwRGlzYWJsZUJlYWNvbih6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmlic3NCY25FbmFibGVkID0gMDsKKworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19CQ05fUEVSSU9ELCAwKTsKKyAgICB6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworfQorCit2b2lkIHpmSHBMZWRDdHJsKHpkZXZfdCogZGV2LCB1MTZfdCBsZWRJZCwgdThfdCBtb2RlKQoreworICAgIHUxNl90IHN0YXRlOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8vem1fZGVidWdfbXNnMSgiTEVEIElEPSIsIGxlZElkKTsKKyAgICAvL3ptX2RlYnVnX21zZzEoIkxFRCBtb2RlPSIsIG1vZGUpOworICAgIGlmIChsZWRJZCA8IDIpCisgICAgeworICAgICAgICBpZiAoKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5sZWRNb2RlW2xlZElkXSAhPSBtb2RlKQorICAgICAgICB7CisgICAgICAgICAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmxlZE1vZGVbbGVkSWRdID0gbW9kZTsKKworICAgICAgICAgICAgc3RhdGUgPSAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmxlZE1vZGVbMF0KKyAgICAgICAgICAgICAgICAgICAgfCAoKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5sZWRNb2RlWzFdPDwxKTsKKyAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxZDAxMDQsIHN0YXRlKTsKKyAgICAgICAgICAgIHpmRmx1c2hEZWxheVdyaXRlKGRldik7CisgICAgICAgICAgICAvL3ptX2RlYnVnX21zZzAoIlVwZGF0ZSBMRUQiKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmSHBSZXNldFR4UnggICAgICAgICAgICAgICAqLworLyogICAgICBSZXNldCBUeCBhbmQgUnggRGVzYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAwIDogc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgb3RoZXIgOiBmYWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgQ2hhby1XZW4gWWFuZyAgICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNy4zICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UxNl90IHpmSHBVc2JSZXNldCh6ZGV2X3QqIGRldikKK3sKKyAgICB1MzJfdCBjbWRbKFpNX01BWF9DTURfU0laRS80KV07CisgICAgdTE2X3QgcmV0ID0gMDsKKworICAgIC8vem1fZGVidWdfbXNnMCgiQ1dZIC0gUmVzZXQgVHggYW5kIFJ4Iik7CisKKyAgICBjbWRbMF0gPSAgMCB8IChaTV9DTURfUkVTRVQgPDwgOCk7CisKKyAgICByZXQgPSB6Zklzc3VlQ21kKGRldiwgY21kLCA0LCBaTV9PSURfSU5URVJOQUxfV1JJVEUsIE5VTEwpOworICAgIHJldHVybiByZXQ7Cit9CisKK3UxNl90IHpmSHBES1Jlc2V0KHpkZXZfdCogZGV2LCB1OF90IGZsYWcpCit7CisgICAgdTMyX3QgY21kWyhaTV9NQVhfQ01EX1NJWkUvNCldOworICAgIHUxNl90IHJldCA9IDA7CisKKyAgICAvL3ptX2RlYnVnX21zZzAoIkNXWSAtIFJlc2V0IFR4IGFuZCBSeCIpOworCisgICAgY21kWzBdID0gIDQgfCAoWk1fQ01EX0RLUkVTRVQgPDwgOCk7CisgICAgY21kWzFdID0gZmxhZzsKKworICAgIHJldCA9IHpmSXNzdWVDbWQoZGV2LCBjbWQsIDgsIFpNX09JRF9JTlRFUk5BTF9XUklURSwgTlVMTCk7CisgICAgcmV0dXJuIHJldDsKK30KKwordTMyX3QgemZIcEN3bVVwZGF0ZSh6ZGV2X3QqIGRldikKK3sKKyAgICAvL3UzMl90IGNtZFszXTsKKyAgICAvL3UxNl90IHJldDsKKyAgICAvLworICAgIC8vY21kWzBdID0gMHgwMDAwMDAwODsKKyAgICAvL2NtZFsxXSA9IDB4MWMzNmU4OworICAgIC8vY21kWzJdID0gMHgxYzM2ZWM7CisgICAgLy8KKyAgICAvL3JldCA9IHpmSXNzdWVDbWQoZGV2LCBjbWQsIDEyLCBaTV9DV01fUkVBRCwgMCk7CisgICAgLy9yZXR1cm4gcmV0OworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisKKyAgICB6ZkNvcmVDd21CdXN5KGRldiwgemZDd21Jc0V4dENoYW5CdXN5KGhwUHJpdi0+Y3RsQnVzeSwgaHBQcml2LT5leHRCdXN5KSk7CisKKyAgICBocFByaXYtPmN0bEJ1c3kgPSAwOworICAgIGhwUHJpdi0+ZXh0QnVzeSA9IDA7CisKKyAgICByZXR1cm4gMDsKK30KKwordTMyX3QgemZIcEFuaVVwZGF0ZSh6ZGV2X3QqIGRldikKK3sKKyAgICB1MzJfdCBjbWRbNV07CisgICAgdTE2X3QgcmV0OworCisgICAgY21kWzBdID0gMHgwMDAwMDAxMDsKKyAgICBjbWRbMV0gPSAweDFjMzZlODsKKyAgICBjbWRbMl0gPSAweDFjMzZlYzsKKyAgICBjbWRbM10gPSAweDFjM2NiNDsKKyAgICBjbWRbNF0gPSAweDFjM2NiODsKKworICAgIHJldCA9IHpmSXNzdWVDbWQoZGV2LCBjbWQsIDIwLCBaTV9BTklfUkVBRCwgMCk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFVwZGF0ZSBCZWFjb24gUlNTSSBpbiBBTkkKKyAqLwordTMyX3QgemZIcEFuaVVwZGF0ZVJzc2koemRldl90KiBkZXYsIHU4X3QgcnNzaSkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworCisgICAgaHBQcml2LT5zdGF0cy5hc3Rfbm9kZXN0YXRzLm5zX2F2Z2Jyc3NpID0gcnNzaTsKKworICAgIHJldHVybiAwOworfQorCisjZGVmaW5lIFpNX1NFRVBST01fTUFDX0FERFJFU1NfT0ZGU0VUICAgKDB4MTQwMCArICgweDEwNjw8MSkpCisjZGVmaW5lIFpNX1NFRVBST01fUkVHRE9NQUlOX09GRlNFVCAgICgweDE0MDAgKyAoMHgxMDQ8PDEpKQorI2RlZmluZSBaTV9TRUVQUk9NX1ZFUklTT05fT0ZGU0VUICAgKDB4MTQwMCArICgweDEwMjw8MSkpCisjZGVmaW5lIFpNX1NFRVBST01fSEFSRFdBUkVfVFlQRV9PRkZTRVQgICAoMHgxMzc0KQorI2RlZmluZSBaTV9TRUVQUk9NX0hXX0hFQVZZX0NMSVAgICAgICAgICAgKDB4MTYxYykKKwordTMyX3QgemZIcEdldE1hY0FkZHJlc3MoemRldl90KiBkZXYpCit7CisgICAgdTMyX3QgY21kWzddOworICAgIHUxNl90IHJldDsKKworICAgIGNtZFswXSA9IDB4MDAwMDAwMDAgfCAyNDsKKyAgICBjbWRbMV0gPSBaTV9TRUVQUk9NX01BQ19BRERSRVNTX09GRlNFVDsKKyAgICBjbWRbMl0gPSBaTV9TRUVQUk9NX01BQ19BRERSRVNTX09GRlNFVCs0OworICAgIGNtZFszXSA9IFpNX1NFRVBST01fUkVHRE9NQUlOX09GRlNFVDsKKyAgICBjbWRbNF0gPSBaTV9TRUVQUk9NX1ZFUklTT05fT0ZGU0VUOworICAgIGNtZFs1XSA9IFpNX1NFRVBST01fSEFSRFdBUkVfVFlQRV9PRkZTRVQ7CisgICAgY21kWzZdID0gWk1fU0VFUFJPTV9IV19IRUFWWV9DTElQOworCisgICAgcmV0ID0gemZJc3N1ZUNtZChkZXYsIGNtZCwgMjgsIFpNX01BQ19SRUFELCAwKTsKKyAgICByZXR1cm4gcmV0OworfQorCit1MzJfdCB6ZkhwR2V0VHJhbnNtaXRQb3dlcih6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBzdHJ1Y3QgenNIcFByaXYqICAgIGhwUHJpdiAgPSB3ZC0+aHBQcml2YXRlOworICAgIHUxNl90ICAgICAgICAgICAgICAgdHBjICAgICA9IDA7CisKKyAgICBpZiAoaHBQcml2LT5od0ZyZXF1ZW5jeSA8IDMwMDApIHsKKyAgICAgICAgdHBjID0gaHBQcml2LT50UG93MngyZ1swXSAmIDB4M2Y7CisgICAgICAgIHdkLT5tYXhUeFBvd2VyMiAmPSAweDNmOworICAgICAgICB0cGMgPSAodHBjID4gd2QtPm1heFR4UG93ZXIyKT8gd2QtPm1heFR4UG93ZXIyIDogdHBjOworICAgIH0gZWxzZSB7CisgICAgICAgIHRwYyA9IGhwUHJpdi0+dFBvdzJ4NWdbMF0gJiAweDNmOworICAgICAgICB3ZC0+bWF4VHhQb3dlcjUgJj0gMHgzZjsKKyAgICAgICAgdHBjID0gKHRwYyA+IHdkLT5tYXhUeFBvd2VyNSk/IHdkLT5tYXhUeFBvd2VyNSA6IHRwYzsKKyAgICB9CisKKyAgICByZXR1cm4gdHBjOworfQorCit1OF90IHpmSHBHZXRNaW5UeFBvd2VyKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHN0cnVjdCB6c0hwUHJpdiogICAgaHBQcml2ICA9IHdkLT5ocFByaXZhdGU7CisgICAgdThfdCAgICAgICAgICAgICAgIHRwYyAgICAgPSAwOworCisgICAgaWYgKGhwUHJpdi0+aHdGcmVxdWVuY3kgPCAzMDAwKQorICAgIHsKKyAgICAgICAgaWYod2QtPkJhbmRXaWR0aDQwKQorICAgICAgICB7CisgICAgICAgICAgICAvLzQwTQorICAgICAgICAgICAgdHBjID0gKGhwUHJpdi0+dFBvdzJ4MmdIdDQwWzddJjB4M2YpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8yME0KKyAgICAgICAgICAgIHRwYyA9IChocFByaXYtPnRQb3cyeDJnSHQyMFs3XSYweDNmKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZih3ZC0+QmFuZFdpZHRoNDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vNDBNCisgICAgICAgICAgICB0cGMgPSAoaHBQcml2LT50UG93Mng1Z0h0NDBbN10mMHgzZik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLzIwTQorICAgICAgICAgICAgdHBjID0gKGhwUHJpdi0+dFBvdzJ4NWdIdDIwWzddJjB4M2YpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRwYzsKK30KKwordThfdCB6ZkhwR2V0TWF4VHhQb3dlcih6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBzdHJ1Y3QgenNIcFByaXYqICAgIGhwUHJpdiAgPSB3ZC0+aHBQcml2YXRlOworICAgIHU4X3QgICAgICAgICAgICAgICB0cGMgICAgID0gMDsKKworICAgIGlmIChocFByaXYtPmh3RnJlcXVlbmN5IDwgMzAwMCkKKyAgICB7CisgICAgICAgIHRwYyA9IChocFByaXYtPnRQb3cyeENja1swXSYweDNmKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdHBjID0oaHBQcml2LT50UG93Mng1Z1swXSYweDNmKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHBjOworfQorCit1MzJfdCB6ZkhwTG9hZEVFUFJPTUZyb21GVyh6ZGV2X3QqIGRldikKK3sKKyAgICB1MzJfdCBjbWRbMTZdOworICAgIHUzMl90IHJldD0wLCBpLCBqOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGkgPSAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmVlcHJvbUltYWdlUmRSZXE7CisKKyAgICBjbWRbMF0gPSBaTV9IQUxfTUFYX0VFUFJPTV9QUlEqNDsKKworICAgIGZvciAoaj0wOyBqPFpNX0hBTF9NQVhfRUVQUk9NX1BSUTsgaisrKQorICAgIHsKKyAgICAgICAgY21kW2orMV0gPSAweDEwMDAgKyAoKChpKlpNX0hBTF9NQVhfRUVQUk9NX1BSUSkgKyBqKSo0KTsKKyAgICB9CisKKyAgICByZXQgPSB6Zklzc3VlQ21kKGRldiwgY21kLCAoWk1fSEFMX01BWF9FRVBST01fUFJRKzEpKjQsIFpNX0VFUFJPTV9SRUFELCAwKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgemZIcEhlYXJ0QmVhdCh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICB1OF90IHBvbGx1dGVkID0gMDsKKyAgICB1OF90IGFja1RwYzsKKworICAgIC8qIFdvcmthcm91bmQgOiBNYWtlIE9UVVMgZmlyZSBtb3JlIGJlYWNvbiBpbiBhZCBob2MgbW9kZSBpbiAyLjRHSHogKi8KKyAgICBpZiAoaHBQcml2LT5pYnNzQmNuRW5hYmxlZCAhPSAwKQorICAgIHsKKyAgICAgICAgaWYgKGhwUHJpdi0+aHdGcmVxdWVuY3kgPD0gWk1fQ0hfR18xNCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCh3ZC0+dGljayAlIDEwKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgod2QtPnRpY2sgJSA0MCkgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19CQ05fUEVSSU9ELCBocFByaXYtPmlic3NCY25JbnRlcnZhbC0xKTsKKyAgICAgICAgICAgICAgICAgICAgcG9sbHV0ZWQgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfQkNOX1BFUklPRCwgaHBQcml2LT5pYnNzQmNuSW50ZXJ2YWwpOworICAgICAgICAgICAgICAgICAgICBwb2xsdXRlZCA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCh3ZC0+dGljayAmIDB4M2YpID09IDB4MjUpCisgICAgeworICAgICAgICAvKiBXb3JrYXJvdW5kIGZvciBiZWFjb24gc3R1Y2sgYWZ0ZXIgU1cgcmVzZXQgKi8KKyAgICAgICAgaWYgKGhwUHJpdi0+aWJzc0JjbkVuYWJsZWQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX0JDTl9BRERSLCBaTV9CRUFDT05fQlVGRkVSX0FERFJFU1MpOworICAgICAgICAgICAgcG9sbHV0ZWQgPSAxOworICAgICAgICB9CisKKyAgICAgICAgLy9EYmdQcmludCgiaHBQcml2LT5hZ2dNYXhEdXJhdGlvbkJFPSVkIiwgaHBQcml2LT5hZ2dNYXhEdXJhdGlvbkJFKTsKKyAgICAgICAgLy9EYmdQcmludCgid2QtPnN0YS5hdmdTaXplT2ZSZWNlaXZlUGFja2V0cz0lZCIsIHdkLT5zdGEuYXZnU2l6ZU9mUmVjZWl2ZVBhY2tldHMpOworICAgICAgICBpZiAoKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSApCisgICAgICAgICAgICAmJiAoemZTdGFJc0Nvbm5lY3RlZChkZXYpKQorICAgICAgICAgICAgJiYgKHdkLT5zdGEuRW5hYmxlSFQgPT0gMSkgLy8xMW4gbW9kZQorICAgICAgICAgICAgJiYgKHdkLT5CYW5kV2lkdGg0MCA9PSAxKSAvLzQwTUh6IG1vZGUKKyAgICAgICAgICAgICYmICh3ZC0+c3RhLmVuYWJsZURydkJBID09MCkgLy9NYXJ2ZWwgQVAKKyAgICAgICAgICAgICYmIChocFByaXYtPmFnZ01heER1cmF0aW9uQkUgPiAyMDAwKSAvL0JFIFRYT1AgPiAybXMKKyAgICAgICAgICAgICYmICh3ZC0+c3RhLmF2Z1NpemVPZlJlY2VpdmVQYWNrZXRzID4gMTQyMCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzNiOWMsIDB4ODAwMGEpOworICAgICAgICAgICAgcG9sbHV0ZWQgPSAxOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFjM2I5YywgaHBQcml2LT5hZ2dQa3ROdW0pOworICAgICAgICAgICAgcG9sbHV0ZWQgPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdkLT5keW5hbWljU0lGU0VuYWJsZSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSApCisgICAgICAgICAgICAgICAgJiYgKHpmU3RhSXNDb25uZWN0ZWQoZGV2KSkKKyAgICAgICAgICAgICAgICAmJiAod2QtPnN0YS5FbmFibGVIVCA9PSAxKSAvLzExbiBtb2RlCisgICAgICAgICAgICAgICAgJiYgKHdkLT5CYW5kV2lkdGg0MCA9PSAwKSAvLzIwTUh6IG1vZGUKKyAgICAgICAgICAgICAgICAmJiAod2QtPnN0YS5lbmFibGVEcnZCQSA9PTApKSAvL01hcnZlbCBBUAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzM2OTgsIDB4NTE0NDAwMCk7CisgICAgICAgICAgICAgICAgcG9sbHV0ZWQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzM2OTgsIDB4QTE0NDAwMCk7CisgICAgICAgICAgICAgICAgcG9sbHV0ZWQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCggd2QtPndsYW5Nb2RlID09IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUgKQorICAgICAgICAgICAgICAgICYmICh6ZlN0YUlzQ29ubmVjdGVkKGRldikpCisgICAgICAgICAgICAgICAgJiYgKHdkLT5zdGEuRW5hYmxlSFQgPT0gMSkgLy8xMW4gbW9kZQorICAgICAgICAgICAgICAgICYmICh3ZC0+c3RhLmF0aE93bEFwID09IDEpKSAvL0F0aGVyb3MgQVAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaHBQcml2LT5yZXRyYW5zbWlzc2lvbkV2ZW50KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKGhwUHJpdi0+bGF0ZXN0U0lGUykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgICAgICBocFByaXYtPmxhdGVzdFNJRlMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX0VJRlNfQU5EX1NJRlMsIDB4ODE0NDAwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgaHBQcml2LT5sYXRlc3RTSUZTID0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19FSUZTX0FORF9TSUZTLCAweGExNDQwMDApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGhwUHJpdi0+bGF0ZXN0U0lGUyA9IDM7CisgICAgICAgICAgICAgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfRUlGU19BTkRfU0lGUywgMHhjMTQ0MDAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICBocFByaXYtPmxhdGVzdFNJRlMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX0VJRlNfQU5EX1NJRlMsIDB4YTE0NDAwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGhwUHJpdi0+bGF0ZXN0U0lGUyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfRUlGU19BTkRfU0lGUywgMHhhMTQ0MDAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBvbGx1dGVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiIyMjIyMgQ29ycmVjdCBUeCByZXRyYW5zbWlzc2lvbiBpc3N1ZSAjIyMjIywgIiwgaHBQcml2LT5sYXRlc3RTSUZTKTsKKyAgICAgICAgICAgICAgICAgICAgaHBQcml2LT5yZXRyYW5zbWlzc2lvbkV2ZW50ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaHBQcml2LT5sYXRlc3RTSUZTID0gMDsKKyAgICAgICAgICAgICAgICBocFByaXYtPnJldHJhbnNtaXNzaW9uRXZlbnQgPSAwOworICAgICAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzM2OTgsIDB4QTE0NDAwMCk7CisgICAgICAgICAgICAgICAgcG9sbHV0ZWQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCh3ZC0+c3RhLmJTY2hlZHVsZVNjYW4gPT0gRkFMU0UpICYmICh3ZC0+c3RhLmJDaGFubmVsU2NhbiA9PSBGQUxTRSkpCisgICAgICAgIHsKKyNkZWZpbmUgWk1fU0lHTkFMX1RIUkVTSE9MRCAgNjYKKyAgICAgICAgaWYgKCggd2QtPndsYW5Nb2RlID09IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUgKQorICAgICAgICAgICAgJiYgKHpmU3RhSXNDb25uZWN0ZWQoZGV2KSkKKyAgICAgICAgICAgICYmICh3ZC0+U2lnbmFsU3RyZW5ndGggPiBaTV9TSUdOQUxfVEhSRVNIT0xEKSkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIHJlbW92ZSBzdGF0ZSBoYW5kbGUsIGFsd2F5cyByZXdyaXRlIHJlZ2lzdGVyIHNldHRpbmcgKi8KKyAgICAgICAgICAgICAgICAvL2lmIChocFByaXYtPnN0cm9uZ1JTU0kgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBocFByaXYtPnN0cm9uZ1JTU0kgPSAxOworICAgICAgICAgICAgICAgIC8qIFN0cm9uZyBSU1NJLCBzZXQgQUNLIHRvIG9uZSBUeCBzdHJlYW0gYW5kIGxvd2VyIFR4IHBvd2VyIDdkYm0gKi8KKyAgICAgICAgICAgICAgICBpZiAoaHBQcml2LT5jdXJyZW50QWNrUnRzVHBjID4gKDE0KzEwKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFja1RwYyA9IGhwUHJpdi0+Y3VycmVudEFja1J0c1RwYyAtIDE0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhY2tUcGMgPSAxMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFjMzY5NCwgKChhY2tUcGMpIDw8IDIwKSB8ICgweDE8PDI2KSk7CisgICAgICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFjM2JiNCwgKChhY2tUcGMpIDw8IDUgKSB8ICgweDE8PDExKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhY2tUcGMpIDw8IDIxKSB8ICgweDE8PDI3KSAgKTsKKyAgICAgICAgICAgICAgICBwb2xsdXRlZCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogcmVtb3ZlIHN0YXRlIGhhbmRsZSwgYWx3YXlzIHJld3JpdGUgcmVnaXN0ZXIgc2V0dGluZyAqLworICAgICAgICAgICAgICAgIC8vaWYgKGhwUHJpdi0+c3Ryb25nUlNTSSA9PSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhwUHJpdi0+c3Ryb25nUlNTSSA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGhwUHJpdi0+aGFsQ2FwYWJpbGl0eSAmIFpNX0hQX0NBUF8xMU5fT05FX1RYX1NUUkVBTSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzM2OTQsICgoaHBQcml2LT5jdXJyZW50QWNrUnRzVHBjJjB4M2YpIDw8IDIwKSB8ICgweDE8PDI2KSk7CisgICAgICAgICAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzNiYjQsICgoaHBQcml2LT5jdXJyZW50QWNrUnRzVHBjJjB4M2YpIDw8IDUgKSB8ICgweDE8PDExKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChocFByaXYtPmN1cnJlbnRBY2tSdHNUcGMmMHgzZikgPDwgMjEpIHwgKDB4MTw8MjcpICApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWMzNjk0LCAoKGhwUHJpdi0+Y3VycmVudEFja1J0c1RwYyYweDNmKSA8PCAyMCkgfCAoMHg1PDwyNikpOworICAgICAgICAgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWMzYmI0LCAoKGhwUHJpdi0+Y3VycmVudEFja1J0c1RwYyYweDNmKSA8PCA1ICkgfCAoMHg1PDwxMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaHBQcml2LT5jdXJyZW50QWNrUnRzVHBjJjB4M2YpIDw8IDIxKSB8ICgweDU8PDI3KSAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcG9sbHV0ZWQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisjdW5kZWYgWk1fU0lHTkFMX1RIUkVTSE9MRAorICAgICAgICB9CisKKyAgICAgICAgaWYgKChocFByaXYtPmhhbENhcGFiaWxpdHkgJiBaTV9IUF9DQVBfMTFOX09ORV9UWF9TVFJFQU0pID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgod2QtPnN0YS5iU2NoZWR1bGVTY2FuID09IEZBTFNFKSAmJiAod2QtPnN0YS5iQ2hhbm5lbFNjYW4gPT0gRkFMU0UpKQorICAgICAgICAgICAgeworICAgICNkZWZpbmUgWk1fUlhfU0lHTkFMX1RIUkVTSE9MRF9IICA3MQorICAgICNkZWZpbmUgWk1fUlhfU0lHTkFMX1RIUkVTSE9MRF9MICA2NgorICAgICAgICAgICAgICAgIHU4X3QgcnhTaWduYWxUaHJlc2hvbGRIID0gWk1fUlhfU0lHTkFMX1RIUkVTSE9MRF9IOworICAgICAgICAgICAgICAgIHU4X3QgcnhTaWduYWxUaHJlc2hvbGRMID0gWk1fUlhfU0lHTkFMX1RIUkVTSE9MRF9MOworICAgICN1bmRlZiBaTV9SWF9TSUdOQUxfVEhSRVNIT0xEX0gKKyAgICAjdW5kZWYgWk1fUlhfU0lHTkFMX1RIUkVTSE9MRF9MCisKKyAgICAgICAgICAgICAgICBpZiAoKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSApCisgICAgICAgICAgICAgICAgICAgICYmICh6ZlN0YUlzQ29ubmVjdGVkKGRldikpCisgICAgICAgICAgICAgICAgICAgICYmICh3ZC0+U2lnbmFsU3RyZW5ndGggPiByeFNpZ25hbFRocmVzaG9sZEgpCisgICAgICAgICAgICAgICAgICAgICkvLyYmIChocFByaXYtPnJ4U3Ryb25nUlNTSSA9PSAwKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGhwUHJpdi0+cnhTdHJvbmdSU1NJID0gMTsKKyAgICAgICAgICAgICAgICAgICAgLy96ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWM1OTY0LCAweDEyMjApOworICAgICAgICAgICAgICAgICAgICAvL3pmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzU5NjAsIDB4OTAwKTsKKyAgICAgICAgICAgICAgICAgICAgLy96ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWM2OTYwLCAweDkwMCk7CisgICAgICAgICAgICAgICAgICAgIC8vemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFjNzk2MCwgMHg5MDApOworICAgICAgICAgICAgICAgICAgICBpZiAoKGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgxMDArMHgxMTAqMi80XSYweGZmKSA9PSAweDgwKSAvL0ZFTSBUWVBFCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChocFByaXYtPmh3RnJlcXVlbmN5IDw9IFpNX0NIX0dfMTQpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFjODk2MCwgMHg5MDApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzg5NjAsIDB4OWI0OSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWM4OTYwLCAweDA5MDApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBvbGx1dGVkID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKCB3ZC0+d2xhbk1vZGUgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSApCisgICAgICAgICAgICAgICAgICAgICYmICh6ZlN0YUlzQ29ubmVjdGVkKGRldikpCisgICAgICAgICAgICAgICAgICAgICYmICh3ZC0+U2lnbmFsU3RyZW5ndGggPiByeFNpZ25hbFRocmVzaG9sZEwpCisgICAgICAgICAgICAgICAgICAgICkvLyYmIChocFByaXYtPnJ4U3Ryb25nUlNTSSA9PSAxKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vRG8gbm90aGluZyB0byBwcmV2ZW50IGZyZXF1ZW50bHkgUnggc3dpdGNoaW5nCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIHJlbW92ZSBzdGF0ZSBoYW5kbGUsIGFsd2F5cyByZXdyaXRlIHJlZ2lzdGVyIHNldHRpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgLy9pZiAoaHBQcml2LT5yeFN0cm9uZ1JTU0kgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaHBQcml2LT5yeFN0cm9uZ1JTU0kgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgLy96ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWM1OTY0LCAweDExMjApOworICAgICAgICAgICAgICAgICAgICAgICAgLy96ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWM1OTYwLCAweDliNDApOworICAgICAgICAgICAgICAgICAgICAgICAgLy96ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWM2OTYwLCAweDliNDApOworICAgICAgICAgICAgICAgICAgICAgICAgLy96ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWM3OTYwLCAweDliNDApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTEwKjIvNF0mMHhmZikgPT0gMHg4MCkgLy9GRU0gVFlQRQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChocFByaXYtPmh3RnJlcXVlbmN5IDw9IFpNX0NIX0dfMTQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWM4OTYwLCAweDliNDkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWM4OTYwLCAweDA5MDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWM4OTYwLCAweDliNDApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcG9sbHV0ZWQgPSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaHBQcml2LT51c2JBY1NlbmRCeXRlc1szXSA+IChocFByaXYtPnVzYkFjU2VuZEJ5dGVzWzBdKjIpKQorICAgICAgICB7CisgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfQUMxX0FDMF9UWE9QLCBocFByaXYtPnR4b3BbM10pOworICAgICAgICAgICAgcG9sbHV0ZWQgPSAxOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGhwUHJpdi0+dXNiQWNTZW5kQnl0ZXNbMl0gPiAoaHBQcml2LT51c2JBY1NlbmRCeXRlc1swXSoyKSkKKyAgICAgICAgeworICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX0FDMV9BQzBfVFhPUCwgaHBQcml2LT50eG9wWzJdKTsKKyAgICAgICAgICAgIHBvbGx1dGVkID0gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChocFByaXYtPnVzYkFjU2VuZEJ5dGVzWzFdID4gKGhwUHJpdi0+dXNiQWNTZW5kQnl0ZXNbMF0qMikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19BQzBfQ1csIGhwUHJpdi0+Y3dtaW5bMV0rKCh1MzJfdClocFByaXYtPmN3bWF4WzFdPDwxNikpOworICAgICAgICAgICAgcG9sbHV0ZWQgPSAxOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGhwUHJpdi0+c2xvdFR5cGUgPT0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKHdkLT5zdGEuZW5hYmxlRHJ2QkEgPT0wKSAvL01hcnZlbCBBUAorICAgICAgICAgICAgICAgICAgICYmIChocFByaXYtPmFnZ01heER1cmF0aW9uQkUgPiAyMDAwKSkgLy9CRSBUWE9QID4gMm1zCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfQUMwX0NXLCAoaHBQcml2LT5jd21pblswXS8yKSsoKHUzMl90KWhwUHJpdi0+Y3dtYXhbMF08PDE2KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19BQzBfQ1csIGhwUHJpdi0+Y3dtaW5bMF0rKCh1MzJfdClocFByaXYtPmN3bWF4WzBdPDwxNikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwb2xsdXRlZCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogQ29tcGVuc2F0aW9uIGZvciAyMHVzIHNsb3QgdGltZSAqLworICAgICAgICAgICAgICAgIC8vemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX0FDMF9DVywgNTgrKCh1MzJfdClocFByaXYtPmN3bWF4WzBdPDwxNikpOworICAgICAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19BQzBfQ1csIGhwUHJpdi0+Y3dtaW5bMF0rKCh1MzJfdClocFByaXYtPmN3bWF4WzBdPDwxNikpOworICAgICAgICAgICAgICAgIHBvbGx1dGVkID0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCh3ZC0+c3RhLlNXRW5jcnlwdEVuYWJsZSAmIChaTV9TV19US0lQX0VOQ1JZX0VOfFpNX1NXX1dFUF9FTkNSWV9FTikpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX0FDMV9BQzBfVFhPUCwgaHBQcml2LT50eG9wWzBdKTsKKyAgICAgICAgICAgICAgICBwb2xsdXRlZCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX0FDMV9BQzBfVFhPUCwgMHgzMCk7CisgICAgICAgICAgICAgICAgcG9sbHV0ZWQgPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICAgICAgaHBQcml2LT51c2JBY1NlbmRCeXRlc1szXSA9IDA7CisgICAgICAgIGhwUHJpdi0+dXNiQWNTZW5kQnl0ZXNbMl0gPSAwOworICAgICAgICBocFByaXYtPnVzYkFjU2VuZEJ5dGVzWzFdID0gMDsKKyAgICAgICAgaHBQcml2LT51c2JBY1NlbmRCeXRlc1swXSA9IDA7CisgICAgfQorCisgICAgaWYgKHBvbGx1dGVkID09IDEpCisgICAgeworICAgICAgICB6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworICAgIH0KKworICAgIHJldHVybjsKK30KKworLyoKKyAqICAweDFkNDAwOCA6IEFIQiwgREFDLCBBREMgY2xvY2sgc2VsZWN0aW9uCisgKiAgICAgICAgICAgICBiaXQxfjAgIEFIQl9DTEsgOiBBSEIgY2xvY2sgc2VsZWN0aW9uLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAgOiBPU0MgNDBNSHo7CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMSA6IDIwTUh6IGluIEEgbW9kZSwgMjJNSHogaW4gRyBtb2RlOworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgOiA0ME1IeiBpbiBBIG1vZGUsIDQ0TUh6IGluIEcgbW9kZTsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExIDogODBNSHogaW4gQSBtb2RlLCA4OE1IeiBpbiBHIG1vZGUuCisgKiAgICAgICAgICAgICBiaXQzfjIgIENMS19TRUwgOiBTZWxlY3QgdGhlIGNsb2NrIHNvdXJjZSBvZiBjbGsxNjAgaW4gQUREQUMuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMCA6IFBMTCBkaXZpZGVyJ3Mgb3V0cHV0OworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDEgOiBQTEwgZGl2aWRlcidzIG91dHB1dCBkaXZpZGVkIGJ5IDI7CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCA6IFBMTCBkaXZpZGVyJ3Mgb3V0cHV0IGRpdmlkZWQgYnkgNDsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExIDogUkVGQ0xLIGZyb20gWFRBTE9TQ1BBRC4KKyAqLwordm9pZCB6ZlNlbEFkY0Nsayh6ZGV2X3QqIGRldiwgdThfdCBidzQwLCB1MzJfdCBmcmVxdWVuY3kpCit7CisgICAgaWYoYnc0MCA9PSAxKQorICAgIHsKKyAgICAgICAgLy96ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MUQ0MDA4LCAweDczKTsKKyAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX0RZTkFNSUNfU0lGU19BQ0ssIDB4MTBBKTsKKyAgICAgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy96ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MUQ0MDA4LCAweDcwKTsKKyAgICAgICAgaWYgKCBmcmVxdWVuY3kgPD0gWk1fQ0hfR18xNCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19EWU5BTUlDX1NJRlNfQUNLLCAweDEwNSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfRFlOQU1JQ19TSUZTX0FDSywgMHgxMDQpOworICAgICAgICB9CisgICAgICAgIHpmRmx1c2hEZWxheVdyaXRlKGRldik7CisgICAgfQorfQorCit1MzJfdCB6ZkhwRWNob0NvbW1hbmQoemRldl90KiBkZXYsIHUzMl90IHZhbHVlKQoreworICAgIHUzMl90IGNtZFsyXTsKKyAgICB1MTZfdCByZXQ7CisKKyAgICBjbWRbMF0gPSAweDAwMDA4MDA0OworICAgIGNtZFsxXSA9IHZhbHVlOworCisgICAgcmV0ID0gemZJc3N1ZUNtZChkZXYsIGNtZCwgOCwgWk1fQ01EX0VDSE8sIE5VTEwpOworICAgIHJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBaTV9EUlZfSU5JVF9VU0JfTU9ERQorCisjZGVmaW5lIFpNX1VTQl9VU19TVFJFQU1fTU9ERSAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgWk1fVVNCX1VTX1BBQ0tFVF9NT0RFICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBaTV9VU0JfRFNfRU5BQkxFICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFpNX1VTQl9VU19FTkFCTEUgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKworI2RlZmluZSBaTV9VU0JfUlhfU1RSRUFNXzRLICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFpNX1VTQl9SWF9TVFJFQU1fOEsgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgWk1fVVNCX1JYX1NUUkVBTV8xNksgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBaTV9VU0JfUlhfU1RSRUFNXzMySyAgICAgICAgICAgICAgICAweDAwMDAwMDMwCisKKyNkZWZpbmUgWk1fVVNCX1RYX1NUUkVBTV9NT0RFICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorCisjZGVmaW5lIFpNX1VTQl9NT0RFX0NUUkxfUkVHICAgICAgICAgICAgICAgIDB4MDAxRTExMDgKKwordm9pZCB6ZkluaXRVc2JNb2RlKHpkZXZfdCogZGV2KQoreworICAgIHUzMl90IG1vZGU7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgLyogVE9ETzogU2V0IFVTQiBtb2RlIGJ5IHJlYWRpbmcgcmVnaXN0ZXJ5ICovCisgICAgbW9kZSA9IFpNX1VTQl9EU19FTkFCTEUgfCBaTV9VU0JfVVNfRU5BQkxFIHwgWk1fVVNCX1VTX1BBQ0tFVF9NT0RFOworCisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9VU0JfTU9ERV9DVFJMX1JFRywgbW9kZSk7CisgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKK30KKyNlbmRpZgorCit2b2lkIHpmRHVtcEVlcEJhbmRFZGdlcyhzdHJ1Y3QgYXI1NDE2RWVwcm9tKiBlZXByb21JbWFnZSk7Cit2b2lkIHpmUHJpbnRUYXJnZXRQb3dlcjJHKHU4X3QqIHRQb3cyeENjaywgdThfdCogdFBvdzJ4MmcsIHU4X3QqIHRQb3cyeDJnSHQyMCwgdThfdCogdFBvdzJ4MmdIdDQwKTsKK3ZvaWQgemZQcmludFRhcmdldFBvd2VyNUcodThfdCogdFBvdzJ4NWcsIHU4X3QqIHRQb3cyeDVnSHQyMCwgdThfdCogdFBvdzJ4NWdIdDQwKTsKKworCitzMzJfdCB6ZkludGVycG9sYXRlRnVuYyhzMzJfdCB4LCBzMzJfdCB4MSwgczMyX3QgeTEsIHMzMl90IHgyLCBzMzJfdCB5MikKK3sKKyAgICBzMzJfdCB5OworCisgICAgaWYgKHkyID09IHkxKQorICAgIHsKKyAgICAgICAgeSA9IHkxOworICAgIH0KKyAgICBlbHNlIGlmICh4ID09IHgxKQorICAgIHsKKyAgICAgICAgeSA9IHkxOworICAgIH0KKyAgICBlbHNlIGlmICh4ID09IHgyKQorICAgIHsKKyAgICAgICAgeSA9IHkyOworICAgIH0KKyAgICBlbHNlIGlmICh4MiAhPSB4MSkKKyAgICB7CisgICAgICAgIHkgPSB5MSArICgoKHkyLXkxKSAqICh4LXgxKSkvKHgyLXgxKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHkgPSB5MTsKKyAgICB9CisKKyAgICByZXR1cm4geTsKK30KKworLy8jZGVmaW5lIFpNX0VOQUJMRV9UUENfV0lORE9XU19ERUJVRworLy8jZGVmaW5lIFpNX0VOQUJMRV9CQU5ERURHRVNfV0lORE9XU19ERUJVRworCisvKiB0aGUgdHggcG93ZXIgb2Zmc2V0IHdvcmthcm91bmQgZm9yIEFSVCB2cyBORElTL01ESyAqLworI2RlZmluZSBIQUxUWF9QT1dFUl9PRkZTRVQgICAgICAwCisKK3U4X3QgemZJbnRlcnBvbGF0ZUZ1bmNYKHU4X3QgeCwgdThfdCB4MSwgdThfdCB5MSwgdThfdCB4MiwgdThfdCB5MikKK3sKKyAgICBzMzJfdCB5OworICAgIHMzMl90IGluYzsKKworICAgICNkZWZpbmUgWk1fTVVMVElQTElFUiAgIDgKKyAgICB5ID0gemZJbnRlcnBvbGF0ZUZ1bmMoKHMzMl90KXg8PFpNX01VTFRJUExJRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzMzJfdCl4MTw8Wk1fTVVMVElQTElFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHMzMl90KXkxPDxaTV9NVUxUSVBMSUVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoczMyX3QpeDI8PFpNX01VTFRJUExJRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzMzJfdCl5Mjw8Wk1fTVVMVElQTElFUik7CisKKyAgICBpbmMgPSAoeSAmICgxPDwoWk1fTVVMVElQTElFUi0xKSkpID4+IChaTV9NVUxUSVBMSUVSLTEpOworICAgIHkgPSAoeSA+PiBaTV9NVUxUSVBMSUVSKSArIGluYzsKKyAgICAjdW5kZWYgWk1fTVVMVElQTElFUgorCisgICAgcmV0dXJuICh1OF90KXk7Cit9CisKK3U4X3QgemZHZXRJbnRlcnBvbGF0ZWRWYWx1ZSh1OF90IHgsIHU4X3QqIHhfYXJyYXksIHU4X3QqIHlfYXJyYXkpCit7CisgICAgczMyX3QgeTsKKyAgICB1MTZfdCB4SW5kZXg7CisKKyAgICBpZiAoeCA8PSB4X2FycmF5WzFdKQorICAgIHsKKyAgICAgICAgeEluZGV4ID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoeCA8PSB4X2FycmF5WzJdKQorICAgIHsKKyAgICAgICAgeEluZGV4ID0gMTsKKyAgICB9CisgICAgZWxzZSBpZiAoeCA8PSB4X2FycmF5WzNdKQorICAgIHsKKyAgICAgICAgeEluZGV4ID0gMjsKKyAgICB9CisgICAgZWxzZSAvLyh4ID4geF9hcnJheVszXSkKKyAgICB7CisgICAgICAgIHhJbmRleCA9IDM7CisgICAgfQorCisgICAgeSA9IHpmSW50ZXJwb2xhdGVGdW5jWCh4LAorICAgICAgICAgICAgeF9hcnJheVt4SW5kZXhdLAorICAgICAgICAgICAgeV9hcnJheVt4SW5kZXhdLAorICAgICAgICAgICAgeF9hcnJheVt4SW5kZXgrMV0sCisgICAgICAgICAgICB5X2FycmF5W3hJbmRleCsxXSk7CisKKyAgICByZXR1cm4gKHU4X3QpeTsKK30KKwordThfdCB6ZkZpbmRGcmVxSW5kZXgodThfdCBmLCB1OF90KiBmQXJyYXksIHU4X3QgZkFycmF5U2l6ZSkKK3sKKyAgICB1OF90IGk7CisjaWZkZWYgWk1fRU5BQkxFX1RQQ19XSU5ET1dTX0RFQlVHCisgICAgRGJnUHJpbnQoImY9JWQgIiwgZik7CisgICAgZm9yIChpPTA7IGk8ZkFycmF5U2l6ZTsgaSsrKQorICAgIHsKKyAgICAgICAgRGJnUHJpbnQoIiVkICIsIGZBcnJheVtpXSk7CisgICAgfQorICAgIERiZ1ByaW50KCJcbiIpOworI2VuZGlmCisgICAgaT1mQXJyYXlTaXplLTI7CisgICAgd2hpbGUoMSkKKyAgICB7CisgICAgICAgIGlmIChmID49IGZBcnJheVtpXSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkhPTApCisgICAgICAgIHsKKyAgICAgICAgICAgIGktLTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorfQorCisKKworCit2b2lkIHpmSW5pdFBvd2VyQ2FsKHpkZXZfdCogZGV2KQoreworICAgIC8vUHJvZ3JhbSBQSFkgVHggcG93ZXIgcmVsYXRpdmVzIHJlZ2lzdGVycworI2RlZmluZSB6bV93cml0ZV9waHlfcmVnKGNyLCB2YWwpIHJlZ193cml0ZSgoY3IqNCkrMHg5ODAwLCB2YWwpCisKKyAgICB6bV93cml0ZV9waHlfcmVnKDc5LCAweDdmKTsKKyAgICB6bV93cml0ZV9waHlfcmVnKDc3LCAweDNmM2YzZjNmKTsKKyAgICB6bV93cml0ZV9waHlfcmVnKDc4LCAweDNmM2YzZjNmKTsKKyAgICB6bV93cml0ZV9waHlfcmVnKDY1MywgMHgzZjNmM2YzZik7CisgICAgem1fd3JpdGVfcGh5X3JlZyg2NTQsIDB4M2YzZjNmM2YpOworICAgIHptX3dyaXRlX3BoeV9yZWcoNzM5LCAweDNmM2YzZjNmKTsKKyAgICB6bV93cml0ZV9waHlfcmVnKDc0MCwgMHgzZjNmM2YzZik7CisgICAgem1fd3JpdGVfcGh5X3JlZyg3NTUsIDB4M2YzZjNmM2YpOworICAgIHptX3dyaXRlX3BoeV9yZWcoNzU2LCAweDNmM2YzZjNmKTsKKyAgICB6bV93cml0ZV9waHlfcmVnKDc1NywgMHgzZjNmM2YzZik7CisKKyN1bmRlZiB6bV93cml0ZV9waHlfcmVnCit9CisKKworCit2b2lkIHpmUHJpbnRUcCh1OF90KiBwd3IwLCB1OF90KiB2cGQwLCB1OF90KiBwd3IxLCB1OF90KiB2cGQxKQoreworICAgICNpZmRlZiBaTV9FTkFCTEVfVFBDX1dJTkRPV1NfREVCVUcKKyAgICBEYmdQcmludCgicHdyMCA6ICVkLCAlZCwgJWQsICVkICwlZFxuIiwgcHdyMFswXSwgcHdyMFsxXSwgcHdyMFsyXSwgcHdyMFszXSwgcHdyMFs0XSk7CisgICAgRGJnUHJpbnQoInZwZDAgOiAlZCwgJWQsICVkLCAlZCAsJWRcbiIsIHZwZDBbMF0sIHZwZDBbMV0sIHZwZDBbMl0sIHZwZDBbM10sIHZwZDBbNF0pOworICAgIERiZ1ByaW50KCJwd3IxIDogJWQsICVkLCAlZCwgJWQgLCVkXG4iLCBwd3IxWzBdLCBwd3IxWzFdLCBwd3IxWzJdLCBwd3IxWzNdLCBwd3IxWzRdKTsKKyAgICBEYmdQcmludCgidnBkMSA6ICVkLCAlZCwgJWQsICVkICwlZFxuIiwgdnBkMVswXSwgdnBkMVsxXSwgdnBkMVsyXSwgdnBkMVszXSwgdnBkMVs0XSk7CisgICAgI2VuZGlmCit9CisKKworLyoKKyAqIFRvIGZpbmQgQ1RMIGluZGV4KDB+MjMpCisgKiByZXR1cm4gMjQoQVI1NDE2X05VTV9DVExTKT0+bm8gZGVzaXJlZCBpbmRleCBmb3VuZAorICovCit1OF90IHpmRmluZEN0bEVkZ2VzSW5kZXgoemRldl90KiBkZXYsIHU4X3QgZGVzaXJlZF9DdGxJbmRleCkKK3sKKyAgICB1OF90IGk7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisgICAgc3RydWN0IGFyNTQxNkVlcHJvbSogZWVwcm9tSW1hZ2U7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBocFByaXYgPSB3ZC0+aHBQcml2YXRlOworCisgICAgZWVwcm9tSW1hZ2UgPSAoc3RydWN0IGFyNTQxNkVlcHJvbSopJihocFByaXYtPmVlcHJvbUltYWdlWygxMDI0KzUxMikvNF0pOworCisgICAgLy9mb3IgKGkgPSAwOyAoaSA8IEFSNTQxNl9OVU1fQ1RMUykgJiYgZWVwcm9tSW1hZ2UtPmN0bEluZGV4W2ldOyBpKyspCisgICAgZm9yIChpID0gMDsgaSA8IEFSNTQxNl9OVU1fQ1RMUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYoZGVzaXJlZF9DdGxJbmRleCA9PSBlZXByb21JbWFnZS0+Y3RsSW5kZXhbaV0pCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZmJpbjJmcmVxCisgKgorICogR2V0IGNoYW5uZWwgdmFsdWUgZnJvbSBiaW5hcnkgcmVwcmVzZW50YXRpb24gaGVsZCBpbiBlZXByb20KKyAqIFJFVFVSTlM6IHRoZSBmcmVxdWVuY3kgaW4gTUh6CisgKi8KK3UzMl90CitmYmluMmZyZXEodThfdCBmYmluLCB1OF90IGlzMkdIeikKK3sKKyAgICAvKgorICAgICAqIFJlc2VydmVkIHZhbHVlIDB4RkYgcHJvdmlkZXMgYW4gZW1wdHkgZGVmaW5pdGlvbiBib3RoIGFzCisgICAgICogYW4gZmJpbiBhbmQgYXMgYSBmcmVxdWVuY3kgLSBkbyBub3QgY29udmVydAorICAgICAqLworICAgIGlmIChmYmluID09IEFSNTQxNl9CQ0hBTl9VTlVTRUQpIHsKKyAgICAgICAgcmV0dXJuIGZiaW47CisgICAgfQorCisgICAgcmV0dXJuICh1MzJfdCkoKGlzMkdIej09MSkgPyAoMjMwMCArIGZiaW4pIDogKDQ4MDAgKyA1ICogZmJpbikpOworfQorCisKK3U4X3QgemZHZXRNYXhFZGdlUG93ZXIoemRldl90KiBkZXYsIENBTF9DVExfRURHRVMgKnBDdGxFZGdlcywgdTMyX3QgZnJlcSkKK3sKKyAgICB1OF90IGk7CisgICAgdThfdCBtYXhFZGdlUG93ZXI7CisgICAgdThfdCBpczJHSHo7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisgICAgc3RydWN0IGFyNTQxNkVlcHJvbSogZWVwcm9tSW1hZ2U7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBocFByaXYgPSB3ZC0+aHBQcml2YXRlOworCisgICAgZWVwcm9tSW1hZ2UgPSAoc3RydWN0IGFyNTQxNkVlcHJvbSopJihocFByaXYtPmVlcHJvbUltYWdlWygxMDI0KzUxMikvNF0pOworCisgICAgaWYoZnJlcSA+IFpNX0NIX0dfMTQpCisgICAgICAgIGlzMkdIeiA9IDA7CisgICAgZWxzZQorICAgICAgICBpczJHSHogPSAxOworCisgICAgbWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOworCisgICAgLyogR2V0IHRoZSBlZGdlIHBvd2VyICovCisgICAgZm9yIChpID0gMDsgKGkgPCBBUjU0MTZfTlVNX0JBTkRfRURHRVMpICYmIChwQ3RsRWRnZXNbaV0uYkNoYW5uZWwgIT0gQVI1NDE2X0JDSEFOX1VOVVNFRCkgOyBpKyspCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBJZiB0aGVyZSdzIGFuIGV4YWN0IGNoYW5uZWwgbWF0Y2ggb3IgYW4gaW5iYW5kIGZsYWcgc2V0CisgICAgICAgICAqIG9uIHRoZSBsb3dlciBjaGFubmVsIHVzZSB0aGUgZ2l2ZW4gcmRFZGdlUG93ZXIKKyAgICAgICAgICovCisgICAgICAgIGlmIChmcmVxID09IGZiaW4yZnJlcShwQ3RsRWRnZXNbaV0uYkNoYW5uZWwsIGlzMkdIeikpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1heEVkZ2VQb3dlciA9IHBDdGxFZGdlc1tpXS50UG93ZXI7CisgICAgICAgICAgICAjaWZkZWYgWk1fRU5BQkxFX0JBTkRFREdFU19XSU5ET1dTX0RFQlVHCisgICAgICAgICAgICB6bV9kYmcoKCJ6ZkdldE1heEVkZ2VQb3dlciBpbmRleCBpID0gJWQgXG4iLCBpKSk7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChpID4gMCkgJiYgKGZyZXEgPCBmYmluMmZyZXEocEN0bEVkZ2VzW2ldLmJDaGFubmVsLCBpczJHSHopKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGZiaW4yZnJlcShwQ3RsRWRnZXNbaSAtIDFdLmJDaGFubmVsLCBpczJHSHopIDwgZnJlcSAmJiBwQ3RsRWRnZXNbaSAtIDFdLmZsYWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWF4RWRnZVBvd2VyID0gcEN0bEVkZ2VzW2kgLSAxXS50UG93ZXI7CisgICAgICAgICAgICAgICAgI2lmZGVmIFpNX0VOQUJMRV9CQU5ERURHRVNfV0lORE9XU19ERUJVRworICAgICAgICAgICAgICAgIHptX2RiZygoInpmR2V0TWF4RWRnZVBvd2VyIGluZGV4IGktMSA9ICVkIFxuIiwgaS0xKSk7CisgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBMZWF2ZSBsb29wIC0gbm8gbW9yZSBhZmZlY3RpbmcgZWRnZXMgcG9zc2libGUgaW4gdGhpcyBtb25vdG9uaWMgaW5jcmVhc2luZyBsaXN0ICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgaWYoIGkgPT0gQVI1NDE2X05VTV9CQU5EX0VER0VTICkKKyAgICB7CisgICAgICAgIGlmIChmcmVxID4gZmJpbjJmcmVxKHBDdGxFZGdlc1tpIC0gMV0uYkNoYW5uZWwsIGlzMkdIeikgJiYgcEN0bEVkZ2VzW2kgLSAxXS5mbGFnKQorICAgICAgICB7CisgICAgICAgICAgICBtYXhFZGdlUG93ZXIgPSBwQ3RsRWRnZXNbaSAtIDFdLnRQb3dlcjsKKyAgICAgICAgICAgICNpZmRlZiBaTV9FTkFCTEVfQkFOREVER0VTX1dJTkRPV1NfREVCVUcKKyAgICAgICAgICAgIHptX2RiZygoInpmR2V0TWF4RWRnZVBvd2VyIGluZGV4PT5pLTEgPSAlZCBcbiIsIGktMSkpOworICAgICAgICAgICAgI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisKKyAgICB6bV9hc3NlcnQobWF4RWRnZVBvd2VyID4gMCk7CisKKyAgI2lmZGVmIFpNX0VOQUJMRV9CQU5ERURHRVNfV0lORE9XU19ERUJVRworICAgIGlmICggbWF4RWRnZVBvd2VyID09IEFSNTQxNl9NQVhfUkFURV9QT1dFUiApCisgICAgeworICAgICAgICB6bV9kYmcoKCJ6ZkdldE1heEVkZ2VQb3dlciA9ICVkICEhIVxuIiwgQVI1NDE2X01BWF9SQVRFX1BPV0VSKSk7CisgICAgfQorICAjZW5kaWYKKyAgICByZXR1cm4gbWF4RWRnZVBvd2VyOworfQorCit1MzJfdCB6ZkFkanVzdEhUNDBGcmVxT2Zmc2V0KHpkZXZfdCogZGV2LCB1MzJfdCBmcmVxdWVuY3ksIHU4X3QgYnc0MCwgdThfdCBleHRPZmZzZXQpCit7CisgICAgdTMyX3QgbmV3RnJlcSA9IGZyZXF1ZW5jeTsKKworCWlmIChidzQwID09IDEpCisJeworICAgICAgICBpZiAoZXh0T2Zmc2V0ID09IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ld0ZyZXEgKz0gMTA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBuZXdGcmVxIC09IDEwOworICAgICAgICB9CisJfQorCXJldHVybiBuZXdGcmVxOworfQorCit1MzJfdCB6ZkhwQ2hlY2tEb0hlYXZ5Q2xpcCh6ZGV2X3QqIGRldiwgdTMyX3QgZnJlcSwgQ0FMX0NUTF9FREdFUyAqcEN0bEVkZ2VzLCB1OF90IGJ3NDApCit7CisgICAgdTMyX3QgcmV0ID0gMDsKKyAgICB1OF90IGk7CisgICAgdThfdCBpczJHSHo7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBocFByaXYgPSB3ZC0+aHBQcml2YXRlOworCisgICAgaWYoZnJlcSA+IFpNX0NIX0dfMTQpCisgICAgICAgIGlzMkdIeiA9IDA7CisgICAgZWxzZQorICAgICAgICBpczJHSHogPSAxOworCisgICAgLyogSFQ0MCBmb3JjZSBlbmFibGUgaGVhdnkgY2xpcCAqLworICAgIGlmIChidzQwKQorICAgIHsKKyAgICAgICAgcmV0IHw9IDB4ZjA7CisgICAgfQorI2lmIDEKKyAgICAvKiBIVDIwIDogZnJlcXVlbmN5IGJhbmRlZGdlICovCisgICAgZm9yIChpID0gMDsgKGkgPCBBUjU0MTZfTlVNX0JBTkRfRURHRVMpICYmIChwQ3RsRWRnZXNbaV0uYkNoYW5uZWwgIT0gQVI1NDE2X0JDSEFOX1VOVVNFRCkgOyBpKyspCisgICAgeworICAgICAgICBpZiAoZnJlcSA9PSBmYmluMmZyZXEocEN0bEVkZ2VzW2ldLmJDaGFubmVsLCBpczJHSHopKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocEN0bEVkZ2VzW2ldLmZsYWcgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXQgfD0gMHhmOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiByZXQ7Cit9CisKKwordm9pZCB6ZlNldFBvd2VyQ2FsVGFibGUoemRldl90KiBkZXYsIHUzMl90IGZyZXF1ZW5jeSwgdThfdCBidzQwLCB1OF90IGV4dE9mZnNldCkKK3sKKyAgICBzdHJ1Y3QgYXI1NDE2RWVwcm9tKiBlZXByb21JbWFnZTsKKyAgICB1OF90IHB3cjBbNV07CisgICAgdThfdCBwd3IxWzVdOworICAgIHU4X3QgdnBkMFs1XTsKKyAgICB1OF90IHZwZDFbNV07CisgICAgdThfdCB2cGRfY2hhaW4xWzEyOF07CisgICAgdThfdCB2cGRfY2hhaW4zWzEyOF07CisgICAgdTE2X3QgYm91bmRhcnkxID0gMTg7IC8vQ1IgNjY3CisgICAgdTE2X3QgcG93ZXJUeE1heCA9IDYzOyAvL0NSIDc5CisgICAgdThfdCBpOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworICAgIHU4X3QgZmJpbjsKKyAgICB1OF90IGluZGV4LCBtYXgyZ0luZGV4LCBtYXg1Z0luZGV4OworICAgIHU4X3QgY2hhaW4wcHdyUGRnMFs1XTsKKyAgICB1OF90IGNoYWluMHZwZFBkZzBbNV07CisgICAgdThfdCBjaGFpbjBwd3JQZGcxWzVdOworICAgIHU4X3QgY2hhaW4wdnBkUGRnMVs1XTsKKyAgICB1OF90IGNoYWluMnB3clBkZzBbNV07CisgICAgdThfdCBjaGFpbjJ2cGRQZGcwWzVdOworICAgIHU4X3QgY2hhaW4ycHdyUGRnMVs1XTsKKyAgICB1OF90IGNoYWluMnZwZFBkZzFbNV07CisgICAgdThfdCBmYmluQXJyYXlbOF07CisKKyAgICAvKiA0IENUTCAqLworICAgIHU4X3QgY3RsX2k7CisgICAgdThfdCBkZXNpcmVkX0N0bEluZGV4OworCisgICAgdThfdCBjdGxFZGdlc01heFBvd2VyQ0NLID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOworICAgIHU4X3QgY3RsRWRnZXNNYXhQb3dlcjJHID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOworICAgIHU4X3QgY3RsRWRnZXNNYXhQb3dlcjJHSFQyMCA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKyAgICB1OF90IGN0bEVkZ2VzTWF4UG93ZXIyR0hUNDAgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisgICAgdThfdCBjdGxFZGdlc01heFBvd2VyNUcgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisgICAgdThfdCBjdGxFZGdlc01heFBvd2VyNUdIVDIwID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOworICAgIHU4X3QgY3RsRWRnZXNNYXhQb3dlcjVHSFQ0MCA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKworICAgIHU4X3QgY3RsT2Zmc2V0OworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKKworICAgIGVlcHJvbUltYWdlID0gKHN0cnVjdCBhcjU0MTZFZXByb20qKSYoaHBQcml2LT5lZXByb21JbWFnZVsoMTAyNCs1MTIpLzRdKTsKKworICAgIC8vIENoZWNrIHRoZSB0b3RhbCBieXRlcyBvZiB0aGUgRUVQUk9NIHN0cnVjdHVyZSB0byBzZWUgdGhlIGRvbmdsZSBoYXZlIGJlZW4gY2FsaWJyYXRlZCBvciBub3QuCisgICAgaWYgKGVlcHJvbUltYWdlLT5iYXNlRWVwSGVhZGVyLmxlbmd0aCA9PSAweGZmZmYpCisgICAgeworICAgICAgICAjaWZkZWYgWk1fRU5BQkxFX0JBTkRFREdFU19XSU5ET1dTX0RFQlVHCisgICAgICAgIHptX2RiZygoIldhcm5pbmchIFRoaXMgZG9uZ2xlIG5vdCBiZWVuIGNhbGlicmF0ZWRcbiIpKTsKKyAgICAgICAgI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAjaWZkZWYgWk1fRU5BQkxFX1RQQ19XSU5ET1dTX0RFQlVHCisgICAgRGJnUHJpbnQoIi0tLS0temZTZXRQb3dlckNhbFRhYmxlIDogZnJlcXVlbmN5PSVkLS0tLS1cbiIsIGZyZXF1ZW5jeSk7CisgICAgI2VuZGlmCisgICAgLyogVE9ETyA6IDEuIGJvdW5kYXJ5MSBhbmQgcG93ZXJUeE1heCBzaG91bGQgYmUgcmVmZXJlZCB0byBDUjY2NyBhbmQgQ1I3OSAqLworICAgIC8qICAgICAgICAgICBpbiBvdHVzLmluaSBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICNpZmRlZiBaTV9FTkFCTEVfVFBDX1dJTkRPV1NfREVCVUcKKyAgICAvKiAyLiBJbnRlcnBvbGF0ZSBwd3IgYW5kIHZwZCB0ZXN0IHBvaW50cyBmcm9tIGZyZXF1ZW5jeSAqLworICAgIERiZ1ByaW50KCJjYWxGcmVxUGllcjVHIDogJWQsICVkLCAlZCwgJWQgLCVkLCAlZCwgJWQsICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsRnJlcVBpZXI1R1swXSo1KzQ4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjVHWzFdKjUrNDgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbEZyZXFQaWVyNUdbMl0qNSs0ODAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsRnJlcVBpZXI1R1szXSo1KzQ4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjVHWzRdKjUrNDgwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbEZyZXFQaWVyNUdbNV0qNSs0ODAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsRnJlcVBpZXI1R1s2XSo1KzQ4MDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjVHWzddKjUrNDgwMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIERiZ1ByaW50KCJjYWxGcmVxUGllcjJHIDogJWQsICVkLCAlZCwgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjJHWzBdKzIzMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjJHWzFdKzIzMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjJHWzJdKzIzMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjJHWzNdKzIzMDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAjZW5kaWYKKyAgICBpZiAoZnJlcXVlbmN5IDwgMzAwMCkKKyAgICB7CisgICAgICAgIGZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjJHW2ldID09IDB4ZmYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbWF4MmdJbmRleCA9IGk7CisgICAgICAgICNpZmRlZiBaTV9FTkFCTEVfVFBDX1dJTkRPV1NfREVCVUcKKyAgICAgICAgRGJnUHJpbnQoIm1heDJnSW5kZXggOiAlZFxuIiwgbWF4MmdJbmRleCk7CisgICAgICAgICNlbmRpZgorICAgICAgICBmYmluID0gKHU4X3QpKGZyZXF1ZW5jeSAtIDIzMDApOworICAgICAgICBpbmRleCA9IHpmRmluZEZyZXFJbmRleChmYmluLCBlZXByb21JbWFnZS0+Y2FsRnJlcVBpZXIyRywgbWF4MmdJbmRleCk7CisgICAgICAgICNpZmRlZiBaTV9FTkFCTEVfVFBDX1dJTkRPV1NfREVCVUcKKyAgICAgICAgRGJnUHJpbnQoIjJHIGluZGV4IDogJWRcbiIsIGluZGV4KTsKKyAgICAgICAgRGJnUHJpbnQoImNoYWluIDAgaW5kZXhcbiIpOworICAgICAgICAjZW5kaWYKKyAgICAgICAgemZQcmludFRwKCZlZXByb21JbWFnZS0+Y2FsUGllckRhdGEyR1swXVtpbmRleF0ucHdyUGRnWzBdWzBdLAorICAgICAgICAgICAgICAgICAgJmVlcHJvbUltYWdlLT5jYWxQaWVyRGF0YTJHWzBdW2luZGV4XS52cGRQZGdbMF1bMF0sCisgICAgICAgICAgICAgICAgICAmZWVwcm9tSW1hZ2UtPmNhbFBpZXJEYXRhMkdbMF1baW5kZXhdLnB3clBkZ1sxXVswXSwKKyAgICAgICAgICAgICAgICAgICZlZXByb21JbWFnZS0+Y2FsUGllckRhdGEyR1swXVtpbmRleF0udnBkUGRnWzFdWzBdCisgICAgICAgICAgICAgICAgICApOworICAgICAgICAjaWZkZWYgWk1fRU5BQkxFX1RQQ19XSU5ET1dTX0RFQlVHCisgICAgICAgIERiZ1ByaW50KCJjaGFpbiAwIGluZGV4KzFcbiIpOworICAgICAgICAjZW5kaWYKKyAgICAgICAgemZQcmludFRwKCZlZXByb21JbWFnZS0+Y2FsUGllckRhdGEyR1swXVtpbmRleCsxXS5wd3JQZGdbMF1bMF0sCisgICAgICAgICAgICAgICAgICAmZWVwcm9tSW1hZ2UtPmNhbFBpZXJEYXRhMkdbMF1baW5kZXgrMV0udnBkUGRnWzBdWzBdLAorICAgICAgICAgICAgICAgICAgJmVlcHJvbUltYWdlLT5jYWxQaWVyRGF0YTJHWzBdW2luZGV4KzFdLnB3clBkZ1sxXVswXSwKKyAgICAgICAgICAgICAgICAgICZlZXByb21JbWFnZS0+Y2FsUGllckRhdGEyR1swXVtpbmRleCsxXS52cGRQZGdbMV1bMF0KKyAgICAgICAgICAgICAgICAgICk7CisKKyAgICAgICAgZm9yIChpPTA7IGk8NTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjaGFpbjBwd3JQZGcwW2ldID0gemZJbnRlcnBvbGF0ZUZ1bmNYKGZiaW4sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjJHW2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFBpZXJEYXRhMkdbMF1baW5kZXhdLnB3clBkZ1swXVtpXSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbEZyZXFQaWVyMkdbaW5kZXgrMV0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxQaWVyRGF0YTJHWzBdW2luZGV4KzFdLnB3clBkZ1swXVtpXQorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgY2hhaW4wdnBkUGRnMFtpXSA9IHpmSW50ZXJwb2xhdGVGdW5jWChmYmluLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsRnJlcVBpZXIyR1tpbmRleF0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxQaWVyRGF0YTJHWzBdW2luZGV4XS52cGRQZGdbMF1baV0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjJHW2luZGV4KzFdLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsUGllckRhdGEyR1swXVtpbmRleCsxXS52cGRQZGdbMF1baV0KKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGNoYWluMHB3clBkZzFbaV0gPSB6ZkludGVycG9sYXRlRnVuY1goZmJpbiwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbEZyZXFQaWVyMkdbaW5kZXhdLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsUGllckRhdGEyR1swXVtpbmRleF0ucHdyUGRnWzFdW2ldLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsRnJlcVBpZXIyR1tpbmRleCsxXSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFBpZXJEYXRhMkdbMF1baW5kZXgrMV0ucHdyUGRnWzFdW2ldCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBjaGFpbjB2cGRQZGcxW2ldID0gemZJbnRlcnBvbGF0ZUZ1bmNYKGZiaW4sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjJHW2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFBpZXJEYXRhMkdbMF1baW5kZXhdLnZwZFBkZ1sxXVtpXSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbEZyZXFQaWVyMkdbaW5kZXgrMV0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxQaWVyRGF0YTJHWzBdW2luZGV4KzFdLnZwZFBkZ1sxXVtpXQorICAgICAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICBjaGFpbjJwd3JQZGcwW2ldID0gemZJbnRlcnBvbGF0ZUZ1bmNYKGZiaW4sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjJHW2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFBpZXJEYXRhMkdbMV1baW5kZXhdLnB3clBkZ1swXVtpXSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbEZyZXFQaWVyMkdbaW5kZXgrMV0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxQaWVyRGF0YTJHWzFdW2luZGV4KzFdLnB3clBkZ1swXVtpXQorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgY2hhaW4ydnBkUGRnMFtpXSA9IHpmSW50ZXJwb2xhdGVGdW5jWChmYmluLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsRnJlcVBpZXIyR1tpbmRleF0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxQaWVyRGF0YTJHWzFdW2luZGV4XS52cGRQZGdbMF1baV0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjJHW2luZGV4KzFdLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsUGllckRhdGEyR1sxXVtpbmRleCsxXS52cGRQZGdbMF1baV0KKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGNoYWluMnB3clBkZzFbaV0gPSB6ZkludGVycG9sYXRlRnVuY1goZmJpbiwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbEZyZXFQaWVyMkdbaW5kZXhdLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsUGllckRhdGEyR1sxXVtpbmRleF0ucHdyUGRnWzFdW2ldLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsRnJlcVBpZXIyR1tpbmRleCsxXSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFBpZXJEYXRhMkdbMV1baW5kZXgrMV0ucHdyUGRnWzFdW2ldCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBjaGFpbjJ2cGRQZGcxW2ldID0gemZJbnRlcnBvbGF0ZUZ1bmNYKGZiaW4sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjJHW2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFBpZXJEYXRhMkdbMV1baW5kZXhdLnZwZFBkZ1sxXVtpXSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbEZyZXFQaWVyMkdbaW5kZXgrMV0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxQaWVyRGF0YTJHWzFdW2luZGV4KzFdLnZwZFBkZ1sxXVtpXQorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAoaT0wOyBpPDg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjVHW2ldID09IDB4ZmYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbWF4NWdJbmRleCA9IGk7CisgICAgICAgICNpZmRlZiBaTV9FTkFCTEVfVFBDX1dJTkRPV1NfREVCVUcKKyAgICAgICAgRGJnUHJpbnQoIm1heDVnSW5kZXggOiAlZFxuIiwgbWF4NWdJbmRleCk7CisgICAgICAgICNlbmRpZgorICAgICAgICBmYmluID0gKHU4X3QpKChmcmVxdWVuY3kgLSA0ODAwKS81KTsKKyAgICAgICAgaW5kZXggPSB6ZkZpbmRGcmVxSW5kZXgoZmJpbiwgZWVwcm9tSW1hZ2UtPmNhbEZyZXFQaWVyNUcsIG1heDVnSW5kZXgpOworICAgICAgICAjaWZkZWYgWk1fRU5BQkxFX1RQQ19XSU5ET1dTX0RFQlVHCisgICAgICAgIERiZ1ByaW50KCI1RyBpbmRleCA6ICVkXG4iLCBpbmRleCk7CisgICAgICAgICNlbmRpZgorCisgICAgICAgIGZvciAoaT0wOyBpPDU7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY2hhaW4wcHdyUGRnMFtpXSA9IHpmSW50ZXJwb2xhdGVGdW5jWChmYmluLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsRnJlcVBpZXI1R1tpbmRleF0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxQaWVyRGF0YTVHWzBdW2luZGV4XS5wd3JQZGdbMF1baV0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjVHW2luZGV4KzFdLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsUGllckRhdGE1R1swXVtpbmRleCsxXS5wd3JQZGdbMF1baV0KKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGNoYWluMHZwZFBkZzBbaV0gPSB6ZkludGVycG9sYXRlRnVuY1goZmJpbiwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbEZyZXFQaWVyNUdbaW5kZXhdLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsUGllckRhdGE1R1swXVtpbmRleF0udnBkUGRnWzBdW2ldLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsRnJlcVBpZXI1R1tpbmRleCsxXSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFBpZXJEYXRhNUdbMF1baW5kZXgrMV0udnBkUGRnWzBdW2ldCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBjaGFpbjBwd3JQZGcxW2ldID0gemZJbnRlcnBvbGF0ZUZ1bmNYKGZiaW4sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjVHW2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFBpZXJEYXRhNUdbMF1baW5kZXhdLnB3clBkZ1sxXVtpXSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbEZyZXFQaWVyNUdbaW5kZXgrMV0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxQaWVyRGF0YTVHWzBdW2luZGV4KzFdLnB3clBkZ1sxXVtpXQorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgY2hhaW4wdnBkUGRnMVtpXSA9IHpmSW50ZXJwb2xhdGVGdW5jWChmYmluLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsRnJlcVBpZXI1R1tpbmRleF0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxQaWVyRGF0YTVHWzBdW2luZGV4XS52cGRQZGdbMV1baV0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjVHW2luZGV4KzFdLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsUGllckRhdGE1R1swXVtpbmRleCsxXS52cGRQZGdbMV1baV0KKyAgICAgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgY2hhaW4ycHdyUGRnMFtpXSA9IHpmSW50ZXJwb2xhdGVGdW5jWChmYmluLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsRnJlcVBpZXI1R1tpbmRleF0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxQaWVyRGF0YTVHWzFdW2luZGV4XS5wd3JQZGdbMF1baV0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjVHW2luZGV4KzFdLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsUGllckRhdGE1R1sxXVtpbmRleCsxXS5wd3JQZGdbMF1baV0KKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIGNoYWluMnZwZFBkZzBbaV0gPSB6ZkludGVycG9sYXRlRnVuY1goZmJpbiwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbEZyZXFQaWVyNUdbaW5kZXhdLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsUGllckRhdGE1R1sxXVtpbmRleF0udnBkUGRnWzBdW2ldLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsRnJlcVBpZXI1R1tpbmRleCsxXSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFBpZXJEYXRhNUdbMV1baW5kZXgrMV0udnBkUGRnWzBdW2ldCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBjaGFpbjJwd3JQZGcxW2ldID0gemZJbnRlcnBvbGF0ZUZ1bmNYKGZiaW4sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjVHW2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFBpZXJEYXRhNUdbMV1baW5kZXhdLnB3clBkZ1sxXVtpXSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbEZyZXFQaWVyNUdbaW5kZXgrMV0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxQaWVyRGF0YTVHWzFdW2luZGV4KzFdLnB3clBkZ1sxXVtpXQorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgY2hhaW4ydnBkUGRnMVtpXSA9IHpmSW50ZXJwb2xhdGVGdW5jWChmYmluLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsRnJlcVBpZXI1R1tpbmRleF0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxQaWVyRGF0YTVHWzFdW2luZGV4XS52cGRQZGdbMV1baV0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxGcmVxUGllcjVHW2luZGV4KzFdLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsUGllckRhdGE1R1sxXVtpbmRleCsxXS52cGRQZGdbMV1baV0KKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAgfQorCisKKyAgICAvKiBDaGFpbiAxICovCisgICAgLyogR2V0IHB3ciBhbmQgdnBkIHRlc3QgcG9pbnRzIGZyb20gZnJlcXVlbmN5ICovCisgICAgZm9yIChpPTA7IGk8NTsgaSsrKQorICAgIHsKKyAgICAgICAgcHdyMFtpXSA9IGNoYWluMHB3clBkZzBbaV0+PjE7CisgICAgICAgIHZwZDBbaV0gPSBjaGFpbjB2cGRQZGcwW2ldOworICAgICAgICBwd3IxW2ldID0gY2hhaW4wcHdyUGRnMVtpXT4+MTsKKyAgICAgICAgdnBkMVtpXSA9IGNoYWluMHZwZFBkZzFbaV07CisgICAgfQorICAgICNpZmRlZiBaTV9FTkFCTEVfVFBDX1dJTkRPV1NfREVCVUcKKyAgICBEYmdQcmludCgiVGVzdCBQb2ludHNcbiIpOworICAgIERiZ1ByaW50KCJwd3IwIDogJWQsICVkLCAlZCwgJWQgLCVkXG4iLCBwd3IwWzBdLCBwd3IwWzFdLCBwd3IwWzJdLCBwd3IwWzNdLCBwd3IwWzRdKTsKKyAgICBEYmdQcmludCgidnBkMCA6ICVkLCAlZCwgJWQsICVkICwlZFxuIiwgdnBkMFswXSwgdnBkMFsxXSwgdnBkMFsyXSwgdnBkMFszXSwgdnBkMFs0XSk7CisgICAgRGJnUHJpbnQoInB3cjEgOiAlZCwgJWQsICVkLCAlZCAsJWRcbiIsIHB3cjFbMF0sIHB3cjFbMV0sIHB3cjFbMl0sIHB3cjFbM10sIHB3cjFbNF0pOworICAgIERiZ1ByaW50KCJ2cGQxIDogJWQsICVkLCAlZCwgJWQgLCVkXG4iLCB2cGQxWzBdLCB2cGQxWzFdLCB2cGQxWzJdLCB2cGQxWzNdLCB2cGQxWzRdKTsKKyAgICAjZW5kaWYKKyAgICAvKiBHZW5lcmF0ZSB0aGUgdnBkIGFycmF5cyAqLworICAgIGZvciAoaT0wOyBpPGJvdW5kYXJ5MSsxKzY7IGkrKykKKyAgICB7CisgICAgICAgIHZwZF9jaGFpbjFbaV0gPSB6ZkdldEludGVycG9sYXRlZFZhbHVlKGksICZwd3IwWzBdLCAmdnBkMFswXSk7CisgICAgfQorICAgIGZvciAoOyBpPHBvd2VyVHhNYXgrMSs2KzY7IGkrKykKKyAgICB7CisgICAgICAgIHZwZF9jaGFpbjFbaV0gPSB6ZkdldEludGVycG9sYXRlZFZhbHVlKGktNi02LCAmcHdyMVswXSwgJnZwZDFbMF0pOworICAgIH0KKyAgICAjaWZkZWYgWk1fRU5BQkxFX1RQQ19XSU5ET1dTX0RFQlVHCisgICAgRGJnUHJpbnQoInZwZF9jaGFpbjFcbiIpOworICAgIGZvciAoaT0wOyBpPHBvd2VyVHhNYXgrMSs2KzY7IGkrPTEwKQorICAgIHsKKyAgICAgICAgRGJnUHJpbnQoIiVkLCAlZCwgJWQsICVkICwlZCwgJWQsICVkLCAlZCwgJWQsICVkXG4iLAorICAgICAgICAgICAgICAgIHZwZF9jaGFpbjFbaSswXSwgdnBkX2NoYWluMVtpKzFdLCB2cGRfY2hhaW4xW2krMl0sIHZwZF9jaGFpbjFbaSszXSwgdnBkX2NoYWluMVtpKzRdLAorICAgICAgICAgICAgICAgIHZwZF9jaGFpbjFbaSs1XSwgdnBkX2NoYWluMVtpKzZdLCB2cGRfY2hhaW4xW2krN10sIHZwZF9jaGFpbjFbaSs4XSwgdnBkX2NoYWluMVtpKzldKTsKKyAgICB9CisgICAgI2VuZGlmCisgICAgLyogV3JpdGUgUEhZIHJlZ3MgNjcyLTcwMyAqLworICAgIGZvciAoaT0wOyBpPDEyODsgaSs9NCkKKyAgICB7CisgICAgICAgIHUzMl90IHJlZ0FkZHIgPSAweDk4MDAgKyAoNjcyICogNCk7CisgICAgICAgIHUzMl90IHZhbDsKKworICAgICAgICB2YWwgPSAoKHUzMl90KXZwZF9jaGFpbjFbaSszXTw8MjQpIHwKKyAgICAgICAgICAgICAgICAoKHUzMl90KXZwZF9jaGFpbjFbaSsyXTw8MTYpIHwKKyAgICAgICAgICAgICAgICAoKHUzMl90KXZwZF9jaGFpbjFbaSsxXTw8OCkgfAorICAgICAgICAgICAgICAgICgodTMyX3QpdnBkX2NoYWluMVtpXSk7CisKKyAgICAgICAgI2lmbmRlZiBaTV9PVFVTX0xJTlVYX1BIQVNFXzIKKyAgICAgICAgcmVnX3dyaXRlKHJlZ0FkZHIgKyBpLCB2YWwpOyAgLyogQ1I2NzIgKi8KKyAgICAgICAgI2VuZGlmCisgICAgfQorCisgICAgLyogQ2hhaW4gMiAqLworICAgIC8qIEdldCBwd3IgYW5kIHZwZCB0ZXN0IHBvaW50cyBmcm9tIGZyZXF1ZW5jeSAqLworICAgIGZvciAoaT0wOyBpPDU7IGkrKykKKyAgICB7CisgICAgICAgIHB3cjBbaV0gPSBjaGFpbjJwd3JQZGcwW2ldPj4xOworICAgICAgICB2cGQwW2ldID0gY2hhaW4ydnBkUGRnMFtpXTsKKyAgICAgICAgcHdyMVtpXSA9IGNoYWluMnB3clBkZzFbaV0+PjE7CisgICAgICAgIHZwZDFbaV0gPSBjaGFpbjJ2cGRQZGcxW2ldOworICAgIH0KKyAgICAjaWZkZWYgWk1fRU5BQkxFX1RQQ19XSU5ET1dTX0RFQlVHCisgICAgRGJnUHJpbnQoIlRlc3QgUG9pbnRzXG4iKTsKKyAgICBEYmdQcmludCgicHdyMCA6ICVkLCAlZCwgJWQsICVkICwlZFxuIiwgcHdyMFswXSwgcHdyMFsxXSwgcHdyMFsyXSwgcHdyMFszXSwgcHdyMFs0XSk7CisgICAgRGJnUHJpbnQoInZwZDAgOiAlZCwgJWQsICVkLCAlZCAsJWRcbiIsIHZwZDBbMF0sIHZwZDBbMV0sIHZwZDBbMl0sIHZwZDBbM10sIHZwZDBbNF0pOworICAgIERiZ1ByaW50KCJwd3IxIDogJWQsICVkLCAlZCwgJWQgLCVkXG4iLCBwd3IxWzBdLCBwd3IxWzFdLCBwd3IxWzJdLCBwd3IxWzNdLCBwd3IxWzRdKTsKKyAgICBEYmdQcmludCgidnBkMSA6ICVkLCAlZCwgJWQsICVkICwlZFxuIiwgdnBkMVswXSwgdnBkMVsxXSwgdnBkMVsyXSwgdnBkMVszXSwgdnBkMVs0XSk7CisgICAgI2VuZGlmCisgICAgLyogR2VuZXJhdGUgdGhlIHZwZCBhcnJheXMgKi8KKyAgICBmb3IgKGk9MDsgaTxib3VuZGFyeTErMSs2OyBpKyspCisgICAgeworICAgICAgICB2cGRfY2hhaW4zW2ldID0gemZHZXRJbnRlcnBvbGF0ZWRWYWx1ZShpLCAmcHdyMFswXSwgJnZwZDBbMF0pOworICAgIH0KKyAgICBmb3IgKDsgaTxwb3dlclR4TWF4KzErNis2OyBpKyspCisgICAgeworICAgICAgICB2cGRfY2hhaW4zW2ldID0gemZHZXRJbnRlcnBvbGF0ZWRWYWx1ZShpLTYtNiwgJnB3cjFbMF0sICZ2cGQxWzBdKTsKKyAgICB9CisgICAgI2lmZGVmIFpNX0VOQUJMRV9UUENfV0lORE9XU19ERUJVRworICAgIERiZ1ByaW50KCJ2cGRfY2hhaW4zXG4iKTsKKyAgICBmb3IgKGk9MDsgaTxwb3dlclR4TWF4KzErNis2OyBpKz0xMCkKKyAgICB7CisgICAgICAgIERiZ1ByaW50KCIlZCwgJWQsICVkLCAlZCAsJWQsICVkLCAlZCwgJWQsICVkLCAlZFxuIiwKKyAgICAgICAgICAgICAgICB2cGRfY2hhaW4zW2krMF0sIHZwZF9jaGFpbjNbaSsxXSwgdnBkX2NoYWluM1tpKzJdLCB2cGRfY2hhaW4zW2krM10sIHZwZF9jaGFpbjNbaSs0XSwKKyAgICAgICAgICAgICAgICB2cGRfY2hhaW4zW2krNV0sIHZwZF9jaGFpbjNbaSs2XSwgdnBkX2NoYWluM1tpKzddLCB2cGRfY2hhaW4zW2krOF0sIHZwZF9jaGFpbjNbaSs5XSk7CisgICAgfQorICAgICNlbmRpZgorCisgICAgLyogV3JpdGUgUEhZIHJlZ3MgNjcyLTcwMyArIDB4MTAwMCAqLworICAgIGZvciAoaT0wOyBpPDEyODsgaSs9NCkKKyAgICB7CisgICAgICAgIHUzMl90IHJlZ0FkZHIgPSAweDk4MDAgKyAoNjcyICogNCkgKyAweDEwMDA7CisgICAgICAgIHUzMl90IHZhbDsKKworICAgICAgICB2YWwgPSAoKHUzMl90KXZwZF9jaGFpbjNbaSszXTw8MjQpIHwKKyAgICAgICAgICAgICAgICAoKHUzMl90KXZwZF9jaGFpbjNbaSsyXTw8MTYpIHwKKyAgICAgICAgICAgICAgICAoKHUzMl90KXZwZF9jaGFpbjNbaSsxXTw8OCkgfAorICAgICAgICAgICAgICAgICgodTMyX3QpdnBkX2NoYWluM1tpXSk7CisKKyAgICAgICAgI2lmbmRlZiBaTV9PVFVTX0xJTlVYX1BIQVNFXzIKKyAgICAgICAgcmVnX3dyaXRlKHJlZ0FkZHIgKyBpLCB2YWwpOyAgLyogQ1I2NzIgKi8KKyAgICAgICAgI2VuZGlmCisgICAgfQorCisgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKworICAgIC8qIDMuIEdlbmVyYXRlIHRhcmdldCBwb3dlciB0YWJsZSAqLworICAgIGlmIChmcmVxdWVuY3kgPCAzMDAwKQorICAgIHsKKyAgICAgICAgZm9yIChpPTA7IGk8MzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZWVwcm9tSW1hZ2UtPmNhbFRhcmdldFBvd2VyQ2NrW2ldLmJDaGFubmVsICE9IDB4ZmYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmJpbkFycmF5W2ldID0gZWVwcm9tSW1hZ2UtPmNhbFRhcmdldFBvd2VyQ2NrW2ldLmJDaGFubmVsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICAgICAgaW5kZXggPSB6ZkZpbmRGcmVxSW5kZXgoZmJpbiwgZmJpbkFycmF5LCBpKTsKKyAgICAgICAgI2lmZGVmIFpNX0VOQUJMRV9UUENfV0lORE9XU19ERUJVRworICAgICAgICBEYmdQcmludCgiQ0NLIGluZGV4PSVkXG4iLCBpbmRleCk7CisgICAgICAgICNlbmRpZgorICAgICAgICBmb3IgKGk9MDsgaTw0OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGhwUHJpdi0+dFBvdzJ4Q2NrW2ldID0gemZJbnRlcnBvbGF0ZUZ1bmNYKGZiaW4sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxUYXJnZXRQb3dlckNja1tpbmRleF0uYkNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxUYXJnZXRQb3dlckNja1tpbmRleF0udFBvdzJ4W2ldLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsVGFyZ2V0UG93ZXJDY2tbaW5kZXgrMV0uYkNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxUYXJnZXRQb3dlckNja1tpbmRleCsxXS50UG93MnhbaV0KKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVlcHJvbUltYWdlLT5jYWxUYXJnZXRQb3dlcjJHW2ldLmJDaGFubmVsICE9IDB4ZmYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmJpbkFycmF5W2ldID0gZWVwcm9tSW1hZ2UtPmNhbFRhcmdldFBvd2VyMkdbaV0uYkNoYW5uZWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgICAgICBpbmRleCA9IHpmRmluZEZyZXFJbmRleChmYmluLCBmYmluQXJyYXksIGkpOworICAgICAgICAjaWZkZWYgWk1fRU5BQkxFX1RQQ19XSU5ET1dTX0RFQlVHCisgICAgICAgIERiZ1ByaW50KCIyRyBpbmRleD0lZFxuIiwgaW5kZXgpOworICAgICAgICAjZW5kaWYKKyAgICAgICAgZm9yIChpPTA7IGk8NDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBocFByaXYtPnRQb3cyeDJnW2ldID0gemZJbnRlcnBvbGF0ZUZ1bmNYKGZiaW4sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxUYXJnZXRQb3dlcjJHW2luZGV4XS5iQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFRhcmdldFBvd2VyMkdbaW5kZXhdLnRQb3cyeFtpXSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFRhcmdldFBvd2VyMkdbaW5kZXgrMV0uYkNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxUYXJnZXRQb3dlcjJHW2luZGV4KzFdLnRQb3cyeFtpXQorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpPTA7IGk8NDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZWVwcm9tSW1hZ2UtPmNhbFRhcmdldFBvd2VyMkdIVDIwW2ldLmJDaGFubmVsICE9IDB4ZmYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmJpbkFycmF5W2ldID0gZWVwcm9tSW1hZ2UtPmNhbFRhcmdldFBvd2VyMkdIVDIwW2ldLmJDaGFubmVsOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICAgICAgaW5kZXggPSB6ZkZpbmRGcmVxSW5kZXgoZmJpbiwgZmJpbkFycmF5LCBpKTsKKyAgICAgICAgI2lmZGVmIFpNX0VOQUJMRV9UUENfV0lORE9XU19ERUJVRworICAgICAgICBEYmdQcmludCgiMkcgSFQyMCBpbmRleD0lZFxuIiwgaW5kZXgpOworICAgICAgICAjZW5kaWYKKyAgICAgICAgZm9yIChpPTA7IGk8ODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBocFByaXYtPnRQb3cyeDJnSHQyMFtpXSA9IHpmSW50ZXJwb2xhdGVGdW5jWChmYmluLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsVGFyZ2V0UG93ZXIyR0hUMjBbaW5kZXhdLmJDaGFubmVsLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsVGFyZ2V0UG93ZXIyR0hUMjBbaW5kZXhdLnRQb3cyeFtpXSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFRhcmdldFBvd2VyMkdIVDIwW2luZGV4KzFdLmJDaGFubmVsLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsVGFyZ2V0UG93ZXIyR0hUMjBbaW5kZXgrMV0udFBvdzJ4W2ldCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGk9MDsgaTw0OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlZXByb21JbWFnZS0+Y2FsVGFyZ2V0UG93ZXIyR0hUNDBbaV0uYkNoYW5uZWwgIT0gMHhmZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmYmluQXJyYXlbaV0gPSBlZXByb21JbWFnZS0+Y2FsVGFyZ2V0UG93ZXIyR0hUNDBbaV0uYkNoYW5uZWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgICAgICBpbmRleCA9IHpmRmluZEZyZXFJbmRleCggKHU4X3QpemZBZGp1c3RIVDQwRnJlcU9mZnNldChkZXYsIGZiaW4sIGJ3NDAsIGV4dE9mZnNldCksIGZiaW5BcnJheSwgaSk7CisgICAgICAgICNpZmRlZiBaTV9FTkFCTEVfVFBDX1dJTkRPV1NfREVCVUcKKyAgICAgICAgRGJnUHJpbnQoIjJHIEhUNDAgaW5kZXg9JWRcbiIsIGluZGV4KTsKKyAgICAgICAgI2VuZGlmCisgICAgICAgIGZvciAoaT0wOyBpPDg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaHBQcml2LT50UG93MngyZ0h0NDBbaV0gPSB6ZkludGVycG9sYXRlRnVuY1goCisgICAgICAgICAgICAgICAgICAgICh1OF90KXpmQWRqdXN0SFQ0MEZyZXFPZmZzZXQoZGV2LCBmYmluLCBidzQwLCBleHRPZmZzZXQpLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsVGFyZ2V0UG93ZXIyR0hUNDBbaW5kZXhdLmJDaGFubmVsLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsVGFyZ2V0UG93ZXIyR0hUNDBbaW5kZXhdLnRQb3cyeFtpXSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFRhcmdldFBvd2VyMkdIVDQwW2luZGV4KzFdLmJDaGFubmVsLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsVGFyZ2V0UG93ZXIyR0hUNDBbaW5kZXgrMV0udFBvdzJ4W2ldCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICB6ZlByaW50VGFyZ2V0UG93ZXIyRyhocFByaXYtPnRQb3cyeENjaywKKyAgICAgICAgICAgICAgICBocFByaXYtPnRQb3cyeDJnLAorICAgICAgICAgICAgICAgIGhwUHJpdi0+dFBvdzJ4MmdIdDIwLAorICAgICAgICAgICAgICAgIGhwUHJpdi0+dFBvdzJ4MmdIdDQwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogNUcgKi8KKyAgICAgICAgZm9yIChpPTA7IGk8ODsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZWVwcm9tSW1hZ2UtPmNhbFRhcmdldFBvd2VyNUdbaV0uYkNoYW5uZWwgIT0gMHhmZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmYmluQXJyYXlbaV0gPSBlZXByb21JbWFnZS0+Y2FsVGFyZ2V0UG93ZXI1R1tpXS5iQ2hhbm5lbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgICAgIGluZGV4ID0gemZGaW5kRnJlcUluZGV4KGZiaW4sIGZiaW5BcnJheSwgaSk7CisgICAgICAgICNpZmRlZiBaTV9FTkFCTEVfVFBDX1dJTkRPV1NfREVCVUcKKyAgICAgICAgRGJnUHJpbnQoIjVHIGluZGV4PSVkXG4iLCBpbmRleCk7CisgICAgICAgICNlbmRpZgorICAgICAgICBmb3IgKGk9MDsgaTw0OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGhwUHJpdi0+dFBvdzJ4NWdbaV0gPSB6ZkludGVycG9sYXRlRnVuY1goZmJpbiwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFRhcmdldFBvd2VyNUdbaW5kZXhdLmJDaGFubmVsLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsVGFyZ2V0UG93ZXI1R1tpbmRleF0udFBvdzJ4W2ldLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsVGFyZ2V0UG93ZXI1R1tpbmRleCsxXS5iQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFRhcmdldFBvd2VyNUdbaW5kZXgrMV0udFBvdzJ4W2ldCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGk9MDsgaTw4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlZXByb21JbWFnZS0+Y2FsVGFyZ2V0UG93ZXI1R0hUMjBbaV0uYkNoYW5uZWwgIT0gMHhmZikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmYmluQXJyYXlbaV0gPSBlZXByb21JbWFnZS0+Y2FsVGFyZ2V0UG93ZXI1R0hUMjBbaV0uYkNoYW5uZWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgICAgICBpbmRleCA9IHpmRmluZEZyZXFJbmRleChmYmluLCBmYmluQXJyYXksIGkpOworICAgICAgICAjaWZkZWYgWk1fRU5BQkxFX1RQQ19XSU5ET1dTX0RFQlVHCisgICAgICAgIERiZ1ByaW50KCI1RyBIVDIwIGluZGV4PSVkXG4iLCBpbmRleCk7CisgICAgICAgICNlbmRpZgorICAgICAgICBmb3IgKGk9MDsgaTw4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGhwUHJpdi0+dFBvdzJ4NWdIdDIwW2ldID0gemZJbnRlcnBvbGF0ZUZ1bmNYKGZiaW4sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxUYXJnZXRQb3dlcjVHSFQyMFtpbmRleF0uYkNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxUYXJnZXRQb3dlcjVHSFQyMFtpbmRleF0udFBvdzJ4W2ldLAorICAgICAgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y2FsVGFyZ2V0UG93ZXI1R0hUMjBbaW5kZXgrMV0uYkNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxUYXJnZXRQb3dlcjVHSFQyMFtpbmRleCsxXS50UG93MnhbaV0KKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaT0wOyBpPDg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVlcHJvbUltYWdlLT5jYWxUYXJnZXRQb3dlcjVHSFQ0MFtpXS5iQ2hhbm5lbCAhPSAweGZmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZiaW5BcnJheVtpXSA9IGVlcHJvbUltYWdlLT5jYWxUYXJnZXRQb3dlcjVHSFQ0MFtpXS5iQ2hhbm5lbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgICAgIGluZGV4ID0gemZGaW5kRnJlcUluZGV4KCh1OF90KXpmQWRqdXN0SFQ0MEZyZXFPZmZzZXQoZGV2LCBmYmluLCBidzQwLCBleHRPZmZzZXQpLCBmYmluQXJyYXksIGkpOworICAgICAgICAjaWZkZWYgWk1fRU5BQkxFX1RQQ19XSU5ET1dTX0RFQlVHCisgICAgICAgIERiZ1ByaW50KCI1RyBIVDQwIGluZGV4PSVkXG4iLCBpbmRleCk7CisgICAgICAgICNlbmRpZgorICAgICAgICBmb3IgKGk9MDsgaTw4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGhwUHJpdi0+dFBvdzJ4NWdIdDQwW2ldID0gemZJbnRlcnBvbGF0ZUZ1bmNYKAorICAgICAgICAgICAgICAgICAgICAodThfdCl6ZkFkanVzdEhUNDBGcmVxT2Zmc2V0KGRldiwgZmJpbiwgYnc0MCwgZXh0T2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFRhcmdldFBvd2VyNUdIVDQwW2luZGV4XS5iQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFRhcmdldFBvd2VyNUdIVDQwW2luZGV4XS50UG93MnhbaV0sCisgICAgICAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jYWxUYXJnZXRQb3dlcjVHSFQ0MFtpbmRleCsxXS5iQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgZWVwcm9tSW1hZ2UtPmNhbFRhcmdldFBvd2VyNUdIVDQwW2luZGV4KzFdLnRQb3cyeFtpXQorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICB9CisKKyAgICAgICAgemZQcmludFRhcmdldFBvd2VyNUcoCisgICAgICAgICAgICAgICAgaHBQcml2LT50UG93Mng1ZywKKyAgICAgICAgICAgICAgICBocFByaXYtPnRQb3cyeDVnSHQyMCwKKyAgICAgICAgICAgICAgICBocFByaXYtPnRQb3cyeDVnSHQ0MCk7CisgICAgfQorCisKKworICAgIC8qIDQuIENUTCAqLworICAgIC8qCisgICAgICogNC4xIEdldCB0aGUgYmFuZGVkZ2VzIHR4IHBvd2VyIGJ5IGZyZXF1ZW5jeQorICAgICAqICAgICAgMi40RyB3ZSBnZXQgY3RsRWRnZXNNYXhQb3dlckNDSworICAgICAqICAgICAgICAgICAgICAgICAgY3RsRWRnZXNNYXhQb3dlcjJHCisgICAgICogICAgICAgICAgICAgICAgICBjdGxFZGdlc01heFBvd2VyMkdIVDIwCisgICAgICogICAgICAgICAgICAgICAgICBjdGxFZGdlc01heFBvd2VyMkdIVDQwCisgICAgICogICAgICA1RyB3ZSBnZXQgICBjdGxFZGdlc01heFBvd2VyNUcKKyAgICAgKiAgICAgICAgICAgICAgICAgIGN0bEVkZ2VzTWF4UG93ZXI1R0hUMjAKKyAgICAgKiAgICAgICAgICAgICAgICAgIGN0bEVkZ2VzTWF4UG93ZXI1R0hUNDAKKyAgICAgKiA0LjIgVXBkYXRlICgzLikgdGFyZ2V0IHBvd2VyIHRhYmxlIGJ5IDQuMQorICAgICAqIDQuMyBUeCBwb3dlciBvZmZzZXQgZm9yIEFSVCAtIE5ESVMvTURLCisgICAgICogNC40IFdyaXRlIE1BQyByZWcgMHg2OTQgZm9yIEFDSydzIFRQQworICAgICAqCisgICAgICovCisKKyAgICAvL3pmRHVtcEVlcEJhbmRFZGdlcyhlZXByb21JbWFnZSk7CisKKyAgICAvKiBnZXQgdGhlIGNmZyBmcm9tIEVlcHJvbTogcmVnaW9uQ29kZSA9PiBSZWd1bGF0b3J5RG9tYWluIDogMHgxMC1GRkMgIDB4MzAtZXUgMHg0MC1qYXAgKi8KKyAgICBkZXNpcmVkX0N0bEluZGV4ID0gemZIcEdldFJlZ3VsYXRvcnlEb21haW4oZGV2KTsKKyAgICBpZiAoKGRlc2lyZWRfQ3RsSW5kZXggPT0gMHgzMCkgfHwgKGRlc2lyZWRfQ3RsSW5kZXggPT0gMHg0MCkgfHwgKGRlc2lyZWRfQ3RsSW5kZXggPT0gMHgwKSkKKyAgICB7CisgICAgICAgIC8qIHNraXAgQ1RMIGFuZCBoZWF2eSBjbGlwICovCisgICAgICAgIGhwUHJpdi0+ZW5hYmxlQkJIZWF2eUNsaXAgPSAwOworICAgICAgICAjaWZkZWYgWk1fRU5BQkxFX0JBTkRFREdFU19XSU5ET1dTX0RFQlVHCisgICAgICAgIHptX2RiZygoIlJlZ3VsYXRvcnlEb21haW4gPSAwLCBza2lwIENUTCBhbmQgaGVhdnkgY2xpcFxuIikpOworICAgICAgICAjZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaHBQcml2LT5lbmFibGVCQkhlYXZ5Q2xpcCA9IDE7CisKKyAgICAgICAgaWYgKGRlc2lyZWRfQ3RsSW5kZXggPT0gMHhmZikKKyAgICAgICAgeworICAgICAgICAgICAgLyogZGVzaXJlZCBpbmRleCBub3QgZm91bmQgKi8KKyAgICAgICAgICAgIGRlc2lyZWRfQ3RsSW5kZXggPSAweDEwOworICAgICAgICB9CisKKyAgICAgICAgLyogZmlyc3QgcGFydCA6IDIuNEcgKi8KKyAgICAgICAgaWYgKGZyZXF1ZW5jeSA8PSBaTV9DSF9HXzE0KQorICAgICAgICB7CisgICAgICAgICAgICAvKiAyLjRHIC0gQ1RMXzExQiAqLworICAgICAgICAgICAgY3RsX2kgPSB6ZkZpbmRDdGxFZGdlc0luZGV4KGRldiwgZGVzaXJlZF9DdGxJbmRleHxDVExfMTFCKTsKKyAgICAgICAgICAgIGlmKGN0bF9pPEFSNTQxNl9OVU1fQ1RMUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjdGxFZGdlc01heFBvd2VyQ0NLID0gemZHZXRNYXhFZGdlUG93ZXIoZGV2LCBlZXByb21JbWFnZS0+Y3RsRGF0YVtjdGxfaV0uY3RsRWRnZXNbMV0sIGZyZXF1ZW5jeSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAjaWZkZWYgWk1fRU5BQkxFX0JBTkRFREdFU19XSU5ET1dTX0RFQlVHCisgICAgICAgICAgICB6bV9kYmcoKCJDVExfMTFCIGN0bF9pID0gJWRcbiIsIGN0bF9pKSk7CisgICAgICAgICAgICAjZW5kaWYKKworICAgICAgICAgICAgLyogMi40RyAtIENUTF8xMUcgKi8KKyAgICAgICAgICAgIGN0bF9pID0gemZGaW5kQ3RsRWRnZXNJbmRleChkZXYsIGRlc2lyZWRfQ3RsSW5kZXh8Q1RMXzExRyk7CisgICAgICAgICAgICBpZihjdGxfaTxBUjU0MTZfTlVNX0NUTFMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3RsRWRnZXNNYXhQb3dlcjJHID0gemZHZXRNYXhFZGdlUG93ZXIoZGV2LCBlZXByb21JbWFnZS0+Y3RsRGF0YVtjdGxfaV0uY3RsRWRnZXNbMV0sIGZyZXF1ZW5jeSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAjaWZkZWYgWk1fRU5BQkxFX0JBTkRFREdFU19XSU5ET1dTX0RFQlVHCisgICAgICAgICAgICB6bV9kYmcoKCJDVExfMTFHIGN0bF9pID0gJWRcbiIsIGN0bF9pKSk7CisgICAgICAgICAgICAjZW5kaWYKKworICAgICAgICAgICAgLyogMi40RyAtIENUTF8yR0hUMjAgKi8KKyAgICAgICAgICAgIGN0bF9pID0gemZGaW5kQ3RsRWRnZXNJbmRleChkZXYsIGRlc2lyZWRfQ3RsSW5kZXh8Q1RMXzJHSFQyMCk7CisgICAgICAgICAgICBpZihjdGxfaTxBUjU0MTZfTlVNX0NUTFMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3RsRWRnZXNNYXhQb3dlcjJHSFQyMCA9IHpmR2V0TWF4RWRnZVBvd2VyKGRldiwgZWVwcm9tSW1hZ2UtPmN0bERhdGFbY3RsX2ldLmN0bEVkZ2VzWzFdLCBmcmVxdWVuY3kpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIHdvcmthcm91bmQgZm9yIG5vIGRhdGEgaW4gRWVwcm9tLCByZXBsYWNlIGJ5IG5vcm1hbCAyRyAqLworICAgICAgICAgICAgICAgIGN0bEVkZ2VzTWF4UG93ZXIyR0hUMjAgPSBjdGxFZGdlc01heFBvd2VyMkc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAjaWZkZWYgWk1fRU5BQkxFX0JBTkRFREdFU19XSU5ET1dTX0RFQlVHCisgICAgICAgICAgICB6bV9kYmcoKCJDVExfMkdIVDIwIGN0bF9pID0gJWRcbiIsIGN0bF9pKSk7CisgICAgICAgICAgICAjZW5kaWYKKworICAgICAgICAgICAgLyogMi40RyAtIENUTF8yR0hUNDAgKi8KKyAgICAgICAgICAgIGN0bF9pID0gemZGaW5kQ3RsRWRnZXNJbmRleChkZXYsIGRlc2lyZWRfQ3RsSW5kZXh8Q1RMXzJHSFQ0MCk7CisgICAgICAgICAgICBpZihjdGxfaTxBUjU0MTZfTlVNX0NUTFMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3RsRWRnZXNNYXhQb3dlcjJHSFQ0MCA9IHpmR2V0TWF4RWRnZVBvd2VyKGRldiwgZWVwcm9tSW1hZ2UtPmN0bERhdGFbY3RsX2ldLmN0bEVkZ2VzWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmQWRqdXN0SFQ0MEZyZXFPZmZzZXQoZGV2LCBmcmVxdWVuY3ksIGJ3NDAsIGV4dE9mZnNldCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIHdvcmthcm91bmQgZm9yIG5vIGRhdGEgaW4gRWVwcm9tLCByZXBsYWNlIGJ5IG5vcm1hbCAyRyAqLworICAgICAgICAgICAgICAgIGN0bEVkZ2VzTWF4UG93ZXIyR0hUNDAgPSBjdGxFZGdlc01heFBvd2VyMkc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAjaWZkZWYgWk1fRU5BQkxFX0JBTkRFREdFU19XSU5ET1dTX0RFQlVHCisgICAgICAgICAgICB6bV9kYmcoKCJDVExfMkdIVDQwIGN0bF9pID0gJWRcbiIsIGN0bF9pKSk7CisgICAgICAgICAgICAjZW5kaWYKKworCisgICAgICAgICAgICAvKiA3YTE3IDogICovCisgICAgICAgICAgICAvKiBNYXggcG93ZXIgKGRCbSkgZm9yIGNoYW5uZWwgcmFuZ2Ugd2hlbiB1c2luZyBERlMgZGVmaW5lIGJ5IG1hZHdpZmkqLworICAgICAgICAgICAgZm9yIChpPTA7IGk8d2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxDbnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAod2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0uY2hhbm5lbCA9PSBmcmVxdWVuY3kpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoemZIcElzRGZzQ2hhbm5lbChkZXYsICh1MTZfdClmcmVxdWVuY3kpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJmcmVxdWVuY3kgdXNlIERGUyAgLS0gIiwgZnJlcXVlbmN5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0bEVkZ2VzTWF4UG93ZXJDQ0sgICAgID0gem1fbWluKGN0bEVkZ2VzTWF4UG93ZXJDQ0ssIHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW2ldLm1heFJlZ1R4UG93ZXIqMik7CisgICAgICAgICAgICAgICAgICAgICAgICBjdGxFZGdlc01heFBvd2VyMkcgICAgICA9IHptX21pbihjdGxFZGdlc01heFBvd2VyMkcsIHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW2ldLm1heFJlZ1R4UG93ZXIqMik7CisgICAgICAgICAgICAgICAgICAgICAgICBjdGxFZGdlc01heFBvd2VyMkdIVDIwICA9IHptX21pbihjdGxFZGdlc01heFBvd2VyMkdIVDIwLCB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5tYXhSZWdUeFBvd2VyKjIpOworICAgICAgICAgICAgICAgICAgICAgICAgY3RsRWRnZXNNYXhQb3dlcjJHSFQ0MCAgPSB6bV9taW4oY3RsRWRnZXNNYXhQb3dlcjJHSFQ0MCwgd2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0ubWF4UmVnVHhQb3dlcioyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIEFwcGx5IGN0bCBtb2RlIHRvIGNvcnJlY3QgdGFyZ2V0IHBvd2VyIHNldCAqLworICAgICAgICAgICAgI2lmZGVmIFpNX0VOQUJMRV9CQU5ERURHRVNfV0lORE9XU19ERUJVRworICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiY3RsRWRnZXNNYXhQb3dlckNDSyAgICA9ICIsIGN0bEVkZ2VzTWF4UG93ZXJDQ0spOworICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiY3RsRWRnZXNNYXhQb3dlcjJHICAgICA9ICIsIGN0bEVkZ2VzTWF4UG93ZXIyRyk7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJjdGxFZGdlc01heFBvd2VyMkdIVDIwID0gIiwgY3RsRWRnZXNNYXhQb3dlcjJHSFQyMCk7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJjdGxFZGdlc01heFBvd2VyMkdIVDQwID0gIiwgY3RsRWRnZXNNYXhQb3dlcjJHSFQ0MCk7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIGZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBocFByaXYtPnRQb3cyeENja1tpXSA9IHptX21pbihocFByaXYtPnRQb3cyeENja1tpXSwgY3RsRWRnZXNNYXhQb3dlckNDSykgKyBIQUxUWF9QT1dFUl9PRkZTRVQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBocFByaXYtPnRQb3cyeDJnMjRIZWF2eUNsaXBPZmZzZXQgPSAwOworICAgICAgICAgICAgaWYgKGhwUHJpdi0+ZW5hYmxlQkJIZWF2eUNsaXApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3RsT2Zmc2V0ID0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjdGxPZmZzZXQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpPTA7IGk8NDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgoKGZyZXF1ZW5jeSA9PSAyNDEyKSB8fCAoZnJlcXVlbmN5ID09IDI0NjIpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpICE9IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhwUHJpdi0+dFBvdzJ4MmdbaV0gPSB6bV9taW4oaHBQcml2LT50UG93MngyZ1tpXSwgY3RsRWRnZXNNYXhQb3dlcjJHLWN0bE9mZnNldCkgKyBIQUxUWF9QT1dFUl9PRkZTRVQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBocFByaXYtPnRQb3cyeDJnW2ldID0gem1fbWluKGhwUHJpdi0+dFBvdzJ4MmdbaV0sIGN0bEVkZ2VzTWF4UG93ZXIyRykgKyBIQUxUWF9QT1dFUl9PRkZTRVQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaHBQcml2LT50UG93MngyZ1tpXSA+IChjdGxFZGdlc01heFBvd2VyMkctY3RsT2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBocFByaXYtPnRQb3cyeDJnMjRIZWF2eUNsaXBPZmZzZXQgPSBocFByaXYtPnRQb3cyeDJnW2ldIC0gKGN0bEVkZ2VzTWF4UG93ZXIyRy1jdGxPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGhwUHJpdi0+dFBvdzJ4MmdbaV0gPSB6bV9taW4oaHBQcml2LT50UG93MngyZ1tpXSwgY3RsRWRnZXNNYXhQb3dlcjJHKSArIEhBTFRYX1BPV0VSX09GRlNFVDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGk9MDsgaTw4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCgoZnJlcXVlbmN5ID09IDI0MTIpIHx8IChmcmVxdWVuY3kgPT0gMjQ2MikpICYmIChpPj0zKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGhwUHJpdi0+dFBvdzJ4MmdIdDIwW2ldID0gem1fbWluKGhwUHJpdi0+dFBvdzJ4MmdIdDIwW2ldLCBjdGxFZGdlc01heFBvd2VyMkdIVDIwLWN0bE9mZnNldCkgKyBIQUxUWF9QT1dFUl9PRkZTRVQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGhwUHJpdi0+dFBvdzJ4MmdIdDIwW2ldID0gem1fbWluKGhwUHJpdi0+dFBvdzJ4MmdIdDIwW2ldLCBjdGxFZGdlc01heFBvd2VyMkdIVDIwKSArIEhBTFRYX1BPV0VSX09GRlNFVDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGk9MDsgaTw4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChmcmVxdWVuY3kgPT0gMjQxMikgJiYgKGk+PTMpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaHBQcml2LT50UG93MngyZ0h0NDBbaV0gPSB6bV9taW4oaHBQcml2LT50UG93MngyZ0h0NDBbaV0sIGN0bEVkZ2VzTWF4UG93ZXIyR0hUNDAtY3RsT2Zmc2V0KSArIEhBTFRYX1BPV0VSX09GRlNFVDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKGZyZXF1ZW5jeSA9PSAyNDYyKSAmJiAoaT49MykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBocFByaXYtPnRQb3cyeDJnSHQ0MFtpXSA9IHptX21pbihocFByaXYtPnRQb3cyeDJnSHQ0MFtpXSwgY3RsRWRnZXNNYXhQb3dlcjJHSFQ0MC0oY3RsT2Zmc2V0KjIpKSArIEhBTFRYX1BPV0VSX09GRlNFVDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaHBQcml2LT50UG93MngyZ0h0NDBbaV0gPSB6bV9taW4oaHBQcml2LT50UG93MngyZ0h0NDBbaV0sIGN0bEVkZ2VzTWF4UG93ZXIyR0hUNDApICsgSEFMVFhfUE9XRVJfT0ZGU0VUOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIDVHIC0gQ1RMXzExQSAqLworICAgICAgICAgICAgY3RsX2kgPSB6ZkZpbmRDdGxFZGdlc0luZGV4KGRldiwgZGVzaXJlZF9DdGxJbmRleHxDVExfMTFBKTsKKyAgICAgICAgICAgIGlmKGN0bF9pPEFSNTQxNl9OVU1fQ1RMUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjdGxFZGdlc01heFBvd2VyNUcgPSB6ZkdldE1heEVkZ2VQb3dlcihkZXYsIGVlcHJvbUltYWdlLT5jdGxEYXRhW2N0bF9pXS5jdGxFZGdlc1sxXSwgZnJlcXVlbmN5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICNpZmRlZiBaTV9FTkFCTEVfQkFOREVER0VTX1dJTkRPV1NfREVCVUcKKyAgICAgICAgICAgIHptX2RiZygoIkNUTF8xMUEgY3RsX2kgPSAlZFxuIiwgY3RsX2kpKTsKKyAgICAgICAgICAgICNlbmRpZgorCisgICAgICAgICAgICAvKiA1RyAtIENUTF81R0hUMjAgKi8KKyAgICAgICAgICAgIGN0bF9pID0gemZGaW5kQ3RsRWRnZXNJbmRleChkZXYsIGRlc2lyZWRfQ3RsSW5kZXh8Q1RMXzVHSFQyMCk7CisgICAgICAgICAgICBpZihjdGxfaTxBUjU0MTZfTlVNX0NUTFMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3RsRWRnZXNNYXhQb3dlcjVHSFQyMCA9IHpmR2V0TWF4RWRnZVBvd2VyKGRldiwgZWVwcm9tSW1hZ2UtPmN0bERhdGFbY3RsX2ldLmN0bEVkZ2VzWzFdLCBmcmVxdWVuY3kpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIHdvcmthcm91bmQgZm9yIG5vIGRhdGEgaW4gRWVwcm9tLCByZXBsYWNlIGJ5IG5vcm1hbCA1RyAqLworICAgICAgICAgICAgICAgIGN0bEVkZ2VzTWF4UG93ZXI1R0hUMjAgPSBjdGxFZGdlc01heFBvd2VyNUc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAjaWZkZWYgWk1fRU5BQkxFX0JBTkRFREdFU19XSU5ET1dTX0RFQlVHCisgICAgICAgICAgICB6bV9kYmcoKCJDVExfNUdIVDIwIGN0bF9pID0gJWRcbiIsIGN0bF9pKSk7CisgICAgICAgICAgICAjZW5kaWYKKworICAgICAgICAgICAgLyogNUcgLSBDVExfNUdIVDQwICovCisgICAgICAgICAgICBjdGxfaSA9IHpmRmluZEN0bEVkZ2VzSW5kZXgoZGV2LCBkZXNpcmVkX0N0bEluZGV4fENUTF81R0hUNDApOworICAgICAgICAgICAgaWYoY3RsX2k8QVI1NDE2X05VTV9DVExTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGN0bEVkZ2VzTWF4UG93ZXI1R0hUNDAgPSB6ZkdldE1heEVkZ2VQb3dlcihkZXYsIGVlcHJvbUltYWdlLT5jdGxEYXRhW2N0bF9pXS5jdGxFZGdlc1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZkFkanVzdEhUNDBGcmVxT2Zmc2V0KGRldiwgZnJlcXVlbmN5LCBidzQwLCBleHRPZmZzZXQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiB3b3JrYXJvdW5kIGZvciBubyBkYXRhIGluIEVlcHJvbSwgcmVwbGFjZSBieSBub3JtYWwgNUcgKi8KKyAgICAgICAgICAgICAgICBjdGxFZGdlc01heFBvd2VyNUdIVDQwID0gY3RsRWRnZXNNYXhQb3dlcjVHOworICAgICAgICAgICAgfQorICAgICAgICAgICAgI2lmZGVmIFpNX0VOQUJMRV9CQU5ERURHRVNfV0lORE9XU19ERUJVRworICAgICAgICAgICAgem1fZGJnKCgiQ1RMXzVHSFQ0MCBjdGxfaSA9ICVkXG4iLCBjdGxfaSkpOworICAgICAgICAgICAgI2VuZGlmCisKKyAgICAgICAgICAgIC8qIDdhMTcgOiAgKi8KKyAgICAgICAgICAgIC8qIE1heCBwb3dlciAoZEJtKSBmb3IgY2hhbm5lbCByYW5nZSB3aGVuIHVzaW5nIERGUyBkZWZpbmUgYnkgbWFkd2lmaSovCisgICAgICAgICAgICBmb3IgKGk9MDsgaTx3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbENudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5jaGFubmVsID09IGZyZXF1ZW5jeSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICh6ZkhwSXNEZnNDaGFubmVsKGRldiwgKHUxNl90KWZyZXF1ZW5jeSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzEoImZyZXF1ZW5jeSB1c2UgREZTICAtLSAiLCBmcmVxdWVuY3kpOworICAgICAgICAgICAgICAgICAgICAgICAgY3RsRWRnZXNNYXhQb3dlcjVHICAgICAgPSB6bV9taW4oY3RsRWRnZXNNYXhQb3dlcjVHLCB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5tYXhSZWdUeFBvd2VyKjIpOworICAgICAgICAgICAgICAgICAgICAgICAgY3RsRWRnZXNNYXhQb3dlcjVHSFQyMCAgPSB6bV9taW4oY3RsRWRnZXNNYXhQb3dlcjVHSFQyMCwgd2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0ubWF4UmVnVHhQb3dlcioyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0bEVkZ2VzTWF4UG93ZXI1R0hUNDAgID0gem1fbWluKGN0bEVkZ2VzTWF4UG93ZXI1R0hUNDAsIHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW2ldLm1heFJlZ1R4UG93ZXIqMik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisKKyAgICAgICAgICAgIC8qIEFwcGx5IGN0bCBtb2RlIHRvIGNvcnJlY3QgdGFyZ2V0IHBvd2VyIHNldCAqLworICAgICAgICAgICAgI2lmZGVmIFpNX0VOQUJMRV9CQU5ERURHRVNfV0lORE9XU19ERUJVRworICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiY3RsRWRnZXNNYXhQb3dlcjVHICAgICA9ICIsIGN0bEVkZ2VzTWF4UG93ZXI1Ryk7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJjdGxFZGdlc01heFBvd2VyNUdIVDIwID0gIiwgY3RsRWRnZXNNYXhQb3dlcjVHSFQyMCk7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJjdGxFZGdlc01heFBvd2VyNUdIVDQwID0gIiwgY3RsRWRnZXNNYXhQb3dlcjVHSFQ0MCk7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIGZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBocFByaXYtPnRQb3cyeDVnW2ldID0gem1fbWluKGhwUHJpdi0+dFBvdzJ4NWdbaV0sIGN0bEVkZ2VzTWF4UG93ZXI1RykgKyBIQUxUWF9QT1dFUl9PRkZTRVQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGk9MDsgaTw4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaHBQcml2LT50UG93Mng1Z0h0MjBbaV0gPSB6bV9taW4oaHBQcml2LT50UG93Mng1Z0h0MjBbaV0sIGN0bEVkZ2VzTWF4UG93ZXI1R0hUMjApICsgSEFMVFhfUE9XRVJfT0ZGU0VUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpPTA7IGk8ODsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGhwUHJpdi0+dFBvdzJ4NWdIdDQwW2ldID0gem1fbWluKGhwUHJpdi0+dFBvdzJ4NWdIdDQwW2ldLCBjdGxFZGdlc01heFBvd2VyNUdIVDQwKSArIEhBTFRYX1BPV0VSX09GRlNFVDsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9LyogZW5kIG9mIGJhbmRlZGdlcyBvZiA1RyAqLworICAgIH0vKiBlbmQgb2YgIGlmICgoZGVzaXJlZF9DdGxJbmRleCA9IHpmSHBHZXRSZWd1bGF0b3J5RG9tYWluKGRldikpID09IDApICovCisKKyAgICAvKiB3b3JrYXJvdW5kICovCisgICAgLyogNS4gQkIgaGVhdnkgY2xpcCAqLworICAgIC8qICAgIG9ubHkgMi40RyBkbyBoZWF2eSBjbGlwICovCisgICAgaWYgKGhwUHJpdi0+ZW5hYmxlQkJIZWF2eUNsaXAgJiYgaHBQcml2LT5od0JCSGVhdnlDbGlwICYmIChmcmVxdWVuY3kgPD0gWk1fQ0hfR18xNCkpCisgICAgeworICAgICAgICBpZiAoZnJlcXVlbmN5IDw9IFpNX0NIX0dfMTQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGN0bF9pID0gemZGaW5kQ3RsRWRnZXNJbmRleChkZXYsIGRlc2lyZWRfQ3RsSW5kZXh8Q1RMXzExRyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBjdGxfaSA9IHpmRmluZEN0bEVkZ2VzSW5kZXgoZGV2LCBkZXNpcmVkX0N0bEluZGV4fENUTF8xMUEpOworICAgICAgICB9CisKKyAgICAgICAgaHBQcml2LT5zZXRWYWx1ZUhlYXZ5Q2xpcCA9IHpmSHBDaGVja0RvSGVhdnlDbGlwKGRldiwgZnJlcXVlbmN5LCBlZXByb21JbWFnZS0+Y3RsRGF0YVtjdGxfaV0uY3RsRWRnZXNbMV0sIGJ3NDApOworCisgICAgICAgIGlmIChocFByaXYtPnNldFZhbHVlSGVhdnlDbGlwKQorICAgICAgICB7CisgICAgICAgICAgICBocFByaXYtPmRvQkJIZWF2eUNsaXAgPSAxOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaHBQcml2LT5kb0JCSGVhdnlDbGlwID0gMDsKKyAgICAgICAgfQorICAgICAgICAjaWZkZWYgWk1fRU5BQkxFX0JBTkRFREdFU19XSU5ET1dTX0RFQlVHCisgICAgICAgIHptX2RiZygoInpmSHBDaGVja0RvSGVhdnlDbGlwIHJldCA9ICUwMngsIGRvQkJIZWF2eUNsaXAgPSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgaHBQcml2LT5zZXRWYWx1ZUhlYXZ5Q2xpcCwgaHBQcml2LT5kb0JCSGVhdnlDbGlwKSk7CisgICAgICAgICNlbmRpZgorCisgICAgICAgIGlmIChocFByaXYtPmRvQkJIZWF2eUNsaXApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChocFByaXYtPnNldFZhbHVlSGVhdnlDbGlwICYgMHhmMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBocFByaXYtPnRQb3cyeDJnSHQ0MFswXSAtPSAxOworICAgICAgICAgICAgICAgIGhwUHJpdi0+dFBvdzJ4MmdIdDQwWzFdIC09IDE7CisgICAgICAgICAgICAgICAgaHBQcml2LT50UG93MngyZ0h0NDBbMl0gLT0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGhwUHJpdi0+c2V0VmFsdWVIZWF2eUNsaXAgJiAweGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaHBQcml2LT50UG93MngyZ0h0MjBbMF0gKz0gMTsKKyAgICAgICAgICAgICAgICBocFByaXYtPnRQb3cyeDJnSHQyMFsxXSArPSAxOworICAgICAgICAgICAgICAgIGhwUHJpdi0+dFBvdzJ4MmdIdDIwWzJdICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaHBQcml2LT5kb0JCSGVhdnlDbGlwID0gMDsKKyAgICAgICAgaHBQcml2LT5zZXRWYWx1ZUhlYXZ5Q2xpcCA9IDA7CisgICAgfQorCisgICAgLyogRmluYWwgOiB3cml0ZSBNQUMgcmVnaXN0ZXIgZm9yIHNvbWUgY3RybCBmcmFtZSBUeCBwb3dlciAqLworICAgIC8qIGZpcnN0IHBhcnQgOiAyLjRHICovCisgICAgaWYgKGZyZXF1ZW5jeSA8PSBaTV9DSF9HXzE0KQorICAgIHsKKyAgICAgICAgLyogV3JpdGUgTUFDIHJlZyAweDY5NCBmb3IgQUNLJ3MgVFBDICovCisgICAgICAgIC8qIFdyaXRlIE1BQyByZWcgMHhiYjQgUlRTIGFuZCBTRi1DVFMgZnJhbWUgcG93ZXIgY29udHJvbCAqLworICAgICAgICAvKiBBbHdheXMgdXNlIHR3byBzdHJlYW0gZm9yIGxvdyBsZWdhY3kgcmF0ZSAqLworICAgICAgICAjaWYgMAorICAgICAgICAvL2lmIChocFByaXYtPmhhbENhcGFiaWxpdHkgJiBaTV9IUF9DQVBfMTFOX09ORV9UWF9TVFJFQU0pCisgICAgICAgIC8veworICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFjMzY5NCwgKChocFByaXYtPnRQb3cyeDJnWzBdJjB4M2YpIDw8IDIwKSB8ICgweDE8PDI2KSk7CisgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWMzYmI0LCAoKGhwUHJpdi0+dFBvdzJ4MmdbMF0mMHgzZikgPDwgNSApIHwgKDB4MTw8MTEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaHBQcml2LT50UG93MngyZ1swXSYweDNmKSA8PCAyMSkgfCAoMHgxPDwyNykgICk7CisgICAgICAgIC8vfQorICAgICAgICAjZW5kaWYKKyAgICAgICAgI2lmIDEKKyAgICAgICAgLy9lbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICNpZm5kZWYgWk1fT1RVU19MSU5VWF9QSEFTRV8yCisgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWMzNjk0LCAoKGhwUHJpdi0+dFBvdzJ4MmdbMF0mMHgzZikgPDwgMjApIHwgKDB4NTw8MjYpKTsKKyAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzNiYjQsICgoaHBQcml2LT50UG93MngyZ1swXSYweDNmKSA8PCA1ICkgfCAoMHg1PDwxMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChocFByaXYtPnRQb3cyeDJnWzBdJjB4M2YpIDw8IDIxKSB8ICgweDU8PDI3KSAgKTsKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgaHBQcml2LT5jdXJyZW50QWNrUnRzVHBjID0gaHBQcml2LT50UG93MngyZ1swXTsKKyAgICAJfQorICAgICAgICAjZW5kaWYKKyAgICAgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKworICAgICAgICB6ZlByaW50VGFyZ2V0UG93ZXIyRyhocFByaXYtPnRQb3cyeENjaywKKyAgICAgICAgICAgICAgICBocFByaXYtPnRQb3cyeDJnLAorICAgICAgICAgICAgICAgIGhwUHJpdi0+dFBvdzJ4MmdIdDIwLAorICAgICAgICAgICAgICAgIGhwUHJpdi0+dFBvdzJ4MmdIdDQwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogV3JpdGUgTUFDIHJlZyAweDY5NCBmb3IgQUNLJ3MgVFBDICovCisgICAgICAgIC8qIFdyaXRlIE1BQyByZWcgMHhiYjQgUlRTIGFuZCBTRi1DVFMgZnJhbWUgcG93ZXIgY29udHJvbCAqLworICAgICAgICAvKiBBbHdheXMgdXNlIHR3byBzdHJlYW0gZm9yIGxvdyBsZWdhY3kgcmF0ZSAqLworICAgICAgICBpZiAoaHBQcml2LT5oYWxDYXBhYmlsaXR5ICYgWk1fSFBfQ0FQXzExTl9PTkVfVFhfU1RSRUFNKQorICAgICAgICB7CisgICAgICAgICAgICAjaWZuZGVmIFpNX09UVVNfTElOVVhfUEhBU0VfMgorICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFjMzY5NCwgKChocFByaXYtPnRQb3cyeDVnWzBdJjB4M2YpIDw8IDIwKSB8ICgweDE8PDI2KSk7CisgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWMzYmI0LCAoKGhwUHJpdi0+dFBvdzJ4NWdbMF0mMHgzZikgPDwgNSApIHwgKDB4MTw8MTEpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoaHBQcml2LT50UG93Mng1Z1swXSYweDNmKSA8PCAyMSkgfCAoMHgxPDwyNykgICk7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICNpZm5kZWYgWk1fT1RVU19MSU5VWF9QSEFTRV8yCisgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWMzNjk0LCAoKGhwUHJpdi0+dFBvdzJ4NWdbMF0mMHgzZikgPDwgMjApIHwgKDB4NTw8MjYpKTsKKyAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzNiYjQsICgoaHBQcml2LT50UG93Mng1Z1swXSYweDNmKSA8PCA1ICkgfCAoMHg1PDwxMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChocFByaXYtPnRQb3cyeDVnWzBdJjB4M2YpIDw8IDIxKSB8ICgweDU8PDI3KSAgKTsKKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgaHBQcml2LT5jdXJyZW50QWNrUnRzVHBjID0gaHBQcml2LT50UG93MngyZ1swXTsKKyAgICAgICAgfQorCisKKyAgICAgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKworICAgICAgICB6ZlByaW50VGFyZ2V0UG93ZXI1RygKKyAgICAgICAgICAgICAgICBocFByaXYtPnRQb3cyeDVnLAorICAgICAgICAgICAgICAgIGhwUHJpdi0+dFBvdzJ4NWdIdDIwLAorICAgICAgICAgICAgICAgIGhwUHJpdi0+dFBvdzJ4NWdIdDQwKTsKKyAgICB9LyogZW5kIG9mIGJhbmRlZGdlcyBvZiA1RyAqLworCit9CisKK3ZvaWQgemZEdW1wRWVwQmFuZEVkZ2VzKHN0cnVjdCBhcjU0MTZFZXByb20qIGVlcHJvbUltYWdlKQoreworICAgICNpZmRlZiBaTV9FTkFCTEVfQkFOREVER0VTX1dJTkRPV1NfREVCVUcKKyAgICB1OF90IGksIGosIGs7CisKKyNpZiAwCisgICAgem1fZGJnKCgiXG4gPT09IEJhbmRFZGdlcyBpbmRleCBkdW1wID09PT0gXG4iKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X05VTV9DVExTOyBpKyspCisgICAgeworICAgICAgICB6bV9kYmcoKCIlMDJ4ICIsIGVlcHJvbUltYWdlLT5jdGxJbmRleFtpXSkpOworICAgIH0KKworICAgIHptX2RiZygoIlxuID09PSBCYW5kRWRnZXMgZGF0YSBkdW1wID09PT0gXG4iKSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X05VTV9DVExTOyBpKyspCisgICAgeworICAgICAgICBmb3IgKGogPSAwOyBqIDwgMjsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IoayA9IDA7IGsgPCBBUjU0MTZfTlVNX0JBTkRfRURHRVM7IGsrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1OF90ICpwZGF0YSA9ICh1OF90KikmKGVlcHJvbUltYWdlLT5jdGxEYXRhW2ldLmN0bEVkZ2VzW2pdW2tdKTsKKyAgICAgICAgICAgICAgICB6bV9kYmcoKCIoJTAyeCAlMDJ4KSIsIHBkYXRhWzBdLCBwZGF0YVsxXSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgem1fZGJnKCgiXG4iKSk7CisgICAgICAgIH0KKyAgICB9CisjZWxzZQorICAgIHptX2RiZygoIlxuID09PSBCYW5kRWRnZXMgaW5kZXggZHVtcCA9PT09IFxuIikpOworICAgIGZvciAoaSA9IDA7IGkgPCAyNDsgaSs9OCkKKyAgICB7CisgICAgICAgIHptX2RiZygoIiUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCIsCisgICAgICAgICAgICAgICBlZXByb21JbWFnZS0+Y3RsSW5kZXhbaSswXSwgZWVwcm9tSW1hZ2UtPmN0bEluZGV4W2krMV0sIGVlcHJvbUltYWdlLT5jdGxJbmRleFtpKzJdLCBlZXByb21JbWFnZS0+Y3RsSW5kZXhbaSszXSwKKyAgICAgICAgICAgICAgIGVlcHJvbUltYWdlLT5jdGxJbmRleFtpKzRdLCBlZXByb21JbWFnZS0+Y3RsSW5kZXhbaSs1XSwgZWVwcm9tSW1hZ2UtPmN0bEluZGV4W2krNl0sIGVlcHJvbUltYWdlLT5jdGxJbmRleFtpKzddCisgICAgICAgICAgICAgICApKTsKKyAgICB9CisKKyAgICB6bV9kYmcoKCJcbiA9PT0gQmFuZEVkZ2VzIGRhdGEgZHVtcCA9PT09IFxuIikpOworCisgICAgZm9yIChpID0gMDsgaSA8IEFSNTQxNl9OVU1fQ1RMUzsgaSsrKQorICAgIHsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IDI7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgdThfdCAqcGRhdGEgPSAodThfdCopJihlZXByb21JbWFnZS0+Y3RsRGF0YVtpXS5jdGxFZGdlc1tqXSk7CisgICAgICAgICAgICB6bV9kYmcoKCIoJTAzZCAlMDJ4KSAoJTAzZCAlMDJ4KSAoJTAzZCAlMDJ4KSAoJTAzZCAlMDJ4KSBcbiIsCisgICAgICAgICAgICAgICAgICAgcGRhdGFbMF0sIHBkYXRhWzFdLCBwZGF0YVsyXSwgcGRhdGFbM10sCisgICAgICAgICAgICAgICAgICAgcGRhdGFbNF0sIHBkYXRhWzVdLCBwZGF0YVs2XSwgcGRhdGFbN10KKyAgICAgICAgICAgICAgICAgICApKTsKKyAgICAgICAgICAgIHptX2RiZygoIiglMDNkICUwMngpICglMDNkICUwMngpICglMDNkICUwMngpICglMDNkICUwMngpIFxuIiwKKyAgICAgICAgICAgICAgICAgICBwZGF0YVs4XSwgcGRhdGFbOV0sIHBkYXRhWzEwXSwgcGRhdGFbMTFdLAorICAgICAgICAgICAgICAgICAgIHBkYXRhWzEyXSwgcGRhdGFbMTNdLCBwZGF0YVsxNF0sIHBkYXRhWzE1XQorICAgICAgICAgICAgICAgICAgICkpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgI2VuZGlmCit9CisKK3ZvaWQgemZQcmludFRhcmdldFBvd2VyMkcodThfdCogdFBvdzJ4Q2NrLCB1OF90KiB0UG93MngyZywgdThfdCogdFBvdzJ4MmdIdDIwLCB1OF90KiB0UG93MngyZ0h0NDApCit7CisgICAgLy8jaWZkZWYgWk1fRU5BQkxFX1RQQ19XSU5ET1dTX0RFQlVHCisgICAgI2lmZGVmIFpNX0VOQUJMRV9CQU5ERURHRVNfV0lORE9XU19ERUJVRworICAgIERiZ1ByaW50KCJ0YXJnZXRQd3IgQ0NLIDogJWQsICVkLCAlZCwgJWRcbiIsCisgICAgICAgICAgICB0UG93MnhDY2tbMF0sCisgICAgICAgICAgICB0UG93MnhDY2tbMV0sCisgICAgICAgICAgICB0UG93MnhDY2tbMl0sCisgICAgICAgICAgICB0UG93MnhDY2tbM10KKyAgICAgICAgICAgICk7CisgICAgRGJnUHJpbnQoInRhcmdldFB3ciAyRyA6ICVkLCAlZCwgJWQsICVkXG4iLAorICAgICAgICAgICAgdFBvdzJ4MmdbMF0sCisgICAgICAgICAgICB0UG93MngyZ1sxXSwKKyAgICAgICAgICAgIHRQb3cyeDJnWzJdLAorICAgICAgICAgICAgdFBvdzJ4MmdbM10KKyAgICAgICAgICAgICk7CisgICAgRGJnUHJpbnQoInRhcmdldFB3ciAyR0hUMjAgOiAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWRcbiIsCisgICAgICAgICAgICB0UG93MngyZ0h0MjBbMF0sCisgICAgICAgICAgICB0UG93MngyZ0h0MjBbMV0sCisgICAgICAgICAgICB0UG93MngyZ0h0MjBbMl0sCisgICAgICAgICAgICB0UG93MngyZ0h0MjBbM10sCisgICAgICAgICAgICB0UG93MngyZ0h0MjBbNF0sCisgICAgICAgICAgICB0UG93MngyZ0h0MjBbNV0sCisgICAgICAgICAgICB0UG93MngyZ0h0MjBbNl0sCisgICAgICAgICAgICB0UG93MngyZ0h0MjBbN10KKyAgICAgICAgICAgICk7CisgICAgRGJnUHJpbnQoInRhcmdldFB3ciAyR0hUNDAgOiAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWRcbiIsCisgICAgICAgICAgICB0UG93MngyZ0h0NDBbMF0sCisgICAgICAgICAgICB0UG93MngyZ0h0NDBbMV0sCisgICAgICAgICAgICB0UG93MngyZ0h0NDBbMl0sCisgICAgICAgICAgICB0UG93MngyZ0h0NDBbM10sCisgICAgICAgICAgICB0UG93MngyZ0h0NDBbNF0sCisgICAgICAgICAgICB0UG93MngyZ0h0NDBbNV0sCisgICAgICAgICAgICB0UG93MngyZ0h0NDBbNl0sCisgICAgICAgICAgICB0UG93MngyZ0h0NDBbN10KKyAgICAgICAgICAgICk7CisgICAgI2VuZGlmCisgICAgcmV0dXJuOworfQorCit2b2lkIHpmUHJpbnRUYXJnZXRQb3dlcjVHKHU4X3QqIHRQb3cyeDVnLCB1OF90KiB0UG93Mng1Z0h0MjAsIHU4X3QqIHRQb3cyeDVnSHQ0MCkKK3sKKyAgICAvLyNpZmRlZiBaTV9FTkFCTEVfVFBDX1dJTkRPV1NfREVCVUcKKyAgICAjaWZkZWYgWk1fRU5BQkxFX0JBTkRFREdFU19XSU5ET1dTX0RFQlVHCisgICAgRGJnUHJpbnQoInRhcmdldFB3ciA1RyA6ICVkLCAlZCwgJWQsICVkXG4iLAorICAgICAgICAgICAgdFBvdzJ4NWdbMF0sCisgICAgICAgICAgICB0UG93Mng1Z1sxXSwKKyAgICAgICAgICAgIHRQb3cyeDVnWzJdLAorICAgICAgICAgICAgdFBvdzJ4NWdbM10KKyAgICAgICAgICAgICk7CisgICAgRGJnUHJpbnQoInRhcmdldFB3ciA1R0hUMjAgOiAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWRcbiIsCisgICAgICAgICAgICB0UG93Mng1Z0h0MjBbMF0sCisgICAgICAgICAgICB0UG93Mng1Z0h0MjBbMV0sCisgICAgICAgICAgICB0UG93Mng1Z0h0MjBbMl0sCisgICAgICAgICAgICB0UG93Mng1Z0h0MjBbM10sCisgICAgICAgICAgICB0UG93Mng1Z0h0MjBbNF0sCisgICAgICAgICAgICB0UG93Mng1Z0h0MjBbNV0sCisgICAgICAgICAgICB0UG93Mng1Z0h0MjBbNl0sCisgICAgICAgICAgICB0UG93Mng1Z0h0MjBbN10KKyAgICAgICAgICAgICk7CisgICAgRGJnUHJpbnQoInRhcmdldFB3ciA1R0hUNDAgOiAlZCwgJWQsICVkLCAlZCwgJWQsICVkLCAlZCwgJWRcbiIsCisgICAgICAgICAgICB0UG93Mng1Z0h0NDBbMF0sCisgICAgICAgICAgICB0UG93Mng1Z0h0NDBbMV0sCisgICAgICAgICAgICB0UG93Mng1Z0h0NDBbMl0sCisgICAgICAgICAgICB0UG93Mng1Z0h0NDBbM10sCisgICAgICAgICAgICB0UG93Mng1Z0h0NDBbNF0sCisgICAgICAgICAgICB0UG93Mng1Z0h0NDBbNV0sCisgICAgICAgICAgICB0UG93Mng1Z0h0NDBbNl0sCisgICAgICAgICAgICB0UG93Mng1Z0h0NDBbN10KKyAgICAgICAgICAgICk7CisgICAgI2VuZGlmCisgICAgcmV0dXJuOworfQorCit2b2lkIHpmSHBQb3dlclNhdmVTZXRNb2RlKHpkZXZfdCogZGV2LCB1OF90IHN0YU1vZGUsIHU4X3QgcHNNb2RlLCB1MTZfdCBiY25JbnRlcnZhbCkKK3sKKyAgICBpZiAoIHN0YU1vZGUgPT0gMCApCisgICAgeworICAgICAgICBpZiAoIHBzTW9kZSA9PSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVHVybiBvZmYgcHJlLVRCVFQgaW50ZXJydXB0CisgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfUFJFVEJUVCwgMCk7CisgICAgICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfQkNOX1BFUklPRCwgMCk7CisgICAgICAgICAgICB6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVHVybiBvbiBwcmUtVEJUVCBpbnRlcnJ1cHQKKyAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19QUkVUQlRULCAoYmNuSW50ZXJ2YWwtNik8PDE2KTsKKyAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19CQ05fUEVSSU9ELCBiY25JbnRlcnZhbCk7CisgICAgICAgICAgICB6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHpmSHBQb3dlclNhdmVTZXRTdGF0ZSh6ZGV2X3QqIGRldiwgdThfdCBwc1N0YXRlKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CisKKwkvL0RiZ1ByaW50KCJJTlRPIHpmSHBQb3dlclNhdmVTZXRTdGF0ZSIpOworCisgICAgaWYgKCBwc1N0YXRlID09IDAgKSAvL3Bvd2VyIHVwCisgICAgeworICAgICAgICAvL0RiZ1ByaW50KCJ6ZkhwUG93ZXJTYXZlU2V0U3RhdGUgV2FrZSB1cCBmcm9tIFBTXG4iKTsKKyAgICAgICAgcmVnX3dyaXRlKDB4OTgyQywgMHgwMDAwYTAwMCk7IC8vd2FrZSB1cCBBRERBQworICAgICAgICByZWdfd3JpdGUoMHg5ODA4LCAweDApOyAgICAgICAgLy9lbmFibGUgYWxsIGFnYyBnYWluIGFuZCBvZmZzZXQgdXBkYXRlcyB0byBhMgorICAgICAgICAvLyMgYmFuayAzCisgICAgICAgIGlmICgoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmh3RnJlcXVlbmN5IDw9IFpNX0NIX0dfMTQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIDExZyAqLworICAgICAgICAgICAgLy9yZWdfd3JpdGUgKDB4OThmMCwgIDB4MDFjMDAwMTgpOworICAgICAgICAgICAgcmVnX3dyaXRlICgweDk4ZjAsICAweDAxYzIwMDk4KTsvL3N5bl9vbitSWF9PTgorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogMTFhICovCisgICAgICAgICAgICAvL3JlZ193cml0ZSAoMHg5OGYwLCAgMHgwMTQwMDAxOCk7CisgICAgICAgICAgICByZWdfd3JpdGUgKDB4OThmMCwgIDB4MDE0MjAwOTgpOy8vc3luX29uK1JYX09OCisgICAgICAgIH0KKworICAgICAgICAvLy8vI2JhbmsgNQorICAgICAgICAvL3JlZ193cml0ZSgweDk4YjAsICAweDAwMDAwMDEzKTsKKyAgICAgICAgLy9yZWdfd3JpdGUoMHg5OGU0LCAgMHgwMDAwMDAwMik7CisKKworICAgICAgICB6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworICAgIH0KKyAgICBlbHNlIC8vcG93ZXIgZG93bgorICAgIHsKKyAgICAgICAgLy9EYmdQcmludCgiemZIcFBvd2VyU2F2ZVNldFN0YXRlIEdvIHRvIFBTXG4iKTsKKyAgICAgICAgLy9yZWdfd3JpdGUoMHg5ODJDLCAweGEwMDBhMDAwKTsKKyAgICAgICAgcmVnX3dyaXRlKDB4OTgwOCwgMHg4MDAwMDAwKTsgICAgLy9kaXNhYmxlIGFsbCBhZ2MgZ2FpbiBhbmQgb2Zmc2V0IHVwZGF0ZXMgdG8gYTIKKyAgICAgICAgcmVnX3dyaXRlKDB4OTgyQywgMHhhMDAwYTAwMCk7ICAgLy9wb3dlciBkb3duIEFEREFDCisgICAgICAgIC8vIyBiYW5rIDMKKyAgICAgICAgaWYgKCgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aHdGcmVxdWVuY3kgPD0gWk1fQ0hfR18xNCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogMTFnICovCisgICAgICAgICAgICByZWdfd3JpdGUgKDB4OThmMCwgIDB4MDBjMDAwMTgpOy8vc3luX29mZitSWF9vZmYKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIDExYSAqLworICAgICAgICAgICAgcmVnX3dyaXRlICgweDk4ZjAsICAweDAwNDAwMDE4KTsvL3N5bl9vZmYrUlhfb2ZmCisgICAgICAgIH0KKworICAgICAgICAvLy8vI2JhbmsgNQorICAgICAgICAvL3JlZ193cml0ZSgweDk4YjAsICAweDAwMGUwMDEzKTsKKyAgICAgICAgLy9yZWdfd3JpdGUoMHg5OGU0LCAgMHgwMDAxODAwMik7CisKKworICAgICAgICB6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworICAgIH0KK30KKwordm9pZCB6ZkhwU2V0QWdnUGt0TnVtKHpkZXZfdCogZGV2LCB1MzJfdCBudW0pCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKKworICAgIG51bSA9IChudW0gPDwgMTYpIHwgKDB4YSk7CisKKyAgICBocFByaXYtPmFnZ1BrdE51bSA9IG51bTsKKworICAgIC8vYWdncmVnYXRpb24gbnVtYmVyIHdpbGwgYmUgdXBkYXRlIGluIEhBTCBoZWFydCBiZWF0CisgICAgLy96ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWMzYjljLCBudW0pOworICAgIC8vemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKK30KKwordm9pZCB6ZkhwU2V0TVBEVURlbnNpdHkoemRldl90KiBkZXYsIHU4X3QgZGVuc2l0eSkKK3sKKyAgICB1MzJfdCB2YWx1ZTsKKworICAgIGlmIChkZW5zaXR5ID4gWk1fTVBEVV9ERU5TSVRZXzhVUykKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBEZWZhdWx0IHZhbHVlIGluIHRoaXMgcmVnaXN0ZXIgKi8KKyAgICB2YWx1ZSA9IDB4MTQwQTAwIHwgZGVuc2l0eTsKKworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzNiYTAsIHZhbHVlKTsKKyAgICB6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworICAgIHJldHVybjsKK30KKwordm9pZCB6ZkhwU2V0U2xvdFRpbWUoemRldl90KiBkZXYsIHU4X3QgdHlwZSkKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXYgPSB3ZC0+aHBQcml2YXRlOworCisgICAgaWYgKHR5cGUgPT0gMCkKKyAgICB7CisgICAgICAgIC8vbm9ybWFsIHNsb3QgPSAyMHVzCisgICAgICAgIGhwUHJpdi0+c2xvdFR5cGUgPSAwOworICAgIH0KKyAgICBlbHNlIC8vaWYgKHR5cGUgPT0gMSkKKyAgICB7CisgICAgICAgIC8vc2hvcnQgc2xvdCA9IDl1cworICAgICAgICBocFByaXYtPnNsb3RUeXBlID0gMTsKKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgemZIcFNldFNsb3RUaW1lUmVnaXN0ZXIoemRldl90KiBkZXYsIHU4X3QgdHlwZSkKK3sKKyAgICBpZih0eXBlID09IDApCisgICAgeworICAgICAgICAvL25vcm1hbCBzbG90ID0gMjB1cworICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfU0xPVF9USU1FLCAyMDw8MTApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvL3Nob3J0IHNsb3QgPSA5dXMKKyAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX1NMT1RfVElNRSwgOTw8MTApOworICAgIH0KK30KKwordm9pZCB6ZkhwU2V0Umlmcyh6ZGV2X3QqIGRldiwgdThfdCBodF9lbmFibGUsIHU4X3QgaHQyMDQwLCB1OF90IGdfbW9kZSkKK3sKKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWM2Mzg4LCAweDBjMDAwMDAwKTsKKworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzU5ZWMsIDB4MGNjODBjYWEpOworCisgICAgaWYgKGh0X2VuYWJsZSkKKyAgICB7CisgICAgICAgIGlmIChodDIwNDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzU5MTgsIDQwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzU5MTgsIDIwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChnX21vZGUpCisgICAgeworICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWM1ODUwLCAweGVjMDhiNGUyKTsKKyAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFjNTg1YywgMHgzMTNhNWQ1ZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzU4NTAsIDB4ZWRlOGI0ZTApOworICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWM1ODVjLCAweDMxMzk2MDVlKTsKKyAgICB9CisKKyAgICB6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworICAgIHJldHVybjsKK30KKwordm9pZCB6ZkhwQmVnaW5TaXRlU3VydmV5KHpkZXZfdCogZGV2LCB1OF90IHN0YXR1cykKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKworICAgIGlmICggc3RhdHVzID09IDEgKQorICAgIHsgLy8gQ29ubmVjdGVkCisgICAgICAgIGhwUHJpdi0+aXNTaXRlU3VydmV5ID0gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsgLy8gTm90IGNvbm5lY3RlZAorICAgICAgICBocFByaXYtPmlzU2l0ZVN1cnZleSA9IDA7CisgICAgfQorCisgICAgLyogcmVzZXQgd29ya2Fyb3VuZCBzdGF0ZSB0byBkZWZhdWx0ICovCisvLyAgICBpZiAoaHBQcml2LT5yeFN0cm9uZ1JTU0kgPT0gMSkKKyAgICB7CisgICAgICAgIGhwUHJpdi0+cnhTdHJvbmdSU1NJID0gMDsKKyAgICAgICAgaWYgKChocFByaXYtPmVlcHJvbUltYWdlWzB4MTAwKzB4MTEwKjIvNF0mMHhmZikgPT0gMHg4MCkgLy9GRU0gVFlQRQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaHBQcml2LT5od0ZyZXF1ZW5jeSA8PSBaTV9DSF9HXzE0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzg5NjAsIDB4OWI0OSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFjODk2MCwgMHgwOTAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzg5NjAsIDB4OWI0MCk7CisgICAgICAgIH0KKyAgICAgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKyAgICB9CisvLyAgICBpZiAoaHBQcml2LT5zdHJvbmdSU1NJID09IDEpCisgICAgeworICAgICAgICBocFByaXYtPnN0cm9uZ1JTU0kgPSAwOworICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWMzNjk0LCAoKGhwUHJpdi0+Y3VycmVudEFja1J0c1RwYyYweDNmKSA8PCAyMCkgfCAoMHg1PDwyNikpOworICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWMzYmI0LCAoKGhwUHJpdi0+Y3VycmVudEFja1J0c1RwYyYweDNmKSA8PCA1ICkgfCAoMHg1PDwxMSkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGhwUHJpdi0+Y3VycmVudEFja1J0c1RwYyYweDNmKSA8PCAyMSkgfCAoMHg1PDwyNykgICk7CisgICAgICAgIHpmRmx1c2hEZWxheVdyaXRlKGRldik7CisgICAgfQorfQorCit2b2lkIHpmSHBGaW5pc2hTaXRlU3VydmV5KHpkZXZfdCogZGV2LCB1OF90IHN0YXR1cykKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIGlmICggc3RhdHVzID09IDEgKQorICAgIHsKKyAgICAgICAgaHBQcml2LT5pc1NpdGVTdXJ2ZXkgPSAyOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBocFByaXYtPmlzU2l0ZVN1cnZleSA9IDA7CisgICAgfQorICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7Cit9CisKK3UxNl90IHpmRndSZXRyeSh6ZGV2X3QqIGRldiwgdThfdCBlbmFibGUpCit7CisgICAgdTMyX3QgY21kWyhaTV9NQVhfQ01EX1NJWkUvNCldOworICAgIHUxNl90IHJldCA9IDA7CisKKyAgICBjbWRbMF0gPSA0IHwgKDB4OTIgPDwgOCk7CisgICAgY21kWzFdID0gKGVuYWJsZSA9PSAxKSA/IDB4MDEgOiAweDAwOworCisgICAgcmV0ID0gemZJc3N1ZUNtZChkZXYsIGNtZCwgOCwgWk1fT0lEX0lOVEVSTkFMX1dSSVRFLCBOVUxMKTsKKyAgICByZXR1cm4gcmV0OworfQorCit1MTZfdCB6ZkhwRW5hYmxlSHdSZXRyeSh6ZGV2X3QqIGRldikKK3sKKyAgICB1MTZfdCByZXQ7CisKKyAgICByZXQgPSB6ZkZ3UmV0cnkoZGV2LCAwKTsKKworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzNiMjgsIDB4MzMzMzMpOworICAgIHpmRmx1c2hEZWxheVdyaXRlKGRldik7CisKKyAgICByZXR1cm4gcmV0OworfQorCit1MTZfdCB6ZkhwRGlzYWJsZUh3UmV0cnkoemRldl90KiBkZXYpCit7CisgICAgdTE2X3QgcmV0OworCisgICAgcmV0ID0gemZGd1JldHJ5KGRldiwgMSk7CisKKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MWMzYjI4LCAweDAwMDAwKTsKKyAgICB6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworCisgICAgcmV0dXJuIHJldDsKK30KKworLyogRG93bmxvYWQgU1BJIEZ3ICovCisjZGVmaW5lIFpNX0ZJUk1XQVJFX1dMQU4gICAgICAgICAgICAgICAgMAorI2RlZmluZSBaTV9GSVJNV0FSRV9TUElfRkxBU0ggICAgICAgICAgIDEKKworCit1MTZfdCB6ZkhwRmlybXdhcmVEb3dubG9hZCh6ZGV2X3QqIGRldiwgdThfdCBmd1R5cGUpCit7CisgICAgdTE2X3QgcmV0ID0gWk1fU1VDQ0VTUzsKKworICAgIGlmIChmd1R5cGUgPT0gWk1fRklSTVdBUkVfV0xBTikKKyAgICB7CisgICAgICAgIHJldCA9IHpmRmlybXdhcmVEb3dubG9hZChkZXYsICh1MzJfdCopemNGd0ltYWdlLAorICAgICAgICAgICAgICAgICh1MzJfdCl6Y0Z3SW1hZ2VTaXplLCBaTV9GSVJNV0FSRV9XTEFOX0FERFIpOworICAgIH0KKyAgICBlbHNlIGlmIChmd1R5cGUgPT0gWk1fRklSTVdBUkVfU1BJX0ZMQVNIKQorICAgIHsKKyAgICAgICAgcmV0ID0gemZGaXJtd2FyZURvd25sb2FkKGRldiwgKHUzMl90Kil6Y0Z3SW1hZ2VTUEksCisgICAgICAgICAgICAgICAgKHUzMl90KXpjRndJbWFnZVNQSVNpemUsIFpNX0ZJUk1XQVJFX1NQSV9BRERSKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgem1fZGVidWdfbXNnMSgiVW5rbm93biBmaXJtd2FyZSB0eXBlID0gIiwgZndUeXBlKTsKKyAgICAgICAgcmV0ID0gWk1fRVJSX0ZJUk1XQVJFX1dST05HX1RZUEU7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworLyogRW5hYmxlIHNvZnR3YXJlIGRlY3J5cHRpb24gKi8KK3ZvaWQgemZIcFNXRGVjcnlwdCh6ZGV2X3QqIGRldiwgdThfdCBlbmFibGUpCit7CisgICAgdTMyX3QgdmFsdWUgPSAweDcwOworCisgICAgLyogQml0IDQgZm9yIGVuYWJsZSBzb2Z0d2FyZSBkZWNyeXB0aW9uICovCisgICAgaWYgKGVuYWJsZSA9PSAxKQorICAgIHsKKyAgICAgICAgdmFsdWUgPSAweDc4OworICAgIH0KKworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxYzM2NzgsIHZhbHVlKTsKKyAgICB6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworfQorCisvKiBFbmFibGUgc29mdHdhcmUgZW5jcnlwdGlvbiAqLwordm9pZCB6ZkhwU1dFbmNyeXB0KHpkZXZfdCogZGV2LCB1OF90IGVuYWJsZSkKK3sKKyAgICAvKiBCZWNhdXNlIGVuY3J5cHRpb24gYnkgc29mdHdhcmUgb3IgaGFyZHdhcmUgaXMganVkZ2VkIGJ5IGRyaXZlciBpbiBPdHVzLAorICAgICAgIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgaW4gdGhlIEhBTCBsYXllci4KKyAgICAgKi8KK30KKwordTMyX3QgemZIcENhcGFiaWxpdHkoemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisKKyAgICByZXR1cm4gaHBQcml2LT5oYWxDYXBhYmlsaXR5OworfQorCit2b2lkIHpmSHBTZXRSb2xsQ2FsbFRhYmxlKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworCisgICAgaWYgKGhwUHJpdi0+Y2FtUm9sbENhbGxUYWJsZSAhPSAodTY0X3QpIDApCisgICAgeworICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfUk9MTF9DQUxMX1RCTF9MLCAodTMyX3QpKGhwUHJpdi0+Y2FtUm9sbENhbGxUYWJsZSAmIDB4ZmZmZmZmZmYpKTsKKyAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX1JPTExfQ0FMTF9UQkxfSCwgKHUzMl90KSgoaHBQcml2LT5jYW1Sb2xsQ2FsbFRhYmxlID4+IDMyKSAmIDB4ZmZmZmZmZmYpKTsKKyAgICAgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKyAgICB9Cit9CisKK3ZvaWQgemZIcFNldFRUU0lGU1RpbWUoemRldl90KiBkZXYsIHU4X3Qgc2lmc190aW1lKQoreworICAgIHUzMl90IHJlZ192YWx1ZSA9IDA7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgc2lmc190aW1lICY9IDB4M2Y7CisgICAgcmVnX3ZhbHVlID0gMHgxNDQwMGIgfCAoKCh1MzJfdClzaWZzX3RpbWUpPDwyNCk7CisKKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfRUlGU19BTkRfU0lGUywgcmVnX3ZhbHVlKTsKKyAgICB6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworfQorCisvKiAjMyBFbmFibGUgUklGUyBmdW5jdGlvbiBpZiB0aGUgUklGUyBwYXR0ZXJuIG1hdGNoZWQgISAqLwordm9pZCB6ZkhwRW5hYmxlUmlmcyh6ZGV2X3QqIGRldiwgdThfdCBtb2RlMjRnLCB1OF90IG1vZGVIdCwgdThfdCBtb2RlSHQyMDQwKQoreworCisgICAgLyogIyBFbmFibGUgUmVzZXQgVERPTUFJTgorICAgICAqICRyZGRhdGEgPSAmJHBoeXJlZ19yZWFkKDB4OTgwMCsoNzM4PDwyKSk7CisgICAgICogJHdyZGF0YSA9ICRyZGRhdGEgfCAoMHgxIDw8IDI2KSB8ICgweDEgPDwgMjcpOworICAgICAqICYkcGh5cmVnX3dyaXRlKDB4OTgwMCsoNzM4PDwyKSwgJHdyZGF0YSk7CisgICAgICovCisgICAgcmVnX3dyaXRlICgweDk4MDArKDczODw8MiksIDB4MDgwMDAwMDAgfCAoMHgxIDw8IDI2KSB8ICgweDEgPDwgMjcpKTsKKyAgICAvL3JlZ193cml0ZSAoMHg5ODAwKyg3Mzg8PDIpLCAweDA4MDAwMDAwIHwgKDB4MSA8PCAyNikpOworCisgICAgLyogIyByZWcgMTIzOiBoZWF2eSBjbGlwIGZhY3RvciwgeHIgLyBSSUZTIHNlYXJjaCBwYXJhbWV0ZXJzICovCisgICAgcmVnX3dyaXRlICgweDk5ZWMsIDB4MGNjODBjYWEpOworCisgICAgLyogIyBSZWR1Y2UgU2VhcmNoIFN0YXJ0IERlbGF5IGZvciBSSUZTICAgICovCisgICAgaWYgKG1vZGVIdCA9PSAxKSAvKiAoJEhUX0VOQUJMRSA9PSAxKSAqLworICAgIHsKKyAgICAgICAgaWYgKG1vZGVIdDIwNDAgPT0gMHgxKSAvKiAoJERZTkFNSUNfSFQyMDQwX0VOID09IDB4MSkgKi8KKyAgICAgICAgeworICAgICAgICAgICAgcmVnX3dyaXRlKDB4OTgwMCsoNzA8PDIpLCA0MCk7Lyo0MCovCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZWdfd3JpdGUoMHg5ODAwKyg3MDw8MiksIDIwKTsKKyAgICAgICAgICAgIGlmKG1vZGUyNGcgPT0gMHgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qICRyZGRhdGEgPSAmJHBoeXJlZ19yZWFkKDB4OTgwMCsoMjQ8PDIpKTsjMHg5ODYwOzB4MWM1ODYwCisgICAgICAgICAgICAgICAgICokd3JkYXRhID0gKCRyZGRhdGEgJiAweGZmZmZmZmM3KSB8ICgweDQgPDwgMyk7CisgICAgICAgICAgICAgICAgICogJiRwaHlyZWdfd3JpdGUoMHg5ODAwKygyNDw8MiksICR3cmRhdGEpOworICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHJlZ193cml0ZSgweDk4MDArKDI0PDwyKSwgKDB4MDAwNGRkMTAgJiAweGZmZmZmZmM3KSB8ICgweDQgPDwgMykpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1vZGUyNGcgPT0gMHgxKQorICAgIHsKKyAgICAgICAgcmVnX3dyaXRlKDB4OTg1MCwgMHhlY2U4YjRlNCk7LypvcmcqLworICAgICAgICAvL3JlZ193cml0ZSgweDk4NTAsIDB4ZWNlOGI0ZTIpOworICAgICAgICByZWdfd3JpdGUoMHg5ODVjLCAweDMxM2E1ZDVlKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVnX3dyaXRlKDB4OTg1MCwgMHhlZGU4YjRlNCk7CisgICAgICAgIHJlZ193cml0ZSgweDk4NWMsIDB4MzEzOTYwNWUpOworICAgIH0KKworICAgIHpmRmx1c2hEZWxheVdyaXRlKGRldik7CisKKyAgICByZXR1cm47Cit9CisKKy8qICM0IERpc2FibGUgUklGUyBmdW5jdGlvbiBpZiB0aGUgUklGUyB0aW1lciBpcyB0aW1lb3V0ICEgKi8KK3ZvaWQgemZIcERpc2FibGVSaWZzKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIC8qIERpc2FibGUgUklGUyBmdW5jdGlvbiBpcyB0byBzdG9yZSB0aGVzZSBIVyByZWdpc3RlciBpbml0aWFsIHZhbHVlIHdoaWxlIHRoZSBkZXZpY2UgcGx1Zy1pbiBhbmQKKyAgICAgICByZS13cml0ZSB0byB0aGVzZSByZWdpc3RlciBpZiB0aGUgUklGUyBmdW5jdGlvbiBpcyBkaXNhYmxlZCAgKi8KKworICAgIC8vIHJlZyA6IDk4NTAKKyAgICByZWdfd3JpdGUoMHg5ODUwLCAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmluaXREZXNpcmVkU2lnU2l6ZSk7CisKKyAgICAvLyByZWcgOiA5ODVjCisgICAgcmVnX3dyaXRlKDB4OTg1YywgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5pbml0QUdDKTsKKworICAgIC8vIHJlZyA6IDk4NjAKKyAgICByZWdfd3JpdGUoMHg5ODAwKygyNDw8MiksICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aW5pdEFnY0NvbnRyb2wpOworCisgICAgLy8gcmVnIDogOTkxOAorICAgIHJlZ193cml0ZSgweDk4MDArKDcwPDwyKSwgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5pbml0U2VhcmNoU3RhcnREZWxheSk7CisKKyAgICAvLyByZWcgOiA5OTFjCisgICAgcmVnX3dyaXRlICgweDk5ZWMsICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aW5pdFJJRlNTZWFyY2hQYXJhbXMpOworCisgICAgLy8gcmVnIDogYTM4OAorICAgIHJlZ193cml0ZSAoMHg5ODAwKyg3Mzg8PDIpLCAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmluaXRGYXN0Q2hhbm5lbENoYW5nZUNvbnRyb2wpOworCisgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKworICAgIHJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJlZy5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwcmVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NmZWJhOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJlZy5jCkBAIC0wLDAgKzEsMjQ4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE1vZHVsZSBOYW1lIDogaHByZWcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQWJzdHJhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBUaGlzIG1vZHVsZSBjb250YWlucyBSZWd1bGF0b3J5IFRhYmxlIGFuZCByZWxhdGVkIGZ1bmN0aW9uLiAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTk9URVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgIi4uLzgwMjExY29yZS9jcHJlY29tcC5oIgorI2luY2x1ZGUgImhwYW5pLmgiCisjaW5jbHVkZSAiaHByZWcuaCIKKyNpbmNsdWRlICJocHVzYi5oIgorCisvKiB1c2VkIHRocm91Z2hvdXQgdGhpcyBmaWxlLi4uICovCisjZGVmaW5lCU4oYSkJKHNpemVvZiAoYSkgLyBzaXplb2YgKGFbMF0pKQorCisjZGVmaW5lIEhBTF9NT0RFXzExQV9UVVJCTwlIQUxfTU9ERV8xMDhBCisjZGVmaW5lIEhBTF9NT0RFXzExR19UVVJCTwlIQUxfTU9ERV8xMDhHCisKKyNpZiAwCitlbnVtIHsKKyAgICAvKiB0ZXN0IGdyb3VwcyAqLworCUZDQwkgICAgICAgPSAweDEwLAorCU1LSwkgICAgICAgPSAweDQwLAorCUVUU0kJICAgPSAweDMwLAorICAgIFNEX05PX0NUTCAgPSAweGUwLAorCU5PX0NUTAkgICA9IDB4ZmYsCisgICAgLyogdGVzdCBtb2RlcyAqLworICAgIENUTF9NT0RFX00gPSAweDBmLAorICAgIENUTF8xMUEgICAgPSAwLAorCUNUTF8xMUIJICAgPSAxLAorCUNUTF8xMUcJICAgPSAyLAorCUNUTF9UVVJCTyAgPSAzLAorCUNUTF8xMDhHICAgPSA0LAorICAgIENUTF8yR0hUMjAgPSA1LAorICAgIENUTF81R0hUMjAgPSA2LAorICAgIENUTF8yR0hUNDAgPSA3LAorICAgIENUTF81R0hUNDAgPSA4Cit9OworI2VuZGlmCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGFyZSBmbGFncyBmb3IgZGlmZmVyZW50IHJlcXVpcmVtZW50cyBwZXIgcmVnIGRvbWFpbi4KKyAqIFRoZXNlIHJlcXVpcmVtZW50cyBhcmUgZWl0aGVyIGluaGVyZXRlZCBmcm9tIHRoZSByZWcgZG9tYWluIHBhaXIgb3IKKyAqIGZyb20gdGhlIHVuaXRhcnkgcmVnIGRvbWFpbiBpZiB0aGUgcmVnIGRvbWFpbiBwYWlyIGZsYWdzIHZhbHVlIGlzCisgKiAwCisgKi8KKworZW51bSB7CisJTk9fUkVRCQkJPSAweDAwMDAwMDAwLAorCURJU0FMTE9XX0FESE9DXzExQQk9IDB4MDAwMDAwMDEsCisJRElTQUxMT1dfQURIT0NfMTFBX1RVUkIJPSAweDAwMDAwMDAyLAorCU5FRURfTkZDCQk9IDB4MDAwMDAwMDQsCisKKwlBREhPQ19QRVJfMTFECQk9IDB4MDAwMDAwMDgsICAvKiBTdGFydCBBZC1Ib2MgbW9kZSAqLworCUFESE9DX05PXzExQQkJPSAweDAwMDAwMDEwLAorCisJUFVCTElDX1NBRkVUWV9ET01BSU4JPSAweDAwMDAwMDIwLCAJLyogcHVibGljIHNhZmV0eSBkb21haW4gKi8KKwlMSU1JVF9GUkFNRV80TVMgCT0gMHgwMDAwMDA0MCwgCS8qIDRtc2VjIGxpbWl0IG9uIHRoZSBmcmFtZSBsZW5ndGggKi8KK307CisKKyNkZWZpbmUgTUtLNUdIWl9GTEFHMSAoRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUykKKyNkZWZpbmUgTUtLNUdIWl9GTEFHMiAoRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQ3wgTElNSVRfRlJBTUVfNE1TKQorCit0eXBlZGVmIGVudW0geworCURGU19VTklOSVRfRE9NQUlOCT0gMCwJLyogVW5pbml0aWFsaXplZCBkZnMgZG9tYWluICovCisJREZTX0ZDQ19ET01BSU4JCT0gMSwJLyogRkNDMyBkZnMgZG9tYWluICovCisJREZTX0VUU0lfRE9NQUlOCQk9IDIsCS8qIEVUU0kgZGZzIGRvbWFpbiAqLworfSBIQUxfREZTX0RPTUFJTjsKKworLyoKKyAqIFVzZWQgdG8gc2V0IHRoZSBSZWdEb21haW4gYml0bWFzayB3aGljaCBjaG9vc2VzIHdoaWNoIGZyZXF1ZW5jeQorICogYmFuZCBzcGVjcyBhcmUgdXNlZC4KKyAqLworCisjZGVmaW5lIEJNTEVOIDIJCS8qIFVzZSAyIDY0IGJpdCB1aW50IGZvciBjaGFubmVsIGJpdG1hc2sKKwkJCSAgIE5COiBNdXN0IGFncmVlIHdpdGggbWFjcm8gYmVsb3cgKEJNKSAqLworI2RlZmluZSBCTVpFUk8geyh1NjRfdCkgMCwgKHU2NF90KSAwfQkvKiBCTUxFTiB6ZXJvcyAqLworCisjaWYgMAorCisjZGVmaW5lIEJNKF9mYSwgX2ZiLCBfZmMsIF9mZCwgX2ZlLCBfZmYsIF9mZywgX2ZoLCBfZmksIF9maiwgX2ZrLCBfZmwpIFwKKyAgICAgIHsoKCgoX2ZhID49IDApICYmIChfZmEgPCA2NCkpID8gKCgodTY0X3QpIDEpIDw8IF9mYSkgOiAodTY0X3QpIDApIHwgXAorCSgoKF9mYiA+PSAwKSAmJiAoX2ZiIDwgNjQpKSA/ICgoKHU2NF90KSAxKSA8PCBfZmIpIDogKHU2NF90KSAwKSB8IFwKKwkoKChfZmMgPj0gMCkgJiYgKF9mYyA8IDY0KSkgPyAoKCh1NjRfdCkgMSkgPDwgX2ZjKSA6ICh1NjRfdCkgMCkgfCBcCisJKCgoX2ZkID49IDApICYmIChfZmQgPCA2NCkpID8gKCgodTY0X3QpIDEpIDw8IF9mZCkgOiAodTY0X3QpIDApIHwgXAorCSgoKF9mZSA+PSAwKSAmJiAoX2ZlIDwgNjQpKSA/ICgoKHU2NF90KSAxKSA8PCBfZmUpIDogKHU2NF90KSAwKSB8IFwKKwkoKChfZmYgPj0gMCkgJiYgKF9mZiA8IDY0KSkgPyAoKCh1NjRfdCkgMSkgPDwgX2ZmKSA6ICh1NjRfdCkgMCkgfCBcCisJKCgoX2ZnID49IDApICYmIChfZmcgPCA2NCkpID8gKCgodTY0X3QpIDEpIDw8IF9mZykgOiAodTY0X3QpIDApIHwgXAorCSgoKF9maCA+PSAwKSAmJiAoX2ZoIDwgNjQpKSA/ICgoKHU2NF90KSAxKSA8PCBfZmgpIDogKHU2NF90KSAwKSB8IFwKKwkoKChfZmkgPj0gMCkgJiYgKF9maSA8IDY0KSkgPyAoKCh1NjRfdCkgMSkgPDwgX2ZpKSA6ICh1NjRfdCkgMCkgfCBcCisJKCgoX2ZqID49IDApICYmIChfZmogPCA2NCkpID8gKCgodTY0X3QpIDEpIDw8IF9maikgOiAodTY0X3QpIDApIHwgXAorCSgoKF9mayA+PSAwKSAmJiAoX2ZrIDwgNjQpKSA/ICgoKHU2NF90KSAxKSA8PCBfZmspIDogKHU2NF90KSAwKSB8IFwKKwkoKChfZmwgPj0gMCkgJiYgKF9mbCA8IDY0KSkgPyAoKCh1NjRfdCkgMSkgPDwgX2ZsKSA6ICh1NjRfdCkgMCkgfCBcCisJICAgICAgICgoKChfZmEgPiA2MykgJiYgKF9mYSA8IDEyOCkpID8gKCgodTY0X3QpIDEpIDw8IChfZmEgLSA2NCkpIDogKHU2NF90KSAwKSB8IFwKKwkJKCgoX2ZiID4gNjMpICYmIChfZmIgPCAxMjgpKSA/ICgoKHU2NF90KSAxKSA8PCAoX2ZiIC0gNjQpKSA6ICh1NjRfdCkgMCkgfCBcCisJCSgoKF9mYyA+IDYzKSAmJiAoX2ZjIDwgMTI4KSkgPyAoKCh1NjRfdCkgMSkgPDwgKF9mYyAtIDY0KSkgOiAodTY0X3QpIDApIHwgXAorCQkoKChfZmQgPiA2MykgJiYgKF9mZCA8IDEyOCkpID8gKCgodTY0X3QpIDEpIDw8IChfZmQgLSA2NCkpIDogKHU2NF90KSAwKSB8IFwKKwkJKCgoX2ZlID4gNjMpICYmIChfZmUgPCAxMjgpKSA/ICgoKHU2NF90KSAxKSA8PCAoX2ZlIC0gNjQpKSA6ICh1NjRfdCkgMCkgfCBcCisJCSgoKF9mZiA+IDYzKSAmJiAoX2ZmIDwgMTI4KSkgPyAoKCh1NjRfdCkgMSkgPDwgKF9mZiAtIDY0KSkgOiAodTY0X3QpIDApIHwgXAorCQkoKChfZmcgPiA2MykgJiYgKF9mZyA8IDEyOCkpID8gKCgodTY0X3QpIDEpIDw8IChfZmcgLSA2NCkpIDogKHU2NF90KSAwKSB8IFwKKwkJKCgoX2ZoID4gNjMpICYmIChfZmggPCAxMjgpKSA/ICgoKHU2NF90KSAxKSA8PCAoX2ZoIC0gNjQpKSA6ICh1NjRfdCkgMCkgfCBcCisJCSgoKF9maSA+IDYzKSAmJiAoX2ZpIDwgMTI4KSkgPyAoKCh1NjRfdCkgMSkgPDwgKF9maSAtIDY0KSkgOiAodTY0X3QpIDApIHwgXAorCQkoKChfZmogPiA2MykgJiYgKF9maiA8IDEyOCkpID8gKCgodTY0X3QpIDEpIDw8IChfZmogLSA2NCkpIDogKHU2NF90KSAwKSB8IFwKKwkJKCgoX2ZrID4gNjMpICYmIChfZmsgPCAxMjgpKSA/ICgoKHU2NF90KSAxKSA8PCAoX2ZrIC0gNjQpKSA6ICh1NjRfdCkgMCkgfCBcCisJCSgoKF9mbCA+IDYzKSAmJiAoX2ZsIDwgMTI4KSkgPyAoKCh1NjRfdCkgMSkgPDwgKF9mbCAtIDY0KSkgOiAodTY0X3QpIDApKSl9CisKKyNlbHNlCisKKyNkZWZpbmUgQk0oX2ZhLCBfZmIsIF9mYywgX2ZkLCBfZmUsIF9mZiwgX2ZnLCBfZmgsIF9maSwgX2ZqLCBfZmssIF9mbCkgXAorICAgICAgeygoKChfZmEgPj0gMCkgJiYgKF9mYSA8IDY0KSkgPyAoKCh1NjRfdCkgMSkgPDwgKF9mYSYweDNmKSkgOiAodTY0X3QpIDApIHwgXAorCSgoKF9mYiA+PSAwKSAmJiAoX2ZiIDwgNjQpKSA/ICgoKHU2NF90KSAxKSA8PCAoX2ZiJjB4M2YpKSA6ICh1NjRfdCkgMCkgfCBcCisJKCgoX2ZjID49IDApICYmIChfZmMgPCA2NCkpID8gKCgodTY0X3QpIDEpIDw8IChfZmMmMHgzZikpIDogKHU2NF90KSAwKSB8IFwKKwkoKChfZmQgPj0gMCkgJiYgKF9mZCA8IDY0KSkgPyAoKCh1NjRfdCkgMSkgPDwgKF9mZCYweDNmKSkgOiAodTY0X3QpIDApIHwgXAorCSgoKF9mZSA+PSAwKSAmJiAoX2ZlIDwgNjQpKSA/ICgoKHU2NF90KSAxKSA8PCAoX2ZlJjB4M2YpKSA6ICh1NjRfdCkgMCkgfCBcCisJKCgoX2ZmID49IDApICYmIChfZmYgPCA2NCkpID8gKCgodTY0X3QpIDEpIDw8IChfZmYmMHgzZikpIDogKHU2NF90KSAwKSB8IFwKKwkoKChfZmcgPj0gMCkgJiYgKF9mZyA8IDY0KSkgPyAoKCh1NjRfdCkgMSkgPDwgKF9mZyYweDNmKSkgOiAodTY0X3QpIDApIHwgXAorCSgoKF9maCA+PSAwKSAmJiAoX2ZoIDwgNjQpKSA/ICgoKHU2NF90KSAxKSA8PCAoX2ZoJjB4M2YpKSA6ICh1NjRfdCkgMCkgfCBcCisJKCgoX2ZpID49IDApICYmIChfZmkgPCA2NCkpID8gKCgodTY0X3QpIDEpIDw8IChfZmkmMHgzZikpIDogKHU2NF90KSAwKSB8IFwKKwkoKChfZmogPj0gMCkgJiYgKF9maiA8IDY0KSkgPyAoKCh1NjRfdCkgMSkgPDwgKF9maiYweDNmKSkgOiAodTY0X3QpIDApIHwgXAorCSgoKF9mayA+PSAwKSAmJiAoX2ZrIDwgNjQpKSA/ICgoKHU2NF90KSAxKSA8PCAoX2ZrJjB4M2YpKSA6ICh1NjRfdCkgMCkgfCBcCisJKCgoX2ZsID49IDApICYmIChfZmwgPCA2NCkpID8gKCgodTY0X3QpIDEpIDw8IChfZmwmMHgzZikpIDogKHU2NF90KSAwKSB8IFwKKwkgICAgICAgKCgoKF9mYSA+IDYzKSAmJiAoX2ZhIDwgMTI4KSkgPyAoKCh1NjRfdCkgMSkgPDwgKChfZmEgLSA2NCkmMHgzZikpIDogKHU2NF90KSAwKSB8IFwKKwkJKCgoX2ZiID4gNjMpICYmIChfZmIgPCAxMjgpKSA/ICgoKHU2NF90KSAxKSA8PCAoKF9mYiAtIDY0KSYweDNmKSkgOiAodTY0X3QpIDApIHwgXAorCQkoKChfZmMgPiA2MykgJiYgKF9mYyA8IDEyOCkpID8gKCgodTY0X3QpIDEpIDw8ICgoX2ZjIC0gNjQpJjB4M2YpKSA6ICh1NjRfdCkgMCkgfCBcCisJCSgoKF9mZCA+IDYzKSAmJiAoX2ZkIDwgMTI4KSkgPyAoKCh1NjRfdCkgMSkgPDwgKChfZmQgLSA2NCkmMHgzZikpIDogKHU2NF90KSAwKSB8IFwKKwkJKCgoX2ZlID4gNjMpICYmIChfZmUgPCAxMjgpKSA/ICgoKHU2NF90KSAxKSA8PCAoKF9mZSAtIDY0KSYweDNmKSkgOiAodTY0X3QpIDApIHwgXAorCQkoKChfZmYgPiA2MykgJiYgKF9mZiA8IDEyOCkpID8gKCgodTY0X3QpIDEpIDw8ICgoX2ZmIC0gNjQpJjB4M2YpKSA6ICh1NjRfdCkgMCkgfCBcCisJCSgoKF9mZyA+IDYzKSAmJiAoX2ZnIDwgMTI4KSkgPyAoKCh1NjRfdCkgMSkgPDwgKChfZmcgLSA2NCkmMHgzZikpIDogKHU2NF90KSAwKSB8IFwKKwkJKCgoX2ZoID4gNjMpICYmIChfZmggPCAxMjgpKSA/ICgoKHU2NF90KSAxKSA8PCAoKF9maCAtIDY0KSYweDNmKSkgOiAodTY0X3QpIDApIHwgXAorCQkoKChfZmkgPiA2MykgJiYgKF9maSA8IDEyOCkpID8gKCgodTY0X3QpIDEpIDw8ICgoX2ZpIC0gNjQpJjB4M2YpKSA6ICh1NjRfdCkgMCkgfCBcCisJCSgoKF9maiA+IDYzKSAmJiAoX2ZqIDwgMTI4KSkgPyAoKCh1NjRfdCkgMSkgPDwgKChfZmogLSA2NCkmMHgzZikpIDogKHU2NF90KSAwKSB8IFwKKwkJKCgoX2ZrID4gNjMpICYmIChfZmsgPCAxMjgpKSA/ICgoKHU2NF90KSAxKSA8PCAoKF9mayAtIDY0KSYweDNmKSkgOiAodTY0X3QpIDApIHwgXAorCQkoKChfZmwgPiA2MykgJiYgKF9mbCA8IDEyOCkpID8gKCgodTY0X3QpIDEpIDw8ICgoX2ZsIC0gNjQpJjB4M2YpKSA6ICh1NjRfdCkgMCkpKX0KKworI2VuZGlmCisKKy8qIE1hc2sgdG8gY2hlY2sgd2hldGhlciBhIGRvbWFpbiBpcyBhIG11bHRpZG9tYWluIG9yIGEgc2luZ2xlCisgICBkb21haW4gKi8KKworI2RlZmluZSBNVUxUSV9ET01BSU5fTUFTSyAweEZGMDAKKworCisvKgorICogVGhlIGZvbGxvd2luZyBkZXNjcmliZSB0aGUgYml0IG1hc2tzIGZvciBkaWZmZXJlbnQgcGFzc2l2ZSBzY2FuCisgKiBjYXBhYmlsaXR5L3JlcXVpcmVtZW50cyBwZXIgcmVnZG9tYWluLgorICovCisjZGVmaW5lCU5PX1BTQ0FOCTB4MFVMTAorI2RlZmluZQlQU0NBTl9GQ0MJMHgwMDAwMDAwMDAwMDAwMDAxVUxMCisjZGVmaW5lCVBTQ0FOX0ZDQ19UCTB4MDAwMDAwMDAwMDAwMDAwMlVMTAorI2RlZmluZQlQU0NBTl9FVFNJCTB4MDAwMDAwMDAwMDAwMDAwNFVMTAorI2RlZmluZQlQU0NBTl9NS0sxCTB4MDAwMDAwMDAwMDAwMDAwOFVMTAorI2RlZmluZQlQU0NBTl9NS0syCTB4MDAwMDAwMDAwMDAwMDAxMFVMTAorI2RlZmluZQlQU0NBTl9NS0tBCTB4MDAwMDAwMDAwMDAwMDAyMFVMTAorI2RlZmluZQlQU0NBTl9NS0tBX0cJMHgwMDAwMDAwMDAwMDAwMDQwVUxMCisjZGVmaW5lCVBTQ0FOX0VUU0lBCTB4MDAwMDAwMDAwMDAwMDA4MFVMTAorI2RlZmluZQlQU0NBTl9FVFNJQgkweDAwMDAwMDAwMDAwMDAxMDBVTEwKKyNkZWZpbmUJUFNDQU5fRVRTSUMJMHgwMDAwMDAwMDAwMDAwMjAwVUxMCisjZGVmaW5lCVBTQ0FOX1dXUgkweDAwMDAwMDAwMDAwMDA0MDBVTEwKKyNkZWZpbmUJUFNDQU5fTUtLQTEJMHgwMDAwMDAwMDAwMDAwODAwVUxMCisjZGVmaW5lCVBTQ0FOX01LS0ExX0cJMHgwMDAwMDAwMDAwMDAxMDAwVUxMCisjZGVmaW5lCVBTQ0FOX01LS0EyCTB4MDAwMDAwMDAwMDAwMjAwMFVMTAorI2RlZmluZQlQU0NBTl9NS0tBMl9HCTB4MDAwMDAwMDAwMDAwNDAwMFVMTAorI2RlZmluZQlQU0NBTl9NS0szCTB4MDAwMDAwMDAwMDAwODAwMFVMTAorI2RlZmluZQlQU0NBTl9ERUZFUgkweDdGRkZGRkZGRkZGRkZGRkZVTEwKKyNkZWZpbmUJSVNfRUNNX0NIQU4JMHg4MDAwMDAwMDAwMDAwMDAwVUxMCisKKy8qCisgKiBUSEUgZm9sbG93aW5nIHRhYmxlIGlzIHRoZSBtYXBwaW5nIG9mIHJlZ2RvbWFpbiBwYWlycyBzcGVjaWZpZWQgYnkKKyAqIGFuIDggYml0IHJlZ2RvbWFpbiB2YWx1ZSB0byB0aGUgaW5kaXZpZHVhbCB1bml0YXJ5IHJlZyBkb21haW5zCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgcmVnX2Rtbl9wYWlyX21hcHBpbmcgeworCXUxNl90IHJlZ0RtbkVudW07CS8qIDE2IGJpdCByZWcgZG9tYWluIHBhaXIgKi8KKwl1MTZfdCByZWdEbW41R0h6OwkvKiA1R0h6IHJlZyBkb21haW4gKi8KKwl1MTZfdCByZWdEbW4yR0h6OwkvKiAyR0h6IHJlZyBkb21haW4gKi8KKwl1MzJfdCBmbGFnczVHSHo7CQkvKiBSZXF1aXJlbWVudHMgZmxhZ3MgKEFkSG9jCisJCQkJCSAgIGRpc2FsbG93LCBub2lzZSBmbG9vciBjYWwgbmVlZGVkLAorCQkJCQkgICBldGMpICovCisJdTMyX3QgZmxhZ3MyR0h6OwkJLyogUmVxdWlyZW1lbnRzIGZsYWdzIChBZEhvYworCQkJCQkgICBkaXNhbGxvdywgbm9pc2UgZmxvb3IgY2FsIG5lZWRlZCwKKwkJCQkJICAgZXRjKSAqLworCXU2NF90IHBzY2FuTWFzazsJCS8qIFBhc3NpdmUgU2NhbiBmbGFncyB3aGljaAorCQkJCQkgICBjYW4gb3ZlcnJpZGUgdW5pdGFyeSBkb21haW4KKwkJCQkJICAgcGFzc2l2ZSBzY2FuIGZsYWdzLiAgVGhpcworCQkJCQkgICB2YWx1ZSBpcyB1c2VkIGFzIGEgbWFzayBvbgorCQkJCQkgICB0aGUgdW5pdGFyeSBmbGFncyovCisJdTE2X3Qgc2luZ2xlQ0M7CQkvKiBDb3VudHJ5IGNvZGUgb2Ygc2luZ2xlIGNvdW50cnkgaWYKKwkJCQkJICAgYSBvbmUtb24tb25lIG1hcHBpbmcgZXhpc3RzICovCit9ICBSRUdfRE1OX1BBSVJfTUFQUElORzsKKworc3RhdGljIFJFR19ETU5fUEFJUl9NQVBQSU5HIHJlZ0RvbWFpblBhaXJzW10gPSB7CisJe05PX0VOVU1SRCwJICAgIEZDQzIsCURFQlVHX1JFR19ETU4sICBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKwl7TlVMTDFfV09STEQsCU5VTEwxLAkJV09STEQsCQlOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKwl7TlVMTDFfRVRTSUIsCU5VTEwxLAkJRVRTSUIsCQlOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKwl7TlVMTDFfRVRTSUMsCU5VTEwxLAkJRVRTSUMsCQlOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKworCXtGQ0MyX0ZDQ0EsICAgICBGQ0MyLAkJRkNDQSwJCU5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMCB9LAorCXtGQ0MyX1dPUkxELCAgICBGQ0MyLAkJV09STEQsCQlOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKwl7RkNDMl9FVFNJQywJRkNDMiwJCUVUU0lDLAkJTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwIH0sCisJe0ZDQzNfRkNDQSwgICAgIEZDQzMsCQlGQ0NBLAkJTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwIH0sCisJe0ZDQzNfV09STEQsICAgIEZDQzMsCQlXT1JMRCwJCU5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMCB9LAorCXtGQ0M0X0ZDQ0EsICAgICBGQ0M0LAkJRkNDQSwJCURJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwIH0sCisJe0ZDQzVfRkNDQSwgICAgIEZDQzUsCQlGQ0NBLAkJRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKwl7RkNDNl9GQ0NBLCAgICAgRkNDNiwJCUZDQ0EsCQlOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKwl7RkNDNl9XT1JMRCwgICAgRkNDNiwJCVdPUkxELAkJTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwIH0sCisKKwl7RVRTSTFfV09STEQsCUVUU0kxLAkJV09STEQsCQlESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMCB9LAorCXtFVFNJMl9XT1JMRCwJRVRTSTIsCQlXT1JMRCwJCURJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwIH0sCisJe0VUU0kzX1dPUkxELAlFVFNJMywJCVdPUkxELAkJRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKwl7RVRTSTRfV09STEQsCUVUU0k0LAkJV09STEQsCQlESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMCB9LAorCXtFVFNJNV9XT1JMRCwJRVRTSTUsCQlXT1JMRCwJCURJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwIH0sCisJe0VUU0k2X1dPUkxELAlFVFNJNiwJCVdPUkxELAkJRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKworCXtFVFNJM19FVFNJQSwJRVRTSTMsCQlXT1JMRCwJCURJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwIH0sCisJe0ZSQU5DRV9SRVMsCUVUU0kzLAkJV09STEQsCQlOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKworCXtGQ0MxX1dPUkxELAlGQ0MxLAkJV09STEQsCQlOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKwl7RkNDMV9GQ0NBLCAgICAgRkNDMSwJCUZDQ0EsCQlOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKwl7QVBMMV9XT1JMRCwJQVBMMSwJCVdPUkxELAkJTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwIH0sCisJe0FQTDJfV09STEQsCUFQTDIsCQlXT1JMRCwJCU5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMCB9LAorCXtBUEwzX1dPUkxELAlBUEwzLAkJV09STEQsCQlOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKwl7QVBMNF9XT1JMRCwJQVBMNCwJCVdPUkxELAkJTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwIH0sCisJe0FQTDVfV09STEQsCUFQTDUsCQlXT1JMRCwJCU5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMCB9LAorCXtBUEw2X1dPUkxELAlBUEw2LAkJV09STEQsCQlOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKwl7QVBMOF9XT1JMRCwJQVBMOCwJCVdPUkxELAkJTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwIH0sCisJe0FQTDlfV09STEQsCUFQTDksCQlXT1JMRCwJCU5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMCB9LAorCisJe0FQTDNfRkNDQSwgICAgIEFQTDMsCQlGQ0NBLAkJTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwIH0sCisJe0FQTDFfRVRTSUMsCUFQTDEsCQlFVFNJQywJCU5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMCB9LAorCXtBUEwyX0VUU0lDLAlBUEwyLAkJRVRTSUMsCQlOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKwl7QVBMMl9GQ0NBLAkJQVBMMiwJCUZDQ0EsCQlOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKwl7QVBMMl9BUExELCAgICAgQVBMMiwJCUFQTEQsCQlOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAorCXtBUEw3X0ZDQ0EsCQlBUEw3LAkJRkNDQSwJCU5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMCB9LAorCisJe01LSzFfTUtLQSwgICAgIE1LSzEsCQlNS0tBLAkJTUtLNUdIWl9GTEFHMSwgTkVFRF9ORkMsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0tBLCBDVFJZX0pBUEFOIH0sCisJe01LSzFfTUtLQiwgICAgIE1LSzEsCQlNS0tBLAkJTUtLNUdIWl9GTEFHMiwgTkVFRF9ORkMsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLCBDVFJZX0pBUEFOMSB9LAorCXtNS0sxX0ZDQ0EsICAgICBNS0sxLAkJRkNDQSwJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBQU0NBTl9NS0sxLCBDVFJZX0pBUEFOMiB9LAorCXtNS0sxX01LS0ExLCAgICBNS0sxLAkJTUtLQSwJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFONCB9LAorCXtNS0sxX01LS0EyLCAgICBNS0sxLAkJTUtLQSwJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLCBDVFJZX0pBUEFONSB9LAorCXtNS0sxX01LS0MsICAgICBNS0sxLAkJTUtLQywJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBQU0NBTl9NS0sxLCBDVFJZX0pBUEFONiB9LAorCisJLyogTUtLMiAqLworCXtNS0syX01LS0EsICAgICBNS0syLAkJTUtLQSwJCU1LSzVHSFpfRkxBRzIsIE5FRURfTkZDLCBQU0NBTl9NS0syIHwgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRywgQ1RSWV9KQVBBTjMgfSwKKworCS8qIE1LSzMgKi8KKwl7TUtLM19NS0tBLCAgICAgTUtLMywJCU1LS0EsCQlNS0s1R0haX0ZMQUcxLCBORUVEX05GQywgTk9fUFNDQU4sIENUUllfSkFQQU4yNSB9LAorCXtNS0szX01LS0IsICAgICBNS0szLAkJTUtLQSwJCU1LSzVHSFpfRkxBRzIsIE5FRURfTkZDLCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLCBDVFJZX0pBUEFONyB9LAorCXtNS0szX01LS0ExLCAgICBNS0szLAkJTUtLQSwJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0ExX0csIENUUllfSkFQQU4yNiB9LAorCXtNS0szX01LS0EyLCAgICBNS0szLAkJTUtLQSwJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csIENUUllfSkFQQU44IH0sCisJe01LSzNfTUtLQywgICAgIE1LSzMsCQlNS0tDLAkJTUtLNUdIWl9GTEFHMSwgTkVFRF9ORkMsIE5PX1BTQ0FOLCBDVFJZX0pBUEFOOSB9LAorCXtNS0szX0ZDQ0EsICAgICBNS0szLAkJRkNDQSwJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBOT19QU0NBTiwgQ1RSWV9KQVBBTjI3IH0sCisKKwkvKiBNS0s0ICovCisJe01LSzRfTUtLQiwgICAgIE1LSzQsCQlNS0tBLAkJTUtLNUdIWl9GTEFHMiwgTkVFRF9ORkMsIFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLCBDVFJZX0pBUEFOMTAgfSwKKwl7TUtLNF9NS0tBMSwgICAgTUtLNCwJCU1LS0EsCQlNS0s1R0haX0ZMQUcxLCBORUVEX05GQywgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjI4IH0sCisJe01LSzRfTUtLQTIsICAgIE1LSzQsCQlNS0tBLAkJTUtLNUdIWl9GTEFHMSwgTkVFRF9ORkMsIFBTQ0FOX01LSzMgfFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjExIH0sCisJe01LSzRfTUtLQywgICAgIE1LSzQsCQlNS0tDLAkJTUtLNUdIWl9GTEFHMSwgTkVFRF9ORkMsIFBTQ0FOX01LSzMsIENUUllfSkFQQU4xMiB9LAorCXtNS0s0X0ZDQ0EsICAgICBNS0s0LAkJRkNDQSwJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBOT19QU0NBTiwgQ1RSWV9KQVBBTjI5IH0sCisJe01LSzRfTUtLQSwgICAgIE1LSzQsCQlNS0tBLAkJTUtLNUdIWl9GTEFHMSwgTkVFRF9ORkMsIFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBLCBDVFJZX0pBUEFOMzYgfSwKKworCS8qIE1LSzUgKi8KKwl7TUtLNV9NS0tCLCAgICAgTUtLNSwJCU1LS0EsCQlNS0s1R0haX0ZMQUcyLCBORUVEX05GQywgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csIENUUllfSkFQQU4xMyB9LAorCXtNS0s1X01LS0EyLCAgICBNS0s1LAkJTUtLQSwJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLCBDVFJZX0pBUEFOMTQgfSwKKwl7TUtLNV9NS0tDLCAgICAgTUtLNSwJCU1LS0MsCQlNS0s1R0haX0ZMQUcxLCBORUVEX05GQywgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjE1IH0sCisKKwkvKiBNS0s2ICovCisJe01LSzZfTUtLQiwgICAgIE1LSzYsCQlNS0tBLAkJTUtLNUdIWl9GTEFHMiwgTkVFRF9ORkMsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLCBDVFJZX0pBUEFOMTYgfSwKKwl7TUtLNl9NS0tBMiwgICAgTUtLNiwJCU1LS0EsCQlNS0s1R0haX0ZMQUcxLCBORUVEX05GQywgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjE3IH0sCisJe01LSzZfTUtLQywgICAgIE1LSzYsCQlNS0tDLAkJTUtLNUdIWl9GTEFHMSwgTkVFRF9ORkMsIFBTQ0FOX01LSzEsIENUUllfSkFQQU4xOCB9LAorCXtNS0s2X01LS0ExLCAgICBNS0s2LAkJTUtLQSwJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0ExX0csIENUUllfSkFQQU4zMCB9LAorCXtNS0s2X0ZDQ0EsICAgICBNS0s2LAkJRkNDQSwJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBOT19QU0NBTiwgQ1RSWV9KQVBBTjMxIH0sCisKKwkvKiBNS0s3ICovCisJe01LSzdfTUtLQiwgICAgIE1LSzcsCQlNS0tBLAkJTUtLNUdIWl9GTEFHMiwgTkVFRF9ORkMsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRywgQ1RSWV9KQVBBTjE5IH0sCisJe01LSzdfTUtLQSwgICAgIE1LSzcsCQlNS0tBLAkJTUtLNUdIWl9GTEFHMSwgTkVFRF9ORkMsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLCBDVFJZX0pBUEFOMjAgfSwKKwl7TUtLN19NS0tDLCAgICAgTUtLNywJCU1LS0MsCQlNS0s1R0haX0ZMQUcxLCBORUVEX05GQywgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMsIENUUllfSkFQQU4yMSB9LAorCXtNS0s3X01LS0ExLCAgICBNS0s3LAkJTUtLQSwJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0ExX0csIENUUllfSkFQQU4zMiB9LAorCXtNS0s3X0ZDQ0EsICAgICBNS0s3LAkJRkNDQSwJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBOT19QU0NBTiwgQ1RSWV9KQVBBTjMzIH0sCisKKwkvKiBNS0s4ICovCisJe01LSzhfTUtLQiwgICAgIE1LSzgsCQlNS0tBLAkJTUtLNUdIWl9GTEFHMiwgTkVFRF9ORkMsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRywgQ1RSWV9KQVBBTjIyIH0sCisJe01LSzhfTUtLQTIsICAgIE1LSzgsCQlNS0tBLAkJTUtLNUdIWl9GTEFHMSwgTkVFRF9ORkMsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLCBDVFJZX0pBUEFOMjMgfSwKKwl7TUtLOF9NS0tDLCAgICAgTUtLOCwJCU1LS0MsCQlNS0s1R0haX0ZMQUcxLCBORUVEX05GQywgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgLCBDVFJZX0pBUEFOMjQgfSwKKworICAgCS8qIE1LSzkgKi8KKwl7TUtLOV9NS0tBLCAgICAgTUtLOSwJCU1LS0EsCQlNS0s1R0haX0ZMQUcxLCBORUVEX05GQywgTk9fUFNDQU4sIENUUllfSkFQQU4zNCB9LAorCXtNS0s5X0ZDQ0EsICAgICBNS0s5LAkJRkNDQSwJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBOT19QU0NBTiwgQ1RSWV9KQVBBTjM3IH0sCisJe01LSzlfTUtLQTEsICAgIE1LSzksCQlNS0tBLAkJTUtLNUdIWl9GTEFHMSwgTkVFRF9ORkMsIFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjM4IH0sCisJe01LSzlfTUtLQywgICAgIE1LSzksCQlNS0tDLAkJTUtLNUdIWl9GTEFHMSwgTkVFRF9ORkMsIE5PX1BTQ0FOLCBDVFJZX0pBUEFOMzkgfSwKKwl7TUtLOV9NS0tBMiwJTUtLOSwJCU1LS0EsCQlNS0s1R0haX0ZMQUcxLCBORUVEX05GQywgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csIENUUllfSkFQQU40MCB9LAorCisJLyogTUtLMTAgKi8KKwl7TUtLMTBfTUtLQSwJTUtLMTAsCQlNS0tBLAkJTUtLNUdIWl9GTEFHMSwgTkVFRF9ORkMsIE5PX1BTQ0FOLCBDVFJZX0pBUEFOMzUgfSwKKwl7TUtLMTBfRkNDQSwJTUtLMTAsCQlGQ0NBLAkJTUtLNUdIWl9GTEFHMSwgTkVFRF9ORkMsIE5PX1BTQ0FOLCBDVFJZX0pBUEFONDEgfSwKKwl7TUtLMTBfTUtLQTEsCU1LSzEwLAkJTUtLQSwJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0ExX0csIENUUllfSkFQQU40MiB9LAorCXtNS0sxMF9NS0tDLAlNS0sxMCwJCU1LS0MsCQlNS0s1R0haX0ZMQUcxLCBORUVEX05GQywgTk9fUFNDQU4sIENUUllfSkFQQU40MyB9LAorCXtNS0sxMF9NS0tBMiwJTUtLMTAsCQlNS0tBLAkJTUtLNUdIWl9GTEFHMSwgTkVFRF9ORkMsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLCBDVFJZX0pBUEFONDQgfSwKKworCS8qIE1LSzExICovCisJe01LSzExX01LS0EsCU1LSzExLAkJTUtLQSwJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBOT19QU0NBTiwgQ1RSWV9KQVBBTjQ1IH0sCisJe01LSzExX0ZDQ0EsCU1LSzExLAkJRkNDQSwJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBOT19QU0NBTiwgQ1RSWV9KQVBBTjQ2IH0sCisJe01LSzExX01LS0ExLAlNS0sxMSwJCU1LS0EsCQlNS0s1R0haX0ZMQUcxLCBORUVEX05GQywgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFONDcgfSwKKwl7TUtLMTFfTUtLQywJTUtLMTEsCQlNS0tDLAkJTUtLNUdIWl9GTEFHMSwgTkVFRF9ORkMsIE5PX1BTQ0FOLCBDVFJZX0pBUEFONDggfSwKKwl7TUtLMTFfTUtLQTIsCU1LSzExLAkJTUtLQSwJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjQ5IH0sCisKKwkvKiBNS0sxMiAqLworCXtNS0sxMl9NS0tBLAlNS0sxMiwJCU1LS0EsCQlNS0s1R0haX0ZMQUcxLCBORUVEX05GQywgTk9fUFNDQU4sIENUUllfSkFQQU41MCB9LAorCXtNS0sxMl9GQ0NBLAlNS0sxMiwJCUZDQ0EsCQlNS0s1R0haX0ZMQUcxLCBORUVEX05GQywgTk9fUFNDQU4sIENUUllfSkFQQU41MSB9LAorCXtNS0sxMl9NS0tBMSwJTUtLMTIsCQlNS0tBLAkJTUtLNUdIWl9GTEFHMSwgTkVFRF9ORkMsIFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjUyIH0sCisJe01LSzEyX01LS0MsCU1LSzEyLAkJTUtLQywJCU1LSzVHSFpfRkxBRzEsIE5FRURfTkZDLCBOT19QU0NBTiwgQ1RSWV9KQVBBTjUzIH0sCisJe01LSzEyX01LS0EyLAlNS0sxMiwJCU1LS0EsCQlNS0s1R0haX0ZMQUcxLCBORUVEX05GQywgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csIENUUllfSkFQQU41NCB9LAorCisKKwkvKiBUaGVzZSBhcmUgc3VwZXIgZG9tYWlucyAqLworCXtXT1IwX1dPUkxELAlXT1IwX1dPUkxELAlXT1IwX1dPUkxELAlOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKwl7V09SMV9XT1JMRCwJV09SMV9XT1JMRCwJV09SMV9XT1JMRCwJRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKwl7V09SMl9XT1JMRCwJV09SMl9XT1JMRCwJV09SMl9XT1JMRCwJRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKwl7V09SM19XT1JMRCwJV09SM19XT1JMRCwJV09SM19XT1JMRCwJTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwIH0sCisJe1dPUjRfV09STEQsCVdPUjRfV09STEQsCVdPUjRfV09STEQsCURJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwIH0sCisJe1dPUjVfRVRTSUMsCVdPUjVfRVRTSUMsCVdPUjVfRVRTSUMsCURJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwIH0sCisJe1dPUjAxX1dPUkxELAlXT1IwMV9XT1JMRCwJV09SMDFfV09STEQsCU5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMCB9LAorCXtXT1IwMl9XT1JMRCwJV09SMDJfV09STEQsCVdPUjAyX1dPUkxELAlOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDAgfSwKKwl7RVUxX1dPUkxELAkgICAgRVUxX1dPUkxELAlFVTFfV09STEQsCU5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMCB9LAorCXtXT1I5X1dPUkxELAlXT1I5X1dPUkxELAlXT1I5X1dPUkxELAlESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMCB9LAorCXtXT1JBX1dPUkxELAlXT1JBX1dPUkxELAlXT1JBX1dPUkxELAlESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMCB9LAorfTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdGFibGUgaXMgdGhlIG1hc3RlciBsaXN0IGZvciBhbGwgZGlmZmVyZW50IGZyZXFldW5jeQorICogYmFuZHMgd2l0aCB0aGUgY29tcGxldGUgbWF0cml4IG9mIGFsbCBwb3NzaWJsZSBmbGFncyBhbmQgc2V0dGluZ3MKKyAqIGZvciBlYWNoIGJhbmQgaWYgaXQgaXMgdXNlZCBpbiBBTlkgcmVnIGRvbWFpbi4KKyAqLworCisjZGVmaW5lIERFRl9SRUdETU4JCUZDQzFfRkNDQQorI2RlZmluZQlERUZfRE1OXzUJCUZDQzEKKyNkZWZpbmUJREVGX0RNTl8yCQlGQ0NBCisjZGVmaW5lCUNPVU5UUllfRVJEX0ZMQUcgICAgICAgIDB4ODAwMAorI2RlZmluZSBXT1JMRFdJREVfUk9BTUlOR19GTEFHICAweDQwMDAKKyNkZWZpbmUJU1VQRVJfRE9NQUlOX01BU0sJMHgwZmZmCisjZGVmaW5lCUNPVU5UUllfQ09ERV9NQVNLCTB4MDNmZgorI2RlZmluZSBDRl9JTlRFUkZFUkVOQ0UJCShDSEFOTkVMX0NXX0lOVCB8IENIQU5ORUxfUkFEQVJfSU5UKQorI2RlZmluZSBDSEFOTkVMXzE0CQkoMjQ4NCkJLyogODAyLjExZyBvcGVyYXRpb24gaXMgbm90IHBlcm1pdHRlZCBvbiBjaGFubmVsIDE0ICovCisjZGVmaW5lIElTXzExR19DSDE0KF9jaCxfY2YpIFwKKwkoKChfY2gpID09IENIQU5ORUxfMTQpICYmICgoX2NmKSA9PSBDSEFOTkVMX0cpKQorCisjZGVmaW5lCVlFUwlUUlVFCisjZGVmaW5lCU5PCUZBTFNFCisKK2VudW0geworCUNUUllfREVCVUcJPSAweDFmZiwJCS8qIGRlYnVnIGNvdW50cnkgY29kZSAqLworCUNUUllfREVGQVVMVAk9IDAJCQkvKiBkZWZhdWx0IGNvdW50cnkgY29kZSAqLworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUhBTF9DVFJZX0NPREUJY291bnRyeUNvZGU7CisJSEFMX1JFR19ET01BSU4JcmVnRG1uRW51bTsKKwljb25zdCBjaGFyKgkJaXNvTmFtZTsKKwljb25zdCBjaGFyKgkJbmFtZTsKKwlIQUxfQk9PTAkJYWxsb3cxMWc7CisJSEFMX0JPT0wJCWFsbG93MTFhVHVyYm87CisJSEFMX0JPT0wJCWFsbG93MTFnVHVyYm87CisgICAgSEFMX0JPT0wgICAgICAgIGFsbG93MTFuYTsgICAgICAvKiBIVC00MCBhbGxvd2VkIGluIDVHSHo/ICovCisgICAgSEFMX0JPT0wgICAgICAgIGFsbG93MTFuZzsgICAgICAvKiBIVC00MCBhbGxvd2VkIGluIDJHSHo/ICovCisJdTE2X3QJCW91dGRvb3JDaGFuU3RhcnQ7Cit9IENPVU5UUllfQ09ERV9UT19FTlVNX1JEOworCitzdGF0aWMgQ09VTlRSWV9DT0RFX1RPX0VOVU1fUkQgYWxsQ291bnRyaWVzW10gPSB7CisgICAge0NUUllfREVCVUcsICAgICAgIE5PX0VOVU1SRCwgICAgICJEQiIsICJERUJVRyIsICAgICAgICAgIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfREVGQVVMVCwgICAgIERFRl9SRUdETU4sICAgICJOQSIsICJOT19DT1VOVFJZX1NFVCIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfQUxCQU5JQSwgICAgIE5VTEwxX1dPUkxELCAgICJBTCIsICJBTEJBTklBIiwgICAgICAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfQUxHRVJJQSwgICAgIE5VTEwxX1dPUkxELCAgICJEWiIsICJBTEdFUklBIiwgICAgICAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfQVJHRU5USU5BLCAgIEFQTDNfV09STEQsICAgICJBUiIsICJBUkdFTlRJTkEiLCAgICAgIFlFUywgTk8sICBOTywgIE5PLCAgTk8sICA3MDAwIH0sCisgICAge0NUUllfQVJNRU5JQSwgICAgIEVUU0k0X1dPUkxELCAgICJBTSIsICJBUk1FTklBIiwgICAgICAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfQVVTVFJBTElBLCAgIEZDQzZfV09STEQsICAgICJBVSIsICJBVVNUUkFMSUEiLCAgICAgIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfQVVTVFJJQSwgICAgIEVUU0kyX1dPUkxELCAgICJBVCIsICJBVVNUUklBIiwgICAgICAgIFlFUywgTk8sICBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfQVpFUkJBSUpBTiwgIEVUU0k0X1dPUkxELCAgICJBWiIsICJBWkVSQkFJSkFOIiwgICAgIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfQkFIUkFJTiwgICAgIEFQTDZfV09STEQsICAgICJCSCIsICJCQUhSQUlOIiwgICAgICAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfQkVMQVJVUywgICAgIEVUU0kxX1dPUkxELCAgICJCWSIsICJCRUxBUlVTIiwgICAgICAgIFlFUywgTk8sICBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfQkVMR0lVTSwgICAgIEVUU0kxX1dPUkxELCAgICJCRSIsICJCRUxHSVVNIiwgICAgICAgIFlFUywgTk8sICBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfQkVMSVpFLCAgICAgIEFQTDFfRVRTSUMsICAgICJCWiIsICJCRUxJWkUiLCAgICAgICAgIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfQk9MSVZJQSwgICAgIEFQTDFfRVRTSUMsICAgICJCTyIsICJCT0xWSUEiLCAgICAgICAgIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfQlJBWklMLCAgICAgIEZDQzNfV09STEQsICAgICJCUiIsICJCUkFaSUwiLCAgICAgICAgIE5PLCAgTk8sICBOTywgIE5PLCAgTk8sICA3MDAwIH0sCisgICAge0NUUllfQlJVTkVJX0RBUlVTU0FMQU0sQVBMMV9XT1JMRCwiQk4iLCAiQlJVTkVJIERBUlVTU0FMQU0iLCBZRVMsIFlFUywgWUVTLCAgWUVTLCBZRVMsIDcwMDAgfSwKKyAgICB7Q1RSWV9CVUxHQVJJQSwgICAgRVRTSTZfV09STEQsICAgIkJHIiwgIkJVTEdBUklBIiwgICAgICAgWUVTLCBOTywgIFlFUywgWUVTLCBZRVMsIDcwMDAgfSwKKyAgICB7Q1RSWV9DQU5BREEsICAgICAgRkNDNl9GQ0NBLCAgICAgIkNBIiwgIkNBTkFEQSIsICAgICAgICAgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDAgfSwKKyAgICB7Q1RSWV9DSElMRSwgICAgICAgQVBMNl9XT1JMRCwgICAgIkNMIiwgIkNISUxFIiwgICAgICAgICAgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDAgfSwKKyAgICB7Q1RSWV9DSElOQSwgICAgICAgQVBMMV9XT1JMRCwgICAgIkNOIiwgIkNISU5BIiwgICAgICAgICAgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDAgfSwKKyAgICB7Q1RSWV9DT0xPTUJJQSwgICAgRkNDMV9GQ0NBLCAgICAgIkNPIiwgIkNPTE9NQklBIiwgICAgICAgWUVTLCBOTywgIFlFUywgTk8sICBZRVMsIDcwMDAgfSwKKyAgICB7Q1RSWV9DT1NUQV9SSUNBLCAgRkNDMV9XT1JMRCwgICAgIkNSIiwgIkNPU1RBIFJJQ0EiLCAgICAgWUVTLCBOTywgIFlFUywgTk8sICBZRVMsIDcwMDAgfSwKKyAgICB7Q1RSWV9DUk9BVElBLCAgICAgRVRTSTNfV09STEQsICAgIkhSIiwgIkNST0FUSUEiLCAgICAgICAgWUVTLCBOTywgIFlFUywgTk8sICBZRVMsIDcwMDAgfSwKKyAgICB7Q1RSWV9DWVBSVVMsICAgICAgRVRTSTNfV09STEQsICAgIkNZIiwgIkNZUFJVUyIsICAgICAgICAgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDAgfSwKKyAgICB7Q1RSWV9DWkVDSCwgICAgICAgRVRTSTNfV09STEQsICAgIkNaIiwgIkNaRUNIIFJFUFVCTElDIiwgWUVTLCBOTywgWUVTLCAgWUVTLCBZRVMsIDcwMDAgfSwKKyAgICB7Q1RSWV9ERU5NQVJLLCAgICAgRVRTSTFfV09STEQsICAgIkRLIiwgIkRFTk1BUksiLCAgICAgICAgWUVTLCBOTywgIFlFUywgWUVTLCBZRVMsIDcwMDAgfSwKKyAgICB7Q1RSWV9ET01JTklDQU5fUkVQVUJMSUMsRkNDMV9GQ0NBLCJETyIsICJET01JTklDQU4gUkVQVUJMSUMiLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0VDVUFET1IsICAgICBGQ0MxX1dPUkxELCAgICAiRUMiLCAiRUNVQURPUiIsICAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0VHWVBULCAgICAgICBFVFNJM19XT1JMRCwgICAiRUciLCAiRUdZUFQiLCAgICAgICAgICBZRVMsIE5PLCAgWUVTLCBOTywgIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0VMX1NBTFZBRE9SLCBGQ0MxX1dPUkxELCAgICAiU1YiLCAiRUwgU0FMVkFET1IiLCAgICBZRVMsIE5PLCAgWUVTLCBOTywgIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0VTVE9OSUEsICAgICBFVFNJMV9XT1JMRCwgICAiRUUiLCAiRVNUT05JQSIsICAgICAgICBZRVMsIE5PLCAgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0ZJTkxBTkQsICAgICBFVFNJMV9XT1JMRCwgICAiRkkiLCAiRklOTEFORCIsICAgICAgICBZRVMsIE5PLCAgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0ZSQU5DRSwgICAgICBFVFNJMV9XT1JMRCwgICAiRlIiLCAiRlJBTkNFIiwgICAgICAgICBZRVMsIE5PLCAgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0ZSQU5DRTIsICAgICBFVFNJM19XT1JMRCwgICAiRjIiLCAiRlJBTkNFX1JFUyIsICAgICBZRVMsIE5PLCAgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0dFT1JHSUEsICAgICBFVFNJNF9XT1JMRCwgICAiR0UiLCAiR0VPUkdJQSIsICAgICAgICBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0dFUk1BTlksICAgICBFVFNJMV9XT1JMRCwgICAiREUiLCAiR0VSTUFOWSIsICAgICAgICBZRVMsIE5PLCAgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0dSRUVDRSwgICAgICBFVFNJMV9XT1JMRCwgICAiR1IiLCAiR1JFRUNFIiwgICAgICAgICBZRVMsIE5PLCAgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0dVQVRFTUFMQSwgICBGQ0MxX0ZDQ0EsICAgICAiR1QiLCAiR1VBVEVNQUxBIiwgICAgICBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0hPTkRVUkFTLCAgICBOVUxMMV9XT1JMRCwgICAiSE4iLCAiSE9ORFVSQVMiLCAgICAgICBZRVMsIE5PLCAgWUVTLCBOTywgIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0hPTkdfS09ORywgICBGQ0MyX1dPUkxELCAgICAiSEsiLCAiSE9ORyBLT05HIiwgICAgICBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0hVTkdBUlksICAgICBFVFNJNF9XT1JMRCwgICAiSFUiLCAiSFVOR0FSWSIsICAgICAgICBZRVMsIE5PLCAgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0lDRUxBTkQsICAgICBFVFNJMV9XT1JMRCwgICAiSVMiLCAiSUNFTEFORCIsICAgICAgICBZRVMsIE5PLCAgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0lORElBLCAgICAgICBBUEw2X1dPUkxELCAgICAiSU4iLCAiSU5ESUEiLCAgICAgICAgICBZRVMsIE5PLCAgWUVTLCBOTywgIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0lORE9ORVNJQSwgICBBUEwxX1dPUkxELCAgICAiSUQiLCAiSU5ET05FU0lBIiwgICAgICBZRVMsIE5PLCAgWUVTLCBOTywgIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0lSQU4sICAgICAgICBBUEwxX1dPUkxELCAgICAiSVIiLCAiSVJBTiIsICAgICAgICAgICBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0lSRUxBTkQsICAgICBFVFNJMV9XT1JMRCwgICAiSUUiLCAiSVJFTEFORCIsICAgICAgICBZRVMsIE5PLCAgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0lTUkFFTCwgICAgICBFVFNJM19XT1JMRCwgICAiSUwiLCAiSVNSQUVMIiwgICAgICAgICBZRVMsIE5PLCAgWUVTLCBOTywgIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0lTUkFFTDIsICAgICBOVUxMMV9FVFNJQiwgICAiSVNSIiwiSVNSQUVMX1JFUyIsICAgICBZRVMsIE5PLCAgWUVTLCBOTywgIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0lUQUxZLCAgICAgICBFVFNJMV9XT1JMRCwgICAiSVQiLCAiSVRBTFkiLCAgICAgICAgICBZRVMsIE5PLCAgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0pBTUFJQ0EsICAgICBFVFNJMV9XT1JMRCwgICAiSk0iLCAiSkFNQUlDQSIsICAgICAgICBZRVMsIE5PLCAgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOLCAgICAgICBNS0sxX01LS0EsICAgICAiSlAiLCAiSkFQQU4iLCAgICAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMSwgICAgICBNS0sxX01LS0IsICAgICAiSjEiLCAiSkFQQU4xIiwgICAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMiwgICAgICBNS0sxX0ZDQ0EsICAgICAiSjIiLCAiSkFQQU4yIiwgICAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMywgICAgICBNS0syX01LS0EsICAgICAiSjMiLCAiSkFQQU4zIiwgICAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONCwgICAgICBNS0sxX01LS0ExLCAgICAiSjQiLCAiSkFQQU40IiwgICAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONSwgICAgICBNS0sxX01LS0EyLCAgICAiSjUiLCAiSkFQQU41IiwgICAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONiwgICAgICBNS0sxX01LS0MsICAgICAiSjYiLCAiSkFQQU42IiwgICAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONywgICAgICBNS0szX01LS0IsICAgICAiSjciLCAiSkFQQU43IiwgICAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOOCwgICAgICBNS0szX01LS0EyLCAgICAiSjgiLCAiSkFQQU44IiwgICAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOOSwgICAgICBNS0szX01LS0MsICAgICAiSjkiLCAiSkFQQU45IiwgICAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMTAsICAgICBNS0s0X01LS0IsICAgICAiSjEwIiwgIkpBUEFOMTAiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMTEsICAgICBNS0s0X01LS0EyLCAgICAiSjExIiwgIkpBUEFOMTEiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMTIsICAgICBNS0s0X01LS0MsICAgICAiSjEyIiwgIkpBUEFOMTIiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMTMsICAgICBNS0s1X01LS0IsICAgICAiSjEzIiwgIkpBUEFOMTMiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMTQsICAgICBNS0s1X01LS0EyLCAgICAiSjE0IiwgIkpBUEFOMTQiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMTUsICAgICBNS0s1X01LS0MsICAgICAiSjE1IiwgIkpBUEFOMTUiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMTYsICAgICBNS0s2X01LS0IsICAgICAiSjE2IiwgIkpBUEFOMTYiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMTcsICAgICBNS0s2X01LS0EyLCAgICAiSjE3IiwgIkpBUEFOMTciLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMTgsICAgICBNS0s2X01LS0MsICAgICAiSjE4IiwgIkpBUEFOMTgiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMTksICAgICBNS0s3X01LS0IsICAgICAiSjE5IiwgIkpBUEFOMTkiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMjAsICAgICBNS0s3X01LS0EsICAgICAiSjIwIiwgIkpBUEFOMjAiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMjEsICAgICBNS0s3X01LS0MsICAgICAiSjIxIiwgIkpBUEFOMjEiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMjIsICAgICBNS0s4X01LS0IsICAgICAiSjIyIiwgIkpBUEFOMjIiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMjMsICAgICBNS0s4X01LS0EyLCAgICAiSjIzIiwgIkpBUEFOMjMiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMjQsICAgICBNS0s4X01LS0MsICAgICAiSjI0IiwgIkpBUEFOMjQiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMjUsICAgICBNS0szX01LS0EsICAgICAiSjI1IiwgIkpBUEFOMjUiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMjYsICAgICBNS0szX01LS0ExLCAgICAiSjI2IiwgIkpBUEFOMjYiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMjcsICAgICBNS0szX0ZDQ0EsICAgICAiSjI3IiwgIkpBUEFOMjciLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMjgsICAgICBNS0s0X01LS0ExLCAgICAiSjI4IiwgIkpBUEFOMjgiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMjksICAgICBNS0s0X0ZDQ0EsICAgICAiSjI5IiwgIkpBUEFOMjkiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMzAsICAgICBNS0s2X01LS0ExLCAgICAiSjMwIiwgIkpBUEFOMzAiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMzEsICAgICBNS0s2X0ZDQ0EsICAgICAiSjMxIiwgIkpBUEFOMzEiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMzIsICAgICBNS0s3X01LS0ExLCAgICAiSjMyIiwgIkpBUEFOMzIiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMzMsICAgICBNS0s3X0ZDQ0EsICAgICAiSjMzIiwgIkpBUEFOMzMiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMzQsICAgICBNS0s5X01LS0EsICAgICAiSjM0IiwgIkpBUEFOMzQiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMzUsICAgICBNS0sxMF9NS0tBLCAgICAiSjM1IiwgIkpBUEFOMzUiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMzYsICAgICBNS0s0X01LS0EsICAgICAiSjM2IiwgIkpBUEFOMzYiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMzcsICAgICBNS0s5X0ZDQ0EsICAgICAiSjM3IiwgIkpBUEFOMzciLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMzgsICAgICBNS0s5X01LS0ExLCAgICAiSjM4IiwgIkpBUEFOMzgiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFOMzksICAgICBNS0s5X01LS0MsICAgICAiSjM5IiwgIkpBUEFOMzkiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONDAsICAgICBNS0sxMF9NS0tBMiwgICAiSjQwIiwgIkpBUEFONDAiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONDEsICAgICBNS0sxMF9GQ0NBLCAgICAiSjQxIiwgIkpBUEFONDEiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONDIsICAgICBNS0sxMF9NS0tBMSwgICAiSjQyIiwgIkpBUEFONDIiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONDMsICAgICBNS0sxMF9NS0tDLCAgICAiSjQzIiwgIkpBUEFONDMiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONDQsICAgICBNS0sxMF9NS0tBMiwgICAiSjQ0IiwgIkpBUEFONDQiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONDUsICAgICBNS0sxMV9NS0tBLCAgICAiSjQ1IiwgIkpBUEFONDUiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONDYsICAgICBNS0sxMV9GQ0NBLCAgICAiSjQ2IiwgIkpBUEFONDYiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONDcsICAgICBNS0sxMV9NS0tBMSwgICAiSjQ3IiwgIkpBUEFONDciLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONDgsICAgICBNS0sxMV9NS0tDLCAgICAiSjQ4IiwgIkpBUEFONDgiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONDksICAgICBNS0sxMV9NS0tBMiwgICAiSjQ5IiwgIkpBUEFONDkiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONTAsICAgICBNS0sxMl9NS0tBLCAgICAiSjUwIiwgIkpBUEFONTAiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONTEsICAgICBNS0sxMl9GQ0NBLCAgICAiSjUxIiwgIkpBUEFONTEiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONTIsICAgICBNS0sxMl9NS0tBMSwgICAiSjUyIiwgIkpBUEFONTIiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONTMsICAgICBNS0sxMl9NS0tDLCAgICAiSjUzIiwgIkpBUEFONTMiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pBUEFONTQsICAgICBNS0sxMl9NS0tBMiwgICAiSjU0IiwgIkpBUEFONTQiLCAgICAgICBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0pPUkRBTiwgICAgICBFVFNJMl9XT1JMRCwgICAiSk8iLCAiSk9SREFOIiwgICAgICAgICBZRVMsIE5PLCAgWUVTLCBOTywgIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0tBWkFLSFNUQU4sICBOVUxMMV9XT1JMRCwgICAiS1oiLCAiS0FaQUtIU1RBTiIsICAgICBZRVMsIE5PLCAgWUVTLCBOTywgIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0tPUkVBX05PUlRILCBBUEw5X1dPUkxELCAgICAiS1AiLCAiTk9SVEggS09SRUEiLCAgICBZRVMsIE5PLCAgTk8sICBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0tPUkVBX1JPQywgICBBUEw5X1dPUkxELCAgICAiS1IiLCAiS09SRUEgUkVQVUJMSUMiLCBZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0tPUkVBX1JPQzIsICBBUEwyX0FQTEQsICAgICAiSzIiLCAiS09SRUEgUkVQVUJMSUMyIixZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0tPUkVBX1JPQzMsICBBUEw5X1dPUkxELCAgICAiSzMiLCAiS09SRUEgUkVQVUJMSUMzIixZRVMsIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX0tVV0FJVCwgICAgICBOVUxMMV9XT1JMRCwgICAiS1ciLCAiS1VXQUlUIiwgICAgICAgICBZRVMsIE5PLCAgWUVTLCBOTywgIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0xBVFZJQSwgICAgICBFVFNJMV9XT1JMRCwgICAiTFYiLCAiTEFUVklBIiwgICAgICAgICBZRVMsIE5PLCAgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0xFQkFOT04sICAgICBOVUxMMV9XT1JMRCwgICAiTEIiLCAiTEVCQU5PTiIsICAgICAgICBZRVMsIE5PLCAgWUVTLCBOTywgIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0xJRUNIVEVOU1RFSU4sRVRTSTFfV09STEQsICAiTEkiLCAiTElFQ0hURU5TVEVJTiIsICBZRVMsIE5PLCAgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0xJVEhVQU5JQSwgICBFVFNJMV9XT1JMRCwgICAiTFQiLCAiTElUSFVBTklBIiwgICAgICBZRVMsIE5PLCAgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX0xVWEVNQk9VUkcsICBFVFNJMV9XT1JMRCwgICAiTFUiLCAiTFVYRU1CT1VSRyIsICAgICBZRVMsIE5PLCAgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX01BQ0FVLCAgICAgICBGQ0MyX1dPUkxELCAgICAiTU8iLCAiTUFDQVUiLCAgICAgICAgICBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX01BQ0VET05JQSwgICBOVUxMMV9XT1JMRCwgICAiTUsiLCAiTUFDRURPTklBIiwgICAgICBZRVMsIE5PLCAgWUVTLCBOTywgIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX01BTEFZU0lBLCAgICBBUEw4X1dPUkxELCAgICAiTVkiLCAiTUFMQVlTSUEiLCAgICAgICBOTywgIE5PLCAgTk8sICBOTywgIE5PLCAgNzAwMCB9LAorICAgIHtDVFJZX01BTFRBLCAgICAgICBFVFNJMV9XT1JMRCwgICAiTVQiLCAiTUFMVEEiLCAgICAgICAgICBZRVMsIE5PLCAgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX01FWElDTywgICAgICBGQ0MxX0ZDQ0EsICAgICAiTVgiLCAiTUVYSUNPIiwgICAgICAgICBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX01PTkFDTywgICAgICBFVFNJNF9XT1JMRCwgICAiTUMiLCAiTU9OQUNPIiwgICAgICAgICBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX01PUk9DQ08sICAgICBOVUxMMV9XT1JMRCwgICAiTUEiLCAiTU9ST0NDTyIsICAgICAgICBZRVMsIE5PLCAgWUVTLCBOTywgIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX05FVEhFUkxBTkRTLCBFVFNJMV9XT1JMRCwgICAiTkwiLCAiTkVUSEVSTEFORFMiLCAgICBZRVMsIE5PLCAgWUVTLCBZRVMsIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX05FVEhFUkxBTkRTX0FOVCwgRVRTSTFfV09STEQsICJBTiIsICJORVRIRVJMQU5EUy1BTlRJTExFUyIsIFlFUywgTk8sICBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfTkVXX1pFQUxBTkQsIEZDQzJfRVRTSUMsICAgICJOWiIsICJORVcgWkVBTEFORCIsICAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfTk9SV0FZLCAgICAgIEVUU0kxX1dPUkxELCAgICJOTyIsICJOT1JXQVkiLCAgICAgICAgIFlFUywgTk8sICBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfT01BTiwgICAgICAgIEFQTDZfV09STEQsICAgICJPTSIsICJPTUFOIiwgICAgICAgICAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfUEFLSVNUQU4sICAgIE5VTEwxX1dPUkxELCAgICJQSyIsICJQQUtJU1RBTiIsICAgICAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfUEFOQU1BLCAgICAgIEZDQzFfRkNDQSwgICAgICJQQSIsICJQQU5BTUEiLCAgICAgICAgIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfUEVSVSwgICAgICAgIEFQTDFfV09STEQsICAgICJQRSIsICJQRVJVIiwgICAgICAgICAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfUEhJTElQUElORVMsIEFQTDFfV09STEQsICAgICJQSCIsICJQSElMSVBQSU5FUyIsICAgIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfUE9MQU5ELCAgICAgIEVUU0kxX1dPUkxELCAgICJQTCIsICJQT0xBTkQiLCAgICAgICAgIFlFUywgTk8sICBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfUE9SVFVHQUwsICAgIEVUU0kxX1dPUkxELCAgICJQVCIsICJQT1JUVUdBTCIsICAgICAgIFlFUywgTk8sICBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfUFVFUlRPX1JJQ08sIEZDQzFfRkNDQSwgICAgICJQUiIsICJQVUVSVE8gUklDTyIsICAgIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfUUFUQVIsICAgICAgIE5VTEwxX1dPUkxELCAgICJRQSIsICJRQVRBUiIsICAgICAgICAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfUk9NQU5JQSwgICAgIE5VTEwxX1dPUkxELCAgICJSTyIsICJST01BTklBIiwgICAgICAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfUlVTU0lBLCAgICAgIE5VTEwxX1dPUkxELCAgICJSVSIsICJSVVNTSUEiLCAgICAgICAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfU0FVRElfQVJBQklBLE5VTEwxX1dPUkxELCAgICJTQSIsICJTQVVESSBBUkFCSUEiLCAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfU0VSQklBX01PTlQsIEVUU0kxX1dPUkxELCAgICJDUyIsICJTRVJCSUEgJiBNT05URU5FR1JPIiwgWUVTLCBOTywgIFlFUywgWUVTLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfU0lOR0FQT1JFLCAgIEFQTDZfV09STEQsICAgICJTRyIsICJTSU5HQVBPUkUiLCAgICAgIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfU0xPVkFLSUEsICAgIEVUU0kxX1dPUkxELCAgICJTSyIsICJTTE9WQUsgUkVQVUJMSUMiLFlFUywgTk8sICBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfU0xPVkVOSUEsICAgIEVUU0kxX1dPUkxELCAgICJTSSIsICJTTE9WRU5JQSIsICAgICAgIFlFUywgTk8sICBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfU09VVEhfQUZSSUNBLEZDQzNfV09STEQsICAgICJaQSIsICJTT1VUSCBBRlJJQ0EiLCAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfU1BBSU4sICAgICAgIEVUU0kxX1dPUkxELCAgICJFUyIsICJTUEFJTiIsICAgICAgICAgIFlFUywgTk8sICBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfU1JJTEFOS0EsICAgIEZDQzNfV09STEQsICAgICJMSyIsICJTUkkgTEFOS0EiLCAgICAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfU1dFREVOLCAgICAgIEVUU0kxX1dPUkxELCAgICJTRSIsICJTV0VERU4iLCAgICAgICAgIFlFUywgTk8sICBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfU1dJVFpFUkxBTkQsIEVUU0kxX1dPUkxELCAgICJDSCIsICJTV0lUWkVSTEFORCIsICAgIFlFUywgTk8sICBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfU1lSSUEsICAgICAgIE5VTEwxX1dPUkxELCAgICJTWSIsICJTWVJJQSIsICAgICAgICAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfVEFJV0FOLCAgICAgIEFQTDNfRkNDQSwgICAgICJUVyIsICJUQUlXQU4iLCAgICAgICAgIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfVEhBSUxBTkQsICAgIE5VTEwxX1dPUkxELCAgICJUSCIsICJUSEFJTEFORCIsICAgICAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfVFJJTklEQURfWV9UT0JBR08sRVRTSTRfV09STEQsIlRUIiwgIlRSSU5JREFEICYgVE9CQUdPIiwgWUVTLCBOTywgWUVTLCBOTywgWUVTLCA3MDAwIH0sCisgICAge0NUUllfVFVOSVNJQSwgICAgIEVUU0kzX1dPUkxELCAgICJUTiIsICJUVU5JU0lBIiwgICAgICAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfVFVSS0VZLCAgICAgIEVUU0kzX1dPUkxELCAgICJUUiIsICJUVVJLRVkiLCAgICAgICAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfVUtSQUlORSwgICAgIE5VTEwxX1dPUkxELCAgICJVQSIsICJVS1JBSU5FIiwgICAgICAgIFlFUywgTk8sICBZRVMsIE5PLCAgWUVTLCA3MDAwIH0sCisgICAge0NUUllfVUFFLCAgICAgICAgIE5VTEwxX1dPUkxELCAgICJBRSIsICJVTklURUQgQVJBQiBFTUlSQVRFUyIsIFlFUywgTk8sIFlFUywgTk8sIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX1VOSVRFRF9LSU5HRE9NLCBFVFNJMV9XT1JMRCwiR0IiLCAiVU5JVEVEIEtJTkdET00iLCBZRVMsIE5PLCAgWUVTLCBOTywgIFlFUywgNzAwMCB9LAorICAgIHtDVFJZX1VOSVRFRF9TVEFURVMsIEZDQzNfRkNDQSwgICAiVVMiLCAiVU5JVEVEIFNUQVRFUyIsICBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNTgyNSB9LAorICAgIHtDVFJZX1VOSVRFRF9TVEFURVNfRkNDNDksIEZDQzRfRkNDQSwgICAiUFMiLCAiVU5JVEVEIFNUQVRFUyAoUFVCTElDIFNBRkVUWSkiLCAgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDAgfSwKKyAgICB7Q1RSWV9VUlVHVUFZLCAgICAgRkNDMV9XT1JMRCwgICAgIlVZIiwgIlVSVUdVQVkiLCAgICAgICAgWUVTLCBOTywgIFlFUywgTk8sICBZRVMsIDcwMDAgfSwKKyAgICB7Q1RSWV9VWkJFS0lTVEFOLCAgRkNDM19GQ0NBLCAgICAgIlVaIiwgIlVaQkVLSVNUQU4iLCAgICAgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDAgfSwKKyAgICB7Q1RSWV9WRU5FWlVFTEEsICAgQVBMMl9FVFNJQywgICAgIlZFIiwgIlZFTkVaVUVMQSIsICAgICAgWUVTLCBOTywgIFlFUywgTk8sICBZRVMsIDcwMDAgfSwKKyAgICB7Q1RSWV9WSUVUX05BTSwgICAgTlVMTDFfV09STEQsICAgIlZOIiwgIlZJRVQgTkFNIiwgICAgICAgWUVTLCBOTywgIFlFUywgTk8sICBZRVMsIDcwMDAgfSwKKyAgICB7Q1RSWV9ZRU1FTiwgICAgICAgTlVMTDFfV09STEQsICAgIllFIiwgIllFTUVOIiwgICAgICAgICAgWUVTLCBOTywgIFlFUywgTk8sICBZRVMsIDcwMDAgfSwKKyAgICB7Q1RSWV9aSU1CQUJXRSwgICAgTlVMTDFfV09STEQsICAgIlpXIiwgIlpJTUJBQldFIiwgICAgICAgWUVTLCBOTywgIFlFUywgTk8sICBZRVMsIDcwMDAgfQorfTsKKwordHlwZWRlZiBzdHJ1Y3QgUmVnRG1uRnJlcUJhbmQgeworCXUxNl90CWxvd0NoYW5uZWw7CS8qIExvdyBjaGFubmVsIGNlbnRlciBpbiBNSHogKi8KKwl1MTZfdAloaWdoQ2hhbm5lbDsJLyogSGlnaCBDaGFubmVsIGNlbnRlciBpbiBNSHogKi8KKwl1OF90CXBvd2VyRGZzOwkvKiBNYXggcG93ZXIgKGRCbSkgZm9yIGNoYW5uZWwKKwkJCQkJICAgcmFuZ2Ugd2hlbiB1c2luZyBERlMgKi8KKwl1OF90CWFudGVubmFNYXg7CS8qIE1heCBhbGxvd2VkIGFudGVubmEgZ2FpbiAqLworCXU4X3QJY2hhbm5lbEJXOwkvKiBCYW5kd2lkdGggb2YgdGhlIGNoYW5uZWwgKi8KKwl1OF90CWNoYW5uZWxTZXA7CS8qIENoYW5uZWwgc2VwYXJhdGlvbiB3aXRoaW4KKwkJCQkJICAgdGhlIGJhbmQgKi8KKwl1NjRfdAl1c2VEZnM7CQkvKiBVc2UgREZTIGluIHRoZSBSZWdEb21haW4KKwkJCQkJICAgaWYgY29ycmVzcG9uZGluZyBiaXQgaXMgc2V0ICovCisJdTY0X3QJdXNlUGFzc1NjYW47CS8qIFVzZSBQYXNzaXZlIFNjYW4gaW4gdGhlIFJlZ0RvbWFpbgorCQkJCQkgICBpZiBjb3JyZXNwb25kaW5nIGJpdCBpcyBzZXQgKi8KKwl1OF90CXJlZ0NsYXNzSWQ7CS8qIFJlZ3VsYXRvcnkgY2xhc3MgaWQgKi8KKwl1OF90CXVzZUV4dENoYW5EZnM7CS8qIFJlZ3VsYXRvcnkgY2xhc3MgaWQgKi8KK30gUkVHX0RNTl9GUkVRX0JBTkQ7CisKKy8qIEJpdCBtYXNrcyBmb3IgREZTIHBlciByZWdkb21haW4gKi8KKworZW51bSB7CisJTk9fREZTICAgPSAweDAwMDAwMDAwMDAwMDAwMDBVTEwsCisJREZTX0ZDQzMgPSAweDAwMDAwMDAwMDAwMDAwMDFVTEwsCisJREZTX0VUU0kgPSAweDAwMDAwMDAwMDAwMDAwMDJVTEwsCisJREZTX01LSzQgPSAweDAwMDAwMDAwMDAwMDAwMDRVTEwsCit9OworCisvKiBUaGUgdGFibGUgb2YgZnJlcXVlbmN5IGJhbmRzIGlzIGluZGV4ZWQgYnkgYSBiaXRtYXNrLiAgVGhlIG9yZGVyaW5nCisgKiBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgZW51bSBiZWxvdy4gIFdoZW4gYWRkaW5nIGEgbmV3CisgKiBmcmVxdWVuY3kgYmFuZCwgYmUgc3VyZSB0byBtYXRjaCB0aGUgbG9jYXRpb24gaW4gdGhlIGVudW0gd2l0aCB0aGUKKyAqIGNvbW1lbnRzCisgKi8KKworLyoKKyAqIDVHSHogMTFBIGNoYW5uZWwgdGFncworICovCisKK2VudW0geworCUYxXzQ5MTVfNDkyNSwKKwlGMV80OTM1XzQ5NDUsCisJRjFfNDkyMF80OTgwLAorCUYxXzQ5NDJfNDk4NywKKwlGMV80OTQ1XzQ5ODUsCisJRjFfNDk1MF80OTgwLAorCUYxXzUwMzVfNTA0MCwKKwlGMV81MDQwXzUwODAsCisJRjFfNTA1NV81MDU1LAorCisJRjFfNTEyMF81MjQwLAorCisJRjFfNTE3MF81MjMwLAorCUYyXzUxNzBfNTIzMCwKKworCUYxXzUxODBfNTI0MCwKKwlGMl81MTgwXzUyNDAsCisJRjNfNTE4MF81MjQwLAorCUY0XzUxODBfNTI0MCwKKwlGNV81MTgwXzUyNDAsCisJRjZfNTE4MF81MjQwLAorCUY3XzUxODBfNTI0MCwKKworCUYxXzUxODBfNTMyMCwKKworCUYxXzUyNDBfNTI4MCwKKworCUYxXzUyNjBfNTI4MCwKKworCUYxXzUyNjBfNTMyMCwKKwlGMl81MjYwXzUzMjAsCisJRjNfNTI2MF81MzIwLAorCUY0XzUyNjBfNTMyMCwKKwlGNV81MjYwXzUzMjAsCisJRjZfNTI2MF81MzIwLAorCUY3XzUyNjBfNTMyMCwKKworCUYxXzUyNjBfNTcwMCwKKworCUYxXzUyODBfNTMyMCwKKworICAgIEYxXzU1MDBfNTU4MCwKKworCUYxXzU1MDBfNTYyMCwKKworCUYxXzU1MDBfNTcwMCwKKwlGMl81NTAwXzU3MDAsCisJRjNfNTUwMF81NzAwLAorCUY0XzU1MDBfNTcwMCwKKworICAgIEYxXzU2NjBfNTcwMCwKKworCUYxXzU3NDVfNTgwNSwKKwlGMl81NzQ1XzU4MDUsCisJRjNfNTc0NV81ODA1LAorCisJRjFfNTc0NV81ODI1LAorCUYyXzU3NDVfNTgyNSwKKwlGM181NzQ1XzU4MjUsCisJRjRfNTc0NV81ODI1LAorCUY1XzU3NDVfNTgyNSwKKwlGNl81NzQ1XzU4MjUsCisKKwlXMV80OTIwXzQ5ODAsCisJVzFfNTA0MF81MDgwLAorCVcxXzUxNzBfNTIzMCwKKwlXMV81MTgwXzUyNDAsCisJVzFfNTI2MF81MzIwLAorCVcxXzU3NDVfNTgyNSwKKwlXMV81NTAwXzU3MDAsCisJVzJfNTI2MF81MzIwLAorICAgICAgICBXMl81MTgwXzUyNDAsCisJVzJfNTgyNV81ODI1LAorfTsKKworc3RhdGljIFJFR19ETU5fRlJFUV9CQU5EIHJlZ0RtbjVHaHpGcmVxW10gPSB7CisJeyA0OTE1LCA0OTI1LCAyMywgMCwgMTAsIDUsIE5PX0RGUywgUFNDQU5fTUtLMiwgMTYsIDAgfSwJCS8qIEYxXzQ5MTVfNDkyNSAqLworCXsgNDkzNSwgNDk0NSwgMjMsIDAsIDEwLCA1LCBOT19ERlMsIFBTQ0FOX01LSzIsIDE2LCAwIH0sCQkvKiBGMV80OTM1XzQ5NDUgKi8KKwl7IDQ5MjAsIDQ5ODAsIDIzLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fTUtLMiwgNywgMCB9LAkJLyogRjFfNDkyMF80OTgwICovCisJeyA0OTQyLCA0OTg3LCAyNywgNiwgNSwgIDUsIERGU19GQ0MzLCBQU0NBTl9GQ0MsIDAsIDAgfSwJCS8qIEYxXzQ5NDJfNDk4NyAqLworCXsgNDk0NSwgNDk4NSwgMzAsIDYsIDEwLCA1LCBERlNfRkNDMywgUFNDQU5fRkNDLCAwLCAwIH0sCQkvKiBGMV80OTQ1XzQ5ODUgKi8KKwl7IDQ5NTAsIDQ5ODAsIDMzLCA2LCAyMCwgNSwgREZTX0ZDQzMsIFBTQ0FOX0ZDQywgMCwgMCB9LAkJLyogRjFfNDk1MF80OTgwICovCisJeyA1MDM1LCA1MDQwLCAyMywgMCwgMTAsIDUsIE5PX0RGUywgUFNDQU5fTUtLMiwgMTIsIDAgfSwJCS8qIEYxXzUwMzVfNTA0MCAqLworCXsgNTA0MCwgNTA4MCwgMjMsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9NS0syLCAyLCAwIH0sCQkvKiBGMV81MDQwXzUwODAgKi8KKwl7IDUwNTUsIDUwNTUsIDIzLCAwLCAxMCwgNSwgTk9fREZTLCBQU0NBTl9NS0syLCAxMiwgMCB9LAkJLyogRjFfNTA1NV81MDU1ICovCisKKwl7IDUxMjAsIDUyNDAsIDUsICA2LCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDAgfSwJCQkvKiBGMV81MTIwXzUyNDAgKi8KKworCXsgNTE3MCwgNTIzMCwgMjMsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMiwgMSwgMCB9LAkvKiBGMV81MTcwXzUyMzAgKi8KKwl7IDUxNzAsIDUyMzAsIDIwLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzIsIDEsIDAgfSwJLyogRjJfNTE3MF81MjMwICovCisKKwl7IDUxODAsIDUyNDAsIDE1LCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fRkNDIHwgUFNDQU5fRVRTSSwgMCwgMCB9LAkvKiBGMV81MTgwXzUyNDAgKi8KKwl7IDUxODAsIDUyNDAsIDE3LCA2LCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fRkNDLCAxLCAwIH0sCQkJCS8qIEYyXzUxODBfNTI0MCAqLworCXsgNTE4MCwgNTI0MCwgMTgsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwLCAwIH0sCS8qIEYzXzUxODBfNTI0MCAqLworCXsgNTE4MCwgNTI0MCwgMjAsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwLCAwIH0sCS8qIEY0XzUxODBfNTI0MCAqLworCXsgNTE4MCwgNTI0MCwgMjMsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwLCAwIH0sCS8qIEY1XzUxODBfNTI0MCAqLworCXsgNTE4MCwgNTI0MCwgMjMsIDYsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9GQ0MsIDAsIDAgfSwJCQkJLyogRjZfNTE4MF81MjQwICovCisgIHsgNTE4MCwgNTI0MCwgMjMsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMCB9LCAgICAgICAgICAgLyogRjdfNTE4MF81MjQwICovCisKKwl7IDUxODAsIDUzMjAsIDIwLCA2LCAyMCwgMjAsIERGU19FVFNJLCBQU0NBTl9FVFNJLCAwLCAwIH0sCQkJLyogRjFfNTE4MF81MzIwICovCisKKwl7IDUyNDAsIDUyODAsIDIzLCAwLCAyMCwgMjAsIERGU19GQ0MzLCBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwLCAwIH0sCS8qIEYxXzUyNDBfNTI4MCAqLworCisJeyA1MjYwLCA1MjgwLCAyMywgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwLCAwIH0sCS8qIEYxXzUyNjBfNTI4MCAqLworCisJeyA1MjYwLCA1MzIwLCAxOCwgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwLCAwIH0sCS8qIEYxXzUyNjBfNTMyMCAqLworCisJeyA1MjYwLCA1MzIwLCAyMCwgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJIHwgREZTX01LSzQsIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0kgfCBQU0NBTl9NS0szICwgMCwgMCB9LAorCQkJCQkJCQkJCQkvKiBGMl81MjYwXzUzMjAgKi8KKworCXsgNTI2MCwgNTMyMCwgMjAsIDYsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fRkNDLCAyLCAwIH0sCS8qIEYzXzUyNjBfNTMyMCAqLworCXsgNTI2MCwgNTMyMCwgMjMsIDYsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fRkNDLCAyLCAwIH0sCS8qIEY0XzUyNjBfNTMyMCAqLworCXsgNTI2MCwgNTMyMCwgMjMsIDYsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fRkNDLCAwLCAwIH0sCS8qIEY1XzUyNjBfNTMyMCAqLworCXsgNTI2MCwgNTMyMCwgMzAsIDAsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMCB9LAkJCQkvKiBGNl81MjYwXzUzMjAgKi8KKwl7IDUyNjAsIDUzMjAsIDE3LCA2LCAyMCwgMjAsIERGU19FVFNJLCBQU0NBTl9FVFNJLCAwLCAwIH0sCQkJCS8qIEY3XzUyNjBfNTMyMCAqLworCisJeyA1MjYwLCA1NzAwLCA1LCAgNiwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBOT19QU0NBTiwgMCwgMCB9LAkJLyogRjFfNTI2MF81NzAwICovCisKKwl7IDUyODAsIDUzMjAsIDE3LCA2LCAyMCwgMjAsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX0ZDQywgMCwgMCB9LAkvKiBGMV81MjgwXzUzMjAgKi8KKworICAgIHsgNTUwMCwgNTU4MCwgMjMsIDYsIDIwLCAyMCwgREZTX0ZDQzMsIFBTQ0FOX0ZDQywgMH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRjFfNTUwMF81NTgwICovCisKKwl7IDU1MDAsIDU2MjAsIDMwLCA2LCAyMCwgMjAsIERGU19FVFNJLCBQU0NBTl9FVFNJLCAwLCAwIH0sCQkJCS8qIEYxXzU1MDBfNTYyMCAqLworCisJeyA1NTAwLCA1NzAwLCAyMCwgNiwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9GQ0MsIDQsIDAgfSwJCS8qIEYxXzU1MDBfNTcwMCAqLworCXsgNTUwMCwgNTcwMCwgMjcsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fRkNDIHwgUFNDQU5fRVRTSSwgMCwgMCB9LAkvKiBGMl81NTAwXzU3MDAgKi8KKwl7IDU1MDAsIDU3MDAsIDMwLCAwLCAyMCwgMjAsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0ksIDAsIDAgfSwJLyogRjNfNTUwMF81NzAwICovCisJeyA1NTAwLCA1NzAwLCAyMCwgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJIHwgREZTX01LSzQsIFBTQ0FOX01LSzMgfCBQU0NBTl9GQ0MsIDAsIDAgfSwKKwkJCQkJCQkJCQkJLyogRjRfNTUwMF81NzAwICovCisKKyAgICB7IDU2NjAsIDU3MDAsIDIzLCA2LCAyMCwgMjAsIERGU19GQ0MzLCBQU0NBTl9GQ0MsIDB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEYxXzU2NjBfNTcwMCAqLworCisJeyA1NzQ1LCA1ODA1LCAyMywgMCwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwIH0sCQkJCS8qIEYxXzU3NDVfNTgwNSAqLworCXsgNTc0NSwgNTgwNSwgMzAsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMCB9LAkJCQkvKiBGMl81NzQ1XzU4MDUgKi8KKwl7IDU3NDUsIDU4MDUsIDMwLCA2LCAyMCwgMjAsIERGU19FVFNJLCBQU0NBTl9FVFNJLCAwLCAwIH0sCQkJCS8qIEYzXzU3NDVfNTgwNSAqLworCXsgNTc0NSwgNTgyNSwgNSwgIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMCB9LAkJCQkvKiBGMV81NzQ1XzU4MjUgKi8KKwl7IDU3NDUsIDU4MjUsIDE3LCAwLCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDAgfSwJCQkJLyogRjJfNTc0NV81ODI1ICovCisJeyA1NzQ1LCA1ODI1LCAyMCwgMCwgMjAsIDIwLCBERlNfRVRTSSwgTk9fUFNDQU4sIDAsIDAgfSwJCQkJLyogRjNfNTc0NV81ODI1ICovCisJeyA1NzQ1LCA1ODI1LCAzMCwgMCwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwIH0sCQkJCS8qIEY0XzU3NDVfNTgyNSAqLworCXsgNTc0NSwgNTgyNSwgMzAsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMywgMCB9LAkJCS8qIEY1XzU3NDVfNTgyNSAqLworCXsgNTc0NSwgNTgyNSwgMzAsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMCB9LAkJCQkvKiBGNl81NzQ1XzU4MjUgKi8KKworCS8qCisJICogQmVsb3cgYXJlIHRoZSB3b3JsZCByb2FtaW5nIGNoYW5uZWxzCisJICogQWxsIFdXUiBkb21haW5zIGhhdmUgbm8gcG93ZXIgbGltaXQsIGluc3RlYWQgdXNlIHRoZSBjYXJkJ3MgQ1RMCisJICogb3IgbWF4IHBvd2VyIHNldHRpbmdzLgorCSAqLworCXsgNDkyMCwgNDk4MCwgMzAsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9XV1IsIDAsIDAgfSwJCQkJLyogVzFfNDkyMF80OTgwICovCisJeyA1MDQwLCA1MDgwLCAzMCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX1dXUiwgMCB9LAkJCQkvKiBXMV81MDQwXzUwODAgKi8KKwl7IDUxNzAsIDUyMzAsIDMwLCAwLCAyMCwgMjAsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgMCwgMCB9LAkJLyogVzFfNTE3MF81MjMwICovCisJeyA1MTgwLCA1MjQwLCAzMCwgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIDAsIDAgfSwJCS8qIFcxXzUxODBfNTI0MCAqLworCXsgNTI2MCwgNTMyMCwgMzAsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCAwLCAwIH0sCQkvKiBXMV81MjYwXzUzMjAgKi8KKwl7IDU3NDUsIDU4MjUsIDMwLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fV1dSLCAwLCAwIH0sCQkJCS8qIFcxXzU3NDVfNTgyNSAqLworCXsgNTUwMCwgNTcwMCwgMzAsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCAwLCAwIH0sCQkvKiBXMV81NTAwXzU3MDAgKi8KKwl7IDUyNjAsIDUzMjAsIDMwLCAwLCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sICAwLCAwIH0sCQkJCS8qIFcyXzUyNjBfNTMyMCAqLworCXsgNTE4MCwgNTI0MCwgMzAsIDAsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgIDAsIDAgfSwJCQkJLyogVzJfNTE4MF81MjQwICovCisJeyA1ODI1LCA1ODI1LCAzMCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX1dXUiwgMCwgMCB9LAkJCQkvKiBXMl81ODI1XzU4MjUgKi8KK307CisvKgorICogNUdIeiBUdXJibyAoZHluYW1pYyAmIHN0YXRpYykgdGFncworICovCisKK2VudW0geworCVQxXzUxMzBfNTIxMCwKKwlUMV81MjUwXzUzMzAsCisJVDFfNTM3MF81NDkwLAorCVQxXzU1MzBfNTY1MCwKKworCVQxXzUxNTBfNTE5MCwKKwlUMV81MjMwXzUzMTAsCisJVDFfNTM1MF81NDcwLAorCVQxXzU1MTBfNTY3MCwKKworCVQxXzUyMDBfNTI0MCwKKwlUMl81MjAwXzUyNDAsCisJVDFfNTIxMF81MjEwLAorCVQyXzUyMTBfNTIxMCwKKworCVQxXzUyODBfNTI4MCwKKwlUMl81MjgwXzUyODAsCisJVDFfNTI1MF81MjUwLAorCVQxXzUyOTBfNTI5MCwKKwlUMV81MjUwXzUyOTAsCisJVDJfNTI1MF81MjkwLAorCisJVDFfNTU0MF81NjYwLAorCVQxXzU3NjBfNTgwMCwKKwlUMl81NzYwXzU4MDAsCisKKwlUMV81NzY1XzU4MDUsCisKKwlXVDFfNTIxMF81MjUwLAorCVdUMV81MjkwXzUyOTAsCisJV1QxXzU1NDBfNTY2MCwKKwlXVDFfNTc2MF81ODAwLAorfTsKKworc3RhdGljIFJFR19ETU5fRlJFUV9CQU5EIHJlZ0RtbjVHaHpUdXJib0ZyZXFbXSA9IHsKKwl7IDUxMzAsIDUyMTAsIDUsICA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBUMV81MTMwXzUyMTAgKi8KKwl7IDUyNTAsIDUzMzAsIDUsICA2LCA0MCwgNDAsIERGU19GQ0MzLCBOT19QU0NBTiwgMCwgMH0sCS8qIFQxXzUyNTBfNTMzMCAqLworCXsgNTM3MCwgNTQ5MCwgNSwgIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFQxXzUzNzBfNTQ5MCAqLworCXsgNTUzMCwgNTY1MCwgNSwgIDYsIDQwLCA0MCwgREZTX0ZDQzMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVDFfNTUzMF81NjUwICovCisKKwl7IDUxNTAsIDUxOTAsIDUsICA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBUMV81MTUwXzUxOTAgKi8KKwl7IDUyMzAsIDUzMTAsIDUsICA2LCA0MCwgNDAsIERGU19GQ0MzLCBOT19QU0NBTiwgMCwgMH0sCS8qIFQxXzUyMzBfNTMxMCAqLworCXsgNTM1MCwgNTQ3MCwgNSwgIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFQxXzUzNTBfNTQ3MCAqLworCXsgNTUxMCwgNTY3MCwgNSwgIDYsIDQwLCA0MCwgREZTX0ZDQzMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVDFfNTUxMF81NjcwICovCisKKwl7IDUyMDAsIDUyNDAsIDE3LCA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBUMV81MjAwXzUyNDAgKi8KKwl7IDUyMDAsIDUyNDAsIDIzLCA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBUMl81MjAwXzUyNDAgKi8KKwl7IDUyMTAsIDUyMTAsIDE3LCA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBUMV81MjEwXzUyMTAgKi8KKwl7IDUyMTAsIDUyMTAsIDIzLCAwLCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBUMl81MjEwXzUyMTAgKi8KKworCXsgNTI4MCwgNTI4MCwgMjMsIDYsIDQwLCA0MCwgREZTX0ZDQzMsIFBTQ0FOX0ZDQ19ULCAwLCAwfSwJLyogVDFfNTI4MF81MjgwICovCisJeyA1MjgwLCA1MjgwLCAyMCwgNiwgNDAsIDQwLCBERlNfRkNDMywgUFNDQU5fRkNDX1QsIDAsIDB9LAkvKiBUMl81MjgwXzUyODAgKi8KKwl7IDUyNTAsIDUyNTAsIDE3LCAwLCA0MCwgNDAsIERGU19GQ0MzLCBQU0NBTl9GQ0NfVCwgMCwgMH0sCS8qIFQxXzUyNTBfNTI1MCAqLworCXsgNTI5MCwgNTI5MCwgMjAsIDAsIDQwLCA0MCwgREZTX0ZDQzMsIFBTQ0FOX0ZDQ19ULCAwLCAwfSwJLyogVDFfNTI5MF81MjkwICovCisJeyA1MjUwLCA1MjkwLCAyMCwgMCwgNDAsIDQwLCBERlNfRkNDMywgUFNDQU5fRkNDX1QsIDAsIDB9LAkvKiBUMV81MjUwXzUyOTAgKi8KKwl7IDUyNTAsIDUyOTAsIDIzLCA2LCA0MCwgNDAsIERGU19GQ0MzLCBQU0NBTl9GQ0NfVCwgMCwgMH0sCS8qIFQyXzUyNTBfNTI5MCAqLworCisJeyA1NTQwLCA1NjYwLCAyMCwgNiwgNDAsIDQwLCBERlNfRkNDMywgUFNDQU5fRkNDX1QsIDAsIDB9LAkvKiBUMV81NTQwXzU2NjAgKi8KKwl7IDU3NjAsIDU4MDAsIDIwLCAwLCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBUMV81NzYwXzU4MDAgKi8KKwl7IDU3NjAsIDU4MDAsIDMwLCA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBUMl81NzYwXzU4MDAgKi8KKworCXsgNTc2NSwgNTgwNSwgMzAsIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFQxXzU3NjVfNTgwNSAqLworCisJLyoKKwkgKiBCZWxvdyBhcmUgdGhlIFdXUiBmcmVxdWVuY2llcworCSAqLworCisJeyA1MjEwLCA1MjUwLCAxNSwgMCwgNDAsIDQwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIDAsIDB9LCAvKiBXVDFfNTIxMF81MjUwICovCisJeyA1MjkwLCA1MjkwLCAxOCwgMCwgNDAsIDQwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIDAsIDB9LCAvKiBXVDFfNTI5MF81MjkwICovCisJeyA1NTQwLCA1NjYwLCAyMCwgMCwgNDAsIDQwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIDAsIDB9LCAvKiBXVDFfNTU0MF81NjYwICovCisJeyA1NzYwLCA1ODAwLCAyMCwgMCwgNDAsIDQwLCBOT19ERlMsIFBTQ0FOX1dXUiwgMCwgMH0sCS8qIFdUMV81NzYwXzU4MDAgKi8KK307CisKKy8qCisgKiAyR0h6IDExYiBjaGFubmVsIHRhZ3MKKyAqLworZW51bSB7CisJRjFfMjMxMl8yMzcyLAorCUYyXzIzMTJfMjM3MiwKKworCUYxXzI0MTJfMjQ3MiwKKwlGMl8yNDEyXzI0NzIsCisJRjNfMjQxMl8yNDcyLAorCisJRjFfMjQxMl8yNDYyLAorCUYyXzI0MTJfMjQ2MiwKKworCUYxXzI0MzJfMjQ0MiwKKworCUYxXzI0NTdfMjQ3MiwKKworCUYxXzI0NjdfMjQ3MiwKKworCUYxXzI0ODRfMjQ4NCwKKwlGMl8yNDg0XzI0ODQsCisKKwlGMV8yNTEyXzI3MzIsCisKKwlXMV8yMzEyXzIzNzIsCisJVzFfMjQxMl8yNDEyLAorCVcxXzI0MTdfMjQzMiwKKwlXMV8yNDM3XzI0NDIsCisJVzFfMjQ0N18yNDU3LAorCVcxXzI0NjJfMjQ2MiwKKwlXMV8yNDY3XzI0NjcsCisJVzJfMjQ2N18yNDY3LAorCVcxXzI0NzJfMjQ3MiwKKwlXMl8yNDcyXzI0NzIsCisJVzFfMjQ4NF8yNDg0LAorCVcyXzI0ODRfMjQ4NCwKK307CisKK3N0YXRpYyBSRUdfRE1OX0ZSRVFfQkFORCByZWdEbW4yR2h6RnJlcVtdID0geworCXsgMjMxMiwgMjM3MiwgNSwgIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogRjFfMjMxMl8yMzcyICovCisJeyAyMzEyLCAyMzcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBGMl8yMzEyXzIzNzIgKi8KKworCXsgMjQxMiwgMjQ3MiwgNSwgIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogRjFfMjQxMl8yNDcyICovCisJeyAyNDEyLCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fTUtLQSwgMCwgMH0sCS8qIEYyXzI0MTJfMjQ3MiAqLworCXsgMjQxMiwgMjQ3MiwgMzAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogRjNfMjQxMl8yNDcyICovCisKKwl7IDI0MTIsIDI0NjIsIDI3LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIEYxXzI0MTJfMjQ2MiAqLworCXsgMjQxMiwgMjQ2MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX01LS0EsIDAsIDB9LAkvKiBGMl8yNDEyXzI0NjIgKi8KKwl7IDI0MzIsIDI0NDIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIEYxXzI0MzJfMjQ0MiAqLworCisJeyAyNDU3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBGMV8yNDU3XzI0NzIgKi8KKworCXsgMjQ2NywgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQSwgMCwgMH0sIC8qIEYxXzI0NjdfMjQ3MiAqLworCisJeyAyNDg0LCAyNDg0LCA1LCAgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBGMV8yNDg0XzI0ODQgKi8KKwl7IDI0ODQsIDI0ODQsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMiwgMCwgMH0sCS8qIEYyXzI0ODRfMjQ4NCAqLworCisJeyAyNTEyLCAyNzMyLCA1LCAgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBGMV8yNTEyXzI3MzIgKi8KKworCS8qCisJICogV1dSIGhhdmUgcG93ZXJzIG9wZW5lZCB1cCB0byAyMGRCbS4gIExpbWl0cyBzaG91bGQgb2Z0ZW4gY29tZSBmcm9tIENUTC9NYXggcG93ZXJzCisJICovCisKKwl7IDIzMTIsIDIzNzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFcxXzIzMTJfMjM3MiAqLworCXsgMjQxMiwgMjQxMiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVzFfMjQxMl8yNDEyICovCisJeyAyNDE3LCAyNDMyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBXMV8yNDE3XzI0MzIgKi8KKwl7IDI0MzcsIDI0NDIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFcxXzI0MzdfMjQ0MiAqLworCXsgMjQ0NywgMjQ1NywgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVzFfMjQ0N18yNDU3ICovCisJeyAyNDYyLCAyNDYyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBXMV8yNDYyXzI0NjIgKi8KKwl7IDI0NjcsIDI0NjcsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9XV1IgfCBJU19FQ01fQ0hBTiwgMCwgMH0sIC8qIFcxXzI0NjdfMjQ2NyAqLworCXsgMjQ2NywgMjQ2NywgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOIHwgSVNfRUNNX0NIQU4sIDAsIDB9LAkvKiBXMl8yNDY3XzI0NjcgKi8KKwl7IDI0NzIsIDI0NzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9XV1IgfCBJU19FQ01fQ0hBTiwgMCwgMH0sIC8qIFcxXzI0NzJfMjQ3MiAqLworCXsgMjQ3MiwgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOIHwgSVNfRUNNX0NIQU4sIDAsIDB9LAkvKiBXMl8yNDcyXzI0NzIgKi8KKwl7IDI0ODQsIDI0ODQsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9XV1IgfCBJU19FQ01fQ0hBTiwgMCwgMH0sIC8qIFcxXzI0ODRfMjQ4NCAqLworCXsgMjQ4NCwgMjQ4NCwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOIHwgSVNfRUNNX0NIQU4sIDAsIDB9LAkvKiBXMl8yNDg0XzI0ODQgKi8KK307CisKKworLyoKKyAqIDJHSHogMTFnIGNoYW5uZWwgdGFncworICovCisKK2VudW0geworCUcxXzIzMTJfMjM3MiwKKwlHMl8yMzEyXzIzNzIsCisKKwlHMV8yNDEyXzI0NzIsCisJRzJfMjQxMl8yNDcyLAorCUczXzI0MTJfMjQ3MiwKKworCUcxXzI0MTJfMjQ2MiwKKwlHMl8yNDEyXzI0NjIsCisKKwlHMV8yNDMyXzI0NDIsCisKKwlHMV8yNDU3XzI0NzIsCisKKwlHMV8yNTEyXzI3MzIsCisKKwlHMV8yNDY3XzI0NzIgLAorCisJV0cxXzIzMTJfMjM3MiwKKwlXRzFfMjQxMl8yNDEyLAorCVdHMV8yNDE3XzI0MzIsCisJV0cxXzI0MzdfMjQ0MiwKKwlXRzFfMjQ0N18yNDU3LAorCVdHMV8yNDYyXzI0NjIsCisJV0cxXzI0NjdfMjQ2NywKKwlXRzJfMjQ2N18yNDY3LAorCVdHMV8yNDcyXzI0NzIsCisJV0cyXzI0NzJfMjQ3MiwKKworfTsKK3N0YXRpYyBSRUdfRE1OX0ZSRVFfQkFORCByZWdEbW4yR2h6MTFnRnJlcVtdID0geworCXsgMjMxMiwgMjM3MiwgNSwgIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogRzFfMjMxMl8yMzcyICovCisJeyAyMzEyLCAyMzcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBHMl8yMzEyXzIzNzIgKi8KKworCXsgMjQxMiwgMjQ3MiwgNSwgIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogRzFfMjQxMl8yNDcyICovCisJeyAyNDEyLCAyNDcyLCAyMCwgMCwgMjAsIDUsICBOT19ERlMsIFBTQ0FOX01LS0FfRywgMCwgMH0sCS8qIEcyXzI0MTJfMjQ3MiAqLworCXsgMjQxMiwgMjQ3MiwgMzAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogRzNfMjQxMl8yNDcyICovCisKKwl7IDI0MTIsIDI0NjIsIDI3LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIEcxXzI0MTJfMjQ2MiAqLworCXsgMjQxMiwgMjQ2MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX01LS0FfRywgMCwgMH0sCS8qIEcyXzI0MTJfMjQ2MiAqLworCXsgMjQzMiwgMjQ0MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogRzFfMjQzMl8yNDQyICovCisKKwl7IDI0NTcsIDI0NzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIEcxXzI0NTdfMjQ3MiAqLworCisJeyAyNTEyLCAyNzMyLCA1LCAgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBHMV8yNTEyXzI3MzIgKi8KKworCXsgMjQ2NywgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQSwgMCwgMCB9LCAvKiBHMV8yNDY3XzI0NzIgKi8KKworCS8qCisJICogV1dSIG9wZW4gdXAgdGhlIHBvd2VyIHRvIDIwZEJtCisJICovCisKKwl7IDIzMTIsIDIzNzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFdHMV8yMzEyXzIzNzIgKi8KKwl7IDI0MTIsIDI0MTIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFdHMV8yNDEyXzI0MTIgKi8KKwl7IDI0MTcsIDI0MzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFdHMV8yNDE3XzI0MzIgKi8KKwl7IDI0MzcsIDI0NDIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFdHMV8yNDM3XzI0NDIgKi8KKwl7IDI0NDcsIDI0NTcsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFdHMV8yNDQ3XzI0NTcgKi8KKwl7IDI0NjIsIDI0NjIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFdHMV8yNDYyXzI0NjIgKi8KKwl7IDI0NjcsIDI0NjcsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9XV1IgfCBJU19FQ01fQ0hBTiwgMCwgMH0sIC8qIFdHMV8yNDY3XzI0NjcgKi8KKwl7IDI0NjcsIDI0NjcsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiB8IElTX0VDTV9DSEFOLCAwLCAwfSwJLyogV0cyXzI0NjdfMjQ2NyAqLworCXsgMjQ3MiwgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX1dXUiB8IElTX0VDTV9DSEFOLCAwLCAwfSwgLyogV0cxXzI0NzJfMjQ3MiAqLworCXsgMjQ3MiwgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOIHwgSVNfRUNNX0NIQU4sIDAsIDB9LAkvKiBXRzJfMjQ3Ml8yNDcyICovCit9OworLyoKKyAqIDJHSHogRHluYW1pYyB0dXJibyB0YWdzCisgKi8KKworZW51bSB7CisJVDFfMjMxMl8yMzcyLAorCVQxXzI0MzdfMjQzNywKKwlUMl8yNDM3XzI0MzcsCisJVDNfMjQzN18yNDM3LAorCVQxXzI1MTJfMjczMgorfTsKKworc3RhdGljIFJFR19ETU5fRlJFUV9CQU5EIHJlZ0RtbjJHaHoxMWdUdXJib0ZyZXFbXSA9IHsKKwl7IDIzMTIsIDIzNzIsIDUsICA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LCAgLyogVDFfMjMxMl8yMzcyICovCisJeyAyNDM3LCAyNDM3LCA1LCAgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwgIC8qIFQxXzI0MzdfMjQzNyAqLworCXsgMjQzNywgMjQzNywgMjAsIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sICAvKiBUMl8yNDM3XzI0MzcgKi8KKwl7IDI0MzcsIDI0MzcsIDE4LCA2LCA0MCwgNDAsIE5PX0RGUywgUFNDQU5fV1dSLCAwLCAwfSwgLyogVDNfMjQzN18yNDM3ICovCisJeyAyNTEyLCAyNzMyLCA1LCAgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwgIC8qIFQxXzI1MTJfMjczMiAqLworfTsKKworCisKKy8qCisgKiAyR0h6IDExbiBmcmVxdWVuY3kgdGFncworICovCitlbnVtIHsKKyAgICBORzFfMjQyMl8yNDUyLAorICAgIE5HMl8yNDIyXzI0NTIsCisgICAgTkczXzI0MjJfMjQ1MiwKKworICAgIE5HX0RFTU9fQUxMX0NIQU5ORUxTLAorfTsKKworc3RhdGljIFJFR19ETU5fRlJFUV9CQU5EIHJlZ0RtbjJHaHoxMW5nRnJlcVtdID0geworICAgIHsgMjQyMiwgMjQ1MiwgMjAsIDAsIDQwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwgICAgLyogTkcxXzI0MjJfMjQ1MiAqLworICAgIHsgMjQyMiwgMjQ1MiwgMjcsIDAsIDQwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwgICAgLyogTkcyXzI0MjJfMjQ1MiAqLworICAgIHsgMjQyMiwgMjQ1MiwgMzAsIDAsIDQwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwgICAgLyogTkczXzI0MjJfMjQ1MiAqLworCisJeyAyMzEyLCAyNzMyLCAyNywgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LCAgICAvKiBOR19ERU1PX0FMTF9DSEFOTkVMUyAqLworfTsKKworCisvKgorICogNUdIeiAxMW4gZnJlcXVlbmN5IHRhZ3MKKyAqLworZW51bSB7CisgICAgTkExXzUxOTBfNTIzMCwKKyAgICBOQTJfNTE5MF81MjMwLAorICAgIE5BM181MTkwXzUyMzAsCisgICAgTkE0XzUxOTBfNTIzMCwKKyAgICBOQTVfNTE5MF81MjMwLAorCisgICAgTkExXzUyNzBfNTI3MCwKKworICAgIE5BMV81MjcwXzUzMTAsCisgICAgTkEyXzUyNzBfNTMxMCwKKyAgICBOQTNfNTI3MF81MzEwLAorICAgIE5BNF81MjcwXzUzMTAsCisKKyAgICBOQTFfNTMxMF81MzEwLAorCisgICAgTkExXzU1MTBfNTYzMCwKKworICAgIE5BMV81NTEwXzU2NzAsCisgICAgTkEyXzU1MTBfNTY3MCwKKyAgICBOQTNfNTUxMF81NjcwLAorCisgICAgTkExXzU3NTVfNTc5NSwKKyAgICBOQTJfNTc1NV81Nzk1LAorICAgIE5BM181NzU1XzU3OTUsCisgICAgTkE0XzU3NTVfNTc5NSwKKyAgICBOQTVfNTc1NV81Nzk1LAorCisgICAgTkExXzU3OTVfNTc5NSwKKworICAgIE5BX0RFTU9fQUxMX0NIQU5ORUxTLAorfTsKKworc3RhdGljIFJFR19ETU5fRlJFUV9CQU5EIHJlZ0RtbjVHaHoxMW5hRnJlcVtdID0geworICAgIC8qCisgICAgICogVG9EbzogVGhpcyB0YWJsZSBuZWVkcyB0byBiZSBjb21wbGV0ZWx5IHBvcHVsYXRlZCB3aXRoIDVHSHogMTFuIHByb3BlcnRpZXMKKyAgICAgKi8KKwl7IDUxOTAsIDUyMzAsIDE1LCAgMCwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJICAgIC8qIE5BMV81MTkwXzUyMzAgKi8KKwl7IDUxOTAsIDUyMzAsIDE3LCAgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogTkEyXzUxOTBfNTIzMCAqLworCXsgNTE5MCwgNTIzMCwgMTgsICA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkgICAgLyogTkEzXzUxOTBfNTIzMCAqLworCXsgNTE5MCwgNTIzMCwgMjAsICAwLCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBOQTRfNTE5MF81MjMwICovCisJeyA1MTkwLCA1MjMwLCAyMywgIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCSAgICAvKiBOQTVfNTE5MF81MjMwICovCisKKwl7IDUyNzAsIDUyNzAsIDIzLCAgNiwgNDAsIDQwLCBERlNfRkNDM3xERlNfRVRTSSwgTk9fUFNDQU4sIDAsIDF9LCAgLyogTkExXzUyNzBfNTI3MCAqLworCisJeyA1MjcwLCA1MzEwLCAxOCwgIDYsIDQwLCA0MCwgREZTX0ZDQzN8REZTX0VUU0ksIE5PX1BTQ0FOLCAwLCAxfSwgIC8qIE5BMV81MjcwXzUzMTAgKi8KKwl7IDUyNzAsIDUzMTAsIDIwLCAgMCwgNDAsIDQwLCBERlNfRkNDM3xERlNfRVRTSXxERlNfTUtLNCwgTk9fUFNDQU4sIDAsIDF9LCAgLyogTkEyXzUyNzBfNTMxMCAqLworCXsgNTI3MCwgNTMxMCwgMjMsICA2LCA0MCwgNDAsIERGU19GQ0MzfERGU19FVFNJLCBOT19QU0NBTiwgMCwgMX0sICAvKiBOQTNfNTI3MF81MzEwICovCisJeyA1MjcwLCA1MzEwLCAzMCwgIDYsIDQwLCA0MCwgREZTX0ZDQzN8REZTX0VUU0ksIE5PX1BTQ0FOLCAwLCAxfSwgIC8qIE5BNF81MjcwXzUzMTAgKi8KKworCXsgNTMxMCwgNTMxMCwgMTcsICA2LCA0MCwgNDAsIERGU19GQ0MzfERGU19FVFNJLCBOT19QU0NBTiwgMCwgMX0sICAvKiBOQTFfNTMxMF81MzEwICovCisKKwl7IDU1MTAsIDU2MzAsIDMwLCAgNiwgNDAsIDQwLCBERlNfRkNDM3xERlNfRVRTSSwgTk9fUFNDQU4sIDAsIDF9LCAgLyogTkExXzU1MTBfNTYzMCAqLworCisJeyA1NTEwLCA1NjcwLCAyMCwgIDYsIDQwLCA0MCwgREZTX0ZDQzN8REZTX0VUU0l8REZTX01LSzQsIE5PX1BTQ0FOLCAwLCAxfSwgIC8qIE5BMV81NTEwXzU2NzAgKi8KKwl7IDU1MTAsIDU2NzAsIDI3LCAgMCwgNDAsIDQwLCBERlNfRkNDM3xERlNfRVRTSSwgTk9fUFNDQU4sIDAsIDF9LCAgLyogTkEyXzU1MTBfNTY3MCAqLworCXsgNTUxMCwgNTY3MCwgMzAsICA2LCA0MCwgNDAsIERGU19GQ0MzLCBOT19QU0NBTiwgMCwgMX0sICAgLyogTkEzXzU1MTBfNTY3MCAqLworCisJeyA1NzU1LCA1Nzk1LCAxNywgIDAsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCSAgICAvKiBOQTFfNTc1NV81Nzk1ICovCisJeyA1NzU1LCA1Nzk1LCAyMCwgIDYsIDQwLCA0MCwgREZTX0VUU0ksIE5PX1BTQ0FOLCAwLCAwfSwJICAgIC8qIE5BMl81NzU1XzU3OTUgKi8KKwl7IDU3NTUsIDU3OTUsIDIzLCAgMCwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJICAgIC8qIE5BM181NzU1XzU3OTUgKi8KKwl7IDU3NTUsIDU3OTUsIDMwLCAgMCwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogTkE0XzU3NTVfNTc5NSAqLworCXsgNTc1NSwgNTc5NSwgMzAsICA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkgICAgLyogTkE1XzU3NTVfNTc5NSAqLworCisJeyA1Nzk1LCA1Nzk1LCAzMCwgIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCSAgICAvKiBOQTFfNTc5NV81Nzk1ICovCisKKyAgICB7IDQ5MjAsIDYxMDAsIDMwLCAgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogTkFfREVNT19BTExfQ0hBTk5FTFMgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IHJlZ0RvbWFpbiB7CisJdTE2X3QgcmVnRG1uRW51bTsJLyogdmFsdWUgZnJvbSBFbnVtUmQgdGFibGUgKi8KKwl1OF90IGNvbmZvcm1hbmNlVGVzdExpbWl0OworCXU2NF90IGRmc01hc2s7CS8qIERGUyBiaXRtYXNrIGZvciA1R2h6IHRhYmxlcyAqLworCXU2NF90IHBzY2FuOwkvKiBCaXRtYXNrIGZvciBwYXNzaXZlIHNjYW4gKi8KKwl1MzJfdCBmbGFnczsJLyogUmVxdWlyZW1lbnQgZmxhZ3MgKEFkSG9jIGRpc2FsbG93LCBub2lzZQorCQkJCSAgIGZsb29yIGNhbCBuZWVkZWQsIGV0YykgKi8KKwl1NjRfdCBjaGFuMTFhW0JNTEVOXTsvKiAxMjggYml0IGJpdG1hc2sgZm9yIGNoYW5uZWwvYmFuZAorCQkJCSAgIHNlbGVjdGlvbiAqLworCXU2NF90IGNoYW4xMWFfdHVyYm9bQk1MRU5dOy8qIDEyOCBiaXQgYml0bWFzayBmb3IgY2hhbm5lbC9iYW5kCisJCQkJICAgc2VsZWN0aW9uICovCisJdTY0X3QgY2hhbjExYV9keW5fdHVyYm9bQk1MRU5dOyAvKiAxMjggYml0IGJpdG1hc2sgZm9yIGNoYW5uZWwvYmFuZAorCQkJCQkgICAgICAgc2VsZWN0aW9uICovCisJdTY0X3QgY2hhbjExYltCTUxFTl07LyogMTI4IGJpdCBiaXRtYXNrIGZvciBjaGFubmVsL2JhbmQKKwkJCQkgICBzZWxlY3Rpb24gKi8KKwl1NjRfdCBjaGFuMTFnW0JNTEVOXTsvKiAxMjggYml0IGJpdG1hc2sgZm9yIGNoYW5uZWwvYmFuZAorCQkJCSAgIHNlbGVjdGlvbiAqLworCXU2NF90IGNoYW4xMWdfdHVyYm9bQk1MRU5dOy8qIDEyOCBiaXQgYml0bWFzayBmb3IgY2hhbm5lbC9iYW5kCisJCQkJCSAgc2VsZWN0aW9uICovCisJdTY0X3QgY2hhbjExbmdbQk1MRU5dOy8qIDEyOCBiaXQgYml0bWFzayBmb3IgMTFuIGluIDJHSHogKi8KKwl1NjRfdCBjaGFuMTFuYVtCTUxFTl07LyogMTI4IGJpdCBiaXRtYXNrIGZvciAxMW4gaW4gNUdIeiAqLworfSBSRUdfRE9NQUlOOworCitzdGF0aWMgUkVHX0RPTUFJTiByZWdEb21haW5zW10gPSB7CisKKwl7REVCVUdfUkVHX0RNTiwgRkNDLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCisJIEJNKEYxXzUxMjBfNTI0MCwgRjFfNTI2MF81NzAwLCBGMV81NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShUMV81MTMwXzUyMTAsIFQxXzUyNTBfNTMzMCwgVDFfNTM3MF81NDkwLCBUMV81NTMwXzU2NTAsIFQxXzUxNTBfNTE5MCwgVDFfNTIzMF81MzEwLCBUMV81MzUwXzU0NzAsIFQxXzU1MTBfNTY3MCwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShUMV81MjAwXzUyNDAsIFQxXzUyODBfNTI4MCwgVDFfNTU0MF81NjYwLCBUMV81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKEYxXzIzMTJfMjM3MiwgRjFfMjQxMl8yNDcyLCBGMV8yNDg0XzI0ODQsIEYxXzI1MTJfMjczMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oRzFfMjMxMl8yMzcyLCBHMV8yNDEyXzI0NzIsIEcxXzI1MTJfMjczMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKFQxXzIzMTJfMjM3MiwgVDFfMjQzN18yNDM3LCBUMV8yNTEyXzI3MzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShOR19ERU1PX0FMTF9DSEFOTkVMUywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oTkFfREVNT19BTExfQ0hBTk5FTFMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAorCisJe0FQTDEsIEVUU0ksIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKKwkgQk0oRjRfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTShOQTRfNTc1NV81Nzk1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKKworCXtBUEwyLCBFVFNJLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCisJIEJNKEYxXzU3NDVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oTkEzXzU3NTVfNTc5NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCisKKwl7QVBMMywgRkNDLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCisJIEJNKEYxXzUyODBfNTMyMCwgRjJfNTc0NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNKE5BMV81MzEwXzUzMTAsIE5BNF81NzU1XzU3OTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCisKKwl7QVBMNCwgRVRTSSwgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAorCSBCTShGNF81MTgwXzUyNDAsICBGM181NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oTkE0XzUxOTBfNTIzMCwgTkEyXzU3NTVfNTc5NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKKworCXtBUEw1LCBFVFNJLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCisJIEJNKEYyXzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oTkExXzU3NTVfNTc5NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCisKKwl7QVBMNiwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0ZDQ19UIHwgUFNDQU5fRkNDICwgTk9fUkVRLAorCSBCTShGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwgRjNfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oVDJfNTIxMF81MjEwLCBUMV81MjUwXzUyOTAsIFQxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTShOQTRfNTE5MF81MjMwLCBOQTJfNTI3MF81MzEwLCBOQTJfNTc1NV81Nzk1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCisKKwl7QVBMNywgRkNDLCBOT19ERlMsIFBTQ0FOX0ZDQ19UIHwgUFNDQU5fRkNDICwgTk9fUkVRLAorCSBCTShGN181MjYwXzUzMjAsIEY0XzU1MDBfNTcwMCwgRjNfNTc0NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oTkExXzUzMTBfNTMxMCwgTkEyXzU3NTVfNTc5NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKKwl7QVBMOCwgRVRTSSwgTk9fREZTLCBOT19QU0NBTiwgRElTQUxMT1dfQURIT0NfMTFBfERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAorCSBCTShGNl81MjYwXzUzMjAsIEY0XzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTShOQTRfNTI3MF81MzEwLCBOQTRfNTc1NV81Nzk1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAorCisJe0FQTDksIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLCBESVNBTExPV19BREhPQ18xMUF8RElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCisJIEJNKEYxXzUxODBfNTMyMCwgRjFfNTUwMF81NjIwLCBGM181NzQ1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTShOQTRfNTE5MF81MjMwLCBOQTJfNTI3MF81MzEwLCBOQTFfNTUxMF81NjMwLCBOQTRfNTc1NV81Nzk1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKKworCXtFVFNJMSwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0VUU0ksIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAorCSBCTShXMl81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwgRjJfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oTkE0XzUxOTBfNTIzMCwgTkEyXzUyNzBfNTMxMCwgTkEyXzU1MTBfNTY3MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAorCisJe0VUU0kyLCBFVFNJLCBERlNfRVRTSSwgUFNDQU5fRVRTSSwgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCisJIEJNKEYzXzUxODBfNTI0MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oTkEzXzUxOTBfNTIzMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCisKKwl7RVRTSTMsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLCBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKKwkgQk0oVzJfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oTkE0XzUxOTBfNTIzMCwgTkEyXzUyNzBfNTMxMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKKworCXtFVFNJNCwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0VUU0ksIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAorCSBCTShGM181MTgwXzUyNDAsIEYxXzUyNjBfNTMyMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTShOQTNfNTE5MF81MjMwLCBOQTFfNTI3MF81MzEwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAorCisJe0VUU0k1LCBFVFNJLCBERlNfRVRTSSwgUFNDQU5fRVRTSSwgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCisJIEJNKEYxXzUxODBfNTI0MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oTkExXzUxOTBfNTIzMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCisKKwl7RVRTSTYsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLCBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKKwkgQk0oRjVfNTE4MF81MjQwLCBGMV81MjYwXzUyODAsIEYzXzU1MDBfNTcwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNKE5BNV81MTkwXzUyMzAsIE5BMV81MjcwXzUyNzAsIE5BM181NTEwXzU2NzAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKKworCXtGQ0MxLCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKKwkgQk0oRjJfNTE4MF81MjQwLCBGNF81MjYwXzUzMjAsIEY1XzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKFQxXzUyMTBfNTIxMCwgVDJfNTI1MF81MjkwLCBUMl81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShUMV81MjAwXzUyNDAsIFQxXzUyODBfNTI4MCwgVDFfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTShOQTJfNTE5MF81MjMwLCBOQTNfNTI3MF81MzEwLCBOQTRfNTc1NV81Nzk1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCisKKwl7RkNDMiwgRkNDLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCisJIEJNKEY2XzUxODBfNTI0MCwgRjVfNTI2MF81MzIwLCBGNl81NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTSgtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oVDJfNTIwMF81MjQwLCBUMV81MjgwXzUyODAsIFQxXzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oTkE1XzUxOTBfNTIzMCwgTkEzXzUyNzBfNTMxMCwgTkE0XzU3NTVfNTc5NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAorCisJe0ZDQzMsIEZDQywgREZTX0ZDQzMsIFBTQ0FOX0ZDQyB8IFBTQ0FOX0ZDQ19ULCBOT19SRVEsCisJIEJNKEYyXzUxODBfNTI0MCwgRjNfNTI2MF81MzIwLCBGMV81NTAwXzU3MDAsIEY1XzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oVDFfNTIxMF81MjEwLCBUMV81MjUwXzUyNTAsIFQxXzUyOTBfNTI5MCwgVDJfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShUMV81MjAwXzUyNDAsIFQyXzUyODBfNTI4MCwgVDFfNTU0MF81NjYwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTShOQTJfNTE5MF81MjMwLCBOQTJfNTI3MF81MzEwLCBOQTNfNTUxMF81NjcwLCBOQTRfNTc1NV81Nzk1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKKworCXtGQ0M0LCBGQ0MsIERGU19GQ0MzLCBQU0NBTl9GQ0MgfCBQU0NBTl9GQ0NfVCwgTk9fUkVRLAorCSBCTShGMV80OTQyXzQ5ODcsIEYxXzQ5NDVfNDk4NSwgRjFfNDk1MF80OTgwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPfSwKKworCXtGQ0M1LCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKKwkgQk0oRjJfNTE4MF81MjQwLCBGNV81NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oTkEyXzUxOTBfNTIzMCwgTkE0XzU3NTVfNTc5NSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKKworICAgIHtGQ0M2LCBGQ0MsIERGU19GQ0MzLCBQU0NBTl9GQ0MsIE5PX1JFUSwKKwkgQk0oRjdfNTE4MF81MjQwLCBGNV81MjYwXzUzMjAsIEYxXzU1MDBfNTU4MCwgRjFfNTY2MF81NzAwLCBGNl81NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKFQyXzUyMDBfNTI0MCwgVDFfNTI4MF81MjgwLCBUMV81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKyAgICAgQk1aRVJPLAorICAgICBCTVpFUk8sCisJIEJNKE5BNV81MTkwXzUyMzAsIE5BNV81NzU1XzU3OTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCisKKwl7TUtLMSwgTUtLLCBOT19ERlMsIFBTQ0FOX01LSzEsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAorCSBCTShGMV81MTcwXzUyMzAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVST30sCisKKwl7TUtLMiwgTUtLLCBOT19ERlMsIFBTQ0FOX01LSzIsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAorCSBCTShGMV80OTE1XzQ5MjUsIEYxXzQ5MzVfNDk0NSwgRjFfNDkyMF80OTgwLCBGMV81MDM1XzUwNDAsIEYxXzUwNTVfNTA1NSwgRjFfNTA0MF81MDgwLCBGMV81MTcwXzUyMzAsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVST30sCisKKwkvKiBVTkktMSBldmVuICovCisJe01LSzMsIE1LSywgTk9fREZTLCBQU0NBTl9NS0szLCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKKwkgQk0oRjRfNTE4MF81MjQwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTShOQTRfNTE5MF81MjMwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKKworCS8qIFVOSS0xIGV2ZW4gKyBVTkktMiAqLworCXtNS0s0LCBNS0ssIERGU19NS0s0LCBQU0NBTl9NS0szLCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKKwkgQk0oRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oTkE0XzUxOTBfNTIzMCwgTkEyXzUyNzBfNTMxMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKKworCS8qIFVOSS0xIGV2ZW4gKyBVTkktMiArIG1pZC1iYW5kICovCisJe01LSzUsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzMsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAorCSBCTShGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwgRjRfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oTkE0XzUxOTBfNTIzMCwgTkEyXzUyNzBfNTMxMCwgTkExXzU1MTBfNTY3MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAorCisJLyogVU5JLTEgb2RkICsgZXZlbiAqLworCXtNS0s2LCBNS0ssIERGU19NS0s0LCBQU0NBTl9NS0sxLCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKKwkgQk0oRjJfNTE3MF81MjMwLCBGNF81MTgwXzUyNDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oTkE0XzUxOTBfNTIzMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCisKKwkvKiBVTkktMSBvZGQgKyBVTkktMSBldmVuICsgVU5JLTIgKi8KKwl7TUtLNywgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgLCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKKwkgQk0oRjJfNTE3MF81MjMwLCBGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNKE5BNF81MTkwXzUyMzAsIE5BMl81MjcwXzUzMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCisKKwkvKiBVTkktMSBvZGQgKyBVTkktMSBldmVuICsgVU5JLTIgKyBtaWQtYmFuZCAqLworCXtNS0s4LCBNS0ssIERGU19NS0s0LCBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMyAsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAorCSBCTShGMl81MTcwXzUyMzAsIEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLCBGNF81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNKE5BNF81MTkwXzUyMzAsIE5BMl81MjcwXzUzMTAsIE5BMV81NTEwXzU2NzAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKKworICAgIC8qIFVOSS0xIGV2ZW4gKyA0LjkgR0haICovCisgICAge01LSzksIE1LSywgTk9fREZTLCBOT19QU0NBTiwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCisgICAgIEJNKEYxXzQ5MTVfNDkyNSwgRjFfNDkzNV80OTQ1LCBGMV80OTIwXzQ5ODAsIEYxXzUwMzVfNTA0MCwgRjFfNTA1NV81MDU1LCBGMV81MDQwXzUwODAsIEY0XzUxODBfNTI0MCwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPfSwKKworICAgIC8qIFVOSS0xIGV2ZW4gKyBVTkktMiArIDQuOSBHSFogKi8KKwl7TUtLMTAsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzMsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAorCSBCTShGMV80OTE1XzQ5MjUsIEYxXzQ5MzVfNDk0NSwgRjFfNDkyMF80OTgwLCBGMV81MDM1XzUwNDAsIEYxXzUwNTVfNTA1NSwgRjFfNTA0MF81MDgwLCBGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk99LAorCisJLyogVU5JLTEgZXZlbiArIFVOSS0yICsgNC45IEdIWiArIG1pZC1iYW5kICovCisJe01LSzExLCBNS0ssIERGU19NS0s0LCBQU0NBTl9NS0szLCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKKwkgQk0oRjFfNDkxNV80OTI1LCBGMV80OTM1XzQ5NDUsIEYxXzQ5MjBfNDk4MCwgRjFfNTAzNV81MDQwLCBGMV81MDU1XzUwNTUsIEYxXzUwNDBfNTA4MCwgRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIEY0XzU1MDBfNTcwMCwgLTEsIC0xLCAtMSksCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVST30sCisKKwkvKiBVTkktMSBldmVuICsgVU5JLTEgb2RkICsgVU5JLTIgKyA0LjkgR0haICsgbWlkLWJhbmQgKi8KKwl7TUtLMTIsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzMsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAorCSBCTShGMV80OTE1XzQ5MjUsIEYxXzQ5MzVfNDk0NSwgRjFfNDkyMF80OTgwLCBGMV81MDM1XzUwNDAsIEYxXzUwNTVfNTA1NSwgRjFfNTA0MF81MDgwLCBGMV81MTcwXzUyMzAsIEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLCBGNF81NTAwXzU3MDAsIC0xLCAtMSksCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVST30sCisKKwkvKiBEZWZpbmVkIGhlcmUgdG8gdXNlIHdoZW4gMkcgY2hhbm5lbHMgYXJlIGF1dGhvcmlzZWQgZm9yIGNvdW50cnkgSzIgKi8KKwl7QVBMRCwgTk9fQ1RMLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNKEYyXzIzMTJfMjM3MixGMl8yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oRzJfMjMxMl8yMzcyLEcyXzI0MTJfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPfSwKKworCXtFVFNJQSwgTk9fQ1RMLCBOT19ERlMsIFBTQ0FOX0VUU0lBLCBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oRjFfMjQ1N18yNDcyLC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKEcxXzI0NTdfMjQ3MiwtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShUMl8yNDM3XzI0MzcsLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk99LAorCisJe0VUU0lCLCBFVFNJLCBOT19ERlMsIFBTQ0FOX0VUU0lCLCBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oRjFfMjQzMl8yNDQyLC0xLC0xLC0xLC0xLC0xLC0xLC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKEcxXzI0MzJfMjQ0MiwtMSwtMSwtMSwtMSwtMSwtMSwtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShUMl8yNDM3XzI0MzcsLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk99LAorCisJe0VUU0lDLCBFVFNJLCBOT19ERlMsIFBTQ0FOX0VUU0lDLCBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oRjNfMjQxMl8yNDcyLC0xLC0xLC0xLC0xLC0xLC0xLC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKEczXzI0MTJfMjQ3MiwtMSwtMSwtMSwtMSwtMSwtMSwtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShUMl8yNDM3XzI0MzcsLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk99LAorCisJe0ZDQ0EsIEZDQywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTShGMV8yNDEyXzI0NjIsLTEsLTEsLTEsLTEsLTEsLTEsLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oRzFfMjQxMl8yNDYyLC0xLC0xLC0xLC0xLC0xLC0xLC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKFQyXzI0MzdfMjQzNywtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShORzJfMjQyMl8yNDUyLC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNWkVST30sCisKKwl7TUtLQSwgTUtLLCBOT19ERlMsIFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0cgfCBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0ExX0cgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTShGMl8yNDEyXzI0NjIsIEYxXzI0NjdfMjQ3MiwgRjJfMjQ4NF8yNDg0LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oRzJfMjQxMl8yNDYyLCBHMV8yNDY3XzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oVDJfMjQzN18yNDM3LC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKE5HMV8yNDIyXzI0NTIsLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPfSwKKworCXtNS0tDLCBNS0ssIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oRjJfMjQxMl8yNDcyLC0xLC0xLC0xLC0xLC0xLC0xLC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKEcyXzI0MTJfMjQ3MiwtMSwtMSwtMSwtMSwtMSwtMSwtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShUMl8yNDM3XzI0MzcsLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oTkcxXzI0MjJfMjQ1MiwtMSwtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNWkVST30sCisKKwl7V09STEQsIEVUU0ksIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oRjJfMjQxMl8yNDcyLC0xLC0xLC0xLC0xLC0xLC0xLC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKEcyXzI0MTJfMjQ3MiwtMSwtMSwtMSwtMSwtMSwtMSwtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShUMl8yNDM3XzI0MzcsLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oTkcxXzI0MjJfMjQ1MiwtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTVpFUk99LAorCisJe1dPUjBfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19QRVJfMTFELAorCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTE3MF81MjMwLCBXMV81NzQ1XzU4MjUsIFcxXzU1MDBfNTcwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShXVDFfNTIxMF81MjUwLCBXVDFfNTI5MF81MjkwLCBXVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTShXMV8yNDEyXzI0MTIsVzFfMjQzN18yNDQyLFcxXzI0NjJfMjQ2MixXMV8yNDcyXzI0NzIsVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgVzFfMjQ4NF8yNDg0LCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKFdHMV8yNDEyXzI0MTIsV0cxXzI0MzdfMjQ0MixXRzFfMjQ2Ml8yNDYyLFdHMV8yNDcyXzI0NzIsV0cxXzI0MTdfMjQzMixXRzFfMjQ0N18yNDU3LFdHMV8yNDY3XzI0NjcsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKFQzXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk99LAorCisJe1dPUjAxX1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfUEVSXzExRCwKKwkgQk0oVzFfNTI2MF81MzIwLCBXMV81MTgwXzUyNDAsIFcxXzUxNzBfNTIzMCwgVzFfNTc0NV81ODI1LCBXMV81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oV1QxXzUyMTBfNTI1MCwgV1QxXzUyOTBfNTI5MCwgV1QxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNWkVSTywKKwkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oV0cxXzI0MTJfMjQxMiwgV0cxXzI0MzdfMjQ0MiwgV0cxXzI0NjJfMjQ2MiwgV0cxXzI0MTdfMjQzMiwgV0cxXzI0NDdfMjQ1NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNWkVSTywKKwkgQk1aRVJPfSwKKworCXtXT1IwMl9XT1JMRCwgTk9fQ1RMLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIEFESE9DX1BFUl8xMUQsCisJIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLFcxXzUxNzBfNTIzMCxXMV81NzQ1XzU4MjUsVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTVpFUk8sCisJIEJNKFcxXzI0MTJfMjQxMixXMV8yNDM3XzI0NDIsVzFfMjQ2Ml8yNDYyLCBXMV8yNDcyXzI0NzIsVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oV0cxXzI0MTJfMjQxMixXRzFfMjQzN18yNDQyLFdHMV8yNDYyXzI0NjIsIFdHMV8yNDcyXzI0NzIsV0cxXzI0MTdfMjQzMiwgV0cxXzI0NDdfMjQ1NywgV0cxXzI0NjdfMjQ2NywgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTVpFUk8sCisJIEJNWkVST30sCisKKwl7RVUxX1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfUEVSXzExRCwKKwkgQk0oVzFfNTI2MF81MzIwLCBXMV81MTgwXzUyNDAsVzFfNTE3MF81MjMwLFcxXzU3NDVfNTgyNSxXMV81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oV1QxXzUyMTBfNTI1MCwgV1QxXzUyOTBfNTI5MCwgV1QxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNWkVSTywKKwkgQk0oVzFfMjQxMl8yNDEyLFcxXzI0MzdfMjQ0MixXMV8yNDYyXzI0NjIsIFcyXzI0NzJfMjQ3MixXMV8yNDE3XzI0MzIsIFcxXzI0NDdfMjQ1NywgVzJfMjQ2N18yNDY3LCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShXRzFfMjQxMl8yNDEyLFdHMV8yNDM3XzI0NDIsV0cxXzI0NjJfMjQ2MiwgV0cyXzI0NzJfMjQ3MixXRzFfMjQxN18yNDMyLCBXRzFfMjQ0N18yNDU3LCBXRzJfMjQ2N18yNDY3LCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNWkVSTywKKwkgQk1aRVJPfSwKKworCXtXT1IxX1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfTk9fMTFBLAorCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTE3MF81MjMwLCBXMV81NzQ1XzU4MjUsIFcxXzU1MDBfNTcwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oVzFfMjQxMl8yNDEyLFcxXzI0MzdfMjQ0MixXMV8yNDYyXzI0NjIsVzFfMjQ3Ml8yNDcyLFcxXzI0MTdfMjQzMiwgVzFfMjQ0N18yNDU3LCBXMV8yNDY3XzI0NjcsIFcxXzI0ODRfMjQ4NCwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShXRzFfMjQxMl8yNDEyLFdHMV8yNDM3XzI0NDIsV0cxXzI0NjJfMjQ2MixXRzFfMjQ3Ml8yNDcyLFdHMV8yNDE3XzI0MzIsV0cxXzI0NDdfMjQ1NyxXRzFfMjQ2N18yNDY3LCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNWkVSTywKKwkgQk1aRVJPfSwKKworCXtXT1IyX1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfTk9fMTFBLAorCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTE3MF81MjMwLCBXMV81NzQ1XzU4MjUsIFcxXzU1MDBfNTcwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShXVDFfNTIxMF81MjUwLCBXVDFfNTI5MF81MjkwLCBXVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTShXMV8yNDEyXzI0MTIsVzFfMjQzN18yNDQyLFcxXzI0NjJfMjQ2MixXMV8yNDcyXzI0NzIsVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgVzFfMjQ4NF8yNDg0LCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKFdHMV8yNDEyXzI0MTIsV0cxXzI0MzdfMjQ0MixXRzFfMjQ2Ml8yNDYyLFdHMV8yNDcyXzI0NzIsV0cxXzI0MTdfMjQzMixXRzFfMjQ0N18yNDU3LFdHMV8yNDY3XzI0NjcsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKFQzXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk99LAorCisJe1dPUjNfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19QRVJfMTFELAorCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTE3MF81MjMwLCBXMV81NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTVpFUk8sCisJIEJNKFcxXzI0MTJfMjQxMixXMV8yNDM3XzI0NDIsVzFfMjQ2Ml8yNDYyLFcxXzI0NzJfMjQ3MixXMV8yNDE3XzI0MzIsIFcxXzI0NDdfMjQ1NywgVzFfMjQ2N18yNDY3LCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShXRzFfMjQxMl8yNDEyLFdHMV8yNDM3XzI0NDIsV0cxXzI0NjJfMjQ2MixXRzFfMjQ3Ml8yNDcyLFdHMV8yNDE3XzI0MzIsV0cxXzI0NDdfMjQ1NyxXRzFfMjQ2N18yNDY3LC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKFQzXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk99LAorCisJe1dPUjRfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMsIFBTQ0FOX1dXUiwgQURIT0NfTk9fMTFBLAorCSBCTShXMl81MjYwXzUzMjAsIFcyXzUxODBfNTI0MCwgRjJfNTc0NV81ODA1LCBXMl81ODI1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTVpFUk8sCisJIEJNKFcxXzI0MTJfMjQxMixXMV8yNDM3XzI0NDIsVzFfMjQ2Ml8yNDYyLCBXMV8yNDE3XzI0MzIsVzFfMjQ0N18yNDU3LC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oV0cxXzI0MTJfMjQxMixXRzFfMjQzN18yNDQyLFdHMV8yNDYyXzI0NjIsIFdHMV8yNDE3XzI0MzIsV0cxXzI0NDdfMjQ1NywtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKFQzXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk1aRVJPLAorCSBCTVpFUk99LAorCisJe1dPUjVfRVRTSUMsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCisJIEJNKFcxXzUyNjBfNTMyMCwgVzJfNTE4MF81MjQwLCBGNl81NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzJfMjQ3Ml8yNDcyLCBXMV8yNDE3XzI0MzIsIFcxXzI0NDdfMjQ1NywgVzJfMjQ2N18yNDY3LCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShXRzFfMjQxMl8yNDEyLCBXRzFfMjQzN18yNDQyLCBXRzFfMjQ2Ml8yNDYyLCBXRzFfMjQ3Ml8yNDcyLCBXRzFfMjQxN18yNDMyLCBXRzFfMjQ0N18yNDU3LCBXRzFfMjQ2N18yNDY3LCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNWkVSTywKKwkgQk1aRVJPfSwKKworCXtXT1I5X1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfTk9fMTFBLAorCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTc0NV81ODI1LCBXMV81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTVpFUk8sCisJIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0MTdfMjQzMiwgVzFfMjQ0N18yNDU3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNKFdHMV8yNDEyXzI0MTIsIFdHMV8yNDM3XzI0NDIsIFdHMV8yNDYyXzI0NjIsIFdHMV8yNDE3XzI0MzIsIFdHMV8yNDQ3XzI0NTcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKKwkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTVpFUk8sCisJIEJNWkVST30sCisKKwl7V09SQV9XT1JMRCwgTk9fQ1RMLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIEFESE9DX05PXzExQSwKKwkgQk0oVzFfNTI2MF81MzIwLCBXMV81MTgwXzUyNDAsIFcxXzU3NDVfNTgyNSwgVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQ3Ml8yNDcyLCBXMV8yNDE3XzI0MzIsIFcxXzI0NDdfMjQ1NywgVzFfMjQ2N18yNDY3LCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShXRzFfMjQxMl8yNDEyLCBXRzFfMjQzN18yNDQyLCBXRzFfMjQ2Ml8yNDYyLCBXRzFfMjQ3Ml8yNDcyLCBXRzFfMjQxN18yNDMyLCBXRzFfMjQ0N18yNDU3LCBXRzFfMjQ2N18yNDY3LCAtMSwgLTEsIC0xLCAtMSwgLTEpLAorCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCisJIEJNWkVSTywKKwkgQk1aRVJPfSwKKworCXtOVUxMMSwgTk9fQ1RMLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPLAorCSBCTVpFUk8sCisJIEJNWkVSTywKKwkgQk1aRVJPfSwKK307CisKK3N0cnVjdCBjbW9kZSB7CisJdTE2X3QJbW9kZTsKKwl1MzJfdAlmbGFnczsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY21vZGUgbW9kZXNbXSA9IHsKKwl7IEhBTF9NT0RFX1RVUkJPLAlDSEFOTkVMX1NUfSwJLyogVFVSQk8gbWVhbnMgMTFhIFN0YXRpYyBUdXJibyAqLworCXsgSEFMX01PREVfMTFBLAkJQ0hBTk5FTF9BfSwKKwl7IEhBTF9NT0RFXzExQiwJCUNIQU5ORUxfQn0sCisJeyBIQUxfTU9ERV8xMUcsCQlDSEFOTkVMX0d9LAorCXsgSEFMX01PREVfMTFHX1RVUkJPLAlDSEFOTkVMXzEwOEd9LAorCXsgSEFMX01PREVfMTFBX1RVUkJPLAlDSEFOTkVMXzEwOEF9LAorCXsgSEFMX01PREVfMTFOQSwJQ0hBTk5FTF9BX0hUNDB9LAorCXsgSEFMX01PREVfMTFOQSwJQ0hBTk5FTF9BX0hUMjB9LAorCXsgSEFMX01PREVfMTFORywJQ0hBTk5FTF9HX0hUNDB9LAorCXsgSEFMX01PREVfMTFORywJQ0hBTk5FTF9HX0hUMjB9LAorfTsKKworLyoKKyAqIFJldHVybiB0aGUgV2lyZWxlc3MgTW9kZSBSZWd1bGF0b3J5IERvbWFpbiBiYXNlZAorICogb24gdGhlIGNvdW50cnkgY29kZSBhbmQgdGhlIHdpcmVsZXNzIG1vZGUuCisgKi8KK3U4X3QgR2V0V21SRCh1MTZfdCByZWdpb25Db2RlLCB1MTZfdCBjaGFubmVsRmxhZywgUkVHX0RPTUFJTiAqcmQpCit7CisJczE2X3QgaSwgZm91bmQsIHJlZ0RtbjsKKwl1NjRfdCBmbGFncz1OT19SRVE7CisJUkVHX0RNTl9QQUlSX01BUFBJTkcgKnJlZ1BhaXI9TlVMTDsKKworCWZvciAoaT0wLCBmb3VuZD0wOyAoaTxOKHJlZ0RvbWFpblBhaXJzKSkmJighZm91bmQpOyBpKyspCisJeworCQlpZiAocmVnRG9tYWluUGFpcnNbaV0ucmVnRG1uRW51bSA9PSByZWdpb25Db2RlKQorCQl7CisJCQlyZWdQYWlyID0gJnJlZ0RvbWFpblBhaXJzW2ldOworCQkJZm91bmQgPSAxOworCQl9CisJfQorCWlmICghZm91bmQpCisJeworCQl6bV9kZWJ1Z19tc2cxKCJGYWlsZWQgdG8gZmluZCByZWcgZG9tYWluIHBhaXIgIiwgcmVnaW9uQ29kZSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpZiAoY2hhbm5lbEZsYWcgJiBaTV9SRUdfRkxBR19DSEFOTkVMXzJHSFopCisJeworCQlyZWdEbW4gPSByZWdQYWlyLT5yZWdEbW4yR0h6OworCQlmbGFncyA9IHJlZ1BhaXItPmZsYWdzMkdIejsKKwl9CisgICAgZWxzZQorCXsKKwkJcmVnRG1uID0gcmVnUGFpci0+cmVnRG1uNUdIejsKKwkJZmxhZ3MgPSByZWdQYWlyLT5mbGFnczVHSHo7CisJfQorCisJLyoKKwkgKiBXZSBlaXRoZXIgc3RhcnRlZCB3aXRoIGEgdW5pdGFyeSByZWcgZG9tYWluIG9yIHdlJ3ZlIGZvdW5kIHRoZQorCSAqIHVuaXRhcnkgcmVnIGRvbWFpbiBvZiB0aGUgcGFpcgorCSAqLworCisJZm9yIChpPTA7aTxOKHJlZ0RvbWFpbnMpOyBpKyspCisJeworCQlpZiAocmVnRG9tYWluc1tpXS5yZWdEbW5FbnVtID09IHJlZ0RtbikKKwkJeworCQkJaWYgKHJkICE9IE5VTEwpCisJCQl7CisJCQkJemZNZW1vcnlDb3B5KCh1OF90ICopcmQsICh1OF90ICopJnJlZ0RvbWFpbnNbaV0sCisJCQkJCSAgc2l6ZW9mKFJFR19ET01BSU4pKTsKKwkJCX0KKwkJfQorCX0KKwlyZC0+cHNjYW4gJj0gcmVnUGFpci0+cHNjYW5NYXNrOworICAgIHJkLT5mbGFncyA9ICh1MzJfdClmbGFnczsKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAqIFRlc3QgdG8gc2VlIGlmIHRoZSBiaXRtYXNrIGFycmF5IGlzIGFsbCB6ZXJvcworICovCit1OF90IGlzQ2hhbkJpdE1hc2taZXJvKHU2NF90ICpiaXRtYXNrKQoreworCXUxNl90IGk7CisKKwlmb3IgKGk9MDsgaTxCTUxFTjsgaSsrKSB7CisJCWlmIChiaXRtYXNrW2ldICE9IDApCisJCQlyZXR1cm4gRkFMU0U7CisJfQorCXJldHVybiBUUlVFOworfQorCit1OF90IElTX0JJVF9TRVQodTMyX3QgYml0LCB1NjRfdCAqYml0bWFzaykKK3sKKwl1MzJfdCBieXRlT2Zmc2V0LCBiaXRudW07CisJdTY0X3QgdmFsOworCisJYnl0ZU9mZnNldCA9IGJpdC82NDsKKwliaXRudW0gPSBiaXQgLSBieXRlT2Zmc2V0KjY0OworCXZhbCA9ICgodTY0X3QpIDEpIDw8IGJpdG51bTsKKwlpZiAoYml0bWFza1tieXRlT2Zmc2V0XSAmIHZhbCkKKwkJcmV0dXJuIFRSVUU7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7Cit9CisKKwordm9pZCB6ZkhwR2V0UmVndWxhdGlvblRhYmxlKHpkZXZfdCogZGV2LCB1MTZfdCByZWdpb25Db2RlLCB1MTZfdCBjX2xvLCB1MTZfdCBjX2hpKQoreworCVJFR19ET01BSU4gcmQ1R0h6LCByZDJHSHo7CisJY29uc3Qgc3RydWN0IGNtb2RlICpjbTsKKwlzMTZfdCBuZXh0PTAsYjsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKwlpZiAoIUdldFdtUkQocmVnaW9uQ29kZSwgflpNX1JFR19GTEFHX0NIQU5ORUxfMkdIWiwgJnJkNUdIeikpCisJeworICAgICAgICB6bV9kZWJ1Z19tc2cxKCJjb3VsZG4ndCBmaW5kIHVuaXRhcnkgNUdIeiByZWcgZG9tYWluIGZvciBSZWdpb24gQ29kZSAiLCByZWdpb25Db2RlKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIUdldFdtUkQocmVnaW9uQ29kZSwgWk1fUkVHX0ZMQUdfQ0hBTk5FTF8yR0haLCAmcmQyR0h6KSkKKwl7CisgICAgICAgIHptX2RlYnVnX21zZzEoImNvdWxkbid0IGZpbmQgdW5pdGFyeSAyR0h6IHJlZyBkb21haW4gZm9yIFJlZ2lvbiBDb2RlICIsIHJlZ2lvbkNvZGUpOworCQlyZXR1cm47CisJfQorICAgIGlmICh3ZC0+cmVndWxhdGlvblRhYmxlLnJlZ2lvbkNvZGUgPT0gcmVnaW9uQ29kZSkKKyAgICB7CisgICAgICAgIHptX2RlYnVnX21zZzEoImN1cnJlbnQgcmVnaW9uIGNvZGUgaXMgdGhlIHNhbWUgd2l0aCBSZWdpb24gQ29kZSAiLCByZWdpb25Db2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB3ZC0+cmVndWxhdGlvblRhYmxlLnJlZ2lvbkNvZGUgPSByZWdpb25Db2RlOworICAgIH0KKworICAgIG5leHQgPSAwOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworCWZvciAoY20gPSBtb2RlczsgY20gPCAmbW9kZXNbTihtb2RlcyldOyBjbSsrKQorCXsKKwkJdTE2X3QgYzsKKwkJdTY0X3QgKmNoYW5uZWxCTT1OVUxMOworCQlSRUdfRE9NQUlOICpyZD1OVUxMOworCQlSRUdfRE1OX0ZSRVFfQkFORCAqZmJhbmQ9TlVMTCwqZnJlcXM9TlVMTDsKKworCQlzd2l0Y2ggKGNtLT5tb2RlKQorCQl7CisJCWNhc2UgSEFMX01PREVfVFVSQk86CisJCSAgICAvL3dlIGRvbid0IGhhdmUgdHVyYm8gbW9kZSBzbyB3ZSBkaXNhYmxlIGl0CisgICAgICAgICAgICAvL3ptX2RlYnVnX21zZzAoIkNXWSAtIEhBTF9NT0RFX1RVUkJPIik7CisgICAgICAgICAgICBjaGFubmVsQk0gPSBOVUxMOworCQkJLy9yZCA9ICZyZDVHSHo7CisJCQkvL2NoYW5uZWxCTSA9IHJkLT5jaGFuMTFhX3R1cmJvOworCQkJLy9mcmVxcyA9ICZyZWdEbW41R2h6VHVyYm9GcmVxWzBdOworCQkJLy9jdGwgPSByZC0+Y29uZm9ybWFuY2VUZXN0TGltaXQgfCBDVExfVFVSQk87CisJCQlicmVhazsKKwkJY2FzZSBIQUxfTU9ERV8xMUE6CisJCSAgICBpZiAoKGhwUHJpdi0+T3BGbGFncyAmIDB4MSkgIT0gMCkKKwkJICAgIHsKKyAgICAJCQlyZCA9ICZyZDVHSHo7CisgICAgCQkJY2hhbm5lbEJNID0gcmQtPmNoYW4xMWE7CisgICAgCQkJZnJlcXMgPSAmcmVnRG1uNUdoekZyZXFbMF07CisgICAgCQkJY19sbyA9IDQ5MjA7IC8vZnJvbSBjaGFubmVsIDE4NAorICAgIAkJCWNfaGkgPSA1ODI1OyAvL3RvICAgY2hhbm5lbCAxNjUKKyAgICAJCQkvL2N0bCA9IHJkLT5jb25mb3JtYW5jZVRlc3RMaW1pdDsKKyAgICAgICAgICAgICAgICAvL3ptX2RlYnVnX21zZzIoIkNXWSAtIEhBTF9NT0RFXzExQSwgY2hhbm5lbEJNID0gMHgiLCAqY2hhbm5lbEJNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vY2hhbm5lbEJNID0gTlVMTDsKKyAgICAgICAgICAgIH0KKwkJCWJyZWFrOworCQljYXNlIEhBTF9NT0RFXzExQjoKKwkJICAgIC8vRGlzYWJsZSAxMUIgbW9kZSBiZWNhdXNlIGl0IG9ubHkgaGFzIGRpZmZlcmVuY2Ugd2l0aCAxMUcgaW4gUG93ZXJERlMgRGF0YSwKKwkJICAgIC8vYW5kIHdlIGRvbid0IHVzZSB0aGlzIG5vdy4KKwkJCS8vem1fZGVidWdfbXNnMCgiQ1dZIC0gSEFMX01PREVfMTFCIik7CisJCQljaGFubmVsQk0gPSBOVUxMOworCQkJLy9yZCA9ICZyZDJHSHo7CisJCQkvL2NoYW5uZWxCTSA9IHJkLT5jaGFuMTFiOworCQkJLy9mcmVxcyA9ICZyZWdEbW4yR2h6RnJlcVswXTsKKwkJCS8vY3RsID0gcmQtPmNvbmZvcm1hbmNlVGVzdExpbWl0IHwgQ1RMXzExQjsKKyAgICAgICAgICAgIC8vem1fZGVidWdfbXNnMigiQ1dZIC0gSEFMX01PREVfMTFCLCBjaGFubmVsQk0gPSAweCIsICpjaGFubmVsQk0pOworCQkJYnJlYWs7CisJCWNhc2UgSEFMX01PREVfMTFHOgorCQkgICAgaWYgKChocFByaXYtPk9wRmxhZ3MgJiAweDIpICE9IDApCisJCSAgICB7CisgICAgCQkJcmQgPSAmcmQyR0h6OworICAgIAkJCWNoYW5uZWxCTSA9IHJkLT5jaGFuMTFnOworICAgIAkJCWZyZXFzID0gJnJlZ0RtbjJHaHoxMWdGcmVxWzBdOworICAgIAkJCWNfbG8gPSAyNDEyOyAvL2Zyb20gY2hhbm5lbCAgMQorICAgIAkJCS8vY19oaSA9IDI0NjI7IC8vdG8gICBjaGFubmVsIDExCisgICAgICAgICAgICAgICAgY19oaSA9IDI0NzI7IC8vdG8gICBjaGFubmVsIDEzCisgICAgCQkJLy9jdGwgPSByZC0+Y29uZm9ybWFuY2VUZXN0TGltaXQgfCBDVExfMTFHOworICAgICAgICAgICAgICAgIC8vem1fZGVidWdfbXNnMigiQ1dZIC0gSEFMX01PREVfMTFHLCBjaGFubmVsQk0gPSAweCIsICpjaGFubmVsQk0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy9lbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy9jaGFubmVsQk0gPSBOVUxMOworICAgICAgICAgICAgfQorCQkJYnJlYWs7CisJCWNhc2UgSEFMX01PREVfMTFHX1RVUkJPOgorCQkgICAgLy93ZSBkb24ndCBoYXZlIHR1cmJvIG1vZGUgc28gd2UgZGlzYWJsZSBpdAorICAgICAgICAgICAgLy96bV9kZWJ1Z19tc2cwKCJDV1kgLSBIQUxfTU9ERV8xMUdfVFVSQk8iKTsKKyAgICAgICAgICAgIGNoYW5uZWxCTSA9IE5VTEw7CisJCQkvL3JkID0gJnJkMkdIejsKKwkJCS8vY2hhbm5lbEJNID0gcmQtPmNoYW4xMWdfdHVyYm87CisJCQkvL2ZyZXFzID0gJnJlZ0RtbjJHaHoxMWdUdXJib0ZyZXFbMF07CisJCQkvL2N0bCA9IHJkLT5jb25mb3JtYW5jZVRlc3RMaW1pdCB8IENUTF8xMDhHOworCQkJYnJlYWs7CisJCWNhc2UgSEFMX01PREVfMTFBX1RVUkJPOgorCQkgICAgLy93ZSBkb24ndCBoYXZlIHR1cmJvIG1vZGUgc28gd2UgZGlzYWJsZSBpdAorICAgICAgICAgICAgLy96bV9kZWJ1Z19tc2cwKCJDV1kgLSBIQUxfTU9ERV8xMUFfVFVSQk8iKTsKKyAgICAgICAgICAgIGNoYW5uZWxCTSA9IE5VTEw7CisJCQkvL3JkID0gJnJkNUdIejsKKwkJCS8vY2hhbm5lbEJNID0gcmQtPmNoYW4xMWFfZHluX3R1cmJvOworCQkJLy9mcmVxcyA9ICZyZWdEbW41R2h6VHVyYm9GcmVxWzBdOworCQkJLy9jdGwgPSByZC0+Y29uZm9ybWFuY2VUZXN0TGltaXQgfCBDVExfMTA4RzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiVW5rb253biBIQUwgbW9kZSAiLCBjbS0+bW9kZSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY2hhbm5lbEJNID09IE5VTEwpCisJCXsKKwkJICAgIC8vem1fZGVidWdfbXNnMCgiQ1dZIC0gY2hhbm5lbEJNIGlzIE5VTEwiKTsKKwkJICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpc0NoYW5CaXRNYXNrWmVybyhjaGFubmVsQk0pKQorICAgICAgICB7CisJICAgICAgICAvL3ptX2RlYnVnX21zZzAoIkNXWSAtIEJpdE1hc2sgaXMgWmVybyIpOworCSAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBSQVk6SXMgaXQgb2s/PworICAgICAgICBpZiAoZnJlcXMgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKwkJZm9yIChiPTA7Yjw2NCpCTUxFTjsgYisrKQorCQl7CisJCQlpZiAoSVNfQklUX1NFVChiLGNoYW5uZWxCTSkpCisJCQl7CisJCQkJZmJhbmQgPSAmZnJlcXNbYl07CisKKwkJCQkvL3ptX2RlYnVnX21zZzEoIkNXWSAtIGxvd0NoYW5uZWwgPSAiLCBmYmFuZC0+bG93Q2hhbm5lbCk7CisJCQkJLy96bV9kZWJ1Z19tc2cxKCJDV1kgLSBoaWdoQ2hhbm5lbCA9ICIsIGZiYW5kLT5oaWdoQ2hhbm5lbCk7CisJCQkJLy96bV9kZWJ1Z19tc2cxKCJDV1kgLSBjaGFubmVsU2VwID0gIiwgZmJhbmQtPmNoYW5uZWxTZXApOworCQkJCWZvciAoYz1mYmFuZC0+bG93Q2hhbm5lbDsgYyA8PSBmYmFuZC0+aGlnaENoYW5uZWw7CisJCQkJICAgICBjICs9IGZiYW5kLT5jaGFubmVsU2VwKQorCQkJCXsKKwkJCQkJWk1fSEFMX0NIQU5ORUwgaWN2OworCisgICAgICAgICAgICAgICAgICAgIC8vRGlzYWJsZSBhbGwgREZTIGNoYW5uZWwKKyAgICAgICAgICAgICAgICAgICAgaWYgKChocFByaXYtPmRpc2FibGVEZnNDaD09MCkgfHwgKCEoZmJhbmQtPnVzZURmcyAmIHJkLT5kZnNNYXNrKSkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBmYmFuZC0+Y2hhbm5lbEJXIDwgMjAgKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICBUZW1wb3JhcnkgZGlzY2FyZCBjaGFubmVsIHRoYXQgQlcgPCAyME1IeiAoNSBvciAxME1IeikgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgT3VyIGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBpbXBsZW1udCBpdCAhISEgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCQkJCQlpZiAoKGMgPj0gY19sbykgJiYgKGMgPD0gY19oaSkpCisJCQkJCXsKKwkJCQkJICAgIGljdi5jaGFubmVsID0gYzsKKwkJCQkJICAgIGljdi5jaGFubmVsRmxhZ3MgPSBjbS0+ZmxhZ3M7CisJCQkJCSAgICBpY3YubWF4UmVnVHhQb3dlciA9IGZiYW5kLT5wb3dlckRmczsKKwkJCQkJICAgIGlmIChmYmFuZC0+dXNlUGFzc1NjYW4gJiByZC0+cHNjYW4pCisJCQkJCSAgICAJaWN2LmNoYW5uZWxGbGFncyB8PSBaTV9SRUdfRkxBR19DSEFOTkVMX1BBU1NJVkU7CisJCQkJCSAgICBlbHNlCisJCQkJCSAgICAJaWN2LmNoYW5uZWxGbGFncyAmPSB+Wk1fUkVHX0ZMQUdfQ0hBTk5FTF9QQVNTSVZFOworCQkJCQkgICAgaWYgKGZiYW5kLT51c2VEZnMgJiByZC0+ZGZzTWFzaykKKwkJCQkJICAgIAlpY3YucHJpdkZsYWdzID0gWk1fUkVHX0ZMQUdfQ0hBTk5FTF9ERlM7CisJCQkJCSAgICBlbHNlCisJCQkJCSAgICAJaWN2LnByaXZGbGFncyA9IDA7CisKKwkJCQkJICAgIC8qIEZvciBub3cgZGlzYWJsZSByYWRhciBmb3IgRkNDMyAqLworCQkJCQkgICAgaWYgKGZiYW5kLT51c2VEZnMgJiByZC0+ZGZzTWFzayAmIERGU19GQ0MzKQorCQkJCQkgICAgeworCQkJCQkgICAgCWljdi5wcml2RmxhZ3MgJj0gflpNX1JFR19GTEFHX0NIQU5ORUxfREZTOworCQkJCQkgICAgCWljdi5wcml2RmxhZ3MgfD0gWk1fUkVHX0ZMQUdfQ0hBTk5FTF9ERlNfQ0xFQVI7CisJCQkJCSAgICB9CisKKwkJCQkJICAgIGlmKHJkLT5mbGFncyAmIExJTUlUX0ZSQU1FXzRNUykKKwkJCQkJICAgIAlpY3YucHJpdkZsYWdzIHw9IFpNX1JFR19GTEFHX0NIQU5ORUxfREZTX0NMRUFSOworCisJCQkJCSAgICBpY3YubWluVHhQb3dlciA9IDA7CisJCQkJCSAgICBpY3YubWF4VHhQb3dlciA9IDA7CisKKyAgICAgICAgCQkJICAgIHptX2Fzc2VydChuZXh0IDwgNjApOworCisJCQkJCSAgICB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtuZXh0KytdID0gaWN2OworCQkJCSAgICB9CisJCQkJfQorCQkJfQorCQl9CisJfQorCX0KKwl3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbENudCA9IG5leHQ7CisKKyAgICAjaWYgMAorICAgIHsKKyAgICAgICAgLyogZGVidWcgcHJpbnQgKi8KKyAgICAgICAgdTMyX3QgaTsKKyAgICAgICAgRGJnUHJpbnQoIlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisgICAgICAgIERiZ1ByaW50KCJ6ZkhwR2V0UmVndWxhdGlvblRhYmxlIHByaW50IGFsbCBjaGFubmVsIGluZm8gcmVnaW5jb2RlID0gMHgleFxuIiwgd2QtPnJlZ3VsYXRpb25UYWJsZS5yZWdpb25Db2RlKTsKKyAgICAgICAgRGJnUHJpbnQoImluZGV4ICBjaGFubmVsICBjaGFubmVsRmxhZ3MgICBtYXhSZWdUeFBvd2VyICBwcml2RmxhZ3MgIHVzZURGU1xuIik7CisKKyAgICAgICAgZm9yIChpPTA7IGk8d2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxDbnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgRGJnUHJpbnQoIiUwMmQgICAgICAgJWQgICAgICAgICAlMDR4ICAgICAgICAgICAlMDJkICAgICAgICAleCAgICAgJXhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgaSwKKyAgICAgICAgICAgICAgICAgICAgICB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5jaGFubmVsLAorICAgICAgICAgICAgICAgICAgICAgIHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW2ldLmNoYW5uZWxGbGFncywKKyAgICAgICAgICAgICAgICAgICAgICB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5tYXhSZWdUeFBvd2VyLAorICAgICAgICAgICAgICAgICAgICAgIHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW2ldLnByaXZGbGFncywKKyAgICAgICAgICAgICAgICAgICAgICB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5wcml2RmxhZ3MgJiBaTV9SRUdfRkxBR19DSEFOTkVMX0RGUyk7CisgICAgICAgIH0KKyAgICB9CisgICAgI2VuZGlmCisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworfQorCit2b2lkIHpmSHBHZXRSZWd1bGF0aW9uVGFibGVmcm9tUmVnaW9uQ29kZSh6ZGV2X3QqIGRldiwgdTE2X3QgcmVnaW9uQ29kZSkKK3sKKyAgICB1MTZfdCBjX2xvID0gMjAwMCwgY19oaSA9IDYwMDA7IC8vZGVmYXVsdCBjaGFubmVsIGlzIGFsbCBlbmFibGUKKyAgICB1OF90IGlzb05hbWVbM10gPSB7J04nLCAnQScsIDB9OworCisgICAgemZDb3JlU2V0SXNvTmFtZShkZXYsIGlzb05hbWUpOworCisgICAgemZIcEdldFJlZ3VsYXRpb25UYWJsZShkZXYsIHJlZ2lvbkNvZGUsIGNfbG8sIGNfaGkpOworfQorCit2b2lkIHpmSHBHZXRSZWd1bGF0aW9uVGFibGVmcm9tQ291bnRyeSh6ZGV2X3QqIGRldiwgdTE2X3QgQ291bnRyeUNvZGUpCit7CisgICAgdTE2X3QgaTsKKyAgICB1MTZfdCBjX2xvID0gMjAwMCwgY19oaSA9IDYwMDA7IC8vZGVmYXVsdCBjaGFubmVsIGlzIGFsbCBlbmFibGUKKyAgICB1MTZfdCBSZWdEb21haW47CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgZm9yIChpID0gMDsgaSA8IE4oYWxsQ291bnRyaWVzKTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKENvdW50cnlDb2RlID09IGFsbENvdW50cmllc1tpXS5jb3VudHJ5Q29kZSkKKyAgICAgICAgeworICAgICAgICAgICAgUmVnRG9tYWluID0gYWxsQ291bnRyaWVzW2ldLnJlZ0RtbkVudW07CisKKyAgICAgICAgICAgIC8vIHJlYWQgdGhlIEFDVSBjb3VudHJ5IGNvZGUgZnJvbSBFRVBST00KKyAgICAgICAgICAgIHpmQ29yZVNldElzb05hbWUoZGV2LCAodThfdCopYWxsQ291bnRyaWVzW2ldLmlzb05hbWUpOworCisgICAgICAgICAgICAvL3ptX2RlYnVnX21zZ19zKCJDV1kgLSBDb3VudHJ5IE5hbWUgPSAiLCBhbGxDb3VudHJpZXNbaV0ubmFtZSk7CisKKyAgICAgICAgICAgIGlmICh3ZC0+cmVndWxhdGlvblRhYmxlLnJlZ2lvbkNvZGUgIT0gUmVnRG9tYWluKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vem1fZGVidWdfbXNnMCgiQ1dZIC0gQ2hhbmdlIHJlZ3VsYXRvcnkgdGFibGUiKTsKKworICAgICAgICAgICAgICAgIHpmSHBHZXRSZWd1bGF0aW9uVGFibGUoZGV2LCBSZWdEb21haW4sIGNfbG8sIGNfaGkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIHptX2RlYnVnX21zZzEoIkludmFsaWQgQ291bnRyeUNvZGUgPSAiLCBDb3VudHJ5Q29kZSk7Cit9CisKK3U4X3QgemZIcEdldFJlZ3VsYXRpb25UYWJsZWZyb21JU08oemRldl90KiBkZXYsIHU4X3QgKmNvdW50cnlJbmZvLCB1OF90IGxlbmd0aCkKK3sKKyAgICB1MTZfdCBpOworICAgIHUxNl90IFJlZ0RvbWFpbjsKKyAgICB1MTZfdCBjX2xvID0gMjAwMCwgY19oaSA9IDYwMDA7IC8vZGVmYXVsdCBjaGFubmVsIGlzIGFsbCBlbmFibGUKKyAgICAvL3U4X3Qgc3RyTGVuID0gMjsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICBpZiAoY291bnRyeUluZm9bNF0gIT0gMHgyMCkKKyAgICB7IC8vIHdpdGggKEkpbmRvb3IvKE8pdXRkb29yIGluZm8KKyAgICAgICAgLy9zdHJMZW4gPSAzOworICAgIH0KKyAgICAvL3ptX2RlYnVnX21zZ19zKCJEZXNpcmVkIGlzbyBuYW1lID0gIiwgaXNvTmFtZSk7CisgICAgZm9yIChpID0gMDsgaSA8IE4oYWxsQ291bnRyaWVzKTsgaSsrKQorICAgIHsKKyAgICAgICAgLy96bV9kZWJ1Z19tc2dfcygiQ3VycmVudCBpc28gbmFtZSA9ICIsIGFsbENvdW50cmllc1tpXS5pc29OYW1lKTsKKyAgICAgICAgaWYgKHpmTWVtb3J5SXNFcXVhbCgodThfdCAqKWFsbENvdW50cmllc1tpXS5pc29OYW1lLCAodThfdCAqKSZjb3VudHJ5SW5mb1syXSwgbGVuZ3RoLTEpKQorICAgICAgICB7CisgICAgICAgICAgICAvL0RiZ1ByaW50KCJTZXQgY3VycmVudCBpc28gbmFtZSA9ICVzXG4iLCBhbGxDb3VudHJpZXNbaV0uaXNvTmFtZSk7CisgICAgICAgICAgICAvL3ptX2RlYnVnX21zZzAoImlzbyBuYW1lIGhpdCEhIik7CisKKyAgICAgICAgICAgIFJlZ0RvbWFpbiA9IGFsbENvdW50cmllc1tpXS5yZWdEbW5FbnVtOworCisgICAgICAgICAgICBpZiAod2QtPnJlZ3VsYXRpb25UYWJsZS5yZWdpb25Db2RlICE9IFJlZ0RvbWFpbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6ZkhwR2V0UmVndWxhdGlvblRhYmxlKGRldiwgUmVnRG9tYWluLCBjX2xvLCBjX2hpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy93aGlsZSAoaW5kZXggPCAoY291bnRyeUluZm9bMV0rMikpCisgICAgICAgICAgICAvL3sKKyAgICAgICAgICAgIC8vICBpZiAoY291bnRyeUluZm9baW5kZXhdIDw9IDE0KQorICAgICAgICAgICAgLy8gIHsKKyAgICAgICAgICAgIC8vICAgICAgICAvKiBjYWxjdWxhdGUgMi40R0h6IGxvdyBib3VuZGFyeSBjaGFubmVsIGZyZXF1ZW5jeSAqLworICAgICAgICAgICAgLy8gICAgICAgIGNoID0gY291bnRyeUluZm9baW5kZXhdOworICAgICAgICAgICAgLy8gICAgICAgIGlmICggY2ggPT0gMTQgKQorICAgICAgICAgICAgLy8gICAgICAgICAgICBjX2xvID0gWk1fQ0hfR18xNDsKKyAgICAgICAgICAgIC8vICAgICAgICBlbHNlCisgICAgICAgICAgICAvLyAgICAgICAgICAgIGNfbG8gPSBaTV9DSF9HXzEgKyAoY2ggLSAxKSAqIDU7CisgICAgICAgICAgICAvLyAgICAgICAgLyogY2FsY3VsYXRlIDIuNEdIeiBoaWdoIGJvdW5kYXJ5IGNoYW5uZWwgZnJlcXVlbmN5ICovCisgICAgICAgICAgICAvLyAgICAgICAgY2ggPSBjb3VudHJ5SW5mb1tpbmRleF0gKyBjb3VudHJ5SW5mb1tpbmRleCArIDFdIC0gMTsKKyAgICAgICAgICAgIC8vICAgICAgICBpZiAoIGNoID09IDE0ICkKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgY19oaSA9IFpNX0NIX0dfMTQ7CisgICAgICAgICAgICAvLyAgICAgICAgZWxzZQorICAgICAgICAgICAgLy8gICAgICAgICAgICBjX2hpID0gWk1fQ0hfR18xICsgKGNoIC0gMSkgKiA1OworICAgICAgICAgICAgLy8gIH0KKyAgICAgICAgICAgIC8vICBlbHNlCisgICAgICAgICAgICAvLyAgeworICAgICAgICAgICAgLy8gICAgICAgIC8qIGNhbGN1bGF0ZSA1R0h6IGxvdyBib3VuZGFyeSBjaGFubmVsIGZyZXF1ZW5jeSAqLworICAgICAgICAgICAgLy8gICAgICAgIGNoID0gY291bnRyeUluZm9baW5kZXhdOworICAgICAgICAgICAgLy8gICAgICAgIGlmICggKGNoID49IDE4NCkmJihjaCA8PSAxOTYpICkKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgY19sbyA9IDQwMDAgKyBjaCo1OworICAgICAgICAgICAgLy8gICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgY19sbyA9IDUwMDAgKyBjaCo1OworICAgICAgICAgICAgLy8gICAgICAgIC8qIGNhbGN1bGF0ZSA1R0h6IGhpZ2ggYm91bmRhcnkgY2hhbm5lbCBmcmVxdWVuY3kgKi8KKyAgICAgICAgICAgIC8vICAgICAgICBjaCA9IGNvdW50cnlJbmZvW2luZGV4XSArIGNvdW50cnlJbmZvW2luZGV4ICsgMV0gLSAxOworICAgICAgICAgICAgLy8gICAgICAgIGlmICggKGNoID49IDE4NCkmJihjaCA8PSAxOTYpICkKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgY19oaSA9IDQwMDAgKyBjaCo1OworICAgICAgICAgICAgLy8gICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgY19oaSA9IDUwMDAgKyBjaCo1OworICAgICAgICAgICAgLy8gIH0KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAgemZIcEdldFJlZ3VsYXRpb25UYWJsZShkZXYsIFJlZ0RvbWFpbiwgY19sbywgY19oaSk7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gIGluZGV4Kz0zOworICAgICAgICAgICAgLy99CisKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIC8vem1fZGVidWdfbXNnX3MoIkludmFsaWQgaXNvIG5hbWUgPSAiLCAmY291bnRyeUluZm9bMl0pOworICAgIHJldHVybiAxOworfQorCitjb25zdCBjaGFyKiB6ZkhwR2V0aXNvTmFtZWZyb21yZWdpb25Db2RlKHpkZXZfdCogZGV2LCB1MTZfdCByZWdpb25Db2RlKQoreworICAgIHUxNl90IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTihhbGxDb3VudHJpZXMpOyBpKyspCisgICAgeworICAgICAgICBpZiAoYWxsQ291bnRyaWVzW2ldLnJlZ0RtbkVudW0gPT0gcmVnaW9uQ29kZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFsbENvdW50cmllc1tpXS5pc29OYW1lOworICAgICAgICB9CisgICAgfQorICAgIC8qIG5vIG1hdGNoaW5nIGl0ZW0sIHJldHVybiBkZWZhdWx0ICovCisgICAgcmV0dXJuIGFsbENvdW50cmllc1swXS5pc29OYW1lOworfQorCit1MTZfdCB6ZkhwR2V0UmVnaW9uQ29kZUZyb21Jc29OYW1lKHpkZXZfdCogZGV2LCB1OF90ICpjb3VudHJ5SXNvTmFtZSkKK3sKKyAgICB1MTZfdCBpOworICAgIHUxNl90IHJlZ2lvbkNvZGU7CisKKyAgICAvKiBpZiBubyBtYXRjaGluZyBpdGVtLCByZXR1cm4gZGVmYXVsdCAqLworICAgIHJlZ2lvbkNvZGUgPSBERUZfUkVHRE1OOworCisgICAgZm9yIChpID0gMDsgaSA8IE4oYWxsQ291bnRyaWVzKTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKHpmTWVtb3J5SXNFcXVhbCgodThfdCAqKWFsbENvdW50cmllc1tpXS5pc29OYW1lLCBjb3VudHJ5SXNvTmFtZSwgMikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lvbkNvZGUgPSBhbGxDb3VudHJpZXNbaV0ucmVnRG1uRW51bTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlZ2lvbkNvZGU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkhwRGVsZXRlQWxsb3dDaGFubmVsICAgICAgKi8KKy8qICAgICAgRGVsZXRlIEFsbG93IENoYW5uZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2ICA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGZyZXEgOiBmcmVxdWVuY3kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIDAgOiBzdWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBvdGhlciA6IGZhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBDaGFvLVdlbiBZYW5nICAgICAgICAgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAgICAyMDA3LjMgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZIcERlbGV0ZUFsbG93Q2hhbm5lbCh6ZGV2X3QqIGRldiwgdTE2X3QgZnJlcSkKK3sKKyAgICB1MTZfdCBpLCBiYW5kSW5kZXggPSAwOworICAgIHUxNl90IGRmczVHQmFuZFtdWzJdID0ge3s1MTUwLCA1MjQwfSwgezUyNjAsIDUzNTB9LCB7NTQ1MCwgNTcwMH0sIHs1NzI1LCA1ODI1fX07CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgLyogRmluZCB3aGljaCBiYW5kIGRvZXMgdGhpcyBmcmVxdWVuY3kgYmVsb25nICovCisgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKyAgICB7CisgICAgICAgIGlmICgoZnJlcSA+PSBkZnM1R0JhbmRbaV1bMF0pICYmIChmcmVxIDw9IGRmczVHQmFuZFtpXVsxXSkpCisgICAgICAgICAgICBiYW5kSW5kZXggPSBpICsgMTsKKyAgICB9CisKKyAgICBpZiAoYmFuZEluZGV4ID09IDApCisgICAgeworICAgICAgICAvKiAyLjRHLCBkb24ndCBjYXJlICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBiYW5kSW5kZXgtLTsKKyAgICB9CisgICAgLyogU2V0IGFsbCBjaGFubmVscyBpbiB0aGlzIGJhbmQgdG8gcGFzc2l2ZSBzY2FuICovCisgICAgZm9yIChpID0gMDsgaSA8IHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250OyBpKyspCisgICAgeworICAgICAgICBpZiAoKHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW2ldLmNoYW5uZWwgPj0gZGZzNUdCYW5kW2JhbmRJbmRleF1bMF0pICYmCisgICAgICAgICAgICAod2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0uY2hhbm5lbCA8PSBkZnM1R0JhbmRbYmFuZEluZGV4XVsxXSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIGlmIGNoYW5uZWwgaXMgbm90IHBhc3NpdmUsIHNldCBpdCB0byBiZSBwYXNzaXZlIGFuZCBtYXJrIGl0ICovCisgICAgICAgICAgICBpZiAoKHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW2ldLmNoYW5uZWxGbGFncyAmCisgICAgICAgICAgICAgICAgICAgIFpNX1JFR19GTEFHX0NIQU5ORUxfUEFTU0lWRSkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5jaGFubmVsRmxhZ3MgfD0KKyAgICAgICAgICAgICAgICAgICAgICAgIChaTV9SRUdfRkxBR19DSEFOTkVMX1BBU1NJVkUgfCBaTV9SRUdfRkxBR19DSEFOTkVMX0NTQSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordTE2X3QgemZIcEFkZEFsbG93Q2hhbm5lbCh6ZGV2X3QqIGRldiwgdTE2X3QgZnJlcSkKK3sKKyAgICB1MTZfdCBpLCBqLCBhcnJheUluZGV4OworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgZm9yIChpID0gMDsgaSA8IHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250OyBpKyspCisgICAgeworICAgICAgICBpZiAod2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0uY2hhbm5lbCA9PSBmcmVxKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCBpID09IHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250KQorICAgIHsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250OyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtqXS5jaGFubmVsID4gZnJlcSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vem1fZGVidWdfbXNnMSgiQ1dZIC0gYWRkIGZyZXF1ZW5jeSA9ICIsIGZyZXEpOworICAgICAgICAvL3ptX2RlYnVnX21zZzEoIkNXWSAtIGNoYW5uZWwgYXJyYXkgaW5kZXggPSAiLCBqKTsKKworICAgICAgICBhcnJheUluZGV4ID0gajsKKworICAgICAgICBpZiAoYXJyYXlJbmRleCA8IHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGogPSB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbENudDsgaiA+IGFycmF5SW5kZXg7IGotLSkKKyAgICAgICAgICAgICAgICB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtqXSA9IHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW2ogLSAxXTsKKyAgICAgICAgfQorICAgICAgICB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFthcnJheUluZGV4XS5jaGFubmVsID0gZnJlcTsKKworICAgICAgICB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbENudCsrOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit1MTZfdCB6ZkhwSXNEZnNDaGFubmVsTkNTKHpkZXZfdCogZGV2LCB1MTZfdCBmcmVxKQoreworICAgIHU4X3QgZmxhZyA9IFpNX1JFR19GTEFHX0NIQU5ORUxfREZTOworICAgIHUxNl90IGk7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgZm9yIChpID0gMDsgaSA8IHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250OyBpKyspCisgICAgeworICAgICAgICAvL0RiZ1ByaW50KCJERlM6ZnJlcT0lZCwgY2hhbj0lZCIsIGZyZXEsIHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW2ldLmNoYW5uZWwpOworICAgICAgICBpZiAod2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0uY2hhbm5lbCA9PSBmcmVxKQorICAgICAgICB7CisgICAgICAgICAgICBmbGFnID0gd2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0ucHJpdkZsYWdzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKGZsYWcgJiAoWk1fUkVHX0ZMQUdfQ0hBTk5FTF9ERlN8Wk1fUkVHX0ZMQUdfQ0hBTk5FTF9ERlNfQ0xFQVIpKTsKK30KKwordTE2X3QgemZIcElzRGZzQ2hhbm5lbCh6ZGV2X3QqIGRldiwgdTE2X3QgZnJlcSkKK3sKKyAgICB1OF90IGZsYWcgPSBaTV9SRUdfRkxBR19DSEFOTkVMX0RGUzsKKyAgICB1MTZfdCBpOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgZm9yIChpID0gMDsgaSA8IHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250OyBpKyspCisgICAgeworICAgICAgICAvL0RiZ1ByaW50KCJERlM6ZnJlcT0lZCwgY2hhbj0lZCIsIGZyZXEsIHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW2ldLmNoYW5uZWwpOworICAgICAgICBpZiAod2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0uY2hhbm5lbCA9PSBmcmVxKQorICAgICAgICB7CisgICAgICAgICAgICBmbGFnID0gd2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0ucHJpdkZsYWdzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgcmV0dXJuIChmbGFnICYgKFpNX1JFR19GTEFHX0NIQU5ORUxfREZTfFpNX1JFR19GTEFHX0NIQU5ORUxfREZTX0NMRUFSKSk7Cit9CisKK3UxNl90IHpmSHBJc0FsbG93ZWRDaGFubmVsKHpkZXZfdCogZGV2LCB1MTZfdCBmcmVxKQoreworICAgIHUxNl90IGk7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgZm9yIChpID0gMDsgaSA8IHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250OyBpKyspCisgICAgeworICAgICAgICBpZiAod2QtPnJlZ3VsYXRpb25UYWJsZS5hbGxvd0NoYW5uZWxbaV0uY2hhbm5lbCA9PSBmcmVxKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCit1MTZfdCB6ZkhwRmluZEZpcnN0Tm9uRGZzQ2hhbm5lbCh6ZGV2X3QqIGRldiwgdTE2X3QgYUJhbmQpCit7CisgICAgdTE2X3QgY2hhbiA9IDI0MTI7CisgICAgdTE2X3QgaTsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbENudDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKCh3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5wcml2RmxhZ3MgJiBaTV9SRUdfRkxBR19DSEFOTkVMX0RGUykgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGFCYW5kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5jaGFubmVsID4gMzAwMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNoYW4gPSB3ZC0+cmVndWxhdGlvblRhYmxlLmFsbG93Q2hhbm5lbFtpXS5jaGFubmVsOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW2ldLmNoYW5uZWwgPCAzMDAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhbiA9IHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW2ldLmNoYW5uZWw7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICByZXR1cm4gY2hhbjsKK30KKworCisvKiBwb3J0aW5nIGZyb20gQUNVICovCisvKiBzYXZlIFJlZ3VsYXRvcnlEb21haW4gaW4gaHByaXYgKi8KK3U4X3QgemZIcEdldFJlZ3VsYXRvcnlEb21haW4oemRldl90KiBkZXYpCit7CisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgc3dpdGNoICh3ZC0+cmVndWxhdGlvblRhYmxlLnJlZ2lvbkNvZGUpCisgICAgeworICAgICAgICBjYXNlIE5PX0VOVU1SRDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRkNDMV9GQ0NBOgorICAgICAgICBjYXNlIEZDQzFfV09STEQ6CisgICAgICAgIGNhc2UgRkNDNF9GQ0NBOgorICAgICAgICBjYXNlIEZDQzVfRkNDQToKKyAgICAgICAgY2FzZSBGQ0MyX1dPUkxEOgorICAgICAgICBjYXNlIEZDQzJfRVRTSUM6CisgICAgICAgIGNhc2UgRkNDM19GQ0NBOgorICAgICAgICBjYXNlIEZDQzNfV09STEQ6CisgICAgICAgIGNhc2UgRkNDMToKKyAgICAgICAgY2FzZSBGQ0MyOgorICAgICAgICBjYXNlIEZDQzM6CisgICAgICAgIGNhc2UgRkNDNDoKKyAgICAgICAgY2FzZSBGQ0M1OgorICAgICAgICBjYXNlIEZDQ0E6CisgICAgICAgICAgICByZXR1cm4gMHgxMDsvL1dHX0FNRVJJQ0FTIERPVDExX1JFR19ET01BSU5fRkNDICBVbml0ZWQgU3RhdGVzCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEZDQzJfRkNDQToKKyAgICAgICAgICAgIHJldHVybiAweDIwOy8vRE9UMTFfUkVHX0RPTUFJTl9ET0MgIENhbmFkYQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFVFNJMV9XT1JMRDoKKyAgICAgICAgY2FzZSBFVFNJM19FVFNJQToKKyAgICAgICAgY2FzZSBFVFNJMl9XT1JMRDoKKyAgICAgICAgY2FzZSBFVFNJM19XT1JMRDoKKyAgICAgICAgY2FzZSBFVFNJNF9XT1JMRDoKKyAgICAgICAgY2FzZSBFVFNJNF9FVFNJQzoKKyAgICAgICAgY2FzZSBFVFNJNV9XT1JMRDoKKyAgICAgICAgY2FzZSBFVFNJNl9XT1JMRDoKKyAgICAgICAgY2FzZSBFVFNJX1JFU0VSVkVEOgorICAgICAgICBjYXNlIEVUU0kxOgorICAgICAgICBjYXNlIEVUU0kyOgorICAgICAgICBjYXNlIEVUU0kzOgorICAgICAgICBjYXNlIEVUU0k0OgorICAgICAgICBjYXNlIEVUU0k1OgorICAgICAgICBjYXNlIEVUU0k2OgorICAgICAgICBjYXNlIEVUU0lBOgorICAgICAgICBjYXNlIEVUU0lCOgorICAgICAgICBjYXNlIEVUU0lDOgorICAgICAgICAgICAgcmV0dXJuIDB4MzA7Ly9XR19FTUVBIERPVDExX1JFR19ET01BSU5fRVRTSSAgTW9zdCBvZiBFdXJvcGUKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUtLMV9NS0tBOgorICAgICAgICBjYXNlIE1LSzFfTUtLQjoKKyAgICAgICAgY2FzZSBNS0syX01LS0E6CisgICAgICAgIGNhc2UgTUtLMV9GQ0NBOgorICAgICAgICBjYXNlIE1LSzFfTUtLQTE6CisgICAgICAgIGNhc2UgTUtLMV9NS0tBMjoKKyAgICAgICAgY2FzZSBNS0sxX01LS0M6CisgICAgICAgIGNhc2UgTUtLM19NS0tCOgorICAgICAgICBjYXNlIE1LSzNfTUtLQTI6CisgICAgICAgIGNhc2UgTUtLM19NS0tDOgorICAgICAgICBjYXNlIE1LSzRfTUtLQjoKKyAgICAgICAgY2FzZSBNS0s0X01LS0EyOgorICAgICAgICBjYXNlIE1LSzRfTUtLQzoKKyAgICAgICAgY2FzZSBNS0s1X01LS0I6CisgICAgICAgIGNhc2UgTUtLNV9NS0tBMjoKKyAgICAgICAgY2FzZSBNS0s1X01LS0M6CisgICAgICAgIGNhc2UgTUtLNl9NS0tCOgorICAgICAgICBjYXNlIE1LSzZfTUtLQTI6CisgICAgICAgIGNhc2UgTUtLNl9NS0tDOgorICAgICAgICBjYXNlIE1LSzdfTUtLQjoKKyAgICAgICAgY2FzZSBNS0s3X01LS0E6CisgICAgICAgIGNhc2UgTUtLN19NS0tDOgorICAgICAgICBjYXNlIE1LSzhfTUtLQjoKKyAgICAgICAgY2FzZSBNS0s4X01LS0EyOgorICAgICAgICBjYXNlIE1LSzhfTUtLQzoKKyAgICAgICAgY2FzZSBNS0s2X01LS0ExOgorICAgICAgICBjYXNlIE1LSzZfRkNDQToKKyAgICAgICAgY2FzZSBNS0s3X01LS0ExOgorICAgICAgICBjYXNlIE1LSzdfRkNDQToKKyAgICAgICAgY2FzZSBNS0s5X0ZDQ0E6CisgICAgICAgIGNhc2UgTUtLOV9NS0tBMToKKyAgICAgICAgY2FzZSBNS0s5X01LS0M6CisgICAgICAgIGNhc2UgTUtLOV9NS0tBMjoKKyAgICAgICAgY2FzZSBNS0sxMF9GQ0NBOgorICAgICAgICBjYXNlIE1LSzEwX01LS0ExOgorICAgICAgICBjYXNlIE1LSzEwX01LS0M6CisgICAgICAgIGNhc2UgTUtLMTBfTUtLQTI6CisgICAgICAgIGNhc2UgTUtLMTFfTUtLQToKKyAgICAgICAgY2FzZSBNS0sxMV9GQ0NBOgorICAgICAgICBjYXNlIE1LSzExX01LS0ExOgorICAgICAgICBjYXNlIE1LSzExX01LS0M6CisgICAgICAgIGNhc2UgTUtLMTFfTUtLQTI6CisgICAgICAgIGNhc2UgTUtLMTJfTUtLQToKKyAgICAgICAgY2FzZSBNS0sxMl9GQ0NBOgorICAgICAgICBjYXNlIE1LSzEyX01LS0ExOgorICAgICAgICBjYXNlIE1LSzEyX01LS0M6CisgICAgICAgIGNhc2UgTUtLMTJfTUtLQTI6CisgICAgICAgIGNhc2UgTUtLM19NS0tBOgorICAgICAgICBjYXNlIE1LSzNfTUtLQTE6CisgICAgICAgIGNhc2UgTUtLM19GQ0NBOgorICAgICAgICBjYXNlIE1LSzRfTUtLQToKKyAgICAgICAgY2FzZSBNS0s0X01LS0ExOgorICAgICAgICBjYXNlIE1LSzRfRkNDQToKKyAgICAgICAgY2FzZSBNS0s5X01LS0E6CisgICAgICAgIGNhc2UgTUtLMTBfTUtLQToKKyAgICAgICAgY2FzZSBNS0sxOgorICAgICAgICBjYXNlIE1LSzI6CisgICAgICAgIGNhc2UgTUtLMzoKKyAgICAgICAgY2FzZSBNS0s0OgorICAgICAgICBjYXNlIE1LSzU6CisgICAgICAgIGNhc2UgTUtLNjoKKyAgICAgICAgY2FzZSBNS0s3OgorICAgICAgICBjYXNlIE1LSzg6CisgICAgICAgIGNhc2UgTUtLOToKKyAgICAgICAgY2FzZSBNS0sxMDoKKyAgICAgICAgY2FzZSBNS0sxMToKKyAgICAgICAgY2FzZSBNS0sxMjoKKyAgICAgICAgY2FzZSBNS0tBOgorICAgICAgICBjYXNlIE1LS0M6CisgICAgICAgICAgICByZXR1cm4gMHg0MDsvL1dHX0pBUEFOIERPVDExX1JFR19ET01BSU5fTUtLICBKYXBhbgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gMHhGRjsvLyBEaWRuJ3QgaW5wdXQgUmVnRG1uIGJ5IG1lYW4gdG8gZGlzdGluZ3Vpc2ggYnkgY3VzdG9tZXIKKworfQorCisKK3ZvaWQgemZIcERpc2FibGVEZnNDaGFubmVsKHpkZXZfdCogZGV2LCB1OF90IGRpc2FibGVGbGFnKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2LT5kaXNhYmxlRGZzQ2ggPSBkaXNhYmxlRmxhZzsKKyAgICByZXR1cm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHByZWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmOGM3M2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHByZWcuaApAQCAtMCwwICsxLDUyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisvKiAgTW9kdWxlIE5hbWUgOiBocHJlZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBBYnN0cmFjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFRoaXMgbW9kdWxlIGNvbnRhaW5zIFJlZ3VsYXRvcnkgVGFibGUgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBOT1RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0hQUkVHX0gKKyNkZWZpbmUgX0hQUkVHX0gKKwordHlwZWRlZiB1MTZfdCBIQUxfQ1RSWV9DT0RFOwkJLyogY291bnRyeSBjb2RlICovCit0eXBlZGVmIHUxNl90IEhBTF9SRUdfRE9NQUlOOwkJLyogcmVndWxhdG9yeSBkb21haW4gY29kZSAqLwordHlwZWRlZiBlbnVtIHsKKwlBSF9GQUxTRSA9IDAsCQkvKiBOQjogbG90cyBvZiBjb2RlIGFzc3VtZXMgZmFsc2UgaXMgemVybyAqLworCUFIX1RSVUUgID0gMSwKK30gSEFMX0JPT0w7CisKKworLyoKKyAqIENvdW50cnkvUmVnaW9uIENvZGVzIGZyb20gTVMgV0lOTkxTLkgKKyAqIE51bWJlcmluZyBmcm9tIElTTyAzMTY2CisgKi8KK2VudW0gQ291bnRyeUNvZGUgeworICAgIENUUllfQUxCQU5JQSAgICAgICAgICAgICAgPSA4LCAgICAgICAvKiBBbGJhbmlhICovCisgICAgQ1RSWV9BTEdFUklBICAgICAgICAgICAgICA9IDEyLCAgICAgIC8qIEFsZ2VyaWEgKi8KKyAgICBDVFJZX0FSR0VOVElOQSAgICAgICAgICAgID0gMzIsICAgICAgLyogQXJnZW50aW5hICovCisgICAgQ1RSWV9BUk1FTklBICAgICAgICAgICAgICA9IDUxLCAgICAgIC8qIEFybWVuaWEgKi8KKyAgICBDVFJZX0FVU1RSQUxJQSAgICAgICAgICAgID0gMzYsICAgICAgLyogQXVzdHJhbGlhICovCisgICAgQ1RSWV9BVVNUUklBICAgICAgICAgICAgICA9IDQwLCAgICAgIC8qIEF1c3RyaWEgKi8KKyAgICBDVFJZX0FaRVJCQUlKQU4gICAgICAgICAgID0gMzEsICAgICAgLyogQXplcmJhaWphbiAqLworICAgIENUUllfQkFIUkFJTiAgICAgICAgICAgICAgPSA0OCwgICAgICAvKiBCYWhyYWluICovCisgICAgQ1RSWV9CRUxBUlVTICAgICAgICAgICAgICA9IDExMiwgICAgIC8qIEJlbGFydXMgKi8KKyAgICBDVFJZX0JFTEdJVU0gICAgICAgICAgICAgID0gNTYsICAgICAgLyogQmVsZ2l1bSAqLworICAgIENUUllfQkVMSVpFICAgICAgICAgICAgICAgPSA4NCwgICAgICAvKiBCZWxpemUgKi8KKyAgICBDVFJZX0JPTElWSUEgICAgICAgICAgICAgID0gNjgsICAgICAgLyogQm9saXZpYSAqLworICAgIENUUllfQk9TTklBICAgICAgICAgICAgICAgPSA3MCwgICAgICAvKiBCb3NuaWEgKi8KKyAgICBDVFJZX0JSQVpJTCAgICAgICAgICAgICAgID0gNzYsICAgICAgLyogQnJhemlsICovCisgICAgQ1RSWV9CUlVORUlfREFSVVNTQUxBTSAgICA9IDk2LCAgICAgIC8qIEJydW5laSBEYXJ1c3NhbGFtICovCisgICAgQ1RSWV9CVUxHQVJJQSAgICAgICAgICAgICA9IDEwMCwgICAgIC8qIEJ1bGdhcmlhICovCisgICAgQ1RSWV9DQU5BREEgICAgICAgICAgICAgICA9IDEyNCwgICAgIC8qIENhbmFkYSAqLworICAgIENUUllfQ0hJTEUgICAgICAgICAgICAgICAgPSAxNTIsICAgICAvKiBDaGlsZSAqLworICAgIENUUllfQ0hJTkEgICAgICAgICAgICAgICAgPSAxNTYsICAgICAvKiBQZW9wbGUncyBSZXB1YmxpYyBvZiBDaGluYSAqLworICAgIENUUllfQ09MT01CSUEgICAgICAgICAgICAgPSAxNzAsICAgICAvKiBDb2xvbWJpYSAqLworICAgIENUUllfQ09TVEFfUklDQSAgICAgICAgICAgPSAxODgsICAgICAvKiBDb3N0YSBSaWNhICovCisgICAgQ1RSWV9DUk9BVElBICAgICAgICAgICAgICA9IDE5MSwgICAgIC8qIENyb2F0aWEgKi8KKyAgICBDVFJZX0NZUFJVUyAgICAgICAgICAgICAgID0gMTk2LCAgICAgLyogQ3lwcnVzICovCisgICAgQ1RSWV9DWkVDSCAgICAgICAgICAgICAgICA9IDIwMywgICAgIC8qIEN6ZWNoIFJlcHVibGljICovCisgICAgQ1RSWV9ERU5NQVJLICAgICAgICAgICAgICA9IDIwOCwgICAgIC8qIERlbm1hcmsgKi8KKyAgICBDVFJZX0RPTUlOSUNBTl9SRVBVQkxJQyAgID0gMjE0LCAgICAgLyogRG9taW5pY2FuIFJlcHVibGljICovCisgICAgQ1RSWV9FQ1VBRE9SICAgICAgICAgICAgICA9IDIxOCwgICAgIC8qIEVjdWFkb3IgKi8KKyAgICBDVFJZX0VHWVBUICAgICAgICAgICAgICAgID0gODE4LCAgICAgLyogRWd5cHQgKi8KKyAgICBDVFJZX0VMX1NBTFZBRE9SICAgICAgICAgID0gMjIyLCAgICAgLyogRWwgU2FsdmFkb3IgKi8KKyAgICBDVFJZX0VTVE9OSUEgICAgICAgICAgICAgID0gMjMzLCAgICAgLyogRXN0b25pYSAqLworICAgIENUUllfRkFFUk9FX0lTTEFORFMgICAgICAgPSAyMzQsICAgICAvKiBGYWVyb2UgSXNsYW5kcyAqLworICAgIENUUllfRklOTEFORCAgICAgICAgICAgICAgPSAyNDYsICAgICAvKiBGaW5sYW5kICovCisgICAgQ1RSWV9GUkFOQ0UgICAgICAgICAgICAgICA9IDI1MCwgICAgIC8qIEZyYW5jZSAqLworICAgIENUUllfRlJBTkNFMiAgICAgICAgICAgICAgPSAyNTUsICAgICAvKiBGcmFuY2UyICovCisgICAgQ1RSWV9HRU9SR0lBICAgICAgICAgICAgICA9IDI2OCwgICAgIC8qIEdlb3JnaWEgKi8KKyAgICBDVFJZX0dFUk1BTlkgICAgICAgICAgICAgID0gMjc2LCAgICAgLyogR2VybWFueSAqLworICAgIENUUllfR1JFRUNFICAgICAgICAgICAgICAgPSAzMDAsICAgICAvKiBHcmVlY2UgKi8KKyAgICBDVFJZX0dVQVRFTUFMQSAgICAgICAgICAgID0gMzIwLCAgICAgLyogR3VhdGVtYWxhICovCisgICAgQ1RSWV9IT05EVVJBUyAgICAgICAgICAgICA9IDM0MCwgICAgIC8qIEhvbmR1cmFzICovCisgICAgQ1RSWV9IT05HX0tPTkcgICAgICAgICAgICA9IDM0NCwgICAgIC8qIEhvbmcgS29uZyBTLkEuUi4sIFAuUi5DLiAqLworICAgIENUUllfSFVOR0FSWSAgICAgICAgICAgICAgPSAzNDgsICAgICAvKiBIdW5nYXJ5ICovCisgICAgQ1RSWV9JQ0VMQU5EICAgICAgICAgICAgICA9IDM1MiwgICAgIC8qIEljZWxhbmQgKi8KKyAgICBDVFJZX0lORElBICAgICAgICAgICAgICAgID0gMzU2LCAgICAgLyogSW5kaWEgKi8KKyAgICBDVFJZX0lORE9ORVNJQSAgICAgICAgICAgID0gMzYwLCAgICAgLyogSW5kb25lc2lhICovCisgICAgQ1RSWV9JUkFOICAgICAgICAgICAgICAgICA9IDM2NCwgICAgIC8qIElyYW4gKi8KKyAgICBDVFJZX0lSQVEgICAgICAgICAgICAgICAgID0gMzY4LCAgICAgLyogSXJhcSAqLworICAgIENUUllfSVJFTEFORCAgICAgICAgICAgICAgPSAzNzIsICAgICAvKiBJcmVsYW5kICovCisgICAgQ1RSWV9JU1JBRUwgICAgICAgICAgICAgICA9IDM3NiwgICAgIC8qIElzcmFlbCAqLworICAgIENUUllfSVNSQUVMMiAgICAgICAgICAgICAgPSAzNzcsICAgICAvKiBJc3JhZWwyICovCisgICAgQ1RSWV9JVEFMWSAgICAgICAgICAgICAgICA9IDM4MCwgICAgIC8qIEl0YWx5ICovCisgICAgQ1RSWV9KQU1BSUNBICAgICAgICAgICAgICA9IDM4OCwgICAgIC8qIEphbWFpY2EgKi8KKyAgICBDVFJZX0pBUEFOICAgICAgICAgICAgICAgID0gMzkyLCAgICAgLyogSmFwYW4gKi8KKyAgICBDVFJZX0pBUEFOMSAgICAgICAgICAgICAgID0gMzkzLCAgICAgLyogSmFwYW4gKEpQMSkgKi8KKyAgICBDVFJZX0pBUEFOMiAgICAgICAgICAgICAgID0gMzk0LCAgICAgLyogSmFwYW4gKEpQMCkgKi8KKyAgICBDVFJZX0pBUEFOMyAgICAgICAgICAgICAgID0gMzk1LCAgICAgLyogSmFwYW4gKEpQMS0xKSAqLworICAgIENUUllfSkFQQU40ICAgICAgICAgICAgICAgPSAzOTYsICAgICAvKiBKYXBhbiAoSkUxKSAqLworICAgIENUUllfSkFQQU41ICAgICAgICAgICAgICAgPSAzOTcsICAgICAvKiBKYXBhbiAoSkUyKSAqLworICAgIENUUllfSkFQQU42ICAgICAgICAgICAgICAgPSAzOTksICAgICAvKiBKYXBhbiAoSlA2KSAqLworCisgICAgQ1RSWV9KQVBBTjcJICAgICAgICAgICAgICA9IDQwMDcsICAgIC8qIEphcGFuIChKNykgKi8KKyAgICBDVFJZX0pBUEFOOAkgICAgICAgICAgICAgID0gNDAwOCwgICAgLyogSmFwYW4gKEo4KSAqLworICAgIENUUllfSkFQQU45ICAgICAgICAgICAgICAgPSA0MDA5LCAgICAvKiBKYXBhbiAoSjkpICovCisKKyAgICBDVFJZX0pBUEFOMTAgICAgICAgICAgICAgID0gNDAxMCwgICAgLyogSmFwYW4gKEoxMCkgKi8KKyAgICBDVFJZX0pBUEFOMTEgICAgICAgICAgICAgID0gNDAxMSwgICAgLyogSmFwYW4gKEoxMSkgKi8KKyAgICBDVFJZX0pBUEFOMTIgICAgICAgICAgICAgID0gNDAxMiwgICAgLyogSmFwYW4gKEoxMikgKi8KKworICAgIENUUllfSkFQQU4xMyAgICAgICAgICAgICAgPSA0MDEzLCAgICAvKiBKYXBhbiAoSjEzKSAqLworICAgIENUUllfSkFQQU4xNCAgICAgICAgICAgICAgPSA0MDE0LCAgICAvKiBKYXBhbiAoSjE0KSAqLworICAgIENUUllfSkFQQU4xNSAgICAgICAgICAgICAgPSA0MDE1LCAgICAvKiBKYXBhbiAoSjE1KSAqLworCisgICAgQ1RSWV9KQVBBTjE2ICAgICAgICAgICAgICA9IDQwMTYsICAgIC8qIEphcGFuIChKMTYpICovCisgICAgQ1RSWV9KQVBBTjE3ICAgICAgICAgICAgICA9IDQwMTcsICAgIC8qIEphcGFuIChKMTcpICovCisgICAgQ1RSWV9KQVBBTjE4ICAgICAgICAgICAgICA9IDQwMTgsICAgIC8qIEphcGFuIChKMTgpICovCisKKyAgICBDVFJZX0pBUEFOMTkgICAgICAgICAgICAgID0gNDAxOSwgICAgLyogSmFwYW4gKEoxOSkgKi8KKyAgICBDVFJZX0pBUEFOMjAgICAgICAgICAgICAgID0gNDAyMCwgICAgLyogSmFwYW4gKEoyMCkgKi8KKyAgICBDVFJZX0pBUEFOMjEgICAgICAgICAgICAgID0gNDAyMSwgICAgLyogSmFwYW4gKEoyMSkgKi8KKworICAgIENUUllfSkFQQU4yMiAgICAgICAgICAgICAgPSA0MDIyLCAgICAvKiBKYXBhbiAoSjIyKSAqLworICAgIENUUllfSkFQQU4yMyAgICAgICAgICAgICAgPSA0MDIzLCAgICAvKiBKYXBhbiAoSjIzKSAqLworICAgIENUUllfSkFQQU4yNCAgICAgICAgICAgICAgPSA0MDI0LCAgICAvKiBKYXBhbiAoSjI0KSAqLworCisgICAgQ1RSWV9KQVBBTjI1ICAgICAgICAgICAgICA9IDQwMjUsICAgIC8qIEphcGFuIChKMjUpICovCisgICAgQ1RSWV9KQVBBTjI2ICAgICAgICAgICAgICA9IDQwMjYsICAgIC8qIEphcGFuIChKMjYpICovCisgICAgQ1RSWV9KQVBBTjI3ICAgICAgICAgICAgICA9IDQwMjcsICAgIC8qIEphcGFuIChKMjcpICovCisKKyAgICBDVFJZX0pBUEFOMjggICAgICAgICAgICAgID0gNDAyOCwgICAgLyogSmFwYW4gKEoyOCkgKi8KKyAgICBDVFJZX0pBUEFOMjkgICAgICAgICAgICAgID0gNDAyOSwgICAgLyogSmFwYW4gKEoyOSkgKi8KKyAgICBDVFJZX0pBUEFOMzAgICAgICAgICAgICAgID0gNDAzMCwgICAgLyogSmFwYW4gKEozMCkgKi8KKworICAgIENUUllfSkFQQU4zMSAgICAgICAgICAgICAgPSA0MDMxLCAgICAvKiBKYXBhbiAoSjMxKSAqLworICAgIENUUllfSkFQQU4zMiAgICAgICAgICAgICAgPSA0MDMyLCAgICAvKiBKYXBhbiAoSjMyKSAqLworICAgIENUUllfSkFQQU4zMyAgICAgICAgICAgICAgPSA0MDMzLCAgICAvKiBKYXBhbiAoSjMzKSAqLworCisgICAgQ1RSWV9KQVBBTjM0ICAgICAgICAgICAgICA9IDQwMzQsICAgIC8qIEphcGFuIChKMzQpICovCisgICAgQ1RSWV9KQVBBTjM1ICAgICAgICAgICAgICA9IDQwMzUsICAgIC8qIEphcGFuIChKMzUpICovCisgICAgQ1RSWV9KQVBBTjM2ICAgICAgICAgICAgICA9IDQwMzYsICAgIC8qIEphcGFuIChKMzYpICovCisKKyAgICBDVFJZX0pBUEFOMzcgICAgICAgICAgICAgID0gNDAzNywgICAgLyogSmFwYW4gKEozNykgKi8KKyAgICBDVFJZX0pBUEFOMzggICAgICAgICAgICAgID0gNDAzOCwgICAgLyogSmFwYW4gKEozOCkgKi8KKyAgICBDVFJZX0pBUEFOMzkgICAgICAgICAgICAgID0gNDAzOSwgICAgLyogSmFwYW4gKEozOSkgKi8KKworICAgIENUUllfSkFQQU40MCAgICAgICAgICAgICAgPSA0MDQwLCAgICAvKiBKYXBhbiAoSjQwKSAqLworICAgIENUUllfSkFQQU40MSAgICAgICAgICAgICAgPSA0MDQxLCAgICAvKiBKYXBhbiAoSjQxKSAqLworICAgIENUUllfSkFQQU40MiAgICAgICAgICAgICAgPSA0MDQyLCAgICAvKiBKYXBhbiAoSjQyKSAqLworICAgIENUUllfSkFQQU40MyAgICAgICAgICAgICAgPSA0MDQzLCAgICAvKiBKYXBhbiAoSjQzKSAqLworICAgIENUUllfSkFQQU40NCAgICAgICAgICAgICAgPSA0MDQ0LCAgICAvKiBKYXBhbiAoSjQ0KSAqLworICAgIENUUllfSkFQQU40NSAgICAgICAgICAgICAgPSA0MDQ1LCAgICAvKiBKYXBhbiAoSjQ1KSAqLworICAgIENUUllfSkFQQU40NiAgICAgICAgICAgICAgPSA0MDQ2LCAgICAvKiBKYXBhbiAoSjQ2KSAqLworICAgIENUUllfSkFQQU40NyAgICAgICAgICAgICAgPSA0MDQ3LCAgICAvKiBKYXBhbiAoSjQ3KSAqLworICAgIENUUllfSkFQQU40OCAgICAgICAgICAgICAgPSA0MDQ4LCAgICAvKiBKYXBhbiAoSjQ4KSAqLworICAgIENUUllfSkFQQU40OSAgICAgICAgICAgICAgPSA0MDQ5LCAgICAvKiBKYXBhbiAoSjQ5KSAqLworCisgICAgQ1RSWV9KQVBBTjUwICAgICAgICAgICAgICA9IDQwNTAsICAgIC8qIEphcGFuIChKNTApICovCisgICAgQ1RSWV9KQVBBTjUxICAgICAgICAgICAgICA9IDQwNTEsICAgIC8qIEphcGFuIChKNTEpICovCisgICAgQ1RSWV9KQVBBTjUyICAgICAgICAgICAgICA9IDQwNTIsICAgIC8qIEphcGFuIChKNTIpICovCisgICAgQ1RSWV9KQVBBTjUzICAgICAgICAgICAgICA9IDQwNTMsICAgIC8qIEphcGFuIChKNTMpICovCisgICAgQ1RSWV9KQVBBTjU0ICAgICAgICAgICAgICA9IDQwNTQsICAgIC8qIEphcGFuIChKNTQpICovCisKKyAgICBDVFJZX0pPUkRBTiAgICAgICAgICAgICAgID0gNDAwLCAgICAgLyogSm9yZGFuICovCisgICAgQ1RSWV9LQVpBS0hTVEFOICAgICAgICAgICA9IDM5OCwgICAgIC8qIEthemFraHN0YW4gKi8KKyAgICBDVFJZX0tFTllBICAgICAgICAgICAgICAgID0gNDA0LCAgICAgLyogS2VueWEgKi8KKyAgICBDVFJZX0tPUkVBX05PUlRIICAgICAgICAgID0gNDA4LCAgICAgLyogTm9ydGggS29yZWEgKi8KKyAgICBDVFJZX0tPUkVBX1JPQyAgICAgICAgICAgID0gNDEwLCAgICAgLyogU291dGggS29yZWEgKi8KKyAgICBDVFJZX0tPUkVBX1JPQzIgICAgICAgICAgID0gNDExLCAgICAgLyogU291dGggS29yZWEgKi8KKyAgICBDVFJZX0tPUkVBX1JPQzMgICAgICAgICAgID0gNDEyLCAgICAgLyogU291dGggS29yZWEgKi8KKyAgICBDVFJZX0tVV0FJVCAgICAgICAgICAgICAgID0gNDE0LCAgICAgLyogS3V3YWl0ICovCisgICAgQ1RSWV9MQVRWSUEgICAgICAgICAgICAgICA9IDQyOCwgICAgIC8qIExhdHZpYSAqLworICAgIENUUllfTEVCQU5PTiAgICAgICAgICAgICAgPSA0MjIsICAgICAvKiBMZWJhbm9uICovCisgICAgQ1RSWV9MSUJZQSAgICAgICAgICAgICAgICA9IDQzNCwgICAgIC8qIExpYnlhICovCisgICAgQ1RSWV9MSUVDSFRFTlNURUlOICAgICAgICA9IDQzOCwgICAgIC8qIExpZWNodGVuc3RlaW4gKi8KKyAgICBDVFJZX0xJVEhVQU5JQSAgICAgICAgICAgID0gNDQwLCAgICAgLyogTGl0aHVhbmlhICovCisgICAgQ1RSWV9MVVhFTUJPVVJHICAgICAgICAgICA9IDQ0MiwgICAgIC8qIEx1eGVtYm91cmcgKi8KKyAgICBDVFJZX01BQ0FVICAgICAgICAgICAgICAgID0gNDQ2LCAgICAgLyogTWFjYXUgKi8KKyAgICBDVFJZX01BQ0VET05JQSAgICAgICAgICAgID0gODA3LCAgICAgLyogdGhlIEZvcm1lciBZdWdvc2xhdiBSZXB1YmxpYyBvZiBNYWNlZG9uaWEgKi8KKyAgICBDVFJZX01BTEFZU0lBICAgICAgICAgICAgID0gNDU4LCAgICAgLyogTWFsYXlzaWEgKi8KKyAgICBDVFJZX01BTFRBCSAgICAgICAgICAgICAgPSA0NzAsICAgICAvKiBNYWx0YSAqLworICAgIENUUllfTUVYSUNPICAgICAgICAgICAgICAgPSA0ODQsICAgICAvKiBNZXhpY28gKi8KKyAgICBDVFJZX01PTkFDTyAgICAgICAgICAgICAgID0gNDkyLCAgICAgLyogUHJpbmNpcGFsaXR5IG9mIE1vbmFjbyAqLworICAgIENUUllfTU9ST0NDTyAgICAgICAgICAgICAgPSA1MDQsICAgICAvKiBNb3JvY2NvICovCisgICAgQ1RSWV9ORVRIRVJMQU5EUyAgICAgICAgICA9IDUyOCwgICAgIC8qIE5ldGhlcmxhbmRzICovCisgICAgQ1RSWV9ORVRIRVJMQU5EU19BTlQgICAgICA9IDUzMCwgICAgIC8qIE5ldGhlcmxhbmRzLUFudGVsbGlzICovCisgICAgQ1RSWV9ORVdfWkVBTEFORCAgICAgICAgICA9IDU1NCwgICAgIC8qIE5ldyBaZWFsYW5kICovCisgICAgQ1RSWV9OSUNBUkFHVUEgICAgICAgICAgICA9IDU1OCwgICAgIC8qIE5pY2FyYWd1YSAqLworICAgIENUUllfTk9SV0FZICAgICAgICAgICAgICAgPSA1NzgsICAgICAvKiBOb3J3YXkgKi8KKyAgICBDVFJZX09NQU4gICAgICAgICAgICAgICAgID0gNTEyLCAgICAgLyogT21hbiAqLworICAgIENUUllfUEFLSVNUQU4gICAgICAgICAgICAgPSA1ODYsICAgICAvKiBJc2xhbWljIFJlcHVibGljIG9mIFBha2lzdGFuICovCisgICAgQ1RSWV9QQU5BTUEgICAgICAgICAgICAgICA9IDU5MSwgICAgIC8qIFBhbmFtYSAqLworICAgIENUUllfUEFSQUdVQVkgICAgICAgICAgICAgPSA2MDAsICAgICAvKiBQYXJhZ3VheSAqLworICAgIENUUllfUEVSVSAgICAgICAgICAgICAgICAgPSA2MDQsICAgICAvKiBQZXJ1ICovCisgICAgQ1RSWV9QSElMSVBQSU5FUyAgICAgICAgICA9IDYwOCwgICAgIC8qIFJlcHVibGljIG9mIHRoZSBQaGlsaXBwaW5lcyAqLworICAgIENUUllfUE9MQU5EICAgICAgICAgICAgICAgPSA2MTYsICAgICAvKiBQb2xhbmQgKi8KKyAgICBDVFJZX1BPUlRVR0FMICAgICAgICAgICAgID0gNjIwLCAgICAgLyogUG9ydHVnYWwgKi8KKyAgICBDVFJZX1BVRVJUT19SSUNPICAgICAgICAgID0gNjMwLCAgICAgLyogUHVlcnRvIFJpY28gKi8KKyAgICBDVFJZX1FBVEFSICAgICAgICAgICAgICAgID0gNjM0LCAgICAgLyogUWF0YXIgKi8KKyAgICBDVFJZX1JPTUFOSUEgICAgICAgICAgICAgID0gNjQyLCAgICAgLyogUm9tYW5pYSAqLworICAgIENUUllfUlVTU0lBICAgICAgICAgICAgICAgPSA2NDMsICAgICAvKiBSdXNzaWEgKi8KKyAgICBDVFJZX1NBVURJX0FSQUJJQSAgICAgICAgID0gNjgyLCAgICAgLyogU2F1ZGkgQXJhYmlhICovCisgICAgQ1RSWV9TRVJCSUFfTU9OVCAgICAgICAgICA9IDg5MSwgICAgIC8qIFNlcmJpYSBhbmQgTW9udGVuZWdybyAqLworICAgIENUUllfU0lOR0FQT1JFICAgICAgICAgICAgPSA3MDIsICAgICAvKiBTaW5nYXBvcmUgKi8KKyAgICBDVFJZX1NMT1ZBS0lBICAgICAgICAgICAgID0gNzAzLCAgICAgLyogU2xvdmFrIFJlcHVibGljICovCisgICAgQ1RSWV9TTE9WRU5JQSAgICAgICAgICAgICA9IDcwNSwgICAgIC8qIFNsb3ZlbmlhICovCisgICAgQ1RSWV9TT1VUSF9BRlJJQ0EgICAgICAgICA9IDcxMCwgICAgIC8qIFNvdXRoIEFmcmljYSAqLworICAgIENUUllfU1BBSU4gICAgICAgICAgICAgICAgPSA3MjQsICAgICAvKiBTcGFpbiAqLworICAgIENUUllfU1JJTEFOS0EgICAgICAgICAgICAgPSAxNDQsICAgICAvKiBTcmlsYW5rYSAqLworICAgIENUUllfU1dFREVOICAgICAgICAgICAgICAgPSA3NTIsICAgICAvKiBTd2VkZW4gKi8KKyAgICBDVFJZX1NXSVRaRVJMQU5EICAgICAgICAgID0gNzU2LCAgICAgLyogU3dpdHplcmxhbmQgKi8KKyAgICBDVFJZX1NZUklBICAgICAgICAgICAgICAgID0gNzYwLCAgICAgLyogU3lyaWEgKi8KKyAgICBDVFJZX1RBSVdBTiAgICAgICAgICAgICAgID0gMTU4LCAgICAgLyogVGFpd2FuICovCisgICAgQ1RSWV9USEFJTEFORCAgICAgICAgICAgICA9IDc2NCwgICAgIC8qIFRoYWlsYW5kICovCisgICAgQ1RSWV9UUklOSURBRF9ZX1RPQkFHTyAgICA9IDc4MCwgICAgIC8qIFRyaW5pZGFkIHkgVG9iYWdvICovCisgICAgQ1RSWV9UVU5JU0lBICAgICAgICAgICAgICA9IDc4OCwgICAgIC8qIFR1bmlzaWEgKi8KKyAgICBDVFJZX1RVUktFWSAgICAgICAgICAgICAgID0gNzkyLCAgICAgLyogVHVya2V5ICovCisgICAgQ1RSWV9VQUUgICAgICAgICAgICAgICAgICA9IDc4NCwgICAgIC8qIFUuQS5FLiAqLworICAgIENUUllfVUtSQUlORSAgICAgICAgICAgICAgPSA4MDQsICAgICAvKiBVa3JhaW5lICovCisgICAgQ1RSWV9VTklURURfS0lOR0RPTSAgICAgICA9IDgyNiwgICAgIC8qIFVuaXRlZCBLaW5nZG9tICovCisgICAgQ1RSWV9VTklURURfU1RBVEVTICAgICAgICA9IDg0MCwgICAgIC8qIFVuaXRlZCBTdGF0ZXMgKi8KKyAgICBDVFJZX1VOSVRFRF9TVEFURVNfRkNDNDkgID0gODQyLCAgICAgLyogVW5pdGVkIFN0YXRlcyAoUHVibGljIFNhZmV0eSkqLworICAgIENUUllfVVJVR1VBWSAgICAgICAgICAgICAgPSA4NTgsICAgICAvKiBVcnVndWF5ICovCisgICAgQ1RSWV9VWkJFS0lTVEFOICAgICAgICAgICA9IDg2MCwgICAgIC8qIFV6YmVraXN0YW4gKi8KKyAgICBDVFJZX1ZFTkVaVUVMQSAgICAgICAgICAgID0gODYyLCAgICAgLyogVmVuZXp1ZWxhICovCisgICAgQ1RSWV9WSUVUX05BTSAgICAgICAgICAgICA9IDcwNCwgICAgIC8qIFZpZXQgTmFtICovCisgICAgQ1RSWV9ZRU1FTiAgICAgICAgICAgICAgICA9IDg4NywgICAgIC8qIFllbWVuICovCisgICAgQ1RSWV9aSU1CQUJXRSAgICAgICAgICAgICA9IDcxNiAgICAgIC8qIFppbWJhYndlICovCit9OworCisvKiBFbnVtZXJhdGVkIFJlZ3VsYXRvcnkgRG9tYWluIEluZm9ybWF0aW9uIDggYml0IHZhbHVlcyBpbmRpY2F0ZSB0aGF0CisgKiB0aGUgcmVnZG9tYWluIGlzIHJlYWxseSBhIHBhaXIgb2YgdW5pdGFyeSByZWdkb21haW5zLiAgMTIgYml0IHZhbHVlcworICogYXJlIHRoZSByZWFsIHVuaXRhcnkgcmVnZG9tYWlucyBhbmQgYXJlIHRoZSBvbmx5IG9uZXMgd2hpY2ggaGF2ZSB0aGUKKyAqIGZyZXF1ZW5jeSBiaXRtYXNrcyBhbmQgZmxhZ3Mgc2V0LgorICovCitlbnVtIEVudW1SZCB7CisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIHJlZ3VsYXRvcnkgZG9tYWluIGRlZmluaXRpb25zIGFyZQorCSAqIGZvdW5kIGluIHRoZSBFRVBST00uIEVhY2ggcmVndWxhdG9yeSBkb21haW4KKwkgKiBjYW4gb3BlcmF0ZSBpbiBlaXRoZXIgYSA1R0h6IG9yIDIuNEdIeiB3aXJlbGVzcyBtb2RlIG9yCisJICogYm90aCA1R0h6IGFuZCAyLjRHSHogd2lyZWxlc3MgbW9kZXMuCisJICogSW4gZ2VuZXJhbCwgdGhlIHZhbHVlIGhvbGRzIG5vIHNwZWNpYWwKKwkgKiBtZWFuaW5nIGFuZCBpcyB1c2VkIHRvIGRlY29kZSBpbnRvIGVpdGhlciBzcGVjaWZpYworCSAqIDIuNEdIeiBvciA1R0h6IHdpcmVsZXNzIG1vZGUgZm9yIHRoYXQgcGFydGljdWxhcgorCSAqIHJlZ3VsYXRvcnkgZG9tYWluLgorCSAqLworCU5PX0VOVU1SRAk9IDB4MDAsCisJTlVMTDFfV09STEQJPSAweDAzLAkJLyogRm9yIDExYi1vbmx5IGNvdW50cmllcyAobm8gMTFhIGFsbG93ZWQpICovCisJTlVMTDFfRVRTSUIJPSAweDA3LAkJLyogSXNyYWVsICovCisJTlVMTDFfRVRTSUMJPSAweDA4LAorCUZDQzFfRkNDQQk9IDB4MTAsCQkvKiBVU0EgKi8KKwlGQ0MxX1dPUkxECT0gMHgxMSwJCS8qIEhvbmcgS29uZyAqLworCUZDQzRfRkNDQQk9IDB4MTIsCQkvKiBVU0EgLSBQdWJsaWMgU2FmZXR5ICovCisJRkNDNV9GQ0NBCT0gMHgxMywJCS8qIFVTQSAtIHdpdGggbm8gREZTIChVTklJLTEgKyBVTklJLTMgb25seSkgKi8KKyAgRkNDNl9GQ0NBICAgICAgID0gMHgxNCwgICAgICAgICAvKiBDYW5hZGEgKi8KKworCUZDQzJfRkNDQQk9IDB4MjAsCQkvKiBDYW5hZGEgKi8KKwlGQ0MyX1dPUkxECT0gMHgyMSwJCS8qIEF1c3RyYWxpYSAmIEhLICovCisJRkNDMl9FVFNJQwk9IDB4MjIsCisgIEZDQzZfV09STEQgICAgICA9IDB4MjMsICAgICAgICAgLyogQXVzdHJhbGlhICovCisKKwlGUkFOQ0VfUkVTCT0gMHgzMSwJCS8qIExlZ2FjeSBGcmFuY2UgZm9yIE9FTSAqLworCUZDQzNfRkNDQQk9IDB4M0EsCQkvKiBVU0EgJiBDYW5hZGEgdy81NDcwIGJhbmQsIDExaCwgREZTIGVuYWJsZWQgKi8KKwlGQ0MzX1dPUkxECT0gMHgzQiwJCS8qIFVTQSAmIENhbmFkYSB3LzU0NzAgYmFuZCwgMTFoLCBERlMgZW5hYmxlZCAqLworCisJRVRTSTFfV09STEQJPSAweDM3LAorCUVUU0kzX0VUU0lBCT0gMHgzMiwJCS8qIEZyYW5jZSAob3B0aW9uYWwpICovCisJRVRTSTJfV09STEQJPSAweDM1LAkJLyogSHVuZ2FyeSAmIG90aGVycyAqLworCUVUU0kzX1dPUkxECT0gMHgzNiwJCS8qIEZyYW5jZSAmIG90aGVycyAqLworCUVUU0k0X1dPUkxECT0gMHgzMCwKKwlFVFNJNF9FVFNJQwk9IDB4MzgsCisJRVRTSTVfV09STEQJPSAweDM5LAorCUVUU0k2X1dPUkxECT0gMHgzNCwJCS8qIEJ1bGdhcmlhICovCisJRVRTSV9SRVNFUlZFRAk9IDB4MzMsCQkvKiBSZXNlcnZlZCAoRG8gbm90IHVzZWQpICovCisKKwlNS0sxX01LS0EJPSAweDQwLAkJLyogSmFwYW4gKEpQMSkgKi8KKwlNS0sxX01LS0IJPSAweDQxLAkJLyogSmFwYW4gKEpQMCkgKi8KKwlBUEw0X1dPUkxECT0gMHg0MiwJCS8qIFNpbmdhcG9yZSAqLworCU1LSzJfTUtLQQk9IDB4NDMsCQkvKiBKYXBhbiB3aXRoIDQuOUcgY2hhbm5lbHMgKi8KKwlBUExfUkVTRVJWRUQJPSAweDQ0LAkJLyogUmVzZXJ2ZWQgKERvIG5vdCB1c2VkKSAgKi8KKwlBUEwyX1dPUkxECT0gMHg0NSwJCS8qIEtvcmVhICovCisJQVBMMl9BUExDCT0gMHg0NiwKKwlBUEwzX1dPUkxECT0gMHg0NywKKwlNS0sxX0ZDQ0EJPSAweDQ4LAkJLyogSmFwYW4gKEpQMS0xKSAqLworCUFQTDJfQVBMRAk9IDB4NDksCQkvKiBLb3JlYSB3aXRoIDIuM0cgY2hhbm5lbHMgKi8KKwlNS0sxX01LS0ExCT0gMHg0QSwJCS8qIEphcGFuIChKRTEpICovCisJTUtLMV9NS0tBMgk9IDB4NEIsCQkvKiBKYXBhbiAoSkUyKSAqLworCU1LSzFfTUtLQwk9IDB4NEMsCQkvKiBKYXBhbiAoTUtLMV9NS0tBLGV4Y2VwdCBDaDE0KSAqLworCisJQVBMM19GQ0NBICAgPSAweDUwLAorCUFQTDFfV09STEQJPSAweDUyLAkJLyogTGF0aW4gQW1lcmljYSAqLworCUFQTDFfRkNDQQk9IDB4NTMsCisJQVBMMV9BUExBCT0gMHg1NCwKKwlBUEwxX0VUU0lDCT0gMHg1NSwKKwlBUEwyX0VUU0lDCT0gMHg1NiwJCS8qIFZlbmV6dWVsYSAqLworCUFQTDJfRkNDQSAgID0gMHg1NywgCS8qIG5ldyBMYXRpbiBBbWVyaWNhICovCisJQVBMNV9XT1JMRAk9IDB4NTgsCQkvKiBDaGlsZSAqLworCUFQTDZfV09STEQJPSAweDVCLAkJLyogU2luZ2Fwb3JlICovCisJQVBMN19GQ0NBICAgPSAweDVDLCAgICAgLyogVGFpd2FuIDUuNDcgQmFuZCAqLworCUFQTDhfV09STEQgID0gMHg1RCwgICAgIC8qIE1hbGF5c2lhIDVHSHogKi8KKwlBUEw5X1dPUkxEICA9IDB4NUUsICAgICAvKiBLb3JlYSA1R0h6ICovCisKKwkvKgorCSAqIFdvcmxkIG1vZGUgU0tVcworCSAqLworCVdPUjBfV09STEQJPSAweDYwLAkJLyogV29ybGQwIChXTzAgU0tVKSAqLworCVdPUjFfV09STEQJPSAweDYxLAkJLyogV29ybGQxIChXTzEgU0tVKSAqLworCVdPUjJfV09STEQJPSAweDYyLAkJLyogV29ybGQyIChXTzIgU0tVKSAqLworCVdPUjNfV09STEQJPSAweDYzLAkJLyogV29ybGQzIChXTzMgU0tVKSAqLworCVdPUjRfV09STEQJPSAweDY0LAkJLyogV29ybGQ0IChXTzQgU0tVKSAqLworCVdPUjVfRVRTSUMJPSAweDY1LAkJLyogV29ybGQ1IChXTzUgU0tVKSAqLworCisJV09SMDFfV09STEQJPSAweDY2LAkJLyogV29ybGQwLTEgKFdXMC0xIFNLVSkgKi8KKwlXT1IwMl9XT1JMRAk9IDB4NjcsCQkvKiBXb3JsZDAtMiAoV1cwLTIgU0tVKSAqLworCUVVMV9XT1JMRAk9IDB4NjgsCQkvKiBTYW1lIGFzIFdvcmxkMC0yIChXVzAtMiBTS1UpLCBleGNlcHQgYWN0aXZlIHNjYW4gY2gxLTEzLiBObyBjaDE0ICovCisKKwlXT1I5X1dPUkxECT0gMHg2OSwJCS8qIFdvcmxkOSAoV085IFNLVSkgKi8KKwlXT1JBX1dPUkxECT0gMHg2QSwJCS8qIFdvcmxkQSAoV09BIFNLVSkgKi8KKworCU1LSzNfTUtLQgk9IDB4ODAsCQkvKiBKYXBhbiBVTkktMSBldmVuICsgTUtLQiAqLworCU1LSzNfTUtLQTIJPSAweDgxLAkJLyogSmFwYW4gVU5JLTEgZXZlbiArIE1LS0EyICovCisJTUtLM19NS0tDCT0gMHg4MiwJCS8qIEphcGFuIFVOSS0xIGV2ZW4gKyBNS0tDICovCisKKwlNS0s0X01LS0IJPSAweDgzLAkJLyogSmFwYW4gVU5JLTEgZXZlbiArIFVOSS0yICsgTUtLQiAqLworCU1LSzRfTUtLQTIJPSAweDg0LAkJLyogSmFwYW4gVU5JLTEgZXZlbiArIFVOSS0yICsgTUtLQTIgKi8KKwlNS0s0X01LS0MJPSAweDg1LAkJLyogSmFwYW4gVU5JLTEgZXZlbiArIFVOSS0yICsgTUtLQyAqLworCisJTUtLNV9NS0tCCT0gMHg4NiwJCS8qIEphcGFuIFVOSS0xIGV2ZW4gKyBVTkktMiArIG1pZC1iYW5kICsgTUtLQiAqLworCU1LSzVfTUtLQTIJPSAweDg3LAkJLyogSmFwYW4gVU5JLTEgZXZlbiArIFVOSS0yICsgbWlkLWJhbmQgKyBNS0tBMiAqLworCU1LSzVfTUtLQwk9IDB4ODgsCQkvKiBKYXBhbiBVTkktMSBldmVuICsgVU5JLTIgKyBtaWQtYmFuZCArIE1LS0MgKi8KKworCU1LSzZfTUtLQgk9IDB4ODksCQkvKiBKYXBhbiBVTkktMSBldmVuICsgVU5JLTEgb2RkIE1LS0IgKi8KKwlNS0s2X01LS0EyCT0gMHg4QSwJCS8qIEphcGFuIFVOSS0xIGV2ZW4gKyBVTkktMSBvZGQgKyBNS0tBMiAqLworCU1LSzZfTUtLQwk9IDB4OEIsCQkvKiBKYXBhbiBVTkktMSBldmVuICsgVU5JLTEgb2RkICsgTUtLQyAqLworCisJTUtLN19NS0tCCT0gMHg4QywJCS8qIEphcGFuIFVOSS0xIGV2ZW4gKyBVTkktMSBvZGQgKyBVTkktMiArIE1LS0IgKi8KKwlNS0s3X01LS0EJPSAweDhELAkJLyogSmFwYW4gVU5JLTEgZXZlbiArIFVOSS0xIG9kZCArIFVOSS0yICsgTUtLQTIgKi8KKwlNS0s3X01LS0MJPSAweDhFLAkJLyogSmFwYW4gVU5JLTEgZXZlbiArIFVOSS0xIG9kZCArIFVOSS0yICsgTUtLQyAqLworCisJTUtLOF9NS0tCCT0gMHg4RiwJCS8qIEphcGFuIFVOSS0xIGV2ZW4gKyBVTkktMSBvZGQgKyBVTkktMiArIG1pZC1iYW5kICsgTUtLQiAqLworCU1LSzhfTUtLQTIJPSAweDkwLAkJLyogSmFwYW4gVU5JLTEgZXZlbiArIFVOSS0xIG9kZCArIFVOSS0yICsgbWlkLWJhbmQgKyBNS0tBMiAqLworCU1LSzhfTUtLQwk9IDB4OTEsCQkvKiBKYXBhbiBVTkktMSBldmVuICsgVU5JLTEgb2RkICsgVU5JLTIgKyBtaWQtYmFuZCArIE1LS0MgKi8KKworCU1LSzZfTUtLQTEgICAgICA9IDB4RjgsICAgICAgICAgLyogSmFwYW4gVU5JLTEgZXZlbiArIFVOSS0xIG9kZCArIE1LS0ExICovCisJTUtLNl9GQ0NBICAgICAgID0gMHhGOSwgICAgICAgICAvKiBKYXBhbiBVTkktMSBldmVuICsgVU5JLTEgb2RkICsgRkNDQSAqLworCU1LSzdfTUtLQTEgICAgICA9IDB4RkEsICAgICAgICAgLyogSmFwYW4gVU5JLTEgZXZlbiArIFVOSS0xIG9kZCArIFVOSS0yICsgTUtLQTEgKi8KKwlNS0s3X0ZDQ0EgICAgICAgPSAweEZCLCAgICAgICAgIC8qIEphcGFuIFVOSS0xIGV2ZW4gKyBVTkktMSBvZGQgKyBVTkktMiArIEZDQ0EgKi8KKwlNS0s5X0ZDQ0EgICAgICAgPSAweEZDLCAgICAgICAgIC8qIEphcGFuIFVOSS0xIGV2ZW4gKyA0LjlHSHogKyBGQ0NBICovCisJTUtLOV9NS0tBMSAgICAgID0gMHhGRCwgICAgICAgICAvKiBKYXBhbiBVTkktMSBldmVuICsgNC45R0h6ICsgTUtLQTEgKi8KKwlNS0s5X01LS0MgICAgICAgPSAweEZFLCAgICAgICAgIC8qIEphcGFuIFVOSS0xIGV2ZW4gKyA0LjlHSHogKyBNS0tDICovCisJTUtLOV9NS0tBMiAgICAgID0gMHhGRiwgICAgICAgICAvKiBKYXBhbiBVTkktMSBldmVuICsgNC45R0h6ICsgTUtLQTIgKi8KKworCU1LSzEwX0ZDQ0EgICAgICA9IDB4RDAsICAgICAgICAgLyogSmFwYW4gVU5JLTEgZXZlbiArIFVOSS0yICsgNC45R0h6ICsgRkNDQSAqLworCU1LSzEwX01LS0ExICAgICA9IDB4RDEsICAgICAgICAgLyogSmFwYW4gVU5JLTEgZXZlbiArIFVOSS0yICsgNC45R0h6ICsgTUtLQTEgKi8KKwlNS0sxMF9NS0tDICAgICAgPSAweEQyLCAgICAgICAgIC8qIEphcGFuIFVOSS0xIGV2ZW4gKyBVTkktMiArIDQuOUdIeiArIE1LS0MgKi8KKwlNS0sxMF9NS0tBMiAgICAgPSAweEQzLCAgICAgICAgIC8qIEphcGFuIFVOSS0xIGV2ZW4gKyBVTkktMiArIDQuOUdIeiArIE1LS0EyICovCisKKwlNS0sxMV9NS0tBICAgICAgPSAweEQ0LCAgICAgICAgIC8qIEphcGFuIFVOSS0xIGV2ZW4gKyBVTkktMiArIE1pZGJhbmQgKyA0LjlHSHogKyBNS0tBICovCisJTUtLMTFfRkNDQSAgICAgID0gMHhENSwgICAgICAgICAvKiBKYXBhbiBVTkktMSBldmVuICsgVU5JLTIgKyBNaWRiYW5kICsgNC45R0h6ICsgRkNDQSAqLworCU1LSzExX01LS0ExICAgICA9IDB4RDYsICAgICAgICAgLyogSmFwYW4gVU5JLTEgZXZlbiArIFVOSS0yICsgTWlkYmFuZCArIDQuOUdIeiArIE1LS0ExICovCisJTUtLMTFfTUtLQyAgICAgID0gMHhENywgICAgICAgICAvKiBKYXBhbiBVTkktMSBldmVuICsgVU5JLTIgKyBNaWRiYW5kICsgNC45R0h6ICsgTUtLQyAqLworCU1LSzExX01LS0EyICAgICA9IDB4RDgsICAgICAgICAgLyogSmFwYW4gVU5JLTEgZXZlbiArIFVOSS0yICsgTWlkYmFuZCArIDQuOUdIeiArIE1LS0EyICovCisKKwlNS0sxMl9NS0tBICAgICAgPSAweEQ5LCAgICAgICAgIC8qIEphcGFuIFVOSS0xIGV2ZW4gKyBVTkktMSBvZGQgKyBVTkktMiArIE1pZGJhbmQgKyA0LjlHSHogKyBNS0tBICovCisJTUtLMTJfRkNDQSAgICAgID0gMHhEQSwgICAgICAgICAvKiBKYXBhbiBVTkktMSBldmVuICsgVU5JLTEgb2RkICsgVU5JLTIgKyBNaWRiYW5kICsgNC45R0h6ICsgRkNDQSAqLworCU1LSzEyX01LS0ExICAgICA9IDB4REIsICAgICAgICAgLyogSmFwYW4gVU5JLTEgZXZlbiArIFVOSS0xIG9kZCArIFVOSS0yICsgTWlkYmFuZCArIDQuOUdIeiArIE1LS0ExICovCisJTUtLMTJfTUtLQyAgICAgID0gMHhEQywgICAgICAgICAvKiBKYXBhbiBVTkktMSBldmVuICsgVU5JLTEgb2RkICsgVU5JLTIgKyBNaWRiYW5kICsgNC45R0h6ICsgTUtLQyAqLworCU1LSzEyX01LS0EyICAgICA9IDB4REQsICAgICAgICAgLyogSmFwYW4gVU5JLTEgZXZlbiArIFVOSS0xIG9kZCArIFVOSS0yICsgTWlkYmFuZCArIDQuOUdIeiArIE1LS0EyICovCisKKwkvKiBGb2xsb3dpbmcgZGVmaW5pdGlvbnMgYXJlIHVzZWQgb25seSBieSBzL3cgdG8gbWFwIG9sZAorIAkgKiBKYXBhbiBTS1VzLgorCSAqLworCU1LSzNfTUtLQSAgICAgICA9IDB4RjAsICAgICAgICAgLyogSmFwYW4gVU5JLTEgZXZlbiArIE1LS0EgKi8KKwlNS0szX01LS0ExICAgICAgPSAweEYxLCAgICAgICAgIC8qIEphcGFuIFVOSS0xIGV2ZW4gKyBNS0tBMSAqLworCU1LSzNfRkNDQSAgICAgICA9IDB4RjIsICAgICAgICAgLyogSmFwYW4gVU5JLTEgZXZlbiArIEZDQ0EgKi8KKwlNS0s0X01LS0EgICAgICAgPSAweEYzLCAgICAgICAgIC8qIEphcGFuIFVOSS0xIGV2ZW4gKyBVTkktMiArIE1LS0EgKi8KKwlNS0s0X01LS0ExICAgICAgPSAweEY0LCAgICAgICAgIC8qIEphcGFuIFVOSS0xIGV2ZW4gKyBVTkktMiArIE1LS0ExICovCisJTUtLNF9GQ0NBICAgICAgID0gMHhGNSwgICAgICAgICAvKiBKYXBhbiBVTkktMSBldmVuICsgVU5JLTIgKyBGQ0NBICovCisJTUtLOV9NS0tBICAgICAgID0gMHhGNiwgICAgICAgICAvKiBKYXBhbiBVTkktMSBldmVuICsgNC45R0h6ICsgTUtLQSovCisJTUtLMTBfTUtLQSAgICAgID0gMHhGNywgICAgICAgICAvKiBKYXBhbiBVTkktMSBldmVuICsgVU5JLTIgKyA0LjlHSHogKyBNS0tBICovCisKKwkvKgorCSAqIFJlZ3VsYXRvciBkb21haW5zIGVuZGluZyBpbiBhIG51bWJlciAoZS5nLiBBUEwxLAorCSAqIE1LMSwgRVRTSTQsIGV0YykgYXBwbHkgdG8gNUdIeiBjaGFubmVsIGFuZCBwb3dlcgorCSAqIGluZm9ybWF0aW9uLiAgUmVndWxhdG9yIGRvbWFpbnMgZW5kaW5nIGluIGEgbGV0dGVyCisJICogKGUuZy4gQVBMQSwgRkNDQSwgZXRjKSBhcHBseSB0byAyLjRHSHogY2hhbm5lbCBhbmQKKwkgKiBwb3dlciBpbmZvcm1hdGlvbi4KKwkgKi8KKwlBUEwxCQk9IDB4MDE1MCwJLyogTEFUICYgQXNpYSAqLworCUFQTDIJCT0gMHgwMjUwLAkvKiBMQVQgJiBBc2lhICovCisJQVBMMwkJPSAweDAzNTAsCS8qIFRhaXdhbiAqLworCUFQTDQJCT0gMHgwNDUwLAkvKiBKb3JkYW4gKi8KKwlBUEw1CQk9IDB4MDU1MCwJLyogQ2hpbGUgKi8KKwlBUEw2CQk9IDB4MDY1MCwJLyogU2luZ2Fwb3JlICovCisJQVBMNwkJPSAweDA3NTAsCS8qIFRhaXdhbiBNaWRkbGUgKi8KKwlBUEw4CQk9IDB4MDg1MCwJLyogTWFsYXlzaWEgKi8KKwlBUEw5CQk9IDB4MDk1MCwJLyogS29yZWEgKFNvdXRoKSBST0MgMyAqLworCisJRVRTSTEJCT0gMHgwMTMwLAkvKiBFdXJvcGUgJiBvdGhlcnMgKi8KKwlFVFNJMgkJPSAweDAyMzAsCS8qIEV1cm9wZSAmIG90aGVycyAqLworCUVUU0kzCQk9IDB4MDMzMCwJLyogRXVyb3BlICYgb3RoZXJzICovCisJRVRTSTQJCT0gMHgwNDMwLAkvKiBFdXJvcGUgJiBvdGhlcnMgKi8KKwlFVFNJNQkJPSAweDA1MzAsCS8qIEV1cm9wZSAmIG90aGVycyAqLworCUVUU0k2CQk9IDB4MDYzMCwJLyogRXVyb3BlICYgb3RoZXJzICovCisJRVRTSUEJCT0gMHgwQTMwLAkvKiBGcmFuY2UgKi8KKwlFVFNJQgkJPSAweDBCMzAsCS8qIElzcmFlbCAqLworCUVUU0lDCQk9IDB4MEMzMCwJLyogTGF0aW4gQW1lcmljYSAqLworCisJRkNDMQkJPSAweDAxMTAsCS8qIFVTICYgb3RoZXJzICovCisJRkNDMgkJPSAweDAxMjAsCS8qIENhbmFkYSwgQXVzdHJhbGlhICYgTmV3IFplYWxhbmQgKi8KKwlGQ0MzCQk9IDB4MDE2MCwJLyogVVMgdy9uZXcgbWlkZGxlIGJhbmQgJiBERlMgKi8KKwlGQ0M0CQk9IDB4MDE2NSwJLyogVVMgUHVibGljIFNhZmV0eSAqLworCUZDQzUJCT0gMHgwNTEwLAkvKiBVUyBubyBERlMgKi8KKyAgICBGQ0M2ICAgID0gMHgwNjEwLCAvKiBDYW5hZGEgJiBBdXN0cmFsaWEgKi8KKworCUZDQ0EJCT0gMHgwQTEwLAorCisJQVBMRAkJPSAweDBENTAsCS8qIFNvdXRoIEtvcmVhICovCisKKwlNS0sxCQk9IDB4MDE0MCwJLyogSmFwYW4gKFVOSS0xIG9kZCkqLworCU1LSzIJCT0gMHgwMjQwLAkvKiBKYXBhbiAoNC45IEdIeiArIFVOSS0xIG9kZCkgKi8KKwlNS0szCQk9IDB4MDM0MCwJLyogSmFwYW4gKFVOSS0xIGV2ZW4pICovCisJTUtLNAkJPSAweDA0NDAsCS8qIEphcGFuIChVTkktMSBldmVuICsgVU5JLTIpICovCisJTUtLNQkJPSAweDA1NDAsCS8qIEphcGFuIChVTkktMSBldmVuICsgVU5JLTIgKyBtaWQtYmFuZCkgKi8KKwlNS0s2CQk9IDB4MDY0MCwJLyogSmFwYW4gKFVOSS0xIG9kZCArIFVOSS0xIGV2ZW4pICovCisJTUtLNwkJPSAweDA3NDAsCS8qIEphcGFuIChVTkktMSBvZGQgKyBVTkktMSBldmVuICsgVU5JLTIgKi8KKwlNS0s4CQk9IDB4MDg0MCwJLyogSmFwYW4gKFVOSS0xIG9kZCArIFVOSS0xIGV2ZW4gKyBVTkktMiArIG1pZC1iYW5kKSAqLworCU1LSzkJCT0gMHgwOTQwLCAgIC8qIEphcGFuIChVTkktMSBldmVuICsgNC45IEdIWikgKi8KKwlNS0sxMAkJPSAweDBCNDAsICAgLyogSmFwYW4gKFVOSS0xIGV2ZW4gKyBVTkktMiArIDQuOSBHSFopICovCisJTUtLMTEJCT0gMHgxMTQwLCAgIC8qIEphcGFuIChVTkktMSBldmVuICsgVU5JLTIgKyBtaWQtYmFuZCArIDQuOSBHSFopICovCisJTUtLMTIJCT0gMHgxMjQwLCAgIC8qIEphcGFuIChVTkktMSBldmVuICsgVU5JLTEgb2RkICsgVU5JLTIgKyBtaWQtYmFuZCArIDQuOSBHSFopICovCisJTUtLQQkJPSAweDBBNDAsCS8qIEphcGFuICovCisJTUtLQwkJPSAweDBBNTAsCisKKwlOVUxMMQkJPSAweDAxOTgsCisJV09STEQJCT0gMHgwMTk5LAorCURFQlVHX1JFR19ETU4JPSAweDAxZmYsCit9OworCisvKiBjaGFubmVsRmxhZ3MgKi8KKyNkZWZpbmUJWk1fUkVHX0ZMQUdfQ0hBTk5FTF9DV19JTlQJMHgwMDAyCS8qIENXIGludGVyZmVyZW5jZSBkZXRlY3RlZCBvbiBjaGFubmVsICovCisjZGVmaW5lCVpNX1JFR19GTEFHX0NIQU5ORUxfVFVSQk8JMHgwMDEwCS8qIFR1cmJvIENoYW5uZWwgKi8KKyNkZWZpbmUJWk1fUkVHX0ZMQUdfQ0hBTk5FTF9DQ0sJICAgIDB4MDAyMAkvKiBDQ0sgY2hhbm5lbCAqLworI2RlZmluZQlaTV9SRUdfRkxBR19DSEFOTkVMX09GRE0JMHgwMDQwCS8qIE9GRE0gY2hhbm5lbCAqLworI2RlZmluZQlaTV9SRUdfRkxBR19DSEFOTkVMXzJHSFoJMHgwMDgwCS8qIDIgR0h6IHNwZWN0cnVtIGNoYW5uZWwuICovCisjZGVmaW5lCVpNX1JFR19GTEFHX0NIQU5ORUxfNUdIWgkweDAxMDAJLyogNSBHSHogc3BlY3RydW0gY2hhbm5lbCAqLworI2RlZmluZQlaTV9SRUdfRkxBR19DSEFOTkVMX1BBU1NJVkUJMHgwMjAwCS8qIE9ubHkgcGFzc2l2ZSBzY2FuIGFsbG93ZWQgaW4gdGhlIGNoYW5uZWwgKi8KKyNkZWZpbmUJWk1fUkVHX0ZMQUdfQ0hBTk5FTF9EWU4JICAgIDB4MDQwMAkvKiBkeW5hbWljIENDSy1PRkRNIGNoYW5uZWwgKi8KKyNkZWZpbmUJWk1fUkVHX0ZMQUdfQ0hBTk5FTF9YUgkgICAgMHgwODAwCS8qIFhSIGNoYW5uZWwgKi8KKyNkZWZpbmUJWk1fUkVHX0ZMQUdfQ0hBTk5FTF9DU0EgCTB4MTAwMAkvKiBDaGFubmVsIGJ5IENTQShDaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1lbnQpICovCisjZGVmaW5lCVpNX1JFR19GTEFHX0NIQU5ORUxfU1RVUkJPCTB4MjAwMAkvKiBTdGF0aWMgdHVyYm8sIG5vIDExYS1vbmx5IHVzYWdlICovCisjZGVmaW5lIFpNX1JFR19GTEFHX0NIQU5ORUxfSEFMRiAgICAweDQwMDAgCS8qIEhhbGYgcmF0ZSBjaGFubmVsICovCisjZGVmaW5lIFpNX1JFR19GTEFHX0NIQU5ORUxfUVVBUlRFUiAweDgwMDAgCS8qIFF1YXJ0ZXIgcmF0ZSBjaGFubmVsICovCisKKy8qIGNoYW5uZWxGbGFncyAqLworI2RlZmluZSBDSEFOTkVMX0NXX0lOVCAgMHgwMDAyICAvKiBDVyBpbnRlcmZlcmVuY2UgZGV0ZWN0ZWQgb24gY2hhbm5lbCAqLworI2RlZmluZSBDSEFOTkVMX1RVUkJPICAgMHgwMDEwICAvKiBUdXJibyBDaGFubmVsICovCisjZGVmaW5lIENIQU5ORUxfQ0NLIDB4MDAyMCAgLyogQ0NLIGNoYW5uZWwgKi8KKyNkZWZpbmUgQ0hBTk5FTF9PRkRNICAgIDB4MDA0MCAgLyogT0ZETSBjaGFubmVsICovCisjZGVmaW5lIENIQU5ORUxfMkdIWiAgICAweDAwODAgIC8qIDIgR0h6IHNwZWN0cnVtIGNoYW5uZWwuICovCisjZGVmaW5lIENIQU5ORUxfNUdIWiAgICAweDAxMDAgIC8qIDUgR0h6IHNwZWN0cnVtIGNoYW5uZWwgKi8KKyNkZWZpbmUgQ0hBTk5FTF9QQVNTSVZFIDB4MDIwMCAgLyogT25seSBwYXNzaXZlIHNjYW4gYWxsb3dlZCBpbiB0aGUgY2hhbm5lbCAqLworI2RlZmluZSBDSEFOTkVMX0RZTiAweDA0MDAgIC8qIGR5bmFtaWMgQ0NLLU9GRE0gY2hhbm5lbCAqLworI2RlZmluZSBDSEFOTkVMX1hSICAweDA4MDAgIC8qIFhSIGNoYW5uZWwgKi8KKyNkZWZpbmUgQ0hBTk5FTF9TVFVSQk8gIDB4MjAwMCAgLyogU3RhdGljIHR1cmJvLCBubyAxMWEtb25seSB1c2FnZSAqLworI2RlZmluZSBDSEFOTkVMX0hBTEYgICAgMHg0MDAwICAvKiBIYWxmIHJhdGUgY2hhbm5lbCAqLworI2RlZmluZSBDSEFOTkVMX1FVQVJURVIgMHg4MDAwICAvKiBRdWFydGVyIHJhdGUgY2hhbm5lbCAqLworI2RlZmluZSBDSEFOTkVMX0hUMjAgICAgMHgxMDAwMCAvKiBIVDIwIGNoYW5uZWwgKi8KKyNkZWZpbmUgQ0hBTk5FTF9IVDQwICAgIDB4MjAwMDAgLyogSFQ0MCBjaGFubmVsICovCisjZGVmaW5lIENIQU5ORUxfSFQ0MFUgCTB4NDAwMDAgLyogY29udHJvbCBjaGFubmVsIGNhbiBiZSB1cHBlciBjaGFubmVsICovCisjZGVmaW5lIENIQU5ORUxfSFQ0MEwgCTB4ODAwMDAgLyogY29udHJvbCBjaGFubmVsIGNhbiBiZSBsb3dlciBjaGFubmVsICovCisKKy8qIHByaXZGbGFncyAqLworI2RlZmluZSBaTV9SRUdfRkxBR19DSEFOTkVMX0lOVEVSRkVSRU5DRSAgIAkweDAxIC8qIFNvZnR3YXJlIHVzZTogY2hhbm5lbCBpbnRlcmZlcmVuY2UKKwkJCQkgICAgICAgIHVzZWQgZm9yIGFzIEFSIGFzIHdlbGwgYXMgUkFEQVIKKwkJCQkgICAgICAgIGludGVyZmVyZW5jZSBkZXRlY3Rpb24gKi8KKyNkZWZpbmUgWk1fUkVHX0ZMQUdfQ0hBTk5FTF9ERlMJCTB4MDIgLyogREZTIHJlcXVpcmVkIG9uIGNoYW5uZWwgKi8KKyNkZWZpbmUgWk1fUkVHX0ZMQUdfQ0hBTk5FTF80TVNfTElNSVQJMHgwNCAvKiA0bXNlYyBwYWNrZXQgbGltaXQgb24gdGhpcyBjaGFubmVsICovCisjZGVmaW5lIFpNX1JFR19GTEFHX0NIQU5ORUxfREZTX0NMRUFSICAgICAgIDB4MDggLyogaWYgY2hhbm5lbCBoYXMgYmVlbiBjaGVja2VkIGZvciBERlMgKi8KKworI2RlZmluZSBDSEFOTkVMX0EgICAoQ0hBTk5FTF81R0hafENIQU5ORUxfT0ZETSkKKyNkZWZpbmUgQ0hBTk5FTF9CICAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0NDSykKKyNkZWZpbmUgQ0hBTk5FTF9QVVJFRyAgIChDSEFOTkVMXzJHSFp8Q0hBTk5FTF9PRkRNKQorI2lmZGVmIG5vdGRlZgorI2RlZmluZSBDSEFOTkVMX0cgICAoQ0hBTk5FTF8yR0hafENIQU5ORUxfRFlOKQorI2Vsc2UKKyNkZWZpbmUgQ0hBTk5FTF9HICAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX09GRE0pCisjZW5kaWYKKyNkZWZpbmUgQ0hBTk5FTF9UICAgKENIQU5ORUxfNUdIWnxDSEFOTkVMX09GRE18Q0hBTk5FTF9UVVJCTykKKyNkZWZpbmUgQ0hBTk5FTF9TVCAgKENIQU5ORUxfVHxDSEFOTkVMX1NUVVJCTykKKyNkZWZpbmUgQ0hBTk5FTF8xMDhHICAgIChDSEFOTkVMXzJHSFp8Q0hBTk5FTF9PRkRNfENIQU5ORUxfVFVSQk8pCisjZGVmaW5lIENIQU5ORUxfMTA4QSAgICBDSEFOTkVMX1QKKyNkZWZpbmUgQ0hBTk5FTF9YICAgKENIQU5ORUxfNUdIWnxDSEFOTkVMX09GRE18Q0hBTk5FTF9YUikKKyNkZWZpbmUgQ0hBTk5FTF9HX0hUICAgICAgKENIQU5ORUxfMkdIWiB8IENIQU5ORUxfT0ZETSB8IENIQU5ORUxfSFQyMCkKKyNkZWZpbmUgQ0hBTk5FTF9BX0hUICAgICAgKENIQU5ORUxfNUdIWiB8IENIQU5ORUxfT0ZETSB8IENIQU5ORUxfSFQyMCkKKworI2RlZmluZSBDSEFOTkVMX0dfSFQyMCAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0hUMjApCisjZGVmaW5lIENIQU5ORUxfQV9IVDIwICAoQ0hBTk5FTF81R0hafENIQU5ORUxfSFQyMCkKKyNkZWZpbmUgQ0hBTk5FTF9HX0hUNDAgIChDSEFOTkVMXzJHSFp8Q0hBTk5FTF9IVDIwfENIQU5ORUxfSFQ0MCkKKyNkZWZpbmUgQ0hBTk5FTF9BX0hUNDAgIChDSEFOTkVMXzVHSFp8Q0hBTk5FTF9IVDIwfENIQU5ORUxfSFQ0MCkKKyNkZWZpbmUgQ0hBTk5FTF9BTEwgXAorICAgIChDSEFOTkVMX09GRE18Q0hBTk5FTF9DQ0t8IENIQU5ORUxfMkdIWiB8IENIQU5ORUxfNUdIWiB8IENIQU5ORUxfVFVSQk8gfCBDSEFOTkVMX0hUMjAgfCBDSEFOTkVMX0hUNDApCisjZGVmaW5lIENIQU5ORUxfQUxMX05PVFVSQk8gICAgIChDSEFOTkVMX0FMTCAmfiBDSEFOTkVMX1RVUkJPKQorCitlbnVtIHsKKyAgICBIQUxfTU9ERV8xMUEgICAgPSAweDAwMSwgICAgICAgIC8qIDExYSBjaGFubmVscyAqLworICAgIEhBTF9NT0RFX1RVUkJPICA9IDB4MDAyLCAgICAgICAgLyogMTFhIHR1cmJvLW9ubHkgY2hhbm5lbHMgKi8KKyAgICBIQUxfTU9ERV8xMUIgICAgPSAweDAwNCwgICAgICAgIC8qIDExYiBjaGFubmVscyAqLworICAgIEhBTF9NT0RFX1BVUkVHICA9IDB4MDA4LCAgICAgICAgLyogMTFnIGNoYW5uZWxzIChPRkRNIG9ubHkpICovCisjaWZkZWYgbm90ZGVmCisgICAgSEFMX01PREVfMTFHICAgID0gMHgwMTAsICAgICAgICAvKiAxMWcgY2hhbm5lbHMgKE9GRE0vQ0NLKSAqLworI2Vsc2UKKyAgICBIQUxfTU9ERV8xMUcgICAgPSAweDAwOCwgICAgICAgIC8qIFhYWCBoaXN0b3JpY2FsICovCisjZW5kaWYKKyAgICBIQUxfTU9ERV8xMDhHICAgPSAweDAyMCwgICAgICAgIC8qIDExYStUdXJibyBjaGFubmVscyAqLworICAgIEhBTF9NT0RFXzEwOEEgICA9IDB4MDQwLCAgICAgICAgLyogMTFnK1R1cmJvIGNoYW5uZWxzICovCisgICAgSEFMX01PREVfWFIgICAgID0gMHgxMDAsICAgICAgICAvKiBYUiBjaGFubmVscyAqLworICAgIEhBTF9NT0RFXzExQV9IQUxGX1JBVEUgPSAweDIwMCwgICAgIC8qIDExQSBoYWxmIHJhdGUgY2hhbm5lbHMgKi8KKyAgICBIQUxfTU9ERV8xMUFfUVVBUlRFUl9SQVRFID0gMHg0MDAsICAvKiAxMUEgcXVhcnRlciByYXRlIGNoYW5uZWxzICovCisgICAgSEFMX01PREVfMTFORyAgID0gMHg0MDAwLCAgICAgICAgICAgLyogMTFuZyBjaGFubmVscyAqLworICAgIEhBTF9NT0RFXzExTkEgICA9IDB4ODAwMCwgICAgICAgICAgIC8qIDExbmEgY2hhbm5lbHMgKi8KKyAgICBIQUxfTU9ERV9BTEwgICAgPSAweGZmZmYKK307CisKKyNlbmRpZiAvKiAjaWZuZGVmIF9IUFJFR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBydy5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwcncuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjdkNDk1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwcncuYwpAQCAtMCwwICsxLDE1NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgIi4uLzgwMjExY29yZS9jcHJlY29tcC5oIgorI2luY2x1ZGUgImhwYW5pLmgiCisjaW5jbHVkZSAiaHB1c2IuaCIKKyNpbmNsdWRlICJocHJlZy5oIgorI2luY2x1ZGUgIi4uLzgwMjExY29yZS9yYXRlY3RybC5oIgorCitleHRlcm4gdm9pZCB6ZklkbENtZCh6ZGV2X3QqIGRldiwgdTMyX3QqIGNtZCwgdTE2X3QgY21kTGVuKTsKKworZXh0ZXJuIHZvaWQgemZDb3JlQ3dtQnVzeSh6ZGV2X3QqIGRldiwgdTE2X3QgYnVzeSk7Cit1MTZfdCB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyh6ZGV2X3QqIGRldiwgdTMyX3QgYWRkciwgdTMyX3QgdmFsKTsKK3UxNl90IHpmRmx1c2hEZWxheVdyaXRlKHpkZXZfdCogZGV2KTsKKworLy8jZGVmaW5lIHptX2hwX3ByaXYoeCkgc3RydWN0IHpzSHBQcml2KiBocFByaXY9emdXbGFuRGV2LmhwUHJpdmF0ZTsKKwordm9pZCB6ZkluaXRDbWRRdWV1ZSh6ZGV2X3QqIGRldikKK3sKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kikod2QtPmhwUHJpdmF0ZSk7CisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKyNpZmRlZiBaTV9YUF9VU0JfTVVMVENNRAorICAgIGhwUHJpdi0+Y21kVGFpbCA9IGhwUHJpdi0+Y21kSGVhZCA9IGhwUHJpdi0+Y21kU2VuZCA9IDA7CisjZWxzZQorICAgIGhwUHJpdi0+Y21kVGFpbCA9IGhwUHJpdi0+Y21kSGVhZCA9IDA7CisjZW5kaWYKKyAgICBocFByaXYtPmNtZFBlbmRpbmcgPSAwOworICAgIGhwUHJpdi0+Y21kLmRlbGF5V2NtZENvdW50ID0gMDsKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworfQorCit1MTZfdCB6ZlB1dENtZCh6ZGV2X3QqIGRldiwgdTMyX3QqIGNtZCwgdTE2X3QgY21kTGVuLCB1MTZfdCBzcmMsIHU4X3QqIGJ1ZikKK3sKKyAgICB1MTZfdCBpOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisKKyAgICAvKiBNYWtlIHN1cmUgY29tbWFuZCBsZW5ndGggPCBaTV9NQVhfQ01EX1NJWkUgKi8KKyAgICB6bV9hc3NlcnQoY21kTGVuIDw9IFpNX01BWF9DTURfU0laRSk7CisgICAgLyogTWFrZSBzdXJlIGNvbW1hbmQgcXVldWUgbm90IGZ1bGwgKi8KKyAgICAvL3ptX2Fzc2VydCgoKGhwUHJpdi0+Y21kVGFpbCsxKSAmIChaTV9DTURfUVVFVUVfU0laRS0xKSkgIT0gaHBQcml2LT5jbWRIZWFkKTsKKyAgICBpZiAoKChocFByaXYtPmNtZFRhaWwrMSkgJiAoWk1fQ01EX1FVRVVFX1NJWkUtMSkpID09IGhwUHJpdi0+Y21kSGVhZCApIHsKKyAgICAgICAgem1fZGVidWdfbXNnMCgiQ01EIHF1ZXVlIGZ1bGwhISIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBocFByaXYtPmNtZFFbaHBQcml2LT5jbWRUYWlsXS5jbWRMZW4gPSBjbWRMZW47CisgICAgaHBQcml2LT5jbWRRW2hwUHJpdi0+Y21kVGFpbF0uc3JjID0gc3JjOworICAgIGhwUHJpdi0+Y21kUVtocFByaXYtPmNtZFRhaWxdLmJ1ZiA9IGJ1ZjsKKyAgICBmb3IgKGk9MDsgaTwoY21kTGVuPj4yKTsgaSsrKQorICAgIHsKKyAgICAgICAgaHBQcml2LT5jbWRRW2hwUHJpdi0+Y21kVGFpbF0uY21kW2ldID0gY21kW2ldOworICAgIH0KKworICAgIGhwUHJpdi0+Y21kVGFpbCA9IChocFByaXYtPmNtZFRhaWwrMSkgJiAoWk1fQ01EX1FVRVVFX1NJWkUtMSk7CisKKyAgICByZXR1cm4gMDsKK30KKwordTE2X3QgemZHZXRDbWQoemRldl90KiBkZXYsIHUzMl90KiBjbWQsIHUxNl90KiBjbWRMZW4sIHUxNl90KiBzcmMsIHU4X3QqKiBidWYpCit7CisgICAgdTE2X3QgaTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworCisgICAgaWYgKGhwUHJpdi0+Y21kVGFpbCA9PSBocFByaXYtPmNtZEhlYWQpCisgICAgeworICAgICAgICByZXR1cm4gMzsKKyAgICB9CisKKyAgICAqY21kTGVuID0gaHBQcml2LT5jbWRRW2hwUHJpdi0+Y21kSGVhZF0uY21kTGVuOworICAgICpzcmMgPSBocFByaXYtPmNtZFFbaHBQcml2LT5jbWRIZWFkXS5zcmM7CisgICAgKmJ1ZiA9IGhwUHJpdi0+Y21kUVtocFByaXYtPmNtZEhlYWRdLmJ1ZjsKKyAgICBmb3IgKGk9MDsgaTwoKCpjbWRMZW4pPj4yKTsgaSsrKQorICAgIHsKKyAgICAgICAgY21kW2ldID0gaHBQcml2LT5jbWRRW2hwUHJpdi0+Y21kSGVhZF0uY21kW2ldOworICAgIH0KKworICAgIGhwUHJpdi0+Y21kSGVhZCA9IChocFByaXYtPmNtZEhlYWQrMSkgJiAoWk1fQ01EX1FVRVVFX1NJWkUtMSk7CisKKyAgICByZXR1cm4gMDsKK30KKworI2lmZGVmIFpNX1hQX1VTQl9NVUxUQ01ECit2b2lkIHpmU2VuZENtZEV4KHpkZXZfdCogZGV2KQoreworICAgIHUzMl90IG5jbWRbWk1fTUFYX0NNRF9TSVpFLzRdOworICAgIHUxNl90IG5jbWRMZW4gPSAwOworICAgIHUxNl90IGNtZEZsYWcgPSAwOworICAgIHUxNl90IGk7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgaWYgKGhwUHJpdi0+Y21kUGVuZGluZyA9PSAwKQorICAgIHsKKyAgICAgICAgaWYgKGhwUHJpdi0+Y21kVGFpbCAhPSBocFByaXYtPmNtZFNlbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNtZEZsYWcgPSAxOworICAgICAgICAgICAgLyogR2V0IHF1ZXVlaW5nIGNvbW1hbmQgKi8KKyAgICAgICAgICAgIG5jbWRMZW49IGhwUHJpdi0+Y21kUVtocFByaXYtPmNtZFNlbmRdLmNtZExlbjsKKyAgICAgICAgICAgIGZvciAoaT0wOyBpPChuY21kTGVuPj4yKTsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5jbWRbaV0gPSBocFByaXYtPmNtZFFbaHBQcml2LT5jbWRTZW5kXS5jbWRbaV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBocFByaXYtPmNtZFNlbmQgPSAoaHBQcml2LT5jbWRTZW5kKzEpICYgKFpNX0NNRF9RVUVVRV9TSVpFLTEpOworCisgICAgICAgICAgICBocFByaXYtPmNtZFBlbmRpbmcgPSAxOworICAgICAgICB9CisgICAgfQorCisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlmICgoY21kRmxhZyA9PSAxKSkKKyAgICB7CisgICAgICAgIHpmSWRsQ21kKGRldiwgbmNtZCwgbmNtZExlbik7CisgICAgfQorfQorCit2b2lkIHpmaVNlbmRDbWRDb21wKHpkZXZfdCogZGV2KQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgaHBQcml2LT5jbWRQZW5kaW5nID0gMDsKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgemZTZW5kQ21kRXgoZGV2KTsKK30KKyNlbmRpZgorCit1MTZfdCB6Zklzc3VlQ21kKHpkZXZfdCogZGV2LCB1MzJfdCogY21kLCB1MTZfdCBjbWRMZW4sIHUxNl90IHNyYywgdThfdCogYnVmKQoreworICAgIHUxNl90IGNtZEZsYWcgPSAwOworICAgIHUxNl90IHJldDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIHptX21zZzJfbW0oWk1fTFZfMSwgImNtZExlbj0iLCBjbWRMZW4pOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworI2lmZGVmIFpNX1hQX1VTQl9NVUxUQ01ECisgICAgcmV0ID0gemZQdXRDbWQoZGV2LCBjbWQsIGNtZExlbiwgc3JjLCBidWYpOworICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICBpZiAocmV0ICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICB6ZlNlbmRDbWRFeChkZXYpOworI2Vsc2UKKyAgICBpZiAoaHBQcml2LT5jbWRQZW5kaW5nID09IDApCisgICAgeworICAgICAgICBocFByaXYtPmNtZFBlbmRpbmcgPSAxOworICAgICAgICBjbWRGbGFnID0gMTsKKyAgICB9CisgICAgcmV0ID0gemZQdXRDbWQoZGV2LCBjbWQsIGNtZExlbiwgc3JjLCBidWYpOworCisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIGlmIChyZXQgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmIChjbWRGbGFnID09IDEpCisgICAgeworICAgICAgICB6ZklkbENtZChkZXYsIGNtZCwgY21kTGVuKTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCB6ZklkbFJzcCh6ZGV2X3QqIGRldiwgdTMyX3QqIHJzcCwgdTE2X3QgcnNwTGVuKQoreworICAgIHUzMl90IGNtZFtaTV9NQVhfQ01EX1NJWkUvNF07CisgICAgdTE2X3QgY21kTGVuOworICAgIHUxNl90IHNyYzsKKyAgICB1OF90KiBidWY7CisgICAgdTMyX3QgbmNtZFtaTV9NQVhfQ01EX1NJWkUvNF07CisgICAgdTE2X3QgbmNtZExlbiA9IDA7CisgICAgdTE2X3QgcmV0OworICAgIHUxNl90IGNtZEZsYWcgPSAwOworICAgIHUxNl90IGk7CisgICAgczMyX3QgbmY7CisgICAgczMyX3Qgbm9pc2VmbG9vcls0XTsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworCisKKyAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOworCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHJldCA9IHpmR2V0Q21kKGRldiwgY21kLCAmY21kTGVuLCAmc3JjLCAmYnVmKTsKKyAgICAjaWYgMAorICAgIHptX2Fzc2VydChyZXQgPT0gMCk7CisgICAgI2Vsc2UKKyAgICBpZiAocmV0ICE9IDApCisgICAgeworICAgICAgICB6bV9kZWJ1Z19tc2cwKCJFcnJvciBJZGxSc3AgYmVjYXVzZSBub25lIGNtZCEhXG4iKTsKKyAgICAgICAgI2lmbmRlZiBaTV9YUF9VU0JfTVVMVENNRAorICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgICAgICByZXR1cm47CisgICAgICAgICNlbmRpZgorICAgIH0KKyAgICAjZW5kaWYKKyNpZmRlZiBaTV9YUF9VU0JfTVVMVENNRAorICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisjZWxzZQorICAgIGlmIChocFByaXYtPmNtZFRhaWwgIT0gaHBQcml2LT5jbWRIZWFkKQorICAgIHsKKyAgICAgICAgY21kRmxhZyA9IDE7CisgICAgICAgIC8qIEdldCBxdWV1ZWluZyBjb21tYW5kICovCisgICAgICAgIG5jbWRMZW49IGhwUHJpdi0+Y21kUVtocFByaXYtPmNtZEhlYWRdLmNtZExlbjsKKyAgICAgICAgZm9yIChpPTA7IGk8KG5jbWRMZW4+PjIpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG5jbWRbaV0gPSBocFByaXYtPmNtZFFbaHBQcml2LT5jbWRIZWFkXS5jbWRbaV07CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaHBQcml2LT5jbWRQZW5kaW5nID0gMDsKKyAgICB9CisKKyAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgaWYgKGNtZEZsYWcgPT0gMSkKKyAgICB7CisgICAgICAgIHpmSWRsQ21kKGRldiwgbmNtZCwgbmNtZExlbik7CisgICAgfQorI2VuZGlmCisgICAgaWYgKHNyYyA9PSBaTV9PSURfUkVBRCkKKyAgICB7CisgICAgICAgIFpNX1BFUkZPUk1BTkNFX1JFRyhkZXYsIDB4MTE3NzJjLCByc3BbMV0pOworICAgICAgICB6ZndEYmdSZWFkUmVnRG9uZShkZXYsIGNtZFsxXSwgcnNwWzFdKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3JjID09IFpNX09JRF9GTEFTSF9DSEtTVU0pCisgICAgeworICAgICAgICB6ZndEYmdHZXRGbGFzaENoa1N1bURvbmUoZGV2LCByc3ArMSk7CisgICAgfQorICAgIGVsc2UgaWYgKHNyYyA9PSBaTV9PSURfRkxBU0hfUkVBRCkKKyAgICB7CisgICAgICAgIHUzMl90ICBkYXRhbGVuOworICAgICAgICB1MTZfdCBpOworCisgICAgICAgIGRhdGFsZW4gPSAocnNwWzBdICYgMjU1KTsKKworICAgICAgICB6ZndEYmdSZWFkRmxhc2hEb25lKGRldiwgY21kWzFdLCByc3ArMSwgZGF0YWxlbik7CisgICAgfQorICAgIGVsc2UgaWYgKHNyYyA9PSBaTV9PSURfRkxBU0hfUFJPR1JBTSkKKyAgICB7CisgICAgICAgIC8qIE5vbiBkbyAqLworICAgIH0KKyAgICBlbHNlIGlmIChzcmMgPT0gWk1fT0lEX1dSSVRFKQorICAgIHsKKyAgICAgICAgemZ3RGJnV3JpdGVSZWdEb25lKGRldiwgY21kWzFdLCBjbWRbMl0pOworICAgIH0KKyAgICBlbHNlIGlmIChzcmMgPT0gWk1fT0lEX1RBTExZKQorICAgIHsKKwkJemZDb2xsZWN0SFdUYWxseShkZXYsIHJzcCwgMCk7CisgICAgfQorICAgIGVsc2UgaWYgKHNyYyA9PSBaTV9PSURfVEFMTFlfQVBEKQorICAgIHsKKwkJemZDb2xsZWN0SFdUYWxseShkZXYsIHJzcCwgMSk7CisgICAgICAgIHpmd0RiZ1JlYWRUYWxseURvbmUoZGV2KTsKKyNpZmRlZiBaTV9FTkFCTEVfQkFfUkFURUNUUkwKKyAgICAgICAgemZSYXRlQ3RybEFnZ3JTdGEoZGV2KTsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlIGlmIChzcmMgPT0gWk1fT0lEX0RLVFhfU1RBVFVTKQorICAgIHsKKyAgICAgICAgem1fZGVidWdfbXNnMCgic3JjID0gem1fT0lEX0RLVFhfU1RBVFVTIik7CisgICAgICAgIHpmd0RiZ1F1ZXJ5SHdUeEJ1c3lEb25lKGRldiwgcnNwWzFdKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3JjID09IFpNX0NNRF9TRVRfRlJFUVVFTkNZKQorICAgIHsKKworLy8jaWZkZWYgWk1fT1RVU19FTkFCTEVfUkVUUllfRlJFUV9DSEFOR0UKKyNpZiAwCisgICAgem1fZGVidWdfbXNnMSgiUmV0cnkgU2V0IEZyZXF1ZW5jeSA9ICIsIHJzcFsxXSk7CisKKyAgICAjaWYgMQorICAgIC8vIFJlYWQgdGhlIE5vaXNlIEZsb29yIHZhbHVlICEKKyAgICBuZiA9ICgocnNwWzJdPj4xOSkgJiAweDFmZik7CisgICAgaWYgKChuZiAmIDB4MTAwKSAhPSAweDApCisgICAgeworICAgICAgICBub2lzZWZsb29yWzBdID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbm9pc2VmbG9vclswXSA9IG5mOworICAgIH0KKworICAgIHptX2RlYnVnX21zZzEoIk5vaXNlIEZsb29yWzFdID0gIiwgbm9pc2VmbG9vclswXSk7CisKKyAgICBuZiA9ICgocnNwWzNdPj4xOSkgJiAweDFmZik7CisgICAgaWYgKChuZiAmIDB4MTAwKSAhPSAweDApCisgICAgeworICAgICAgICBub2lzZWZsb29yWzFdID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbm9pc2VmbG9vclsxXSA9IG5mOworICAgIH0KKworICAgIHptX2RlYnVnX21zZzEoIk5vaXNlIEZsb29yWzJdID0gIiwgbm9pc2VmbG9vclsxXSk7CisgICAgem1fZGVidWdfbXNnMSgiSXMgU2l0ZSBTdXJ2ZXkgPSAiLCBocFByaXYtPmlzU2l0ZVN1cnZleSk7CisgICAgI2VuZGlmCisKKyAgICAgICAgaWYgKCAocnNwWzFdICYmIGhwUHJpdi0+ZnJlcVJldHJ5Q291bnRlciA9PSAwKSB8fAorICAgICAgICAgICAgICgoKG5vaXNlZmxvb3JbMF0+LTYwKXx8KG5vaXNlZmxvb3JbMV0+LTYwKSkgJiYgaHBQcml2LT5mcmVxUmV0cnlDb3VudGVyPT0wKSB8fAorICAgICAgICAgICAgICgoYWJzKG5vaXNlZmxvb3JbMF0tbm9pc2VmbG9vclsxXSk+PTkpICYmIGhwUHJpdi0+ZnJlcVJldHJ5Q291bnRlcj09MCkgKQorICAgICAgICB7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJSZXRyeSB0byBpc3N1ZSB0aGUgZnJlcXVlbmN5IGNoYW5nZSBjb21tYW5kIik7CisKKyAgICAgICAgICAgIGlmICggaHBQcml2LT5yZWNvcmRGcmVxUmV0cnlDb3VudGVyID09IDEgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHptX2RlYnVnX21zZzAoIkNvbGQgUmVzZXQiKTsKKworICAgICAgICAgICAgICAgIHpmSHBTZXRGcmVxdWVuY3lFeChkZXYsIGhwUHJpdi0+bGF0ZXN0RnJlcXVlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhwUHJpdi0+bGF0ZXN0Qnc0MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocFByaXYtPmxhdGVzdEV4dE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKTsKKworICAgICAgICAgICAgICAgIGlmICggaHBQcml2LT5pc1NpdGVTdXJ2ZXkgIT0gMiApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBocFByaXYtPmZyZXFSZXRyeUNvdW50ZXIrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaHBQcml2LT5yZWNvcmRGcmVxUmV0cnlDb3VudGVyID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB6ZkhwU2V0RnJlcXVlbmN5RXgoZGV2LCBocFByaXYtPmxhdGVzdEZyZXF1ZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocFByaXYtPmxhdGVzdEJ3NDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHBQcml2LT5sYXRlc3RFeHRPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBocFByaXYtPnJlY29yZEZyZXFSZXRyeUNvdW50ZXIrKzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKworLyogcmV0OiBCaXQwOiBBR0MgY2FsaWJyYXRpb24gICAwPT5maW5pc2ggIDE9PnVuZmluaXNoICAgICAgICAgICAgICAgKi8KKy8qICAgICAgQml0MTogTm9pc2UgY2FsaWJyYXRpb24gMD0+ZmluaXNoICAxPT51bmZpbmlzaCAgICAgICAgICAgICAgICovCisvKiAgICAgIEJpdDI6IE5vaXNlIGNhbGlicmF0aW9uIGZpbmlzaCwgYnV0IE5GIHZhbHVlIHVuZXhjZXB0ZWQgPT4gMSAqLworICAgICAgICBpZiAoIChyc3BbMV0gJiAweDEpIHx8IChyc3BbMV0gJiAweDQpICkKKyAgICAgICAgeworICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiU2V0IEZyZXF1ZW5jeSBmYWlsIDogcmV0ID0gIiwgcnNwWzFdKTsKKworICAgICAgICAgICAgLyogMS4gQUdDIENhbGlicmF0aW9uIGZhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIC8qIDIuIE5vaXNlIENhbGlicmF0aW9uIGZpbmlzaCBidXQgZXJyb3IgTm9pc2VGbG9vciB2YWx1ZSAgICovCisgICAgICAgICAgICAvKiAgICAgIGFuZCBub3QgaW4gc2l0ZXN1cnZleSwgdHJ5IG1vcmUgdHdpY2UgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCBocFByaXYtPmlzU2l0ZVN1cnZleSA9PSAyICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIGhwUHJpdi0+cmVjb3JkRnJlcVJldHJ5Q291bnRlciA8IDIgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogY29sZCByZXNldCAqLworICAgICAgICAgICAgICAgICAgICB6ZkhwU2V0RnJlcXVlbmN5RXgoZGV2LCBocFByaXYtPmxhdGVzdEZyZXF1ZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHBQcml2LT5sYXRlc3RCdzQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocFByaXYtPmxhdGVzdEV4dE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMik7CisgICAgICAgICAgICAgICAgICAgIGhwUHJpdi0+cmVjb3JkRnJlcVJldHJ5Q291bnRlcisrOworICAgICAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJSZXRyeSB0byBpc3N1ZSB0aGUgZnJlcXVlbmN5IGNoYW5nZSBjb21tYW5kKGNvbGQgcmVzZXQpIGNvdW50ZXIgPSAiLCBocFByaXYtPnJlY29yZEZyZXFSZXRyeUNvdW50ZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBGYWlsIDogd2Ugd291bGQgbm90IGFjY2VwdCB0aGlzIHJlc3VsdCEgKi8KKyAgICAgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiXG5cblxuXG4gIEZhaWwgdHdpY2UgY29sZCByZXNldCBcblxuXG5cbiIpOworICAgICAgICAgICAgICAgICAgICBocFByaXYtPmNvbGRSZXNldE5lZWRGcmVxID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaHBQcml2LT5yZWNvcmRGcmVxUmV0cnlDb3VudGVyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgemZDb3JlU2V0RnJlcXVlbmN5Q29tcGxldGUoZGV2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogaW4gc2l0ZXN1cnZleSwgY29sZHJlc2V0IGluIG5leHQgY2hhbm5lbCAqLworICAgICAgICAgICAgICAgIGhwUHJpdi0+Y29sZFJlc2V0TmVlZEZyZXEgPSAxOworICAgICAgICAgICAgICAgIGhwUHJpdi0+cmVjb3JkRnJlcVJldHJ5Q291bnRlciA9IDA7CisgICAgICAgICAgICAgICAgemZDb3JlU2V0RnJlcXVlbmN5Q29tcGxldGUoZGV2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChyc3BbMV0gJiAweDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzEoIlNldCBGcmVxdWVuY3kgZmFpbCAyIDogcmV0ID0gIiwgcnNwWzFdKTsKKworICAgICAgICAgICAgLyogTm9pc2UgQ2FsaWJyYXRpb24gdW4tZmluaXNoICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgLyogICAgICBhbmQgbm90IGluIHNpdGVzdXJ2ZXksIHRyeSBtb3JlIG9uY2UgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCBocFByaXYtPmlzU2l0ZVN1cnZleSA9PSAyICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIGhwUHJpdi0+cmVjb3JkRnJlcVJldHJ5Q291bnRlciA8IDEgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogY29sZCByZXNldCAqLworICAgICAgICAgICAgICAgICAgICB6ZkhwU2V0RnJlcXVlbmN5RXgoZGV2LCBocFByaXYtPmxhdGVzdEZyZXF1ZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHBQcml2LT5sYXRlc3RCdzQwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocFByaXYtPmxhdGVzdEV4dE9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMik7CisgICAgICAgICAgICAgICAgICAgIGhwUHJpdi0+cmVjb3JkRnJlcVJldHJ5Q291bnRlcisrOworICAgICAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCIyIFJldHJ5IHRvIGlzc3VlIHRoZSBmcmVxdWVuY3kgY2hhbmdlIGNvbW1hbmQoY29sZCByZXNldCkgY291bnRlciA9ICIsIGhwUHJpdi0+cmVjb3JkRnJlcVJldHJ5Q291bnRlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIEZhaWwgOiB3ZSB3b3VsZCBub3QgYWNjZXB0IHRoaXMgcmVzdWx0ISAqLworICAgICAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJcblxuXG5cbiAgMiBGYWlsIHR3aWNlIGNvbGQgcmVzZXQgXG5cblxuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgaHBQcml2LT5jb2xkUmVzZXROZWVkRnJlcSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGhwUHJpdi0+cmVjb3JkRnJlcVJldHJ5Q291bnRlciA9IDA7CisgICAgICAgICAgICAgICAgICAgIHpmQ29yZVNldEZyZXF1ZW5jeUNvbXBsZXRlKGRldik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIGluIHNpdGVzdXJ2ZXksIHNraXAgdGhpcyBmcmVxdWVuY3kgKi8KKyAgICAgICAgICAgICAgICBocFByaXYtPmNvbGRSZXNldE5lZWRGcmVxID0gMDsKKyAgICAgICAgICAgICAgICBocFByaXYtPnJlY29yZEZyZXFSZXRyeUNvdW50ZXIgPSAwOworICAgICAgICAgICAgICAgIHpmQ29yZVNldEZyZXF1ZW5jeUNvbXBsZXRlKGRldik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy9lbHNlIGlmIChyc3BbMV0gJiAweDQpCisgICAgICAgIC8veworICAgICAgICAvLyAgICB6bV9kZWJ1Z19tc2cxKCJTZXQgRnJlcXVlbmN5IGZhaWwgMyA6IHJldCA9ICIsIHJzcFsxXSk7CisgICAgICAgIC8vICAgIGhwUHJpdi0+Y29sZFJlc2V0TmVlZEZyZXEgPSAwOworICAgICAgICAvLyAgICBocFByaXYtPnJlY29yZEZyZXFSZXRyeUNvdW50ZXIgPSAwOworICAgICAgICAvLyAgICB6ZkNvcmVTZXRGcmVxdWVuY3lDb21wbGV0ZShkZXYpOworICAgICAgICAvL30KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvL2hwUHJpdi0+ZnJlcVJldHJ5Q291bnRlciA9IDA7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cyKCIgcmV0dXJuIGNvbXBsZXRlLCByZXQgPSAiLCByc3BbMV0pOworCisgICAgICAgICAgICAvKiBzZXQgYmJfaGVhdnlfY2xpcF9lbmFibGUgKi8KKyAgICAgICAgICAgIGlmIChocFByaXYtPmVuYWJsZUJCSGVhdnlDbGlwICYmIGhwUHJpdi0+aHdCQkhlYXZ5Q2xpcCAmJgorICAgICAgICAgICAgICAgIGhwUHJpdi0+ZG9CQkhlYXZ5Q2xpcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MzJfdCBzZXRWYWx1ZSA9IDB4MjAwOworCisgICAgICAgICAgICAgICAgc2V0VmFsdWUgfD0gaHBQcml2LT5zZXRWYWx1ZUhlYXZ5Q2xpcDsKKworICAgICAgICAgICAgICAgIC8vem1fZGJnKCgiRG8gaGVhdnkgY2xpcCBzZXRWYWx1ZSA9ICVkXG4iLCBzZXRWYWx1ZSkpOworCisgICAgICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDk5ZTArMHgxYmMwMDAsIHNldFZhbHVlKTsKKyAgICAgICAgICAgICAgICB6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBocFByaXYtPmNvbGRSZXNldE5lZWRGcmVxID0gMDsKKyAgICAgICAgICAgIGhwUHJpdi0+cmVjb3JkRnJlcVJldHJ5Q291bnRlciA9IDA7CisgICAgCSAgICB6ZkNvcmVTZXRGcmVxdWVuY3lDb21wbGV0ZShkZXYpOworICAgIAl9CisKKyAgICAgICAgI2lmIDEKKyAgICAgICAgLy8gUmVhZCB0aGUgTm9pc2UgRmxvb3IgdmFsdWUgIQorICAgICAgICBuZiA9ICgocnNwWzJdPj4xOSkgJiAweDFmZik7CisgICAgICAgIGlmICgobmYgJiAweDEwMCkgIT0gMHgwKQorICAgICAgICB7CisgICAgICAgICAgICBub2lzZWZsb29yWzBdID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG5vaXNlZmxvb3JbMF0gPSBuZjsKKyAgICAgICAgfQorCisgICAgICAgIC8vem1fZGVidWdfbXNnMSgiTm9pc2UgRmxvb3JbMV0gPSAiLCBub2lzZWZsb29yWzBdKTsKKworICAgICAgICBuZiA9ICgocnNwWzNdPj4xOSkgJiAweDFmZik7CisgICAgICAgIGlmICgobmYgJiAweDEwMCkgIT0gMHgwKQorICAgICAgICB7CisgICAgICAgICAgICBub2lzZWZsb29yWzFdID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG5vaXNlZmxvb3JbMV0gPSBuZjsKKyAgICAgICAgfQorCisgICAgICAgIC8vem1fZGVidWdfbXNnMSgiTm9pc2UgRmxvb3JbMl0gPSAiLCBub2lzZWZsb29yWzFdKTsKKworICAgICAgICBuZiA9ICgocnNwWzVdPj4yMykgJiAweDFmZik7CisgICAgICAgIGlmICgobmYgJiAweDEwMCkgIT0gMHgwKQorICAgICAgICB7CisgICAgICAgICAgICBub2lzZWZsb29yWzJdID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG5vaXNlZmxvb3JbMl0gPSBuZjsKKyAgICAgICAgfQorCisgICAgICAgIC8vem1fZGVidWdfbXNnMSgiTm9pc2UgRmxvb3IgZXh0WzFdID0gIiwgbm9pc2VmbG9vclsyXSk7CisKKyAgICAgICAgbmYgPSAoKHJzcFs2XT4+MjMpICYgMHgxZmYpOworICAgICAgICBpZiAoKG5mICYgMHgxMDApICE9IDB4MCkKKyAgICAgICAgeworICAgICAgICAgICAgbm9pc2VmbG9vclszXSA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBub2lzZWZsb29yWzNdID0gbmY7CisgICAgICAgIH0KKworICAgICAgICAvL3ptX2RlYnVnX21zZzEoIk5vaXNlIEZsb29yIGV4dFsyXSA9ICIsIG5vaXNlZmxvb3JbM10pOworCisgICAgICAgIC8vem1fZGVidWdfbXNnMSgiSXMgU2l0ZSBTdXJ2ZXkgPSAiLCBocFByaXYtPmlzU2l0ZVN1cnZleSk7CisgICAgICAgICNlbmRpZgorICAgIH0KKyAgICBlbHNlIGlmIChzcmMgPT0gWk1fQ01EX1NFVF9LRVkpCisgICAgeworICAgICAgICB6ZkNvcmVTZXRLZXlDb21wbGV0ZShkZXYpOworICAgIH0KKyAgICBlbHNlIGlmIChzcmMgPT0gWk1fQ1dNX1JFQUQpCisgICAgeworICAgICAgICB6bV9tc2cyX21tKFpNX0xWXzAsICJDV00gcnNwWzFdPSIsIHJzcFsxXSk7CisgICAgICAgIHptX21zZzJfbW0oWk1fTFZfMCwgIkNXTSByc3BbMl09IiwgcnNwWzJdKTsKKyAgICAgICAgemZDb3JlQ3dtQnVzeShkZXYsIHpmQ3dtSXNFeHRDaGFuQnVzeShyc3BbMV0sIHJzcFsyXSkpOworICAgIH0KKyAgICBlbHNlIGlmIChzcmMgPT0gWk1fTUFDX1JFQUQpCisgICAgeworICAgICAgICAvKiByc3BbMV0gPSBaTV9TRUVQUk9NX01BQ19BRERSRVNTX09GRlNFVDsgICAqLworICAgICAgICAvKiByc3BbMl0gPSBaTV9TRUVQUk9NX01BQ19BRERSRVNTX09GRlNFVCs0OyAqLworICAgICAgICAvKiByc3BbM10gPSBaTV9TRUVQUk9NX1JFR0RPTUFJTl9PRkZTRVQ7ICAgICAqLworICAgICAgICAvKiByc3BbNF0gPSBaTV9TRUVQUk9NX1ZFUklTT05fT0ZGU0VUOyAgICAgICAqLworICAgICAgICAvKiByc3BbNV0gPSBaTV9TRUVQUk9NX0hBUkRXQVJFX1RZUEVfT0ZGU0VUOyAqLworICAgICAgICAvKiByc3BbNl0gPSBaTV9TRUVQUk9NX0hXX0hFQVZZX0NMSVA7ICAgICAgICAqLworCisgICAgICAgIHU4X3QgYWRkcls2XSwgQ0NTLCBXV1I7CisgICAgICAgIHUxNl90IENvdW50cnlEb21haW5Db2RlOworCisgICAgICAgIC8qIEJCIGhlYXZ5IGNsaXAgKi8KKyAgICAgICAgLy9ocFByaXYtPmVlcHJvbUhlYXZ5Q2xpcEZsYWcgPSAodThfdCkoKHJzcFs2XT4+MjQpICYgMHhmZik7IC8vIGZvcmNlIGVuYWJsZSA4MTA3CisgICAgICAgIC8vem1fbXNnMl9tbShaTV9MVl8wLCAiZWVwcm9tSGVhdnlDbGlwRmxhZyIsIGhwUHJpdi0+ZWVwcm9tSGVhdnlDbGlwRmxhZyk7CisgICAgICAgICNpZiAwCisgICAgICAgIGlmIChocFByaXYtPmh3QkJIZWF2eUNsaXApCisgICAgICAgIHsKKyAgICAgICAgICAgIHptX21zZzBfbW0oWk1fTFZfMCwgImVuYWJsZSBCQiBIZWF2eSBDbGlwIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB6bV9tc2cwX21tKFpNX0xWXzAsICJOb3QgZW5hYmxlIEJCIEhlYXZ5IENsaXAiKTsKKyAgICAgICAgfQorICAgICAgICAjZW5kaWYKKyAgICAgICAgem1fbXNnMl9tbShaTV9MVl8wLCAiTUFDIHJzcFsxXT0iLCByc3BbMV0pOworICAgICAgICB6bV9tc2cyX21tKFpNX0xWXzAsICJNQUMgcnNwWzJdPSIsIHJzcFsyXSk7CisKKyAgICAgICAgYWRkclswXSA9ICh1OF90KShyc3BbMV0gJiAweGZmKTsKKyAgICAgICAgYWRkclsxXSA9ICh1OF90KSgocnNwWzFdPj44KSAmIDB4ZmYpOworICAgICAgICBhZGRyWzJdID0gKHU4X3QpKChyc3BbMV0+PjE2KSAmIDB4ZmYpOworICAgICAgICBhZGRyWzNdID0gKHU4X3QpKChyc3BbMV0+PjI0KSAmIDB4ZmYpOworICAgICAgICBhZGRyWzRdID0gKHU4X3QpKHJzcFsyXSAmIDB4ZmYpOworICAgICAgICBhZGRyWzVdID0gKHU4X3QpKChyc3BbMl0+PjgpICYgMHhmZik7CisvKiNpZmRlZiBaTV9GQjUwCisgICAgICAgIGFkZHJbMF0gPSAodThfdCkoMCAmIDB4ZmYpOworICAgICAgICBhZGRyWzFdID0gKHU4X3QpKDMgJiAweGZmKTsKKyAgICAgICAgYWRkclsyXSA9ICh1OF90KSgxMjcgJiAweGZmKTsKKyAgICAgICAgYWRkclszXSA9ICh1OF90KSgwICYgMHhmZik7CisgICAgICAgIGFkZHJbNF0gPSAodThfdCkoOSAmIDB4ZmYpOworICAgICAgICBhZGRyWzVdID0gKHU4X3QpKDExICYgMHhmZik7CisjZW5kaWYqLworCisgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19NQUNfQUREUl9MLAorICAgICAgICAgICAgICAgICgoKCh1MzJfdClhZGRyWzNdKTw8MjQpIHwgKCgodTMyX3QpYWRkclsyXSk8PDE2KSB8ICgoKHUzMl90KWFkZHJbMV0pPDw4KSB8IGFkZHJbMF0pKTsKKyAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX01BQ19BRERSX0gsCisgICAgICAgICAgICAgICAgKCgoKHUzMl90KWFkZHJbNV0pPDw4KSB8IGFkZHJbNF0pKTsKKyAgICAgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKworICAgICAgICB3ZC0+bGVkU3RydWN0LmxlZE1vZGVbMF0gPSAodTE2X3QpKHJzcFs1XSYweGZmZmYpOworICAgICAgICB3ZC0+bGVkU3RydWN0LmxlZE1vZGVbMV0gPSAodTE2X3QpKHJzcFs1XT4+MTYpOworICAgICAgICB6bV9tc2cyX21tKFpNX0xWXzAsICJsZWRNb2RlWzBdPSIsIHdkLT5sZWRTdHJ1Y3QubGVkTW9kZVswXSk7CisgICAgICAgIHptX21zZzJfbW0oWk1fTFZfMCwgImxlZE1vZGVbMV09Iiwgd2QtPmxlZFN0cnVjdC5sZWRNb2RlWzFdKTsKKworICAgICAgICAvKiBSZWd1bGF0b3J5IFJlbGF0ZWQgU2V0dGluZyAqLworICAgICAgICB6bV9tc2cyX21tKFpNX0xWXzAsICJSZWdEb21haW4gcnNwPSIsIHJzcFszXSk7CisgICAgICAgIHptX21zZzJfbW0oWk1fTFZfMCwgIk9wRmxhZ3MrRWVwTWlzYz0iLCByc3BbNF0pOworICAgICAgICBocFByaXYtPk9wRmxhZ3MgPSAodThfdCkoKHJzcFs0XT4+MTYpICYgMHhmZik7CisgICAgICAgIGlmICgocnNwWzJdID4+IDI0KSA9PSAweDEpIC8vVHggbWFzayA9PSAweDEKKyAgICAgICAgeworICAgICAgICAgICAgem1fbXNnMF9tbShaTV9MVl8wLCAiT1RVUyAxeDIiKTsKKyAgICAgICAgICAgIGhwUHJpdi0+aGFsQ2FwYWJpbGl0eSB8PSBaTV9IUF9DQVBfMTFOX09ORV9UWF9TVFJFQU07CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB6bV9tc2cwX21tKFpNX0xWXzAsICJPVFVTIDJ4MiIpOworICAgICAgICB9CisgICAgICAgIGlmIChocFByaXYtPk9wRmxhZ3MgJiAweDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGhwUHJpdi0+aGFsQ2FwYWJpbGl0eSB8PSBaTV9IUF9DQVBfNUc7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhwUHJpdi0+T3BGbGFncyAmIDB4MikKKyAgICAgICAgeworICAgICAgICAgICAgaHBQcml2LT5oYWxDYXBhYmlsaXR5IHw9IFpNX0hQX0NBUF8yRzsKKyAgICAgICAgfQorCisKKyAgICAgICAgQ0NTID0gKHU4X3QpKChyc3BbM10gJiAweDgwMDApID4+IDE1KTsKKyAgICAgICAgV1dSID0gKHU4X3QpKChyc3BbM10gJiAweDQwMDApID4+IDE0KTsKKyAgICAgICAgQ291bnRyeURvbWFpbkNvZGUgPSAodTE2X3QpKHJzcFszXSAmIDB4M0ZGRik7CisKKyAgICAgICAgaWYgKHJzcFszXSAhPSAweGZmZmZmZmZmKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoQ0NTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vem1fZGVidWdfbXNnMCgiQ1dZIC0gR2V0IFJlZ3VsYXRpb24gVGFibGUgZnJvbSBDb3VudHJ5IENvZGUiKTsKKyAgICAgICAgICAgICAgICB6ZkhwR2V0UmVndWxhdGlvblRhYmxlZnJvbUNvdW50cnkoZGV2LCBDb3VudHJ5RG9tYWluQ29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy96bV9kZWJ1Z19tc2cwKCJDV1kgLSBHZXQgUmVndWxhdGlvbiBUYWJsZSBmcm9tIFJlZyBEb21haW4iKTsKKyAgICAgICAgICAgICAgICB6ZkhwR2V0UmVndWxhdGlvblRhYmxlZnJvbVJlZ2lvbkNvZGUoZGV2LCBDb3VudHJ5RG9tYWluQ29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoV1dSKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vem1fZGVidWdfbXNnMCgiQ1dZIC0gRW5hYmxlIDgwMi4xMWQiKTsKKyAgICAgICAgICAgICAgICAvKiBiZWxvdyBsaW5lIHNoYWxsIGJlIHVubWFya2VkIGFmdGVyIEEgYmFuZCBpcyByZWFkeSAqLworICAgICAgICAgICAgICAgIC8vemZpV2xhblNldERvdDExRE1vZGUoZGV2LCAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmSHBHZXRSZWd1bGF0aW9uVGFibGVmcm9tUmVnaW9uQ29kZShkZXYsIE5PX0VOVU1SRCk7CisgICAgICAgIH0KKworICAgICAgICB6ZkNvcmVNYWNBZGRyZXNzTm90aWZ5KGRldiwgYWRkcik7CisKKyAgICB9CisgICAgZWxzZSBpZiAoc3JjID09IFpNX0VFUFJPTV9SRUFEKQorICAgIHsKKyNpZiAwCisgICAgICAgIHU4X3QgYWRkcls2XSwgQ0NTLCBXV1I7CisgICAgICAgIHUxNl90IENvdW50cnlEb21haW5Db2RlOworI2VuZGlmCisgICAgICAgIGZvciAoaT0wOyBpPFpNX0hBTF9NQVhfRUVQUk9NX1BSUTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaHBQcml2LT5lZXByb21JbWFnZUluZGV4IDwgMTAyNCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBocFByaXYtPmVlcHJvbUltYWdlW2hwUHJpdi0+ZWVwcm9tSW1hZ2VJbmRleCsrXSA9IHJzcFtpKzFdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGhwUHJpdi0+ZWVwcm9tSW1hZ2VJbmRleCA9PSAoWk1fSEFMX01BWF9FRVBST01fUkVRKlpNX0hBTF9NQVhfRUVQUk9NX1BSUSkpCisgICAgICAgIHsKKyAgICAgICAgICAgICNpZiAwCisgICAgICAgICAgICBmb3IgKGk9MDsgaTwxMDI0OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem1fbXNnMl9tbShaTV9MVl8wLCAiaW5kZXg9IiwgaSk7CisgICAgICAgICAgICAgICAgem1fbXNnMl9tbShaTV9MVl8wLCAiZWVwcm9tSW1hZ2U9IiwgaHBQcml2LT5lZXByb21JbWFnZVtpXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIHptX21zZzJfbW0oWk1fTFZfMCwgIk1BQyBbMV09IiwgaHBQcml2LT5lZXByb21JbWFnZVsweDIwYy80XSk7CisgICAgICAgICAgICB6bV9tc2cyX21tKFpNX0xWXzAsICJNQUMgWzJdPSIsIGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgyMTAvNF0pOworI2lmIDAKKyAgICAgICAgICAgIGFkZHJbMF0gPSAodThfdCkoaHBQcml2LT5lZXByb21JbWFnZVsweDIwYy80XSAmIDB4ZmYpOworICAgICAgICAgICAgYWRkclsxXSA9ICh1OF90KSgoaHBQcml2LT5lZXByb21JbWFnZVsweDIwYy80XT4+OCkgJiAweGZmKTsKKyAgICAgICAgICAgIGFkZHJbMl0gPSAodThfdCkoKGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgyMGMvNF0+PjE2KSAmIDB4ZmYpOworICAgICAgICAgICAgYWRkclszXSA9ICh1OF90KSgoaHBQcml2LT5lZXByb21JbWFnZVsweDIwYy80XT4+MjQpICYgMHhmZik7CisgICAgICAgICAgICBhZGRyWzRdID0gKHU4X3QpKGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgyMTAvNF0gJiAweGZmKTsKKyAgICAgICAgICAgIGFkZHJbNV0gPSAodThfdCkoKGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgyMTAvNF0+PjgpICYgMHhmZik7CisKKyAgICAgICAgICAgIHpmQ29yZU1hY0FkZHJlc3NOb3RpZnkoZGV2LCBhZGRyKTsKKworICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX01BQ19BRERSX0wsCisgICAgICAgICAgICAgICAgICAgICgoKCh1MzJfdClhZGRyWzNdKTw8MjQpIHwgKCgodTMyX3QpYWRkclsyXSk8PDE2KSB8ICgoKHUzMl90KWFkZHJbMV0pPDw4KSB8IGFkZHJbMF0pKTsKKyAgICAgICAgICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19NQUNfQUREUl9ILAorICAgICAgICAgICAgICAgICAgICAoKCgodTMyX3QpYWRkcls1XSk8PDgpIHwgYWRkcls0XSkpOworICAgICAgICAgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKworICAgICAgICAgICAgLyogUmVndWxhdG9yeSBSZWxhdGVkIFNldHRpbmcgKi8KKyAgICAgICAgICAgIHptX21zZzJfbW0oWk1fTFZfMCwgIlJlZ0RvbWFpbiA9IiwgaHBQcml2LT5lZXByb21JbWFnZVsweDIwOC80XSk7CisgICAgICAgICAgICBDQ1MgPSAodThfdCkoKGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgyMDgvNF0gJiAweDgwMDApID4+IDE1KTsKKyAgICAgICAgICAgIFdXUiA9ICh1OF90KSgoaHBQcml2LT5lZXByb21JbWFnZVsweDIwOC80XSAmIDB4NDAwMCkgPj4gMTQpOworICAgICAgICAgICAgLyogYmVsb3cgbGluZSBzaGFsbCBiZSB1bm1hcmtlZCBhZnRlciBBIGJhbmQgaXMgcmVhZHkgKi8KKyAgICAgICAgICAgIC8vQ291bnRyeURvbWFpbkNvZGUgPSAodTE2X3QpKGhwUHJpdi0+ZWVwcm9tSW1hZ2VbMHgyMDgvNF0gJiAweDNGRkYpOworICAgICAgICAgICAgQ291bnRyeURvbWFpbkNvZGUgPSA4OworICAgICAgICAgICAgaWYgKENDUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvL3ptX2RlYnVnX21zZzAoIkNXWSAtIEdldCBSZWd1bGF0aW9uIFRhYmxlIGZyb20gQ291bnRyeSBDb2RlIik7CisgICAgICAgICAgICAgICAgemZIcEdldFJlZ3VsYXRpb25UYWJsZWZyb21Db3VudHJ5KGRldiwgQ291bnRyeURvbWFpbkNvZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vem1fZGVidWdfbXNnMCgiQ1dZIC0gR2V0IFJlZ3VsYXRpb24gVGFibGUgZnJvbSBSZWcgRG9tYWluIik7CisgICAgICAgICAgICAgICAgemZIcEdldFJlZ3VsYXRpb25UYWJsZWZyb21SZWdpb25Db2RlKGRldiwgQ291bnRyeURvbWFpbkNvZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFdXUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvL3ptX2RlYnVnX21zZzAoIkNXWSAtIEVuYWJsZSA4MDIuMTFkIik7CisgICAgICAgICAgICAgICAgLyogYmVsb3cgbGluZSBzaGFsbCBiZSB1bm1hcmtlZCBhZnRlciBBIGJhbmQgaXMgcmVhZHkgKi8KKyAgICAgICAgICAgICAgICAvL3pmaVdsYW5TZXREb3QxMURNb2RlKGRldiwgMSk7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIHpmQ29yZUhhbEluaXRDb21wbGV0ZShkZXYpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaHBQcml2LT5lZXByb21JbWFnZVJkUmVxKys7CisgICAgICAgICAgICB6ZkhwTG9hZEVFUFJPTUZyb21GVyhkZXYpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHNyYyA9PSBaTV9FRVBST01fV1JJVEUpCisgICAgeworICAgICAgICB6ZndEYmdXcml0ZUVlcHJvbURvbmUoZGV2LCBjbWRbMV0sIGNtZFsyXSk7CisgICAgfQorICAgIGVsc2UgaWYgKHNyYyA9PSBaTV9BTklfUkVBRCkKKyAgICB7CisgICAgICAgIHUzMl90IGN5Y2xlVGltZSwgY3RsQ2xlYXI7CisKKyAgICAgICAgem1fbXNnMl9tbShaTV9MVl8wLCAiQU5JIHJzcFsxXT0iLCByc3BbMV0pOworICAgICAgICB6bV9tc2cyX21tKFpNX0xWXzAsICJBTkkgcnNwWzJdPSIsIHJzcFsyXSk7CisgICAgICAgIHptX21zZzJfbW0oWk1fTFZfMCwgIkFOSSByc3BbM109IiwgcnNwWzNdKTsKKyAgICAgICAgem1fbXNnMl9tbShaTV9MVl8wLCAiQU5JIHJzcFs0XT0iLCByc3BbNF0pOworCisgICAgICAgIGhwUHJpdi0+Y3RsQnVzeSArPSByc3BbMV07CisgICAgICAgIGhwUHJpdi0+ZXh0QnVzeSArPSByc3BbMl07CisKKyAgICAgICAgY3ljbGVUaW1lID0gMTAwMDAwOyAvLzEwMCBtaW5pc2Vjb25kcworCisgICAgICAgIGlmIChjeWNsZVRpbWUgPiByc3BbMV0pCisgICAgICAgIHsKKyAgICAgICAgICAgIGN0bENsZWFyID0gKGN5Y2xlVGltZSAtIHJzcFsxXSkgLyAxMDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBjdGxDbGVhciA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdkLT5hbmlFbmFibGUpCisgICAgICAgICAgICB6ZkhwQW5pQXJQb2xsKGRldiwgY3RsQ2xlYXIsIHJzcFszXSwgcnNwWzRdKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3JjID09IFpNX0NNRF9FQ0hPKQorICAgIHsKKyAgICAgICAgaWYgKCAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmhhbFJlSW5pdCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmQ29yZUhhbEluaXRDb21wbGV0ZShkZXYpOworICAgICAgICAgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5oYWxSZUluaXQgPSAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgemZIcExvYWRFRVBST01Gcm9tRlcoZGV2KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChzcmMgPT0gWk1fT0lEX0ZXX0RMX0lOSVQpCisgICAgeworICAgICAgICB6ZndEYmdEb3dubG9hZEZ3SW5pdERvbmUoZGV2KTsKKyAgICB9CisgICAgcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZldyaXRlUmVnSW50ZXJuYWxSZWcgICAgICAgKi8KKy8qICAgICAgV3JpdGUgb24gY2hpcCBpbnRlcm5hbCByZWdpc3RlciBpbW1lZGlhdGVseS4gICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGFkZHIgOiByZWdpc3RlciBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICB2YWwgOiB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAwIDogc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgb3RoZXIgOiBmYWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDUuMTEgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMl90IHpmV3JpdGVSZWdJbnRlcm5hbFJlZyh6ZGV2X3QqIGRldiwgdTMyX3QgYWRkciwgdTMyX3QgdmFsKQoreworICAgIHUzMl90IGNtZFszXTsKKyAgICB1MTZfdCByZXQ7CisKKyAgICBjbWRbMF0gPSAweDAwMDAwMTA4OworICAgIGNtZFsxXSA9IGFkZHI7CisgICAgY21kWzJdID0gdmFsOworCisgICAgcmV0ID0gemZJc3N1ZUNtZChkZXYsIGNtZCwgMTIsIFpNX09JRF9JTlRFUk5BTF9XUklURSwgTlVMTCk7CisgICAgcmV0dXJuIHJldDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcgICAgICovCisvKiAgICAgIFdyaXRlIG9uIGNoaXAgaW50ZXJuYWwgcmVnaXN0ZXIsIHdyaXRlIG9wZXJhdGlvbiBtYXkgYmUgICAgICAgICAqLworLyogICAgICBwb3N0cG9uZWQgdG8gZm9ybSBhIG11bHRpcGxlIHdyaXRlIGNvbW1hbmQuICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYWRkciA6IHJlZ2lzdGVyIGFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIHZhbCA6IHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIDAgOiBjb21tYW5kIGJlZW4gcG9zdHBvbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAxIDogY29tbWFuZHMgYmVlbiBleGVjdXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNS4xMSAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoemRldl90KiBkZXYsIHUzMl90IGFkZHIsIHUzMl90IHZhbCkKK3sKKyAgICB1MzJfdCBjbWRbKFpNX01BWF9DTURfU0laRS80KV07CisgICAgdTE2X3QgaTsKKyAgICB1MTZfdCByZXQ7CisKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKworICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICAvKiBlbnRlciBjcml0aWNhbCBzZWN0aW9uICovCisgICAgem13X2VudGVyX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIC8qIFN0b3JlIGNvbW1hbmQgdG8gZ2xvYmFsIGJ1ZmZlciAqLworICAgIGhwUHJpdi0+Y21kLmRlbGF5V2NtZEFkZHJbaHBQcml2LT5jbWQuZGVsYXlXY21kQ291bnRdID0gYWRkcjsKKyAgICBocFByaXYtPmNtZC5kZWxheVdjbWRWYWxbaHBQcml2LT5jbWQuZGVsYXlXY21kQ291bnQrK10gPSB2YWw7CisKKyAgICAvKiBJZiBwZW5kaW5nIGNvbW1hbmQgcmVhY2ggc2l6ZSBsaW1pdCAqLworICAgIGlmICgoaHBQcml2LT5jbWQuZGVsYXlXY21kQ291bnQpID49ICgoWk1fTUFYX0NNRF9TSVpFIC0gNCkgPj4gMykpCisgICAgeworICAgICAgICBjbWRbMF0gPSAweDAwMDAwMTAwICsgKGhwUHJpdi0+Y21kLmRlbGF5V2NtZENvdW50PDwzKTsKKworICAgICAgICAvKiBjb3B5IGNvbW1hbmQgdG8gY21kIGJ1ZmZlciAqLworICAgICAgICBmb3IgKGk9MDsgaTxocFByaXYtPmNtZC5kZWxheVdjbWRDb3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjbWRbMSsoaTw8MSldID0gaHBQcml2LT5jbWQuZGVsYXlXY21kQWRkcltpXTsKKyAgICAgICAgICAgIGNtZFsyKyhpPDwxKV0gPSBocFByaXYtPmNtZC5kZWxheVdjbWRWYWxbaV07CisgICAgICAgIH0KKyAgICAgICAgLyogcmVzZXQgcGVuZGluZyBjb21tYW5kICovCisgICAgICAgIGhwUHJpdi0+Y21kLmRlbGF5V2NtZENvdW50ID0gMDsKKworICAgICAgICAvKiBsZWF2ZSBjcml0aWNhbCBzZWN0aW9uICovCisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgLyogaXNzdWUgd3JpdGUgY29tbWFuZCAqLworICAgICAgICByZXQgPSB6Zklzc3VlQ21kKGRldiwgY21kLCA0KyhpPDwzKSwgWk1fT0lEX0lOVEVSTkFMX1dSSVRFLCBOVUxMKTsKKworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogbGVhdmUgY3JpdGljYWwgc2VjdGlvbiAqLworICAgICAgICB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZGbHVzaERlbGF5V3JpdGUgICAgICAgICAgICovCisvKiAgICAgIEZsdXNoIHBlbmRpbmcgd3JpdGUgY29tbWFuZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIDAgOiBubyBwZW5kaW5nIGNvbW1hbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAxIDogY29tbWFuZHMgYmVlbiBleGVjdXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNS4xMSAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTE2X3QgemZGbHVzaERlbGF5V3JpdGUoemRldl90KiBkZXYpCit7CisgICAgdTMyX3QgY21kWyhaTV9NQVhfQ01EX1NJWkUvNCldOworICAgIHUxNl90IGk7CisgICAgdTE2X3QgcmV0OworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworCisgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKKworICAgIC8qIGVudGVyIGNyaXRpY2FsIHNlY3Rpb24gKi8KKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworCisgICAgLyogSWYgdGhlcmUgaXMgcGVuZGluZyBjb21tYW5kICovCisgICAgaWYgKGhwUHJpdi0+Y21kLmRlbGF5V2NtZENvdW50ID4gMCkKKyAgICB7CisgICAgICAgIGNtZFswXSA9IDB4MDAwMDAxMDAgKyAoaHBQcml2LT5jbWQuZGVsYXlXY21kQ291bnQ8PDMpOworCisgICAgICAgIC8qIGNvcHkgY29tbWFuZCB0byBjbWQgYnVmZmVyICovCisgICAgICAgIGZvciAoaT0wOyBpPGhwUHJpdi0+Y21kLmRlbGF5V2NtZENvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNtZFsxKyhpPDwxKV0gPSBocFByaXYtPmNtZC5kZWxheVdjbWRBZGRyW2ldOworICAgICAgICAgICAgY21kWzIrKGk8PDEpXSA9IGhwUHJpdi0+Y21kLmRlbGF5V2NtZFZhbFtpXTsKKyAgICAgICAgfQorICAgICAgICAvKiByZXNldCBwZW5kaW5nIGNvbW1hbmQgKi8KKyAgICAgICAgaHBQcml2LT5jbWQuZGVsYXlXY21kQ291bnQgPSAwOworCisgICAgICAgIC8qIGxlYXZlIGNyaXRpY2FsIHNlY3Rpb24gKi8KKyAgICAgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgICAgICAvKiBpc3N1ZSB3cml0ZSBjb21tYW5kICovCisgICAgICAgIHJldCA9IHpmSXNzdWVDbWQoZGV2LCBjbWQsIDQrKGk8PDMpLCBaTV9PSURfSU5URVJOQUxfV1JJVEUsIE5VTEwpOworCisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBsZWF2ZSBjcml0aWNhbCBzZWN0aW9uICovCisgICAgICAgIHptd19sZWF2ZV9jcml0aWNhbF9zZWN0aW9uKGRldik7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCisKK3UzMl90IHpmaURiZ0RlbGF5V3JpdGVSZWcoemRldl90KiBkZXYsIHUzMl90IGFkZHIsIHUzMl90IHZhbCkKK3sKKwl6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIGFkZHIsIHZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3UzMl90IHpmaURiZ0ZsdXNoRGVsYXlXcml0ZSh6ZGV2X3QqIGRldikKK3sKKwl6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZpRGJnV3JpdGVSZWcgICAgICAgICAgICAgICovCisvKiAgICAgIFdyaXRlIHJlZ2lzdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBhZGRyIDogcmVnaXN0ZXIgYWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgdmFsIDogdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgMCA6IHN1Y2Nlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG90aGVyIDogZmFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFN0ZXBoZW4gQ2hlbiAgICAgICAgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAgICAyMDA1LjEwICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzJfdCB6ZmlEYmdXcml0ZVJlZyh6ZGV2X3QqIGRldiwgdTMyX3QgYWRkciwgdTMyX3QgdmFsKQoreworICAgIHUzMl90IGNtZFszXTsKKyAgICB1MTZfdCByZXQ7CisKKyAgICBjbWRbMF0gPSAweDAwMDAwMTA4OworICAgIGNtZFsxXSA9IGFkZHI7CisgICAgY21kWzJdID0gdmFsOworCisgICAgcmV0ID0gemZJc3N1ZUNtZChkZXYsIGNtZCwgMTIsIFpNX09JRF9XUklURSwgMCk7CisgICAgcmV0dXJuIHJldDsKK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZmlEYmdXcml0ZUZsYXNoICAgICAgICAgICAgKi8KKy8qICAgICAgV3JpdGUgZmxhc2guICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGFkZHIgOiByZWdpc3RlciBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICB2YWwgOiB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAwIDogc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgb3RoZXIgOiBmYWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgWWpzdW5nICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDcuMDIgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMl90IHpmaURiZ1dyaXRlRmxhc2goemRldl90KiBkZXYsIHUzMl90IGFkZHIsIHUzMl90IHZhbCkKK3sKKyAgICB1MzJfdCBjbWRbM107CisgICAgdTE2X3QgcmV0OworCisgICAgLy9jbWRbMF0gPSAweDAwMDBCMDA4OworCS8qIGxlblswXSA6IHR5cGVbMHhCMF0gOiBzZXFbP10gKi8KKyAgICBjbWRbMF0gPSA4IHwgKFpNX0NNRF9XRkxBU0ggPDwgOCk7CisgICAgY21kWzFdID0gYWRkcjsKKyAgICBjbWRbMl0gPSB2YWw7CisKKyAgICByZXQgPSB6Zklzc3VlQ21kKGRldiwgY21kLCAxMiwgWk1fT0lEX1dSSVRFLCAwKTsKKyAgICByZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZpRGJnV3JpdGVFZXByb20gICAgICAgICAgICAqLworLyogICAgICBXcml0ZSBFRVBST00uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGFkZHIgOiByZWdpc3RlciBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICB2YWwgOiB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAwIDogc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgb3RoZXIgOiBmYWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgUGF1bCAgICAgICAgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAgICAyMDA3LjA2ICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMl90IHpmaURiZ1dyaXRlRWVwcm9tKHpkZXZfdCogZGV2LCB1MzJfdCBhZGRyLCB1MzJfdCB2YWwpCit7CisgICAgdTMyX3QgY21kWzNdOworICAgIHUxNl90IHJldDsKKworICAgIC8vY21kWzBdID0gMHgwMDAwQjAwODsKKwkvKiBsZW5bMF0gOiB0eXBlWzB4QjBdIDogc2VxWz9dICovCisgICAgY21kWzBdID0gOCB8IChaTV9DTURfV1JFRVBST00gPDwgOCk7CisgICAgY21kWzFdID0gYWRkcjsKKyAgICBjbWRbMl0gPSB2YWw7CisKKyAgICByZXQgPSB6Zklzc3VlQ21kKGRldiwgY21kLCAxMiwgWk1fRUVQUk9NX1dSSVRFLCAwKTsKKyAgICByZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZpRGJnQmxvY2tXcml0ZUVlcHJvbSAgICAgICovCisvKiAgICAgIEJsb2NrIFdyaXRlIEVlcHJvbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgcC5zOiBub3csaXQgd2lsbCB3cml0ZSAxNiBieXRlcyByZWdpc3RlciBkYXRhIHBlciBibG9jayAoTj00KSAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGFkZHIgOiByZWdpc3RlciBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBidWYgOiBpbnB1dCBkYXRhIGJ1ZmZlciBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAwIDogc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgb3RoZXIgOiBmYWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgUGF1bCAgICAgICAgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAgICAyMDA3LjA2ICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vI2RlZmluZSBOICAgICAgIGJ1Zmxlbi80CisvLyNkZWZpbmUgU0laRSAgICAoMipOKzEpCisKK3UzMl90IHpmaURiZ0Jsb2NrV3JpdGVFZXByb20oemRldl90KiBkZXYsIHUzMl90IGFkZHIsIHUzMl90KiBidWYpCit7CisgICAgdTMyX3QgY21kWzldOyAgLy8yTisxCisgICAgdTE2X3QgcmV0LGk7CisKKyAgICAvL2NtZFswXSA9IDB4MDAwMEIwMDg7CisJICAvKiBsZW5bMF0gOiB0eXBlWzB4QjBdIDogc2VxWz9dICovCisKKyAgICAvL2NtZFswXSA9ICg4Kk4pIHwgKFpNX0NNRF9XRkxBU0ggPDwgOCk7CisgICAgY21kWzBdID0gMzIgfCAoWk1fQ01EX1dSRUVQUk9NIDw8IDgpOyAgICAvLzhOCisKKyAgICBmb3IgKGk9MDsgaTw0OyBpKyspICAgLy8gaTxOCisgICAgeworICAgICAgICBjbWRbKDIqaSkrMV0gPSBhZGRyKyg0KmkpOworICAgICAgICBjbWRbKDIqaSkrMl0gPSAqKGJ1ZitpKTsKKyAgICB9CisKKyAgICByZXQgPSB6Zklzc3VlQ21kKGRldiwgY21kLCAzNiwgWk1fRUVQUk9NX1dSSVRFLCAwKTsgICAgLy84Tis0CisKKyAgICAvLyBhZGRlZCBmb3IgRUVQUk9NVXBkYXRlLCB3YWl0IGEgbW9tZW50IGZvciBwcmV2ZW50IGNtZCBxdWV1ZSBmdWxsIQorICAgIC8vemZ3U2xlZXAoZGV2LCAxKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKworLyogd3JpdGUgRUVQUk9NIHdpdGggd3JsZW4gOiB3cmxlbiBtdXN0IGJlIDQqbiAqLworLyogY29tbWFuZCBmb3JtYXQgOiBjbWRfaW5mbyg0KSArIGFkZHIoNCkgKyBlZXByb20od3JsZW4pICovCit1MzJfdCB6ZmlEYmdCbG9ja1dyaXRlRWVwcm9tX3YyKHpkZXZfdCogZGV2LCB1MzJfdCBhZGRyLCB1MzJfdCogYnVmLCB1MzJfdCB3cmxlbikKK3sKKyAgICB1MzJfdCBjbWRbMTZdOworICAgIHUxNl90IHJldCxpOworCisJICAvKiBsZW5bMF0gOiB0eXBlWzB4QjBdIDogc2VxWz9dICovCisJICAvKiBsZW4gPSBhZGRyKDQpICsgZWVwcm9tX2Jsb2NrKHdybGVuKSAqLworICAgIGNtZFswXSA9ICh3cmxlbis0KSB8IChaTV9DTURfTUVNX1dSRUVQUk9NIDw8IDgpOworICAgIGNtZFsxXSA9IGFkZHI7CisKKyAgICBmb3IgKGk9MDsgaTwod3JsZW4vNCk7IGkrKykgICAvLyBpPHdybGVuLzQKKyAgICB7CisgICAgICAgIGNtZFsyK2ldID0gKihidWYraSk7CisgICAgfQorICAgIC8qIGNtZF9pbmZvKDQpICsgYWRkcig0KSArIGVlcHJvbSh3cmxlbikgKi8KKyAgICByZXQgPSB6Zklzc3VlQ21kKGRldiwgY21kLCAodTE2X3QpKHdybGVuKzgpLCBaTV9FRVBST01fV1JJVEUsIDApOworCisgICAgcmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmRGJnT3BlbkVlcHJvbSAgICAgICAgICAgICovCisvKiAgICAgIE9wZW4gRUVQUk9NLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgUGF1bCAgICAgICAgICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDcuMDYgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgemZEYmdPcGVuRWVwcm9tKHpkZXZfdCogZGV2KQoreworICAgIC8vIHVubG9jayBFRVBST00KKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MUQxNDAwLCAweDEyMzQ1Njc4KTsKKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MUQxNDA0LCAweDU1YWEwMGZmKTsKKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MUQxNDA4LCAweDEzNTc5YWNlKTsKKyAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MUQxNDE0LCAweDApOworICAgIHpmRmx1c2hEZWxheVdyaXRlKGRldik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZkRiZ0Nsb3NlRWVwcm9tICAgICAgICAgICAgKi8KKy8qICAgICAgQ2xvc2UgRUVQUk9NLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgUGF1bCAgICAgICAgICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDcuMDUgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgemZEYmdDbG9zZUVlcHJvbSh6ZGV2X3QqIGRldikKK3sKKyAgICAvLyBsb2NrIEVFUFJPTQorICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxRDE0MDAsIDB4ODc2NTQzMjEpOworICAgIC8vemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCAweDFEMTQwNCwgMHhmZmZmZmZmZik7CisgICAgLy96ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIDB4MUQxNDA4LCAweGZmZmZmZmZmKTsKKyAgICAvL3pmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgMHgxRDE0MTQsIDB4MTAwKTsKKyAgICB6ZkZsdXNoRGVsYXlXcml0ZShkZXYpOworfQorI2lmIDAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZmlTZXJpYWxseVdyaXRlRWVwcm9tICAgICAgKi8KKy8qICAgICAgV3JpdGUgRUVQUk9NIFNlcmlhbGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGFkZHIgOiBzdGFydCBhZGRyZXNzIG9mIHdyaXRpbmcgRUVQUk9NICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBidWYgOiBpbnB1dCBkYXRhIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmbGVuIDogc2l6ZSBvZiBpbnB1dCBkYXRhIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgIChsZW5ndGggb2YgZGF0YSB3cml0ZSBpbnRvIEVFUFJPTSkgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBQYXVsICAgICAgICAgICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNy4wNiAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTMyX3QgemZpU2VyaWFsbHlXcml0ZUVlcHJvbSh6ZGV2X3QqIGRldiwgdTMyX3QgYWRkciwgdTMyX3QqIGJ1ZiwgdTMyX3QgYnVmbGVuKQoreworICAgIHUzMl90IGNvdW50OworICAgIHUxNl90IGkscmV0LGJsb2Nrc2l6ZTsKKyAgICB1OF90ICB0ZW1wWzJdOworCisgICAgLy8gcGVyIDQgYnl0ZXMgPSAxIGNvdW50CisgICAgY291bnQgPSBidWZsZW4vNDsKKworICAgIC8vIE9wZW4gRUVQUk9NCisgICAgemZEYmdPcGVuRWVwcm9tKGRldik7CisKKyAgICAvLyBXcml0ZSBFRVBST00KKyAgICBmb3IgKGk9MDsgaTxjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKHpmd1dyaXRlRWVwcm9tKGRldiwgKGFkZHIrKDQqaSkpLCAqKGJ1ZitpKSwgMCkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVXBkYXRlIGZhaWxlZCwgQ2xvc2UgRUVQUk9NCisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJ6ZndXcml0ZUVlcHJvbSBmYWlsZWQgXG4iKTsKKyAgICAgICAgICAgIHpmRGJnQ2xvc2VFZXByb20oZGV2KTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2xvc2UgRUVQUk9NCisgICAgemZEYmdDbG9zZUVlcHJvbShkZXYpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCisjaWYgMAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmaVNlcmlhbGx5QmxvY2tXcml0ZUVlcHJvbSAqLworLyogICAgICAgQmxvY2sgV3JpdGUgRUVQUk9NIFNlcmlhbGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgKEJsb2NrV3JpdGU6IHBlciAxNmJ5dGVzIHdyaXRlIEVFUFJPTSBvbmNlKSAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGFkZHIgOiByZWdpc3RlciBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBidWYgOiBpbnB1dCBkYXRhIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgYnVmbGVuIDogYWNjZXNzIGRhdGEgc2l6ZSBvZiBidWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgMCA6IHN1Y2Nlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG90aGVyIDogZmFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFBhdWwgICAgICAgICAgICAgICAgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiAgICAyMDA3LjA1ICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzJfdCB6ZmlTZXJpYWxseUJsb2NrV3JpdGVFZXByb20oemRldl90KiBkZXYsIHUzMl90IGFkZHIsIHUzMl90KiBidWYsIHUzMl90IGJ1ZmxlbikKK3sKKyAgICB1MzJfdCBjb3VudDsKKyAgICB1MTZfdCBpLHJldCxibG9ja3NpemU7CisgICAgdThfdCAgdGVtcFsyXTsKKworICAgIC8vIHBlciA0IGJ5dGVzID0gMSBjb3VudAorICAgIGNvdW50ID0gYnVmbGVuLzQ7CisKKyAgICAvLyBPcGVuIEVFUFJPTQorICAgIHpmRGJnT3BlbkVlcHJvbShkZXYpOworCisgICAgLy8gV3JpdGUgRUVQUk9NCisgICAgLy8gRUVQUk9NIFdyaXRlIHN0YXJ0IGFkZHJlc3MgZnJvbTogMHgxMDAwIT8KKyAgICAvLyBwZXIgMTZieXRlcyhOPTQpIGJsb2NrIHdyaXRlIEVFUFJPTSBvbmNlCisgICAgZm9yIChpPTA7IGk8KGNvdW50LzQpOyBpKyspICAgLy8gY291bnQvTgorICAgIHsKKyAgICAgICAgLy96ZmlEYmdCbG9ja1dyaXRlRWVwcm9tKGRldiwgKGFkZHIrKDQqTippKSksIGJ1ZisoTippKSk7CisgICAgICAgIC8vemZpRGJnQmxvY2tXcml0ZUVlcHJvbShkZXYsIChhZGRyKygxNippKSksIGJ1ZisoNCppKSk7CisgICAgICAgIGlmICh6ZndCbG9ja1dyaXRlRWVwcm9tKGRldiwgKGFkZHIrKDE2KmkpKSwgYnVmKyg0KmkpLCAwKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJ6ZmlEYmdCbG9ja1dyaXRlRWVwcm9tIGZhaWxlZCBcbiIpOworICAgICAgICAgICAgLy8gQ2xvc2UgRUVQUk9NCisgICAgICAgICAgICB6ZkRiZ0Nsb3NlRWVwcm9tKGRldik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENsb3NlIEVFUFJPTQorICAgIHpmRGJnQ2xvc2VFZXByb20oZGV2KTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorI2lmIDAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZmlEYmdEdW1wRWVwcm9tICAgICAgICAgICAgKi8KKy8qICAgICAgRHVtcCBFRVBST00uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGFkZHIgOiBzdGFydCBhZGRyZXNzIG9mIGR1bXBpbmcgRUVQUk9NICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkYXRhbGVuIDogIGxlbmd0aCBvZiBhY2Nlc3MgRUVQUk9NIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBidWYgOiAgcG9pbnQgb2YgYnVmZmVyLCB0aGUgYnVmZmVyIHNhdmVkIGR1bXAgZGF0YSAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAwIDogc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgb3RoZXIgOiBmYWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgUGF1bCAgICAgICAgICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDcuMDYgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMl90IHpmaURiZ0R1bXBFZXByb20oemRldl90KiBkZXYsIHUzMl90IGFkZHIsIHUzMl90IGRhdGFsZW4sIHUzMl90KiBidWYpCit7CisgICAgdTMyX3QgY291bnQ7CisgICAgdTE2X3QgaSxyZXQ7CisKKyAgICBjb3VudCA9IGRhdGFsZW4vNDsKKworICAgIC8vIG92ZXIgRUVQUk9NIGxlbmd0aAorICAgIGlmKGRhdGFsZW4gPiAweDIwMDApCisgICAgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBmb3IoaT0wOyBpPGNvdW50OyBpKyspCisgICAgeworICAgICAgICBidWZbaV0gPSB6ZndSZWFkRWVwcm9tKGRldiwgYWRkcisoNCppKSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZmlEYmdSZWFkUmVnICAgICAgICAgICAgICAgKi8KKy8qICAgICAgUmVhZCByZWdpc3Rlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGFkZHIgOiByZWdpc3RlciBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIDAgOiBzdWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBvdGhlciA6IGZhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNS4xMCAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTMyX3QgemZpRGJnUmVhZFJlZyh6ZGV2X3QqIGRldiwgdTMyX3QgYWRkcikKK3sKKyAgICB1MzJfdCBjbWRbMl07CisgICAgdTE2X3QgcmV0OworCisgICAgY21kWzBdID0gMHgwMDAwMDAwNDsKKyAgICBjbWRbMV0gPSBhZGRyOworCisgICAgcmV0ID0gemZJc3N1ZUNtZChkZXYsIGNtZCwgOCwgWk1fT0lEX1JFQUQsIDApOworICAgIHJldHVybiByZXQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmaURiZ1JlYWRUYWxseSAgICAgICAgICAgICAqLworLyogICAgICBSZWFkIHJlZ2lzdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAwIDogc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgb3RoZXIgOiBmYWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgU3RlcGhlbiBDaGVuICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDUuMTAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMl90IHpmaURiZ1JlYWRUYWxseSh6ZGV2X3QqIGRldikKK3sKKyAgICB1MzJfdCBjbWRbMV07CisgICAgdTE2X3QgcmV0OworCXptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworCWlmICggKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5oYWxSZUluaXQgKQorCXsKKwkgICAgcmV0dXJuIDE7CisJfQorCisJLyogbGVuWzBdIDogdHlwZVsweDgxXSA6IHNlcVs/XSAqLworICAgIGNtZFswXSA9IDAgfCAoWk1fQ01EX1RBTExZIDw8IDgpOworICAgIHJldCA9IHpmSXNzdWVDbWQoZGV2LCBjbWQsIDQsIFpNX09JRF9UQUxMWSwgMCk7CisKKwkvKiBsZW5bMF0gOiB0eXBlWzB4ODJdIDogc2VxWz9dICovCisgICAgY21kWzBdID0gMCB8IChaTV9DTURfVEFMTFlfQVBEIDw8IDgpOworICAgIHJldCA9IHpmSXNzdWVDbWQoZGV2LCBjbWQsIDQsIFpNX09JRF9UQUxMWV9BUEQsIDApOworCisgICAgcmV0dXJuIHJldDsKK30KKworCit1MzJfdCB6ZmlEYmdTZXRJRlN5bnRoZXNpemVyKHpkZXZfdCogZGV2LCB1MzJfdCB2YWx1ZSkKK3sKKyAgICB1MzJfdCBjbWRbMl07CisgICAgdTE2X3QgcmV0OworCisJLyogbGVuWzRdIDogdHlwZVsweDMyXSA6IHNlcVs/XSAqLworICAgIGNtZFswXSA9IDB4NCB8IChaTV9PSURfU1lOVEggPDwgOCk7CisgICAgY21kWzFdID0gdmFsdWU7CisKKyAgICByZXQgPSB6Zklzc3VlQ21kKGRldiwgY21kLCA4LCBaTV9PSURfU1lOVEgsIDApOworICAgIHJldHVybiByZXQ7Cit9CisKK3UzMl90IHpmaURiZ1F1ZXJ5SHdUeEJ1c3koemRldl90KiBkZXYpCit7CisgICAgdTMyX3QgY21kWzFdOworICAgIHUxNl90IHJldDsKKworCS8qIGxlbls0XSA6IHR5cGVbMHhDMF0gOiBzZXFbP10gKi8KKwljbWRbMF0gPSAwIHwgKFpNX0NNRF9ES1RYX1NUQVRVUyA8PCA4KTsKKworICAgIHJldCA9IHpmSXNzdWVDbWQoZGV2LCBjbWQsIDQsIFpNX09JRF9ES1RYX1NUQVRVUywgMCk7CisgICAgcmV0dXJuIHJldDsKK30KKworLy9QYXVsKysKKyNpZiAwCit1MTZfdCB6ZkhwQmxvY2tFcmFzZUZsYXNoKHpkZXZfdCAqZGV2LCB1MzJfdCBhZGRyKQoreworICAgIHUzMl90IGNtZFsoWk1fTUFYX0NNRF9TSVpFLzQpXTsKKyAgICB1MTZfdCByZXQ7CisKKyAgICBjbWRbMF0gPSAweDAwMDAwMDA0IHwgKFpNX0NNRF9GTEFTSF9FUkFTRSA8PCA4KTsKKyAgICBjbWRbMV0gPSBhZGRyOworCisgICAgcmV0ID0gemZJc3N1ZUNtZChkZXYsIGNtZCwgOCwgWk1fT0lEX0lOVEVSTkFMX1dSSVRFLCBOVUxMKTsKKyAgICByZXR1cm4gcmV0OworfQorI2VuZGlmCisKKyNpZiAwCit1MTZfdCB6ZmlEYmdQcm9ncmFtRmxhc2goemRldl90ICpkZXYsIHUzMl90IG9mZnNldCwgdTMyX3QgbGVuLCB1MzJfdCAqZGF0YSkKK3sKKyAgICB1MzJfdCBjbWRbKFpNX01BWF9DTURfU0laRS80KV07CisgICAgdTE2X3QgcmV0OworICAgIHUxNl90IGk7CisKKworICAgIGNtZFswXSA9IChaTV9DTURfRkxBU0hfUFJPRyA8PCA4KSB8ICgobGVuKzgpICYgMHhmZik7CisgICAgY21kWzFdID0gb2Zmc2V0OworICAgIGNtZFsyXSA9IGxlbjsKKworICAgIGZvciAoaSA9IDA7IGkgPCAobGVuID4+IDIpOyBpKyspCisgICAgeworICAgICAgICAgY21kWzMraV0gPSBkYXRhW2ldOworICAgIH0KKworICAgIHJldCA9IHpmSXNzdWVDbWQoZGV2LCBjbWQsIDEyLCBaTV9PSURfRkxBU0hfUFJPR1JBTSwgTlVMTCk7CisKKyAgICByZXR1cm4gcmV0OworfQorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZmlEYmdDaGlwRXJhc2VGbGFzaCAgICAgICAgKi8KKy8qICAgICAgQ2hpcCBFcmFzZSBGbGFzaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgMCA6IHN1Y2Nlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG90aGVyIDogZmFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFBhdWwgICAgICAgICAgICAgICAgQXRoZXJvcyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDcuMDkgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MTZfdCB6ZmlEYmdDaGlwRXJhc2VGbGFzaCh6ZGV2X3QgKmRldikKK3sKKyAgICB1MzJfdCBjbWRbKFpNX01BWF9DTURfU0laRS80KV07CisgICAgdTE2X3QgcmV0OworCisgICAgY21kWzBdID0gMHgwMDAwMDAwMCB8IChaTV9DTURfRkxBU0hfRVJBU0UgPDwgOCk7CisKKyAgICByZXQgPSB6Zklzc3VlQ21kKGRldiwgY21kLCA0LCBaTV9PSURfSU5URVJOQUxfV1JJVEUsIE5VTEwpOworICAgIHJldHVybiByZXQ7Cit9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZpRGJnR2V0Rmxhc2hDaGVja1N1bSAgICAgICovCisvKiAgICAgIEdldCBGbGFzaENoZWNrU3VtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldiA6IGRldmljZSBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBhZGRyIDogU3RhcnQgYWRkcmVzcyBvZiBnZXRjaGtzdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgbGVuIDogdG90YWwgbGVudGggb2YgY2FsY3VsYXRlIGdldGNoa3N1bSAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgMCA6IHN1Y2Nlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG90aGVyIDogZmFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFBhdWwgICAgICAgICAgICAgICAgQXRoZXJvcyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDcuMDggICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzJfdCB6ZmlEYmdHZXRGbGFzaENoZWNrU3VtKHpkZXZfdCAqZGV2LCB1MzJfdCBhZGRyLCB1MzJfdCBsZW4pCit7CisgICAgdTMyX3QgY21kWyhaTV9NQVhfQ01EX1NJWkUvNCldOworICAgIHUzMl90IHJldDsKKworICAgIGNtZFswXSA9IDB4MDAwMDAwMDggfCAoWk1fQ01EX0ZMQVNIX0NIS1NVTSA8PCA4KTsKKyAgICBjbWRbMV0gPSBhZGRyOworICAgIGNtZFsyXSA9IGxlbjsKKworICAgIHJldCA9IHpmSXNzdWVDbWQoZGV2LCBjbWQsIDEyLCBaTV9PSURfRkxBU0hfQ0hLU1VNLCBOVUxMKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgICB6ZmlEYmdSZWFkRmxhc2ggICAgICAgICAgICAgKi8KKy8qICAgICAgUmVhZCBGbGFzaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGFkZHIgOiBTdGFydCBhZGRyZXNzIG9mIHJlYWQgZmxhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBsZW4gOiB0b3RhbCBsZW50aCBvZiByZWFkIGZsYXNoIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAwIDogc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgb3RoZXIgOiBmYWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQVVUSE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgUGF1bCAgICAgICAgICAgICAgICBBdGhlcm9zIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNy4wOSAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMl90IHpmaURiZ1JlYWRGbGFzaCh6ZGV2X3QgKmRldiwgdTMyX3QgYWRkciwgdTMyX3QgbGVuKQoreworICAgIHUzMl90IGNtZFsoWk1fTUFYX0NNRF9TSVpFLzQpXTsKKyAgICB1MzJfdCByZXQ7CisKKyAgICBjbWRbMF0gPSBsZW4gfCAoWk1fQ01EX0ZMQVNIX1JFQUQgPDwgOCk7CisgICAgY21kWzFdID0gYWRkcjsKKworICAgIHJldCA9IHpmSXNzdWVDbWQoZGV2LCBjbWQsIDgsIFpNX09JRF9GTEFTSF9SRUFELCBOVUxMKTsKKyAgICByZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZpRG93bmxvYWRGd1NldCAgICAgICAgICAgICovCisvKiAgICAgIEJlZm9yZSBEb3dubG9hZCBGVywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBDb21tYW5kIEZXIHRvIFNvZnR3YXJlIHJlc2V0IGFuZCBjbG9zZSB3YXRjaCBkb2cgY29udHJvbC4gICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgT1VUUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgMCA6IHN1Y2Nlc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG90aGVyIDogZmFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFBhdWwgICAgICAgICAgICAgICAgQXRoZXJvcyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDcuMDkgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit1MzJfdCB6ZmlEb3dubG9hZEZ3U2V0KHpkZXZfdCAqZGV2KQoreworLy9zb2Z0d2FyZXJlc2V0CisvL2Nsb3NlIHdhdGNoIGRvZworICAgIHUzMl90IGNtZFsoWk1fTUFYX0NNRF9TSVpFLzQpXTsKKyAgICB1MzJfdCByZXQ7CisKKyAgICBjbWRbMF0gPSAweDAwMDAwMDA4IHwgKFpNX0NNRF9GV19ETF9JTklUIDw8IDgpOworCisgICAgcmV0ID0gemZJc3N1ZUNtZChkZXYsIGNtZCwgMTIsIFpNX09JRF9GV19ETF9JTklULCBOVUxMKTsKKworICAgIHJldHVybiByZXQ7Cit9CisvL1BhdWwtLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHB1c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yjc2ZGU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwdXNiLmMKQEAgLTAsMCArMSwxNTg0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDUgWnlEQVMgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTW9kdWxlIE5hbWUgOiB1ZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBBYnN0cmFjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFRoaXMgbW9kdWxlIGNvbnRhaW5zIFVTQiBkZXNjcmlwdG9yIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBOT1RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSAiLi4vODAyMTFjb3JlL2NwcmVjb21wLmgiCisjaW5jbHVkZSAiaHBhbmkuaCIKKyNpbmNsdWRlICJocHVzYi5oIgorCitleHRlcm4gdm9pZCB6ZndVc2JDbWQoemRldl90KiBkZXYsIHU4X3QgZW5kcHQsIHUzMl90KiBjbWQsIHUxNl90IGNtZExlbik7CisKK2V4dGVybiB2b2lkIHpmSWRsUnNwKHpkZXZfdCogZGV2LCB1MzJfdCogcnNwLCB1MTZfdCByc3BMZW4pOworZXh0ZXJuIHUxNl90IHpmRGVsYXlXcml0ZUludGVybmFsUmVnKHpkZXZfdCogZGV2LCB1MzJfdCBhZGRyLCB1MzJfdCB2YWwpOworZXh0ZXJuIHUxNl90IHpmRmx1c2hEZWxheVdyaXRlKHpkZXZfdCogZGV2KTsKKworCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9UWF9JTkRFWCAgIDEKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1JYX0lOREVYICAgMgorI2RlZmluZSBVU0JfRU5EUE9JTlRfSU5UX0lOREVYICAzCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9DTURfSU5ERVggIDQKKwordm9pZCB6ZklkbENtZCh6ZGV2X3QqIGRldiwgdTMyX3QqIGNtZCwgdTE2X3QgY21kTGVuKQoreworI2lmIFpNX1NXX0xPT1BfQkFDSyAhPSAxCisgICAgemZ3VXNiQ21kKGRldiwgVVNCX0VORFBPSU5UX0NNRF9JTkRFWCwgY21kLCBjbWRMZW4pOworI2VuZGlmCisKKyAgICByZXR1cm47Cit9CisKKworLyogemZBZGp1c3RDdHJsU2V0dGluZzogZml0IE9VVFMgZm9ybWF0ICovCisvKiAgICAgY29udmVydCBNSU1PMiB0byBPVVRTICAgICAgICAgICAgICovCit2b2lkIHpmQWRqdXN0Q3RybFNldHRpbmcoemRldl90KiBkZXYsIHUxNl90KiBoZWFkZXIsIHpidWZfdCogYnVmKQoreworICAgIC8qIE1JTU8yID0+IE9VVFMgRkItNTAgKi8KKyAgICAvKiBsZW5ndGggbm90IGNoYW5nZSwgb25seSBtb2RpZnkgZm9ybWF0ICovCisKKyAgICB1MzJfdCBvbGRNVDsKKwl1MzJfdCBvbGRNQ1M7CisKKyAgICB1MzJfdCBwaHlDdHJsOworICAgIHUzMl90IG9sZFBoeUN0cmw7CisKKyAgICB1MTZfdCB0cGMgPSAwOworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisKKyAgIC8qIG1tICovCisgICAgaWYgKGhlYWRlciA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgb2xkUGh5Q3RybCA9IHptd19idWZfcmVhZGgoZGV2LCBidWYsIDQpIHwgKCh1MzJfdCl6bXdfYnVmX3JlYWRoKGRldiwgYnVmLCA2KSA8PCAxNik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG9sZFBoeUN0cmwgPSBoZWFkZXJbMl0gfCAoKHUzMl90KWhlYWRlclszXSA8PDE2KTsKKyAgICB9CisKKwlwaHlDdHJsID0gMDsKKworCisJLyogTVQgOiBCaXRbMX4wXSAqLworCW9sZE1UID0gb2xkUGh5Q3RybCYweDM7CisJcGh5Q3RybCB8PSBvbGRNVDsKKyAgICBpZiAoIG9sZE1UID09IDB4MyApICAgLyogREwtT0ZETSAoRHVwbGljYXRlIExlZ2FjeSBPRkRNKSAqLworCQlwaHlDdHJsIHw9IDB4MTsKKworCisJLyogUFQgOiBCaXRbMl0gICAgSFQgUFQ6IDAgTWl4ZWQgbW9kZSAgICAxIEdyZWVuIGZpZWxkICovCisJcGh5Q3RybCB8PSAob2xkUGh5Q3RybCYweDQpOworCisJLyogQmFuZHdpZHRoIGNvbnRyb2wgOiBCaXRbNH4zXSAqLworCWlmICggb2xkUGh5Q3RybCYweDgwMDAwMCApICAgIC8qIEJpdDIzIDogNDBNICovCisJeworCQkjaWYgMAorCQlpZiAob2xkTVQgPT0gMHgzKSAgICAgICAgICAgICAvKiBETC1PRkRNICovCisgICAgICAgICAgICBwaHlDdHJsIHw9ICgweDM8PDMpOyAgIC8qIDQwTSBkdXBsaWNhdGUgKi8KKwkJZWxzZQorCQkJcGh5Q3RybCB8PSAoMHgyPDwzKTsgICAvKiA0ME0gc2hhcmVkICovCisJCSNlbHNlCisJCWlmIChvbGRNVCA9PSAweDIgJiYgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5od0J3NDApCisJCXsKKwkJCXBoeUN0cmwgfD0gKDB4Mjw8Myk7ICAgLyogNDBNIHNoYXJlZCAqLworCQl9CisJCSNlbmRpZgorCX0KKwllbHNlIHsKKyAgICAgICAgb2xkUGh5Q3RybCAmPSB+MHg4MDAwMDAwMDsKKyAgICB9CisKKwkvKiBNQ1MgOiBCaXRbMjR+MThdICovCisJb2xkTUNTID0gKG9sZFBoeUN0cmwmMHg3ZjAwMDApPj4xNjsgIC8qIEJpdFsyMn4xNl0gKi8KKwlwaHlDdHJsIHw9IChvbGRNQ1M8PDE4KTsKKworCS8qIFNob3J0IEdJIDogQml0WzMxXSovCisgICAgcGh5Q3RybCB8PSAob2xkUGh5Q3RybCYweDgwMDAwMDAwKTsKKworCS8qIEFNIDogQW50ZW5uYSBtYXNrICovCisJLy9pZiAoKG9sZE1UID09IDIpICYmIChvbGRNQ1MgPiA3KSkKKwlpZiAoaHBQcml2LT5oYWxDYXBhYmlsaXR5ICYgWk1fSFBfQ0FQXzExTl9PTkVfVFhfU1RSRUFNKQorCXsKKwkgICAgcGh5Q3RybCB8PSAoMHgxPDwxNSk7CisJfQorCWVsc2UKKwl7CisJICAgIC8qIEhUICAgICAgICAgICAgICAgICAgICAgVHggMiBjaGFpbiAqLworCSAgICAvKiBPRkRNIDZNLzlNLzEyTS8xOE0vMjRNIFR4IDIgY2hhaW4gKi8KKwkgICAgLyogT0ZETSAzNk0vNDhNLzU0TS8gICAgICBUeCAxIGNoYWluICovCisJICAgIC8qIENDSyAgICAgICAgICAgICAgICAgICAgVHggMiBjaGFpbiAqLworCSAgICBpZiAoKG9sZE1UID09IDIpIHx8IChvbGRNVCA9PSAzKSkKKwkgICAgeworCSAgICAgICAgcGh5Q3RybCB8PSAoMHg1PDwxNSk7CisJICAgIH0KKwkgICAgZWxzZSBpZiAob2xkTVQgPT0gMSkKKwkgICAgeworCSAgICAgICAgaWYgKChvbGRNQ1MgPT0gMHhiKSB8fCAob2xkTUNTID09IDB4ZikgfHwKKwkgICAgICAgICAgICAob2xkTUNTID09IDB4YSkgfHwgKG9sZE1DUyA9PSAweGUpIHx8CisJICAgICAgICAgICAgKG9sZE1DUyA9PSAweDkpKSAgICAgICAgICAgICAgICAgICAgICAgLy82TS85TS8xMk0vMThNLzI0TQorCSAgICAgICAgeworCSAgICAgICAgICAgIHBoeUN0cmwgfD0gKDB4NTw8MTUpOworCSAgICAgICAgfQorCSAgICAgICAgZWxzZQorCSAgICAgICAgeworCSAgICAgICAgICAgIHBoeUN0cmwgfD0gKDB4MTw8MTUpOworCSAgICAgICAgfQorCSAgICB9CisJICAgIGVsc2UgLy8ob2xkTVQ9PTApCisJICAgIHsKKwkgICAgICAgIHBoeUN0cmwgfD0gKDB4NTw8MTUpOworCSAgICB9CisJfQorCS8vZWxzZQorCS8vICAgIHBoeUN0cmwgfD0gKDB4MTw8MTUpOworCisJLyogVFBDICovCisJLyogVE9ETyA6IGFjY2VsZXJhdGluZyB0aGVzZSBjb2RlICovCisJaWYgKGhwUHJpdi0+aHdGcmVxdWVuY3kgPCAzMDAwKQorCXsKKyAgICAgICAgaWYgKG9sZE1UID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENDSyAqLworICAgICAgICAgICAgdHBjID0gKGhwUHJpdi0+dFBvdzJ4Q2NrW29sZE1DU10mMHgzZik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAob2xkTVQgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogT0ZETSAqLworICAgICAgICAgICAgaWYgKG9sZE1DUyA9PSAweGMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHBjID0gKGhwUHJpdi0+dFBvdzJ4MmdbM10mMHgzZik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChvbGRNQ1MgPT0gMHg4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRwYyA9IChocFByaXYtPnRQb3cyeDJnWzJdJjB4M2YpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAob2xkTUNTID09IDB4ZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cGMgPSAoaHBQcml2LT50UG93MngyZ1sxXSYweDNmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG9sZE1DUyA9PSAweDkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHBjID0gKChocFByaXYtPnRQb3cyeDJnWzBdLWhwUHJpdi0+dFBvdzJ4MmcyNEhlYXZ5Q2xpcE9mZnNldCkmMHgzZik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHBjID0gKGhwUHJpdi0+dFBvdzJ4MmdbMF0mMHgzZik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAob2xkTVQgPT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCBvbGRQaHlDdHJsJjB4ODAwMDAwICkgICAgLyogQml0MjMgOiA0ME0gKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBIVCA0MCAqLworICAgICAgICAgICAgICAgIHRwYyA9IChocFByaXYtPnRQb3cyeDJnSHQ0MFtvbGRNQ1MmMHg3XSYweDNmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBIVCAyMCAqLworICAgICAgICAgICAgICAgIHRwYyA9IChocFByaXYtPnRQb3cyeDJnSHQyMFtvbGRNQ1MmMHg3XSYweDNmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlICAvLzVHSHoKKyAgICB7CisgICAgICAgIGlmIChvbGRNVCA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBPRkRNICovCisgICAgICAgICAgICBpZiAob2xkTUNTID09IDB4YykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cGMgPSAoaHBQcml2LT50UG93Mng1Z1szXSYweDNmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG9sZE1DUyA9PSAweDgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHBjID0gKGhwUHJpdi0+dFBvdzJ4NWdbMl0mMHgzZik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChvbGRNQ1MgPT0gMHhkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRwYyA9IChocFByaXYtPnRQb3cyeDVnWzFdJjB4M2YpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRwYyA9IChocFByaXYtPnRQb3cyeDVnWzBdJjB4M2YpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG9sZE1UID09IDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggb2xkUGh5Q3RybCYweDgwMDAwMCApICAgIC8qIEJpdDIzIDogNDBNICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogSFQgNDAgKi8KKyAgICAgICAgICAgICAgICB0cGMgPSAoaHBQcml2LT50UG93Mng1Z0h0NDBbb2xkTUNTJjB4N10mMHgzZik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogSFQgMjAgKi8KKyAgICAgICAgICAgICAgICB0cGMgPSAoaHBQcml2LT50UG93Mng1Z0h0MjBbb2xkTUNTJjB4N10mMHgzZik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBUeCBwb3dlciBhZGp1c3QgZm9yIEhUNDAgKi8KKwkvKiBIVDQwICAgKzFkQm0gKi8KKwlpZiAoKG9sZE1UPT0yKSAmJiAob2xkUGh5Q3RybCYweDgwMDAwMCkgKQorCXsKKwkgICAgdHBjICs9IDI7CisJfQorCXRwYyAmPSAweDNmOworCisgICAgLyogRXZsIGZvcmNlIHR4IFRQQyAqLworICAgIGlmKHdkLT5mb3JjZVR4VFBDKQorICAgIHsKKyAgICAgICAgdHBjID0gKHUxNl90KSh3ZC0+Zm9yY2VUeFRQQyAmIDB4M2YpOworICAgIH0KKworICAgIGlmIChocFByaXYtPmh3RnJlcXVlbmN5IDwgMzAwMCkgeworICAgICAgICB3ZC0+bWF4VHhQb3dlcjIgJj0gMHgzZjsKKyAgICAgICAgdHBjID0gKHRwYyA+IHdkLT5tYXhUeFBvd2VyMik/IHdkLT5tYXhUeFBvd2VyMiA6IHRwYzsKKyAgICB9IGVsc2UgeworICAgICAgICB3ZC0+bWF4VHhQb3dlcjUgJj0gMHgzZjsKKyAgICAgICAgdHBjID0gKHRwYyA+IHdkLT5tYXhUeFBvd2VyNSk/IHdkLT5tYXhUeFBvd2VyNSA6IHRwYzsKKyAgICB9CisKKworI2RlZmluZSBaTV9NSU5fVFBDICAgICA1CisjZGVmaW5lIFpNX1RQQ19PRkZTRVQgIDUKKyNkZWZpbmUgWk1fU0lHTkFMX1RIUkVTSE9MRCAgNTYKKyAgICBpZiAoKHdkLT5zdGEuYlNjaGVkdWxlU2NhbiA9PSBGQUxTRSkgJiYgKHdkLT5zdGEuYkNoYW5uZWxTY2FuID09IEZBTFNFKSkKKyAgICB7CisgICAgICAgIGlmICgoIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFICkKKyAgICAgICAgICAgICAgICAmJiAoemZTdGFJc0Nvbm5lY3RlZChkZXYpKQorICAgICAgICAgICAgICAgICYmICh3ZC0+U2lnbmFsU3RyZW5ndGggPiBaTV9TSUdOQUxfVEhSRVNIT0xEKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRwYyA+ICgoWk1fTUlOX1RQQytaTV9UUENfT0ZGU0VUKSoyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cGMgLT0gKFpNX1RQQ19PRkZTRVQqMik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0cGMgPiAoWk1fTUlOX1RQQyoyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cGMgPSAoWk1fTUlOX1RQQyoyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyN1bmRlZiBaTV9NSU5fVFBDCisjdW5kZWYgWk1fVFBDX09GRlNFVAorI3VuZGVmIFpNX1NJR05BTF9USFJFU0hPTEQKKworICAgICNpZm5kZWYgWk1fT1RVU19MSU5VWF9QSEFTRV8yCisgICAgcGh5Q3RybCB8PSAodHBjICYgMHgzZikgPDwgOTsKKyAgICAjZW5kaWYKKworICAgIC8qIFNldCBiaXRzWzg6Nl1CRi1NQ1MgZm9yIGhlYXZ5IGNsaXAgKi8KKyAgICBpZiAoKHBoeUN0cmwmMHgzKSA9PSAyKQorCXsKKwkgICAgcGh5Q3RybCB8PSAoKHBoeUN0cmwgPj4gMTIpICYgMHgxYzApOworICAgIH0KKworCS8qIFBIWSBjb250cm9sICovCisgICAgaWYgKGhlYWRlciA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgem13X2J1Zl93cml0ZWgoZGV2LCBidWYsIDQsICh1MTZfdCkgKHBoeUN0cmwmMHhmZmZmKSk7CisgICAgICAgIHptd19idWZfd3JpdGVoKGRldiwgYnVmLCA2LCAodTE2X3QpIChwaHlDdHJsPj4xNikpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvL1BIWSBjb250cm9sIEwKKyAgICAgICAgaGVhZGVyWzJdID0gKHUxNl90KSAocGh5Q3RybCYweGZmZmYpOworICAgICAgICAvL1BIWSBjb250cm9sIEgKKyAgICAgICAgaGVhZGVyWzNdID0gKHUxNl90KSAocGh5Q3RybD4+MTYpOworICAgIH0KKworCXptX21zZzJfdHgoWk1fTFZfMiwgIm9sZCBwaHkgY3RybCA9ICIsIG9sZFBoeUN0cmwpOworICAgIHptX21zZzJfdHgoWk1fTFZfMiwgIm5ldyBwaHkgY3RybCA9ICIsIHBoeUN0cmwpOworCS8vRGJnUHJpbnQoIm9sZCBwaHkgY3RybCA9JTA4eCBcbiIsIG9sZFBoeUN0cmwpOworICAgIC8vRGJnUHJpbnQoIm5ldyBwaHkgY3RybCA9JTA4eCBcbiIsIHBoeUN0cmwpOworfQorCisKKyNkZWZpbmUgRVhUUkFfSU5GT19MRU4gICAgICAyNCAgICAvL1JTU0koNykgKyBFVk0oMTIpICsgUEhZKDEpICsgTUFDU3RhdHVzKDQpCit1MTZfdCB6ZkhwU2VuZCh6ZGV2X3QqIGRldiwgdTE2X3QqIGhlYWRlciwgdTE2X3QgaGVhZGVyTGVuLAorICAgICAgICAgICAgICAgIHUxNl90KiBzbmFwLCB1MTZfdCBzbmFwTGVuLAorICAgICAgICAgICAgICAgIHUxNl90KiB0YWlsLCB1MTZfdCB0YWlsTGVuLCB6YnVmX3QqIGJ1ZiwgdTE2X3Qgb2Zmc2V0LAorICAgICAgICAgICAgICAgIHUxNl90IGJ1ZlR5cGUsIHU4X3QgYWMsIHU4X3Qga2V5SWR4KQoreworI2lmIFpNX1NXX0xPT1BfQkFDSyA9PSAxCisgICAgemJ1Zl90ICpyeGJ1ZjsKKyAgICB1OF90ICpwdVJ4QnVmOworICAgIHU4X3QgKnBIZHI7CisJICAgdThfdCAqcHNuYXA7CisJICAgdTE2X3QgcGxjcGxlbiA9IDEyOworICAgIHUxNl90IGk7CisgICAJdTE2X3Qgc3dscE9mZnNldDsKKyNlbmRpZiAvKiAjaWYgWk1fU1dfTE9PUF9CQUNLID09IDEgKi8KKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKworICAgIHptX21zZzFfdHgoWk1fTFZfMSwgInpmSHBTZW5kKCksIGxlbiA9ICIsIDEyICsgaGVhZGVyTGVuLTggKyBzbmFwTGVuICsgemZ3QnVmR2V0U2l6ZShkZXYsIGJ1ZikgKyA0ICsgOCk7CisKKwkvKiBBZGp1c3QgY3RybCBzZXR0aW5nIDogNk4xNCB5anN1bmcgKi8KKyAgICB6ZkFkanVzdEN0cmxTZXR0aW5nKGRldiwgaGVhZGVyLCBidWYpOworCisjaWYgWk1fU1dfTE9PUF9CQUNLICE9IDEKKyAgICBocFByaXYtPnVzYlNlbmRCeXRlcyArPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsKKyAgICBocFByaXYtPnVzYkFjU2VuZEJ5dGVzW2FjJjB4M10gKz0gemZ3QnVmR2V0U2l6ZShkZXYsIGJ1Zik7CisKKyAgICAvKiBTdWJtaXQgVVNCIE91dCBVcmIgKi8KKyAgICB6ZndVc2JTZW5kKGRldiwgVVNCX0VORFBPSU5UX1RYX0lOREVYLCAodThfdCAqKWhlYWRlciwgaGVhZGVyTGVuLAorICAgICAgICAgICAgICAgICAgKHU4X3QgKilzbmFwLCBzbmFwTGVuLCAodThfdCAqKXRhaWwsIHRhaWxMZW4sIGJ1Ziwgb2Zmc2V0KTsKKyNlbmRpZgorCisjaWYgWk1fU1dfTE9PUF9CQUNLID09IDEKKworICAgIHJ4YnVmID0gemZ3QnVmQWxsb2NhdGUoZGV2LCBwbGNwbGVuICsgaGVhZGVyTGVuLTggKyBzbmFwTGVuICsgKHpmd0J1ZkdldFNpemUoZGV2LCBidWYpLW9mZnNldCkgKyA0ICsgRVhUUkFfSU5GT19MRU4pOworICAgIHBIZHIgPSAodThfdCAqKSBoZWFkZXIrODsKKyAgIAlwc25hcCA9ICh1OF90ICopIHNuYXA7CisKKyAgICB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIC8qIHNvZnR3YXJlIGxvb3AgYmFjayAqLworICAgIC8qIENvcHkgV0xBTiBoZWFkZXIgYW5kIHBhY2tldCBidWZmZXIgKi8KKyAgIAlzd2xwT2Zmc2V0ID0gcGxjcGxlbjsKKworICAgIGZvcihpID0gMDsgaSA8IGhlYWRlckxlbi04OyBpKyspCisgICAgeworICAgICAgICB6bXdfcnhfYnVmX3dyaXRlYihkZXYsIHJ4YnVmLCBzd2xwT2Zmc2V0K2ksIHBIZHJbaV0pOworICAgIH0KKworICAgCXN3bHBPZmZzZXQgKz0gaGVhZGVyTGVuLTg7CisKKyAgICAvKiBDb3B5IFNOQVAgaGVhZGVyICovCisgICAgZm9yKGkgPSAwOyBpIDwgc25hcExlbjsgaSsrKQorICAgIHsKKwkJICAgICAgem13X3J4X2J1Zl93cml0ZWIoZGV2LCByeGJ1Ziwgc3dscE9mZnNldCtpLCBwc25hcFtpXSk7CisgICAgfQorCisJICAgc3dscE9mZnNldCArPSBzbmFwTGVuOworCisgICAgLyogQ29weSBib2R5IGZyb20gdHggYnVmIHRvIHJ4YnVmICovCisgICAgZm9yKGkgPSAwOyBpIDwgKHpmd0J1ZkdldFNpemUoZGV2LCBidWYpLW9mZnNldCk7IGkrKykKKyAgICB7CisgICAgICAgIHU4X3QgdmFsdWUgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBpK29mZnNldCk7CisgICAgICAgIHptd19yeF9idWZfd3JpdGViKGRldiwgcnhidWYsIHN3bHBPZmZzZXQraSwgdmFsdWUpOworICAgIH0KKworCSAgIC8qIHRvdGFsIGxlbmd0aCA9IFBMQ1AgKyAgICAgICAgIE1hY0hlYWRlciAgICAgICArIFBheWxvYWQgICArIEZDUyArIFJYc3RhdHVzICovCisJICAgLyogICAgICAgICAgICAgICAgIDEyICArICBoZWFkZXJMZW4tOCAgKyBzbmFwTGVuICsgYnVmIGxlbmd0aCArIDQgICsgOCAgICAgICAgKi8KKyAgIAl6ZndTZXRCdWZTZXRTaXplKGRldiwgcnhidWYsIHN3bHBPZmZzZXQgKyAoemZ3QnVmR2V0U2l6ZShkZXYsIGJ1Ziktb2Zmc2V0KSArIDQgKyBFWFRSQV9JTkZPX0xFTiApOworCisgICAgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KTsKKworICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIDApOworCisJICAgLy96ZndEdW1wQnVmKGRldiwgcnhidWYpOworCSAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy96ZkNvcmVSZWN2KGRldiwgcnhidWYpOworCisjZW5kaWYgLyogI2lmIFpNX1NXX0xPT1BfQkFDSyAqLworCisgICAgcmV0dXJuIFpNX1NVQ0NFU1M7Cit9CisKKy8qIFJlcG9ydCBtb25pdGVyIEhhbCByeCBpbmZvcm1hdGlvbiBhYm91dCByc3NpLCBldm0sIGJhbmR3aWR0aCwgU0cgZXRjICovCit2b2lkIHpmSHBRdWVyeU1vbkhhbFJ4SW5mbyh6ZGV2X3QqIGRldiwgdThfdCAqbW9uSGFsUnhJbmZvKQoreworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICB6Zk1lbW9yeUNvcHkobW9uSGFsUnhJbmZvLAorICAgICAgICAgICAgICAgICh1OF90KikmKCgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aGFsUnhJbmZvKSwKKyAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHpzSGFsUnhJbmZvKSk7Cit9CisKKwordThfdCB6ZklzRGF0YUZyYW1lKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZikKK3sKKyAgICB1OF90IGZyYW1lVHlwZTsKKyAgICB1OF90IG1wZHVJbmQ7CisKKyAgICBtcGR1SW5kID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgemZ3QnVmR2V0U2l6ZShkZXYsIGJ1ZiktMSk7CisKKyAgICAvKiBzaW5sZ2Ugb3IgRmlyc3QgKi8KKyAgICBpZiAoKG1wZHVJbmQgJiAweDMwKSA9PSAweDAwIHx8IChtcGR1SW5kICYgMHgzMCkgPT0gMHgyMCkKKyAgICB7CisgICAgICAgIGZyYW1lVHlwZSA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDEyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZnJhbWVUeXBlID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMCk7CisgICAgfQorCisgICAgaWYoKGZyYW1lVHlwZSAmIDB4ZikgPT0gWk1fV0xBTl9EQVRBX0ZSQU1FKQorICAgICAgICByZXR1cm4gMTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCit1MzJfdCB6ZmNDb252ZXJ0UmF0ZU9GRE0oemRldl90KiBkZXYsIHpidWZfdCogYnVmKQoreworICAgIC8vIFdoYXQncyB0aGUgZGVmYXVsdCB2YWx1ZT8/CisgICAgdTMyX3QgTUNTID0gMDsKKworICAgIHN3aXRjaCh6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAwKSYgMHhmKQorICAgIHsKKyAgICAgICAgY2FzZSAweGI6CisgICAgICAgICAgICBNQ1MgPSAweDQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweGY6CisgICAgICAgICAgICBNQ1MgPSAweDU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweGE6CisgICAgICAgICAgICBNQ1MgPSAweDY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweGU6CisgICAgICAgICAgICBNQ1MgPSAweDc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDk6CisgICAgICAgICAgICBNQ1MgPSAweDg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweGQ6CisgICAgICAgICAgICBNQ1MgPSAweDk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDg6CisgICAgICAgICAgICBNQ1MgPSAweGE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweGM6CisgICAgICAgICAgICBNQ1MgPSAweGI7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIE1DUzsKK30KKwordTE2X3QgemZIcEdldFBheWxvYWRMZW4oemRldl90KiBkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICB6YnVmX3QqIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxNl90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxNl90IHBsY3BIZHJMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICB1MzJfdCAqcnhNVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHUzMl90ICpyeE1DUywKKyAgICAgICAgICAgICAgICAgICAgICAgIHUzMl90ICpyeEJXLAorICAgICAgICAgICAgICAgICAgICAgICAgdTMyX3QgKnJ4U0cKKyAgICAgICAgICAgICAgICAgICAgICAgICkKK3sKKyAgICB1OF90IG1vZHVsYXRpb24sbXBkdUluZDsKKyAgICB1MTZfdCBsb3csIGhpZ2gsIG1zYjsKKyAgICBzMTZfdCBwYXlsb2FkTGVuID0gMDsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIG1wZHVJbmQgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBsZW4tMSk7CisgICAgbW9kdWxhdGlvbiA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIChsZW4tMSkpICYgMHgzOworICAgICpyeE1UID0gbW9kdWxhdGlvbjsKKworICAgIC8vem1fZGVidWdfbXNnMSgiIG1vZHVsYXRpb249ICIsIG1vZHVsYXRpb24pOworICAgIHN3aXRjaCAobW9kdWxhdGlvbikgeworICAgIGNhc2UgMDogLyogQ0NLIE1vZGUgKi8KKyAgICAgICAgbG93ID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMik7CisgICAgICAgIGhpZ2ggPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAzKTsKKyAgICAgICAgcGF5bG9hZExlbiA9IChsb3cgfCBoaWdoIDw8IDgpIC0gNDsKKyAgICAgICAgaWYgKHdkLT5lbmFibGVIQUxEYmdJbmZvKQorICAgICAgICB7CisgICAgICAgICAgICAqcnhNQ1MgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAwKTsKKyAgICAgICAgICAgICpyeEJXICA9IDA7CisgICAgICAgICAgICAqcnhTRyAgPSAwOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMTogLyogTGVnYWN5LU9GRE0gbW9kZSAqLworICAgICAgICBsb3cgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAwKSA+PiA1OworICAgICAgICBoaWdoID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMSk7CisgICAgICAgIG1zYiA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDIpICYgMHgxOworICAgICAgICBwYXlsb2FkTGVuID0gKGxvdyB8IChoaWdoIDw8IDMpIHwgKG1zYiA8PCAxMSkpIC0gNDsKKyAgICAgICAgaWYgKHdkLT5lbmFibGVIQUxEYmdJbmZvKQorICAgICAgICB7CisgICAgICAgICAgICAqcnhNQ1MgPSB6ZmNDb252ZXJ0UmF0ZU9GRE0oZGV2LCBidWYpOworICAgICAgICAgICAgKnJ4QlcgID0gMDsKKyAgICAgICAgICAgICpyeFNHICA9IDA7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOiAvKiBIVCBPRkRNIG1vZGUgKi8KKyAgICAgICAgLy96bV9kZWJ1Z19tc2cxKCJhZ2dyZWdhdGlvbj0gIiwgKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDYpID4+IDMpICYweDEgKTsKKyAgICAgICAgaWYgKChtcGR1SW5kICYgMHgzMCkgPT0gMHgwMCB8fCAobXBkdUluZCAmIDB4MzApID09IDB4MTApICAgIC8vc2luZ2xlIG9yIGxhc3QgbXBkdQorICAgICAgICAgICAgcGF5bG9hZExlbiA9IGxlbiAtIDI0IC0gNCAtIHBsY3BIZHJMZW47ICAvLyAtIHJ4U3RhdHVzIC0gZmNzCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGF5bG9hZExlbiA9IGxlbiAtIDQgLSA0IC0gcGxjcEhkckxlbjsgIC8vIC0gcnhTdGF0dXMgLSBmY3MKKyAgICAgICAgICAgIC8vem1fZGVidWdfbXNnMSgiZmlyc3Qgb3IgbWlkZGxlIG1wZHUsIHBsY3BIZHJMZW49ICIsIHBsY3BIZHJMZW4pOworICAgICAgICB9CisgICAgICAgIGlmICh3ZC0+ZW5hYmxlSEFMRGJnSW5mbykKKyAgICAgICAgeworICAgICAgICAgICAgKnJ4TUNTID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMykgJiAweDdmOworICAgICAgICAgICAgKnJ4QlcgID0gKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDMpID4+IDcpICYgMHgxOworICAgICAgICAgICAgKnJ4U0cgID0gKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDYpID4+IDcpICYgMHgxOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworCisgICAgfQorICAgIC8qIHJldHVybiB0aGUgcGF5bG9hZCBsZW5ndGggLSBGQ1MgKi8KKyAgICBpZiAocGF5bG9hZExlbiA8IDApIHBheWxvYWRMZW4gPSAwOworICAgIHJldHVybiBwYXlsb2FkTGVuOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEZVTkNUSU9OIERFU0NSSVBUSU9OICAgICAgICAgICAgICAgICAgemZpVXNiUmVjdiAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBVU0IgSU4gVHJhbnNmZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIElOUFVUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGRldjogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFl1YW4tR3UgV2VpICAgICAgICBaeURBUyBUZWNobm9sb2d5IENvcnBvcmF0aW9uICAgIDIwMDUuMTAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFpNX0lOVF9VU0VfRVAyICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgWk1fSU5UX1VTRV9FUDJfSEVBREVSX1NJWkUgICAxMgorCisjaWYgWk1fSU5UX1VTRV9FUDIgPT0gMQordm9pZCB6ZmlVc2JSZWdJbih6ZGV2X3QqIGRldiwgdTMyX3QqIHJzcCwgdTE2X3QgcnNwTGVuKTsKKyNlbmRpZgorCisjaWZkZWYgWk1fT1RVU19SWF9TVFJFQU1fTU9ERQordm9pZCB6ZmlVc2JSZWN2UGVyUGt0KHpkZXZfdCAqZGV2LCB6YnVmX3QgKmJ1ZikKKyNlbHNlCit2b2lkIHpmaVVzYlJlY3YoemRldl90ICpkZXYsIHpidWZfdCAqYnVmKQorI2VuZGlmCit7CisKKworI2lmIFpNX0ZXX0xPT1BfQkFDSyAhPSAxCisgICAgdThfdCBtcGR1SW5kOworICAgIHUxNl90IHBsY3BIZHJMZW47CisgICAgdTE2X3QgY3JjUGx1c1J4U3RhdHVzTGVuOworICAgIHUxNl90IGxlbiwgcGF5bG9hZExlbj0wOworICAgIHUxNl90IGk7IC8vQ1dZYW5nKCspCisgICAgc3RydWN0IHpzQWRkaXRpb25JbmZvIGFkZEluZm87CisgICAgdTMyX3QgICAgICAgICAgICAgICByeE1UOworICAgIHUzMl90ICAgICAgICAgICAgICAgcnhNQ1M7CisgICAgdTMyX3QgICAgICAgICAgICAgICByeEJXOworICAgIHUzMl90ICAgICAgICAgICAgICAgcnhTRzsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKworICAgIC8vem1fbXNnMF9yeChaTV9MVl8wLCAiemZpVXNiUmVjdigpIik7CisKKyNpZiBaTV9JTlRfVVNFX0VQMiA9PSAxCisKKyAgICBmb3IgKGk9MDsgaTwoWk1fSU5UX1VTRV9FUDJfSEVBREVSX1NJWkU+PjEpOyBpKyspCisgICAgeworICAgICAgICBpZiAoem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgaSoyKSAhPSAweGZmZmYpCisgICAgICAgIAlicmVhazsKKyAgICB9CisKKyAgICBpZiAoaT09KFpNX0lOVF9VU0VfRVAyX0hFQURFUl9TSVpFPj4xKSkKKyAgICB7CisgICAgICAgIHUzMl90ICAgICAgICAgICAgICAgcnNwW1pNX1VTQl9NQVhfRVBJTlRfQlVGRkVSLzRdOworICAgICAgICB1MTZfdCAgICAgICAgICAgICAgIHJzcExlbjsKKyAgICAgICAgdTMyX3QgICAgICAgICAgICAgICByc3BpOworICAgICAgICB1OF90KiAgICAgICAgICAgICAgIHBkc3QgPSAodThfdCopcnNwOworCisgICAgICAgIC8qIEludGVycnVwdCBSc3AgKi8KKyAgICAgICAgcnNwTGVuID0gKHUxNl90KSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKS1aTV9JTlRfVVNFX0VQMl9IRUFERVJfU0laRTsKKworICAgICAgICBpZiAocnNwTGVuID4gNjApCisgICAgICAgIHsKKyAgICAgICAgICAgIHptX2RlYnVnX21zZzEoIkdldCBlcnJvciBsZW4gYnkgRVAyID0gXG4iLCByc3BMZW4pOworICAgICAgICAgICAgLyogZnJlZSBVU0IgYnVmICovCisJICAgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIDApOworCSAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHJzcGk9MDsgcnNwaTxyc3BMZW47IHJzcGkrKykKKyAgICAgICAgeworICAgICAgICAJKnBkc3QgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCByc3BpK1pNX0lOVF9VU0VfRVAyX0hFQURFUl9TSVpFKTsKKyAgICAgICAgCXBkc3QrKzsKKyAgICAgICAgfQorCisgICAgICAgIC8vaWYgKGFkYXB0ZXItPnpmY2JVc2JSZWdJbikKKyAgICAgICAgLy8gICAgYWRhcHRlci0+emZjYlVzYlJlZ0luKGFkYXB0ZXIsIHJzcCwgcnNwTGVuKTsKKyAgICAgICAgemZpVXNiUmVnSW4oZGV2LCByc3AsIHJzcExlbik7CisKKwkgICAgICAvKiBmcmVlIFVTQiBidWYgKi8KKwkgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKwkgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmIC8qIGVuZCBvZiAjaWYgWk1fSU5UX1VTRV9FUDIgPT0gMSAqLworCisgICAgWk1fUEVSRk9STUFOQ0VfUlhfTVBEVShkZXYsIGJ1Zik7CisKKyAgICBpZiAod2QtPnN3U25pZmZlcikKKyAgICB7CisgICAgICAgIC8qIGFpcm9wZWVrOiBSZXBvcnQgZXZlcnl0aGluZyB1cCAqLworICAgICAgICBpZiAod2QtPnpmY2JSZWN2ODAyMTEgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgd2QtPnpmY2JSZWN2ODAyMTEoZGV2LCBidWYsIE5VTEwpOworICAgICAgICB9CisgICAgfQorCisgICAgLyogUmVhZCB0aGUgbGFzdCBieXRlICovCisgICAgbGVuID0gemZ3QnVmR2V0U2l6ZShkZXYsIGJ1Zik7CisgICAgbXBkdUluZCA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIGxlbi0xKTsKKworICAgIC8qIEZpcnN0IE1QRFUgKi8KKyAgICBpZigobXBkdUluZCAmIDB4MzApID09IDB4MjApCisgICAgeworICAgICAgICB1MTZfdCBkdXJhdGlvbjsKKyAgICAgICAgaWYgKHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDM2KSA9PSAwKSAvL0FDID0gQkUKKyAgICAgICAgeworICAgICAgICAgICAgZHVyYXRpb24gPSB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAxNCk7CisgICAgICAgICAgICBpZiAoZHVyYXRpb24gPiBocFByaXYtPmFnZ01heER1cmF0aW9uQkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaHBQcml2LT5hZ2dNYXhEdXJhdGlvbkJFID0gZHVyYXRpb247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGhwUHJpdi0+YWdnTWF4RHVyYXRpb25CRSA+IDEwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaHBQcml2LT5hZ2dNYXhEdXJhdGlvbkJFLS07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy9EYmdQcmludCgiYWdnTWF4RHVyYXRpb25CRT0lZCIsIGhwUHJpdi0+YWdnTWF4RHVyYXRpb25CRSk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiAxCisgICAgLyogRmlyc3QgTVBEVSBvciBTaW5nbGUgTVBEVSAqLworICAgIGlmKCgobXBkdUluZCAmIDB4MzApID09IDB4MDApIHx8ICgobXBkdUluZCAmIDB4MzApID09IDB4MjApKQorICAgIC8vaWYgKChtcGR1SW5kICYgMHgxMCkgPT0gMHgwMCkKKyAgICB7CisgICAgICAgIHBsY3BIZHJMZW4gPSAxMjsgICAgICAgIC8vIFBMQ1AgaGVhZGVyIGxlbmd0aAorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgNCkgPT0gd2QtPm1hY0FkZHJbMF0gJiYKKyAgICAgICAgICAgIHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDYpID09IHdkLT5tYWNBZGRyWzFdICYmCisgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCA4KSA9PSB3ZC0+bWFjQWRkclsyXSkgeworICAgICAgICAgICAgcGxjcEhkckxlbiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoem13X3J4X2J1Zl9yZWFkaChkZXYsIGJ1ZiwgMTYpID09IHdkLT5tYWNBZGRyWzBdICYmCisgICAgICAgICAgICAgICAgIHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIDE4KSA9PSB3ZC0+bWFjQWRkclsxXSAmJgorICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRoKGRldiwgYnVmLCAyMCkgPT0gd2QtPm1hY0FkZHJbMl0peworICAgICAgICAgICAgcGxjcEhkckxlbiA9IDEyOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGxjcEhkckxlbiA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBMYXN0IE1QRFUgb3IgU2luZ2xlIE1QRFUgKi8KKyAgICBpZiAoKG1wZHVJbmQgJiAweDMwKSA9PSAweDAwIHx8IChtcGR1SW5kICYgMHgzMCkgPT0gMHgxMCkKKyAgICB7CisgICAgICAgIGNyY1BsdXNSeFN0YXR1c0xlbiA9IEVYVFJBX0lORk9fTEVOICsgNDsgICAgIC8vIEV4dHJhIGJ5dGVzICsgRkNTCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNyY1BsdXNSeFN0YXR1c0xlbiA9IDQgKyA0OyAgICAgLy8gRXh0cmEgNCBieXRlcyArIEZDUworICAgIH0KKyNlbHNlCisgICAgcGxjcEhkckxlbiA9IDEyOworICAgIGNyY1BsdXNSeFN0YXR1c0xlbiA9IEVYVFJBX0lORk9fTEVOICsgNDsgICAgIC8vIEV4dHJhIGJ5dGVzICsgRkNTCisjZW5kaWYKKworICAgIGlmIChsZW4gPCAocGxjcEhkckxlbisxMCtjcmNQbHVzUnhTdGF0dXNMZW4pKQorICAgIHsKKyAgICAgICAgem1fbXNnMV9yeChaTV9MVl8wLCAiSW52YWxpZCBSeCBsZW5ndGg9IiwgbGVuKTsKKyAgICAgICAgLy96ZndEdW1wQnVmKGRldiwgYnVmKTsKKworICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIGRpc3BsYXkgUlNTSSBjb21iaW5lZCAqLworICAgIC8qCisgICAgICogonqid6J3oneid6J3oneid6J3oneid6J3oneid6Jzoneid6J3oneid6J3oneid6Jzoneid6J3oneid6J3onOid6J3oneid6J3oneic6J3oneid6J3oneid6J3oneid6Jzoneid6J3oneid6J3oneid6J3oneid6J3oneieworICAgICAqIKJ4IFBMQ1AgSGVhZGVyIKJ4ICBNUERVICCieCBSU1NJIKJ4ICBFVk0gonggUEhZIEVyciCieCAgTUFDIFN0YXR1cyCieAorICAgICAqIKJ1oneid6J3oneid6J3oneid6J3oneid6J3oneicaJ3oneid6J3oneid6J3oneicaJ3oneid6J3oneid6Jxoneid6J3oneid6J3onGid6J3oneid6J3oneid6J3oneicaJ3oneid6J3oneid6J3oneid6J3oneid6J3onQKKyAgICAgKiCieCAgICAgMTIgICAgICCieCAgICBuICAgonggIDcgICCieCAgMTIgIKJ4ICAgIDEgICAgonggICAgICA0ICAgICAgongKKyAgICAgKiCifKJ3oneid6J3oneid6J3oneid6J3oneid6J3onKid6J3oneid6J3oneid6J3onKid6J3oneid6J3oneicqJ3oneid6J3oneid6Jyoneid6J3oneid6J3oneid6J3onKid6J3oneid6J3oneid6J3oneid6J3oneid6J9CisgICAgICoJUlNTSSBmaWxlZCAoRnJvbSBCQiBhbmQgTUFDIGp1c3QgcGFzcyB0aGVtIHRvIGhvc3QpCisgICAgICogICBCeXRlMTogUlNTSSBmb3IgYW50ZW5uYSAwLgorICAgICAqICAgQnl0ZTI6IFJTU0kgZm9yIGFudGVubmEgMS4KKyAgICAgKiAgIEJ5dGUzOiBSU1NJIGZvciBhbnRlbm5hIDIuCisgICAgICogICBCeXRlNDogUlNTSSBmb3IgYW50ZW5uYSAwIGV4dGVuc2lvbi4KKyAgICAgKiAgIEJ5dGU1OiBSU1NJIGZvciBhbnRlbm5hIDEgZXh0ZW5zaW9uLgorICAgICAqICAgQnl0ZTY6IFJTU0kgZm9yIGFudGVubmEgMiBleHRlbnNpb24uCisgICAgICogICBCeXRlNzogUlNTSSBmb3IgYW50ZW5uYSBjb21iaW5lZC4KKyAgICAgKi8KKworICAgIC8vem1fZGVidWdfbXNnMSgiIHJlY3YgUlNTSSA9ICIsIHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIChsZW4tMSktMTcpKTsKKworICAgIHBheWxvYWRMZW4gPSB6ZkhwR2V0UGF5bG9hZExlbihkZXYsIGJ1ZiwgbGVuLCBwbGNwSGRyTGVuLCAmcnhNVCwgJnJ4TUNTLCAmcnhCVywgJnJ4U0cpOworCisgICAgLyogSGFsIFJ4IGluZm8gKi8KKyAgICAvKiBGaXJzdCBNUERVIG9yIFNpbmdsZSBNUERVICovCisgICAgaWYoKChtcGR1SW5kICYgMHgzMCkgPT0gMHgwMCkgfHwgKChtcGR1SW5kICYgMHgzMCkgPT0gMHgyMCkpCisgICAgeworICAgICAgICBpZiAod2QtPmVuYWJsZUhBTERiZ0luZm8gJiYgemZJc0RhdGFGcmFtZShkZXYsIGJ1ZikpCisgICAgICAgIHsKKyAgICAgICAgICAgICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aGFsUnhJbmZvLmN1cnJlbnRSeERhdGFNVCAgID0gcnhNVDsKKyAgICAgICAgICAgICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aGFsUnhJbmZvLmN1cnJlbnRSeERhdGFNQ1MgID0gcnhNQ1M7CisgICAgICAgICAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmhhbFJ4SW5mby5jdXJyZW50UnhEYXRhQlcgICA9IHJ4Qlc7CisgICAgICAgICAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmhhbFJ4SW5mby5jdXJyZW50UnhEYXRhU0cgICA9IHJ4U0c7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKHBsY3BIZHJMZW4gKyBwYXlsb2FkTGVuKSA+IGxlbikgeworICAgICAgICB6bV9tc2cxX3J4KFpNX0xWXzAsICJJbnZhbGlkIHBheWxvYWQgbGVuZ3RoPSIsIHBheWxvYWRMZW4pOworICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vU3RvcmUgUnggVGFpbCBJbmZvbWF0aW9uIGJlZm9yZSBSZW1vdmUtLUNXWWFuZygrKQorCisjaWYgMAorICAgIGZvciAoaSA9IDA7IGkgPCBjcmNQbHVzUnhTdGF0dXNMZW4tNDsgaSsrKQorICAgIHsKKyAgICAgICBhZGRJbmZvLlRhaWwuQnl0ZVtpXSA9CisgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBsZW4gLSBjcmNQbHVzUnhTdGF0dXNMZW4gKyA0ICsgaSk7CisgICAgfQorI2Vsc2UKKy8qCisqIEJyaWVmIGZvcm1hdCBvZiBPVVRTIGNoaXAKKyogonqid6J3oneid6J3oneid6J3oneid6J3oneid6Jzoneid6J3oneid6J3oneid6Jzoneid6J3oneid6J3onOid6J3oneid6J3oneic6J3oneid6J3oneid6J3oneid6Jzoneid6J3oneid6J3oneid6J3oneid6J3oneieworKiCieCBQTENQIEhlYWRlciCieCAgTVBEVSAgonggUlNTSSCieCAgRVZNIKJ4IFBIWSBFcnIgonggIE1BQyBTdGF0dXMgongKKyogonWid6J3oneid6J3oneid6J3oneid6J3oneid6Jxoneid6J3oneid6J3oneid6Jxoneid6J3oneid6J3onGid6J3oneid6J3oneicaJ3oneid6J3oneid6J3oneid6Jxoneid6J3oneid6J3oneid6J3oneid6J3oneidAorKiCieCAgICAgMTIgICAgICCieCAgICBuICAgonggIDcgICCieCAgMTIgIKJ4ICAgIDEgICAgonggICAgICA0ICAgICAgongKKyogonyid6J3oneid6J3oneid6J3oneid6J3oneid6Jyoneid6J3oneid6J3oneid6Jyoneid6J3oneid6J3onKid6J3oneid6J3oneicqJ3oneid6J3oneid6J3oneid6Jyoneid6J3oneid6J3oneid6J3oneid6J3oneifQorKiBSU1NJOgorKiAgICAgICBCeXRlIDEgIGFudGVubmEgMAorKiAgICAgICBCeXRlIDIgIGFudGVubmEgMQorKiAgICAgICBCeXRlIDMgIGFudGVubmEgMgorKiAgICAgICBCeXRlIDQgIGFudGVubmEgMCBleHRlbnNpb24KKyogICAgICAgQnl0ZSA1ICBhbnRlbm5hIDEgZXh0ZW5zaW9uCisqICAgICAgIEJ5dGUgNiAgYW50ZW5uYSAyIGV4dGVuc2lvbgorKiAgICAgICBCeXRlIDcgIGFudGVubmEgY29tYmluZWQKKyogRVZNOgorKiAgICAgICBCeXRlIDEgIFN0cmVhbSAwIHBpbG90IDAKKyogICAgICAgQnl0ZSAyICBTdHJlYW0gMCBwaWxvdCAxCisqICAgICAgIEJ5dGUgMyAgU3RyZWFtIDAgcGlsb3QgMgorKiAgICAgICBCeXRlIDQgIFN0cmVhbSAwIHBpbG90IDMKKyogICAgICAgQnl0ZSA1ICBTdHJlYW0gMCBwaWxvdCA0CisqICAgICAgIEJ5dGUgNiAgU3RyZWFtIDAgcGlsb3QgNQorKiAgICAgICBCeXRlIDcgIFN0cmVhbSAxIHBpbG90IDAKKyogICAgICAgQnl0ZSA4ICBTdHJlYW0gMSBwaWxvdCAxCisqICAgICAgIEJ5dGUgOSAgU3RyZWFtIDEgcGlsb3QgMgorKiAgICAgICBCeXRlIDEwIFN0cmVhbSAxIHBpbG90IDMKKyogICAgICAgQnl0ZSAxMSBTdHJlYW0gMSBwaWxvdCA0CisqICAgICAgIEJ5dGUgMTIgU3RyZWFtIDEgcGlsb3QgNQorKi8KKworICAgIC8qIEZpbGwgdGhlIFRhaWwgaW5mb3JtYXRpb24gKi8KKyAgICAvKiBMYXN0IE1QRFUgb3IgU2luZ2xlIE1QRFUgKi8KKyAgICBpZiAoKG1wZHVJbmQgJiAweDMwKSA9PSAweDAwIHx8IChtcGR1SW5kICYgMHgzMCkgPT0gMHgxMCkKKyAgICB7CisjZGVmaW5lIFpNX1JYX1JTU0lfQ09NUEVOU0FUSU9OICAgICAyNworICAgICAgICB1OF90IHptX3J4X3Jzc2lfY29tcGVuc2F0aW9uID0gWk1fUlhfUlNTSV9DT01QRU5TQVRJT047CisKKyAgICAJLyogUlNTSSBpbmZvcm1hdGlvbiAqLworICAgICAgICBhZGRJbmZvLlRhaWwuRGF0YS5TaWduYWxTdHJlbmd0aDEgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLAorICAgICAgICAgICAgICAgIChsZW4tMSkgLSAxNykgKyAoKGhwUHJpdi0+cnhTdHJvbmdSU1NJID09IDEpP3ptX3J4X3Jzc2lfY29tcGVuc2F0aW9uOjApOworI3VuZGVmIFpNX1JYX1JTU0lfQ09NUEVOU0FUSU9OCisKKyAgICAgIC8qIEVWTSAqLworCisgICAgICAvKiBUT0RPOiBmb3IgUkQvQkIgZGVidWcgbWVzc2FnZSAqLworICAgICAgLyogc2F2ZSBjdXJyZW50IHJ4IGh3IGluZm9tcmF0aW9uLCByZXBvcnQgdG8gRHJ2Q29yZS9BcHBsaWNhdGlvbiAqLworICAgICAgaWYgKHdkLT5lbmFibGVIQUxEYmdJbmZvICYmIHpmSXNEYXRhRnJhbWUoZGV2LCBidWYpKQorICAgICAgeworICAgICAgICAgICAgdThfdCB0cnNzaTsKKyAgICAgICAgICAgIGZvciAoaT0wOyBpPDc7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cnNzaSA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIChsZW4tMSkgLSAyMyArIGkpOworCSAgICAgICAgICAgIGlmICh0cnNzaSYweDgwKQorCSAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdHJzc2kgPSAoKH4oKHU4X3QpdHJzc2kpICYgMHg3ZikgKyAxKSAmIDB4N2Y7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aGFsUnhJbmZvLmN1cnJlbnRSU1NJW2ldID0gdHJzc2k7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAocnhNVD09MikKKyAgICAgICAgICB7CisgICAgICAgICAgICAvL2lmIChyeEJXKQorICAgICAgICAgICAgLy97CisgICAgICAgICAgICAJICBmb3IgKGk9MDsgaTwxMjsgaSsrKQorICAgICAgICAgICAgICAgICAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmhhbFJ4SW5mby5jdXJyZW50UnhFVk1baV0gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgKGxlbi0xKSAtIDE2ICsgaSk7CisgICAgICAgICAgICAvL30KKyAgICAgICAgICAgIC8vZWxzZQorICAgICAgICAgICAgLy97CisgICAgICAgICAgICAvLwkgIGZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgICAgIC8vICAgICAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmhhbFJ4SW5mby5jdXJyZW50UnhFVk1baV0gPQorICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAobGVuLTEpIC0gMTYgKyBpKTsKKyAgICAgICAgICAgIC8vfQorICAgICAgICAgIH0KKworICAgICAgICAgICNpZiAwCisgICAgICAgICAgLyogcHJpbnQgKi8KKyAgICAgICAgICAgIHptX2RiZygoIk1UKCVkKSBNQ1MoJWQpIEJXKCVkKSBTRyglZCkgUlNTSTolZCwlZCwlZCwlZCwlZCwlZCwlZCBFVk06KCVkLCVkLCVkLCVkLCVkLCVkKSglZCwlZCwlZCwlZCwlZCwlZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIHJ4TVQsCisgICAgICAgICAgICAgICAgICAgICAgIHJ4TUNTLAorICAgICAgICAgICAgICAgICAgICAgICByeEJXLAorICAgICAgICAgICAgICAgICAgICAgICByeFNHLAorICAgICAgICAgICAgICAgICAgICAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmhhbFJ4SW5mby5jdXJyZW50UlNTSVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5oYWxSeEluZm8uY3VycmVudFJTU0lbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aGFsUnhJbmZvLmN1cnJlbnRSU1NJWzJdLAorICAgICAgICAgICAgICAgICAgICAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmhhbFJ4SW5mby5jdXJyZW50UlNTSVszXSwKKyAgICAgICAgICAgICAgICAgICAgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5oYWxSeEluZm8uY3VycmVudFJTU0lbNF0sCisgICAgICAgICAgICAgICAgICAgICAgICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aGFsUnhJbmZvLmN1cnJlbnRSU1NJWzVdLAorICAgICAgICAgICAgICAgICAgICAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmhhbFJ4SW5mby5jdXJyZW50UlNTSVs2XSwKKyAgICAgICAgICAgICAgICAgICAgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5oYWxSeEluZm8uY3VycmVudFJ4RVZNWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmhhbFJ4SW5mby5jdXJyZW50UnhFVk1bMV0sCisgICAgICAgICAgICAgICAgICAgICAgICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aGFsUnhJbmZvLmN1cnJlbnRSeEVWTVsyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5oYWxSeEluZm8uY3VycmVudFJ4RVZNWzNdLAorICAgICAgICAgICAgICAgICAgICAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmhhbFJ4SW5mby5jdXJyZW50UnhFVk1bNF0sCisgICAgICAgICAgICAgICAgICAgICAgICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aGFsUnhJbmZvLmN1cnJlbnRSeEVWTVs1XSwKKyAgICAgICAgICAgICAgICAgICAgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5oYWxSeEluZm8uY3VycmVudFJ4RVZNWzZdLAorICAgICAgICAgICAgICAgICAgICAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmhhbFJ4SW5mby5jdXJyZW50UnhFVk1bN10sCisgICAgICAgICAgICAgICAgICAgICAgICgoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlKS0+aGFsUnhJbmZvLmN1cnJlbnRSeEVWTVs4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5oYWxSeEluZm8uY3VycmVudFJ4RVZNWzldLAorICAgICAgICAgICAgICAgICAgICAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmhhbFJ4SW5mby5jdXJyZW50UnhFVk1bMTBdLAorICAgICAgICAgICAgICAgICAgICAgICAoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmhhbFJ4SW5mby5jdXJyZW50UnhFVk1bMTFdCisgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgICAgICAgICNlbmRpZgorICAgICAgfSAvKiBpZiAod2QtPmVuYWJsZUhBTERiZ0luZm8gJiYgemZJc0RhdGFGcmFtZShkZXYsIGJ1ZikpICovCisKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogTWlkIG9yIEZpcnN0IGFnZ3JlZ2F0ZSBmcmFtZSB3aXRob3V0IHBoeSByeCBpbmZvcm1hdGlvbiAqLworICAgICAgICBhZGRJbmZvLlRhaWwuRGF0YS5TaWduYWxTdHJlbmd0aDEgPSAwOworICAgIH0KKworICAgIGFkZEluZm8uVGFpbC5EYXRhLlNpZ25hbFN0cmVuZ3RoMiA9IDA7CisgICAgYWRkSW5mby5UYWlsLkRhdGEuU2lnbmFsU3RyZW5ndGgzID0gMDsKKyAgICBhZGRJbmZvLlRhaWwuRGF0YS5TaWduYWxRdWFsaXR5ICAgPSAwOworCisgICAgYWRkSW5mby5UYWlsLkRhdGEuU0FJbmRleCAgICAgICAgICAgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBsZW4gLSA0KTsKKyAgICBhZGRJbmZvLlRhaWwuRGF0YS5EQUluZGV4ICAgICAgICAgICA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIGxlbiAtIDMpOworICAgIGFkZEluZm8uVGFpbC5EYXRhLkVycm9ySW5kaWNhdGlvbiAgID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgbGVuIC0gMik7CisgICAgYWRkSW5mby5UYWlsLkRhdGEuUnhNYWNTdGF0dXMgICAgICAgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCBsZW4gLSAxKTsKKworI2VuZGlmCisgICAgLyogUmVtb3ZlIENSQyBhbmQgUnggU3RhdHVzICovCisgICAgemZ3QnVmU2V0U2l6ZShkZXYsIGJ1ZiwgKGxlbi1jcmNQbHVzUnhTdGF0dXNMZW4pKTsKKyAgICAvL3pmd0J1ZlNldFNpemUoZGV2LCBidWYsIHBheWxvYWRMZW4gKyBwbGNwSGRyTGVuKTsgICAgLyogcGF5bG9hZExlbiArIFBMQ1AgMTIgLSBGQ1MgNCovCisKKyAgICAvL1N0b3JlIFBMQ1AgSGVhZGVyIEluZm9tYXRpb24gYmVmb3JlIFJlbW92ZS0tQ1dZYW5nKCspCisgICAgaWYgKHBsY3BIZHJMZW4gIT0gMCkKKyAgICB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwbGNwSGRyTGVuOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGFkZEluZm8uUGxjcEhlYWRlcltpXSA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIGkpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFkZEluZm8uUGxjcEhlYWRlclswXSA9IDA7CisgICAgfQorICAgIC8qIFJlbW92ZSBQTENQIGhlYWRlciAqLworICAgIHpmd0J1ZlJlbW92ZUhlYWQoZGV2LCBidWYsIHBsY3BIZHJMZW4pOworCisgICAgLyogaGFuZGxlIDgwMi4xMSBmcmFtZSAqLworICAgIHpmQ29yZVJlY3YoZGV2LCBidWYsICZhZGRJbmZvKTsKKworI2Vsc2UKKyAgICAvKiBGaXJtd2FyZSBsb29wYmFjazogUnggZnJhbWUgPSBUeCBmcmFtZSAgICAgICAqLworICAgIC8qIGNvbnZlcnQgUnggZnJhbWUgdG8gZml0IHJlY2VpdmUgZnJhbWUgZm9ybWF0ICovCisgICAgemJ1Zl90ICpuZXdfYnVmOworICAgIHU4X3QgICAgY3RybF9vZmZzZXQgPSA4OworICAgIHU4X3QgICAgUExDUF9MZW4gPSAxMjsKKyAgICB1OF90ICAgIGRhdGE7CisgICAgdThfdCAgICBpOworCisKKyAgICAvKiBUeDogIHwgY3RybF9zZXR0aW5nIHwgTWFjIGhkciB8IGRhdGEgfCAqLworICAgIC8qICAgICAgICAgICAgOCAgICAgICAgICAgIDI0ICAgICAgIHggICAgICovCisKKyAgICAvKiBSeDogICAgICAgICAgfCBQTENQIHwgTWFjIGhkciB8IGRhdGEgfCBGQ1MgfCBSeHN0YXR1cyB8ICovCisgICAgLyogICAgICAgICAgICAgICAgIDEyICAgICAgMjQgICAgICAgIHggICAgIDQgICAgICAgOCAgICAgICAqLworCisgICAgLyogbmV3IGFsbG9jYXRlIGEgcnggZm9ybWF0IHNpemUgYnVmICovCisgICAgbmV3X2J1ZiA9IHpmd0J1ZkFsbG9jYXRlKGRldiwgemZ3QnVmR2V0U2l6ZShkZXYsIGJ1ZiktOCsxMis0K0VYVFJBX0lORk9fTEVOKTsKKworICAgIGZvciAoaT0wOyBpPHpmd0J1ZkdldFNpemUoZGV2LCBidWYpLWN0cmxfb2Zmc2V0OyBpKyspCisgICAgeworICAgICAgICBkYXRhID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgY3RybF9vZmZzZXQraSk7CisgICAgICAgIHptd19yeF9idWZfd3JpdGViKGRldiwgbmV3X2J1ZiwgUExDUF9MZW4raSwgZGF0YSk7CisgICAgfQorCisgICAgemZ3QnVmU2V0U2l6ZShkZXYsIG5ld19idWYsIHpmd0J1ZkdldFNpemUoZGV2LCBidWYpLTgrMTIrNCtFWFRSQV9JTkZPX0xFTik7CisKKyAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKworICAgIC8qIHJlY2VpdmUgdGhlIG5ld19idWYgKi8KKyAgICAvL3pmQ29yZVJlY3YoZGV2LCBuZXdfYnVmKTsKKworI2VuZGlmCisKK30KKworI2lmZGVmIFpNX09UVVNfUlhfU1RSRUFNX01PREUKK3ZvaWQgemZpVXNiUmVjdih6ZGV2X3QgKmRldiwgemJ1Zl90ICpidWYpCit7CisgICAgdTE2X3QgaW5kZXggPSAwOworICAgIHUxNl90IGNoa0lkeDsKKyAgICB1MzJfdCBzdGF0dXMgPSAwOworICAgIHUxNl90IGlpOworICAgIHpidWZfdCAqbmV3QnVmOworICAgIHpidWZfdCAqcnhCdWZQb29sWzhdOworICAgIHUxNl90IHJ4QnVmUG9vbEluZGV4ID0gMDsKKyAgICBzdHJ1Y3QgenNIcFByaXYgKmhhbFByaXY7CisgICAgdThfdCAqc3JjQnVmUHRyOworICAgIHUzMl90IGJ1ZmZlckxlbmd0aDsKKyAgICB1MTZfdCB1c2JSeFJlbWFpbkxlbjsKKyAgICB1MTZfdCB1c2JSeFBrdExlbjsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIGhhbFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOworICAgIHNyY0J1ZlB0ciA9IHptd19idWZfZ2V0X2J1ZmZlcihkZXYsIGJ1Zik7CisKKyAgICBidWZmZXJMZW5ndGggPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsKKworICAgIC8qIFplcm8gTGVuZ3RoIFRyYW5zZmVyICovCisgICAgaWYgKCFidWZmZXJMZW5ndGgpCisgICAgeworICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVzYlJ4UmVtYWluTGVuID0gaGFsUHJpdi0+dXNiUnhSZW1haW5MZW47CisgICAgdXNiUnhQa3RMZW4gPSBoYWxQcml2LT51c2JSeFRyYW5zZmVyTGVuOworCisgICAgLyogQ2hlY2sgd2hldGhlciB0aGVyZSBpcyBhbnkgZGF0YSBpbiB0aGUgbGFzdCB0cmFuc2ZlciAqLworICAgIGlmICh1c2JSeFJlbWFpbkxlbiAhPSAwICkKKyAgICB7CisgICAgICAgIHpidWZfdCAqcmVtYWluQnVmUHRyID0gaGFsUHJpdi0+cmVtYWluQnVmOworICAgICAgICB1OF90KiBCdWZQdHIgPSBOVUxMOworCisgICAgICAgIGlmICggcmVtYWluQnVmUHRyICE9IE5VTEwgKQorICAgICAgICB7CisgICAgICAgICAgICBCdWZQdHIgPSB6bXdfYnVmX2dldF9idWZmZXIoZGV2LCByZW1haW5CdWZQdHIpOworICAgICAgICB9CisKKyAgICAgICAgaW5kZXggPSB1c2JSeFJlbWFpbkxlbjsKKyAgICAgICAgdXNiUnhSZW1haW5MZW4gLT0gaGFsUHJpdi0+dXNiUnhQYWRMZW47CisKKyAgICAgICAgLyogIENvcHkgZGF0YSAqLworICAgICAgICBpZiAoIEJ1ZlB0ciAhPSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAgICAgemZ3TWVtb3J5Q29weSgmKEJ1ZlB0clt1c2JSeFBrdExlbl0pLCBzcmNCdWZQdHIsIHVzYlJ4UmVtYWluTGVuKTsKKyAgICAgICAgfQorCisgICAgICAgIHVzYlJ4UGt0TGVuICs9IHVzYlJ4UmVtYWluTGVuOworICAgICAgICBoYWxQcml2LT51c2JSeFJlbWFpbkxlbiA9IDA7CisKKyAgICAgICAgaWYgKCByZW1haW5CdWZQdHIgIT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHpmd0J1ZlNldFNpemUoZGV2LCByZW1haW5CdWZQdHIsIHVzYlJ4UGt0TGVuKTsKKyAgICAgICAgICAgIHJ4QnVmUG9vbFtyeEJ1ZlBvb2xJbmRleCsrXSA9IHJlbWFpbkJ1ZlB0cjsKKyAgICAgICAgfQorICAgICAgICBoYWxQcml2LT5yZW1haW5CdWYgPSBOVUxMOworICAgIH0KKworICAgIC8vem1fZGVidWdfbXNnMSgibGVuZ3RoOiAlZFxuIiwgKGludClwVXNiUnhUcmFuc2Zlci0+cFJ4VXJiLT5VcmJCdWxrT3JJbnRlcnJ1cHRUcmFuc2Zlci5UcmFuc2ZlckJ1ZmZlckxlbmd0aCk7CisKKyAgICBidWZmZXJMZW5ndGggPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsKKy8vcHJpbnRrKCJidWZmZXJMZW5ndGggJWRcbiIsIGJ1ZmZlckxlbmd0aCk7CisgICAgd2hpbGUoaW5kZXggPCBidWZmZXJMZW5ndGgpCisgICAgeworICAgICAgICB1MTZfdCBwa3RMZW47CisgICAgICAgIHUxNl90IHBrdFRhZzsKKyAgICAgICAgLy91OF90ICpwdHIgPSAodThfdCopKChzdHJ1Y3QgenNCdWZmZXIqKXBVc2JSeFRyYW5zZmVyLT5idWYpLT5kYXRhOworICAgICAgICB1OF90ICpwdHIgPSBzcmNCdWZQdHI7CisKKyAgICAgICAgLyogUmV0cmlldmUgcGFja2V0IGxlbmd0aCBhbmQgdGFnICovCisgICAgICAgIHBrdExlbiA9IHB0cltpbmRleF0gKyAocHRyW2luZGV4KzFdIDw8IDgpOworICAgICAgICBwa3RUYWcgPSBwdHJbaW5kZXgrMl0gKyAocHRyW2luZGV4KzNdIDw8IDgpOworCisgICAgICAgIGlmIChwa3RUYWcgPT0gWk1fVVNCX1NUUkVBTV9NT0RFX1RBRykKKyAgICAgICAgeworICAgICAgICAgICAgdTE2X3QgcGFkTGVuOworCisgICAgICAgICAgICB6bV9hc3NlcnQocGt0TGVuIDwgWk1fV0xBTl9NQVhfUlhfU0laRSk7CisKKyAgICAgICAgICAgIC8vcHJpbnRrKCJHZXQgYSBwYWNrZXQsIHBrdExlbjogMHglMDR4XG4iLCBwa3RMZW4pOworICAgICAgICAgICAgI2lmIDAKKyAgICAgICAgICAgIC8qIER1bXAgZGF0YSAqLworICAgICAgICAgICAgZm9yIChpaSA9IGluZGV4OyBpaSA8IHBrdF9sZW4rNDspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRGJnUHJpbnQoIjB4JTAyeCAiLAorICAgICAgICAgICAgICAgICAgICAgICAgKHptd19yeF9idWZfcmVhZGIoYWRhcHRlciwgcFVzYlJ4VHJhbnNmZXItPmJ1ZiwgaWkpICYgMHhmZikpOworCisgICAgICAgICAgICAgICAgaWYgKCgrK2lpICUgMTYpID09IDApCisgICAgICAgICAgICAgICAgICAgIERiZ1ByaW50KCJcbiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBEYmdQcmludCgiXG4iKTsKKyAgICAgICAgICAgICNlbmRpZgorCisgICAgICAgICAgICAvKiBDYWxjdWF0ZSB0aGUgcGFkZGluZyBsZW5ndGgsIGluIHRoZSBjdXJyZW50IGRlc2lnbiwKKyAgICAgICAgICAgICAgIHRoZSBsZW5ndGggc2hvdWxkIGJlIHBhZGRlZCB0byA0IGJ5dGUgYm91bmRyYXkuICovCisgICAgICAgICAgICBwYWRMZW4gPSBaTV9VU0JfU1RSRUFNX01PREVfVEFHX0xFTiAtIChwa3RMZW4gJiAweDMpOworCisgICAgICAgICAgICBpZihwYWRMZW4gPT0gWk1fVVNCX1NUUkVBTV9NT0RFX1RBR19MRU4pCisgICAgICAgICAgICAgICAgcGFkTGVuID0gMDsKKworICAgICAgICAgICAgY2hrSWR4ID0gaW5kZXg7CisgICAgICAgICAgICBpbmRleCA9IGluZGV4ICsgWk1fVVNCX1NUUkVBTV9NT0RFX1RBR19MRU4gKyBwa3RMZW4gKyBwYWRMZW47CisKKyAgICAgICAgICAgIGlmIChjaGtJZHggPiBaTV9NQVhfVVNCX0lOX1RSQU5TRkVSX1NJWkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgem1fZGVidWdfbXNnMSgiY2hrSWR4IGlzIHRvbyBsYXJnZSwgY2hrSWR4OiAlZFxuIiwgY2hrSWR4KTsKKyAgICAgICAgICAgICAgICB6bV9hc3NlcnQoMCk7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID4gWk1fTUFYX1VTQl9JTl9UUkFOU0ZFUl9TSVpFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vc3RydWN0IHpzQnVmZmVyKiBCdWZQdHI7CisgICAgICAgICAgICAgICAgLy9zdHJ1Y3QgenNCdWZmZXIqIFVzYkJ1ZlB0cjsKKyAgICAgICAgICAgICAgICB1OF90ICpCdWZQdHI7CisgICAgICAgICAgICAgICAgdThfdCAqVXNiQnVmUHRyOworCisgICAgICAgICAgICAgICAgaGFsUHJpdi0+dXNiUnhSZW1haW5MZW4gPSBpbmRleCAtIFpNX01BWF9VU0JfSU5fVFJBTlNGRVJfU0laRTsgLy8gLSBwYWRMZW47CisgICAgICAgICAgICAgICAgaGFsUHJpdi0+dXNiUnhUcmFuc2ZlckxlbiA9IFpNX01BWF9VU0JfSU5fVFJBTlNGRVJfU0laRSAtCisgICAgICAgICAgICAgICAgICAgICAgICBjaGtJZHggLSBaTV9VU0JfU1RSRUFNX01PREVfVEFHX0xFTjsKKyAgICAgICAgICAgICAgICBoYWxQcml2LT51c2JSeFBhZExlbiA9IHBhZExlbjsKKyAgICAgICAgICAgICAgICAvL2NoZWNrX2luZGV4ID0gaW5kZXg7CisKKyAgICAgICAgICAgICAgICBpZiAoaGFsUHJpdi0+dXNiUnhUcmFuc2ZlckxlbiA+IFpNX1dMQU5fTUFYX1JYX1NJWkUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB6bV9kZWJ1Z19tc2cxKCJjaGVja19sZW4gaXMgdG9vIGxhcmdlLCBjaGtfbGVuOiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWxQcml2LT51c2JSeFRyYW5zZmVyTGVuKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgYSBza2IgYnVmZmVyICovCisgICAgICAgICAgICAgICAgbmV3QnVmID0gemZ3QnVmQWxsb2NhdGUoZGV2LCBaTV9XTEFOX01BWF9SWF9TSVpFKTsKKworICAgICAgICAgICAgICAgIGlmICggbmV3QnVmICE9IE5VTEwgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQnVmUHRyID0gem13X2J1Zl9nZXRfYnVmZmVyKGRldiwgbmV3QnVmKTsKKyAgICAgICAgICAgICAgICAgICAgVXNiQnVmUHRyID0gc3JjQnVmUHRyOworCisgICAgICAgICAgICAgICAgICAgIC8qIENvcHkgdGhlIGJ1ZmZlciAqLworICAgICAgICAgICAgICAgICAgICB6ZndNZW1vcnlDb3B5KEJ1ZlB0ciwgJihVc2JCdWZQdHJbY2hrSWR4K1pNX1VTQl9TVFJFQU1fTU9ERV9UQUdfTEVOXSksIGhhbFByaXYtPnVzYlJ4VHJhbnNmZXJMZW4pOworCisgICAgICAgICAgICAgICAgICAgIC8qIFJlY29yZCB0aGUgYnVmZmVyIHBvaW50ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgaGFsUHJpdi0+cmVtYWluQnVmID0gbmV3QnVmOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1OF90KiBCdWZQdHI7CisgICAgICAgICAgICAgICAgdThfdCogVXNiQnVmUHRyOworCisgICAgICAgICAgICAgICAgLyogQWxsb2NhdGUgYSBza2IgYnVmZmVyICovCisgICAgICAgICAgICAgICAgbmV3QnVmID0gemZ3QnVmQWxsb2NhdGUoZGV2LCBaTV9XTEFOX01BWF9SWF9TSVpFKTsKKyAgICAgICAgICAgICAgICBpZiAoIG5ld0J1ZiAhPSBOVUxMICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEJ1ZlB0ciA9IHptd19idWZfZ2V0X2J1ZmZlcihkZXYsIG5ld0J1Zik7CisgICAgICAgICAgICAgICAgICAgIFVzYkJ1ZlB0ciA9IHNyY0J1ZlB0cjsKKworICAgICAgICAgICAgICAgICAgICAvKiBDb3B5IHRoZSBidWZmZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgemZ3TWVtb3J5Q29weShCdWZQdHIsICYoVXNiQnVmUHRyW2Noa0lkeCtaTV9VU0JfU1RSRUFNX01PREVfVEFHX0xFTl0pLCBwa3RMZW4pOworCisgICAgICAgICAgICAgICAgICAgIHpmd0J1ZlNldFNpemUoZGV2LCBuZXdCdWYsIHBrdExlbik7CisgICAgICAgICAgICAgICAgICAgIHJ4QnVmUG9vbFtyeEJ1ZlBvb2xJbmRleCsrXSA9IG5ld0J1ZjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAgICAgdTE2X3QgaTsKKworICAgICAgICAgICAgICAgIERiZ1ByaW50KCJDYW4ndCBmaW5kIHRhZywgcGt0X2xlbjogMHglMDR4LCB0YWc6IDB4JTA0eFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrdExlbiwgcGt0VGFnKTsKKworICAgICAgICAgICAgICAgICNpZiAwCisgICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgMzI7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIERiZ1ByaW50KCIlMDJ4ICIsIGJ1Zi0+ZGF0YVtpbmRleC0xNitpXSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKChpICYgMHhmKSA9PSAweGYpCisgICAgICAgICAgICAgICAgICAgICAgICBEYmdQcmludCgiXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgI2VuZGlmCisKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEZyZWUgYnVmZmVyICovCisgICAgLy96ZndCdWZGcmVlKGFkYXB0ZXIsIHBVc2JSeFRyYW5zZmVyLT5idWYsIDApOworICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIDApOworCisgICAgZm9yKGlpID0gMDsgaWkgPCByeEJ1ZlBvb2xJbmRleDsgaWkrKykKKyAgICB7CisgICAgICAgIHpmaVVzYlJlY3ZQZXJQa3QoZGV2LCByeEJ1ZlBvb2xbaWldKTsKKyAgICB9Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmVXNiSW5pdCAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBJbml0aWFsaXplIFVTQiByZXNvdXJjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNS4xMiAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB6ZlVzYkluaXQoemRldl90KiBkZXYpCit7CisgICAgLyogSW5pdGlhbGl6ZSBSeCAmIElOVCBlbmRwb2ludCBmb3IgcmVjZWl2aW5nIGRhdGEgJiBpbnRlcnJ1cHQgKi8KKyAgICB6ZndVc2JFbmFibGVSeEVwdChkZXYsIFVTQl9FTkRQT0lOVF9SWF9JTkRFWCk7CisgICAgemZ3VXNiRW5hYmxlSW50RXB0KGRldiwgVVNCX0VORFBPSU5UX0lOVF9JTkRFWCk7CisKKyAgICByZXR1cm47Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmVXNiRnJlZSAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBGcmVlIFBDSSByZXNvdXJjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNS4xMiAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCB6ZlVzYkZyZWUoemRldl90KiBkZXYpCit7CisgICAgc3RydWN0IHpzSHBQcml2ICpoYWxQcml2OworCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCisgICAgaGFsUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7CisKKyNpZmRlZiBaTV9PVFVTX1JYX1NUUkVBTV9NT0RFCisgICAgaWYgKCBoYWxQcml2LT5yZW1haW5CdWYgIT0gTlVMTCApCisgICAgeworICAgICAgICB6ZndCdWZGcmVlKGRldiwgaGFsUHJpdi0+cmVtYWluQnVmLCAwKTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybjsKK30KKwordm9pZCB6ZkhwU2VuZEJlYWNvbih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IGxlbikKK3sKKyAgICB1MzJfdCBodywgbHc7CisgICAgdTE2X3QgaTsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICAvKiBXcml0ZSB0byBiZWFjb24gYnVmZmVyIChaTV9CRUFDT05fQlVGRkVSX0FERFJFU1MpICovCisgICAgZm9yIChpID0gMDsgaTxsZW47IGkrPTQpCisgICAgeworICAgICAgICBsdyA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIGkpOworICAgICAgICBodyA9IHptd190eF9idWZfcmVhZGgoZGV2LCBidWYsIGkrMik7CisKKyAgICAgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9CRUFDT05fQlVGRkVSX0FERFJFU1MraSwgKGh3PDwxNikrbHcpOworICAgIH0KKworICAgIC8qIEJlYWNvbiBQQ0xQIGhlYWRlciAqLworICAgIGlmICgoKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZSktPmh3RnJlcXVlbmN5IDwgMzAwMCkKKyAgICB7CisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX0JDTl9QTENQLCAoKGxlbis0KTw8KDMrMTYpKSsweDA0MDApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB6ZkRlbGF5V3JpdGVJbnRlcm5hbFJlZyhkZXYsIFpNX01BQ19SRUdfQkNOX1BMQ1AsICgobGVuKzQpPDwoMTYpKSsweDAwMWIpOworICAgIH0KKworICAgIC8qIEJlYWNvbiBsZW5ndGggKGluY2x1ZGUgQ1JDMzIpICovCisgICAgemZEZWxheVdyaXRlSW50ZXJuYWxSZWcoZGV2LCBaTV9NQUNfUkVHX0JDTl9MRU5HVEgsIGxlbis0KTsKKworICAgIC8qIEJlYWNvbiBSZWFkeSAqLworICAgIHpmRGVsYXlXcml0ZUludGVybmFsUmVnKGRldiwgWk1fTUFDX1JFR19CQ05fQ1RSTCwgMSk7CisgICAgemZGbHVzaERlbGF5V3JpdGUoZGV2KTsKKworICAgIC8qIEZyZWUgYmVhY29uIGJ1ZiAqLworICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIDApOworCisgICAgcmV0dXJuOworfQorCisKKyNkZWZpbmUgWk1fU1RBVFVTX1RYX0NPTVAgICAgICAgMHgwMAorI2RlZmluZSBaTV9TVEFUVVNfUkVUUllfQ09NUCAgICAweDAxCisjZGVmaW5lIFpNX1NUQVRVU19UWF9GQUlMRUQgICAgIDB4MDIKK3ZvaWQgemZpVXNiUmVnSW4oemRldl90KiBkZXYsIHUzMl90KiByc3AsIHUxNl90IHJzcExlbikKK3sKKyAgICAvL3U4X3QgbGVuLCB0eXBlLCBpOworICAgIHU4X3QgdHlwZTsKKyAgICB1OF90ICp1OHJzcDsKKyAgICB1MTZfdCBzdGF0dXM7CisgICAgdTMyX3QgYml0bWFwOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgIHptX21zZzBfbW0oWk1fTFZfMywgInpmaVVzYlJlZ0luKCkiKTsKKworICAgIHU4cnNwID0gKHU4X3QgKilyc3A7CisKKyAgICAvL2xlbiA9ICp1OHJzcDsKKyAgICB0eXBlID0gKih1OHJzcCsxKTsKKyAgICB1OHJzcCA9IHU4cnNwKzQ7CisKKworICAgIC8qIEludGVycnVwdCBldmVudCAqLworICAgIGlmICgodHlwZSAmIDB4QzApID09IDB4QzApCisgICAgeworICAgICAgICBpZiAodHlwZSA9PSAweEMwKQorICAgICAgICB7CisgICAgICAgICAgICB6ZkNvcmVFdmVudChkZXYsIDAsIHU4cnNwKTsKKworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMHhDMSkKKyAgICAgICAgeworI2lmIDAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MTZfdCBpOworICAgICAgICAgICAgICAgIERiZ1ByaW50KCJyc3BMZW49JWRcbiIsIHJzcExlbik7CisgICAgICAgICAgICAgICAgZm9yIChpPTA7IGk8KHJzcExlbi80KTsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRGJnUHJpbnQoInJzcFslZF09MHglbHhcbiIsIGksIHJzcFtpXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICBzdGF0dXMgPSAodTE2X3QpKHJzcFszXSA+PiAxNik7CisKKyAgICAgICAgICAgIC8vLy82Nzg5CisgICAgICAgICAgICByc3BbOF0gPSByc3BbOF0gPj4gMiB8IChyc3BbOV0gJiAweDEpIDw8IDY7CisgICAgICAgICAgICBzd2l0Y2ggKHN0YXR1cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgWk1fU1RBVFVTX1JFVFJZX0NPTVAgOgorICAgICAgICAgICAgICAgIHpmQ29yZUV2ZW50KGRldiwgMSwgdThyc3ApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBaTV9TVEFUVVNfVFhfRkFJTEVEIDoKKyAgICAgICAgICAgICAgICB6ZkNvcmVFdmVudChkZXYsIDIsIHU4cnNwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgWk1fU1RBVFVTX1RYX0NPTVAgOgorICAgICAgICAgICAgICAgIHpmQ29yZUV2ZW50KGRldiwgMywgdThyc3ApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMHhDMikKKyAgICAgICAgeworICAgICAgICAgICAgemZCZWFjb25DZmdJbnRlcnJ1cHQoZGV2LCB1OHJzcCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlwZSA9PSAweEMzKQorICAgICAgICB7CisgICAgICAgICAgICB6ZkVuZE9mQXRpbVdpbmRvd0ludGVycnVwdChkZXYpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMHhDNCkKKyAgICAgICAgeworI2lmIDAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1MTZfdCBpOworICAgICAgICAgICAgICAgIERiZ1ByaW50KCIweEMyOnJzcExlbj0lZFxuIiwgcnNwTGVuKTsKKyAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTwocnNwTGVuLzQpOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBEYmdQcmludCgiMHhDMjpyc3BbJWRdPTB4JWx4XG4iLCBpLCByc3BbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgYml0bWFwID0gKHJzcFsxXSA+PiAxNikgKyAoKHJzcFsyXSAmIDB4RkZGRikgPDwgMTYgKTsKKyAgICAgICAgICAgIC8vemZCYXdDb3JlKGRldiwgKHUxNl90KXJzcFsxXSAmIDB4RkZGRiwgYml0bWFwLCAodTE2X3QpKHJzcFsyXSA+PiAxNikgJiAweEZGKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlID09IDB4QzUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHUxNl90IGk7CisjaWYgMAorCisgICAgICAgICAgICBmb3IgKGk9MDsgaTwocnNwTGVuLzQpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBEYmdQcmludCgiMHhDNTpyc3BbJWRdPTB4JWx4XG4iLCBpLCByc3BbaV0pOworICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICBmb3IgKGk9MTsgaTwocnNwTGVuLzQpOyBpKyspIHsKKyAgICAgICAgICAgICAgICB1OHJzcCA9ICh1OF90ICopKHJzcCtpKTsKKyAgICAgICAgICAgICAgICAvL0RiZ1ByaW50KCIweEM1OnJzcFslZF09MHglbHhcbiIsIGksICgodTMyX3QqKXU4cnNwKVswXSk7CisgICAgICAgICAgICAgICAgemZDb3JlRXZlbnQoZGV2LCA0LCB1OHJzcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlwZSA9PSAweEM2KQorICAgICAgICB7CisgICAgICAgICAgICB6bV9kZWJ1Z19tc2cwKCJcblxuIFdhdGNoRG9nIGludGVycnVwdCEhISA6IDB4QzYgXG5cbiIpOworICAgICAgICAgICAgaWYgKHdkLT56ZmNiSHdXYXRjaERvZ05vdGlmeSAhPSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdkLT56ZmNiSHdXYXRjaERvZ05vdGlmeShkZXYpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMHhDOCkKKyAgICAgICAgeworICAgICAgICAgICAgLy9QWlNXX0FEQVBURVIgYWRhcHRlcjsKKworICAgICAgICAgICAgLy8gZm9yIFNQSSBmbGFzaCBwcm9ncmFtIGNoayBGbGFnCisgICAgICAgICAgICB6ZndEYmdQcm9ncmFtZUZsYXNoQ2hrRG9uZShkZXYpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMHhDOSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKworICAgICAgICAgICAgem1fZGVidWdfbXNnMCgiIyMjIyMgVHggcmV0cmFuc21pc3Npb24gNSB0aW1lcyBldmVudCAjIyMjIyIpOworCisgICAgICAgICAgICAvKiBjb3JyZWN0IHR4IHJldHJhbnNtaXNzaW9uIGlzc3VlICovCisgICAgICAgICAgICBocFByaXYtPnJldHJhbnNtaXNzaW9uRXZlbnQgPSAxOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHpmSWRsUnNwKGRldiwgcnNwLCByc3BMZW4pOworICAgIH0KK30KKworCisjZGVmaW5lIFpNX1BST0dSQU1fUkFNX0FERFIgICAgIDB4MjAwMDAwIC8vMHgxMDAwIC8vMHg3MDAwMDAKKyNkZWZpbmUgRklSTVdBUkVfRE9XTkxPQUQgICAgICAgMHgzMAorI2RlZmluZSBGSVJNV0FSRV9ET1dOTE9BRF9DT01QICAweDMxCisjZGVmaW5lIEZJUk1XQVJFX0NPTkZJUk0gICAgICAgIDB4MzIKKwordTE2X3QgemZGaXJtd2FyZURvd25sb2FkKHpkZXZfdCogZGV2LCB1MzJfdCogZncsIHUzMl90IGxlbiwgdTMyX3Qgb2Zmc2V0KQoreworICAgIHUxNl90IHJldCA9IFpNX1NVQ0NFU1M7CisgICAgdTMyX3QgdUNvZGVPZnN0ID0gb2Zmc2V0OworICAgIHU4X3QgKmltYWdlLCAqcHRyOworICAgIHUzMl90IHJlc3VsdDsKKworICAgIGltYWdlID0gKHU4X3QqKSBmdzsKKyAgICBwdHIgPSBpbWFnZTsKKworICAgIHdoaWxlIChsZW4gPiAwKQorICAgIHsKKyAgICAgICAgdTMyX3QgdHJhbnNsZW4gPSAobGVuID4gNDA5NikgPyA0MDk2IDogbGVuOworCisgICAgICAgIHJlc3VsdCA9IHpmd1VzYlN1Ym1pdENvbnRyb2woZGV2LCBGSVJNV0FSRV9ET1dOTE9BRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTE2X3QpICh1Q29kZU9mc3QgPj4gOCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgaW1hZ2UsIHRyYW5zbGVuKTsKKworICAgICAgICBpZiAocmVzdWx0ICE9IFpNX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHptX21zZzBfaW5pdChaTV9MVl8wLCAiRklSTVdBUkVfRE9XTkxPQUQgZmFpbGVkIik7CisgICAgICAgICAgICByZXQgPSAxOworICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisKKyAgICAgICAgbGVuIC09IHRyYW5zbGVuOworICAgICAgICBpbWFnZSArPSB0cmFuc2xlbjsKKyAgICAgICAgdUNvZGVPZnN0ICs9IHRyYW5zbGVuOyAvLyBpbiBXb3JkICgxNiBiaXQpCisKKyAgICAgICAgcmVzdWx0ID0gMDsKKyAgICB9CisKKyAgICAvKiBJZiBkb3dubG9hZCBmaXJtd2FyZSBzdWNjZXNzLCBpc3N1ZSBhIGNvbW1hbmQgdG8gZmlybXdhcmUgKi8KKyAgICBpZiAocmV0ID09IDApCisgICAgeworICAgICAgICByZXN1bHQgPSB6ZndVc2JTdWJtaXRDb250cm9sKGRldiwgRklSTVdBUkVfRE9XTkxPQURfQ09NUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBOVUxMLCAwKTsKKworICAgICAgICBpZiAocmVzdWx0ICE9IFpNX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHptX21zZzBfaW5pdChaTV9MVl8wLCAiRklSTVdBUkVfRE9XTkxPQURfQ09NUCBmYWlsZWQiKTsKKyAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiAwCisgICAgLyogUENJIGNvZGUgKi8KKyAgICAvKiBXYWl0IGZvciBmaXJtd2FyZSByZWFkeSAqLworICAgIHJlc3VsdCA9IHpmd1VzYlN1Ym1pdENvbnRyb2woZGV2LCBGSVJNV0FSRV9DT05GSVJNLCBVU0JfRElSX0lOIHwgMHg0MCwKKyAgICAgICAgICAgICAgICAgICAgIDAsIDAsICZyZXRfdmFsdWUsIHNpemVvZihyZXRfdmFsdWUpLCBIWik7CisKKyAgICBpZiAocmVzdWx0ICE9IDApCisgICAgeworICAgICAgICB6bV9tc2cwX2luaXQoWk1fTFZfMCwgIkNhbid0IHJlY2VpdmUgZmlybXdhcmUgcmVhZHk6ICIsIHJlc3VsdCk7CisgICAgICAgIHJldCA9IDE7CisgICAgfQorI2VuZGlmCisKK2V4aXQ6CisKKyAgICByZXR1cm4gcmV0OworCit9CisKK3UxNl90IHpmRmlybXdhcmVEb3dubG9hZE5vdEp1bXAoemRldl90KiBkZXYsIHUzMl90KiBmdywgdTMyX3QgbGVuLCB1MzJfdCBvZmZzZXQpCit7CisgICAgdTE2X3QgcmV0ID0gWk1fU1VDQ0VTUzsKKyAgICB1MzJfdCB1Q29kZU9mc3QgPSBvZmZzZXQ7CisgICAgdThfdCAqaW1hZ2UsICpwdHI7CisgICAgdTMyX3QgcmVzdWx0OworCisgICAgaW1hZ2UgPSAodThfdCopIGZ3OworICAgIHB0ciA9IGltYWdlOworCisgICAgd2hpbGUgKGxlbiA+IDApCisgICAgeworICAgICAgICB1MzJfdCB0cmFuc2xlbiA9IChsZW4gPiA0MDk2KSA/IDQwOTYgOiBsZW47CisKKyAgICAgICAgcmVzdWx0ID0gemZ3VXNiU3VibWl0Q29udHJvbChkZXYsIEZJUk1XQVJFX0RPV05MT0FELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MTZfdCkgKHVDb2RlT2ZzdCA+PiA4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBpbWFnZSwgdHJhbnNsZW4pOworCisgICAgICAgIGlmIChyZXN1bHQgIT0gWk1fU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgICAgem1fbXNnMF9pbml0KFpNX0xWXzAsICJGSVJNV0FSRV9ET1dOTE9BRCBmYWlsZWQiKTsKKyAgICAgICAgICAgIHJldCA9IDE7CisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBsZW4gLT0gdHJhbnNsZW47CisgICAgICAgIGltYWdlICs9IHRyYW5zbGVuOworICAgICAgICB1Q29kZU9mc3QgKz0gdHJhbnNsZW47IC8vIGluIFdvcmQgKDE2IGJpdCkKKworICAgICAgICByZXN1bHQgPSAwOworICAgIH0KKworZXhpdDoKKworICAgIHJldHVybiByZXQ7CisKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgIHpmSWRsR2V0RnJlZVR4ZENvdW50ICAgICAgICAqLworLyogICAgICBHZXQgZnJlZSBQQ0kgUENJIFR4RCBjb3VudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBTdGVwaGVuICAgICAgICAgICAgIFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gICAgMjAwNi42ICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordTMyX3QgemZIcEdldEZyZWVUeGRDb3VudCh6ZGV2X3QqIGRldikKK3sKKyAgICByZXR1cm4gemZ3VXNiR2V0RnJlZVR4UVNpemUoZGV2KTsKK30KKwordTMyX3QgemZIcEdldE1heFR4ZENvdW50KHpkZXZfdCogZGV2KQoreworICAgIC8vcmV0dXJuIDg7CisgICAgcmV0dXJuIHpmd1VzYkdldE1heFR4UVNpemUoZGV2KTsKK30KKwordm9pZCB6ZmlVc2JSZWdPdXRDb21wbGV0ZSh6ZGV2X3QqIGRldikKK3sKKyAgICByZXR1cm47Cit9CisKK2V4dGVybiB2b2lkIHpmUHVzaFZ0eHEoemRldl90KiBkZXYpOworCit2b2lkIHpmaVVzYk91dENvbXBsZXRlKHpkZXZfdCogZGV2LCB6YnVmX3QgKmJ1ZiwgdThfdCBzdGF0dXMsIHU4X3QgKmhkcikgeworI2lmbmRlZiBaTV9FTkFCTEVfQUdHUkVHQVRJT04KKyAgICBpZiAoYnVmKSB7CisgICAgICAgIHpmd0J1ZkZyZWUoZGV2LCBidWYsIDApOworICAgIH0KKyNlbHNlCisgICAgI2lmZGVmIFpNX0JZUEFTU19BR0dSX1NDSEVEVUxJTkcKKyAgICAvL1NpbXBseSBmcmVlIHRoZSBidWYgc2luY2UgQkEgcmV0cmFuc21pc3Npb24gaXMgZG9uZSBpbiB0aGUgZmlybXdhcmUKKyAgICBpZiAoYnVmKQorICAgIHsKKyAgICAgICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CisgICAgfQorICAgIHpmUHVzaFZ0eHEoZGV2KTsKKyAgICAjZWxzZQorICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKworICAgICNpZmRlZiBaTV9FTkFCTEVfRldfQkFfUkVUUkFOU01JU1NJT04KKyAgICAvL1NpbXBseSBmcmVlIHRoZSBidWYgc2luY2UgQkEgcmV0cmFuc21pc3Npb24gaXMgZG9uZSBpbiB0aGUgZmlybXdhcmUKKyAgICBpZiAoYnVmKQorICAgIHsKKyAgICAgICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CisgICAgfQorICAgICNlbHNlCisgICAgdThfdCBhZ2c7CisgICAgdTE2X3QgZnJhbWVUeXBlOworCisgICAgaWYoIWhkciAmJiBidWYpIHsKKyAgICAgICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CisgICAgICAgIC8vem1fZGVidWdfbXNnMCgiYnVmIEZyZWUgZHVlIHRvIGhkciA9PSBOVUxMIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZihoZHIgJiYgYnVmKSB7CisgICAgICAgIGZyYW1lVHlwZSA9IGhkcls4XSAmIDB4ZjsKKyAgICAgICAgYWdnID0gKHU4X3QpKGhkclsyXSA+PiA1ICkgJiAweDE7CisgICAgICAgIC8vem1fZGVidWdfbXNnMSgiQUdHPSIsIGFnZyk7CisKKyAgICAgICAgaWYgKCFzdGF0dXMpIHsKKyAgICAgICAgICAgIGlmIChhZ2cpIHsKKyAgICAgICAgICAgICAgICAvL2RlbGV0ZSBidWYgaW4gYmEgZmFpbCBxdWV1ZT8/CisgICAgICAgICAgICAgICAgLy9ub3QgZ2FubmEgaGFwcGVuPworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoYWdnKSB7CisgICAgICAgICAgICAgICAgLy9kb24ndCBkbyBhbnl0aGluZworICAgICAgICAgICAgICAgIC8vemZ3QnVmRnJlZShkZXYsIGJ1ZiwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAjZW5kaWYKKworICAgIGlmICh3ZC0+c3RhdGUgIT0gWk1fV0xBTl9TVEFURV9FTkFCTEVEKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiggKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKSB8fAorICAgICAgICAod2QtPndsYW5Nb2RlID09IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUgJiYgd2QtPnN0YS5FbmFibGVIVCkgfHwKKyAgICAgICAgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX1BTRVVETykgKSB7CisgICAgICAgIHpmQWdnVHhTY2hlZHVsZXIoZGV2LCAwKTsKKyAgICB9CisgICAgI2VuZGlmCisjZW5kaWYKKworICAgIHJldHVybjsKKworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHB1c2IuaCBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHVzYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YTBjNTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHB1c2IuaApAQCAtMCwwICsxLDQzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFp5REFTIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisvKiAgTW9kdWxlIE5hbWUgOiB1ZF9kZWZzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBBYnN0cmFjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFRoaXMgbW9kdWxlIGNvbnRhaW5zIFVTQiBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9ucy4gICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBOT1RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0hQVVNCX0gKKyNkZWZpbmUgX0hQVVNCX0gKKworI2RlZmluZSBaTV9PVFVTX0VOQUJMRV9SRVRSWV9GUkVRX0NIQU5HRQorI2RlZmluZSBaTV9CRUFDT05fQlVGRkVSX0FERFJFU1MgICAgICAgICAgICAweDExNzkwMAorCisjZGVmaW5lIFpNX01BWF9DTURfU0laRSAgICAgICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIFpNX0hBTF9NQVhfRUVQUk9NX1JFUSAgICAgICAgICAgICAgIDUxMAorI2RlZmluZSBaTV9IQUxfTUFYX0VFUFJPTV9QUlEgICAgICAgICAgICAgICAyCisKKy8qIEZvciBVU0IgU1RSRUFNIG1vZGUgKi8KKyNpZmRlZiBaTV9ESVNBQkxFX0FNU0RVOEtfU1VQUE9SVAorI2RlZmluZSBaTV9NQVhfVVNCX0lOX1RSQU5TRkVSX1NJWkUgICAgICAgICA0MDk2CisjZWxzZQorI2RlZmluZSBaTV9NQVhfVVNCX0lOX1RSQU5TRkVSX1NJWkUgICAgICAgICA4MTkyCisjZW5kaWYKKyNkZWZpbmUgWk1fVVNCX1NUUkVBTV9NT0RFX1RBR19MRU4gICAgICAgICAgNAorI2RlZmluZSBaTV9VU0JfU1RSRUFNX01PREVfVEFHICAgICAgICAgICAgICAweDRlMDAKKyNkZWZpbmUgWk1fVVNCX01BWF9FUElOVF9CVUZGRVIgICAgICAgICAgICAgNjQKKworc3RydWN0IHpzQ21kUQoreworICAgIHUxNl90IHNyYzsKKyAgICB1MTZfdCBjbWRMZW47CisgICAgdThfdCogYnVmOworICAgIHUzMl90IGNtZFtaTV9NQVhfQ01EX1NJWkUvNF07Cit9OworCitzdHJ1Y3QgenNDb21tYW5kCit7CisgICAgdTE2X3QgZGVsYXlXY21kQ291bnQ7CisgICAgdTMyX3QgZGVsYXlXY21kQWRkclsoWk1fQ01EX1FVRVVFX1NJWkUtNCkvNF07CisgICAgdTMyX3QgZGVsYXlXY21kVmFsWyhaTV9DTURfUVVFVUVfU0laRS00KS80XTsKK307CisKK3N0cnVjdCB6c0hhbFJ4SW5mbworeworICAgIHUzMl90IGN1cnJlbnRSU1NJWzddOyAgICAgICAvKiBSU1NJIGNvbWJpbmVkICovCisgICAgdTMyX3QgY3VycmVudFJ4RVZNWzE0XTsKKyAgICB1MzJfdCBjdXJyZW50UnhEYXRhTVQ7CisgICAgdTMyX3QgY3VycmVudFJ4RGF0YU1DUzsKKyAgICB1MzJfdCBjdXJyZW50UnhEYXRhQlc7CisgICAgdTMyX3QgY3VycmVudFJ4RGF0YVNHOworfTsKKworc3RydWN0IHpzSHBQcml2Cit7CisgICAgdTE2X3QgaHdGcmVxdWVuY3k7CisgICAgdThfdCAgaHdCdzQwOworICAgIHU4X3QgIGh3RXh0T2Zmc2V0OworCisgICAgdThfdCAgZGlzYWJsZURmc0NoOworCisgICAgdTMyX3QgaGFsQ2FwYWJpbGl0eTsKKworICAgIC8qIEZvcnR1bmF0ZWx5IHRoZSBzZWNvbmQgbG9vcCBjYW4gYmUgZGlzYWJsZWQgd2l0aCBhIGJpdCAqLworICAgIC8qIGNhbGxlZCBlbl9wZF9kY19vZmZzZXRfdGhyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIHU4X3QgaHdOb3RGaXJzdEluaXQ7CisKKyAgICAvKiBjb21tYW5kIHF1ZXVlICovCisgICAgdTE2X3QgICAgICAgICAgICAgICBjbWRIZWFkOworICAgIHUxNl90ICAgICAgICAgICAgICAgY21kVGFpbDsKKyNpZmRlZiBaTV9YUF9VU0JfTVVMVENNRAorICAgIHUxNl90ICAgICAgICAgICAgICAgY21kU2VuZDsgIC8vIFVzZWQgZm9yIE11bHQgc2VuZCBVU0IgY21kCisjZW5kaWYKKyAgICBzdHJ1Y3QgenNDbWRRICAgICAgIGNtZFFbWk1fQ01EX1FVRVVFX1NJWkVdOworICAgIHUxNl90ICAgICAgICAgICAgICAgY21kUGVuZGluZzsKKyAgICBzdHJ1Y3QgenNDb21tYW5kICAgIGNtZDsgLyogYnVmZmVyIGZvciBkZWxheWVkIGNvbW1hbmRzICovCisgICAgdThfdCAgICAgICAgICAgICAgICBsZWRNb2RlWzJdOworICAgIHUzMl90ICAgICAgICAgICAgICAgY3RsQnVzeTsKKyAgICB1MzJfdCAgICAgICAgICAgICAgIGV4dEJ1c3k7CisKKyAgICAvKgorICAgICAqIEFOSSAmIFJhZGFyIHN1cHBvcnQuCisgICAgICovCisgICAgdTMyX3QgICBwcm9jUGh5RXJyOyAgICAgICAgIC8qIFByb2Nlc3MgUGh5IGVycnMgKi8KKyAgICB1OF90IGhhc0h3UGh5Q291bnRlcnM7ICAgLyogSGFyZHdhcmUgaGFzIHBoeSBjb3VudGVycyAqLworICAgIHUzMl90ICAgYW5pUGVyaW9kOyAgICAgICAgICAvKiBhbmkgdXBkYXRlIGxpc3QgcGVyaW9kICovCisgICAgc3RydWN0IHpzQW5pU3RhdHMgICBzdGF0czsgICAgICAvKiB2YXJpb3VzIHN0YXRpc3RpY3MgKi8KKyAgICBzdHJ1Y3QgenNBbmlTdGF0ZSAgICpjdXJhbmk7ICAgIC8qIGNhY2hlZCBsYXN0IHJlZmVyZW5jZSAqLworICAgIHN0cnVjdCB6c0FuaVN0YXRlICAgYW5pWzUwXTsgICAvKiBwZXItY2hhbm5lbCBzdGF0ZSAqLworCisgICAgLyoKKyAgICAgKiBBbmkgdGFibGVzIHRoYXQgY2hhbmdlIGJldHdlZW4gdGhlIDU0MTYgYW5kIDUzMTIuCisgICAgICogVGhlc2UgZ2V0IHNldCBhdCBhdHRhY2ggdGltZS4KKyAgICAgKiBYWFggZG9uJ3QgYmVsb25nIGhlcmUKKyAgICAgKiBYWFggbmVlZCBiZXR0ZXIgZXhwbGFuYXRpb24KKyAgICAgKi8KKyAgICBzMzJfdCAgICAgdG90YWxTaXplRGVzaXJlZFs1XTsKKyAgICBzMzJfdCAgICAgY29hcnNlSGlnaFs1XTsKKyAgICBzMzJfdCAgICAgY29hcnNlTG93WzVdOworICAgIHMzMl90ICAgICBmaXJwd3JbNV07CisKKyAgICAvKgorICAgICAqIEFOSSByZWxhdGVkIFBIWSByZWdpc3RlciB2YWx1ZS4KKyAgICAgKi8KKyAgICB1MzJfdCByZWdQSFlEZXNpcmVkU1o7CisgICAgdTMyX3QgcmVnUEhZRmluZFNpZzsKKyAgICB1MzJfdCByZWdQSFlBZ2NDdGwxOworICAgIHUzMl90IHJlZ1BIWVNmY29ycjsKKyAgICB1MzJfdCByZWdQSFlTZmNvcnJMb3c7CisgICAgdTMyX3QgcmVnUEhZVGltaW5nNTsKKyAgICB1MzJfdCByZWdQSFlDY2tEZXRlY3Q7CisKKyAgICB1MzJfdCBlZXByb21JbWFnZVsxMDI0XTsKKyAgICB1MzJfdCBlZXByb21JbWFnZUluZGV4OworICAgIHUzMl90IGVlcHJvbUltYWdlUmRSZXE7CisKKyAgICB1OF90ICBoYWxSZUluaXQ7CisKKyAgICB1OF90ICBPcEZsYWdzOworCisgICAgdThfdCB0UG93MnhDY2tbNF07CisgICAgdThfdCB0UG93MngyZ1s0XTsKKyAgICB1OF90IHRQb3cyeDJnMjRIZWF2eUNsaXBPZmZzZXQ7CisgICAgdThfdCB0UG93MngyZ0h0MjBbOF07CisgICAgdThfdCB0UG93MngyZ0h0NDBbOF07CisgICAgdThfdCB0UG93Mng1Z1s0XTsKKyAgICB1OF90IHRQb3cyeDVnSHQyMFs4XTsKKyAgICB1OF90IHRQb3cyeDVnSHQ0MFs4XTsKKworICAgIC8qIGh3QkJIZWF2eUNsaXAgOiB1c2VkIGNvbXBhdGliaWxpdHkgICAgICAgICAgICovCisgICAgLyogICAgICAgICAgICAgMCA6IGRvbmdsZSBub3Qgc3VwcG9ydC4gICAgICAgICAgKi8KKyAgICAvKiAgICAgICAgICAgICAhMDogc3VwcG9ydCBoZWF2eSBjbGlwLiAgICAgICAgICAqLworICAgIHU4X3QgaHdCQkhlYXZ5Q2xpcDsKKyAgICB1OF90IGVuYWJsZUJCSGVhdnlDbGlwOyAvKiAwPT5mb3JjZSBkaXNhYmxlIDE9PmVuYWJsZSAqLworICAgIHU4X3QgZG9CQkhlYXZ5Q2xpcDsgICAgIC8qIHNldCAxIGlmIGhlYXZ5IGNsaXAgbmVlZCBieSBlYWNoIGZyZXF1ZW5jeSBzd2l0Y2ggKi8KKyAgICB1MzJfdCBzZXRWYWx1ZUhlYXZ5Q2xpcDsgLyogc2F2ZSBzZXR0aW5nIHZhbHVlIGZvciBoZWF2eSBjbGlwIHdoZW4gY29tcGxldGVkIHJvdXRpbmUgKi8KKworICAgIC8qCisgICAgICogUnhkYXRhIFJTU0ksIEVWTSwgUmF0ZSBldGMuLi4KKyAgICAgKi8KKyAgICBzdHJ1Y3QgenNIYWxSeEluZm8gaGFsUnhJbmZvOworCisgICAgdTMyX3QgdXNiU2VuZEJ5dGVzOworICAgIHUzMl90IHVzYkFjU2VuZEJ5dGVzWzRdOworCisgICAgdTE2X3QgYWdnTWF4RHVyYXRpb25CRTsKKyAgICB1MzJfdCBhZ2dQa3ROdW07CisKKyAgICB1MTZfdCB0eG9wWzRdOworICAgIHUxNl90IGN3bWluWzRdOworICAgIHUxNl90IGN3bWF4WzRdOworICAgIHU4X3QgIHN0cm9uZ1JTU0k7CisgICAgdThfdCAgcnhTdHJvbmdSU1NJOworCisgICAgdThfdCAgc2xvdFR5cGU7ICAvLzAtPjIwdXMsIDE9Pjl1cworCisjaWZkZWYgWk1fT1RVU19SWF9TVFJFQU1fTU9ERQorICAgIHUxNl90IHVzYlJ4UmVtYWluTGVuOworICAgIHUxNl90IHVzYlJ4UGt0TGVuOworICAgIHUxNl90IHVzYlJ4UGFkTGVuOworICAgIHUxNl90IHVzYlJ4VHJhbnNmZXJMZW47CisgICAgemJ1Zl90ICAqcmVtYWluQnVmOworI2VuZGlmCisKKyAgICB1OF90ICAgIGRvdDExTW9kZTsKKworICAgIHU4X3QgICAgaWJzc0JjbkVuYWJsZWQ7CisgICAgdTMyX3QgICBpYnNzQmNuSW50ZXJ2YWw7CisKKyAgICAvLyBGb3IgcmUtaXNzdWUgdGhlIGZyZXF1ZW5jeSBjaGFuZ2UgY29tbWFuZAorICAgIHUzMl90ICAgbGF0ZXN0RnJlcXVlbmN5OworICAgIHU4X3QgICAgbGF0ZXN0Qnc0MDsKKyAgICB1OF90ICAgIGxhdGVzdEV4dE9mZnNldDsKKyAgICB1OF90ICAgIGZyZXFSZXRyeUNvdW50ZXI7CisKKyAgICB1OF90ICAgIHJlY29yZEZyZXFSZXRyeUNvdW50ZXI7CisgICAgdThfdCAgICBpc1NpdGVTdXJ2ZXk7CisgICAgdThfdCAgICBjb2xkUmVzZXROZWVkRnJlcTsKKworICAgIHU2NF90ICAgY2FtUm9sbENhbGxUYWJsZTsKKyAgICB1OF90ICAgIGN1cnJlbnRBY2tSdHNUcGM7CisKKyAgICAvKiAjMSBTYXZlIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSByZWxhdGVkIFJJRlMgcmVnaXN0ZXIgc2V0dGluZ3MgKi8KKyAgICAvL3UzMl90ICAgaXNJbml0aWFsUGh5OworICAgIHUzMl90ICAgaW5pdERlc2lyZWRTaWdTaXplOworICAgIHUzMl90ICAgaW5pdEFHQzsKKyAgICB1MzJfdCAgIGluaXRBZ2NDb250cm9sOworICAgIHUzMl90ICAgaW5pdFNlYXJjaFN0YXJ0RGVsYXk7CisgICAgdTMyX3QgICBpbml0UklGU1NlYXJjaFBhcmFtczsKKyAgICB1MzJfdCAgIGluaXRGYXN0Q2hhbm5lbENoYW5nZUNvbnRyb2w7CisKKyAgICAvKiBEeW5hbWljIFNJRlMgZm9yIHJldHJhbnNtaXNzaW9uIGV2ZW50ICovCisgICAgdThfdCAgICByZXRyYW5zbWlzc2lvbkV2ZW50OworICAgIHU4X3QgICAgbGF0ZXN0U0lGUzsKK307CisKK2V4dGVybiB1MzJfdCB6ZkhwTG9hZEVFUFJPTUZyb21GVyh6ZGV2X3QqIGRldik7CisKKwordHlwZWRlZiB1OF90IEFfVUlOVDg7Cit0eXBlZGVmIHM4X3QgQV9JTlQ4OwordHlwZWRlZiB1MTZfdCBBX1VJTlQxNjsKK3R5cGVkZWYgdTMyX3QgQV9VSU5UMzI7CisjZGVmaW5lIF9fQVRUUklCX1BBQ0sKKworI3ByYWdtYSBwYWNrIChwdXNoLCAxKQorCisjZGVmaW5lIEFSNTQxNl9FRVBfVkVSICAgICAgICAgICAgICAgMHhFCisjZGVmaW5lIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0sgICAgMHhGRkYKKyNkZWZpbmUgQVI1NDE2X0VFUF9OT19CQUNLX1ZFUiAgICAgICAweDEKKyNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMiAgICAgICAweDIgIC8vIEFkZHMgbW9kYWwgcGFyYW1zIHR4RnJhbWVUb1BhT24sIHR4RnJhbWV0b0RhdGFTdGFydCwgaHQ0MFBvd2VySW5jCisjZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMgICAgICAgMHgzICAvLyBBZGRzIG1vZGFsIHBhcmFtcyBic3dBdHRlbiwgYnN3TWFyZ2luLCBzd1NldHRsZSBhbmQgYmFzZSBPcEZsYWdzIGZvciBIVDIwLzQwIERpc2FibGUKKworLy8gMTYtYml0IG9mZnNldCBsb2NhdGlvbiBzdGFydCBvZiBjYWxpYnJhdGlvbiBzdHJ1Y3QKKyNkZWZpbmUgQVI1NDE2X0VFUF9TVEFSVF9MT0MgICAgICAgICAyNTYKKyNkZWZpbmUgQVI1NDE2X05VTV81R19DQUxfUElFUlMgICAgICA4CisjZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTICAgICAgNAorI2RlZmluZSBBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlMgIDgKKyNkZWZpbmUgQVI1NDE2X05VTV81R180MF9UQVJHRVRfUE9XRVJTICA4CisjZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMgMworI2RlZmluZSBBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMgIDQKKyNkZWZpbmUgQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTICA0CisjZGVmaW5lIEFSNTQxNl9OVU1fQ1RMUyAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQVI1NDE2X05VTV9CQU5EX0VER0VTICAgICAgICA4CisjZGVmaW5lIEFSNTQxNl9OVU1fUERfR0FJTlMgICAgICAgICAgNAorI2RlZmluZSBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAgICAgIDQKKyNkZWZpbmUgQVI1NDE2X1BEX0dBSU5fSUNFUFRTICAgICAgICA1CisjZGVmaW5lIEFSNTQxNl9FRVBST01fTU9EQUxfU1BVUlMgICAgNQorI2RlZmluZSBBUjU0MTZfTUFYX1JBVEVfUE9XRVIgICAgICAgIDYzCisjZGVmaW5lIEFSNTQxNl9OVU1fUERBRENfVkFMVUVTICAgICAgMTI4CisjZGVmaW5lIEFSNTQxNl9OVU1fUkFURVMgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVI1NDE2X0JDSEFOX1VOVVNFRCAgICAgICAgICAweEZGCisjZGVmaW5lIEFSNTQxNl9NQVhfUFdSX1JBTkdFX0lOX0hBTEZfREIgNjQKKyNkZWZpbmUgQVI1NDE2X09QRkxBR1NfMTFBICAgICAgICAgICAweDAxCisjZGVmaW5lIEFSNTQxNl9PUEZMQUdTXzExRyAgICAgICAgICAgMHgwMgorI2RlZmluZSBBUjU0MTZfT1BGTEFHU181R19IVDQwICAgICAgIDB4MDQKKyNkZWZpbmUgQVI1NDE2X09QRkxBR1NfMkdfSFQ0MCAgICAgICAweDA4CisjZGVmaW5lIEFSNTQxNl9PUEZMQUdTXzVHX0hUMjAgICAgICAgMHgxMAorI2RlZmluZSBBUjU0MTZfT1BGTEFHU18yR19IVDIwICAgICAgIDB4MjAKKyNkZWZpbmUgQVI1NDE2X0VFUE1JU0NfQklHX0VORElBTiAgICAweDAxCisjZGVmaW5lIEZSRVEyRkJJTih4LHkpICgoeSkgPyAoKHgpIC0gMjMwMCkgOiAoKCh4KSAtIDQ4MDApIC8gNSkpCisjZGVmaW5lIEFSNTQxNl9NQVhfQ0hBSU5TICAgICAgICAgICAgMgorI2RlZmluZSBBUjU0MTZfQU5UXzE2UyAgICAgICAgICAgICAgIDI1CisKKyNkZWZpbmUgQVI1NDE2X05VTV9BTlRfQ0hBSU5fRklFTERTICAgICA3CisjZGVmaW5lIEFSNTQxNl9OVU1fQU5UX0NPTU1PTl9GSUVMRFMgICAgNAorI2RlZmluZSBBUjU0MTZfU0laRV9BTlRfQ0hBSU5fRklFTEQgICAgIDMKKyNkZWZpbmUgQVI1NDE2X1NJWkVfQU5UX0NPTU1PTl9GSUVMRCAgICA0CisjZGVmaW5lIEFSNTQxNl9BTlRfQ0hBSU5fTUFTSyAgICAgICAgICAgMHg3CisjZGVmaW5lIEFSNTQxNl9BTlRfQ09NTU9OX01BU0sgICAgICAgICAgMHhmCisjZGVmaW5lIEFSNTQxNl9DSEFJTl8wX0lEWCAgICAgICAgICAgICAgMAorI2RlZmluZSBBUjU0MTZfQ0hBSU5fMV9JRFggICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVI1NDE2X0NIQUlOXzJfSURYICAgICAgICAgICAgICAyCisKKworLyogQ2FwYWJpbGl0aWVzIEVudW0gKi8KK3R5cGVkZWYgZW51bSB7CisgICAgRUVQQ0FQX0NPTVBSRVNTX0RJUyAgPSAweDAwMDEsCisgICAgRUVQQ0FQX0FFU19ESVMgICAgICAgPSAweDAwMDIsCisgICAgRUVQQ0FQX0ZBU1RGUkFNRV9ESVMgPSAweDAwMDQsCisgICAgRUVQQ0FQX0JVUlNUX0RJUyAgICAgPSAweDAwMDgsCisgICAgRUVQQ0FQX01BWFFDVV9NICAgICAgPSAweDAxRjAsCisgICAgRUVQQ0FQX01BWFFDVV9TICAgICAgPSA0LAorICAgIEVFUENBUF9IRUFWWV9DTElQX0VOID0gMHgwMjAwLAorICAgIEVFUENBUF9LQ19FTlRSSUVTX00gID0gMHhGMDAwLAorICAgIEVFUENBUF9LQ19FTlRSSUVTX1MgID0gMTIsCit9IEVFUFJPTV9DQVBBQklMSVRJRVM7CisKK3R5cGVkZWYgZW51bSBBcjU0MTZfUmF0ZXMgeworICAgIHJhdGU2bWIsICByYXRlOW1iLCAgcmF0ZTEybWIsIHJhdGUxOG1iLAorICAgIHJhdGUyNG1iLCByYXRlMzZtYiwgcmF0ZTQ4bWIsIHJhdGU1NG1iLAorICAgIHJhdGUxbCwgICByYXRlMmwsICAgcmF0ZTJzLCAgIHJhdGU1XzVsLAorICAgIHJhdGU1XzVzLCByYXRlMTFsLCAgcmF0ZTExcywgIHJhdGVYciwKKyAgICByYXRlSHQyMF8wLCByYXRlSHQyMF8xLCByYXRlSHQyMF8yLCByYXRlSHQyMF8zLAorICAgIHJhdGVIdDIwXzQsIHJhdGVIdDIwXzUsIHJhdGVIdDIwXzYsIHJhdGVIdDIwXzcsCisgICAgcmF0ZUh0NDBfMCwgcmF0ZUh0NDBfMSwgcmF0ZUh0NDBfMiwgcmF0ZUh0NDBfMywKKyAgICByYXRlSHQ0MF80LCByYXRlSHQ0MF81LCByYXRlSHQ0MF82LCByYXRlSHQ0MF83LAorICAgIHJhdGVEdXBDY2ssIHJhdGVEdXBPZmRtLCByYXRlRXh0Q2NrLCByYXRlRXh0T2ZkbSwKKyAgICBBcjU0MTZSYXRlU2l6ZQorfSBBUjU0MTZfUkFURVM7CisKK3R5cGVkZWYgc3RydWN0IGVlcEZsYWdzIHsKKyAgICBBX1VJTlQ4ICBvcEZsYWdzOworICAgIEFfVUlOVDggIGVlcE1pc2M7Cit9IF9fQVRUUklCX1BBQ0sgRUVQX0ZMQUdTOworCisjZGVmaW5lIEFSNTQxNl9DSEVDS1NVTV9MT0NBVElPTiAoQVI1NDE2X0VFUF9TVEFSVF9MT0MgKyAxKQordHlwZWRlZiBzdHJ1Y3QgQmFzZUVlcEhlYWRlciB7CisgICAgQV9VSU5UMTYgIGxlbmd0aDsKKyAgICBBX1VJTlQxNiAgY2hlY2tzdW07CisgICAgQV9VSU5UMTYgIHZlcnNpb247CisgICAgRUVQX0ZMQUdTIG9wQ2FwRmxhZ3M7CisgICAgQV9VSU5UMTYgIHJlZ0RtblsyXTsKKyAgICBBX1VJTlQ4ICAgbWFjQWRkcls2XTsKKyAgICBBX1VJTlQ4ICAgcnhNYXNrOworICAgIEFfVUlOVDggICB0eE1hc2s7CisgICAgQV9VSU5UMTYgIHJmU2lsZW50OworICAgIEFfVUlOVDE2ICBibHVlVG9vdGhPcHRpb25zOworICAgIEFfVUlOVDE2ICBkZXZpY2VDYXA7CisgICAgQV9VSU5UMzIgIGJpbkJ1aWxkTnVtYmVyOworICAgIEFfVUlOVDggICBkZXZpY2VUeXBlOworICAgIEFfVUlOVDggICBmdXR1cmVCYXNlWzMzXTsKK30gX19BVFRSSUJfUEFDSyBCQVNFX0VFUF9IRUFERVI7IC8vIDY0IEIKKwordHlwZWRlZiBzdHJ1Y3Qgc3B1ckNoYW5TdHJ1Y3QgeworICAgIEFfVUlOVDE2IHNwdXJDaGFuOworICAgIEFfVUlOVDggIHNwdXJSYW5nZUxvdzsKKyAgICBBX1VJTlQ4ICBzcHVyUmFuZ2VIaWdoOworfSBfX0FUVFJJQl9QQUNLIFNQVVJfQ0hBTjsKKwordHlwZWRlZiBzdHJ1Y3QgTW9kYWxFZXBIZWFkZXIgeworICAgIEFfVUlOVDMyICBhbnRDdHJsQ2hhaW5bQVI1NDE2X01BWF9DSEFJTlNdOyAgICAgICAvLyAxMgorICAgIEFfVUlOVDMyICBhbnRDdHJsQ29tbW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyA0CisgICAgQV9JTlQ4ICAgIGFudGVubmFHYWluQ2hbQVI1NDE2X01BWF9DSEFJTlNdOyAgICAgIC8vIDMKKyAgICBBX1VJTlQ4ICAgc3dpdGNoU2V0dGxpbmc7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gMQorICAgIEFfVUlOVDggICB0eFJ4QXR0ZW5DaFtBUjU0MTZfTUFYX0NIQUlOU107ICAgICAgICAvLyAzCisgICAgQV9VSU5UOCAgIHJ4VHhNYXJnaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107ICAgICAgIC8vIDMKKyAgICBBX0lOVDggICAgYWRjRGVzaXJlZFNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gMQorICAgIEFfSU5UOCAgICBwZ2FEZXNpcmVkU2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAvLyAxCisgICAgQV9VSU5UOCAgIHhsbmFHYWluQ2hbQVI1NDE2X01BWF9DSEFJTlNdOyAgICAgICAgIC8vIDMKKyAgICBBX1VJTlQ4ICAgdHhFbmRUb1hwYU9mZjsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMQorICAgIEFfVUlOVDggICB0eEVuZFRvUnhPbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxCisgICAgQV9VSU5UOCAgIHR4RnJhbWVUb1hwYU9uOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEKKyAgICBBX1VJTlQ4ICAgdGhyZXNoNjI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMQorICAgIEFfSU5UOCAgICBub2lzZUZsb29yVGhyZXNoQ2hbQVI1NDE2X01BWF9DSEFJTlNdOyAvLyAzCisgICAgQV9VSU5UOCAgIHhwZEdhaW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEKKyAgICBBX1VJTlQ4ICAgeHBkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMQorICAgIEFfSU5UOCAgICBpcUNhbElDaFtBUjU0MTZfTUFYX0NIQUlOU107ICAgICAgICAgICAvLyAxCisgICAgQV9JTlQ4ICAgIGlxQ2FsUUNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsgICAgICAgICAgIC8vIDEKKyAgICBBX1VJTlQ4ICAgcGRHYWluT3ZlcmxhcDsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMQorICAgIEFfVUlOVDggICBvYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxCisgICAgQV9VSU5UOCAgIGRiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEKKyAgICBBX1VJTlQ4ICAgeHBhQmlhc0x2bDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMQorICAgIEFfVUlOVDggICBwd3JEZWNyZWFzZUZvcjJDaGFpbjsgICAgICAgICAgICAgICAgICAvLyAxCisgICAgQV9VSU5UOCAgIHB3ckRlY3JlYXNlRm9yM0NoYWluOyAgICAgICAgICAgICAgICAgIC8vIDEgLT4gNDggQgorICAgIEFfVUlOVDggICB0eEZyYW1lVG9EYXRhU3RhcnQ7ICAgICAgICAgICAgICAgICAgICAvLyAxCisgICAgQV9VSU5UOCAgIHR4RnJhbWVUb1BhT247ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEKKyAgICBBX1VJTlQ4ICAgaHQ0MFBvd2VySW5jRm9yUGRhZGM7ICAgICAgICAgICAgICAgICAgLy8gMQorICAgIEFfVUlOVDggICBic3dBdHRlbltBUjU0MTZfTUFYX0NIQUlOU107ICAgICAgICAgICAvLyAzCisgICAgQV9VSU5UOCAgIGJzd01hcmdpbltBUjU0MTZfTUFYX0NIQUlOU107ICAgICAgICAgIC8vIDMKKyAgICBBX1VJTlQ4ICAgc3dTZXR0bGVIdDQwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMQorICAgIEFfVUlOVDggICBmdXR1cmVNb2RhbFsyMl07ICAgICAgICAgICAgICAgICAgICAgICAvLworICAgIFNQVVJfQ0hBTiBzcHVyQ2hhbnNbQVI1NDE2X0VFUFJPTV9NT0RBTF9TUFVSU107ICAvLyAyMCBCCit9IF9fQVRUUklCX1BBQ0sgTU9EQUxfRUVQX0hFQURFUjsgICAgICAgICAgICAgICAgICAgIC8vID09IDEwMCBCCisKK3R5cGVkZWYgc3RydWN0IGNhbERhdGFQZXJGcmVxIHsKKyAgICBBX1VJTlQ4IHB3clBkZ1tBUjU0MTZfTlVNX1BEX0dBSU5TXVtBUjU0MTZfUERfR0FJTl9JQ0VQVFNdOworICAgIEFfVUlOVDggdnBkUGRnW0FSNTQxNl9OVU1fUERfR0FJTlNdW0FSNTQxNl9QRF9HQUlOX0lDRVBUU107Cit9IF9fQVRUUklCX1BBQ0sgQ0FMX0RBVEFfUEVSX0ZSRVE7CisKK3R5cGVkZWYgc3RydWN0IENhbFRhcmdldFBvd2VyTGVnYWN5IHsKKyAgICBBX1VJTlQ4ICBiQ2hhbm5lbDsKKyAgICBBX1VJTlQ4ICB0UG93MnhbNF07Cit9IF9fQVRUUklCX1BBQ0sgQ0FMX1RBUkdFVF9QT1dFUl9MRUc7CisKK3R5cGVkZWYgc3RydWN0IENhbFRhcmdldFBvd2VySHQgeworICAgIEFfVUlOVDggIGJDaGFubmVsOworICAgIEFfVUlOVDggIHRQb3cyeFs4XTsKK30gX19BVFRSSUJfUEFDSyBDQUxfVEFSR0VUX1BPV0VSX0hUOworCisjaWYgZGVmaW5lZChBUkNIX0JJR19FTkRJQU4pIHx8IGRlZmluZWQoQklHX0VORElBTikKK3R5cGVkZWYgc3RydWN0IENhbEN0bEVkZ2VzIHsKKyAgICBBX1VJTlQ4ICBiQ2hhbm5lbDsKKyAgICBBX1VJTlQ4ICBmbGFnICAgOjIsCisgICAgICAgICAgICAgdFBvd2VyIDo2OworfSBfX0FUVFJJQl9QQUNLIENBTF9DVExfRURHRVM7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3QgQ2FsQ3RsRWRnZXMgeworICAgIEFfVUlOVDggIGJDaGFubmVsOworICAgIEFfVUlOVDggIHRQb3dlciA6NiwKKyAgICAgICAgICAgICBmbGFnICAgOjI7Cit9IF9fQVRUUklCX1BBQ0sgQ0FMX0NUTF9FREdFUzsKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBDYWxDdGxEYXRhIHsKKyAgICBDQUxfQ1RMX0VER0VTICBjdGxFZGdlc1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV9CQU5EX0VER0VTXTsKK30gX19BVFRSSUJfUEFDSyBDQUxfQ1RMX0RBVEE7CisKK3R5cGVkZWYgc3RydWN0IGFyNTQxNkVlcHJvbSB7CisgICAgQkFTRV9FRVBfSEVBREVSICAgIGJhc2VFZXBIZWFkZXI7ICAgICAgICAgLy8gNjQgQgorICAgIEFfVUlOVDggICBjdXN0RGF0YVs2NF07ICAgICAgICAgICAgICAgICAgIC8vIDY0IEIKKyAgICBNT0RBTF9FRVBfSEVBREVSICAgbW9kYWxIZWFkZXJbMl07ICAgICAgICAvLyAyMDAgQgorICAgIEFfVUlOVDggICAgICAgICAgICBjYWxGcmVxUGllcjVHW0FSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTXTsKKyAgICBBX1VJTlQ4ICAgICAgICAgICAgY2FsRnJlcVBpZXIyR1tBUjU0MTZfTlVNXzJHX0NBTF9QSUVSU107CisgICAgQ0FMX0RBVEFfUEVSX0ZSRVEgIGNhbFBpZXJEYXRhNUdbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTXTsKKyAgICBDQUxfREFUQV9QRVJfRlJFUSAgY2FsUGllckRhdGEyR1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV8yR19DQUxfUElFUlNdOworICAgIENBTF9UQVJHRVRfUE9XRVJfTEVHIGNhbFRhcmdldFBvd2VyNUdbQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTXTsKKyAgICBDQUxfVEFSR0VUX1BPV0VSX0hUICBjYWxUYXJnZXRQb3dlcjVHSFQyMFtBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlNdOworICAgIENBTF9UQVJHRVRfUE9XRVJfSFQgIGNhbFRhcmdldFBvd2VyNUdIVDQwW0FSNTQxNl9OVU1fNUdfNDBfVEFSR0VUX1BPV0VSU107CisgICAgQ0FMX1RBUkdFVF9QT1dFUl9MRUcgY2FsVGFyZ2V0UG93ZXJDY2tbQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSU107CisgICAgQ0FMX1RBUkdFVF9QT1dFUl9MRUcgY2FsVGFyZ2V0UG93ZXIyR1tBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOworICAgIENBTF9UQVJHRVRfUE9XRVJfSFQgIGNhbFRhcmdldFBvd2VyMkdIVDIwW0FSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSU107CisgICAgQ0FMX1RBUkdFVF9QT1dFUl9IVCAgY2FsVGFyZ2V0UG93ZXIyR0hUNDBbQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTXTsKKyAgICBBX1VJTlQ4ICAgICAgICAgICAgY3RsSW5kZXhbQVI1NDE2X05VTV9DVExTXTsKKyAgICBDQUxfQ1RMX0RBVEEgICAgICAgY3RsRGF0YVtBUjU0MTZfTlVNX0NUTFNdOworICAgIEFfVUlOVDggICAgICAgICAgICBwYWRkaW5nOworfSBfX0FUVFJJQl9QQUNLIEFSNTQxNl9FRVBST007CisKKyNwcmFnbWEgcGFjayAocG9wKQorCit0eXBlZGVmIGVudW0gQ29uZm9ybWFuY2VUZXN0TGltaXRzIHsKKyAgICBGQ0MgICAgICAgID0gMHgxMCwKKyAgICBNS0sgICAgICAgID0gMHg0MCwKKyAgICBFVFNJICAgICAgID0gMHgzMCwKKyAgICBTRF9OT19DVEwgID0gMHhFMCwKKyAgICBOT19DVEwgICAgID0gMHhGRiwKKyAgICBDVExfTU9ERV9NID0gMHhGLAorICAgIENUTF8xMUEgICAgPSAwLAorICAgIENUTF8xMUIgICAgPSAxLAorICAgIENUTF8xMUcgICAgPSAyLAorICAgIENUTF9UVVJCTyAgPSAzLAorICAgIENUTF8xMDhHICAgPSA0LAorICAgIENUTF8yR0hUMjAgPSA1LAorICAgIENUTF81R0hUMjAgPSA2LAorICAgIENUTF8yR0hUNDAgPSA3LAorICAgIENUTF81R0hUNDAgPSA4LAorfSBBVEhfQ1RMUzsKKworI2VuZGlmIC8qICNpZm5kZWYgX0hQVVNCX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9vdHVzLmluaSBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9vdHVzLmluaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGVmZWI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL290dXMuaW5pCkBAIC0wLDAgKzEsNDE0IEBACisvKiA4NjAyIDogdXBkYXRlIG1pc21hdGNoIHJlZ2lzdGVyIGJldHdlZW4gTkRJUyBhbmQgQVJUICovCitzdGF0aWMgY29uc3QgdTMyX3QgYXI1NDE2TW9kZXNbXVs2XSA9IHsKKy8qIFJlZ2lzdGVyICAgQS0yMCAgICAgICAgQS0yMC80MCAgICAgRy0yMC80MCAgICAgRy0yMCAgICAgICAgRy1UdXJibyAgICAqLworICAgICB7MHg5ODAwLCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAwfSwKKyAgICAgezB4OTgwNCwgMHgwMDAwMDMwMCwgMHgwMDAwMDNjNCwgMHgwMDAwMDNjNCwgMHgwMDAwMDMwMCwgMH0sCisgICAgIHsweDk4MDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHg5ODBjLCAweGFkODQ4ZTE5LCAweGFkODQ4ZTE5LCAweGFkODQ4ZTE5LCAweGFkODQ4ZTE5LCAwfSwKKyAgICAgezB4OTgxMCwgMHg3ZDE0ZTAwMCwgMHg3ZDE0ZTAwMCwgMHg3ZDE0ZTAwMCwgMHg3ZDE0ZTAwMCwgMH0sCisgICAgIHsweDk4MTQsIDB4OWMwYTlmNmIsIDB4OWMwYTlmNmIsIDB4OWMwYTlmNmIsIDB4OWMwYTlmNmIsIDB9LAorICAgICB7MHg5ODE4LCAweDAwMDAwMDkwLCAweDAwMDAwMDkwLCAweDAwMDAwMDkwLCAweDAwMDAwMDkwLCAwfSwKKyAgICAgezB4OTgxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweDk4MjAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB9LAorICAgICB7MHg5ODI0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAwfSwKKyAgICAgezB4OTgyOCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMH0sCisgICAgIHsweDk4MmMsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB9LAorICAgICB7MHg5ODMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4OTgzNCwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMH0sCisgICAgIHsweDk4MzgsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB9LAorICAgICB7MHg5ODNjLCAweDAwMjAwNDAwLCAweDAwMjAwNDAwLCAweDAwMjAwNDAwLCAweDAwMjAwNDAwLCAwfSwKKyAgICAgezB4OTg0MCwgMHgyMDZhMDAyZSwgMHgyMDZhMDAyZSwgMHgyMDZhMDAyZSwgMHgyMDZhMDAyZSwgMH0sCisgICAgIHsweDk4NDQsIDB4MTM3MjE2MWUsIDB4MTM3MjFjMWUsIDB4MTM3MjFjMjQsIDB4MTM3MjE2YTQsIDB9LAorICAgICB7MHg5ODQ4LCAweDAwMWE2YTY1LCAweDAwMWE2YTY1LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4LCAwfSwKKyAgICAgezB4OTg0YywgMHgxMjg0MjMzYywgMHgxMjg0MjMzYywgMHgxMjg0MjMzYywgMHgxMjg0MjMzYywgMH0sCisgICAgIHsweDk4NTAsIDB4NmM0OGI0ZTQsIDB4NmM0OGI0ZTQsIDB4NmM0OGIwZTQsIDB4NmM0OGIwZTQsIDB9LAorICAgICB7MHg5ODU0LCAweDAwMDAwODU5LCAweDAwMDAwODU5LCAweDAwMDAwODU5LCAweDAwMDAwODU5LCAwfSwKKyAgICAgezB4OTg1OCwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMH0sCisgICAgIHsweDk4NWMsIDB4MzEzOTVjNWUsIDB4MzEzOTVjNWUsIDB4MzEzOTVjNWUsIDB4MzEzOTVjNWUsIDB9LAorICAgICB7MHg5ODYwLCAweDAwMDRkZDEwLCAweDAwMDRkZDEwLCAweDAwMDRkZDIwLCAweDAwMDRkZDIwLCAwfSwKKyAgICAgezB4OTg2OCwgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MCwgMHg0MDlhNDE5MCwgMH0sCisgICAgIHsweDk4NmMsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB9LAorICAgICB7MHg5OTAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4OTkwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweDk5MDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHg5OTBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4OTkxNCwgMHgwMDAwMDdkMCwgMHgwMDAwMDdkMCwgMHgwMDAwMDg5OCwgMHgwMDAwMDg5OCwgMH0sCisgICAgIHsweDk5MTgsIDB4MDAwMDAxMTgsIDB4MDAwMDAyMzAsIDB4MDAwMDAyNjgsIDB4MDAwMDAxMzQsIDB9LAorICAgICB7MHg5OTFjLCAweDEwMDAwZmZmLCAweDEwMDAwZmZmLCAweDEwMDAwZmZmLCAweDEwMDAwZmZmLCAwfSwKKyAgICAgezB4OTkyMCwgMHgwNTEwMDgxYywgMHgwNTEwMDgxYywgMHgwNTEwMDAxYywgMHgwNTEwMDAxYywgMH0sCisgICAgIHsweDk5MjQsIDB4ZDAwNThhMTUsIDB4ZDAwNThhMTUsIDB4ZDAwNThhMTUsIDB4ZDAwNThhMTUsIDB9LAorICAgICB7MHg5OTI4LCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAwfSwKKyAgICAgezB4OTkyYywgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMH0sCisgICAgIHsweDk5MzQsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB9LAorICAgICB7MHg5OTM4LCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAwfSwKKyAgICAgezB4OTkzYywgMHgwMDAwMDA3ZiwgMHgwMDAwMDA3ZiwgMHgwMDAwMDA3ZiwgMHgwMDAwMDA3ZiwgMH0sCisgICAgIHsweDk5NDQsIDB4ZGZiODEwMjAsIDB4ZGZiODEwMjAsIDB4ZGZiODEwMjAsIDB4ZGZiODEwMjAsIDB9LAorICAgICB7MHg5OTQ4LCAweDkyODBiMjEyLCAweDkyODBiMjEyLCAweDkyODBiMjEyLCAweDkyODBiMjEyLCAwfSwKKyAgICAgezB4OTk0YywgMHgwMDAyMDAyOCwgMHgwMDAyMDAyOCwgMHgwMDAyMDAyOCwgMHgwMDAyMDAyOCwgMH0sCisgICAgIHsweDk5NTQsIDB4NWQ1MGUxODgsIDB4NWQ1MGUxODgsIDB4NWQ1MGUxODgsIDB4NWQ1MGUxODgsIDB9LAorICAgICB7MHg5OTU4LCAweDAwMDgxZmZmLCAweDAwMDgxZmZmLCAweDAwMDgxZmZmLCAweDAwMDgxZmZmLCAwfSwKKyAgICAgezB4OTk2MCwgMHgwMDAwOWI0MCwgMHgwMDAwOWI0MCwgMHgwMDAwOWI0MCwgMHgwMDAwOWI0MCwgMH0sCisgICAgIHsweDk5NjQsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAsIDB4MDAwMDExMjAsIDB9LAorICAgICB7MHg5OTcwLCAweDE5MGZiNTE1LCAweDE5MGZiNTE1LCAweDE5MGZiNTE1LCAweDE5MGZiNTE1LCAwfSwKKyAgICAgezB4OTk3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweDk5NzgsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB9LAorICAgICB7MHg5OTdjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4OTk4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweDk5ODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHg5OTg4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4OTk4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweDk5OTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHg5OTk0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4OTk5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweDk5OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHg5OWEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4OTlhNCwgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMH0sCisgICAgIHsweDk5YTgsIDB4MDAxZmZmMDAsIDB4MDAxZmZmMDAsIDB4MDAxZmZmMDAsIDB4MDAxZmZmMDAsIDB9LAorICAgICB7MHg5OWFjLCAweDAwNmYwMGM0LCAweDAwNmYwMGM0LCAweDAwNmYwMGM0LCAweDAwNmYwMGM0LCAwfSwKKyAgICAgezB4OTliMCwgMHgwMzA1MTAwMCwgMHgwMzA1MTAwMCwgMHgwMzA1MTAwMCwgMHgwMzA1MTAwMCwgMH0sCisgICAgIHsweDk5YjQsIDB4MDAwMDA4MjAsIDB4MDAwMDA4MjAsIDB4MDAwMDA4MjAsIDB4MDAwMDA4MjAsIDB9LAorICAgICB7MHg5OWMwLCAweDAzODkxOWJlLCAweDAzODkxOWJlLCAweDAzODkxOWJlLCAweDAzODkxOWJlLCAwfSwKKyAgICAgezB4OTljNCwgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMH0sCisgICAgIHsweDk5YzgsIDB4NjBmNjUzMmMsIDB4NjBmNjUzMmMsIDB4NjBmNjUzMmMsIDB4NjBmNjUzMmMsIDB9LAorICAgICB7MHg5OWNjLCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAwfSwKKyAgICAgezB4OTlkMCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMH0sCisgICAgIHsweDk5ZDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHg5OWQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4OTlkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweDk5ZTAsIDB4MDAwMDAyMDAsIDB4MDAwMDAyMDAsIDB4MDAwMDAyMDAsIDB4MDAwMDAyMDAsIDB9LAorICAgICB7MHg5OWU0LCAweDY0NjQ2NDY0LCAweDY0NjQ2NDY0LCAweDY0NjQ2NDY0LCAweDY0NjQ2NDY0LCAwfSwKKyAgICAgezB4OTllOCwgMHgzYzc4Nzg3OCwgMHgzYzc4Nzg3OCwgMHgzYzc4Nzg3OCwgMHgzYzc4Nzg3OCwgMH0sCisgICAgIHsweDk5ZWMsIDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEsIDB9LAorICAgICB7MHg5OWYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4OTlmYywgMHgwMDAwMTA0MiwgMHgwMDAwMTA0MiwgMHgwMDAwMTA0MiwgMHgwMDAwMTA0MiwgMH0sCisgICAgIHsweDlhMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHg5YTA0LCAweDAwMDAwMDQwLCAweDAwMDAwMDQwLCAweDAwMDAwMDQwLCAweDAwMDAwMDQwLCAwfSwKKyAgICAgezB4OWEwOCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCwgMH0sCisgICAgIHsweDlhMGMsIDB4MDAwMDAxYTEsIDB4MDAwMDAxYTEsIDB4MDAwMDAxNDEsIDB4MDAwMDAxNDEsIDB9LAorICAgICB7MHg5YTEwLCAweDAwMDAwMWUxLCAweDAwMDAwMWUxLCAweDAwMDAwMTgxLCAweDAwMDAwMTgxLCAwfSwKKyAgICAgezB4OWExNCwgMHgwMDAwMDAyMSwgMHgwMDAwMDAyMSwgMHgwMDAwMDFjMSwgMHgwMDAwMDFjMSwgMH0sCisgICAgIHsweDlhMTgsIDB4MDAwMDAwNjEsIDB4MDAwMDAwNjEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB9LAorICAgICB7MHg5YTFjLCAweDAwMDAwMTY4LCAweDAwMDAwMTY4LCAweDAwMDAwMDQxLCAweDAwMDAwMDQxLCAwfSwKKyAgICAgezB4OWEyMCwgMHgwMDAwMDFhOCwgMHgwMDAwMDFhOCwgMHgwMDAwMDFhOCwgMHgwMDAwMDFhOCwgMH0sCisgICAgIHsweDlhMjQsIDB4MDAwMDAxZTgsIDB4MDAwMDAxZTgsIDB4MDAwMDAxZTgsIDB4MDAwMDAxZTgsIDB9LAorICAgICB7MHg5YTI4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4LCAwfSwKKyAgICAgezB4OWEyYywgMHgwMDAwMDA2OCwgMHgwMDAwMDA2OCwgMHgwMDAwMDA2OCwgMHgwMDAwMDA2OCwgMH0sCisgICAgIHsweDlhMzAsIDB4MDAwMDAxODksIDB4MDAwMDAxODksIDB4MDAwMDAwYTgsIDB4MDAwMDAwYTgsIDB9LAorICAgICB7MHg5YTM0LCAweDAwMDAwMWM5LCAweDAwMDAwMWM5LCAweDAwMDAwMTY5LCAweDAwMDAwMTY5LCAwfSwKKyAgICAgezB4OWEzOCwgMHgwMDAwMDAwOSwgMHgwMDAwMDAwOSwgMHgwMDAwMDFhOSwgMHgwMDAwMDFhOSwgMH0sCisgICAgIHsweDlhM2MsIDB4MDAwMDAwNDksIDB4MDAwMDAwNDksIDB4MDAwMDAxZTksIDB4MDAwMDAxZTksIDB9LAorICAgICB7MHg5YTQwLCAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDI5LCAweDAwMDAwMDI5LCAwfSwKKyAgICAgezB4OWE0NCwgMHgwMDAwMDE3MCwgMHgwMDAwMDE3MCwgMHgwMDAwMDA2OSwgMHgwMDAwMDA2OSwgMH0sCisgICAgIHsweDlhNDgsIDB4MDAwMDAxYjAsIDB4MDAwMDAxYjAsIDB4MDAwMDAxOTAsIDB4MDAwMDAxOTAsIDB9LAorICAgICB7MHg5YTRjLCAweDAwMDAwMWYwLCAweDAwMDAwMWYwLCAweDAwMDAwMWQwLCAweDAwMDAwMWQwLCAwfSwKKyAgICAgezB4OWE1MCwgMHgwMDAwMDAzMCwgMHgwMDAwMDAzMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMH0sCisgICAgIHsweDlhNTQsIDB4MDAwMDAwNzAsIDB4MDAwMDAwNzAsIDB4MDAwMDAwNTAsIDB4MDAwMDAwNTAsIDB9LAorICAgICB7MHg5YTU4LCAweDAwMDAwMTkxLCAweDAwMDAwMTkxLCAweDAwMDAwMDkwLCAweDAwMDAwMDkwLCAwfSwKKyAgICAgezB4OWE1YywgMHgwMDAwMDFkMSwgMHgwMDAwMDFkMSwgMHgwMDAwMDE1MSwgMHgwMDAwMDE1MSwgMH0sCisgICAgIHsweDlhNjAsIDB4MDAwMDAwMTEsIDB4MDAwMDAwMTEsIDB4MDAwMDAxOTEsIDB4MDAwMDAxOTEsIDB9LAorICAgICB7MHg5YTY0LCAweDAwMDAwMDUxLCAweDAwMDAwMDUxLCAweDAwMDAwMWQxLCAweDAwMDAwMWQxLCAwfSwKKyAgICAgezB4OWE2OCwgMHgwMDAwMDA5MSwgMHgwMDAwMDA5MSwgMHgwMDAwMDAxMSwgMHgwMDAwMDAxMSwgMH0sCisgICAgIHsweDlhNmMsIDB4MDAwMDAxYjgsIDB4MDAwMDAxYjgsIDB4MDAwMDAwNTEsIDB4MDAwMDAwNTEsIDB9LAorICAgICB7MHg5YTcwLCAweDAwMDAwMWY4LCAweDAwMDAwMWY4LCAweDAwMDAwMTk4LCAweDAwMDAwMTk4LCAwfSwKKyAgICAgezB4OWE3NCwgMHgwMDAwMDAzOCwgMHgwMDAwMDAzOCwgMHgwMDAwMDFkOCwgMHgwMDAwMDFkOCwgMH0sCisgICAgIHsweDlhNzgsIDB4MDAwMDAwNzgsIDB4MDAwMDAwNzgsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMTgsIDB9LAorICAgICB7MHg5YTdjLCAweDAwMDAwMTk5LCAweDAwMDAwMTk5LCAweDAwMDAwMDU4LCAweDAwMDAwMDU4LCAwfSwKKyAgICAgezB4OWE4MCwgMHgwMDAwMDFkOSwgMHgwMDAwMDFkOSwgMHgwMDAwMDA5OCwgMHgwMDAwMDA5OCwgMH0sCisgICAgIHsweDlhODQsIDB4MDAwMDAwMTksIDB4MDAwMDAwMTksIDB4MDAwMDAxNTksIDB4MDAwMDAxNTksIDB9LAorICAgICB7MHg5YTg4LCAweDAwMDAwMDU5LCAweDAwMDAwMDU5LCAweDAwMDAwMTk5LCAweDAwMDAwMTk5LCAwfSwKKyAgICAgezB4OWE4YywgMHgwMDAwMDA5OSwgMHgwMDAwMDA5OSwgMHgwMDAwMDFkOSwgMHgwMDAwMDFkOSwgMH0sCisgICAgIHsweDlhOTAsIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwMTksIDB4MDAwMDAwMTksIDB9LAorICAgICB7MHg5YTk0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMDU5LCAweDAwMDAwMDU5LCAwfSwKKyAgICAgezB4OWE5OCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDA5OSwgMHgwMDAwMDA5OSwgMH0sCisgICAgIHsweDlhOWMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB9LAorICAgICB7MHg5YWEwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAwfSwKKyAgICAgezB4OWFhNCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMH0sCisgICAgIHsweDlhYTgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB9LAorICAgICB7MHg5YWFjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAwfSwKKyAgICAgezB4OWFiMCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMH0sCisgICAgIHsweDlhYjQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB9LAorICAgICB7MHg5YWI4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAwfSwKKyAgICAgezB4OWFiYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMH0sCisgICAgIHsweDlhYzAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB9LAorICAgICB7MHg5YWM0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAwfSwKKyAgICAgezB4OWFjOCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMH0sCisgICAgIHsweDlhY2MsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB9LAorICAgICB7MHg5YWQwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAwfSwKKyAgICAgezB4OWFkNCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMH0sCisgICAgIHsweDlhZDgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB9LAorICAgICB7MHg5YWRjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAwfSwKKyAgICAgezB4OWFlMCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMH0sCisgICAgIHsweDlhZTQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB9LAorICAgICB7MHg5YWU4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAwfSwKKyAgICAgezB4OWFlYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMH0sCisgICAgIHsweDlhZjAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB9LAorICAgICB7MHg5YWY0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAwfSwKKyAgICAgezB4OWFmOCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMH0sCisgICAgIHsweDlhZmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB9LAorICAgICB7MHg5YjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4OWIwNCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMH0sCisgICAgIHsweDliMDgsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDIsIDB9LAorICAgICB7MHg5YjBjLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAwfSwKKyAgICAgezB4OWIxMCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMH0sCisgICAgIHsweDliMTQsIDB4MDAwMDAwMDUsIDB4MDAwMDAwMDUsIDB4MDAwMDAwMDUsIDB4MDAwMDAwMDUsIDB9LAorICAgICB7MHg5YjE4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAwfSwKKyAgICAgezB4OWIxYywgMHgwMDAwMDAwOSwgMHgwMDAwMDAwOSwgMHgwMDAwMDAwOSwgMHgwMDAwMDAwOSwgMH0sCisgICAgIHsweDliMjAsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIDB9LAorICAgICB7MHg5YjI0LCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAwfSwKKyAgICAgezB4OWIyOCwgMHgwMDAwMDAwYywgMHgwMDAwMDAwYywgMHgwMDAwMDAwYywgMHgwMDAwMDAwYywgMH0sCisgICAgIHsweDliMmMsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMGQsIDB4MDAwMDAwMGQsIDB9LAorICAgICB7MHg5YjMwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAwfSwKKyAgICAgezB4OWIzNCwgMHgwMDAwMDAxMSwgMHgwMDAwMDAxMSwgMHgwMDAwMDAxMSwgMHgwMDAwMDAxMSwgMH0sCisgICAgIHsweDliMzgsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB9LAorICAgICB7MHg5YjNjLCAweDAwMDAwMDEzLCAweDAwMDAwMDEzLCAweDAwMDAwMDEzLCAweDAwMDAwMDEzLCAwfSwKKyAgICAgezB4OWI0MCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMH0sCisgICAgIHsweDliNDQsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB9LAorICAgICB7MHg5YjQ4LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4LCAwfSwKKyAgICAgezB4OWI0YywgMHgwMDAwMDAxOSwgMHgwMDAwMDAxOSwgMHgwMDAwMDAxOSwgMHgwMDAwMDAxOSwgMH0sCisgICAgIHsweDliNTAsIDB4MDAwMDAwMWEsIDB4MDAwMDAwMWEsIDB4MDAwMDAwMWEsIDB4MDAwMDAwMWEsIDB9LAorICAgICB7MHg5YjU0LCAweDAwMDAwMDFiLCAweDAwMDAwMDFiLCAweDAwMDAwMDFiLCAweDAwMDAwMDFiLCAwfSwKKyAgICAgezB4OWI1OCwgMHgwMDAwMDAxYywgMHgwMDAwMDAxYywgMHgwMDAwMDAxYywgMHgwMDAwMDAxYywgMH0sCisgICAgIHsweDliNWMsIDB4MDAwMDAwMWQsIDB4MDAwMDAwMWQsIDB4MDAwMDAwMWQsIDB4MDAwMDAwMWQsIDB9LAorICAgICB7MHg5YjYwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAwfSwKKyAgICAgezB4OWI2NCwgMHgwMDAwMDAyMSwgMHgwMDAwMDAyMSwgMHgwMDAwMDAyMSwgMHgwMDAwMDAyMSwgMH0sCisgICAgIHsweDliNjgsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIsIDB9LAorICAgICB7MHg5YjZjLCAweDAwMDAwMDIzLCAweDAwMDAwMDIzLCAweDAwMDAwMDIzLCAweDAwMDAwMDIzLCAwfSwKKyAgICAgezB4OWI3MCwgMHgwMDAwMDAyNCwgMHgwMDAwMDAyNCwgMHgwMDAwMDAyNCwgMHgwMDAwMDAyNCwgMH0sCisgICAgIHsweDliNzQsIDB4MDAwMDAwMjUsIDB4MDAwMDAwMjUsIDB4MDAwMDAwMjUsIDB4MDAwMDAwMjUsIDB9LAorICAgICB7MHg5Yjc4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4LCAwfSwKKyAgICAgezB4OWI3YywgMHgwMDAwMDAyOSwgMHgwMDAwMDAyOSwgMHgwMDAwMDAyOSwgMHgwMDAwMDAyOSwgMH0sCisgICAgIHsweDliODAsIDB4MDAwMDAwMmEsIDB4MDAwMDAwMmEsIDB4MDAwMDAwMmEsIDB4MDAwMDAwMmEsIDB9LAorICAgICB7MHg5Yjg0LCAweDAwMDAwMDJiLCAweDAwMDAwMDJiLCAweDAwMDAwMDJiLCAweDAwMDAwMDJiLCAwfSwKKyAgICAgezB4OWI4OCwgMHgwMDAwMDAyYywgMHgwMDAwMDAyYywgMHgwMDAwMDAyYywgMHgwMDAwMDAyYywgMH0sCisgICAgIHsweDliOGMsIDB4MDAwMDAwMmQsIDB4MDAwMDAwMmQsIDB4MDAwMDAwMmQsIDB4MDAwMDAwMmQsIDB9LAorICAgICB7MHg5YjkwLCAweDAwMDAwMDMwLCAweDAwMDAwMDMwLCAweDAwMDAwMDMwLCAweDAwMDAwMDMwLCAwfSwKKyAgICAgezB4OWI5NCwgMHgwMDAwMDAzMSwgMHgwMDAwMDAzMSwgMHgwMDAwMDAzMSwgMHgwMDAwMDAzMSwgMH0sCisgICAgIHsweDliOTgsIDB4MDAwMDAwMzIsIDB4MDAwMDAwMzIsIDB4MDAwMDAwMzIsIDB4MDAwMDAwMzIsIDB9LAorICAgICB7MHg5YjljLCAweDAwMDAwMDMzLCAweDAwMDAwMDMzLCAweDAwMDAwMDMzLCAweDAwMDAwMDMzLCAwfSwKKyAgICAgezB4OWJhMCwgMHgwMDAwMDAzNCwgMHgwMDAwMDAzNCwgMHgwMDAwMDAzNCwgMHgwMDAwMDAzNCwgMH0sCisgICAgIHsweDliYTQsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB9LAorICAgICB7MHg5YmE4LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAwfSwKKyAgICAgezB4OWJhYywgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMH0sCisgICAgIHsweDliYjAsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB9LAorICAgICB7MHg5YmI0LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAwfSwKKyAgICAgezB4OWJiOCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMH0sCisgICAgIHsweDliYmMsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB9LAorICAgICB7MHg5YmMwLCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAwfSwKKyAgICAgezB4OWJjNCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMH0sCisgICAgIHsweDliYzgsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB9LAorICAgICB7MHg5YmNjLCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAwfSwKKyAgICAgezB4OWJkMCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMH0sCisgICAgIHsweDliZDQsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB9LAorICAgICB7MHg5YmQ4LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAwfSwKKyAgICAgezB4OWJkYywgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMH0sCisgICAgIHsweDliZTAsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB9LAorICAgICB7MHg5YmU0LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAwfSwKKyAgICAgezB4OWJlOCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMH0sCisgICAgIHsweDliZWMsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB9LAorICAgICB7MHg5YmYwLCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAwfSwKKyAgICAgezB4OWJmNCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMH0sCisgICAgIHsweDliZjgsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB9LAorICAgICB7MHg5YmZjLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAwfSwKKyAgICAgezB4OWMwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweDljMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHg5YzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4OWMxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweDljMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHg5YzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4OWMyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweDljMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHg5YzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4OWMyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweDljMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHg5YzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4OWMzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweDljM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHg5Y2YwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4OWNmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweDljZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHg5Y2ZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4YTIwMCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMH0sCisgICAgIHsweGEyMDQsIDB4MDAwMDA0NDAsIDB4MDAwMDA0NDAsIDB4MDAwMDA0NDAsIDB4MDAwMDA0NDAsIDB9LAorICAgICB7MHhhMjA4LCAweGQ2YmU0Nzg4LCAweGQ2YmU0Nzg4LCAweGQwM2U0Nzg4LCAweGQwM2U0Nzg4LCAwfSwKKyAgICAgezB4YTIwYywgMHgwMTJlODE2MCwgMHgwMTJlODE2MCwgMHgwMTJhODE2MCwgMHgwMTJhODE2MCwgMH0sCisgICAgIHsweGEyMTAsIDB4NDA4MDYzMzMsIDB4NDA4MDYzMzMsIDB4NDA4MDYzMzMsIDB4NDA4MDYzMzMsIDB9LAorICAgICB7MHhhMjE0LCAweDAwMTA2YzEwLCAweDAwMTA2YzEwLCAweDAwMTA2YzEwLCAweDAwMTA2YzEwLCAwfSwKKyAgICAgezB4YTIxOCwgMHgwMDljNDA2MCwgMHgwMDljNDA2MCwgMHgwMDljNDA2MCwgMHgwMDljNDA2MCwgMH0sCisgICAgIHsweGEyMWMsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB9LAorICAgICB7MHhhMjIwLCAweDAxODgzMGM2LCAweDAxODgzMGM2LCAweDAxODgzMGM2LCAweDAxODgzMGM2LCAwfSwKKyAgICAgezB4YTIyNCwgMHgwMDAwMDQwMCwgMHgwMDAwMDQwMCwgMHgwMDAwMDQwMCwgMHgwMDAwMDQwMCwgMH0sCisgICAgIHsweGEyMjgsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIDB9LAorICAgICB7MHhhMjJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4YTIzMCwgMHgwMDAwMDEwOCwgMHgwMDAwMDIxMCwgMHgwMDAwMDIxMCwgMHgwMDAwMDEwOCwgMH0sCisgICAgIHsweGEyMzQsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB9LAorICAgICB7MHhhMjM4LCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAwfSwKKyAgICAgezB4YTIzYywgMHgxM2M4ODlhZiwgMHgxM2M4ODlhZiwgMHgxM2M4ODlhZiwgMHgxM2M4ODlhZiwgMH0sCisgICAgIHsweGEyNDAsIDB4Mzg0OTBhMjAsIDB4Mzg0OTBhMjAsIDB4Mzg0OTBhMjAsIDB4Mzg0OTBhMjAsIDB9LAorICAgICB7MHhhMjQ0LCAweDAwMDA3YmI2LCAweDAwMDA3YmI2LCAweDAwMDA3YmI2LCAweDAwMDA3YmI2LCAwfSwKKyAgICAgezB4YTI0OCwgMHgwZmZmM2ZmYywgMHgwZmZmM2ZmYywgMHgwZmZmM2ZmYywgMHgwZmZmM2ZmYywgMH0sCisgICAgIHsweGEyNGMsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB9LAorICAgICB7MHhhMjUwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAwfSwKKyAgICAgezB4YTI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweGEyNTgsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIDB9LAorICAgICB7MHhhMjVjLCAweDBmMGYwZjAxLCAweDBmMGYwZjAxLCAweDBmMGYwZjAxLCAweDBmMGYwZjAxLCAwfSwKKyAgICAgezB4YTI2MCwgMHhkZmE5MWYwMSwgMHhkZmE5MWYwMSwgMHhkZmE5MWYwMSwgMHhkZmE5MWYwMSwgMH0sCisgICAgIHsweGEyNjQsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIDB9LAorICAgICB7MHhhMjY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4YTI2YywgMHgwOTI0OTEyNiwgMHgwOTI0OTEyNiwgMHgwOTI0OTEyNiwgMHgwOTI0OTEyNiwgMH0sCisgICAgIHsweGEyNzQsIDB4MGExYTljYWEsIDB4MGExYTljYWEsIDB4MGExYTdjYWEsIDB4MGExYTdjYWEsIDB9LAorICAgICB7MHhhMjc4LCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAwfSwKKyAgICAgezB4YTI3YywgMHgwNTE3MDFjZSwgMHgwNTE3MDFjZSwgMHgwNTE3MDFjZSwgMHgwNTE3MDFjZSwgMH0sCisgICAgIHsweGEzMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB4MTgwMTAwMDAsIDB9LAorICAgICB7MHhhMzA0LCAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDJlMDMyNDAyLCAweDJlMDMyNDAyLCAwfSwKKyAgICAgezB4YTMwOCwgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiwgMHg0YTBhM2MwNiwgMHg0YTBhM2MwNiwgMH0sCisgICAgIHsweGEzMGMsIDB4NTYwYjRjMGEsIDB4NTYwYjRjMGEsIDB4NjIxYTU0MGIsIDB4NjIxYTU0MGIsIDB9LAorICAgICB7MHhhMzEwLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDc2NGY2YzFiLCAweDc2NGY2YzFiLCAwfSwKKyAgICAgezB4YTMxNCwgMHg3YTRmNmUxYiwgMHg3YTRmNmUxYiwgMHg4NDViN2E1YSwgMHg4NDViN2E1YSwgMH0sCisgICAgIHsweGEzMTgsIDB4OGM1YjdlNWEsIDB4OGM1YjdlNWEsIDB4OTUwZjhjY2YsIDB4OTUwZjhjY2YsIDB9LAorICAgICB7MHhhMzFjLCAweDlkMGY5NmNmLCAweDlkMGY5NmNmLCAweGE1Y2Y5YjRmLCAweGE1Y2Y5YjRmLCAwfSwKKyAgICAgezB4YTMyMCwgMHhiNTFmYTY5ZiwgMHhiNTFmYTY5ZiwgMHhiZGRmYWYxZiwgMHhiZGRmYWYxZiwgMH0sCisgICAgIHsweGEzMjQsIDB4Y2IzZmJkMDcsIDB4Y2IzZmJjYmYsIDB4ZDFmZmM5M2YsIDB4ZDFmZmM5M2YsIDB9LAorICAgICB7MHhhMzI4LCAweDAwMDBkN2JmLCAweDAwMDBkN2JmLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4YTMyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHhhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4YTMzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweGEzM2MsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHhhMzQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4YTM0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweGEzNDgsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB9LAorICAgICB7MHhhMzRjLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAwfSwKKyAgICAgezB4YTM1MCwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMH0sCisgICAgIHsweGEzNTQsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIDB9LAorICAgICB7MHhhMzU4LCAweDc5YThhYTFmLCAweDc5YThhYTFmLCAweDc5YThhYTFmLCAweDc5YThhYTFmLCAwfSwKKyAgICAgezB4YTM4OCwgMHgwODAwMDAwMCwgMHgwODAwMDAwMCwgMHgwODAwMDAwMCwgMHgwODAwMDAwMCwgMH0sCisgICAgIHsweGEzOGMsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB9LAorICAgICB7MHhhMzkwLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAwfSwKKyAgICAgezB4YTM5NCwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMH0sCisgICAgIHsweGEzOTgsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB9LAorICAgICB7MHhhMzljLCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAwfSwKKyAgICAgezB4YTNhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweGEzYTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHhhM2E4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4YTNhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweGEzYjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHhhM2I0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4YTNiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweGEzYmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHhhM2MwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4YTNjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMH0sCisgICAgIHsweGEzYzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB9LAorICAgICB7MHhhM2NjLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAwfSwKKyAgICAgezB4YTNkMCwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMH0sCisgICAgIHsweGEzZDQsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB9LAorICAgICB7MHhhM2Q4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAwfSwKKyAgICAgezB4YTNkYywgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMH0sCisgICAgIHsweGEzZTAsIDB4MDAwMDAwYzAsIDB4MDAwMDAwYzAsIDB4MDAwMDAwYzAsIDB4MDAwMDAwYzAsIDB9LAorICAgICB7MHhhODQ4LCAweDAwMTgwYTY1LCAweDAwMTgwYTY1LCAweDAwMTgwYTY4LCAweDAwMTgwYTY4LCAwfSwKKyAgICAgezB4YTkyMCwgMHgwNTEwMDAxYywgMHgwNTEwMDAxYywgMHgwNTEwMDAxYywgMHgwNTEwMDAxYywgMH0sCisgICAgIHsweGE5NjAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB9LAorICAgICB7MHhiMjBjLCAweDAxMmU4MTYwLCAweDAxMmU4MTYwLCAweDAxMmE4MTYwLCAweDAxMmE4MTYwLCAwfSwKKyAgICAgezB4YjI2YywgMHgwOTI0OTEyNiwgMHgwOTI0OTEyNiwgMHgwOTI0OTEyNiwgMHgwOTI0OTEyNiwgMH0sCisgICAgIHsweGI4NDgsIDB4MDAxODBhNjUsIDB4MDAxODBhNjUsIDB4MDAxODBhNjgsIDB4MDAxODBhNjgsIDB9LAorICAgICB7MHhiOTIwLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCAwfSwKKyAgICAgezB4Yjk2MCwgMHgwMDAwOWI0MCwgMHgwMDAwOWI0MCwgMHgwMDAwOWI0MCwgMHgwMDAwOWI0MCwgMH0sCisgICAgIHsweGMyMGMsIDB4MDEyZTgxNjAsIDB4MDEyZTgxNjAsIDB4MDEyYTgxNjAsIDB4MDEyYTgxNjAsIDB9LAorICAgICB7MHhjMjZjLCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAwfSwKKyAgICAgLy97MHhjODY0LCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAwfSwKKyAgICAgezB4Yzg2NCwgMHgwMDAxYzYwMCwgMHgwMDAxYzYwMCwgMHgwMDAxYzYwMCwgMHgwMDAxYzYwMCwgMH0sCisgICAgIHsweGM5NWMsIDB4MDA0YjZhOGUsIDB4MDA0YjZhOGUsIDB4MDA0YjZhOGUsIDB4MDA0YjZhOGUsIDB9LAorICAgICB7MHhjOTY4LCAweDAwMDAwM2NlLCAweDAwMDAwM2NlLCAweDAwMDAwM2NlLCAweDAwMDAwM2NlLCAwfSwKKyAgICAgezB4YzliYywgMHgwMDE4MTQwMCwgMHgwMDE4MTQwMCwgMHgwMDE4MTQwMCwgMHgwMDE4MTQwMCwgMH0sCisgICAgIHsweGQyNzAsIDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAsIDB9LAorICAgICB7MHhkMzVjLCAweDA2NmM0MjBmLCAweDA2NmM0MjBmLCAweDA2NmM0MjBmLCAweDA2NmM0MjBmLCAwfSwKKyAgICAgezB4ZDM2MCwgMHgwZjI4MjIwNywgMHgwZjI4MjIwNywgMHgwZjI4MjIwNywgMHgwZjI4MjIwNywgMH0sCisgICAgIHsweGQzNjQsIDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUsIDB9LAorICAgICB7MHhkMzY4LCAweDFmODAxMTA0LCAweDFmODAxMTA0LCAweDFmODAxMTA0LCAweDFmODAxMTA0LCAwfSwKKyAgICAgezB4ZDM2YywgMHgzN2EwMGMwMywgMHgzN2EwMGMwMywgMHgzN2EwMGMwMywgMHgzN2EwMGMwMywgMH0sCisgICAgIHsweGQzNzAsIDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMsIDB9LAorICAgICB7MHhkMzc0LCAweDU3YzAwODAzLCAweDU3YzAwODAzLCAweDU3YzAwODAzLCAweDU3YzAwODAzLCAwfSwKKyAgICAgezB4ZDM3OCwgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiwgMH0sCisgICAgIHsweGQzN2MsIDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIsIDB9LAorICAgICB7MHhkMzgwLCAweDdmM2M3YmJhLCAweDdmM2M3YmJhLCAweDdmM2M3YmJhLCAweDdmM2M3YmJhLCAwfSwKKyAgICAgezB4ZDM4NCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMH0KK307CisKKworc3RhdGljIGNvbnN0IHUzMl90IG90dXNCYW5rW11bM10gPSB7CisgICAgIC8vIyBiYW5rIDAKKyAgICAgezB4OThiMCwgIDB4MWU1Nzk1ZTUsICAweDFlNTc5NWU1fSwKKyAgICAgezB4OThlMCwgIDB4MDIwMDgwMjAsICAweDAyMDA4MDIwfSwKKyAgICAgLy8jIGJhbmsgMQorICAgICB7MHg5OGIwLCAgMHgwMjEwODQyMSwgIDB4MDIxMDg0MjF9LAorICAgICB7MHg5OGVjLCAgMHgwMDAwMDAwOCwgIDB4MDAwMDAwMDh9LAorICAgICAvLyMgYmFuayAyCisgICAgIHsweDk4YjAsICAweDBlNzNmZjE3LCAgMHgwZTczZmYxN30sCisgICAgIHsweDk4ZTAsICAweDAwMDAwNDIwLCAgMHgwMDAwMDQyMH0sCisgICAgIC8vIyBiYW5rIDMKKyAgICAgezB4OThmMCwgIDB4MDE0MDAwMTgsICAweDAxYzAwMDE4fSwKKyAgICAgLy8jIGJhbmsgNAorICAgICB7MHg5OGIwLCAgMHgwMDAwMDFhMSwgIDB4MDAwMDAxYTF9LAorICAgICB7MHg5OGU4LCAgMHgwMDAwMDAwMSwgIDB4MDAwMDAwMDF9LAorICAgICAvLyMgYmFuayA1CisgICAgIHsweDk4YjAsICAweDAwMDAwMDEzLCAgMHgwMDAwMDAxM30sCisgICAgIHsweDk4ZTQsICAweDAwMDAwMDAyLCAgMHgwMDAwMDAwMn0sCisgICAgIC8vIyBiYW5rIDYKKyAgICAgezB4OThiMCwgIDB4MDAwMDAwMDAsICAweDAwMDAwMDAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDAwMDAsICAweDAwMDAwMDAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDAwMDAsICAweDAwMDAwMDAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDAwMDAsICAweDAwMDAwMDAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDAwMDAsICAweDAwMDAwMDAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDQwMDAsICAweDAwMDA0MDAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDZjMDAsICAweDAwMDA2YzAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDJjMDAsICAweDAwMDAyYzAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDQ4MDAsICAweDAwMDA0ODAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDQwMDAsICAweDAwMDA0MDAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDYwMDAsICAweDAwMDA2MDAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDEwMDAsICAweDAwMDAxMDAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDQwMDAsICAweDAwMDA0MDAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDdjMDAsICAweDAwMDA3YzAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDdjMDAsICAweDAwMDA3YzAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDdjMDAsICAweDAwMDA3YzAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDdjMDAsICAweDAwMDA3YzAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDdjMDAsICAweDAwMDA3YzAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwODdjMDAsICAweDAwMDg3YzAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDdjMDAsICAweDAwMDA3YzAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDU0MDAsICAweDAwMDA1NDAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDBjMDAsICAweDAwMDAwYzAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDE4MDAsICAweDAwMDAxODAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDdjMDAsICAweDAwMDA3YzAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDZjMDAsICAweDAwMDA2YzAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDZjMDAsICAweDAwMDA2YzAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDdjMDAsICAweDAwMDA3YzAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDJjMDAsICAweDAwMDAyYzAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDNjMDAsICAweDAwMDAzYzAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDM4MDAsICAweDAwMDAzODAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDFjMDAsICAweDAwMDAxYzAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDA4MDAsICAweDAwMDAwODAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDA0MDgsICAweDAwMDAwNDA4fSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDRjMTUsICAweDAwMDA0YzE1fSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDQxODgsICAweDAwMDA0MTg4fSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDIwMWUsICAweDAwMDAyMDFlfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMTA0MDgsICAweDAwMDEwNDA4fSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDA4MDEsICAweDAwMDAwODAxfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDBjMDgsICAweDAwMDAwYzA4fSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDE4MWUsICAweDAwMDAxODFlfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDEwMTYsICAweDAwMDAxMDE2fSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDI4MDAsICAweDAwMDAyODAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDQwMTAsICAweDAwMDA0MDEwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDA4MWMsICAweDAwMDAwODFjfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDAxMTUsICAweDAwMDAwMTE1fSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDAwMTUsICAweDAwMDAwMDE1fSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDAwNjYsICAweDAwMDAwMDY2fSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDAwMWMsICAweDAwMDAwMDFjfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDAwMDAsICAweDAwMDAwMDAwfSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDAwMDQsICAweDAwMDAwMDA0fSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDAwMTUsICAweDAwMDAwMDE1fSwKKyAgICAgezB4OThiMCwgIDB4MDAwMDAwMWYsICAweDAwMDAwMDFmfSwKKyAgICAgezB4OThlMCwgIDB4MDAwMDAwMDAsICAweDAwMDAwNDAwfSwKKyAgICAgLy8jIGJhbmsgNworICAgICB7MHg5OGIwLCAgMHgwMDAwMDBhMCwgIDB4MDAwMDAwYTB9LAorICAgICB7MHg5OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAorICAgICB7MHg5OGIwLCAgMHgwMDAwMDA0MCwgIDB4MDAwMDAwNDB9LAorICAgICB7MHg5OGYwLCAgMHgwMDAwMDAxYywgIDB4MDAwMDAwMWN9Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvaW9jdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2lvY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JjNDIwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2lvY3RsLmMKQEAgLTAsMCArMSwyOTM2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTW9kdWxlIE5hbWUgOiBpb2N0bC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBBYnN0cmFjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFRoaXMgbW9kdWxlIGNvbnRhaW5zIExpbnV4IHdpcmVsZXNzIGV4dGVuc2lvbiByZWxhdGVkIGZ1bmN0b25zLiAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBOT1RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgUGxhdGZvcm0gZGVwZW5kZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgInVzYmRydi5oIgorCisjZGVmaW5lIFpEX0lPQ1RMX1dQQQkJCSAgICAoU0lPQ0RFVlBSSVZBVEUgKyAxKQorI2RlZmluZSBaRF9JT0NUTF9QQVJBTQkJCSAgICAoU0lPQ0RFVlBSSVZBVEUgKyAyKQorI2RlZmluZSBaRF9JT0NUTF9HRVRXUEFJRQkJICAgIChTSU9DREVWUFJJVkFURSArIDMpCisjaWZkZWYgWk1fRU5BQkxFX0NFTkMKKyNkZWZpbmUgWk1fSU9DVExfQ0VOQyAgICAgICAgICAgICAgIChTSU9DREVWUFJJVkFURSArIDQpCisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworI2RlZmluZSBaRF9QQVJBTV9ST0FNSU5HCQkgICAgMHgwMDAxCisjZGVmaW5lIFpEX1BBUkFNX1BSSVZBQ1kJCSAgICAweDAwMDIKKyNkZWZpbmUgWkRfUEFSQU1fV1BBCQkJICAgIDB4MDAwMworI2RlZmluZSBaRF9QQVJBTV9DT1VOVEVSTUVBU1VSRVMJMHgwMDA0CisjZGVmaW5lIFpEX1BBUkFNX0RST1BVTkVOQ1JZUFRFRAkweDAwMDUKKyNkZWZpbmUgWkRfUEFSQU1fQVVUSF9BTEdTCQkgICAgMHgwMDA2CisjZGVmaW5lIFpEX1BBUkFNX1dQU19GSUxURVIJCSAgICAweDAwMDcKKworI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisjZGVmaW5lIFA4MDIxMV9QQUNLRVRfQ0VOQ0ZMQUcJCTB4MDAwMQorI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKKyNkZWZpbmUgUDgwMjExX1BBQ0tFVF9TRVRLRVkgICAgIAkweDAwMDMKKworI2RlZmluZSBaRF9DTURfU0VUX0VOQ1JZUFRfS0VZCQkweDAwMDEKKyNkZWZpbmUgWkRfQ01EX1NFVF9NTE1FCQkJICAgIDB4MDAwMgorI2RlZmluZSBaRF9DTURfU0NBTl9SRVEJCQkgICAgMHgwMDAzCisjZGVmaW5lIFpEX0NNRF9TRVRfR0VORVJJQ19FTEVNRU5UCTB4MDAwNAorI2RlZmluZSBaRF9DTURfR0VUX1RTQwkJCSAgICAweDAwMDUKKworI2RlZmluZSBaRF9DUllQVF9BTEdfTkFNRV9MRU4JCTE2CisjZGVmaW5lIFpEX01BWF9LRVlfU0laRQkJCSAgICAzMgorI2RlZmluZSBaRF9NQVhfR0VORVJJQ19TSVpFCQkgICAgNjQKKworI2lmIFdJUkVMRVNTX0VYVCA+IDEyCisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKyNlbmRpZgorCitleHRlcm4gdTE2X3QgemZMbnhHZXRWYXBJZCh6ZGV2X3QqIGRldik7CisKK3N0YXRpYyBjb25zdCB1MzJfdCBjaGFubmVsX2ZyZXF1ZW5jeV8xMUFbXSA9Cit7CisvL0V2ZW4gZWxlbWVudCBmb3IgQ2hhbm5lbCBOdW1iZXIsIE9kZCBmb3IgRnJlcXVlbmN5CisgICAgMzYsNTE4MCwKKyAgICA0MCw1MjAwLAorICAgIDQ0LDUyMjAsCisgICAgNDgsNTI0MCwKKyAgICA1Miw1MjYwLAorICAgIDU2LDUyODAsCisgICAgNjAsNTMwMCwKKyAgICA2NCw1MzIwLAorICAgIDEwMCw1NTAwLAorICAgIDEwNCw1NTIwLAorICAgIDEwOCw1NTQwLAorICAgIDExMiw1NTYwLAorICAgIDExNiw1NTgwLAorICAgIDEyMCw1NjAwLAorICAgIDEyNCw1NjIwLAorICAgIDEyOCw1NjQwLAorICAgIDEzMiw1NjYwLAorICAgIDEzNiw1NjgwLAorICAgIDE0MCw1NzAwLAorLy8KKyAgICAxODQsNDkyMCwKKyAgICAxODgsNDk0MCwKKyAgICAxOTIsNDk2MCwKKyAgICAxOTYsNDk4MCwKKyAgICA4LDUwNDAsCisgICAgMTIsNTA2MCwKKyAgICAxNiw1MDgwLAorICAgIDM0LDUxNzAsCisgICAgMzgsNTE5MCwKKyAgICA0Miw1MjEwLAorICAgIDQ2LDUyMzAsCisvLworICAgIDE0OSw1NzQ1LAorICAgIDE1Myw1NzY1LAorICAgIDE1Nyw1Nzg1LAorICAgIDE2MSw1ODA1LAorICAgIDE2NSw1ODI1CisvLworfTsKKworaW50IHVzYmRydl9mcmVxMmNoYW4odTMyX3QgZnJlcSkKK3sKKyAgICAvKiAyLjRHIEh6ICovCisgICAgaWYgKGZyZXEgPiAyNDAwICYmIGZyZXEgPCAzMDAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuICgoZnJlcS0yNDEyKS81KSArIDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHUxNl90IGlpOworICAgICAgICB1MTZfdCBudW1fY2hhbiA9IHNpemVvZihjaGFubmVsX2ZyZXF1ZW5jeV8xMUEpL3NpemVvZih1MzJfdCk7CisKKyAgICAgICAgZm9yKGlpID0gMTsgaWkgPCBudW1fY2hhbjsgaWkgKz0gMikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNoYW5uZWxfZnJlcXVlbmN5XzExQVtpaV0gPT0gZnJlcSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hhbm5lbF9mcmVxdWVuY3lfMTFBW2lpLTFdOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB1c2JkcnZfY2hhbjJmcmVxKGludCBjaGFuKQoreworICAgIGludCBmcmVxOworCisgICAgLyogSWYgY2hhbm5lbCBudW1iZXIgaXMgb3V0IG9mIHJhbmdlICovCisgICAgaWYgKGNoYW4gPiAxNjUgfHwgY2hhbiA8PSAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiAyLjRHIGJhbmQgKi8KKyAgICBpZiAoY2hhbiA+PSAxICYmIGNoYW4gPD0gMTMpCisgICAgeworICAgICAgICBmcmVxID0gKDI0MTIgKyAoY2hhbiAtIDEpICogNSk7CisgICAgICAgIHJldHVybiBmcmVxOworICAgIH0KKyAgICBlbHNlIGlmIChjaGFuID49IDM2ICYmIGNoYW4gPD0gMTY1KQorICAgIHsKKyAgICAgICAgdTE2X3QgaWk7CisgICAgICAgIHUxNl90IG51bV9jaGFuID0gc2l6ZW9mKGNoYW5uZWxfZnJlcXVlbmN5XzExQSkvc2l6ZW9mKHUzMl90KTsKKworICAgICAgICBmb3IoaWkgPSAwOyBpaSA8IG51bV9jaGFuOyBpaSArPSAyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY2hhbm5lbF9mcmVxdWVuY3lfMTFBW2lpXSA9PSBjaGFuKQorICAgICAgICAgICAgICAgIHJldHVybiBjaGFubmVsX2ZyZXF1ZW5jeV8xMUFbaWkrMV07CisgICAgICAgIH0KKworICAgICAgICAvKiBDYW4ndCBmaW5kIGRlc2lyZWQgZnJlcXVlbmN5ICovCisgICAgICAgIGlmIChpaSA9PSBudW1fY2hhbikKKyAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIENhbid0IGZpbmQgZGVpc3JlZCBmcmVxdWVuY3kgKi8KKyAgICByZXR1cm4gLTE7Cit9CisKK2ludCB1c2JkcnZfaW9jdGxfc2V0ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3BvaW50ICplcnEpCit7CisjaWZkZWYgWk1fSE9TVEFQRF9TVVBQT1JUCisgICAgLy9zdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPnByaXY7CisgICAgY2hhciBlc3NpZGJ1ZltJV19FU1NJRF9NQVhfU0laRSsxXTsKKyAgICBpbnQgaTsKKworICAgIGlmKCFuZXRpZl9ydW5uaW5nKGRldikpCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgbWVtc2V0KGVzc2lkYnVmLCAwLCBzaXplb2YoZXNzaWRidWYpKTsKKworICAgIHByaW50ayhLRVJOX0VSUiAidXNiZHJ2X2lvY3RsX3NldGVzc2lkXG4iKTsKKworICAgIC8vcHJpbnRrKCJzc2lkbGVuPSVkXG4iLCBlcnEtPmxlbmd0aCk7IC8vZm9yIGFueSwgaXQgaXMgMS4KKyAgICBpZiAoZXJxLT5mbGFncykgeworICAgICAgICBpZiAoZXJxLT5sZW5ndGggPiAoSVdfRVNTSURfTUFYX1NJWkUrMSkpCisgICAgICAgICAgICByZXR1cm4gLUUyQklHOworCisgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcihlc3NpZGJ1ZiwgZXJxLT5wb2ludGVyLCBlcnEtPmxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICB9CisKKyAgICAvL3pkX0Rpc2Fzb2NBbGwoMik7CisgICAgLy93YWl0X21zKDEwMCk7CisKKyAgICBwcmludGsoS0VSTl9FUlIgImVzc2lkYnVmOiAiKTsKKworICAgIGZvcihpID0gMDsgaSA8IGVycS0+bGVuZ3RoOyBpKyspCisgICAgeworICAgICAgICBwcmludGsoS0VSTl9FUlIgIiUwMnggIiwgZXNzaWRidWZbaV0pOworICAgIH0KKworICAgIHByaW50ayhLRVJOX0VSUiAiXG4iKTsKKworICAgIGVzc2lkYnVmW2VycS0+bGVuZ3RoXSA9ICdcMCc7CisgICAgLy9tZW1jcHkobWFjcC0+d2Qud3Muc3NpZCwgZXNzaWRidWYsIGVycS0+bGVuZ3RoKTsKKyAgICAvL21hY3AtPndkLndzLnNzaWRMZW4gPSBzdHJsZW4oZXNzaWRidWYpKzI7CisgICAgLy9tYWNwLT53ZC53cy5zc2lkWzFdID0gc3RybGVuKGVzc2lkYnVmKTsgLy8gVXBkYXRlIHNzaWQgbGVuZ3RoCisKKyAgICB6ZmlXbGFuU2V0U1NJRChkZXYsIGVzc2lkYnVmLCBlcnEtPmxlbmd0aCk7CisjaWYgMAorICAgIHByaW50ayhLRVJOX0VSUiAibWFjcC0+d2Qud3Muc3NpZDogIik7CisKKyAgICBmb3IoaSA9IDA7IGkgPCBtYWNwLT53ZC53cy5zc2lkTGVuOyBpKyspCisgICAgeworICAgICAgICBwcmludGsoS0VSTl9FUlIgIiUwMnggIiwgbWFjcC0+d2Qud3Muc3NpZFtpXSk7CisgICAgfQorCisgICAgcHJpbnRrKEtFUk5fRVJSICJcbiIpOworI2VuZGlmCisgICAgemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKKyAgICB6ZmlXbGFuRW5hYmxlKGRldik7CisKKyNlbmRpZgorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB1c2JkcnZfaW9jdGxfZ2V0ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3BvaW50ICplcnEpCit7CisgICAgIC8vc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5wcml2OworICAgICB1OF90IGVzc2lkYnVmW0lXX0VTU0lEX01BWF9TSVpFKzFdOworICAgICB1OF90IGxlbjsKKyAgICAgdThfdCBpOworCisKKyAgICAgLy9sZW4gPSBtYWNwLT53ZC53cy5zc2lkTGVuOworICAgICAvL21lbWNweShlc3NpZGJ1ZiwgbWFjcC0+d2Qud3Muc3NpZCwgbWFjcC0+d2Qud3Muc3NpZExlbik7CisgICAgIHpmaVdsYW5RdWVyeVNTSUQoZGV2LCBlc3NpZGJ1ZiwgJmxlbik7CisKKyAgICAgZXNzaWRidWZbbGVuXSA9IDA7CisKKyAgICAgcHJpbnRrKEtFUk5fRVJSICJFU1NJRDogIik7CisKKyAgICAgZm9yKGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgIHsKKyAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiJWMiLCBlc3NpZGJ1ZltpXSk7CisgICAgIH0KKworICAgICBwcmludGsoS0VSTl9FUlIgIlxuIik7CisKKyAgICAgZXJxLT5mbGFncz0gMTsKKyAgICAgZXJxLT5sZW5ndGggPSBzdHJsZW4oZXNzaWRidWYpICsgMTsKKworICAgICBpZiAoZXJxLT5wb2ludGVyKQorICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihlcnEtPnBvaW50ZXIsIGVzc2lkYnVmLCBlcnEtPmxlbmd0aCkpCisgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICAgcmV0dXJuIDA7Cit9CisKKworaW50IHVzYmRydl9pb2N0bF9zZXRydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3BhcmFtICpycnEpCit7CisKKyAgICByZXR1cm4gMDsKK30KKworI2lmIFdJUkVMRVNTX0VYVCA+IDE0CisvKgorICogRW5jb2RlIGEgV1BBIG9yIFJTTiBpbmZvcm1hdGlvbiBlbGVtZW50IGFzIGEgY3VzdG9tCisgKiBlbGVtZW50IHVzaW5nIHRoZSBob3N0YXAgZm9ybWF0LgorICovCit1MzIgZW5jb2RlX2llKHZvaWQgKmJ1ZiwgdTMyIGJ1ZnNpemUsIGNvbnN0IHU4ICppZSwgdTMyIGllbGVuLCBjb25zdCB1OCAqbGVhZGVyLCB1MzIgbGVhZGVyX2xlbikKK3sKKyAgICB1OCAqcDsKKyAgICB1MzIgaTsKKworICAgIGlmIChidWZzaXplIDwgbGVhZGVyX2xlbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcCA9IGJ1ZjsKKyAgICBtZW1jcHkocCwgbGVhZGVyLCBsZWFkZXJfbGVuKTsKKyAgICBidWZzaXplIC09IGxlYWRlcl9sZW47CisgICAgcCArPSBsZWFkZXJfbGVuOworICAgIGZvciAoaSA9IDA7IGkgPCBpZWxlbiAmJiBidWZzaXplID4gMjsgaSsrKQorICAgICAgICBwICs9IHNwcmludGYocCwgIiUwMngiLCBpZVtpXSk7CisgICAgcmV0dXJuIChpID09IGllbGVuID8gcCAtICh1OCAqKWJ1ZiA6IDApOworfQorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXSVJFTEVTU19FWFQgPiAxNCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogVHJhbnNsYXRlIHNjYW4gZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBjYXJkIHRvIGEgY2FyZCBpbmRlcGVuZGVudAorICogZm9ybWF0IHRoYXQgdGhlIFdpcmVsZXNzIFRvb2xzIHdpbGwgdW5kZXJzdGFuZAorICovCitjaGFyICp1c2JkcnZfdHJhbnNsYXRlX3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBjaGFyICpjdXJyZW50X2V2LAorICAgICAgICBjaGFyICplbmRfYnVmLCBzdHJ1Y3QgenNCc3NJbmZvICpsaXN0KQoreworICAgIHN0cnVjdCBpd19ldmVudCBpd2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgYnVmZmVyICovCisgICAgdTE2X3QgY2FwYWJpbGl0aWVzOworICAgIGNoYXIgKmN1cnJlbnRfdmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgcmF0ZXMgKi8KKyAgICBjaGFyICpsYXN0X2V2OworICAgIGludCBpOworI2lmIFdJUkVMRVNTX0VYVCA+IDE0CisgICAgY2hhciAgICBidWZbNjQqMiArIDMwXTsKKyNlbmRpZgorCisgICAgbGFzdF9ldiA9IGN1cnJlbnRfZXY7CisKKy8qIEZpcnN0IGVudHJ5ICpNVVNUKiBiZSB0aGUgQVAgTUFDIGFkZHJlc3MgKi8KKyAgICBpd2UuY21kID0gU0lPQ0dJV0FQOworICAgIGl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworICAgIG1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIGxpc3QtPmJzc2lkLCBFVEhfQUxFTik7CisgICAgY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KAorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI3KSkKKwlpbmZvLAorI2VuZGlmCisJY3VycmVudF9ldiwKKwllbmRfYnVmLCAmaXdlLCBJV19FVl9BRERSX0xFTik7CisKKyAgICAvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLworICAgIGlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCisgICAgeworICAgICAgICByZXR1cm4gZW5kX2J1ZjsKKyAgICB9CisKKyAgICBsYXN0X2V2ID0gY3VycmVudF9ldjsKKworLyogT3RoZXIgZW50cmllcyB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgb3JkZXIgd2UgZ2l2ZSB0aGVtICovCisKKy8qIEFkZCB0aGUgRVNTSUQgKi8KKyAgICBpd2UudS5kYXRhLmxlbmd0aCA9IGxpc3QtPnNzaWRbMV07CisgICAgaWYoaXdlLnUuZGF0YS5sZW5ndGggPiAzMikKKyAgICAgICAgaXdlLnUuZGF0YS5sZW5ndGggPSAzMjsKKyAgICBpd2UuY21kID0gU0lPQ0dJV0VTU0lEOworICAgIGl3ZS51LmRhdGEuZmxhZ3MgPSAxOworICAgIGN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludCgKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykpCisJaW5mbywKKyNlbmRpZgorCWN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsICZsaXN0LT5zc2lkWzJdKTsKKworICAgIC8qIFJhbiBvdXQgb2YgYnVmZmVyICovCisgICAgaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKKyAgICB7CisgICAgICAgIHJldHVybiBlbmRfYnVmOworICAgIH0KKworICAgIGxhc3RfZXYgPSBjdXJyZW50X2V2OworCisvKiBBZGQgbW9kZSAqLworICAgIGl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKKyAgICBjYXBhYmlsaXRpZXMgPSAobGlzdC0+Y2FwYWJpbGl0eVsxXSA8PCA4KSArIGxpc3QtPmNhcGFiaWxpdHlbMF07CisgICAgaWYoY2FwYWJpbGl0aWVzICYgKDB4MDEgfCAweDAyKSkKKyAgICB7CisgICAgICAgIGlmKGNhcGFiaWxpdGllcyAmIDB4MDEpCisgICAgICAgICAgICBpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOworICAgICAgICBjdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjcpKQorCQlpbmZvLAorI2VuZGlmCisJCWN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKKyAgICB9CisKKyAgICAvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLworICAgIGlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCisgICAgeworICAgICAgICByZXR1cm4gZW5kX2J1ZjsKKyAgICB9CisKKyAgICBsYXN0X2V2ID0gY3VycmVudF9ldjsKKworLyogQWRkIGZyZXF1ZW5jeSAqLworICAgIGl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKKyAgICBpd2UudS5mcmVxLm0gPSBsaXN0LT5jaGFubmVsOworLyogQ2hhbm5lbCBmcmVxdWVuY3kgaW4gS0h6ICovCisgICAgaWYgKGl3ZS51LmZyZXEubSA+IDE0KQorICAgIHsKKyAgICAgICAgaWYgKCgxODQgPD0gaXdlLnUuZnJlcS5tKSAmJiAoaXdlLnUuZnJlcS5tPD0xOTYpKQorICAgICAgICAgICAgICBpd2UudS5mcmVxLm0gPSA0MDAwICsgaXdlLnUuZnJlcS5tICogNTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICBpd2UudS5mcmVxLm0gPSA1MDAwICsgaXdlLnUuZnJlcS5tICogNTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGl3ZS51LmZyZXEubSA9PSAxNCkKKyAgICAgICAgICAgICAgaXdlLnUuZnJlcS5tID0gMjQ4NDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICBpd2UudS5mcmVxLm0gPSAyNDEyICsgKGl3ZS51LmZyZXEubSAtIDEpICogNTsKKyAgICB9CisgICAgaXdlLnUuZnJlcS5lID0gNjsKKyAgICBjdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjcpKQorCWluZm8sCisjZW5kaWYKKyAgICAJY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCisgICAgLyogUmFuIG91dCBvZiBidWZmZXIgKi8KKyAgICBpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuZF9idWY7CisgICAgfQorCisgICAgbGFzdF9ldiA9IGN1cnJlbnRfZXY7CisKKy8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MgKi8KKyAgICBpd2UuY21kID0gSVdFVlFVQUw7CisjaWYgV0lSRUxFU1NfRVhUID4gMTgKKyAgICBpd2UudS5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX1FVQUxfVVBEQVRFRCB8IElXX1FVQUxfTEVWRUxfVVBEQVRFRAorICAgICAgICAgICAgICAgICAgICAgICAgfElXX1FVQUxfTk9JU0VfVVBEQVRFRDsKKyNlbmRpZgorICAgIGl3ZS51LnF1YWwubGV2ZWwgPSBsaXN0LT5zaWduYWxTdHJlbmd0aDsKKyAgICBpd2UudS5xdWFsLm5vaXNlID0gMDsKKyAgICBpd2UudS5xdWFsLnF1YWwgPSBsaXN0LT5zaWduYWxRdWFsaXR5OworICAgIGN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudCgKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykpCisJaW5mbywKKyNlbmRpZgorCWN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKKworICAgIC8qIFJhbiBvdXQgb2YgYnVmZmVyICovCisgICAgaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKKyAgICB7CisgICAgICAgIHJldHVybiBlbmRfYnVmOworICAgIH0KKworICAgIGxhc3RfZXYgPSBjdXJyZW50X2V2OworCisvKiBBZGQgZW5jcnlwdGlvbiBjYXBhYmlsaXR5ICovCisKKyAgICBpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKKyAgICBpZihjYXBhYmlsaXRpZXMgJiAweDEwKQorICAgICAgICBpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQgfCBJV19FTkNPREVfTk9LRVk7CisgICAgZWxzZQorICAgICAgICBpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOworCisgICAgaXdlLnUuZGF0YS5sZW5ndGggPSAwOworICAgIGN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludCgKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykpCisJaW5mbywKKyNlbmRpZgorCWN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIGxpc3QtPnNzaWQpOworCisgICAgLyogUmFuIG91dCBvZiBidWZmZXIgKi8KKyAgICBpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuZF9idWY7CisgICAgfQorCisgICAgbGFzdF9ldiA9IGN1cnJlbnRfZXY7CisKKy8qIFJhdGUgOiBzdHVmZmluZyBtdWx0aXBsZSB2YWx1ZXMgaW4gYSBzaW5nbGUgZXZlbnQgcmVxdWlyZSBhIGJpdAorICogbW9yZSBvZiBtYWdpYyAqLworICAgIGN1cnJlbnRfdmFsID0gY3VycmVudF9ldiArIElXX0VWX0xDUF9MRU47CisKKyAgICBpd2UuY21kID0gU0lPQ0dJV1JBVEU7CisvKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KKyAgICBpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7CisKKyAgICBmb3IoaSA9IDAgOyBpIDwgbGlzdC0+c3VwcG9ydGVkUmF0ZXNbMV0gOyBpKyspCisgICAgeworLyogQml0IHJhdGUgZ2l2ZW4gaW4gNTAwIGtiL3MgdW5pdHMgKCsgMHg4MCkgKi8KKyAgICAgICAgaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICgobGlzdC0+c3VwcG9ydGVkUmF0ZXNbaSsyXSAmIDB4N2YpICogNTAwMDAwKTsKKy8qIEFkZCBuZXcgdmFsdWUgdG8gZXZlbnQgKi8KKyAgICAgICAgY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZSgKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykpCisJCWluZm8sCisjZW5kaWYKKwkJY3VycmVudF9ldiwgY3VycmVudF92YWwsIGVuZF9idWYsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7CisKKyAgICAgICAgLyogUmFuIG91dCBvZiBidWZmZXIgKi8KKyAgICAgICAgaWYgKGxhc3RfZXYgPT0gY3VycmVudF92YWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlbmRfYnVmOworICAgICAgICB9CisKKyAgICAgICAgbGFzdF9ldiA9IGN1cnJlbnRfdmFsOworICAgIH0KKworICAgIGZvciAoaSA9IDAgOyBpIDwgbGlzdC0+ZXh0U3VwcG9ydGVkUmF0ZXNbMV0gOyBpKyspCisgICAgeworLyogQml0IHJhdGUgZ2l2ZW4gaW4gNTAwIGtiL3MgdW5pdHMgKCsgMHg4MCkgKi8KKyAgICAgICAgaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICgobGlzdC0+ZXh0U3VwcG9ydGVkUmF0ZXNbaSsyXSAmIDB4N2YpICogNTAwMDAwKTsKKy8qIEFkZCBuZXcgdmFsdWUgdG8gZXZlbnQgKi8KKyAgICAgICAgY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZSgKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykpCisJCWluZm8sCisjZW5kaWYKKwkJY3VycmVudF9ldiwgY3VycmVudF92YWwsIGVuZF9idWYsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7CisKKyAgICAgICAgLyogUmFuIG91dCBvZiBidWZmZXIgKi8KKyAgICAgICAgaWYgKGxhc3RfZXYgPT0gY3VycmVudF92YWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlbmRfYnVmOworICAgICAgICB9CisKKyAgICAgICAgbGFzdF9ldiA9IGN1cnJlbnRfZXY7CisgICAgfQorCisvKiBDaGVjayBpZiB3ZSBhZGRlZCBhbnkgZXZlbnQgKi8KKyAgICBpZigoY3VycmVudF92YWwgLSBjdXJyZW50X2V2KSA+IElXX0VWX0xDUF9MRU4pCisgICAgICAgIGN1cnJlbnRfZXYgPSBjdXJyZW50X3ZhbDsKKyNpZiBXSVJFTEVTU19FWFQgPiAxNAorI2RlZmluZSBJRUVFODAyMTFfRUxFTUlEX1JTTiAweDMwCisgICAgbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKyAgICBpd2UuY21kID0gSVdFVkNVU1RPTTsKKyAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiYmNuX2ludD0lZCIsIChsaXN0LT5iZWFjb25JbnRlcnZhbFsxXSA8PCA4KSArIGxpc3QtPmJlYWNvbkludGVydmFsWzBdKTsKKyAgICBpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOworICAgIGN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludCgKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykpCisJCWluZm8sCisjZW5kaWYKKwkJY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgYnVmKTsKKworICAgIC8qIFJhbiBvdXQgb2YgYnVmZmVyICovCisgICAgaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKKyAgICB7CisgICAgICAgIHJldHVybiBlbmRfYnVmOworICAgIH0KKworICAgIGxhc3RfZXYgPSBjdXJyZW50X2V2OworCisgICAgaWYgKGxpc3QtPndwYUllWzFdICE9IDApCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciByc25fbGVhZGVyW10gPSAicnNuX2llPSI7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIHdwYV9sZWFkZXJbXSA9ICJ3cGFfaWU9IjsKKworICAgICAgICBtZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworICAgICAgICBpd2UuY21kID0gSVdFVkNVU1RPTTsKKyAgICAgICAgaWYgKGxpc3QtPndwYUllWzBdID09IElFRUU4MDIxMV9FTEVNSURfUlNOKQorICAgICAgICAgICAgaXdlLnUuZGF0YS5sZW5ndGggPSBlbmNvZGVfaWUoYnVmLCBzaXplb2YoYnVmKSwKKyAgICAgICAgICAgICAgICBsaXN0LT53cGFJZSwgbGlzdC0+d3BhSWVbMV0rMiwKKyAgICAgICAgICAgICAgICByc25fbGVhZGVyLCBzaXplb2YocnNuX2xlYWRlciktMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGl3ZS51LmRhdGEubGVuZ3RoID0gZW5jb2RlX2llKGJ1Ziwgc2l6ZW9mKGJ1ZiksCisgICAgICAgICAgICAgICAgbGlzdC0+d3BhSWUsIGxpc3QtPndwYUllWzFdKzIsCisgICAgICAgICAgICAgICAgd3BhX2xlYWRlciwgc2l6ZW9mKHdwYV9sZWFkZXIpLTEpOworCisgICAgICAgIGlmIChpd2UudS5kYXRhLmxlbmd0aCAhPSAwKQorICAgICAgICAgICAgY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KAorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI3KSkKKwkJaW5mbywKKyNlbmRpZgorCQljdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBidWYpOworCisgICAgICAgIC8qIFJhbiBvdXQgb2YgYnVmZmVyICovCisgICAgICAgIGlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlbmRfYnVmOworICAgICAgICB9CisKKyAgICAgICAgbGFzdF9ldiA9IGN1cnJlbnRfZXY7CisgICAgfQorICAgIGlmIChsaXN0LT5yc25JZVsxXSAhPSAwKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgcnNuX2xlYWRlcltdID0gInJzbl9pZT0iOworICAgICAgICBtZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworICAgICAgICBpd2UuY21kID0gSVdFVkNVU1RPTTsKKworICAgICAgICBpZiAobGlzdC0+cnNuSWVbMF0gPT0gSUVFRTgwMjExX0VMRU1JRF9SU04pCisgICAgICAgIHsKKyAgICAgICAgICAgIGl3ZS51LmRhdGEubGVuZ3RoID0gZW5jb2RlX2llKGJ1Ziwgc2l6ZW9mKGJ1ZiksCisgICAgICAgICAgICAgICAgbGlzdC0+cnNuSWUsIGxpc3QtPnJzbkllWzFdKzIsCisgICAgICAgICAgICAgICAgcnNuX2xlYWRlciwgc2l6ZW9mKHJzbl9sZWFkZXIpLTEpOworICAgICAgICAgICAgaWYgKGl3ZS51LmRhdGEubGVuZ3RoICE9IDApCisgICAgICAgICAgICAgICAgY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KAorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI3KSkKKwkJCWluZm8sCisjZW5kaWYKKwkJCWN1cnJlbnRfZXYsIGVuZF9idWYsICAmaXdlLCBidWYpOworCisgICAgICAgICAgICAvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLworICAgICAgICAgICAgaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZW5kX2J1ZjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGFzdF9ldiA9IGN1cnJlbnRfZXY7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKy8qIFRoZSBvdGhlciBkYXRhIGluIHRoZSBzY2FuIHJlc3VsdCBhcmUgbm90IHJlYWxseQorICogaW50ZXJlc3RpbmcsIHNvIGZvciBub3cgZHJvcCBpdCAqLworICAgIHJldHVybiBjdXJyZW50X2V2OworfQorCitpbnQgdXNiZHJ2d2V4dF9naXduYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxLCBjaGFyICpleHRyYSkKK3sKKyAgICAvL3N0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKilkZXYtPnByaXY7CisKKyAgICBzdHJjcHkod3JxLT5uYW1lLCAiSUVFRSA4MDIuMTEtTUlNTyIpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB1c2JkcnZ3ZXh0X3Npd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgICAgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCit7CisgICAgdTMyX3QgRnJlcUtIejsKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPnByaXY7CisKKyAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGlmIChmcmVxLT5lID4gMSkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICBpZiAoZnJlcS0+ZSA9PSAxKQorICAgIHsKKyAgICAgICAgRnJlcUtIeiA9IChmcmVxLT5tIC8gMTAwMDAwKTsKKworICAgICAgICBpZiAoRnJlcUtIeiA+IDQwMDAwMDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChGcmVxS0h6ID4gNTgyNTAwMCkKKyAgICAgICAgICAgICAgICBGcmVxS0h6ID0gNTgyNTAwMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKEZyZXFLSHogPCA0OTIwMDAwKQorICAgICAgICAgICAgICAgIEZyZXFLSHogPSA0OTIwMDAwOworICAgICAgICAgICAgZWxzZSBpZiAoRnJlcUtIeiA8IDUwMDAwMDApCisgICAgICAgICAgICAgICAgRnJlcUtIeiA9ICgoKEZyZXFLSHogLSA0MDAwMDAwKSAvIDUwMDApICogNTAwMCkgKyA0MDAwMDAwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEZyZXFLSHogPSAoKChGcmVxS0h6IC0gNTAwMDAwMCkgLyA1MDAwKSAqIDUwMDApICsgNTAwMDAwMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChGcmVxS0h6ID4gMjQ4NDAwMCkKKyAgICAgICAgICAgICAgICBGcmVxS0h6ID0gMjQ4NDAwMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKEZyZXFLSHogPCAyNDEyMDAwKQorICAgICAgICAgICAgICAgIEZyZXFLSHogPSAyNDEyMDAwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEZyZXFLSHogPSAoKChGcmVxS0h6IC0gMjQxMjAwMCkgLyA1MDAwKSAqIDUwMDApICsgMjQxMjAwMDsKKyAgICAgICAgfQorCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEZyZXFLSHogPSB1c2JkcnZfY2hhbjJmcmVxKGZyZXEtPm0pOworCisgICAgICAgIGlmIChGcmVxS0h6ICE9IC0xKQorICAgICAgICAgICAgRnJlcUtIeiAqPSAxMDAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBGcmVxS0h6ID0gMjQxMjAwMDsKKyAgICB9CisKKyAgICAvL3ByaW50aygiZnJlcS0+bTogJWQsIGZyZXEtPmU6ICVkXG4iLCBmcmVxLT5tLCBmcmVxLT5lKTsKKyAgICAvL3ByaW50aygiRnJlcUtIejogJWRcbiIsIEZyZXFLSHopOworCisgICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCA9PSAxKQorICAgIHsKKyAgICAgICAgemZpV2xhblNldEZyZXF1ZW5jeShkZXYsIEZyZXFLSHosIDApOyAvLyBJbW1lZGlhdGUKKyAgICAgICAgLy91OF90IHdwYWllTGVuLHdwYWllWzUwXTsKKyAgICAgICAgLy96ZmlXbGFuUXVlcnlXcGFJZShkZXYsIHdwYWllLCAmd3BhaWVMZW4pOworICAgICAgICB6ZmlXbGFuRGlzYWJsZShkZXYsIDApOworICAgICAgICB6ZmlXbGFuRW5hYmxlKGRldik7CisgICAgICAgIC8vaWYgKHdwYWllTGVuID4gMikKKyAgICAgICAgLy8gICAgemZpV2xhblNldFdwYUllKGRldiwgd3BhaWUsIHdwYWllTGVuKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IHVzYmRydndleHRfZ2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICAgICAgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSAoc3RydWN0IHVzYmRydl9wcml2YXRlICopZGV2LT5wcml2OworCisgICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGZyZXEtPm0gPSB6ZmlXbGFuUXVlcnlGcmVxdWVuY3koZGV2KTsKKyAgICBmcmVxLT5lID0gMzsKKworICAgIHJldHVybiAwOworfQorCitpbnQgdXNiZHJ2d2V4dF9zaXdtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxLCBjaGFyICpleHRyYSkKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSAoc3RydWN0IHVzYmRydl9wcml2YXRlICopZGV2LT5wcml2OworICAgIHU4X3QgV2xhbk1vZGU7CisKKyAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzd2l0Y2god3JxLT5tb2RlKQorICAgIHsKKyAgICAgICAgY2FzZSBJV19NT0RFX01BU1RFUjoKKyAgICAgICAgICAgIFdsYW5Nb2RlID0gWk1fTU9ERV9BUDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElXX01PREVfSU5GUkE6CisgICAgICAgICAgICBXbGFuTW9kZSA9IFpNX01PREVfSU5GUkFTVFJVQ1RVUkU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJV19NT0RFX0FESE9DOgorICAgICAgICAgICAgV2xhbk1vZGUgPSBaTV9NT0RFX0lCU1M7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFdsYW5Nb2RlID0gWk1fTU9ERV9JQlNTOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgemZpV2xhblNldFdsYW5Nb2RlKGRldixXbGFuTW9kZSk7CisgICAgemZpV2xhbkRpc2FibGUoZGV2LCAxKTsKKyAgICB6ZmlXbGFuRW5hYmxlKGRldik7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IHVzYmRydndleHRfZ2l3bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICAgICAgICAgIF9fdTMyICptb2RlLCBjaGFyICpleHRyYSkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGlycUZsYWc7CisgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5wcml2OworCisgICAgaWYoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgc3Bpbl9sb2NrX2lycXNhdmUoJigoKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKShkZXYtPnByaXYpKS0+Y3NfbG9jayksIGlycUZsYWcpOworCisgICAgc3dpdGNoKHpmaVdsYW5RdWVyeVdsYW5Nb2RlKGRldikpCisgICAgeworICAgICAgICBjYXNlIFpNX01PREVfQVA6CisgICAgICAgICAgICAqbW9kZSA9IElXX01PREVfTUFTVEVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWk1fTU9ERV9JTkZSQVNUUlVDVFVSRToKKyAgICAgICAgICAgICptb2RlID0gSVdfTU9ERV9JTkZSQTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFpNX01PREVfSUJTUzoKKyAgICAgICAgICAgICptb2RlID0gSVdfTU9ERV9BREhPQzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgKm1vZGUgPSBJV19NT0RFX0FESE9DOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKCgoc3RydWN0IHVzYmRydl9wcml2YXRlICopKGRldi0+cHJpdikpLT5jc19sb2NrKSwgaXJxRmxhZyk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IHVzYmRydndleHRfc2l3c2VucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCXN0cnVjdCBpd19wYXJhbSAqc2VucywgY2hhciAqZXh0cmEpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCB1c2JkcnZ3ZXh0X2dpd3NlbnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQlzdHJ1Y3QgaXdfcGFyYW0gKnNlbnMsIGNoYXIgKmV4dHJhKQoreworCXNlbnMtPnZhbHVlID0gMDsKKwlzZW5zLT5maXhlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHVzYmRydndleHRfZ2l3cmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworICAgIHN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopIGV4dHJhOworICAgIGludCBpLCB2YWw7CisgICAgLy9pbnQgbnVtX2JhbmRfYTsKKyAgICB1MTZfdCBjaGFubmVsc1s2MF07CisgICAgdTE2X3QgY2hhbm5lbF9udW07CisKKyAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworI2lmIFdJUkVMRVNTX0VYVCA+IDkKKyAgICByYW5nZS0+dHhwb3dlcl9jYXBhID0gSVdfVFhQT1dfREJNOworLy8gWFhYIHdoYXQgYWJvdXQgbWluL21heF9wbXAsIG1pbi9tYXhfcG10LCBldGMuCisjZW5kaWYKKworI2lmIFdJUkVMRVNTX0VYVCA+IDEwCisgICAgcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7CisgICAgcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMTM7CisKKyAgICByYW5nZS0+cmV0cnlfY2FwYSA9IElXX1JFVFJZX0xJTUlUOworICAgIHJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUOworICAgIHJhbmdlLT5taW5fcmV0cnkgPSAwOworICAgIHJhbmdlLT5tYXhfcmV0cnkgPSAyNTU7CisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0lSRUxFU1NfRVhUID4gMTAgKi8KKworICAgIGNoYW5uZWxfbnVtID0gemZpV2xhblF1ZXJ5QWxsb3dDaGFubmVscyhkZXYsIGNoYW5uZWxzKTsKKworICAgIC8qIEd1cmFudGVlIHJlcG9ydGVkIGNoYW5uZWwgbnVtYmVycyBpcyBsZXNzIG9yIGVxdWFsIHRvIElXX01BWF9GUkVRVUVOQ0lFUyAqLworICAgIGlmIChjaGFubmVsX251bSA+IElXX01BWF9GUkVRVUVOQ0lFUykKKyAgICAgICAgY2hhbm5lbF9udW0gPSBJV19NQVhfRlJFUVVFTkNJRVM7CisKKyAgICB2YWwgPSAwOworCisgICAgZm9yIChpID0gMDsgaSA8IGNoYW5uZWxfbnVtOyBpKyspCisgICAgeworICAgICAgICByYW5nZS0+ZnJlcVt2YWxdLmkgPSB1c2JkcnZfZnJlcTJjaGFuKGNoYW5uZWxzW2ldKTsKKyAgICAgICAgcmFuZ2UtPmZyZXFbdmFsXS5tID0gY2hhbm5lbHNbaV07CisgICAgICAgIHJhbmdlLT5mcmVxW3ZhbF0uZSA9IDY7CisgICAgICAgIHZhbCsrOworICAgIH0KKworICAgIHJhbmdlLT5udW1fY2hhbm5lbHMgPSBjaGFubmVsX251bTsKKyAgICByYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGNoYW5uZWxfbnVtOworCisjaWYgMAorICAgIHJhbmdlLT5udW1fY2hhbm5lbHMgPSAxNDsgLy8gT25seSAyLjRHCisKKy8qIFhYWCBuZWVkIHRvIGZpbHRlciBhZ2FpbnN0IHRoZSByZWd1bGF0b3J5IGRvbWFpbiAmfCBhY3RpdmUgc2V0ICovCisgICAgdmFsID0gMDsKKyAgICBmb3IgKGkgPSAxOyBpIDw9IDE0OyBpKyspIC8vIEIsRyBCYW5kcworICAgIHsKKyAgICAgICAgcmFuZ2UtPmZyZXFbdmFsXS5pID0gaTsKKyAgICAgICAgaWYgKGkgPT0gMTQpCisgICAgICAgICAgICAgIHJhbmdlLT5mcmVxW3ZhbF0ubSA9IDI0ODQwMDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgcmFuZ2UtPmZyZXFbdmFsXS5tID0gKDI0MTIrKGktMSkqNSkqMTAwMDsKKyAgICAgICAgcmFuZ2UtPmZyZXFbdmFsXS5lID0gMzsKKyAgICAgICAgdmFsKys7CisgICAgfQorCisgICAgbnVtX2JhbmRfYSA9IChJV19NQVhfRlJFUVVFTkNJRVMgLSB2YWwpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9iYW5kX2E7IGkrKykgLy8gQSBCYW5kcworICAgIHsKKyAgICAgICAgcmFuZ2UtPmZyZXFbdmFsXS5pID0gY2hhbm5lbF9mcmVxdWVuY3lfMTFBWzIgKiBpXTsKKyAgICAgICAgcmFuZ2UtPmZyZXFbdmFsXS5tID0gY2hhbm5lbF9mcmVxdWVuY3lfMTFBWzIgKiBpICsgMV0gKiAxMDAwOworICAgICAgICByYW5nZS0+ZnJlcVt2YWxdLmUgPSAzOworICAgICAgICB2YWwrKzsKKyAgICB9CisgICAgLy8gTUlNTyBSYXRlIE5vdCBEZWZpbmVkIE5vdworICAgIC8vRm9yIDgwMi4xMWEsIHRoZXJlIGFyZSB0b28gbW9yZSBmcmVxdWVuY3kuIFdlIGNhbid0IHJldHVybiB0aGVtIGFsbAorICAgIHJhbmdlLT5udW1fZnJlcXVlbmN5ID0gdmFsOworI2VuZGlmCisKKy8qIE1heCBvZiAvcHJvYy9uZXQvd2lyZWxlc3MgKi8KKyAgICByYW5nZS0+bWF4X3F1YWwucXVhbCA9IDEwMDsgLy8/PyAgICAgICAgICAgICAgICAgIC8vOTI7CisgICAgcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMTU0OyAvLz8/CisgICAgcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMTU0OyAvLz8/CisgICAgcmFuZ2UtPnNlbnNpdGl2aXR5ID0gMzsgLy8/PworCisvLyBYWFggdGhlc2UgbmVlZCB0byBiZSBuc2Qtc3BlY2lmaWMhCisgICAgcmFuZ2UtPm1pbl9ydHMgPSAwOworICAgIHJhbmdlLT5tYXhfcnRzID0gMjM0NzsKKyAgICByYW5nZS0+bWluX2ZyYWcgPSAyNTY7CisgICAgcmFuZ2UtPm1heF9mcmFnID0gMjM0NjsKKyAgICByYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IDQvKk5VTV9XRVBLRVlTKi87IC8vPz8KKyAgICByYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsgLy8/PworCisgICAgcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSA1OyAvLz8/ICAgICAgICAgICAgICAgLy9XRVAgS2V5IEVuY29kaW5nIFNpemUKKyAgICByYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IDEzOy8vPz8KKworLy8gWFhYIHdoYXQgYWJvdXQgbnVtX2JpdHJhdGVzL3Rocm91Z2hwdXQ/CisgICAgcmFuZ2UtPm51bV9iaXRyYXRlcyA9IDA7IC8vPz8KKworLyogZXN0aW1hdGVkIG1heCB0aHJvdWdocHV0ICovCisvLyBYWFggbmVlZCB0byBjYXAgaXQgaWYgd2UncmUgcnVubmluZyBhdCB+Mk1icHMuLgorCisgICAgcmFuZ2UtPnRocm91Z2hwdXQgPSAzMDAwMDAwMDA7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IHVzYmRydndleHRfc2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICAgICAgc3RydWN0IHNvY2thZGRyICpNYWNBZGRyLCBjaGFyICpleHRyYSkKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPnByaXY7CisKKyAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGlmICh6ZmlXbGFuUXVlcnlXbGFuTW9kZShkZXYpID09IFpNX01PREVfQVApIC8vIEFQIE1vZGUKKyAgICAgICAgemZpV2xhblNldE1hY0FkZHJlc3MoZGV2LCh1MTZfdCAqKSZNYWNBZGRyLT5zYV9kYXRhWzBdKTsKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TVEEgTW9kZQorICAgICAgICB6ZmlXbGFuU2V0QnNzaWQoZGV2LCZNYWNBZGRyLT5zYV9kYXRhWzBdKTsKKworICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgPT0gMSkKKyAgICB7CisgICAgICAgIC8vdThfdCB3cGFpZUxlbix3cGFpZVs4MF07CisgICAgICAgIC8vemZpV2xhblF1ZXJ5V3BhSWUoZGV2LCB3cGFpZSwgJndwYWllTGVuKTsKKyAgICAgICAgemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKKyAgICAgICAgemZpV2xhbkVuYWJsZShkZXYpOworICAgICAgICAvL2lmICh3cGFpZUxlbiA+IDIpCisgICAgICAgIC8vICAgIHpmaVdsYW5TZXRXcGFJZShkZXYsIHdwYWllLCB3cGFpZUxlbik7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB1c2JkcnZ3ZXh0X2dpd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpNYWNBZGRyLCBjaGFyICpleHRyYSkKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPnByaXY7CisKKyAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHpmaVdsYW5RdWVyeVdsYW5Nb2RlKGRldikgPT0gWk1fTU9ERV9BUCkgLy8gQVAgTW9kZQorICAgICAgICB6ZmlXbGFuUXVlcnlNYWNBZGRyZXNzKGRldiwgJk1hY0FkZHItPnNhX2RhdGFbMF0pOworICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1NUQSBNb2RlCisgICAgeworICAgICAgICBpZiAobWFjcC0+YWRhcHRlclN0YXRlID09IFpNX1NUQVRVU19NRURJQV9DT05ORUNUKQorICAgICAgICB7CisgICAgICAgICAgICB6ZmlXbGFuUXVlcnlCc3NpZChkZXYsICZNYWNBZGRyLT5zYV9kYXRhWzBdKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHU4X3QgemVyb19hZGRyWzZdID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisgICAgICAgICAgICBtZW1jcHkoJk1hY0FkZHItPnNhX2RhdGFbMF0sIHplcm9fYWRkciwgc2l6ZW9mKHplcm9fYWRkcikpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB1c2JkcnZ3ZXh0X2l3YXBsaXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKyAgICAvL0Rvbid0IGtub3cgaG93IHRvIGRvIHlldC0tQ1dZYW5nKCspCisgICAgcmV0dXJuIDA7CisKK30KKworaW50IHVzYmRydndleHRfc2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+cHJpdjsKKworICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBwcmludGsoIkNXWSAtIHVzYmRydndleHRfc2l3c2NhblxuIik7CisKKyAgICB6ZmlXbGFuU2NhbihkZXYpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB1c2JkcnZ3ZXh0X2dpd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKilkZXYtPnByaXY7CisgICAgLy9zdHJ1Y3QgenNXbGFuRGV2KiB3ZCA9IChzdHJ1Y3QgenNXbGFuRGV2Kikgem13X3dsYW5fZGV2KGRldik7CisgICAgY2hhciAqY3VycmVudF9ldiA9IGV4dHJhOworICAgIGNoYXIgKmVuZF9idWY7CisgICAgaW50IGk7CisgICAgLy9zdHJ1Y3QgenNCc3NMaXN0IEJzc0xpc3Q7CisgICAgc3RydWN0IHpzQnNzTGlzdFYxICpwQnNzTGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6c0Jzc0xpc3RWMSksIEdGUF9LRVJORUwpOworICAgIC8vQnNzTGlzdCA9IHdkLT5zdGEucEJzc0xpc3Q7CisgICAgLy96bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGRhdGEtPmxlbmd0aCA9PSAwKQorICAgIHsKKyAgICAgICBlbmRfYnVmID0gZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlbmRfYnVmID0gZXh0cmEgKyBkYXRhLT5sZW5ndGg7CisgICAgfQorCisgICAgcHJpbnRrKCJnaXdzY2FuIC0gUmVwb3J0IFNjYW4gUmVzdWx0c1xuIik7CisgICAgLy9wcmludGsoImdpd3NjYW4gLSBCc3NMaXN0IFNyZXVjdHVyZSBMZW4gOiAlZFxuIiwgc2l6ZW9mKEJzc0xpc3QpKTsKKyAgICAvL3ByaW50aygiZ2l3c2NhbiAtIEJzc0xpc3QgQ291bnQgOiAlZFxuIiwgd2QtPnN0YS5wQnNzTGlzdC0+YnNzQ291bnQpOworICAgIC8vcHJpbnRrKCJnaXdzY2FuIC0gVXBkYXRlQnNzTGlzdCBDb3VudCA6ICVkXG4iLCB3ZC0+c3RhLnBVcGRhdGVCc3NMaXN0LT5ic3NDb3VudCk7CisgICAgemZpV2xhblF1ZXJ5QnNzTGlzdFYxKGRldiwgcEJzc0xpc3QpOworICAgIC8vemZpV2xhblF1ZXJ5QnNzTGlzdChkZXYsICZCc3NMaXN0KTsKKworLyogUmVhZCBhbmQgcGFyc2UgYWxsIGVudHJpZXMgKi8KKyAgICBwcmludGsoImdpd3NjYW4gLSBwQnNzTGlzdC0+YnNzQ291bnQgOiAlZFxuIiwgcEJzc0xpc3QtPmJzc0NvdW50KTsKKyAgICAvL3ByaW50aygiZ2l3c2NhbiAtIEJzc0xpc3QuYnNzQ291bnQgOiAlZFxuIiwgQnNzTGlzdC5ic3NDb3VudCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgcEJzc0xpc3QtPmJzc0NvdW50OyBpKyspCisgICAgeworLyogVHJhbnNsYXRlIHRvIFdFIGZvcm1hdCB0aGlzIGVudHJ5ICovCisgICAgICAgIC8vY3VycmVudF9ldiA9IHVzYmRydl90cmFuc2xhdGVfc2NhbihkZXYsIGluZm8sIGN1cnJlbnRfZXYsCisgICAgICAgIC8vICAgIGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwgJnBCc3NMaXN0LT5ic3NJbmZvW2ldKTsKKyAgICAgICAgY3VycmVudF9ldiA9IHVzYmRydl90cmFuc2xhdGVfc2NhbihkZXYsIGluZm8sIGN1cnJlbnRfZXYsCisgICAgICAgICAgICBlbmRfYnVmLCAmcEJzc0xpc3QtPmJzc0luZm9baV0pOworCisjaWYgV0lSRUxFU1NfRVhUID4gMTYKKyAgICAgICAgaWYgKGN1cnJlbnRfZXYgPT0gZW5kX2J1ZikKKyAgICAgICAgeworICAgICAgICAgICAga2ZyZWUocEJzc0xpc3QpOworICAgICAgICAgICAgZGF0YS0+bGVuZ3RoID0gY3VycmVudF9ldiAtIGV4dHJhOworICAgICAgICAgICAgcmV0dXJuIC1FMkJJRzsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisvKiBMZW5ndGggb2YgZGF0YSAqLworICAgIGRhdGEtPmxlbmd0aCA9IChjdXJyZW50X2V2IC0gZXh0cmEpOworICAgIGRhdGEtPmZsYWdzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0b2RvICovCisKKyAgICBrZnJlZShwQnNzTGlzdCk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IHVzYmRydndleHRfc2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVzc2lkLCBjaGFyICpleHRyYSkKK3sKKyAgICBjaGFyIEVzc2lkQnVmW0lXX0VTU0lEX01BWF9TSVpFKzFdOworICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+cHJpdjsKKworICAgIGlmKCFuZXRpZl9ydW5uaW5nKGRldikpCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgaWYgKGVzc2lkLT5mbGFncyA9PSAxKQorICAgIHsKKyAgICAgICAgaWYgKGVzc2lkLT5sZW5ndGggPiAoSVdfRVNTSURfTUFYX1NJWkUrMSkpCisgICAgICAgICAgICByZXR1cm4gLUUyQklHOworCisgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmRXNzaWRCdWYsIGVzc2lkLT5wb2ludGVyLCBlc3NpZC0+bGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworCisgICAgICAgIEVzc2lkQnVmW2Vzc2lkLT5sZW5ndGhdID0gJ1wwJzsKKyAgICAgICAgLy9wcmludGsoInNpd2Vzc2lkIC0gU2V0IEVzc2lkIDogJXNcbiIsRXNzaWRCdWYpOworICAgICAgICAvL3ByaW50aygic2l3ZXNzaWQgLSBFc3NpZCBMZW4gOiAlZFxuIixlc3NpZC0+bGVuZ3RoKTsKKyAgICAgICAgLy9wcmludGsoInNpd2Vzc2lkIC0gRXNzaWQgRmxhZyA6ICV4XG4iLGVzc2lkLT5mbGFncyk7CisgICAgICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgICAgemZpV2xhblNldFNTSUQoZGV2LCBFc3NpZEJ1Ziwgc3RybGVuKEVzc2lkQnVmKSk7CisgICAgICAgICAgICB6ZmlXbGFuU2V0RnJlcXVlbmN5KGRldiwgemZpV2xhblF1ZXJ5RnJlcXVlbmN5KGRldiksIEZBTFNFKTsKKyAgICAgICAgICAgIHpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCB6ZmlXbGFuUXVlcnlFbmNyeU1vZGUoZGV2KSk7CisgICAgICAgICAgICAvL3U4X3Qgd3BhaWVMZW4sd3BhaWVbNTBdOworICAgICAgICAgICAgLy96ZmlXbGFuUXVlcnlXcGFJZShkZXYsIHdwYWllLCAmd3BhaWVMZW4pOworICAgICAgICAgICAgemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKKyAgICAgICAgICAgIHpmaVdsYW5FbmFibGUoZGV2KTsKKyAgICAgICAgICAgIC8vaWYgKHdwYWllTGVuID4gMikKKyAgICAgICAgICAgIC8vICAgIHpmaVdsYW5TZXRXcGFJZShkZXYsIHdwYWllLCB3cGFpZUxlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IHVzYmRydndleHRfZ2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVzc2lkLCBjaGFyICpleHRyYSkKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPnByaXY7CisgICAgdThfdCBFc3NpZExlbjsKKyAgICBjaGFyIEVzc2lkQnVmW0lXX0VTU0lEX01BWF9TSVpFKzFdOworICAgIGludCBzc2lkX2xlbjsKKworICAgIGlmKCFuZXRpZl9ydW5uaW5nKGRldikpCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHpmaVdsYW5RdWVyeVNTSUQoZGV2LCAmRXNzaWRCdWZbMF0sICZFc3NpZExlbik7CisKKyAgICAvKiBDb252ZXJ0IHR5cGUgZnJvbSB1bnNpZ25lZCBjaGFyIHRvIGNoYXIgKi8KKyAgICBzc2lkX2xlbiA9IChpbnQpRXNzaWRMZW47CisKKyAgICAvKiBNYWtlIHN1cmUgdGhlIGVzc2lkIGxlbmd0aCBpcyBub3QgZ3JlYXRlciB0aGFuIElXX0VTU0lEX01BWF9TSVpFICovCisgICAgaWYgKHNzaWRfbGVuID4gSVdfRVNTSURfTUFYX1NJWkUpCisgICAgICAgIHNzaWRfbGVuID0gSVdfRVNTSURfTUFYX1NJWkU7CisKKyAgICBFc3NpZEJ1Zltzc2lkX2xlbl0gPSAnXDAnOworCisgICAgZXNzaWQtPmZsYWdzID0gMTsKKyAgICBlc3NpZC0+bGVuZ3RoID0gc3RybGVuKEVzc2lkQnVmKTsKKworICAgIG1lbWNweShleHRyYSwgRXNzaWRCdWYsIGVzc2lkLT5sZW5ndGgpOworICAgIC8vIHdpcmVsZXNzLmMgaW4gS2VybmVsIHdvdWxkIGhhbmRsZSBjb3B5X3RvX3VzZXIgLS0gbGluZSA2NzkKKyAgICAvKmlmIChlc3NpZC0+cG9pbnRlcikKKyAgICB7CisgICAgICAgIGlmICggY29weV90b191c2VyKGVzc2lkLT5wb2ludGVyLCBFc3NpZEJ1ZiwgZXNzaWQtPmxlbmd0aCkgKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGsoImdpd2Vzc2lkIC0gY29weV90b191c2VyIEZhaWxcbiIpOworICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgIH0KKyAgICB9Ki8KKworICAgIHJldHVybiAwOworfQorCitpbnQgdXNiZHJ2d2V4dF9zaXduaWNrbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCXN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqbmlja25hbWUpCit7CisgICAgLy9FeGlzdCBidXQganVuay0tQ1dZYW5nKCspCisJcmV0dXJuIDA7Cit9CisKK2ludCB1c2JkcnZ3ZXh0X2dpd25pY2tuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpuaWNrbmFtZSkKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPnByaXY7CisgICAgdThfdCBFc3NpZExlbjsKKyAgICBjaGFyIEVzc2lkQnVmW0lXX0VTU0lEX01BWF9TSVpFKzFdOworCisgICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHpmaVdsYW5RdWVyeVNTSUQoZGV2LCAmRXNzaWRCdWZbMF0sICZFc3NpZExlbik7CisgICAgRXNzaWRCdWZbRXNzaWRMZW5dID0gMDsKKworICAgIGRhdGEtPmZsYWdzID0gMTsKKyAgICBkYXRhLT5sZW5ndGggPSBzdHJsZW4oRXNzaWRCdWYpOworCisgICAgbWVtY3B5KG5pY2tuYW1lLCBFc3NpZEJ1ZiwgZGF0YS0+bGVuZ3RoKTsKKworCXJldHVybiAwOworfQorCitpbnQgdXNiZHJ2d2V4dF9zaXdyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgICAgICAgICAgc3RydWN0IGl3X3BhcmFtICpmcnEsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+cHJpdjsKKyAgICAvL0FycmF5IHRvIERlZmluZSBSYXRlIE51bWJlciB0aGF0IFNlbmQgdG8gRHJpdmVyCisgICAgdTE2X3QgemNJbmRleHRvUmF0ZUJHWzE2XSA9IHsxMDAwLCAyMDAwLCA1NTAwLCAxMTAwMCwgMCwgMCwgMCwgMCwgNDgwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQwMDAsIDEyMDAwLCA2MDAwLCA1NDAwMCwgMzYwMDAsIDE4MDAwLCA5MDAwfTsKKyAgICB1MTZfdCB6Y1JhdGVUb01DU1tdID0gezB4ZmYsIDAsIDEsIDIsIDMsIDB4YiwgMHhmLCAweGEsIDB4ZSwgMHg5LCAweGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgsIDB4Y307CisgICAgdThfdCBpLFJhdGVJbmRleCA9IDQ7CisgICAgdTE2X3QgUmF0ZUticHM7CisKKyAgICAvL3ByaW50aygiZnJxLT5kaXNhYmxlZCA6IDB4JXhcbiIsZnJxLT5kaXNhYmxlZCk7CisgICAgLy9wcmludGsoImZycS0+dmFsdWUgOiAweCV4XG4iLGZycS0+dmFsdWUpOworCisgICAgUmF0ZUticHMgPSBmcnEtPnZhbHVlIC8gMTAwMDsKKyAgICAvL3ByaW50aygiUmF0ZUticHMgOiAlZFxuIiwgUmF0ZUticHMpOworICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKFJhdGVLYnBzID09IHpjSW5kZXh0b1JhdGVCR1tpXSkKKyAgICAgICAgICAgIFJhdGVJbmRleCA9IGk7CisgICAgfQorICAgIGlmICh6Y0luZGV4dG9SYXRlQkdbUmF0ZUluZGV4XSA9PSAwKQorICAgICAgICBSYXRlSW5kZXggPSAweGZmOworICAgIC8vcHJpbnRrKCJSYXRlSW5kZXggOiAleFxuIiwgUmF0ZUluZGV4KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMTM7IGkrKykKKyAgICAgICAgaWYgKFJhdGVJbmRleCA9PSB6Y1JhdGVUb01DU1tpXSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIC8vcHJpbnRrKCJJbmRleCA6ICV4XG4iLCBpKTsKKyAgICBpZiAoUmF0ZUticHMgPT0gNjUwMDApCisgICAgeworICAgICAgICBSYXRlSW5kZXggPSAyMDsKKyAgICAgICAgcHJpbnRrKCJSYXRlSW5kZXggOiAlZFxuIiwgUmF0ZUluZGV4KTsKKyAgICB9CisgICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCA9PSAxKQorICAgIHsKKyAgICAgICAgemZpV2xhblNldFR4UmF0ZShkZXYsIGkpOworICAgICAgICAvL3pmaVdsYW5EaXNhYmxlKGRldik7CisgICAgICAgIC8vemZpV2xhbkVuYWJsZShkZXYpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQgdXNiZHJ2d2V4dF9naXdyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgICAgICAgICAgc3RydWN0IGl3X3BhcmFtICpmcnEsIGNoYXIgKmV4dHJhKQoreworICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKilkZXYtPnByaXY7CisKKyAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmcnEtPmZpeGVkID0gMDsKKyAgICBmcnEtPmRpc2FibGVkID0gMDsKKyAgICBmcnEtPnZhbHVlID0gemZpV2xhblF1ZXJ5UnhSYXRlKGRldikgKiAxMDAwOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB1c2JkcnZ3ZXh0X3Npd3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICAgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPnByaXY7CisgICAgaW50IHZhbCA9IHJ0cy0+dmFsdWU7CisKKyAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHJ0cy0+ZGlzYWJsZWQpCisgICAgICAgIHZhbCA9IDIzNDc7CisKKyAgICBpZiAoKHZhbCA8IDApIHx8ICh2YWwgPiAyMzQ3KSkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICB6ZmlXbGFuU2V0UnRzVGhyZXNob2xkKGRldix2YWwpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB1c2JkcnZ3ZXh0X2dpd3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICAgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPnByaXY7CisKKyAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBydHMtPnZhbHVlID0gemZpV2xhblF1ZXJ5UnRzVGhyZXNob2xkKGRldik7CisgICAgcnRzLT5kaXNhYmxlZCA9IChydHMtPnZhbHVlID49IDIzNDcpOworICAgIHJ0cy0+Zml4ZWQgPSAxOworCisgICAgcmV0dXJuIDA7CisKK30KKworaW50IHVzYmRydndleHRfc2l3ZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICAgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpCit7CisgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5wcml2OworICAgIHUxNl90IGZyYWdUaHJlc2hvbGQ7CisKKyAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGZyYWctPmRpc2FibGVkKQorICAgICAgICBmcmFnVGhyZXNob2xkID0gMDsKKyAgICBlbHNlCisgICAgICAgIGZyYWdUaHJlc2hvbGQgPSBmcmFnLT52YWx1ZTsKKworICAgIHpmaVdsYW5TZXRGcmFnVGhyZXNob2xkKGRldixmcmFnVGhyZXNob2xkKTsKKworICAgIHJldHVybiAwOworfQorCitpbnQgdXNiZHJ2d2V4dF9naXdmcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgICAgICAgICAgc3RydWN0IGl3X3BhcmFtICpmcmFnLCBjaGFyICpleHRyYSkKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPnByaXY7CisgICAgdTE2IHZhbDsKKyAgICB1bnNpZ25lZCBsb25nIGlycUZsYWc7CisKKyAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzcGluX2xvY2tfaXJxc2F2ZSgmKCgoc3RydWN0IHVzYmRydl9wcml2YXRlICopKGRldi0+cHJpdikpLT5jc19sb2NrKSwgaXJxRmxhZyk7CisKKyAgICB2YWwgPSB6ZmlXbGFuUXVlcnlGcmFnVGhyZXNob2xkKGRldik7CisKKyAgICBmcmFnLT52YWx1ZSA9IHZhbDsKKworICAgIGZyYWctPmRpc2FibGVkID0gKHZhbCA+PSAyMzQ2KTsKKyAgICBmcmFnLT5maXhlZCA9IDE7CisKKyAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoKChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKikoZGV2LT5wcml2KSktPmNzX2xvY2spLCBpcnFGbGFnKTsKKworICAgIHJldHVybiAwOworfQorCitpbnQgdXNiZHJ2d2V4dF9zaXd0eHBvdyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCXN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKK3sKKyAgICAvL05vdCBzdXBwb3J0IHlldC0tQ1dZbmcoKykKKwlyZXR1cm4gMDsKK30KKworaW50IHVzYmRydndleHRfZ2l3dHhwb3coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQlzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCit7CisgICAgLy9Ob3Qgc3VwcG9ydCB5ZXQtLUNXWW5nKCspCisJcmV0dXJuIDA7Cit9CisKK2ludCB1c2JkcnZ3ZXh0X3Npd3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQoreworICAgIC8vRG8gbm90aGluZy0tQ1dZYW5nKCspCisJcmV0dXJuIDA7Cit9CisKK2ludCB1c2JkcnZ3ZXh0X2dpd3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQoreworICAgIC8vRG8gbm90aGluZy0tQ1dZYW5nKCspCisJcmV0dXJuIDA7Cit9CisKK2ludCB1c2JkcnZ3ZXh0X3Npd2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICAgICAgICAgIHN0cnVjdCBpd19wb2ludCAqZXJxLCBjaGFyICprZXkpCit7CisgICAgc3RydWN0IHpzS2V5SW5mbyBrZXlJbmZvOworICAgIGludCBpLCBXZXBTdGF0ZSA9IFpNX0VOQ1JZUFRJT05fV0VQX0RJU0FCTEVEOworICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+cHJpdjsKKworICAgIGlmKCFuZXRpZl9ydW5uaW5nKGRldikpCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisgICAgaWYgKChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKSA9PSAwKQorICAgIHsKKyAgICAgICAga2V5SW5mby5rZXkgPSBrZXk7CisgICAgICAgIGtleUluZm8ua2V5TGVuZ3RoID0gZXJxLT5sZW5ndGg7CisgICAgICAgIGtleUluZm8ua2V5SW5kZXggPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOworICAgICAgICBpZiAoa2V5SW5mby5rZXlJbmRleCA+PSA0KQorICAgICAgICAgICAga2V5SW5mby5rZXlJbmRleCA9IDA7CisgICAgICAgIGtleUluZm8uZmxhZyA9IFpNX0tFWV9GTEFHX0RFRkFVTFRfS0VZOworCisgICAgICAgIHpmaVdsYW5TZXRLZXkoZGV2LCBrZXlJbmZvKTsKKyAgICAgICAgV2VwU3RhdGUgPSBaTV9FTkNSWVBUSU9OX1dFUF9FTkFCTEVEOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKGkgPSAxOyBpIDwgNDsgaSsrKQorICAgICAgICAgICAgemZpV2xhblJlbW92ZUtleShkZXYsIDAsIGkpOworICAgICAgICBXZXBTdGF0ZSA9IFpNX0VOQ1JZUFRJT05fV0VQX0RJU0FCTEVEOworICAgICAgICAvL3pmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCBaTV9OT19XRVApOworICAgIH0KKworICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgPT0gMSkKKyAgICB7CisgICAgICAgIHpmaVdsYW5TZXRXZXBTdGF0dXMoZGV2LCBXZXBTdGF0ZSk7CisgICAgICAgIHpmaVdsYW5TZXRGcmVxdWVuY3koZGV2LCB6ZmlXbGFuUXVlcnlGcmVxdWVuY3koZGV2KSwgRkFMU0UpOworICAgICAgICAvL3pmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCB6ZmlXbGFuUXVlcnlFbmNyeU1vZGUoZGV2KSk7CisgICAgICAgIC8vdThfdCB3cGFpZUxlbix3cGFpZVs1MF07CisgICAgICAgIC8vemZpV2xhblF1ZXJ5V3BhSWUoZGV2LCB3cGFpZSwgJndwYWllTGVuKTsKKyAgICAgICAgemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKKyAgICAgICAgemZpV2xhbkVuYWJsZShkZXYpOworICAgICAgICAvL2lmICh3cGFpZUxlbiA+IDIpCisgICAgICAgIC8vICAgIHpmaVdsYW5TZXRXcGFJZShkZXYsIHdwYWllLCB3cGFpZUxlbik7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB1c2JkcnZ3ZXh0X2dpd2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICAgICAgICAgIHN0cnVjdCBpd19wb2ludCAqZXJxLCBjaGFyICprZXkpCit7CisgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKWRldi0+cHJpdjsKKyAgICB1OF90IEVuY3J5cHRpb25Nb2RlOworICAgIHU4X3Qga2V5TGVuID0gMDsKKworICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBFbmNyeXB0aW9uTW9kZSA9IHpmaVdsYW5RdWVyeUVuY3J5TW9kZShkZXYpOworCisgICAgaWYgKEVuY3J5cHRpb25Nb2RlKQorICAgIHsKKyAgICAgICAgZXJxLT5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlcnEtPmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOworICAgIH0KKworLyogV2UgY2FuJ3QgcmV0dXJuIHRoZSBrZXksIHNvIHNldCB0aGUgcHJvcGVyIGZsYWcgYW5kIHJldHVybiB6ZXJvICovCisgICAgZXJxLT5mbGFncyB8PSBJV19FTkNPREVfTk9LRVk7CisgICAgbWVtc2V0KGtleSwgMCwgMTYpOworCisvKiBDb3B5IHRoZSBrZXkgdG8gdGhlIHVzZXIgYnVmZmVyICovCisgICAgc3dpdGNoKEVuY3J5cHRpb25Nb2RlKQorICAgIHsKKyAgICAgICAgY2FzZSBaTV9XRVA2NDoKKyAgICAgICAgICAgIGtleUxlbiA9IDU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBaTV9XRVAxMjg6CisgICAgICAgICAgICBrZXlMZW4gPSAxMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFpNX1dFUDI1NjoKKyAgICAgICAgICAgIGtleUxlbiA9IDI5OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWk1fQUVTOgorICAgICAgICAgICAga2V5TGVuID0gMTY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBaTV9US0lQOgorICAgICAgICAgICAga2V5TGVuID0gMzI7CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQworICAgICAgICBjYXNlIFpNX0NFTkM6CisgICAgICAgICAgICBrZXlMZW4gPSAzMjsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKKyAgICAgICAgY2FzZSBaTV9OT19XRVA6CisgICAgICAgICAgICBrZXlMZW4gPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQgOgorICAgICAgICAgICAga2V5TGVuID0gMDsKKyAgICAgICAgICAgIHByaW50aygiVW5rbm93biBFbmNyeU1vZGVcbiIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICB9CisgICAgZXJxLT5sZW5ndGggPSBrZXlMZW47CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IHVzYmRydndleHRfc2l3cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZycSwgY2hhciAqZXh0cmEpCit7CisgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKWRldi0+cHJpdjsKKyAgICB1OF90IFBTTW9kZTsKKworICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZnJxLT5kaXNhYmxlZCkKKyAgICAgICAgUFNNb2RlID0gWk1fU1RBX1BTX05PTkU7CisgICAgZWxzZQorICAgICAgICBQU01vZGUgPSBaTV9TVEFfUFNfTUFYOworCisgICAgemZpV2xhblNldFBvd2VyU2F2ZU1vZGUoZGV2LFBTTW9kZSk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IHVzYmRydndleHRfZ2l3cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZycSwgY2hhciAqZXh0cmEpCit7CisgICAgdW5zaWduZWQgbG9uZyBpcnFGbGFnOworICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKilkZXYtPnByaXY7CisKKyAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgc3Bpbl9sb2NrX2lycXNhdmUoJigoKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKShkZXYtPnByaXYpKS0+Y3NfbG9jayksIGlycUZsYWcpOworCisgICAgaWYgKHpmaVdsYW5RdWVyeVBvd2VyU2F2ZU1vZGUoZGV2KSA9PSBaTV9TVEFfUFNfTk9ORSkKKyAgICAgICAgZnJxLT5kaXNhYmxlZCA9IDE7CisgICAgZWxzZQorICAgICAgICBmcnEtPmRpc2FibGVkID0gMDsKKworICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJigoKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKShkZXYtPnByaXYpKS0+Y3NfbG9jayksIGlycUZsYWcpOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8vaW50IHVzYmRydndleHRfc2V0cGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKy8vCQkgICAJIHZvaWQgKncsIGNoYXIgKmV4dHJhKQorLy97CisvLwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBkZXYtPnByaXY7CisvLwlzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IHZhcC0+aXZfaWM7CisvLwlzdHJ1Y3QgaWVlZTgwMjExX3JzbnBhcm1zICpyc24gPSAmdmFwLT5pdl9ic3MtPm5pX3JzbjsKKy8vCWludCAqaSA9IChpbnQgKikgZXh0cmE7CisvLwlpbnQgcGFyYW0gPSBpWzBdOwkJLyogcGFyYW1ldGVyIGlkIGlzIDFzdCAqLworLy8JaW50IHZhbHVlID0gaVsxXTsJCS8qIE5COiBtb3N0IHZhbHVlcyBhcmUgVFlQRV9JTlQgKi8KKy8vCWludCByZXR2ID0gMDsKKy8vCWludCBqLCBjYXBzOworLy8JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9hdXRoZW50aWNhdG9yICphdXRoOworLy8JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9hY2xhdG9yICphY2w7CisvLworLy8Jc3dpdGNoIChwYXJhbSkgeworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQVVUSE1PREU6CisvLwkJc3dpdGNoICh2YWx1ZSkgeworLy8JCWNhc2UgSUVFRTgwMjExX0FVVEhfV1BBOgkvKiBXUEEgKi8KKy8vCQljYXNlIElFRUU4MDIxMV9BVVRIXzgwMjFYOgkvKiA4MDIuMXggKi8KKy8vCQljYXNlIElFRUU4MDIxMV9BVVRIX09QRU46CS8qIG9wZW4gKi8KKy8vCQljYXNlIElFRUU4MDIxMV9BVVRIX1NIQVJFRDoJLyogc2hhcmVkLWtleSAqLworLy8JCWNhc2UgSUVFRTgwMjExX0FVVEhfQVVUTzoJLyogYXV0byAqLworLy8JCQlhdXRoID0gaWVlZTgwMjExX2F1dGhlbnRpY2F0b3JfZ2V0KHZhbHVlKTsKKy8vCQkJaWYgKGF1dGggPT0gTlVMTCkKKy8vCQkJCXJldHVybiAtRUlOVkFMOworLy8JCQlicmVhazsKKy8vCQlkZWZhdWx0OgorLy8JCQlyZXR1cm4gLUVJTlZBTDsKKy8vCQl9CisvLwkJc3dpdGNoICh2YWx1ZSkgeworLy8JCWNhc2UgSUVFRTgwMjExX0FVVEhfV1BBOgkvKiBXUEEgdy8gODAyLjF4ICovCisvLwkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfUFJJVkFDWTsKKy8vCQkJdmFsdWUgPSBJRUVFODAyMTFfQVVUSF84MDIxWDsKKy8vCQkJYnJlYWs7CisvLwkJY2FzZSBJRUVFODAyMTFfQVVUSF9PUEVOOgkvKiBvcGVuICovCisvLwkJCXZhcC0+aXZfZmxhZ3MgJj0gfihJRUVFODAyMTFfRl9XUEF8SUVFRTgwMjExX0ZfUFJJVkFDWSk7CisvLwkJCWJyZWFrOworLy8JCWNhc2UgSUVFRTgwMjExX0FVVEhfU0hBUkVEOgkvKiBzaGFyZWQta2V5ICovCisvLwkJY2FzZSBJRUVFODAyMTFfQVVUSF9BVVRPOgkvKiBhdXRvICovCisvLwkJY2FzZSBJRUVFODAyMTFfQVVUSF84MDIxWDoJLyogODAyLjF4ICovCisvLwkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX1dQQTsKKy8vCQkJLyogYm90aCByZXF1aXJlIGEga2V5IHNvIG1hcmsgdGhlIFBSSVZBQ1kgY2FwYWJpbGl0eSAqLworLy8JCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX1BSSVZBQ1k7CisvLwkJCWJyZWFrOworLy8JCX0KKy8vCQkvKiBOQjogYXV0aGVudGljYXRvciBhdHRhY2gvZGV0YWNoIGhhcHBlbnMgb24gc3RhdGUgY2hhbmdlICovCisvLwkJdmFwLT5pdl9ic3MtPm5pX2F1dGhtb2RlID0gdmFsdWU7CisvLwkJLyogWFhYIG1peGVkL21vZGUvdXNhZ2U/ICovCisvLwkJdmFwLT5pdl9hdXRoID0gYXV0aDsKKy8vCQlyZXR2ID0gRU5FVFJFU0VUOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUFJPVE1PREU6CisvLwkJaWYgKHZhbHVlID4gSUVFRTgwMjExX1BST1RfUlRTQ1RTKQorLy8JCQlyZXR1cm4gLUVJTlZBTDsKKy8vCQlpYy0+aWNfcHJvdG1vZGUgPSB2YWx1ZTsKKy8vCQkvKiBOQjogaWYgbm90IG9wZXJhdGluZyBpbiAxMWcgdGhpcyBjYW4gd2FpdCAqLworLy8JCWlmIChpYy0+aWNfYnNzY2hhbiAhPSBJRUVFODAyMTFfQ0hBTl9BTllDICYmCisvLwkJICAgIElFRUU4MDIxMV9JU19DSEFOX0FOWUcoaWMtPmljX2Jzc2NoYW4pKQorLy8JCQlyZXR2ID0gRU5FVFJFU0VUOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fTUNBU1RDSVBIRVI6CisvLwkJaWYgKCh2YXAtPml2X2NhcHMgJiBjaXBoZXIyY2FwKHZhbHVlKSkgPT0gMCAmJgorLy8JCSAgICAhaWVlZTgwMjExX2NyeXB0b19hdmFpbGFibGUodmFsdWUpKQorLy8JCQlyZXR1cm4gLUVJTlZBTDsKKy8vCQlyc24tPnJzbl9tY2FzdGNpcGhlciA9IHZhbHVlOworLy8JCWlmICh2YXAtPml2X2ZsYWdzICYgSUVFRTgwMjExX0ZfV1BBKQorLy8JCQlyZXR2ID0gRU5FVFJFU0VUOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fTUNBU1RLRVlMRU46CisvLwkJaWYgKCEoMCA8IHZhbHVlICYmIHZhbHVlIDwgSUVFRTgwMjExX0tFWUJVRl9TSVpFKSkKKy8vCQkJcmV0dXJuIC1FSU5WQUw7CisvLwkJLyogWFhYIG5vIHdheSB0byB2ZXJpZnkgZHJpdmVyIGNhcGFiaWxpdHkgKi8KKy8vCQlyc24tPnJzbl9tY2FzdGtleWxlbiA9IHZhbHVlOworLy8JCWlmICh2YXAtPml2X2ZsYWdzICYgSUVFRTgwMjExX0ZfV1BBKQorLy8JCQlyZXR2ID0gRU5FVFJFU0VUOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fVUNBU1RDSVBIRVJTOgorLy8JCS8qCisvLwkJICogQ29udmVydCBjaXBoZXIgc2V0IHRvIGVxdWl2YWxlbnQgY2FwYWJpbGl0aWVzLgorLy8JCSAqIE5COiB0aGlzIGxvZ2ljIGludGVudGlvbmFsbHkgaWdub3JlcyB1bmtub3duIGFuZAorLy8JCSAqIHVuc3VwcG9ydGVkIGNpcGhlcnMgc28gZm9sa3MgY2FuIHNwZWNpZnkgMHhmZiBvcgorLy8JCSAqIHNpbWlsYXIgYW5kIGdldCBhbGwgYXZhaWxhYmxlIGNpcGhlcnMuCisvLwkJICovCisvLwkJY2FwcyA9IDA7CisvLwkJZm9yIChqID0gMTsgaiA8IDMyOyBqKyspCS8qIE5COiBza2lwIFdFUCAqLworLy8JCQlpZiAoKHZhbHVlICYgKDE8PGopKSAmJgorLy8JCQkgICAgKCh2YXAtPml2X2NhcHMgJiBjaXBoZXIyY2FwKGopKSB8fAorLy8JCQkgICAgIGllZWU4MDIxMV9jcnlwdG9fYXZhaWxhYmxlKGopKSkKKy8vCQkJCWNhcHMgfD0gMTw8ajsKKy8vCQlpZiAoY2FwcyA9PSAwKQkJCS8qIG5vdGhpbmcgYXZhaWxhYmxlICovCisvLwkJCXJldHVybiAtRUlOVkFMOworLy8JCS8qIFhYWCB2ZXJpZnkgY2lwaGVycyBvayBmb3IgdW5pY2FzdCB1c2U/ICovCisvLwkJLyogWFhYIGRpc2FsbG93IGlmIHJ1bm5pbmcgYXMgaXQnbGwgaGF2ZSBubyBlZmZlY3QgKi8KKy8vCQlyc24tPnJzbl91Y2FzdGNpcGhlcnNldCA9IGNhcHM7CisvLwkJaWYgKHZhcC0+aXZfZmxhZ3MgJiBJRUVFODAyMTFfRl9XUEEpCisvLwkJCXJldHYgPSBFTkVUUkVTRVQ7CisvLwkJYnJlYWs7CisvLwljYXNlIElFRUU4MDIxMV9QQVJBTV9VQ0FTVENJUEhFUjoKKy8vCQlpZiAoKHJzbi0+cnNuX3VjYXN0Y2lwaGVyc2V0ICYgY2lwaGVyMmNhcCh2YWx1ZSkpID09IDApCisvLwkJCXJldHVybiAtRUlOVkFMOworLy8JCXJzbi0+cnNuX3VjYXN0Y2lwaGVyID0gdmFsdWU7CisvLwkJYnJlYWs7CisvLwljYXNlIElFRUU4MDIxMV9QQVJBTV9VQ0FTVEtFWUxFTjoKKy8vCQlpZiAoISgwIDwgdmFsdWUgJiYgdmFsdWUgPCBJRUVFODAyMTFfS0VZQlVGX1NJWkUpKQorLy8JCQlyZXR1cm4gLUVJTlZBTDsKKy8vCQkvKiBYWFggbm8gd2F5IHRvIHZlcmlmeSBkcml2ZXIgY2FwYWJpbGl0eSAqLworLy8JCXJzbi0+cnNuX3VjYXN0a2V5bGVuID0gdmFsdWU7CisvLwkJYnJlYWs7CisvLwljYXNlIElFRUU4MDIxMV9QQVJBTV9LRVlNR1RBTEdTOgorLy8JCS8qIFhYWCBjaGVjayAqLworLy8JCXJzbi0+cnNuX2tleW1nbXRzZXQgPSB2YWx1ZTsKKy8vCQlpZiAodmFwLT5pdl9mbGFncyAmIElFRUU4MDIxMV9GX1dQQSkKKy8vCQkJcmV0diA9IEVORVRSRVNFVDsKKy8vCQlicmVhazsKKy8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JTTkNBUFM6CisvLwkJLyogWFhYIGNoZWNrICovCisvLwkJcnNuLT5yc25fY2FwcyA9IHZhbHVlOworLy8JCWlmICh2YXAtPml2X2ZsYWdzICYgSUVFRTgwMjExX0ZfV1BBKQorLy8JCQlyZXR2ID0gRU5FVFJFU0VUOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fV1BBOgorLy8JCWlmICh2YWx1ZSA+IDMpCisvLwkJCXJldHVybiAtRUlOVkFMOworLy8JCS8qIFhYWCB2ZXJpZnkgY2lwaGVycyBhdmFpbGFibGUgKi8KKy8vCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9XUEE7CisvLwkJc3dpdGNoICh2YWx1ZSkgeworLy8JCWNhc2UgMToKKy8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9XUEExOworLy8JCQlicmVhazsKKy8vCQljYXNlIDI6CisvLwkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfV1BBMjsKKy8vCQkJYnJlYWs7CisvLwkJY2FzZSAzOgorLy8JCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX1dQQTEgfCBJRUVFODAyMTFfRl9XUEEyOworLy8JCQlicmVhazsKKy8vCQl9CisvLwkJcmV0diA9IEVORVRSRVNFVDsJCS8qIFhYWD8gKi8KKy8vCQlicmVhazsKKy8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JPQU1JTkc6CisvLwkJaWYgKCEoSUVFRTgwMjExX1JPQU1JTkdfREVWSUNFIDw9IHZhbHVlICYmCisvLwkJICAgIHZhbHVlIDw9IElFRUU4MDIxMV9ST0FNSU5HX01BTlVBTCkpCisvLwkJCXJldHVybiAtRUlOVkFMOworLy8JCWljLT5pY19yb2FtaW5nID0gdmFsdWU7CisvLwkJYnJlYWs7CisvLwljYXNlIElFRUU4MDIxMV9QQVJBTV9QUklWQUNZOgorLy8JCWlmICh2YWx1ZSkgeworLy8JCQkvKiBYWFggY2hlY2sgZm9yIGtleSBzdGF0ZT8gKi8KKy8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9QUklWQUNZOworLy8JCX0gZWxzZQorLy8JCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9QUklWQUNZOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fRFJPUFVORU5DUllQVEVEOgorLy8JCWlmICh2YWx1ZSkKKy8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9EUk9QVU5FTkM7CisvLwkJZWxzZQorLy8JCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9EUk9QVU5FTkM7CisvLwkJYnJlYWs7CisvLwljYXNlIElFRUU4MDIxMV9QQVJBTV9DT1VOVEVSTUVBU1VSRVM6CisvLwkJaWYgKHZhbHVlKSB7CisvLwkJCWlmICgodmFwLT5pdl9mbGFncyAmIElFRUU4MDIxMV9GX1dQQSkgPT0gMCkKKy8vCQkJCXJldHVybiAtRUlOVkFMOworLy8JCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX0NPVU5URVJNOworLy8JCX0gZWxzZQorLy8JCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9DT1VOVEVSTTsKKy8vCQlicmVhazsKKy8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0RSSVZFUl9DQVBTOgorLy8JCXZhcC0+aXZfY2FwcyA9IHZhbHVlOwkJLyogTkI6IGZvciB0ZXN0aW5nICovCisvLwkJYnJlYWs7CisvLwljYXNlIElFRUU4MDIxMV9QQVJBTV9NQUNDTUQ6CisvLwkJYWNsID0gdmFwLT5pdl9hY2w7CisvLwkJc3dpdGNoICh2YWx1ZSkgeworLy8JCWNhc2UgSUVFRTgwMjExX01BQ0NNRF9QT0xJQ1lfT1BFTjoKKy8vCQljYXNlIElFRUU4MDIxMV9NQUNDTURfUE9MSUNZX0FMTE9XOgorLy8JCWNhc2UgSUVFRTgwMjExX01BQ0NNRF9QT0xJQ1lfREVOWToKKy8vCQkJaWYgKGFjbCA9PSBOVUxMKSB7CisvLwkJCQlhY2wgPSBpZWVlODAyMTFfYWNsYXRvcl9nZXQoIm1hYyIpOworLy8JCQkJaWYgKGFjbCA9PSBOVUxMIHx8ICFhY2wtPmlhY19hdHRhY2godmFwKSkKKy8vCQkJCQlyZXR1cm4gLUVJTlZBTDsKKy8vCQkJCXZhcC0+aXZfYWNsID0gYWNsOworLy8JCQl9CisvLwkJCWFjbC0+aWFjX3NldHBvbGljeSh2YXAsIHZhbHVlKTsKKy8vCQkJYnJlYWs7CisvLwkJY2FzZSBJRUVFODAyMTFfTUFDQ01EX0ZMVVNIOgorLy8JCQlpZiAoYWNsICE9IE5VTEwpCisvLwkJCQlhY2wtPmlhY19mbHVzaCh2YXApOworLy8JCQkvKiBOQjogc2lsZW50bHkgaWdub3JlIHdoZW4gbm90IGluIHVzZSAqLworLy8JCQlicmVhazsKKy8vCQljYXNlIElFRUU4MDIxMV9NQUNDTURfREVUQUNIOgorLy8JCQlpZiAoYWNsICE9IE5VTEwpIHsKKy8vCQkJCXZhcC0+aXZfYWNsID0gTlVMTDsKKy8vCQkJCWFjbC0+aWFjX2RldGFjaCh2YXApOworLy8JCQl9CisvLwkJCWJyZWFrOworLy8JCX0KKy8vCQlicmVhazsKKy8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1dNTToKKy8vCQlpZiAoaWMtPmljX2NhcHMgJiBJRUVFODAyMTFfQ19XTUUpeworLy8JCQlpZiAodmFsdWUpIHsKKy8vCQkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfV01FOworLy8JCQkJdmFwLT5pdl9pYy0+aWNfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfV01FOyAvKiBYWFggbmVlZGVkIGJ5IGljX3Jlc2V0ICovCisvLwkJCX0KKy8vCQkJZWxzZSB7CisvLwkJCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9XTUU7CisvLwkJCQl2YXAtPml2X2ljLT5pY19mbGFncyAmPSB+SUVFRTgwMjExX0ZfV01FOyAvKiBYWFggbmVlZGVkIGJ5IGljX3Jlc2V0ICovCisvLwkJCX0KKy8vCQkJcmV0diA9IEVORVRSRVNFVDsJLyogUmVuZWdvdGlhdGUgZm9yIGNhcGFiaWxpdGllcyAqLworLy8JCX0KKy8vCQlicmVhazsKKy8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0hJREVTU0lEOgorLy8JCWlmICh2YWx1ZSkKKy8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9ISURFU1NJRDsKKy8vCQllbHNlCisvLwkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX0hJREVTU0lEOworLy8JCXJldHYgPSBFTkVUUkVTRVQ7CisvLwkJYnJlYWs7CisvLwljYXNlIElFRUU4MDIxMV9QQVJBTV9BUEJSSURHRToKKy8vCQlpZiAodmFsdWUgPT0gMCkKKy8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9OT0JSSURHRTsKKy8vCQllbHNlCisvLwkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX05PQlJJREdFOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fSU5BQ1Q6CisvLwkJdmFwLT5pdl9pbmFjdF9ydW4gPSB2YWx1ZSAvIElFRUU4MDIxMV9JTkFDVF9XQUlUOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fSU5BQ1RfQVVUSDoKKy8vCQl2YXAtPml2X2luYWN0X2F1dGggPSB2YWx1ZSAvIElFRUU4MDIxMV9JTkFDVF9XQUlUOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fSU5BQ1RfSU5JVDoKKy8vCQl2YXAtPml2X2luYWN0X2luaXQgPSB2YWx1ZSAvIElFRUU4MDIxMV9JTkFDVF9XQUlUOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQUJPTFQ6CisvLwkJY2FwcyA9IDA7CisvLwkJLyoKKy8vCQkgKiBNYXAgYWJvbHQgc2V0dGluZ3MgdG8gY2FwYWJpbGl0eSBiaXRzOworLy8JCSAqIHRoaXMgYWxzbyBzdHJpcHMgdW5rbm93bi91bndhbnRlZCBiaXRzLgorLy8JCSAqLworLy8JCWlmICh2YWx1ZSAmIElFRUU4MDIxMV9BQk9MVF9UVVJCT19QUklNRSkKKy8vCQkJY2FwcyB8PSBJRUVFODAyMTFfQVRIQ19UVVJCT1A7CisvLwkJaWYgKHZhbHVlICYgSUVFRTgwMjExX0FCT0xUX0NPTVBSRVNTSU9OKQorLy8JCQljYXBzIHw9IElFRUU4MDIxMV9BVEhDX0NPTVA7CisvLwkJaWYgKHZhbHVlICYgSUVFRTgwMjExX0FCT0xUX0ZBU1RfRlJBTUUpCisvLwkJCWNhcHMgfD0gSUVFRTgwMjExX0FUSENfRkY7CisvLwkJaWYgKHZhbHVlICYgSUVFRTgwMjExX0FCT0xUX1hSKQorLy8JCQljYXBzIHw9IElFRUU4MDIxMV9BVEhDX1hSOworLy8JCWlmICh2YWx1ZSAmIElFRUU4MDIxMV9BQk9MVF9BUikKKy8vCQkJY2FwcyB8PSBJRUVFODAyMTFfQVRIQ19BUjsKKy8vCQlpZiAodmFsdWUgJiBJRUVFODAyMTFfQUJPTFRfQlVSU1QpCisvLwkJCWNhcHMgfD0gSUVFRTgwMjExX0FUSENfQlVSU1Q7CisvLyAgICAgICAgaWYgKHZhbHVlICYgSUVFRTgwMjExX0FCT0xUX1dNRV9FTEUpCisvLyAgICAgICAgICAgIGNhcHMgfD0gSUVFRTgwMjExX0FUSENfV01FOworLy8JCS8qIHZlcmlmeSByZXF1ZXN0ZWQgY2FwYWJpbGl0aWVzIGFyZSBzdXBwb3J0ZWQgKi8KKy8vCQlpZiAoKGNhcHMgJiBpYy0+aWNfYXRoX2NhcCkgIT0gY2FwcykKKy8vCQkJcmV0dXJuIC1FSU5WQUw7CisvLwkJaWYgKHZhcC0+aXZfYXRoX2NhcCAhPSBjYXBzKSB7CisvLwkJCWlmICgodmFwLT5pdl9hdGhfY2FwIF4gY2FwcykgJiBJRUVFODAyMTFfQVRIQ19UVVJCT1ApIHsKKy8vCQkJCWlmIChpZWVlODAyMTFfc2V0X3R1cmJvKGRldiwgIGNhcHMgJiBJRUVFODAyMTFfQVRIQ19UVVJCT1ApKQorLy8JCQkJCXJldHVybiAtRUlOVkFMOworLy8JCQkJaWVlZTgwMjExX3NjYW5fZmx1c2goaWMpOworLy8JCQl9CisvLwkJCXZhcC0+aXZfYXRoX2NhcCA9IGNhcHM7CisvLwkJCWljLT5pY19hdGhjYXBzZXR1cCh2YXAtPml2X2ljLCB2YXAtPml2X2F0aF9jYXApOworLy8JCQlyZXR2ID0gRU5FVFJFU0VUOworLy8JCX0KKy8vCQlicmVhazsKKy8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0RUSU1fUEVSSU9EOgorLy8JCWlmICh2YXAtPml2X29wbW9kZSAhPSBJRUVFODAyMTFfTV9IT1NUQVAgJiYKKy8vCQkgICAgdmFwLT5pdl9vcG1vZGUgIT0gSUVFRTgwMjExX01fSUJTUykKKy8vCQkJcmV0dXJuIC1FSU5WQUw7CisvLwkJaWYgKElFRUU4MDIxMV9EVElNX01JTiA8PSB2YWx1ZSAmJgorLy8JCSAgICB2YWx1ZSA8PSBJRUVFODAyMTFfRFRJTV9NQVgpIHsKKy8vCQkJdmFwLT5pdl9kdGltX3BlcmlvZCA9IHZhbHVlOworLy8JCQlyZXR2ID0gRU5FVFJFU0VUOwkJLyogcmVxdWlyZXMgcmVzdGFydCAqLworLy8JCX0gZWxzZQorLy8JCQlyZXR2ID0gRUlOVkFMOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQkVBQ09OX0lOVEVSVkFMOgorLy8JCWlmICh2YXAtPml2X29wbW9kZSAhPSBJRUVFODAyMTFfTV9IT1NUQVAgJiYKKy8vCQkgICAgdmFwLT5pdl9vcG1vZGUgIT0gSUVFRTgwMjExX01fSUJTUykKKy8vCQkJcmV0dXJuIC1FSU5WQUw7CisvLwkJaWYgKElFRUU4MDIxMV9CSU5UVkFMX01JTiA8PSB2YWx1ZSAmJgorLy8JCSAgICB2YWx1ZSA8PSBJRUVFODAyMTFfQklOVFZBTF9NQVgpIHsKKy8vCQkJaWMtPmljX2xpbnR2YWwgPSB2YWx1ZTsJCS8qIFhYWCBtdWx0aS1ic3MgKi8KKy8vCQkJcmV0diA9IEVORVRSRVNFVDsJCS8qIHJlcXVpcmVzIHJlc3RhcnQgKi8KKy8vCQl9IGVsc2UKKy8vCQkJcmV0diA9IEVJTlZBTDsKKy8vCQlicmVhazsKKy8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0RPVEg6CisvLwkJaWYgKHZhbHVlKSB7CisvLwkJCWljLT5pY19mbGFncyB8PSBJRUVFODAyMTFfRl9ET1RIOworLy8JCX0KKy8vCQllbHNlCisvLwkJCWljLT5pY19mbGFncyAmPSB+SUVFRTgwMjExX0ZfRE9USDsKKy8vCQlyZXR2ID0gRU5FVFJFU0VUOwkvKiBYWFg6IG5lZWQgc29tZXRoaW5nIHRoaXMgZHJhc3RpYz8gKi8KKy8vCQlicmVhazsKKy8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1BXUlRBUkdFVDoKKy8vCQlpYy0+aWNfY3VyY2hhbm1heHB3ciA9IHZhbHVlOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fR0VOUkVBU1NPQzoKKy8vCQlJRUVFODAyMTFfU0VORF9NR01UKHZhcC0+aXZfYnNzLCBJRUVFODAyMTFfRkMwX1NVQlRZUEVfUkVBU1NPQ19SRVEsIDApOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQ09NUFJFU1NJT046CisvLwkJcmV0diA9IGllZWU4MDIxMV9zZXRhdGhjYXAodmFwLCBJRUVFODAyMTFfQVRIQ19DT01QLCB2YWx1ZSk7CisvLwkJYnJlYWs7CisvLyAgICBjYXNlIElFRUU4MDIxMV9QQVJBTV9XTU1fQUdHUk1PREU6CisvLyAgICAgICAgcmV0diA9IGllZWU4MDIxMV9zZXRhdGhjYXAodmFwLCBJRUVFODAyMTFfQVRIQ19XTUUsIHZhbHVlKTsKKy8vICAgICAgICBicmVhazsKKy8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0ZGOgorLy8JCXJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfRkYsIHZhbHVlKTsKKy8vCQlicmVhazsKKy8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1RVUkJPOgorLy8JCXJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfVFVSQk9QLCB2YWx1ZSk7CisvLwkJaWYgKHJldHYgPT0gRU5FVFJFU0VUKSB7CisvLwkJCWlmKGllZWU4MDIxMV9zZXRfdHVyYm8oZGV2LHZhbHVlKSkKKy8vCQkJCQlyZXR1cm4gLUVJTlZBTDsKKy8vCQkJaWVlZTgwMjExX3NjYW5fZmx1c2goaWMpOworLy8JCX0KKy8vCQlicmVhazsKKy8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1hSOgorLy8JCXJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfWFIsIHZhbHVlKTsKKy8vCQlicmVhazsKKy8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0JVUlNUOgorLy8JCXJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfQlVSU1QsIHZhbHVlKTsKKy8vCQlicmVhazsKKy8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0FSOgorLy8JCXJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfQVIsIHZhbHVlKTsKKy8vCQlicmVhazsKKy8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1BVUkVHOgorLy8JCWlmICh2YWx1ZSkKKy8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9QVVJFRzsKKy8vCQllbHNlCisvLwkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX1BVUkVHOworLy8JCS8qIE5COiByZXNldCBvbmx5IGlmIHdlJ3JlIG9wZXJhdGluZyBvbiBhbiAxMWcgY2hhbm5lbCAqLworLy8JCWlmIChpYy0+aWNfYnNzY2hhbiAhPSBJRUVFODAyMTFfQ0hBTl9BTllDICYmCisvLwkJICAgIElFRUU4MDIxMV9JU19DSEFOX0FOWUcoaWMtPmljX2Jzc2NoYW4pKQorLy8JCQlyZXR2ID0gRU5FVFJFU0VUOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fV0RTOgorLy8JCWlmICh2YWx1ZSkKKy8vCQkJdmFwLT5pdl9mbGFnc19leHQgfD0gSUVFRTgwMjExX0ZFWFRfV0RTOworLy8JCWVsc2UKKy8vCQkJdmFwLT5pdl9mbGFnc19leHQgJj0gfklFRUU4MDIxMV9GRVhUX1dEUzsKKy8vCQlicmVhazsKKy8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0JHU0NBTjoKKy8vCQlpZiAodmFsdWUpIHsKKy8vCQkJaWYgKCh2YXAtPml2X2NhcHMgJiBJRUVFODAyMTFfQ19CR1NDQU4pID09IDApCisvLwkJCQlyZXR1cm4gLUVJTlZBTDsKKy8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9CR1NDQU47CisvLwkJfSBlbHNlIHsKKy8vCQkJLyogWFhYIHJhY2V5PyAqLworLy8JCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9CR1NDQU47CisvLwkJCWllZWU4MDIxMV9jYW5jZWxfc2Nhbih2YXApOwkvKiBhbnl0aGluZyBjdXJyZW50ICovCisvLwkJfQorLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQkdTQ0FOX0lETEU6CisvLwkJaWYgKHZhbHVlID49IElFRUU4MDIxMV9CR1NDQU5fSURMRV9NSU4pCisvLwkJCXZhcC0+aXZfYmdzY2FuaWRsZSA9IHZhbHVlKkhaLzEwMDA7CisvLwkJZWxzZQorLy8JCQlyZXR2ID0gRUlOVkFMOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQkdTQ0FOX0lOVEVSVkFMOgorLy8JCWlmICh2YWx1ZSA+PSBJRUVFODAyMTFfQkdTQ0FOX0lOVFZBTF9NSU4pCisvLwkJCXZhcC0+aXZfYmdzY2FuaW50dmwgPSB2YWx1ZSpIWjsKKy8vCQllbHNlCisvLwkJCXJldHYgPSBFSU5WQUw7CisvLwkJYnJlYWs7CisvLwljYXNlIElFRUU4MDIxMV9QQVJBTV9NQ0FTVF9SQVRFOgorLy8JCS8qIHVuaXRzIGFyZSBpbiBLSUxPYml0cyBwZXIgc2Vjb25kICovCisvLwkJaWYgKHZhbHVlID49IDI1NiAmJiB2YWx1ZSA8PSA1NDAwMCkKKy8vCQkJdmFwLT5pdl9tY2FzdF9yYXRlID0gdmFsdWU7CisvLwkJZWxzZQorLy8JCQlyZXR2ID0gRUlOVkFMOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQ09WRVJBR0VfQ0xBU1M6CisvLwkJaWYgKHZhbHVlID49IDAgJiYgdmFsdWUgPD0gSUVFRTgwMjExX0NPVkVSQUdFX0NMQVNTX01BWCkgeworLy8JCQlpYy0+aWNfY292ZXJhZ2VjbGFzcyA9IHZhbHVlOworLy8JCQlpZiAoSVNfVVBfQVVUTyh2YXApKQorLy8JCQkJaWVlZTgwMjExX25ld19zdGF0ZSh2YXAsIElFRUU4MDIxMV9TX1NDQU4sIDApOworLy8JCQlyZXR2ID0gMDsKKy8vCQl9CisvLwkJZWxzZQorLy8JCQlyZXR2ID0gRUlOVkFMOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQ09VTlRSWV9JRToKKy8vCQlpZiAodmFsdWUpCisvLwkJCWljLT5pY19mbGFnc19leHQgfD0gSUVFRTgwMjExX0ZFWFRfQ09VTlRSWUlFOworLy8JCWVsc2UKKy8vCQkJaWMtPmljX2ZsYWdzX2V4dCAmPSB+SUVFRTgwMjExX0ZFWFRfQ09VTlRSWUlFOworLy8JCXJldHYgPSBFTkVUUkVTRVQ7CisvLwkJYnJlYWs7CisvLwljYXNlIElFRUU4MDIxMV9QQVJBTV9SRUdDTEFTUzoKKy8vCQlpZiAodmFsdWUpCisvLwkJCWljLT5pY19mbGFnc19leHQgfD0gSUVFRTgwMjExX0ZFWFRfUkVHQ0xBU1M7CisvLwkJZWxzZQorLy8JCQlpYy0+aWNfZmxhZ3NfZXh0ICY9IH5JRUVFODAyMTFfRkVYVF9SRUdDTEFTUzsKKy8vCQlyZXR2ID0gRU5FVFJFU0VUOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fU0NBTlZBTElEOgorLy8JCXZhcC0+aXZfc2NhbnZhbGlkID0gdmFsdWUqSFo7CisvLwkJYnJlYWs7CisvLwljYXNlIElFRUU4MDIxMV9QQVJBTV9ST0FNX1JTU0lfMTFBOgorLy8JCXZhcC0+aXZfcm9hbS5yc3NpMTFhID0gdmFsdWU7CisvLwkJYnJlYWs7CisvLwljYXNlIElFRUU4MDIxMV9QQVJBTV9ST0FNX1JTU0lfMTFCOgorLy8JCXZhcC0+aXZfcm9hbS5yc3NpMTFiT25seSA9IHZhbHVlOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUk9BTV9SU1NJXzExRzoKKy8vCQl2YXAtPml2X3JvYW0ucnNzaTExYiA9IHZhbHVlOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUk9BTV9SQVRFXzExQToKKy8vCQl2YXAtPml2X3JvYW0ucmF0ZTExYSA9IHZhbHVlOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUk9BTV9SQVRFXzExQjoKKy8vCQl2YXAtPml2X3JvYW0ucmF0ZTExYk9ubHkgPSB2YWx1ZTsKKy8vCQlicmVhazsKKy8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JPQU1fUkFURV8xMUc6CisvLwkJdmFwLT5pdl9yb2FtLnJhdGUxMWIgPSB2YWx1ZTsKKy8vCQlicmVhazsKKy8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1VBUFNESU5GTzoKKy8vCQlpZiAodmFwLT5pdl9vcG1vZGUgPT0gSUVFRTgwMjExX01fSE9TVEFQKSB7CisvLwkJCWlmIChpYy0+aWNfY2FwcyAmIElFRUU4MDIxMV9DX1VBUFNEKSB7CisvLwkJCQlpZiAodmFsdWUpCisvLwkJCQkJSUVFRTgwMjExX1ZBUF9VQVBTRF9FTkFCTEUodmFwKTsKKy8vCQkJCWVsc2UKKy8vCQkJCQlJRUVFODAyMTFfVkFQX1VBUFNEX0RJU0FCTEUodmFwKTsKKy8vCQkJCXJldHYgPSBFTkVUUkVTRVQ7CisvLwkJCX0KKy8vCQl9CisvLwkJZWxzZSBpZiAodmFwLT5pdl9vcG1vZGUgPT0gSUVFRTgwMjExX01fU1RBKSB7CisvLwkJCXZhcC0+aXZfdWFwc2RpbmZvID0gdmFsdWU7CisvLwkJCUlFRUU4MDIxMV9WQVBfVUFQU0RfRU5BQkxFKHZhcCk7CisvLwkJCXJldHYgPSBFTkVUUkVTRVQ7CisvLwkJfQorLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fU0xFRVA6CisvLwkJLyogWFhYOiBGb3JjZWQgc2xlZXAgZm9yIHRlc3RpbmcuIERvZXMgbm90IGFjdHVhbGx5IHBsYWNlIHRoZQorLy8JCSAqICAgICAgSFcgaW4gc2xlZXAgbW9kZSB5ZXQuIHRoaXMgb25seSBtYWtlcyBzZW5zZSBmb3IgU1RBcy4KKy8vCQkgKi8KKy8vCQlpZiAodmFsdWUpIHsKKy8vCQkJLyogZ290byBzbGVlcCAqLworLy8JCQlJRUVFODAyMTFfVkFQX0dPVE9TTEVFUCh2YXApOworLy8JCX0KKy8vCQllbHNlIHsKKy8vCQkJLyogd2FrZXVwICovCisvLwkJCUlFRUU4MDIxMV9WQVBfV0FLRVVQKHZhcCk7CisvLwkJfQorLy8JCWllZWU4MDIxMV9zZW5kX251bGxkYXRhKGllZWU4MDIxMV9yZWZfbm9kZSh2YXAtPml2X2JzcykpOworLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUU9TTlVMTDoKKy8vCQkvKiBGb3JjZSBhIFFvUyBOdWxsIGZvciB0ZXN0aW5nLiAqLworLy8JCWllZWU4MDIxMV9zZW5kX3Fvc251bGxkYXRhKHZhcC0+aXZfYnNzLCB2YWx1ZSk7CisvLwkJYnJlYWs7CisvLwljYXNlIElFRUU4MDIxMV9QQVJBTV9QU1BPTEw6CisvLwkJLyogRm9yY2UgYSBQUy1QT0xMIGZvciB0ZXN0aW5nLiAqLworLy8JCWllZWU4MDIxMV9zZW5kX3BzcG9sbCh2YXAtPml2X2Jzcyk7CisvLwkJYnJlYWs7CisvLwljYXNlIElFRUU4MDIxMV9QQVJBTV9FT1NQRFJPUDoKKy8vCQlpZiAodmFwLT5pdl9vcG1vZGUgPT0gSUVFRTgwMjExX01fSE9TVEFQKSB7CisvLwkJCWlmICh2YWx1ZSkgSUVFRTgwMjExX1ZBUF9FT1NQRFJPUF9FTkFCTEUodmFwKTsKKy8vCQkJZWxzZSBJRUVFODAyMTFfVkFQX0VPU1BEUk9QX0RJU0FCTEUodmFwKTsKKy8vCQl9CisvLwkJYnJlYWs7CisvLwljYXNlIElFRUU4MDIxMV9QQVJBTV9NQVJLREZTOgorLy8JCWlmICh2YWx1ZSkKKy8vCQkJaWMtPmljX2ZsYWdzX2V4dCB8PSBJRUVFODAyMTFfRkVYVF9NQVJLREZTOworLy8JCWVsc2UKKy8vCQkJaWMtPmljX2ZsYWdzX2V4dCAmPSB+SUVFRTgwMjExX0ZFWFRfTUFSS0RGUzsKKy8vCQlicmVhazsKKy8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0NIQU5CVzoKKy8vCQlzd2l0Y2ggKHZhbHVlKSB7CisvLwkJCWNhc2UgMDoKKy8vCQkJCWljLT5pY19jaGFuYndmbGFnID0gMDsKKy8vCQkJCWJyZWFrOworLy8JCQljYXNlIDE6CisvLwkJCQlpYy0+aWNfY2hhbmJ3ZmxhZyA9IElFRUU4MDIxMV9DSEFOX0hBTEY7CisvLwkJCQlicmVhazsKKy8vCQkJY2FzZSAyOgorLy8JCQkJaWMtPmljX2NoYW5id2ZsYWcgPSBJRUVFODAyMTFfQ0hBTl9RVUFSVEVSOworLy8JCQkJYnJlYWs7CisvLwkJCWRlZmF1bHQ6CisvLwkJCQlyZXR2ID0gRUlOVkFMOworLy8JCQkJYnJlYWs7CisvLwkJfQorLy8JCWJyZWFrOworLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fU0hPUlRQUkVBTUJMRToKKy8vCQlpZiAodmFsdWUpIHsKKy8vCQkJaWMtPmljX2NhcHMgfD0gSUVFRTgwMjExX0NfU0hQUkVBTUJMRTsKKy8vCQl9IGVsc2UgeworLy8JCQlpYy0+aWNfY2FwcyAmPSB+SUVFRTgwMjExX0NfU0hQUkVBTUJMRTsKKy8vCQl9CisvLwkJcmV0diA9IEVORVRSRVNFVDsKKy8vCQlicmVhazsKKy8vCWRlZmF1bHQ6CisvLwkJcmV0diA9IEVPUE5PVFNVUFA7CisvLwkJYnJlYWs7CisvLwl9CisvLwkvKiBYWFggc2hvdWxkIGFueSBvZiB0aGVzZSBjYXVzZSBhIHJlc2Nhbj8gKi8KKy8vCWlmIChyZXR2ID09IEVORVRSRVNFVCkKKy8vCQlyZXR2ID0gSVNfVVBfQVVUTyh2YXApID8gaWVlZTgwMjExX29wZW4odmFwLT5pdl9kZXYpIDogMDsKKy8vCXJldHVybiAtcmV0djsKKy8vfQorCitpbnQgdXNiZHJ2d2V4dF9zZXRtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCSAgIAkgdm9pZCAqdywgY2hhciAqZXh0cmEpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCB1c2JkcnZ3ZXh0X2dldG1vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCXZvaWQgKncsIGNoYXIgKmV4dHJhKQoreworCS8vc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5wcml2OworCXN0cnVjdCBpd19wb2ludCAqd3JpID0gKHN0cnVjdCBpd19wb2ludCAqKWV4dHJhOworCWNoYXIgbW9kZVs4XTsKKworICAgIHN0cmNweShtb2RlLCIxMWciKTsKKwlyZXR1cm4gKGNvcHlfdG9fdXNlcih3cmktPnBvaW50ZXIsIG1vZGUsIDYpID8gLUVGQVVMVCA6IDApOworfQorCitpbnQgemZMbnhQcml2YXRlSW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHpkYXBfaW9jdGwqIHpkcmVxKQoreworCS8vdm9pZCogcmVncCA9IG1hY3AtPnJlZ3A7CisJdTE2X3QgY21kOworCS8vdTMyX3QgdGVtcDsKKwl1MzJfdCogcDsKKwl1MzJfdCBpOworCisJY21kID0gemRyZXEtPmNtZDsKKwlzd2l0Y2goY21kKQorCXsKKwljYXNlIFpNX0lPQ1RMX1JFR19SRUFEOgorCQl6ZmlEYmdSZWFkUmVnKGRldiwgemRyZXEtPmFkZHIpOworCQlicmVhazsKKworCWNhc2UgWk1fSU9DVExfUkVHX1dSSVRFOgorCQl6ZmlEYmdXcml0ZVJlZyhkZXYsIHpkcmVxLT5hZGRyLCB6ZHJlcS0+dmFsdWUpOworCQlicmVhazsKKworCWNhc2UgWk1fSU9DVExfTUVNX1JFQUQ6CisJCXAgPSAodTMyX3QgKikgYnVzX3RvX3ZpcnQoemRyZXEtPmFkZHIpOworCQlwcmludGsoS0VSTl9ERUJVRyAidXNiZHJ2OiByZWFkIG1lbW9yeSBhZGRyOiAweCUwOHggdmFsdWU6IDB4JTA4eFxuIiwgemRyZXEtPmFkZHIsICpwKTsKKwkJYnJlYWs7CisKKwljYXNlIFpNX0lPQ1RMX01FTV9XUklURToKKwkJcCA9ICh1MzJfdCAqKSBidXNfdG9fdmlydCh6ZHJlcS0+YWRkcik7CisJCSpwID0gemRyZXEtPnZhbHVlOworCQlwcmludGsoS0VSTl9ERUJVRyAidXNiZHJ2OiB3cml0ZSB2YWx1ZTogMHglMDh4IHRvIG1lbW9yeSBhZGRyOiAweCUwOHhcbiIsIHpkcmVxLT52YWx1ZSwgemRyZXEtPmFkZHIpOworCQlicmVhazsKKworCWNhc2UgWk1fSU9DVExfVEFMTFkgOgorCQl6ZmlXbGFuU2hvd1RhbGx5KGRldik7CisJCWlmICh6ZHJlcS0+YWRkcikKKwkJCXpmaVdsYW5SZXNldFRhbGx5KGRldik7CisJCWJyZWFrOworCisJY2FzZSBaTV9JT0NUTF9URVNUIDoKKyAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICJaTV9JT0NUTF9URVNUOmxlbj0lZFxuIiwgemRyZXEtPmFkZHIpOworICAgICAgICAgICAgLy96ZmlXbGFuUmVhZFJlZyhkZXYsIDB4MTBmNDAwKTsKKyAgICAgICAgICAgIC8vemZpV2xhblJlYWRSZWcoZGV2LCAweDEwZjQwNCk7CisgICAgICAgICAgICBwcmludGsoIklPQ1RMIFRFU1RcbiIpOworICAgICAgICAgICAgI2lmIDEKKyAgICAgICAgICAgIC8vcHJpbnQgcGFja2V0CisgICAgICAgICAgICBmb3IgKGk9MDsgaTx6ZHJlcS0+YWRkcjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgoaSYweDcpID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwcmludGsoIlxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByaW50aygiJTAyWCAiLCAodW5zaWduZWQgY2hhcil6ZHJlcS0+ZGF0YVtpXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmludGsoIlxuIik7CisgICAgICAgICAgICAjZW5kaWYKKworCisgICAgICAgICAgICAjaWYgMCAvL0ZvciBUZXN0Pz8gMSB0byAwIGJ5IENXWWFuZygtKQorICAgICAgICAgICAgeworICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYqIHM7CisKKyAgICAgICAgICAgIC8qIEFsbG9jYXRlIGEgc2tiICovCisgICAgICAgICAgICBzID0gYWxsb2Nfc2tiKDIwMDAsIEdGUF9BVE9NSUMpOworCisgICAgICAgICAgICAvKiBDb3B5IGRhdGEgdG8gc2tiICovCisgICAgICAgICAgICBmb3IgKGk9MDsgaTx6ZHJlcS0+YWRkcjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHMtPmRhdGFbaV0gPSB6ZHJlcS0+ZGF0YVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHMtPmxlbiA9IHpkcmVxLT5hZGRyOworCisgICAgICAgICAgICAvKiBDYWxsIHpmSWRsUmVjdigpICovCisgICAgICAgICAgICB6ZmlSZWN2ODAyMTEoZGV2LCBzLCBOVUxMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICNlbmRpZgorCisgICAgICAgICAgICBicmVhazsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFpEQ09ORklHICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgICAgY2FzZSBaTV9JT0NUTF9GUkFHIDoKKyAgICAgICAgICAgIHpmaVdsYW5TZXRGcmFnVGhyZXNob2xkKGRldiwgemRyZXEtPmFkZHIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBaTV9JT0NUTF9SVFMgOgorICAgICAgICAgICAgemZpV2xhblNldFJ0c1RocmVzaG9sZChkZXYsIHpkcmVxLT5hZGRyKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWk1fSU9DVExfU0NBTiA6CisgICAgICAgICAgICB6ZmlXbGFuU2NhbihkZXYpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBaTV9JT0NUTF9LRVkgOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHU4X3Qga2V5WzI5XTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgenNLZXlJbmZvIGtleUluZm87CisgICAgICAgICAgICAgICAgdTMyX3QgaTsKKworICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPDI5OyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBrZXlbaV0gPSAwOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPHpkcmVxLT5hZGRyOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBrZXlbaV0gPSB6ZHJlcS0+ZGF0YVtpXTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwcmludGsoImtleSBsZW49JWQsIGtleT0lMDJ4JTAyeCUwMnglMDJ4JTAyeC4uLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHpkcmVxLT5hZGRyLCBrZXlbMF0sIGtleVsxXSwga2V5WzJdLCBrZXlbM10sIGtleVs0XSk7CisKKyAgICAgICAgICAgICAgICBrZXlJbmZvLmtleUxlbmd0aCA9IHpkcmVxLT5hZGRyOworICAgICAgICAgICAgICAgIGtleUluZm8ua2V5SW5kZXggPSAwOworICAgICAgICAgICAgICAgIGtleUluZm8uZmxhZyA9IDA7CisgICAgICAgICAgICAgICAga2V5SW5mby5rZXkgPSBrZXk7CisgICAgICAgICAgICAgICAgemZpV2xhblNldEtleShkZXYsIGtleUluZm8pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBaTV9JT0NUTF9SQVRFIDoKKyAgICAgICAgICAgIHpmaVdsYW5TZXRUeFJhdGUoZGV2LCB6ZHJlcS0+YWRkcik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFpNX0lPQ1RMX0VOQ1JZUFRJT05fTU9ERSA6CisgICAgICAgICAgICB6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgemRyZXEtPmFkZHIpOworCisgICAgICAgICAgICB6ZmlXbGFuRGlzYWJsZShkZXYsIDApOworICAgICAgICAgICAgemZpV2xhbkVuYWJsZShkZXYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vQ1dZYW5nKCspCisgICAgICAgIGNhc2UgWk1fSU9DVExfU0lHTkFMX1NUUkVOR1RIIDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1OF90IGJ1ZmZlclsyXTsKKyAgICAgICAgICAgICAgICB6ZmlXbGFuUXVlcnlTaWduYWxJbmZvKGRldiwgJmJ1ZmZlclswXSk7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJDdXJyZW50IFNpZ25hbCBTdHJlbmd0aCA6ICUwMmRcbiIsIGJ1ZmZlclswXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy9DV1lhbmcoKykKKyAgICAgICAgY2FzZSBaTV9JT0NUTF9TSUdOQUxfUVVBTElUWSA6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdThfdCBidWZmZXJbMl07CisgICAgICAgICAgICAgICAgemZpV2xhblF1ZXJ5U2lnbmFsSW5mbyhkZXYsICZidWZmZXJbMF0pOworICAgICAgICAgICAgICAgIHByaW50aygiQ3VycmVudCBTaWduYWwgUXVhbGl0eSA6ICUwMmRcbiIsIGJ1ZmZlclsxXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworCWNhc2UgWk1fSU9DVExfU0VUX1BJQlNTX01PREU6CisJCWlmICh6ZHJlcS0+YWRkciA9PSAxKQorCQkJemZpV2xhblNldFdsYW5Nb2RlKGRldiwgWk1fTU9ERV9QU0VVRE8pOworCQllbHNlCisJCQl6ZmlXbGFuU2V0V2xhbk1vZGUoZGV2LCBaTV9NT0RFX0lORlJBU1RSVUNUVVJFKTsKKworCQl6ZmlXbGFuRGlzYWJsZShkZXYsIDApOworCQl6ZmlXbGFuRW5hYmxlKGRldik7CisKKwkJYnJlYWs7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFpEQ09ORklHICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWRlZmF1bHQgOgorCQlwcmludGsoS0VSTl9FUlIgInVzYmRydjogZXJyb3IgY29tbWFuZCA9ICV4XG4iLCBjbWQpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHVzYmRydl93cGFfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGF0aHJfd2xhbl9wYXJhbSAqemRwYXJtKQoreworICAgIGludCByZXQgPSAwOworICAgIHU4X3QgYmNfYWRkcls2XSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OworICAgIHU4X3QgbWFjX2FkZHJbODBdOworICAgIHN0cnVjdCB6c0tleUluZm8ga2V5SW5mbzsKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPnByaXY7CisgICAgdTE2X3QgdmFwSWQgPSAwOworCisgICAgLy96bXdfZ2V0X3dsYW5fZGV2KGRldik7CisKKyAgICBzd2l0Y2goemRwYXJtLT5jbWQpCisgICAgeworICAgICAgICBjYXNlIFpEX0NNRF9TRVRfRU5DUllQVF9LRVk6CisKKyAgICAgICAgICAgIC8qIFNldCB1cCBrZXkgaW5mb3JtYXRpb24gKi8KKyAgICAgICAgICAgIGtleUluZm8ua2V5TGVuZ3RoID0gemRwYXJtLT51LmNyeXB0LmtleV9sZW47CisgICAgICAgICAgICBrZXlJbmZvLmtleUluZGV4ID0gemRwYXJtLT51LmNyeXB0LmlkeDsKKyAgICAgICAgICAgIGlmICh6ZmlXbGFuUXVlcnlXbGFuTW9kZShkZXYpID09IFpNX01PREVfQVApIC8vIEFQIE1vZGUKKyAgICAgICAgICAgICAgICBrZXlJbmZvLmZsYWcgPSBaTV9LRVlfRkxBR19BVVRIRU5USUNBVE9SOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGtleUluZm8uZmxhZyA9IDA7CisgICAgICAgICAgICBrZXlJbmZvLmtleSA9IHpkcGFybS0+dS5jcnlwdC5rZXk7CisgICAgICAgICAgICBrZXlJbmZvLmluaXRJdiA9IHpkcGFybS0+dS5jcnlwdC5zZXE7CisgICAgICAgICAgICBrZXlJbmZvLm1hY0FkZHIgPSAodTE2X3QgKil6ZHBhcm0tPnN0YV9hZGRyOworCisgICAgICAgICAgICAvKiBJZGVudGlmeSB0aGUgTUFDIGFkZHJlc3MgaW5mb3JtYXRpb24gKi8KKyAgICAgICAgICAgIGlmIChtZW1jbXAoemRwYXJtLT5zdGFfYWRkciwgYmNfYWRkciwgc2l6ZW9mKGJjX2FkZHIpKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGtleUluZm8uZmxhZyB8PSBaTV9LRVlfRkxBR19HSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBrZXlJbmZvLmZsYWcgfD0gWk1fS0VZX0ZMQUdfUEs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghc3RyY21wKHpkcGFybS0+dS5jcnlwdC5hbGcsICJOT05FIikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy91OF90IHplcm9fbWFjW109ezAsMCwwLDAsMCwwfTsKKworICAgICAgICAgICAgICAgIC8qIFNldCBrZXkgbGVuZ3RoIHRvIHplcm8gKi8KKyAgICAgICAgICAgICAgICBrZXlJbmZvLmtleUxlbmd0aCA9IDA7CisKKyAgICAgICAgICAgICAgICBpZiAoemRwYXJtLT5zdGFfYWRkclswXSAmIDEpLy9kZWwgZ3JvdXAga2V5CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvL2lmIChtYWNwLT5jYXJkU2V0dGluZy5XUEFJZUxlbj09MCkKKyAgICAgICAgICAgICAgICAgICAgLy97Ly84MDIuMXggZHluYW1pYyBXRVAKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgbUR5bktleU1vZGUgPSAwOworICAgICAgICAgICAgICAgICAgICAvLyAgICBtS2V5Rm9ybWF0WzBdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgbVByaXZhY3lJbnZva2VkWzBdPUZBTFNFOworICAgICAgICAgICAgICAgICAgICAvLyAgICBtQ2FwWzBdICY9IH5DQVBfUFJJVkFDWTsKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgbWFjcC0+Y2FyZFNldHRpbmcuRW5jcnlPbk9mZlswXT0wOworICAgICAgICAgICAgICAgICAgICAvL30KKyAgICAgICAgICAgICAgICAgICAgLy9tV3BhQmNLZXlMZW4gPSBtR2tJbnN0YWxsZWQgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvL2lmIChtZW1jbXAoemVyb19tYWMsemRwYXJtLT5zdGFfYWRkciwgNik9PTApCisgICAgICAgICAgICAgICAgICAgIC8veworICAgICAgICAgICAgICAgICAgICAvLyAgICBtRHluS2V5TW9kZT0wOworICAgICAgICAgICAgICAgICAgICAvLyAgICBtS2V5Rm9ybWF0WzBdPTA7CisgICAgICAgICAgICAgICAgICAgIC8vICAgIHBTZXR0aW5nLT5EeW5LZXlNb2RlPTA7CisgICAgICAgICAgICAgICAgICAgIC8vICAgIHBTZXR0aW5nLT5FbmNyeU1vZGVbMF09MDsKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgbUR5bktleU1vZGU9MDsKKyAgICAgICAgICAgICAgICAgICAgLy99CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJTZXQgRW5jcnlwdGlvbiBUeXBlIE5PTkVcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKHpkcGFybS0+dS5jcnlwdC5hbGcsICJUS0lQIikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgemZpV2xhblNldEVuY3J5TW9kZShkZXYsIFpNX1RLSVApOworICAgICAgICAgICAgICAgIC8vTGludXggU3VwcGxpY2FudCB3aWxsIGludmVyc2UgVHgvUngga2V5CisgICAgICAgICAgICAgICAgLy9TbyB3ZSBpbnZlcnNlIGl0IGJhY2sgLy9DV1lhbmcoKykKKyAgICAgICAgICAgICAgICAvL3pmTWVtb3J5Q29weSgmdGVtcFswXSwgJmtleUluZm8ua2V5WzE2XSwgOCk7CisgICAgICAgICAgICAgICAgLy96Zk1lbW9yeUNvcHkoJmtleUluZm8ua2V5WzE2XSwga2V5SW5mby5rZXlbMjRdLCA4KTsKKyAgICAgICAgICAgICAgICAvL3pmTWVtb3J5Q29weSgma2V5SW5mby5rZXlbMjRdLCAmdGVtcFswXSwgOCk7CisgICAgICAgICAgICAgICAgLy91OF90IHRlbXA7CisgICAgICAgICAgICAgICAgLy9pbnQgazsKKyAgICAgICAgICAgICAgICAvL2ZvciAoayA9IDA7IGsgPCA4OyBrKyspCisgICAgICAgICAgICAgICAgLy97CisgICAgICAgICAgICAgICAgLy8gICAgdGVtcCA9IGtleUluZm8ua2V5WzE2ICsga107CisgICAgICAgICAgICAgICAgLy8gICAga2V5SW5mby5rZXlbMTYgKyBrXSA9IGtleUluZm8ua2V5WzI0ICsga107CisgICAgICAgICAgICAgICAgLy8gICAga2V5SW5mby5rZXlbMjQgKyBrXSA9IHRlbXA7CisgICAgICAgICAgICAgICAgLy99CisgICAgICAgICAgICAgICAgLy9DYW1FbmNyeVR5cGUgPSBaTV9US0lQOworICAgICAgICAgICAgICAgIC8vLy9pZiAoaWR4ID09IDApCisgICAgICAgICAgICAgICAgLy97Ly8gUGFpcndpc2Uga2V5CisgICAgICAgICAgICAgICAgLy8gICAgbUtleUZvcm1hdFswXSA9IENhbUVuY3J5VHlwZTsKKyAgICAgICAgICAgICAgICAvLyAgICBtRHluS2V5TW9kZSA9IHBTZXR0aW5nLT5EeW5LZXlNb2RlID0gRFlOX0tFWV9US0lQOworICAgICAgICAgICAgICAgIC8vfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh6ZHBhcm0tPnUuY3J5cHQuYWxnLCAiQ0NNUCIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCBaTV9BRVMpOworICAgICAgICAgICAgICAgIC8vQ2FtRW5jcnlUeXBlID0gWk1fQUVTOworICAgICAgICAgICAgICAgIC8vLy9pZiAoaWR4ID09IDApCisgICAgICAgICAgICAgICAgLy97Ly8gUGFpcndpc2Uga2V5CisgICAgICAgICAgICAgICAgLy8gICAgbUtleUZvcm1hdFswXSA9IENhbUVuY3J5VHlwZTsKKyAgICAgICAgICAgICAgICAvLyAgICBtRHluS2V5TW9kZSA9IHBTZXR0aW5nLT5EeW5LZXlNb2RlID0gRFlOX0tFWV9BRVM7CisgICAgICAgICAgICAgICAgLy99CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICghc3RyY21wKHpkcGFybS0+dS5jcnlwdC5hbGcsICJXRVAiKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoa2V5SW5mby5rZXlMZW5ndGggPT0gNSkKKyAgICAgICAgICAgICAgICB7IC8vIFdFUCA2NAorICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgWk1fV0VQNjQpOworICAgICAgICAgICAgICAgIC8vICAgIENhbUVuY3J5VHlwZSA9IFpNX1dFUDY0OworICAgICAgICAgICAgICAgIC8vICAgIHRtcER5bktleU1vZGU9RFlOX0tFWV9XRVA2NDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5SW5mby5rZXlMZW5ndGggPT0gMTMpCisgICAgICAgICAgICAgICAgey8va2V5bGVuPTEzLCBXRVAgMTI4CisgICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCBaTV9XRVAxMjgpOworICAgICAgICAgICAgICAgIC8vICAgIENhbUVuY3J5VHlwZSA9IFpNX1dFUDEyODsKKyAgICAgICAgICAgICAgICAvLyAgICB0bXBEeW5LZXlNb2RlPURZTl9LRVlfV0VQMTI4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgWk1fV0VQMjU2KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBGb3IgRHluYW1pYyBXRVAga2V5IChOb24tV1BBIFJhZGl1cyksIHRoZSBrZXkgSUQgcmFuZ2U6IDAtMworICAgICAgICAgICAgICAgIC8vIEluIFdQQS9SU04gbW9kZSwgdGhlIGtleSBJRCByYW5nZTogMS0zLCB1c3VhbGx5LCBhIGJyb2FkY2FzdCBrZXkuCisgICAgICAgICAgICAgICAgLy8gRm9yIFdFUCBrZXkgc2V0dGluZzogd2Ugc2V0IG1EeW5LZXlNb2RlIGFuZCBtS2V5Rm9ybWF0IGluIGZvbGxvd2luZyBjYXNlOgorICAgICAgICAgICAgICAgIC8vICAgMS4gRm9yIDgwMi4xeCBkeW5hbWljYWxseSBnZW5lcmF0ZWQgV0VQIGtleSBtZXRob2QuCisgICAgICAgICAgICAgICAgLy8gICAyLiBGb3IgV1BBL1JTTiBtb2RlLCBidXQga2V5IGlkID09IDAuIChCdXQgdGhpcyBpcyBhbiBpbXBvc3NpYmxlIGNhc2UpCisgICAgICAgICAgICAgICAgLy8gU28sIG9ubHkgY2hlY2sgY2FzZSAxLgorICAgICAgICAgICAgICAgIC8vaWYgKG1hY3AtPmNhcmRTZXR0aW5nLldQQUllTGVuPT0wKQorICAgICAgICAgICAgICAgIC8veworICAgICAgICAgICAgICAgIC8vICAgIG1LZXlGb3JtYXRbMF0gPSBDYW1FbmNyeVR5cGU7CisgICAgICAgICAgICAgICAgLy8gICAgbUR5bktleU1vZGUgPSBwU2V0dGluZy0+RHluS2V5TW9kZSA9IHRtcER5bktleU1vZGU7CisgICAgICAgICAgICAgICAgLy8gICAgbVByaXZhY3lJbnZva2VkWzBdPVRSVUU7CisgICAgICAgICAgICAgICAgLy8gICAgbUNhcFswXSB8PSBDQVBfUFJJVkFDWTsKKyAgICAgICAgICAgICAgICAvLyAgICBtYWNwLT5jYXJkU2V0dGluZy5FbmNyeU9uT2ZmWzBdPTE7CisgICAgICAgICAgICAgICAgLy99CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIERVTVAga2V5IGNvbnRleHQgKi8KKy8vI2lmZGVmIFdQQV9ERUJVRworICAgICAgICAgICAgaWYgKGtleUluZm8ua2V5TGVuZ3RoID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgaWk7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJPdHVzOiBLZXkgQ29udGV4dDpcbiIpOworICAgICAgICAgICAgICAgIGZvcihpaSA9IDA7IGlpIDwga2V5SW5mby5rZXlMZW5ndGg7KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIweCUwMnggIiwga2V5SW5mby5rZXlbaWldKTsKKyAgICAgICAgICAgICAgICAgICAgaWYoKCsraWkgJSAxNikgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJpbnRrKCJcbiIpOworICAgICAgICAgICAgfQorLy8jZW5kaWYKKworICAgICAgICAgICAgLyogU2V0IGVuY3J5cHQgbW9kZSAqLworICAgICAgICAgICAgLy96ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgQ2FtRW5jcnlUeXBlKTsKKyAgICAgICAgICAgIHZhcElkID0gemZMbnhHZXRWYXBJZChkZXYpOworICAgICAgICAgICAgaWYgKHZhcElkID09IDB4ZmZmZikKKyAgICAgICAgICAgICAgICBrZXlJbmZvLnZhcElkID0gMDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBrZXlJbmZvLnZhcElkID0gdmFwSWQgKyAxOworICAgICAgICAgICAga2V5SW5mby52YXBBZGRyWzBdID0ga2V5SW5mby5tYWNBZGRyWzBdOworICAgICAgICAgICAga2V5SW5mby52YXBBZGRyWzFdID0ga2V5SW5mby5tYWNBZGRyWzFdOworICAgICAgICAgICAga2V5SW5mby52YXBBZGRyWzJdID0ga2V5SW5mby5tYWNBZGRyWzJdOworCisgICAgICAgICAgICB6ZmlXbGFuU2V0S2V5KGRldiwga2V5SW5mbyk7CisKKyAgICAgICAgICAgIC8vemZpV2xhbkRpc2FibGUoZGV2KTsKKyAgICAgICAgICAgIC8vemZpV2xhbkVuYWJsZShkZXYpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBaRF9DTURfU0VUX01MTUU6CisgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgInVzYmRydl93cGFfaW9jdGw6IFpEX0NNRF9TRVRfTUxNRVxuIik7CisKKyAgICAgICAgICAgIC8qIFRyYW5zbGF0ZSBTVEEncyBhZGRyZXNzICovCisgICAgICAgICAgICBzcHJpbnRmKG1hY19hZGRyLCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLCB6ZHBhcm0tPnN0YV9hZGRyWzBdLCB6ZHBhcm0tPnN0YV9hZGRyWzFdLAorICAgICAgICAgICAgICAgIHpkcGFybS0+c3RhX2FkZHJbMl0sIHpkcGFybS0+c3RhX2FkZHJbM10sIHpkcGFybS0+c3RhX2FkZHJbNF0sIHpkcGFybS0+c3RhX2FkZHJbNV0pOworCisgICAgICAgICAgICBzd2l0Y2goemRwYXJtLT51Lm1sbWUuY21kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgTUxNRV9TVEFfREVBVVRIOgorICAgICAgICAgICAgICAgICAgICBwcmludGsoIiAtLS0tLS0tQ2FsbCB6ZmlXbGFuRGVhdXRoLCByZWFzb246JWRcbiIsemRwYXJtLT51Lm1sbWUucmVhc29uX2NvZGUpOworICAgICAgICAgICAgICAgICAgICBpZih6ZmlXbGFuRGVhdXRoKGRldiwgKHUxNl90KikgemRwYXJtLT5zdGFfYWRkciwgemRwYXJtLT51Lm1sbWUucmVhc29uX2NvZGUpICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIkNhbid0IGRlYXV0aGVuY2F0ZSBTVEE6ICVzXG4iLCBtYWNfYWRkcik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiRGVhdXRoZW50aWNhdGUgU1RBOiAlcyB3aXRoIHJlYXNvbiBjb2RlOiAlZFxuIiwgbWFjX2FkZHIsIHpkcGFybS0+dS5tbG1lLnJlYXNvbl9jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIE1MTUVfU1RBX0RJU0FTU09DOgorICAgICAgICAgICAgICAgICAgICBwcmludGsoIiAtLS0tLS0tQ2FsbCB6ZmlXbGFuRGVhdXRoLCByZWFzb246JWRcbiIsemRwYXJtLT51Lm1sbWUucmVhc29uX2NvZGUpOworICAgICAgICAgICAgICAgICAgICBpZih6ZmlXbGFuRGVhdXRoKGRldiwgKHUxNl90KikgemRwYXJtLT5zdGFfYWRkciwgemRwYXJtLT51Lm1sbWUucmVhc29uX2NvZGUpICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIkNhbid0IGRpc2Fzc29jaWF0ZSBTVEE6ICVzXG4iLCBtYWNfYWRkcik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiRGlzYXNzb2NpYXRlIFNUQTogJXMgd2l0aCByZWFzb24gY29kZTogJWRcbiIsIG1hY19hZGRyLCB6ZHBhcm0tPnUubWxtZS5yZWFzb25fY29kZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJNTE1FIGNvbW1hbmQ6IDB4JTA0eCBub3Qgc3VwcG9ydFxuIiwgemRwYXJtLT51Lm1sbWUuY21kKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWkRfQ01EX1NDQU5fUkVROgorICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnZfd3BhX2lvY3RsOiBaRF9DTURfU0NBTl9SRVFcbiIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBaRF9DTURfU0VUX0dFTkVSSUNfRUxFTUVOVDoKKyAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAidXNiZHJ2X3dwYV9pb2N0bDogWkRfQ01EX1NFVF9HRU5FUklDX0VMRU1FTlRcbiIpOworCisgICAgICAgICAgICAvKiBDb3B5IHRoZSBXUEEgSUUgKi8KKyAgICAgICAgICAgIC8vem1fbXNnMV9tbShaTV9MVl8wLCAiQ1dZIC0gd3BhaWUgTGVuZ3RoIDogIiwgemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW4pOworICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ3cGFpZSBMZW5ndGggOiAlZFxuIiwgemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW4pOworICAgICAgICAgICAgaWYgKHpmaVdsYW5RdWVyeVdsYW5Nb2RlKGRldikgPT0gWk1fTU9ERV9BUCkgLy8gQVAgTW9kZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRXcGFJZShkZXYsIHpkcGFybS0+dS5nZW5lcmljX2VsZW0uZGF0YSwgemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1hY3AtPnN1cExlbiA9IHpkcGFybS0+dS5nZW5lcmljX2VsZW0ubGVuOworICAgICAgICAgICAgICAgIG1lbWNweShtYWNwLT5zdXBJZSwgemRwYXJtLT51LmdlbmVyaWNfZWxlbS5kYXRhLCB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmxlbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB6ZmlXbGFuU2V0V3BhU3VwcG9ydChkZXYsIDEpOworICAgICAgICAgICAgLy96ZmlXbGFuU2V0V3BhSWUoZGV2LCB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmRhdGEsIHpkcGFybS0+dS5nZW5lcmljX2VsZW0ubGVuKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgaWk7CisgICAgICAgICAgICAgICAgdThfdCBsZW4gPSB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmxlbjsKKyAgICAgICAgICAgICAgICB1OF90ICp3cGFpZSA9ICh1OF90ICopemRwYXJtLT51LmdlbmVyaWNfZWxlbS5kYXRhOworCisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ3ZC0+YXAud3BhTGVuOiAlZFxuIiwgbGVuKTsKKworICAgICAgICAgICAgICAgIC8qIERVTVAgV1BBIElFICovCisgICAgICAgICAgICAgICAgZm9yKGlpID0gMDsgaWkgPCBsZW47KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIweCUwMnggIiwgd3BhaWVbaWldKTsKKworICAgICAgICAgICAgICAgICAgICBpZigoKytpaSAlIDE2KSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlxuIik7CisgICAgICAgICAgICB9CisKKy8vICAgICAgICAgICAgI2lmZGVmIFpNX0hPU1RBUERfU1VQUE9SVAorICAgICAgICAgICAgLy9pZiAod2QtPndsYW5Nb2RlID09IFpNX01PREVfQVApCisgICAgICAgICAgICAvL3svLyBVcGRhdGUgQmVhY29uIEZJRk8gaW4gdGhlIG5leHQgVEJUVC4KKyAgICAgICAgICAgIC8vICAgIG1lbWNweSgmbVdQQUllLCBwU2V0dGluZy0+V1BBSWUsIHBTZXR0aW5nLT5XUEFJZUxlbik7CisgICAgICAgICAgICAvLyAgICBwcmludGsoS0VSTl9FUlIgIkNvcHkgV1BBIElFIGludG8gbVdQQUllXG4iKTsKKyAgICAgICAgICAgIC8vfQorLy8gICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIGJyZWFrOworCisvLyAgICAgICAgI2lmZGVmIFpNX0hPU1RBUERfU1VQUE9SVAorICAgICAgICBjYXNlIFpEX0NNRF9HRVRfVFNDOgorICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnZfd3BhX2lvY3RsOiBaRF9DTURfR0VUX1RTQ1xuIik7CisgICAgICAgICAgICBicmVhazsKKy8vICAgICAgICAjZW5kaWYKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnZfd3BhX2lvY3RsIGRlZmF1bHQ6IDB4JTA0eFxuIiwgemRwYXJtLT5jbWQpOworICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQworaW50IHVzYmRydl9jZW5jX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB6eWRhc19jZW5jX3BhcmFtICp6ZHBhcm0pCit7CisgICAgLy9zdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSAoc3RydWN0IHVzYmRydl9wcml2YXRlICopZGV2LT5wcml2OworICAgIHN0cnVjdCB6c0tleUluZm8ga2V5SW5mbzsKKyAgICB1MTZfdCBhcElkOworICAgIHU4X3QgYmNfYWRkcls2XSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OworICAgIGludCByZXQgPSAwOworICAgIGludCBpaTsKKworICAgIC8qIEdldCB0aGUgQVAgSWQgKi8KKyAgICBhcElkID0gemZMbnhHZXRWYXBJZChkZXYpOworCisgICAgaWYgKGFwSWQgPT0gMHhmZmZmKQorICAgIHsKKyAgICAgICAgYXBJZCA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFwSWQgPSBhcElkKzE7CisgICAgfQorCisgICAgc3dpdGNoICh6ZHBhcm0tPmNtZCkKKyAgICB7CisgICAgICAgIGNhc2UgWk1fQ01EX0NFTkNfU0VUQ0VOQzoKKyAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiWk1fQ01EX0NFTkNfU0VUQ0VOQ1xuIik7CisgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImxlbmd0aDogJWRcbiIsIHpkcGFybS0+bGVuKTsKKyAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAicG9saWN5OiAlZFxuIiwgemRwYXJtLT51LmluZm8uY2VuY19wb2xpY3kpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWk1fQ01EX0NFTkNfU0VUS0VZOgorICAgICAgICAgICAgLy9yZXQgPSB3YWlfaW9jdGxfc2V0a2V5KHZhcCwgaW9jdGxfbXNnKTsKKyAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiWk1fQ01EX0NFTkNfU0VUS0VZXG4iKTsKKworICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJNQUMgYWRkcmVzcz0gIik7CisgICAgICAgICAgICBmb3IoaWkgPSAwOyBpaSA8IDY7IGlpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIweCUwMnggIiwgemRwYXJtLT51LmNyeXB0LnN0YV9hZGRyW2lpXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlxuIik7CisKKyAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiS2V5IEluZGV4OiAlZFxuIiwgemRwYXJtLT51LmNyeXB0LmtleWlkKTsKKyAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiRW5jcnlwdGlvbiBrZXk9ICIpOworICAgICAgICAgICAgZm9yKGlpID0gMDsgaWkgPCAxNjsgaWkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIjB4JTAyeCAiLCB6ZHBhcm0tPnUuY3J5cHQua2V5W2lpXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlxuIik7CisKKyAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiTUlDIGtleT0gIik7CisgICAgICAgICAgICBmb3IoaWkgPSAxNjsgaWkgPCBaTV9DRU5DX0tFWV9TSVpFOyBpaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiMHglMDJ4ICIsIHpkcGFybS0+dS5jcnlwdC5rZXlbaWldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiXG4iKTsKKworICAgICAgICAgICAgLyogU2V0IHVwIGtleSBpbmZvcm1hdGlvbiAqLworICAgICAgICAgICAga2V5SW5mby5rZXlMZW5ndGggPSBaTV9DRU5DX0tFWV9TSVpFOworICAgICAgICAgICAga2V5SW5mby5rZXlJbmRleCA9IHpkcGFybS0+dS5jcnlwdC5rZXlpZDsKKyAgICAgICAgICAgIGtleUluZm8uZmxhZyA9IFpNX0tFWV9GTEFHX0FVVEhFTlRJQ0FUT1IgfCBaTV9LRVlfRkxBR19DRU5DOworICAgICAgICAgICAga2V5SW5mby5rZXkgPSB6ZHBhcm0tPnUuY3J5cHQua2V5OworICAgICAgICAgICAga2V5SW5mby5tYWNBZGRyID0gKHUxNl90ICopemRwYXJtLT51LmNyeXB0LnN0YV9hZGRyOworCisgICAgICAgICAgICAvKiBJZGVudGlmeSB0aGUgTUFDIGFkZHJlc3MgaW5mb3JtYXRpb24gKi8KKyAgICAgICAgICAgIGlmIChtZW1jbXAoemRwYXJtLT51LmNyeXB0LnN0YV9hZGRyLCBiY19hZGRyLCBzaXplb2YoYmNfYWRkcikpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAga2V5SW5mby5mbGFnIHw9IFpNX0tFWV9GTEFHX0dLOworICAgICAgICAgICAgICAgIGtleUluZm8udmFwSWQgPSBhcElkOworICAgICAgICAgICAgICAgIG1lbWNweShrZXlJbmZvLnZhcEFkZHIsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBrZXlJbmZvLmZsYWcgfD0gWk1fS0VZX0ZMQUdfUEs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHpmaVdsYW5TZXRLZXkoZGV2LCBrZXlJbmZvKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWk1fQ01EX0NFTkNfUkVLRVk6CisgICAgICAgICAgICAvL3JldCA9IHdhaV9pb2N0bF9yZWtleSh2YXAsIGlvY3RsX21zZyk7CisgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlpNX0NNRF9DRU5DX1JFS0VZXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0ID0gLUVPUE5PVFNVUFA7CisgICAgICAgICAgICBicmVhazsKKworICAgIH0KKworICAgIC8vaWYgKHJldHYgPT0gRU5FVFJFU0VUKQorICAgIC8vICAgIHJldHYgPSBJU19VUF9BVVRPKHZhcCkgPyBpZWVlODAyMTFfb3Blbih2YXAtPml2X2RldikgOiAwOworCisgICAgcmV0dXJuIHJldDsKK30KKyNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworaW50IHVzYmRydl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3sKKy8vICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcDsKKy8vICAgIHZvaWQgKnJlZ3A7CisgICAgc3RydWN0IHpkYXBfaW9jdGwgemRyZXE7CisgICAgc3RydWN0IGl3cmVxICp3cnEgPSAoc3RydWN0IGl3cmVxICopaWZyOworICAgIHN0cnVjdCBhdGhyX3dsYW5fcGFyYW0gemRwYXJtOworICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+cHJpdjsKKworICAgIGludCBlcnIgPSAwOworICAgIGludCBjaGFuZ2VkID0gMDsKKworLy8gICAgbWFjcCA9IGRldi0+cHJpdjsKKy8vICAgIHJlZ3AgPSBtYWNwLT5yZWdwOworCisgICAgaWYoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICBzd2l0Y2ggKGNtZCkKKyAgICB7CisgICAgICAgICAgICBjYXNlIFNJT0NHSVdOQU1FOgorICAgICAgICAgICAgc3RyY3B5KHdycS0+dS5uYW1lLCAiSUVFRSA4MDIuMTEtRFMiKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU0lPQ0dJV0FQOgorICAgICAgICAgICAgZXJyID0gdXNiZHJ2d2V4dF9naXdhcChkZXYsIE5VTEwsICZ3cnEtPnUuYXBfYWRkciwgTlVMTCk7CisgICAgICAgICAgICBicmVhazsKKworCisgICAgICAgIGNhc2UgU0lPQ1NJV0FQOgorICAgICAgICAgICAgZXJyID0gdXNiZHJ2d2V4dF9zaXdhcChkZXYsIE5VTEwsICZ3cnEtPnUuYXBfYWRkciwgTlVMTCk7CisgICAgICAgICAgICBicmVhazsKKworCisgICAgICAgIGNhc2UgU0lPQ0dJV01PREU6CisgICAgICAgICAgICBlcnIgPSB1c2JkcnZ3ZXh0X2dpd21vZGUoZGV2LCBOVUxMLCAmd3JxLT51Lm1vZGUsIE5VTEwpOworICAgICAgICAgICAgYnJlYWs7CisKKworICAgICAgICBjYXNlIFNJT0NTSVdFU1NJRDoKKyAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiQ1dZIC0gdXNiZHJ2d2V4dF9zaXdlc3NpZFxuIik7CisgICAgICAgICAgICAvL2VyciA9IHVzYmRydl9pb2N0bF9zZXRlc3NpZChkZXYsICZ3cnEtPnUuZXNzaWQpOworICAgICAgICAgICAgZXJyID0gdXNiZHJ2d2V4dF9zaXdlc3NpZChkZXYsIE5VTEwsICZ3cnEtPnUuZXNzaWQsIE5VTEwpOworCisgICAgICAgICAgICBpZiAoISBlcnIpCisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IDE7CisgICAgICAgICAgICBicmVhazsKKworCisgICAgICAgIGNhc2UgU0lPQ0dJV0VTU0lEOgorICAgICAgICAgICAgZXJyID0gdXNiZHJ2d2V4dF9naXdlc3NpZChkZXYsIE5VTEwsICZ3cnEtPnUuZXNzaWQsIE5VTEwpOworICAgICAgICAgICAgYnJlYWs7CisKKworICAgICAgICBjYXNlIFNJT0NTSVdSVFM6CisKKyAgICAgICAgICAgIGVyciA9IHVzYmRydl9pb2N0bF9zZXRydHMoZGV2LCAmd3JxLT51LnJ0cyk7CisgICAgICAgICAgICBpZiAoISBlcnIpCisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IDE7CisgICAgICAgICAgICBicmVhazsKKworCisJCWNhc2UgU0lPQ0lXRklSU1RQUklWICsgMHgyOiAvKiBzZXRfYXV0aCAqLworCQl7CisJCQkvL3ByaW50aygiQ1dZIC0gU0lPQ0lXRklSU1RQUklWICsgMHgyIChzZXRfYXV0aClcbiIpOworCQkJaWYgKCEgY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJCXsKKwkJCQllcnIgPSAtRVBFUk07CisJCQkJYnJlYWs7CisJCQl9CisJCQl7CisJCQkJaW50IHZhbCA9ICooIChpbnQgKikgd3JxLT51Lm5hbWUgKTsKKwkJCQlpZiAoKHZhbCA8IDApIHx8ICh2YWwgPiAyKSkKKwkJCQl7CisJCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQl6ZmlXbGFuU2V0QXV0aGVudGljYXRpb25Nb2RlKGRldiwgdmFsKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkID09IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHpmaVdsYW5EaXNhYmxlKGRldiwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuRW5hYmxlKGRldik7CisgICAgICAgICAgICAgICAgICAgIH0KKworCQkJCQllcnIgPSAwOworCQkJCQljaGFuZ2VkID0gMTsKKwkJCQl9CisJCQl9CisJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgU0lPQ0lXRklSU1RQUklWICsgMHgzOiAvKiBnZXRfYXV0aCAqLworCQl7CisJCSAgICBpbnQgQXV0aE1vZGUgPSBaTV9BVVRIX01PREVfT1BFTjsKKworCQkJLy9wcmludGsoIkNXWSAtIFNJT0NJV0ZJUlNUUFJJViArIDB4MyAoZ2V0X2F1dGgpXG4iKTsKKworCQkJaWYgKHdycS0+dS5kYXRhLnBvaW50ZXIpCisJCQl7CisJCQkJd3JxLT51LmRhdGEuZmxhZ3MgPSAxOworCisJCQkJQXV0aE1vZGUgPSB6ZmlXbGFuUXVlcnlBdXRoZW50aWNhdGlvbk1vZGUoZGV2LCAwKTsKKwkJCQlpZiAoQXV0aE1vZGUgPT0gWk1fQVVUSF9NT0RFX09QRU4pCisJCQkJeworCQkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSAxMjsKKworCQkJCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICJvcGVuIHN5c3RlbSIsIDEyKSkKKwkJCQkJeworCQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZSBpZiAoQXV0aE1vZGUgPT0gWk1fQVVUSF9NT0RFX1NIQVJFRF9LRVkpCisJCQkJeworCQkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSAxMTsKKworCQkJCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICJzaGFyZWQga2V5IiwgMTEpKQorCQkJCQl7CisJCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlIGlmIChBdXRoTW9kZSA9PSBaTV9BVVRIX01PREVfQVVUTykKKwkJCQl7CisJCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IDEwOworCisJCQkJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgImF1dG8gbW9kZSIsIDEwKSkKKwkJCQkJeworCQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJfQorCQkJfQorCQl9CisJCQlicmVhazsKKworCisgICAgICAgIGNhc2UgWkRBUElPQ1RMOiAgICAvL2RlYnVnIGNvbW1hbmQKKyAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmemRyZXEsIGlmci0+aWZyX2RhdGEsIHNpemVvZiAoemRyZXEpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgInVzYmRydjogY29weV9mcm9tX3VzZXIgZXJyb3JcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvL3ByaW50ayhLRVJOX0RFQlVHICJ1c2JkcnY6IGNtZD0lMngsIHJlZz0weCUwNGx4LCB2YWx1ZT0weCUwOGx4XG4iLAorICAgICAgICAgICAgLy8gICAgICAgIHpkcmVxLmNtZCwgemRyZXEuYWRkciwgemRyZXEudmFsdWUpOworCisJCQl6ZkxueFByaXZhdGVJb2N0bChkZXYsICZ6ZHJlcSk7CisKKyAgICAgICAgICAgIGVyciA9IDA7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFpEX0lPQ1RMX1dQQToKKyAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmemRwYXJtLCBpZnItPmlmcl9kYXRhLCBzaXplb2Yoc3RydWN0IGF0aHJfd2xhbl9wYXJhbSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAidXNiZHJ2OiBjb3B5X2Zyb21fdXNlciBlcnJvclxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVzYmRydl93cGFfaW9jdGwoZGV2LCAmemRwYXJtKTsKKyAgICAgICAgICAgIGVyciA9IDA7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFpEX0lPQ1RMX1BBUkFNOgorICAgICAgICB7CisgICAgICAgICAgICBpbnQgKnA7CisgICAgICAgICAgICBpbnQgb3A7CisgICAgICAgICAgICBpbnQgYXJnOworCisgICAgICAgICAgICAvKiBQb2ludCB0byB0aGUgbmFtZSBmaWVsZCBhbmQgcmV0cmlldmUgdGhlCisgICAgICAgICAgICAgKiBvcCBhbmQgYXJnIGVsZW1lbnRzLiAgICAgICAgICAqLworICAgICAgICAgICAgcCA9IChpbnQgKil3cnEtPnUubmFtZTsKKyAgICAgICAgICAgIG9wID0gKnArKzsKKyAgICAgICAgICAgIGFyZyA9ICpwOworCisgICAgICAgICAgICBpZihvcCA9PSBaRF9QQVJBTV9ST0FNSU5HKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiKioqKioqKioqKioqKiBaRF9QQVJBTV9ST0FNSU5HOiAlZFxuIiwgYXJnKTsKKyAgICAgICAgICAgICAgICAvL21hY3AtPmNhcmRTZXR0aW5nLmFwX3NjYW49KFU4KWFyZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKG9wID09IFpEX1BBUkFNX1BSSVZBQ1kpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJaRF9JT0NUTF9QUklWQUNZOiAiKTsKKworICAgICAgICAgICAgICAgIC8qIFR1cm4gb24gdGhlIHByaXZhY3kgaW52b2tlIGZsYWcgKi8KKyAgICAgICAgICAgICAgICBpZihhcmcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vICAgIG1DYXBbMF0gfD0gQ0FQX1BSSVZBQ1k7CisgICAgICAgICAgICAgICAgLy8gICAgbWFjcC0+Y2FyZFNldHRpbmcuRW5jcnlPbk9mZlswXSA9IDE7CisgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiZW5hYmxlXG4iKTsKKworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vICAgIG1DYXBbMF0gJj0gfkNBUF9QUklWQUNZOworICAgICAgICAgICAgICAgIC8vICAgIG1hY3AtPmNhcmRTZXR0aW5nLkVuY3J5T25PZmZbMF0gPSAwOworICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImRpc2FibGVcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jaGFuZ2VkPTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihvcCA9PSBaRF9QQVJBTV9XUEEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJaRF9QQVJBTV9XUEE6ICIpOworCisgICAgICAgICAgICAgICAgaWYoYXJnKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJlbmFibGVcbiIpOworCisgICAgICAgICAgICAgICAgICAgIGlmICh6ZmlXbGFuUXVlcnlXbGFuTW9kZShkZXYpICE9IFpNX01PREVfQVApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiU3RhdGlvbiBNb2RlXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vemZpV2xhblF1ZXJ5V3BhSWUoZGV2LCAodThfdCAqKSZ3cGFJZSwgJndwYWxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50aygid3BhSWUgOiAlMngsJTJ4LCUyeFxuIiwgd3BhSWVbMjFdLCB3cGFJZVsyMl0sIHdwYUllWzIzXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50aygicnNuSWUgOiAlMngsJTJ4LCUyeFxuIiwgd3BhSWVbMTddLCB3cGFJZVsxOF0sIHdwYUllWzE5XSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG1hY3AtPnN1cEllWzIxXSA9PSAweDUwKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNwLT5zdXBJZVsyMl0gPT0gMHhmMikgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFjcC0+c3VwSWVbMjNdID09IDB4MikpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ3ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQVBTS1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQVBTSzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT53cy5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEFQU0s7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldEF1dGhlbnRpY2F0aW9uTW9kZShkZXYsIFpNX0FVVEhfTU9ERV9XUEFQU0spOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKG1hY3AtPnN1cEllWzIxXSA9PSAweDUwKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY3AtPnN1cEllWzIyXSA9PSAweGYyKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY3AtPnN1cEllWzIzXSA9PSAweDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAid2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEFcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+d3MuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRBdXRoZW50aWNhdGlvbk1vZGUoZGV2LCBaTV9BVVRIX01PREVfV1BBKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChtYWNwLT5zdXBJZVsxN10gPT0gMHhmKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY3AtPnN1cEllWzE4XSA9PSAweGFjKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY3AtPnN1cEllWzE5XSA9PSAweDIpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAid2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEEyUFNLXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMlBTSzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT53cy5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEEyUFNLOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRBdXRoZW50aWNhdGlvbk1vZGUoZGV2LCBaTV9BVVRIX01PREVfV1BBMlBTSyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgobWFjcC0+c3VwSWVbMTddID09IDB4ZikgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNwLT5zdXBJZVsxOF0gPT0gMHhhYykgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNwLT5zdXBJZVsxOV0gPT0gMHgxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIndkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+d3MuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0QXV0aGVudGljYXRpb25Nb2RlKGRldiwgWk1fQVVUSF9NT0RFX1dQQTIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtYWNwLT5zdXBJZVsyMV0gPT0gMHg1MCkgfHwgKG1hY3AtPnN1cEllWzIyXSA9PSAweGYyKSkvL1dQQSBvciBXUEFQU0sKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFjcC0+c3VwSWVbMTFdID09IDB4MikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAid2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1RLSVBcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9US0lQOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT53cy53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1RLSVA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRXZXBTdGF0dXMoZGV2LCBaTV9FTkNSWVBUSU9OX1RLSVApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIndkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9BRVNcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9BRVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPndzLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fQUVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0V2VwU3RhdHVzKGRldiwgWk1fRU5DUllQVElPTl9BRVMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobWFjcC0+c3VwSWVbMTddID09IDB4ZikgfHwgKG1hY3AtPnN1cEllWzE4XSA9PSAweGFjKSkgLy9XUEEyIG9yIFdQQTJQU0sKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFjcC0+c3VwSWVbMTNdID09IDB4MikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAid2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1RLSVBcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9US0lQOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT53cy53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1RLSVA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRXZXBTdGF0dXMoZGV2LCBaTV9FTkNSWVBUSU9OX1RLSVApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIndkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9BRVNcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9BRVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPndzLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fQUVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0V2VwU3RhdHVzKGRldiwgWk1fRU5DUllQVElPTl9BRVMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0V3BhU3VwcG9ydChkZXYsIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCB0aGUgV1BBIHJlbGF0ZWQgdmFyaWFibGVzICovCisgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiZGlzYWJsZVxuIik7CisKKyAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldFdwYVN1cHBvcnQoZGV2LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldEF1dGhlbnRpY2F0aW9uTW9kZShkZXYsIFpNX0FVVEhfTU9ERV9PUEVOKTsKKyAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldFdlcFN0YXR1cyhkZXYsIFpNX0VOQ1JZUFRJT05fV0VQX0RJU0FCTEVEKTsKKworICAgICAgICAgICAgICAgICAgICAvKiBOb3cgd2Ugb25seSBzZXQgdGhlIGxlbmd0aCBpbiB0aGUgV1BBIElFCisgICAgICAgICAgICAgICAgICAgICAqIGZpZWxkIHRvIHplcm8uICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIC8vbWFjcC0+Y2FyZFNldHRpbmcuV1BBSWVbMV0gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKG9wID09IFpEX1BBUkFNX0NPVU5URVJNRUFTVVJFUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIj09PT09PT09PT09PT09PT1aRF9QQVJBTV9DT1VOVEVSTUVBU1VSRVM6ICIpOworCisgICAgICAgICAgICAgICAgaWYoYXJnKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyAgICBtQ291bnRlck1lYXN1cmVTdGF0ZT0xOworICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImVuYWJsZVxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gICAgbUNvdW50ZXJNZWFzdXJlU3RhdGU9MDsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJkaXNhYmxlXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihvcCA9PSBaRF9QQVJBTV9EUk9QVU5FTkNSWVBURUQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJaRF9QQVJBTV9EUk9QVU5FTkNSWVBURUQ6ICIpOworCisgICAgICAgICAgICAgICAgaWYoYXJnKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJlbmFibGVcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImRpc2FibGVcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKG9wID09IFpEX1BBUkFNX0FVVEhfQUxHUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlpEX1BBUkFNX0FVVEhfQUxHUzogIik7CisKKyAgICAgICAgICAgICAgICBpZihhcmcgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiT1BFTl9TWVNURU1cbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlNIQVJFRF9LRVlcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKG9wID09IFpEX1BBUkFNX1dQU19GSUxURVIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJaRF9QQVJBTV9XUFNfRklMVEVSOiAiKTsKKworICAgICAgICAgICAgICAgIGlmKGFyZykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gICAgbUNvdW50ZXJNZWFzdXJlU3RhdGU9MTsKKyAgICAgICAgICAgICAgICAgICAgbWFjcC0+Zm9yd2FyZE1nbXQgPSAxOworICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImVuYWJsZVxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gICAgbUNvdW50ZXJNZWFzdXJlU3RhdGU9MDsKKyAgICAgICAgICAgICAgICAgICAgbWFjcC0+Zm9yd2FyZE1nbXQgPSAwOworICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImRpc2FibGVcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAgICAgZXJyID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgWkRfSU9DVExfR0VUV1BBSUU6CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFyZXFfd3BhaWUgcmVxX3dwYWllOworICAgICAgICAgICAgdTE2X3QgYXBJZCwgaSwgajsKKworICAgICAgICAgICAgLyogR2V0IHRoZSBBUCBJZCAqLworICAgICAgICAgICAgYXBJZCA9IHpmTG54R2V0VmFwSWQoZGV2KTsKKworICAgICAgICAgICAgaWYgKGFwSWQgPT0gMHhmZmZmKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFwSWQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFwSWQgPSBhcElkKzE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmcmVxX3dwYWllLCBpZnItPmlmcl9kYXRhLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMXJlcV93cGFpZSkpKXsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgInVzYmRydjogY29weV9mcm9tX3VzZXIgZXJyb3JcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBaTV9PQUxfTUFYX1NUQV9TVVBQT1JUOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yKGogPSAwOyBqIDwgSUVFRTgwMjExX0FERFJfTEVOOyBqKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAobWFjcC0+c3Rhd3BhaWVbaV0ud3BhX21hY2FkZHJbal0gIT0gcmVxX3dwYWllLndwYV9tYWNhZGRyW2pdKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChqID09IDYpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGkgPCBaTV9PQUxfTUFYX1NUQV9TVVBQT1JUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vcHJpbnRrKCJaRF9JT0NUTF9HRVRXUEFJRSAtIHN0YSBpbmRleCA9ICVkXG4iLCBpKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkocmVxX3dwYWllLndwYV9pZSwgbWFjcC0+c3Rhd3BhaWVbaV0ud3BhX2llLCBJRUVFODAyMTFfTUFYX0lFX1NJWkUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZyZXFfd3BhaWUsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExcmVxX3dwYWllKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgICAgIGVyciA9IDA7CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQworICAgICAgICBjYXNlIFpNX0lPQ1RMX0NFTkM6CisgICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJm1hY3AtPnpkX3dwYV9yZXEsIGlmci0+aWZyX2RhdGEsIHNpemVvZihzdHJ1Y3QgYXRocl93bGFuX3BhcmFtKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnY6IGNvcHlfZnJvbV91c2VyIGVycm9yXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdXNiZHJ2X2NlbmNfaW9jdGwoZGV2LCAoc3RydWN0IHp5ZGFzX2NlbmNfcGFyYW0gKikmbWFjcC0+emRfd3BhX3JlcSk7CisgICAgICAgICAgICBlcnIgPSAwOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZXJyID0gLUVPUE5PVFNVUFA7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKworICAgIHJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9vYWxfZHQuaCBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL29hbF9kdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MmI5NzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9vYWxfZHQuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKy8qICBNb2R1bGUgTmFtZSA6IG9hbF9kdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEFic3RyYWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgVGhpcyBtb2R1bGUgY29udGFpbnMgZGF0YSB0eXBlIGRlZmluaXRpb24uICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE5PVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgUGxhdGZvcm0gZGVwZW5kZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfT0FMX0RUX0gKKyNkZWZpbmUgX09BTF9EVF9ICisKKy8qIFBsZWFzZSBpbmNsdWRlIGhlYWRlciBmaWxlcyBmb3IgYnVmZmVyIHR5cGUgaW4gdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZpbGUgKi8KKy8qIFBsZWFzZSBpbmNsdWRlIGhlYWRlciBmaWxlcyBmb3IgZGV2aWNlIHR5cGUgaGVyZSAqLworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCit0eXBlZGVmICAgICB1bnNpZ25lZCBsb25nIGxvbmcgIHU2NF90OwordHlwZWRlZiAgICAgdW5zaWduZWQgaW50ICAgICAgICB1MzJfdDsKK3R5cGVkZWYgICAgIHVuc2lnbmVkIHNob3J0ICAgICAgdTE2X3Q7Cit0eXBlZGVmICAgICB1bnNpZ25lZCBjaGFyICAgICAgIHU4X3Q7Cit0eXBlZGVmICAgICBsb25nIGxvbmcgICAgICAgICAgIHM2NF90OwordHlwZWRlZiAgICAgbG9uZyAgICAgICAgICAgICAgICBzMzJfdDsKK3R5cGVkZWYgICAgIHNob3J0ICAgICAgICAgICAgICAgczE2X3Q7Cit0eXBlZGVmICAgICBjaGFyICAgICAgICAgICAgICAgIHM4X3Q7CisKKyNpZm5kZWYgICAgIFRSVUUKKyNkZWZpbmUgICAgIFRSVUUgICAgICAgICAgICAgICAgKDE9PTEpCisjZW5kaWYKKworI2lmbmRlZiAgICAgRkFMU0UKKyNkZWZpbmUgICAgIEZBTFNFICAgICAgICAgICAgICAgKDE9PTApCisjZW5kaWYKKworI2lmbmRlZiAgICAgTlVMTAorI2RlZmluZSAgICAgTlVMTCAgICAgICAgICAgICAgICAwCisjZW5kaWYKKworLyogUGxlYXNlIGluY2x1ZGUgaGVhZGVyIGZpbGVzIGZvciBidWZmZXIgdHlwZSBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgZmlsZSAqLwordHlwZWRlZiAgICAgc3RydWN0IHNrX2J1ZmYgICAgICB6YnVmX3Q7CisKKy8qIFBsZWFzZSBpbmNsdWRlIGhlYWRlciBmaWxlcyBmb3IgZGV2aWNlIHR5cGUgaW4gdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZpbGUgKi8KK3R5cGVkZWYgICAgIHN0cnVjdCBuZXRfZGV2aWNlICAgemRldl90OworCisjZW5kaWYgLyogI2lmbmRlZiBfT0FMX0RUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL29hbF9tYXJjLmggYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9vYWxfbWFyYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOGU0YmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9vYWxfbWFyYy5oCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKy8qICBNb2R1bGUgTmFtZSA6IG9hbF9tYXJjLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEFic3RyYWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgVGhpcyBtb2R1bGUgY29udGFpbnMgd2FycHBlciBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE5PVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgUGxhdGZvcm0gZGVwZW5kZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfT0FMX01BUkNfSAorI2RlZmluZSBfT0FMX01BUkNfSAorCisjaW5jbHVkZSAib2FsX2R0LmgiCisjaW5jbHVkZSAidXNiZHJ2LmgiCisKKyNkZWZpbmUgWk1fT1NfTElOVVhfRlVOQworCisvKioqKiogQ3JpdGljYWwgc2VjdGlvbiAqKioqKi8KKy8qIERlY2xhcmUgZm9yIGNyaXRpY2FsIHNlY3Rpb24gKi8KKyNpZm5kZWYgWk1fSEFMUExVU19MT0NLCisjZGVmaW5lIHptd19nZXRfd2xhbl9kZXYoZGV2KSAgICBzdHJ1Y3QgenNXbGFuRGV2ICp3ZCA9IChzdHJ1Y3QgenNXbGFuRGV2KikgKCgoKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSopZGV2LT5wcml2KS0+d2QpKQorCisjZGVmaW5lIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCkgdW5zaWduZWQgbG9uZyBpcnFGbGFnOworCisvKiBFbnRlciBjcml0aWNhbCBzZWN0aW9uICovCisjZGVmaW5lIHptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldikgXAorICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmKCgoc3RydWN0IHVzYmRydl9wcml2YXRlICopKGRldi0+cHJpdikpLT5jc19sb2NrKSwgaXJxRmxhZyk7CisKKy8qIGxlYXZlIGNyaXRpY2FsIHNlY3Rpb24gKi8KKyNkZWZpbmUgem13X2xlYXZlX2NyaXRpY2FsX3NlY3Rpb24oZGV2KSBcCisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJigoKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKShkZXYtPnByaXYpKS0+Y3NfbG9jayksIGlycUZsYWcpOworI2Vsc2UKKyNkZWZpbmUgem13X2dldF93bGFuX2RldihkZXYpICAgIHN0cnVjdCB6c1dsYW5EZXYgKndkID0gemZ3R2V0V2xhbkRldihkZXYpOworCisvKiBEZWNsYXJlIGZvciBjcml0aWNhbCBzZWN0aW9uICovCisjZGVmaW5lIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCkKKworLyogRW50ZXIgY3JpdGljYWwgc2VjdGlvbiAqLworI2RlZmluZSB6bXdfZW50ZXJfY3JpdGljYWxfc2VjdGlvbihkZXYpIFwKKyAgICAgICAgemZ3RW50ZXJDcml0aWNhbFNlY3Rpb24oZGV2KTsKKworLyogbGVhdmUgY3JpdGljYWwgc2VjdGlvbiAqLworI2RlZmluZSB6bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpIFwKKyAgICAgICAgemZ3TGVhdmVDcml0aWNhbFNlY3Rpb24oZGV2KTsKKyNlbmRpZgorCisvKioqKiogQnl0ZSBvcmRlciBjb252ZXJ0aW5nICoqKioqLworI2lmZGVmIFpNX0NPTkZJR19CSUdfRU5ESUFOCisjZGVmaW5lIHptd19jcHVfdG9fbGUzMih2KSAgICAoKCh2ICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodiAmIDB4MDBmZjAwMDApID4+IDgpICB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHYgJiAweDAwMDBmZjAwKSA8PCA4KSAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2ICYgMHgwMDAwMDBmZikgPDwgMjQpKQorCisjZGVmaW5lIHptd19sZTMyX3RvX2NwdSh2KSAgICAoKCh2ICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodiAmIDB4MDBmZjAwMDApID4+IDgpICB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHYgJiAweDAwMDBmZjAwKSA8PCA4KSAgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2ICYgMHgwMDAwMDBmZikgPDwgMjQpKQorCisjZGVmaW5lIHptd19jcHVfdG9fbGUxNih2KSAgICAoKCh2ICYgMHhmZjAwKSA+PiA4KSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHYgJiAweDAwZmYpIDw8IDgpKQorCisjZGVmaW5lIHptd19sZTE2X3RvX2NwdSh2KSAgICAoKCh2ICYgMHhmZjAwKSA+PiA4KSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHYgJiAweDAwZmYpIDw8IDgpKQorI2Vsc2UKKyNkZWZpbmUgem13X2NwdV90b19sZTMyKHYpICAgICh2KQorI2RlZmluZSB6bXdfbGUzMl90b19jcHUodikgICAgKHYpCisjZGVmaW5lIHptd19jcHVfdG9fbGUxNih2KSAgICAodikKKyNkZWZpbmUgem13X2xlMTZfdG9fY3B1KHYpICAgICh2KQorI2VuZGlmCisKKy8qKioqKiBCdWZmZXIgYWNjZXNzICoqKioqLworLyogQ2FsbGVkIHRvIHJlYWQvd3JpdGUgYnVmZmVyICovCisjaWZuZGVmIFpNX0hBTFBMVVNfTE9DSworCisjZGVmaW5lIHptd19idWZfcmVhZGIoZGV2LCBidWYsIG9mZnNldCkgKih1OF90KikoKHU4X3QqKWJ1Zi0+ZGF0YStvZmZzZXQpCisjZGVmaW5lIHptd19idWZfcmVhZGgoZGV2LCBidWYsIG9mZnNldCkgem13X2NwdV90b19sZTE2KCoodTE2X3QqKSgodThfdCopYnVmLT5kYXRhK29mZnNldCkpCisjZGVmaW5lIHptd19idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQsIHZhbHVlKSAqKHU4X3QqKSgodThfdCopYnVmLT5kYXRhK29mZnNldCkgPSB2YWx1ZQorI2RlZmluZSB6bXdfYnVmX3dyaXRlaChkZXYsIGJ1Ziwgb2Zmc2V0LCB2YWx1ZSkgKih1MTZfdCopKCh1OF90KilidWYtPmRhdGErb2Zmc2V0KSA9IHptd19jcHVfdG9fbGUxNih2YWx1ZSkKKyNkZWZpbmUgem13X2J1Zl9nZXRfYnVmZmVyKGRldiwgYnVmKSAodThfdCopKGJ1Zi0+ZGF0YSkKKworI2Vsc2UKKworI2RlZmluZSB6bXdfYnVmX3JlYWRiKGRldiwgYnVmLCBvZmZzZXQpIHpmd0J1ZlJlYWRCeXRlKGRldiwgYnVmLCBvZmZzZXQpCisjZGVmaW5lIHptd19idWZfcmVhZGgoZGV2LCBidWYsIG9mZnNldCkgemZ3QnVmUmVhZEhhbGZXb3JkKGRldiwgYnVmLCBvZmZzZXQpCisjZGVmaW5lIHptd19idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQsIHZhbHVlKSB6ZndCdWZXcml0ZUJ5dGUoZGV2LCBidWYsIG9mZnNldCwgdmFsdWUpCisjZGVmaW5lIHptd19idWZfd3JpdGVoKGRldiwgYnVmLCBvZmZzZXQsIHZhbHVlKSB6ZndCdWZXcml0ZUhhbGZXb3JkKGRldiwgYnVmLCBvZmZzZXQsIHZhbHVlKQorI2RlZmluZSB6bXdfYnVmX2dldF9idWZmZXIoZGV2LCBidWYpIHpmd0dldEJ1ZmZlcihkZXYsIGJ1ZikKKworI2VuZGlmCisKKy8qKioqKiBEZWJ1ZyBtZXNzYWdlICoqKioqLworI2lmIDAKKyNkZWZpbmUgem1fZGVidWdfbXNnMChtc2cpIHByaW50aygiJXM6JXNcbiIsIF9fRlVOQ1RJT05fXywgbXNnKTsKKyNkZWZpbmUgem1fZGVidWdfbXNnMShtc2csIHZhbCkgcHJpbnRrKCIlczolcyVsZFxuIiwgX19GVU5DVElPTl9fLCBcCisgICAgICAgIG1zZywgKHUzMl90KXZhbCk7CisjZGVmaW5lIHptX2RlYnVnX21zZzIobXNnLCB2YWwpIHByaW50aygiJXM6JXMlbHhoXG4iLCBfX0ZVTkNUSU9OX18sIFwKKyAgICAgICAgbXNnLCAodTMyX3QpdmFsKTsKKyNkZWZpbmUgem1fZGVidWdfbXNnX3MobXNnLCB2YWwpIHByaW50aygiJXM6JXMlc1xuIiwgX19GVU5DVElPTl9fLCBcCisgICAgICAgIG1zZywgdmFsKTsKKyNkZWZpbmUgem1fZGVidWdfbXNnX3AobXNnLCB2YWwxLCB2YWwyKSBwcmludGsoIiVzOiVzJTAxbGQuJTAybGRcbiIsIF9fRlVOQ1RJT05fXywgXAorICAgICAgICBtc2csICh2YWwxL3ZhbDIpLCAoKCh2YWwxKjEwMCkvdmFsMiklMTAwKSk7CisjZGVmaW5lIHptX2RiZyhTKSBwcmludGsgUworI2Vsc2UKKyNkZWZpbmUgem1fZGVidWdfbXNnMChtc2cpCisjZGVmaW5lIHptX2RlYnVnX21zZzEobXNnLCB2YWwpCisjZGVmaW5lIHptX2RlYnVnX21zZzIobXNnLCB2YWwpCisjZGVmaW5lIHptX2RlYnVnX21zZ19zKG1zZywgdmFsKQorI2RlZmluZSB6bV9kZWJ1Z19tc2dfcChtc2csIHZhbDEsIHZhbDIpCisjZGVmaW5lIHptX2RiZyhTKQorI2VuZGlmCisKKyNkZWZpbmUgem1fYXNzZXJ0KGV4cHIpIGlmKCEoZXhwcikpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHByaW50ayggIkF0aGVvcnMgQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwgICBcCisgICAgICAgICNleHByLF9fRklMRV9fLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7ICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9CisKKyNkZWZpbmUgRGJnUHJpbnQgcHJpbnRrCisKKyNlbmRpZiAvKiAjaWZuZGVmIF9PQUxfTUFSQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy91c2JkcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3VzYmRydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxODRhZjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy91c2JkcnYuYwpAQCAtMCwwICsxLDEyMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworLyogIE1vZHVsZSBOYW1lIDogdXNiZHJ2LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQWJzdHJhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgIFRoaXMgbW9kdWxlIGNvbnRhaW5zIG5ldHdvcmsgaW50ZXJmYWNlIHVwL2Rvd24gcmVsYXRlZCBmdW5jdGlvbnMuKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTk9URVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgIFBsYXRmb3JtIGRlcGVuZGVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBzcmMvdXNiZHJ2LmMgKi8KKworI2RlZmluZSBaTV9QSUJTU19NT0RFICAgMAorI2RlZmluZSBaTV9BUF9NT0RFICAgICAgMAorI2RlZmluZSBaTV9DSEFOTkVMICAgICAgMTEKKyNkZWZpbmUgWk1fV0VQX01PTUUgICAgIDAKKyNkZWZpbmUgWk1fU0hBUkVfQVVUSCAgIDAKKyNkZWZpbmUgWk1fRElTQUJMRV9YTUlUIDAKKworI2luY2x1ZGUgInVzYmRydi5oIgorI2luY2x1ZGUgIm9hbF9kdC5oIgorI2luY2x1ZGUgIjgwMjExY29yZS9wdWJfemZpLmgiCisKKyNpbmNsdWRlICJsaW51eC9uZXRsaW5rLmgiCisjaW5jbHVkZSAibGludXgvcnRuZXRsaW5rLmgiCisKKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjZW5kaWYKKworI2lmZGVmIFpNX0hPU1RBUERfU1VQUE9SVAorI2luY2x1ZGUgImF0aHJfY29tbW9uLmgiCisjZW5kaWYKKworZXh0ZXJuIHZvaWQgemZEdW1wRGVzY3JpcHRvcih6ZGV2X3QqIGRldiwgdTE2X3QgdHlwZSk7CisvL2V4dGVybiB2b2lkIHpmaVdsYW5RdWVyeU1hY0FkZHJlc3MoemRldl90KiBkZXYsIHU4X3QqIGFkZHIpOworCisvLyBJU1IgaGFuZGxlcgorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMCkpCitpcnFyZXR1cm5fdCB1c2JkcnZfaW50cihpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisjZWxzZQordm9pZCB1c2JkcnZfaW50cihpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CisjZW5kaWYKKworLy8gTmV0d29yayBEZXZpY2UgaW50ZXJmYWNlIHJlbGF0ZWQgZnVuY3Rpb24KK2ludCB1c2JkcnZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK2ludCB1c2JkcnZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKik7CitpbnQgdXNiZHJ2X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50KTsKK2ludCB1c2JkcnZfc2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqLCB2b2lkICopOworaW50IHVzYmRydl94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOwordm9pZCB1c2JkcnZfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnVzYmRydl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKik7CisKKy8vd2lyZWxlc3MgZXh0ZW5zaW9uIGhlbHBlciBmdW5jdGlvbnMKK2ludCB1c2JkcnZfaW9jdGxfc2V0ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3BvaW50ICplcnEpOworaW50IHVzYmRydl9pb2N0bF9nZXRlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcG9pbnQgKmVycSk7CitpbnQgdXNiZHJ2X2lvY3RsX3NldHJ0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcGFyYW0gKnJycSk7CisvKiBXaXJlbGVzcyBFeHRlbnNpb24gSGFuZGxlciBmdW5jdGlvbnMgKi8KK2ludCB1c2JkcnZ3ZXh0X2dpd21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyogaW5mbywKKyAgICAgICAgX191MzIgKm1vZGUsIGNoYXIgKmV4dHJhKTsKK2ludCB6ZkxueFByaXZhdGVJb2N0bChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AsIHN0cnVjdCB6ZGFwX2lvY3RsICp6ZHJlcSk7CisKK3ZvaWQgemZMbngxMG1zVGltZXIoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7CitpbnQgemZVbnJlZ2lzdGVyV2RzRGV2KHN0cnVjdCBuZXRfZGV2aWNlKiBwYXJlbnREZXYsIHUxNl90IHdkc0lkKTsKK2ludCB6ZlJlZ2lzdGVyV2RzRGV2KHN0cnVjdCBuZXRfZGV2aWNlKiBwYXJlbnREZXYsIHUxNl90IHdkc0lkKTsKK2ludCB6Zldkc09wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgemZXZHNDbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2ludCB6ZkxueFZhcE9wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgemZMbnhWYXBDbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2ludCB6ZkxueFZhcFhtaXRGcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2ludCB6ZkxueFJlZ2lzdGVyVmFwRGV2KHN0cnVjdCBuZXRfZGV2aWNlKiBwYXJlbnREZXYsIHUxNl90IHZhcElkKTsKK2ludCB1c2JkcnZfd3BhX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBhdGhyX3dsYW5fcGFyYW0gKnpkcGFybSk7CitleHRlcm4gdTE2X3QgemZMbnhHZXRWYXBJZCh6ZGV2X3QqIGRldik7CitleHRlcm4gdTE2X3QgemZMbnhDaGVja1R4QnVmZmVyQ250KHpkZXZfdCAqZGV2KTsKK2V4dGVybiBVc2JUeFFfdCAqemZMbnhHZXRVc2JUeEJ1ZmZlcih6ZGV2X3QgKmRldik7CisKK2V4dGVybiB1MTZfdCB6ZkxueEF1dGhOb3RpZnkoemRldl90KiBkZXYsIHUxNl90KiBtYWNBZGRyKTsKK2V4dGVybiB1MTZfdCB6ZkxueEFzb2NOb3RpZnkoemRldl90KiBkZXYsIHUxNl90KiBtYWNBZGRyLCB1OF90KiBib2R5LCB1MTZfdCBib2R5U2l6ZSwgdTE2X3QgcG9ydCk7CitleHRlcm4gdTE2X3QgemZMbnhEaXNBc29jTm90aWZ5KHpkZXZfdCogZGV2LCB1OF90KiBtYWNBZGRyLCB1MTZfdCBwb3J0KTsKK2V4dGVybiB1MTZfdCB6ZkxueEFwQ29ubmVjdE5vdGlmeSh6ZGV2X3QqIGRldiwgdThfdCogbWFjQWRkciwgdTE2X3QgcG9ydCk7CitleHRlcm4gdm9pZCB6ZkxueENvbm5lY3ROb3RpZnkoemRldl90KiBkZXYsIHUxNl90IHN0YXR1cywgdTE2X3QqIGJzc2lkKTsKK2V4dGVybiB2b2lkIHpmTG54U2Nhbk5vdGlmeSh6ZGV2X3QqIGRldiwgc3RydWN0IHpzU2NhblJlc3VsdCogcmVzdWx0KTsKK2V4dGVybiB2b2lkIHpmTG54U3RhdGlzdGljc05vdGlmeSh6ZGV2X3QqIGRldiwgc3RydWN0IHpzU3Rhc3RpY3MqIHJlc3VsdCk7CitleHRlcm4gdm9pZCB6ZkxueE1pY0ZhaWx1cmVOb3RpZnkoemRldl90KiBkZXYsIHUxNl90KiBhZGRyLCB1MTZfdCBzdGF0dXMpOworZXh0ZXJuIHZvaWQgemZMbnhBcE1pY0ZhaWx1cmVOb3RpZnkoemRldl90KiBkZXYsIHU4X3QqIGFkZHIsIHpidWZfdCogYnVmKTsKK2V4dGVybiB2b2lkIHpmTG54SWJzc1BhcnRuZXJOb3RpZnkoemRldl90KiBkZXYsIHUxNl90IHN0YXR1cywgc3RydWN0IHpzUGFydG5lck5vdGlmeUV2ZW50ICpldmVudCk7CitleHRlcm4gdm9pZCB6ZkxueE1hY0FkZHJlc3NOb3RpZnkoemRldl90KiBkZXYsIHU4X3QqIGFkZHIpOworZXh0ZXJuIHZvaWQgemZMbnhTZW5kQ29tcGxldGVJbmRpY2F0aW9uKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1Zik7CitleHRlcm4gdm9pZCB6ZkxueFJlY3ZFdGgoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBwb3J0KTsKK2V4dGVybiB2b2lkIHpmTG54UmVzdG9yZUJ1ZkRhdGEoemRldl90KiBkZXYsIHpidWZfdCogYnVmKTsKKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQworZXh0ZXJuIHUxNl90IHpmTG54Q2VuY0Fzb2NOb3RpZnkoemRldl90KiBkZXYsIHUxNl90KiBtYWNBZGRyLCB1OF90KiBib2R5LCB1MTZfdCBib2R5U2l6ZSwgdTE2X3QgcG9ydCk7CisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworZXh0ZXJuIHZvaWQgemZMbnhXYXRjaERvZ05vdGlmeSh6ZGV2X3QqIGRldik7CitleHRlcm4gdm9pZCB6ZkxueFJlY3Y4MDIxMSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHN0cnVjdCB6c0FkZGl0aW9uSW5mbyogYWRkSW5mbyk7CitleHRlcm4gdThfdCB6ZkxueENyZWF0ZVRocmVhZCh6ZGV2X3QgKmRldik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICBQIFUgQiBMIEkgQyAgIEQgQSBUIEEKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKy8qIERlZmluaXRpb24gb2YgV2lyZWxlc3MgRXh0ZW5zaW9uICovCisKKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjZW5kaWYKKy8vd2lyZWxlc3MgZXh0ZW5zaW9uIGhlbHBlciBmdW5jdGlvbnMKK2V4dGVybiBpbnQgdXNiZHJ2X2lvY3RsX3NldGVzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19wb2ludCAqZXJxKTsKK2V4dGVybiBpbnQgdXNiZHJ2X2lvY3RsX3NldHJ0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcGFyYW0gKnJycSk7CisvKiBXaXJlbGVzcyBFeHRlbnNpb24gSGFuZGxlciBmdW5jdGlvbnMgKi8KK2V4dGVybiBpbnQgdXNiZHJ2d2V4dF9naXduYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycSwgY2hhciAqZXh0cmEpOworZXh0ZXJuIGludCB1c2JkcnZ3ZXh0X3Npd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICAgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKTsKK2V4dGVybiBpbnQgdXNiZHJ2d2V4dF9naXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSk7CitleHRlcm4gaW50IHVzYmRydndleHRfc2l3bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnEsIGNoYXIgKmV4dHJhKTsKK2V4dGVybiBpbnQgdXNiZHJ2d2V4dF9naXdtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgIF9fdTMyICptb2RlLCBjaGFyICpleHRyYSk7CitleHRlcm4gaW50IHVzYmRydndleHRfc2l3c2VucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfcGFyYW0gKnNlbnMsIGNoYXIgKmV4dHJhKTsKK2V4dGVybiBpbnQgdXNiZHJ2d2V4dF9naXdzZW5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wYXJhbSAqc2VucywgY2hhciAqZXh0cmEpOworZXh0ZXJuIGludCB1c2JkcnZ3ZXh0X2dpd3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpOworZXh0ZXJuIGludCB1c2JkcnZ3ZXh0X3Npd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqTWFjQWRkciwgY2hhciAqZXh0cmEpOworZXh0ZXJuIGludCB1c2JkcnZ3ZXh0X2dpd2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqTWFjQWRkciwgY2hhciAqZXh0cmEpOworZXh0ZXJuIGludCB1c2JkcnZ3ZXh0X2l3YXBsaXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpOworZXh0ZXJuIGludCB1c2JkcnZ3ZXh0X3Npd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSk7CitleHRlcm4gaW50IHVzYmRydndleHRfZ2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKTsKK2V4dGVybiBpbnQgdXNiZHJ2d2V4dF9zaXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVzc2lkLCBjaGFyICpleHRyYSk7CitleHRlcm4gaW50IHVzYmRydndleHRfZ2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICAgICAgc3RydWN0IGl3X3BvaW50ICplc3NpZCwgY2hhciAqZXh0cmEpOworZXh0ZXJuIGludCB1c2JkcnZ3ZXh0X3Npd25pY2tuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqbmlja25hbWUpOworZXh0ZXJuIGludCB1c2JkcnZ3ZXh0X2dpd25pY2tuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqbmlja25hbWUpOworZXh0ZXJuIGludCB1c2JkcnZ3ZXh0X3Npd3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKyAgICAgICAgc3RydWN0IGl3X3BhcmFtICpmcnEsIGNoYXIgKmV4dHJhKTsKK2V4dGVybiBpbnQgdXNiZHJ2d2V4dF9naXdyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqZnJxLCBjaGFyICpleHRyYSk7CitleHRlcm4gaW50IHVzYmRydndleHRfc2l3cnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSk7CitleHRlcm4gaW50IHVzYmRydndleHRfZ2l3cnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSk7CitleHRlcm4gaW50IHVzYmRydndleHRfc2l3ZnJhZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKTsKK2V4dGVybiBpbnQgdXNiZHJ2d2V4dF9naXdmcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpOworZXh0ZXJuIGludCB1c2JkcnZ3ZXh0X3Npd3R4cG93KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSk7CitleHRlcm4gaW50IHVzYmRydndleHRfZ2l3dHhwb3coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKTsKK2V4dGVybiBpbnQgdXNiZHJ2d2V4dF9zaXdyZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCSAgICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpOworZXh0ZXJuIGludCB1c2JkcnZ3ZXh0X2dpd3JldHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJICAgIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSk7CitleHRlcm4gaW50IHVzYmRydndleHRfc2l3ZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgIHN0cnVjdCBpd19wb2ludCAqZXJxLCBjaGFyICprZXkpOworZXh0ZXJuIGludCB1c2JkcnZ3ZXh0X2dpd2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqa2V5KTsKK2V4dGVybiBpbnQgdXNiZHJ2d2V4dF9zaXdwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZycSwgY2hhciAqZXh0cmEpOworZXh0ZXJuIGludCB1c2JkcnZ3ZXh0X2dpd3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqZnJxLCBjaGFyICpleHRyYSk7CitleHRlcm4gaW50IHVzYmRydl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7CisvKgorICogU3RydWN0dXJlcyB0byBleHBvcnQgdGhlIFdpcmVsZXNzIEhhbmRsZXJzCisgKi8KKworc3RydWN0IGl3X3ByaXZfYXJncyB1c2JkcnZfcHJpdmF0ZV9hcmdzW10gPSB7CisvLyAgICB7IFNJT0NJV0ZJUlNUUFJJViArIDB4MCwgMCwgMCwgImxpc3RfYnNzIiB9LAorLy8gICAgeyBTSU9DSVdGSVJTVFBSSVYgKyAweDEsIDAsIDAsICJjYXJkX3Jlc2V0IiB9LAorICAgIHsgU0lPQ0lXRklSU1RQUklWICsgMHgyLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgMCwgInNldF9hdXRoIiB9LCAgLyogMCAtIG9wZW4sIDEgLSBzaGFyZWQga2V5ICovCisgICAgeyBTSU9DSVdGSVJTVFBSSVYgKyAweDMsIDAsIElXX1BSSVZfVFlQRV9DSEFSIHwgMTIsICJnZXRfYXV0aCIgfSwKKy8vICAgIHsgU0lPQ0lXRklSU1RQUklWICsgMHg0LCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgMCwgInNldF9wcmVhbWJsZSIgfSwgIC8qIDAgLSBsb25nLCAxIC0gc2hvcnQgKi8KKy8vICAgIHsgU0lPQ0lXRklSU1RQUklWICsgMHg1LCAwLCBJV19QUklWX1RZUEVfQ0hBUiB8IDYsICJnZXRfcHJlYW1ibGUiIH0sCisvLyAgICB7IFNJT0NJV0ZJUlNUUFJJViArIDB4NiwgMCwgMCwgImNudCIgfSwKKy8vICAgIHsgU0lPQ0lXRklSU1RQUklWICsgMHg3LCAwLCAwLCAicmVncyIgfSwKKy8vICAgIHsgU0lPQ0lXRklSU1RQUklWICsgMHg4LCAwLCAwLCAicHJvYmUiIH0sCisvLyAgICB7IFNJT0NJV0ZJUlNUUFJJViArIDB4OSwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsICJkYmdfZmxhZyIgfSwKKy8vICAgIHsgU0lPQ0lXRklSU1RQUklWICsgMHhBLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgMCwgImNvbm5lY3QiIH0sCisvLyAgICB7IFNJT0NJV0ZJUlNUUFJJViArIDB4QiwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsICJzZXRfbWFjX21vZGUiIH0sCisvLyAgICB7IFNJT0NJV0ZJUlNUUFJJViArIDB4QywgMCwgSVdfUFJJVl9UWVBFX0NIQVIgfCAxMiwgImdldF9tYWNfbW9kZSIgfSwKK307CisKKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorc3RhdGljIGl3X2hhbmRsZXIgdXNiZHJ2d2V4dF9oYW5kbGVyW10gPSB7CisgICAgKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ1NJV0NPTU1JVCAqLworICAgIChpd19oYW5kbGVyKSB1c2JkcnZ3ZXh0X2dpd25hbWUsICAgICAgICAgICAgICAgIC8qIFNJT0NHSVdOQU1FICovCisgICAgKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ1NJV05XSUQgKi8KKyAgICAoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTSU9DR0lXTldJRCAqLworICAgIChpd19oYW5kbGVyKSB1c2JkcnZ3ZXh0X3Npd2ZyZXEsICAgICAgICAgICAgICAgIC8qIFNJT0NTSVdGUkVRICovCisgICAgKGl3X2hhbmRsZXIpIHVzYmRydndleHRfZ2l3ZnJlcSwgICAgICAgICAgICAgICAgLyogU0lPQ0dJV0ZSRVEgKi8KKyAgICAoaXdfaGFuZGxlcikgdXNiZHJ2d2V4dF9zaXdtb2RlLCAgICAgICAgICAgICAgICAvKiBTSU9DU0lXTU9ERSAqLworICAgIChpd19oYW5kbGVyKSB1c2JkcnZ3ZXh0X2dpd21vZGUsICAgICAgICAgICAgICAgIC8qIFNJT0NHSVdNT0RFICovCisgICAgKGl3X2hhbmRsZXIpIHVzYmRydndleHRfc2l3c2VucywgICAgICAgICAgICAgICAgLyogU0lPQ1NJV1NFTlMgKi8KKyAgICAoaXdfaGFuZGxlcikgdXNiZHJ2d2V4dF9naXdzZW5zLCAgICAgICAgICAgICAgICAvKiBTSU9DR0lXU0VOUyAqLworICAgIChpd19oYW5kbGVyKSBOVUxMLCAvKiBub3QgdXNlZCAqLyAgICAgICAgICAgICAgIC8qIFNJT0NTSVdSQU5HRSAqLworICAgIChpd19oYW5kbGVyKSB1c2JkcnZ3ZXh0X2dpd3JhbmdlLCAgICAgICAgICAgICAgIC8qIFNJT0NHSVdSQU5HRSAqLworICAgIChpd19oYW5kbGVyKSBOVUxMLCAvKiBub3QgdXNlZCAqLyAgICAgICAgICAgICAgIC8qIFNJT0NTSVdQUklWICovCisgICAgKGl3X2hhbmRsZXIpIE5VTEwsIC8qIGtlcm5lbCBjb2RlICovICAgICAgICAgICAgLyogU0lPQ0dJV1BSSVYgKi8KKyAgICAoaXdfaGFuZGxlcikgTlVMTCwgLyogbm90IHVzZWQgKi8gICAgICAgICAgICAgICAvKiBTSU9DU0lXU1RBVFMgKi8KKyAgICAoaXdfaGFuZGxlcikgTlVMTCwgLyoga2VybmVsIGNvZGUgKi8gICAgICAgICAgICAvKiBTSU9DR0lXU1RBVFMgKi8KKyAgICAoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTSU9DU0lXU1BZICovCisgICAgKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU0lPQ0dJV1NQWSAqLworICAgIChpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC0tIGhvbGUgLS0gKi8KKyAgICAoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtLSBob2xlIC0tICovCisgICAgKGl3X2hhbmRsZXIpIHVzYmRydndleHRfc2l3YXAsICAgICAgICAgICAgICAgICAgLyogU0lPQ1NJV0FQICovCisgICAgKGl3X2hhbmRsZXIpIHVzYmRydndleHRfZ2l3YXAsICAgICAgICAgICAgICAgICAgLyogU0lPQ0dJV0FQICovCisgICAgKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAvKiAtLSBob2xlIC0tICovCisgICAgKGl3X2hhbmRsZXIpIHVzYmRydndleHRfaXdhcGxpc3QsICAgICAgICAgICAgICAgLyogU0lPQ0dJV0FQTElTVCAqLworI2lmIFdJUkVMRVNTX0VYVCA+IDEzCisgICAgKGl3X2hhbmRsZXIpIHVzYmRydndleHRfc2l3c2NhbiwgICAgICAgICAgICAgICAgLyogU0lPQ1NJV1NDQU4gKi8KKyAgICAoaXdfaGFuZGxlcikgdXNiZHJ2d2V4dF9naXdzY2FuLCAgICAgICAgICAgICAgICAvKiBTSU9DR0lXU0NBTiAqLworI2Vsc2UgLyogV0lSRUxFU1NfRVhUID4gMTMgKi8KKyAgICAoaXdfaGFuZGxlcikgTlVMTCwgLyogbnVsbCAqLyAgICAgICAgICAgICAgICAgICAvKiBTSU9DU0lXU0NBTiAqLworICAgIChpd19oYW5kbGVyKSBOVUxMLCAvKiBudWxsICovICAgICAgICAgICAgICAgICAgIC8qIFNJT0NHSVdTQ0FOICovCisjZW5kaWYgLyogV0lSRUxFU1NfRVhUID4gMTMgKi8KKyAgICAoaXdfaGFuZGxlcikgdXNiZHJ2d2V4dF9zaXdlc3NpZCwgICAgICAgICAgICAgICAvKiBTSU9DU0lXRVNTSUQgKi8KKyAgICAoaXdfaGFuZGxlcikgdXNiZHJ2d2V4dF9naXdlc3NpZCwgICAgICAgICAgICAgICAvKiBTSU9DR0lXRVNTSUQgKi8KKworICAgIChpd19oYW5kbGVyKSB1c2JkcnZ3ZXh0X3Npd25pY2tuLCAgICAgICAgICAgICAgIC8qIFNJT0NTSVdOSUNLTiAqLworICAgIChpd19oYW5kbGVyKSB1c2JkcnZ3ZXh0X2dpd25pY2tuLCAgICAgICAgICAgICAgIC8qIFNJT0NHSVdOSUNLTiAqLworICAgIChpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC0tIGhvbGUgLS0gKi8KKyAgICAoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtLSBob2xlIC0tICovCisgICAgKGl3X2hhbmRsZXIpIHVzYmRydndleHRfc2l3cmF0ZSwgICAgICAgICAgICAgICAgLyogU0lPQ1NJV1JBVEUgKi8KKyAgICAoaXdfaGFuZGxlcikgdXNiZHJ2d2V4dF9naXdyYXRlLCAgICAgICAgICAgICAgICAvKiBTSU9DR0lXUkFURSAqLworICAgIChpd19oYW5kbGVyKSB1c2JkcnZ3ZXh0X3Npd3J0cywgICAgICAgICAgICAgICAgIC8qIFNJT0NTSVdSVFMgKi8KKyAgICAoaXdfaGFuZGxlcikgdXNiZHJ2d2V4dF9naXdydHMsICAgICAgICAgICAgICAgICAvKiBTSU9DR0lXUlRTICovCisgICAgKGl3X2hhbmRsZXIpIHVzYmRydndleHRfc2l3ZnJhZywgICAgICAgICAgICAgICAgLyogU0lPQ1NJV0ZSQUcgKi8KKyAgICAoaXdfaGFuZGxlcikgdXNiZHJ2d2V4dF9naXdmcmFnLCAgICAgICAgICAgICAgICAvKiBTSU9DR0lXRlJBRyAqLworICAgIChpd19oYW5kbGVyKSB1c2JkcnZ3ZXh0X3Npd3R4cG93LCAgICAgICAgICAgICAgIC8qIFNJT0NTSVdUWFBPVyAqLworICAgIChpd19oYW5kbGVyKSB1c2JkcnZ3ZXh0X2dpd3R4cG93LCAgICAgICAgICAgICAgIC8qIFNJT0NHSVdUWFBPVyAqLworICAgIChpd19oYW5kbGVyKSB1c2JkcnZ3ZXh0X3Npd3JldHJ5LCAgICAgICAgICAgICAgIC8qIFNJT0NTSVdSRVRSWSAqLworICAgIChpd19oYW5kbGVyKSB1c2JkcnZ3ZXh0X2dpd3JldHJ5LCAgICAgICAgICAgICAgIC8qIFNJT0NHSVdSRVRSWSAqLworICAgIChpd19oYW5kbGVyKSB1c2JkcnZ3ZXh0X3Npd2VuY29kZSwgICAgICAgICAgICAgIC8qIFNJT0NTSVdFTkNPREUgKi8KKyAgICAoaXdfaGFuZGxlcikgdXNiZHJ2d2V4dF9naXdlbmNvZGUsICAgICAgICAgICAgICAvKiBTSU9DR0lXRU5DT0RFICovCisgICAgKGl3X2hhbmRsZXIpIHVzYmRydndleHRfc2l3cG93ZXIsICAgICAgICAgICAgICAgLyogU0lPQ1NJV1BPV0VSICovCisgICAgKGl3X2hhbmRsZXIpIHVzYmRydndleHRfZ2l3cG93ZXIsICAgICAgICAgICAgICAgLyogU0lPQ0dJV1BPV0VSICovCit9OworCitzdGF0aWMgY29uc3QgaXdfaGFuZGxlciB1c2JkcnZfcHJpdmF0ZV9oYW5kbGVyW10gPQoreworCS8vKGl3X2hhbmRsZXIpIHVzYmRydndleHRfc2V0cGFyYW0sCQkvKiBTSU9DV0ZJUlNUUFJJViswICovCisJLy8oaXdfaGFuZGxlcikgdXNiZHJ2d2V4dF9nZXRwYXJhbSwJCS8qIFNJT0NXRklSU1RQUklWKzEgKi8KKwkvLyhpd19oYW5kbGVyKSB1c2JkcnZ3ZXh0X3NldGtleSwJCSAgICAvKiBTSU9DV0ZJUlNUUFJJVisyICovCisJLy8oaXdfaGFuZGxlcikgdXNiZHJ2d2V4dF9zZXR3bW1wYXJhbXMsCS8qIFNJT0NXRklSU1RQUklWKzMgKi8KKwkvLyhpd19oYW5kbGVyKSB1c2JkcnZ3ZXh0X2RlbGtleSwJCSAgICAvKiBTSU9DV0ZJUlNUUFJJVis0ICovCisJLy8oaXdfaGFuZGxlcikgdXNiZHJ2d2V4dF9nZXR3bW1wYXJhbXMsCS8qIFNJT0NXRklSU1RQUklWKzUgKi8KKwkvLyhpd19oYW5kbGVyKSB1c2JkcnZ3ZXh0X3NldG1sbWUsCQkvKiBTSU9DV0ZJUlNUUFJJVis2ICovCisJLy8oaXdfaGFuZGxlcikgdXNiZHJ2d2V4dF9nZXRjaGFuaW5mbywJLyogU0lPQ1dGSVJTVFBSSVYrNyAqLworCS8vKGl3X2hhbmRsZXIpIHVzYmRydndleHRfc2V0b3B0aWUsCQkvKiBTSU9DV0ZJUlNUUFJJVis4ICovCisJLy8oaXdfaGFuZGxlcikgdXNiZHJ2d2V4dF9nZXRvcHRpZSwJCS8qIFNJT0NXRklSU1RQUklWKzkgKi8KKwkvLyhpd19oYW5kbGVyKSB1c2JkcnZ3ZXh0X2FkZG1hYywJCSAgICAvKiBTSU9DV0ZJUlNUUFJJVisxMCAqLworCS8vKGl3X2hhbmRsZXIpIHVzYmRydndleHRfZ2V0c2NhbnJlc3VsdHMsCS8qIFNJT0NXRklSU1RQUklWKzExICovCisJLy8oaXdfaGFuZGxlcikgdXNiZHJ2d2V4dF9kZWxtYWMsCQkgICAgLyogU0lPQ1dGSVJTVFBSSVYrMTIgKi8KKwkvLyhpd19oYW5kbGVyKSB1c2JkcnZ3ZXh0X2dldGNoYW5saXN0LAkvKiBTSU9DV0ZJUlNUUFJJVisxMyAqLworCS8vKGl3X2hhbmRsZXIpIHVzYmRydndleHRfc2V0Y2hhbmxpc3QsCS8qIFNJT0NXRklSU1RQUklWKzE0ICovCisJLy8oaXdfaGFuZGxlcikgTlVMTCwJCQkJICAgICAgICAvKiBTSU9DV0ZJUlNUUFJJVisxNSAqLworCS8vKGl3X2hhbmRsZXIpIHVzYmRydndleHRfY2hhbnN3aXRjaCwJICAgIC8qIFNJT0NXRklSU1RQUklWKzE2ICovCisJLy8oaXdfaGFuZGxlcikgdXNiZHJ2d2V4dF9zZXRtb2RlLAkJLyogU0lPQ1dGSVJTVFBSSVYrMTcgKi8KKwkvLyhpd19oYW5kbGVyKSB1c2JkcnZ3ZXh0X2dldG1vZGUsCQkvKiBTSU9DV0ZJUlNUUFJJVisxOCAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgLyogU0lPQ0lXRklSU1RQUklWICovCit9OworCitzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgcDgwMjExd2V4dF9oYW5kbGVyX2RlZiA9IHsKKyAgICAubnVtX3N0YW5kYXJkID0gc2l6ZW9mKHVzYmRydndleHRfaGFuZGxlcikgLyBzaXplb2YoaXdfaGFuZGxlciksCisgICAgLm51bV9wcml2YXRlID0gc2l6ZW9mKHVzYmRydl9wcml2YXRlX2hhbmRsZXIpL3NpemVvZihpd19oYW5kbGVyKSwKKyAgICAubnVtX3ByaXZhdGVfYXJncyA9IHNpemVvZih1c2JkcnZfcHJpdmF0ZV9hcmdzKS9zaXplb2Yoc3RydWN0IGl3X3ByaXZfYXJncyksCisgICAgLnN0YW5kYXJkID0gdXNiZHJ2d2V4dF9oYW5kbGVyLAorICAgIC5wcml2YXRlID0gKGl3X2hhbmRsZXIgKikgdXNiZHJ2X3ByaXZhdGVfaGFuZGxlciwKKyAgICAucHJpdmF0ZV9hcmdzID0gKHN0cnVjdCBpd19wcml2X2FyZ3MgKikgdXNiZHJ2X3ByaXZhdGVfYXJncworfTsKKyNlbmRpZgorCisvKiBXRFMgKi8KKy8vc3RydWN0IHpzV2RzU3RydWN0IHdkc1taTV9XRFNfUE9SVF9OVU1CRVJdOworLy92b2lkIHpmSW5pdFdkc1N0cnVjdCh2b2lkKTsKKworLyogVkFQICovCitzdHJ1Y3QgenNWYXBTdHJ1Y3QgdmFwW1pNX1ZBUF9QT1JUX05VTUJFUl07Cit2b2lkIHpmTG54SW5pdFZhcFN0cnVjdCh2b2lkKTsKKworCisvKioKKyAqIHVzYmRydl9pbnRyIC0gaW50ZXJydXB0IGhhbmRsZXIKKyAqIEBpcnE6IHRoZSBJUlEgbnVtYmVyCisgKiBAZGV2X2luc3Q6IHRoZSBuZXRfZGV2aWNlIHN0cnVjdAorICogQHJlZ3M6IHJlZ2lzdGVycyAodW51c2VkKQorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgSVNSIGZvciB0aGUgdXNiZHJ2IGJvYXJkLiBJdCBzZXJ2aWNlcworICogdGhlIFJYICYgVFggcXVldWVzICYgc3RhcnRzIHRoZSBSVSBpZiBpdCBoYXMgc3RvcHBlZCBkdWUKKyAqIHRvIG5vIHJlc291cmNlcy4KKyAqLworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDApKQoraXJxcmV0dXJuX3QgdXNiZHJ2X2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2luc3QsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorI2Vsc2UKK3ZvaWQgdXNiZHJ2X2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2luc3QsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorI2VuZGlmCit7CisgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3A7CisKKyAgICBkZXYgPSBkZXZfaW5zdDsKKyAgICBtYWNwID0gZGV2LT5wcml2OworCisKKyAgICAvKiBSZWFkIHJlZ2lzdGVyIGVycm9yLCBjYXJkIG1heSBiZSB1bnBsdWdlZCAqLworICAgIGlmICgwKS8vKGludHJfc3RhdHVzID09IC0xKQorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDApKQorICAgICAgICByZXR1cm4gSVJRX05PTkU7CisjZWxzZQorICAgICAgICByZXR1cm47CisjZW5kaWYKKworICAgIC8qIHRoZSBkZXZpY2UgaXMgY2xvc2VkLCBkb24ndCBjb250aW51ZSBvciBlbHNlIGJhZCB0aGluZ3MgbWF5IGhhcHBlbi4gKi8KKyAgICBpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDApKQorICAgICAgICByZXR1cm4gSVJRX05PTkU7CisjZWxzZQorICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAobWFjcC0+ZHJpdmVyX2lzb2xhdGVkKSB7CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMCkpCisgICAgICAgIHJldHVybiBJUlFfTk9ORTsKKyNlbHNlCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgIH0KKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKyAgICAvL3pmaUlzclBjaShkZXYpOworI2VuZGlmCisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwwKSkKKyAgICByZXR1cm4gSVJRX0hBTkRMRUQ7CisjZWxzZQorICAgIHJldHVybjsKKyNlbmRpZgorfQorCitpbnQgdXNiZHJ2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPnByaXY7CisgICAgaW50IHJjID0gMDsKKyAgICB1MTZfdCBzaXplOworICAgIHZvaWQqIG1lbTsKKyAgICAvL3Vuc2lnbmVkIGNoYXIgYWRkcls2XTsKKyAgICBzdHJ1Y3QgenNDYkZ1bmNUYmwgY2JGdW5jVGJsOworCisgICAgcHJpbnRrKCJFbnRlciBvcGVuKClcbiIpOworCisvLyNpZm5kZWYgQ09ORklHX1NNUAorLy8gICAgcmVhZF9sb2NrKCYobWFjcC0+aXNvbGF0ZV9sb2NrKSk7CisvLyNlbmRpZgorICAgIGlmIChtYWNwLT5kcml2ZXJfaXNvbGF0ZWQpIHsKKyAgICAgICAgcmMgPSAtRUJVU1k7CisgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisKKyAgICBzaXplID0gemZpR2xvYmFsRGF0YVNpemUoZGV2KTsKKyAgICBpZiAoKG1lbSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisgICAgeworICAgICAgICByYyA9IC1FQlVTWTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICBtYWNwLT53ZCA9IG1lbTsKKworICAgIG1lbXNldCgmY2JGdW5jVGJsLCAwLCBzaXplb2Yoc3RydWN0IHpzQ2JGdW5jVGJsKSk7CisgICAgY2JGdW5jVGJsLnpmY2JBdXRoTm90aWZ5ID0gemZMbnhBdXRoTm90aWZ5OworICAgIGNiRnVuY1RibC56ZmNiQXV0aE5vdGlmeSA9IHpmTG54QXV0aE5vdGlmeTsKKyAgICBjYkZ1bmNUYmwuemZjYkFzb2NOb3RpZnkgPSB6ZkxueEFzb2NOb3RpZnk7CisgICAgY2JGdW5jVGJsLnpmY2JEaXNBc29jTm90aWZ5ID0gemZMbnhEaXNBc29jTm90aWZ5OworICAgIGNiRnVuY1RibC56ZmNiQXBDb25uZWN0Tm90aWZ5ID0gemZMbnhBcENvbm5lY3ROb3RpZnk7CisgICAgY2JGdW5jVGJsLnpmY2JDb25uZWN0Tm90aWZ5ID0gemZMbnhDb25uZWN0Tm90aWZ5OworICAgIGNiRnVuY1RibC56ZmNiU2Nhbk5vdGlmeSA9IHpmTG54U2Nhbk5vdGlmeTsKKyAgICBjYkZ1bmNUYmwuemZjYk1pY0ZhaWx1cmVOb3RpZnkgPSB6ZkxueE1pY0ZhaWx1cmVOb3RpZnk7CisgICAgY2JGdW5jVGJsLnpmY2JBcE1pY0ZhaWx1cmVOb3RpZnkgPSB6ZkxueEFwTWljRmFpbHVyZU5vdGlmeTsKKyAgICBjYkZ1bmNUYmwuemZjYklic3NQYXJ0bmVyTm90aWZ5ID0gemZMbnhJYnNzUGFydG5lck5vdGlmeTsKKyAgICBjYkZ1bmNUYmwuemZjYk1hY0FkZHJlc3NOb3RpZnkgPSB6ZkxueE1hY0FkZHJlc3NOb3RpZnk7CisgICAgY2JGdW5jVGJsLnpmY2JTZW5kQ29tcGxldGVJbmRpY2F0aW9uID0gemZMbnhTZW5kQ29tcGxldGVJbmRpY2F0aW9uOworICAgIGNiRnVuY1RibC56ZmNiUmVjdkV0aCA9IHpmTG54UmVjdkV0aDsKKyAgICBjYkZ1bmNUYmwuemZjYlJlY3Y4MDIxMSA9IHpmTG54UmVjdjgwMjExOworICAgIGNiRnVuY1RibC56ZmNiUmVzdG9yZUJ1ZkRhdGEgPSB6ZkxueFJlc3RvcmVCdWZEYXRhOworI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisgICAgY2JGdW5jVGJsLnpmY2JDZW5jQXNvY05vdGlmeSA9IHpmTG54Q2VuY0Fzb2NOb3RpZnk7CisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworICAgIGNiRnVuY1RibC56ZmNiSHdXYXRjaERvZ05vdGlmeSA9IHpmTG54V2F0Y2hEb2dOb3RpZnk7CisgICAgemZpV2xhbk9wZW4oZGV2LCAmY2JGdW5jVGJsKTsKKworI2lmIDAKKyAgICB7CisgICAgICAgIC8vdTE2X3QgbWFjWzNdID0gezB4MTMwMCwgMHhiNmQ0LCAweDVhYWZ9OworICAgICAgICB1MTZfdCBtYWNbM10gPSB7MHg4MDAwLCAweDAwYWIsIDB4MDAwMH07CisgICAgICAgIC8vemZpV2xhblNldE1hY0FkZHJlc3MoZGV2LCBtYWMpOworICAgIH0KKyAgICAvKiBNQUMgYWRkcmVzcyAqLworICAgIHpmaVdsYW5RdWVyeU1hY0FkZHJlc3MoZGV2LCBhZGRyKTsKKyAgICBkZXYtPmRldl9hZGRyWzBdID0gYWRkclswXTsKKyAgICBkZXYtPmRldl9hZGRyWzFdID0gYWRkclsxXTsKKyAgICBkZXYtPmRldl9hZGRyWzJdID0gYWRkclsyXTsKKyAgICBkZXYtPmRldl9hZGRyWzNdID0gYWRkclszXTsKKyAgICBkZXYtPmRldl9hZGRyWzRdID0gYWRkcls0XTsKKyAgICBkZXYtPmRldl9hZGRyWzVdID0gYWRkcls1XTsKKyNlbmRpZgorICAgIC8vemZ3TWFjQWRkcmVzc05vdGlmeSgpIHdpbGwgYmUgY2FsbGVkIHRvIHNldHVwIGRldi0+ZGV2X2FkZHJbXQorCisgICAgemZMbnhDcmVhdGVUaHJlYWQoZGV2KTsKKworICAgIG1vZF90aW1lcigmKG1hY3AtPmhiVGltZXIxMG1zKSwgamlmZmllcyArICgxKkhaKS8xMDApOyAgIC8vMTAgbXMKKworICAgIG5ldGlmX2NhcnJpZXJfb24oZGV2KTsKKworICAgIG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKyNpZiBaTV9BUF9NT0RFID09IDEKKyAgICB6ZmlXbGFuU2V0V2xhbk1vZGUoZGV2LCBaTV9NT0RFX0FQKTsKKyAgICB6ZmlXbGFuU2V0QmFzaWNSYXRlKGRldiwgMHhmLCAwLCAwKTsKKyAgICB6ZmlXbGFuU2V0U1NJRChkZXYsICJPVFVTX0NXWSIsIDgpOworICAgIHpmaVdsYW5TZXREdGltQ291bnQoZGV2LCAzKTsKKworICAjaWYgWk1fV0VQX01PTUUgPT0gMQorICAgIHsKKyAgICAgICAgdThfdCBrZXlbMTZdID0gezB4MTIsIDB4MzQsIDB4NTYsIDB4NzgsIDB4OTB9OworICAgICAgICBzdHJ1Y3QgenNLZXlJbmZvIGtleUluZm87CisKKyAgICAgICAga2V5SW5mby5rZXlMZW5ndGggPSA1OworICAgICAgICBrZXlJbmZvLmtleUluZGV4ID0gMDsKKyAgICAgICAga2V5SW5mby5mbGFnID0gMDsKKyAgICAgICAga2V5SW5mby5rZXkgPSBrZXk7CisgICAgICAgIHpmaVdsYW5TZXRLZXkoZGV2LCBrZXlJbmZvKTsKKworICAgICAgICB6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgWk1fV0VQNjQpOworICAgIH0KKworICAgICNpZiBaTV9TSEFSRV9BVVRIID09IDEKKyAgICB6ZmlXbGFuU2V0QXV0aGVudGljYXRpb25Nb2RlKGRldiwgMSk7CisgICAgI2VuZGlmIC8vI2lmIFpNX1NIQVJFX0FVVEggPT0gMQorICAjZW5kaWYgLy8jaWYgWk1fV0VQX01PTUUgPT0gMQorCisjZWxpZiBaTV9QSUJTU19NT0RFID09IDEKKyAgICB6ZmlXbGFuU2V0V2xhbk1vZGUoZGV2LCBaTV9NT0RFX1BTRVVETyk7CisjZWxzZQorICAgIHpmaVdsYW5TZXRXbGFuTW9kZShkZXYsIFpNX01PREVfSU5GUkFTVFJVQ1RVUkUpOworI2VuZGlmCisgICAgLy96ZmlXbGFuU2V0Q2hhbm5lbChkZXYsIFpNX0NIQU5ORUwsIEZBTFNFKTsKKyAgICB6ZmlXbGFuU2V0RnJlcXVlbmN5KGRldiwgMjQ2MjAwMCwgRkFMU0UpOworICAgIHpmaVdsYW5TZXRSdHNUaHJlc2hvbGQoZGV2LCAzMjc2Nyk7CisgICAgemZpV2xhblNldEZyYWdUaHJlc2hvbGQoZGV2LCAwKTsKKworICAgIHpmaVdsYW5FbmFibGUoZGV2KTsKKworI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDE0KQorICAgIG1hY3AtPm5ldGxpbmtfc2sgPSBuZXRsaW5rX2tlcm5lbF9jcmVhdGUoTkVUTElOS19VU0VSU09DSywgTlVMTCk7CisjZWxzZQorICAgIG1hY3AtPm5ldGxpbmtfc2sgPSBuZXRsaW5rX2tlcm5lbF9jcmVhdGUoTkVUTElOS19VU0VSU09DSywgMSwgTlVMTCwgVEhJU19NT0RVTEUpOworI2VuZGlmCisKKyAgICBpZiAobWFjcC0+bmV0bGlua19zayA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBjcmVhdGUgTkVUTElOSyBzb2NrZXRcbiIpOworICAgIH0KKyNlbmRpZgorCisgICAgbWFjcC0+RGV2aWNlT3BlbmVkID0gMTsKK2V4aXQ6CisvLyNpZm5kZWYgQ09ORklHX1NNUAorLy8gICAgcmVhZF91bmxvY2soJihtYWNwLT5pc29sYXRlX2xvY2spKTsKKy8vI2VuZGlmCisgICAgLy96ZlJlZ2lzdGVyV2RzRGV2KGRldiwgMCk7CisgICAgLy96ZkxueFJlZ2lzdGVyVmFwRGV2KGRldiwgMCk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKworCisKKy8qKgorICogdXNiZHJ2X2dldF9zdGF0cyAtIGdldCBkcml2ZXIgc3RhdGlzdGljcworICogQGRldjogYWRhcHRlcidzIG5ldF9kZXZpY2Ugc3RydWN0CisgKgorICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuIHRoZSBPUyB3YW50cyB0aGUgYWRhcHRlcidzIHN0YXRzIHJldHVybmVkLgorICogSXQgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgbmV0X2RldmljZV9zdGF0cyBzdHVjdHVyZSBmb3IgdGhlIGRldmljZS4KKyAqIElmIHRoZSBzdGF0aXN0aWNzIGFyZSBjdXJyZW50bHkgYmVpbmcgdXBkYXRlZCwgdGhlbiB0aGV5IG1pZ2h0IGJlIGluY29ycmVjdAorICogZm9yIGEgc2hvcnQgd2hpbGUuIEhvd2V2ZXIsIHNpbmNlIHRoaXMgY2Fubm90IGFjdHVhbGx5IGNhdXNlIGRhbWFnZSwgbm8KKyAqIGxvY2tpbmcgaXMgdXNlZC4KKyAqLworCitzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqIHVzYmRydl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPnByaXY7CisKKyAgICBtYWNwLT5kcnZfc3RhdHMubmV0X3N0YXRzLnR4X2Vycm9ycyA9CisgICAgICAgIG1hY3AtPmRydl9zdGF0cy5uZXRfc3RhdHMudHhfY2Fycmllcl9lcnJvcnMgKworICAgICAgICBtYWNwLT5kcnZfc3RhdHMubmV0X3N0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzOworCisgICAgbWFjcC0+ZHJ2X3N0YXRzLm5ldF9zdGF0cy5yeF9lcnJvcnMgPQorICAgICAgICBtYWNwLT5kcnZfc3RhdHMubmV0X3N0YXRzLnJ4X2NyY19lcnJvcnMgKworICAgICAgICBtYWNwLT5kcnZfc3RhdHMubmV0X3N0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArCisgICAgICAgIG1hY3AtPmRydl9zdGF0cy5uZXRfc3RhdHMucnhfbGVuZ3RoX2Vycm9yczsKKworCisgICAgcmV0dXJuICYobWFjcC0+ZHJ2X3N0YXRzLm5ldF9zdGF0cyk7Cit9CisKKworLyoqCisgKiB1c2JkcnZfc2V0X21hYyAtIHNldCB0aGUgTUFDIGFkZHJlc3MKKyAqIEBkZXY6IGFkYXB0ZXIncyBuZXRfZGV2aWNlIHN0cnVjdAorICogQGFkZHI6IHRoZSBuZXcgYWRkcmVzcworICoKKyAqIFRoaXMgcm91dGluZSBzZXRzIHRoZSBldGhlcm5ldCBhZGRyZXNzIG9mIHRoZSBib2FyZAorICogUmV0dXJuczoKKyAqIDAgIC0gaWYgc3VjY2Vzc2Z1bAorICogLTEgLSBvdGhlcndpc2UKKyAqLworCitpbnQgdXNiZHJ2X3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3A7CisgICAgaW50IHJjID0gLTE7CisKKyAgICBtYWNwID0gZGV2LT5wcml2OworICAgIHJlYWRfbG9jaygmKG1hY3AtPmlzb2xhdGVfbG9jaykpOworCisgICAgaWYgKG1hY3AtPmRyaXZlcl9pc29sYXRlZCkgeworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisgICAgcmMgPSAwOworCisKK2V4aXQ6CisgICAgcmVhZF91bmxvY2soJihtYWNwLT5pc29sYXRlX2xvY2spKTsKKyAgICByZXR1cm4gcmM7Cit9CisKKworCit2b2lkCit1c2JkcnZfaXNvbGF0ZV9kcml2ZXIoc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwKQoreworI2lmbmRlZiBDT05GSUdfU01QCisgICAgd3JpdGVfbG9ja19pcnEoJihtYWNwLT5pc29sYXRlX2xvY2spKTsKKyNlbmRpZgorICAgIG1hY3AtPmRyaXZlcl9pc29sYXRlZCA9IFRSVUU7CisjaWZuZGVmIENPTkZJR19TTVAKKyAgICB3cml0ZV91bmxvY2tfaXJxKCYobWFjcC0+aXNvbGF0ZV9sb2NrKSk7CisjZW5kaWYKKworICAgIGlmIChuZXRpZl9ydW5uaW5nKG1hY3AtPmRldmljZSkpCisgICAgeworICAgICAgICBuZXRpZl9jYXJyaWVyX29mZihtYWNwLT5kZXZpY2UpOworICAgICAgICBuZXRpZl9zdG9wX3F1ZXVlKG1hY3AtPmRldmljZSk7CisgICAgfQorfQorCisjZGVmaW5lIFZMQU5fU0laRSAgIAk0CitpbnQgdXNiZHJ2X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisgICAgaWYgKChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gKEVUSF9EQVRBX0xFTiArIFZMQU5fU0laRSkpKQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgIGRldi0+bXR1ID0gbmV3X210dTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCB6ZkxueFVubGlua0FsbFVyYnMoc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwKTsKKworaW50IHVzYmRydl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworZXh0ZXJuIHZvaWQgemZIcExlZEN0cmwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2X3QgbGVkSWQsIHU4X3QgbW9kZSk7CisKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPnByaXY7CisKKyAgICBwcmludGsoS0VSTl9ERUJVRyAidXNiZHJ2X2Nsb3NlXG4iKTsKKworICAgIG5ldGlmX2NhcnJpZXJfb2ZmKG1hY3AtPmRldmljZSk7CisKKyAgICBkZWxfdGltZXJfc3luYygmbWFjcC0+aGJUaW1lcjEwbXMpOworCisgICAgcHJpbnRrKEtFUk5fREVCVUcgInVzYmRydl9uZXRpZl9jYXJyaWVyX29mZlxuIik7CisKKyAgICB1c2JkcnZfaXNvbGF0ZV9kcml2ZXIobWFjcCk7CisKKyAgICBwcmludGsoS0VSTl9ERUJVRyAidXNiZHJ2X2lzb2xhdGVfZHJpdmVyXG4iKTsKKworICAgIG5ldGlmX2NhcnJpZXJfb2ZmKG1hY3AtPmRldmljZSk7CisjaWZkZWYgWk1fRU5BQkxFX0NFTkMKKyAgICAvKiBDRU5DICovCisgICAgaWYgKG1hY3AtPm5ldGxpbmtfc2sgIT0gTlVMTCkKKyAgICB7CisgICAgLy8gICAgc29ja19yZWxlYXNlKG1hY3AtPm5ldGxpbmtfc2spOworICAgICAgICBwcmludGsoS0VSTl9FUlIgInVzYmRydiBjbG9zZSBuZXRsaW5rIHNvY2tldFxuIik7CisgICAgfQorI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpCisgICAgLy9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKyNlbmRpZgorCisgICAgLyogVHVybiBvZmYgTEVEICovCisgICAgemZIcExlZEN0cmwoZGV2LCAwLCAwKTsKKyAgICB6ZkhwTGVkQ3RybChkZXYsIDEsIDApOworCisgICAgLyogRGVsYXkgZm9yIGEgd2hpbGUgKi8KKyAgICBtZGVsYXkoMTApOworCisgICAgLyogY2xlYXIgV1BBL1JTTiBJRSAqLworICAgIG1hY3AtPnN1cEllWzFdID0gMDsKKworICAgIC8qIHNldCB0aGUgaXNvbGF0ZSBmbGFnIHRvIGZhbHNlLCBzbyB1c2JkcnZfb3BlbiBjYW4gYmUgY2FsbGVkICovCisgICAgbWFjcC0+ZHJpdmVyX2lzb2xhdGVkID0gRkFMU0U7CisKKyAgICB6ZmlXbGFuQ2xvc2UoZGV2KTsKKyAgICBrZnJlZShtYWNwLT53ZCk7CisKKyAgICB6ZkxueFVubGlua0FsbFVyYnMobWFjcCk7CisKKyAgICByZXR1cm4gMDsKK30KKworCisKKworaW50IHVzYmRydl94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisgICAgaW50IG5vdGlmeV9zdG9wID0gRkFMU0U7CisgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5wcml2OworCisjaWYgMAorICAgIC8qIFRlc3QgY29kZSAqLworICAgIHsKKyAgICAgICAgc3RydWN0IHNrX2J1ZmYqIHM7CisKKyAgICAgICAgcyA9IHNrYl9jb3B5X2V4cGFuZChza2IsIDgsIDAsIEdGUF9BVE9NSUMpOworICAgICAgICBza2JfcHVzaChzLCA4KTsKKyAgICAgICAgcy0+ZGF0YVswXSA9ICd6JzsKKyAgICAgICAgcy0+ZGF0YVsxXSA9ICd5JzsKKyAgICAgICAgcy0+ZGF0YVsyXSA9ICdkJzsKKyAgICAgICAgcy0+ZGF0YVszXSA9ICdhJzsKKyAgICAgICAgcy0+ZGF0YVs0XSA9ICdzJzsKKyAgICAgICAgcHJpbnRrKCJsZW4xPSVkLCBsZW4yPSVkIiwgc2tiLT5sZW4sIHMtPmxlbik7CisgICAgICAgIG5ldGxpbmtfYnJvYWRjYXN0KHJ0bmwsIHMsIDAsIFJUTUdSUF9MSU5LLCBHRlBfQVRPTUlDKTsKKyAgICB9CisjZW5kaWYKKworI2lmIFpNX0RJU0FCTEVfWE1JVAorICAgIGRldl9rZnJlZV9za2JfaXJxKHNrYik7CisjZWxzZQorICAgIHpmaVR4U2VuZEV0aChkZXYsIHNrYiwgMCk7CisjZW5kaWYKKyAgICBtYWNwLT5kcnZfc3RhdHMubmV0X3N0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworICAgIG1hY3AtPmRydl9zdGF0cy5uZXRfc3RhdHMudHhfcGFja2V0cysrOworCisgICAgLy9kZXZfa2ZyZWVfc2tiX2lycShza2IpOworCisgICAgaWYgKG5vdGlmeV9zdG9wKSB7CisgICAgICAgIG5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisgICAgICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworCisKKwordm9pZCB1c2JkcnZfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisKKworICAgIGlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKQorICAgICAgICByZXR1cm47CisKKyAgICAgICAgcmV0dXJuOworCit9CisKKworCisvKioKKyAqIHVzYmRydl9jbGVhcl9zdHJ1Y3RzIC0gZnJlZSByZXNvdXJjZXMKKworICogQGRldjogYWRhcHRlcidzIG5ldF9kZXZpY2Ugc3RydWN0CisgKgorICogRnJlZSBhbGwgZGV2aWNlIHNwZWNpZmljIHN0cnVjdHMsIHVubWFwIGkvbyBhZGRyZXNzLCBldGMuCisgKi8KK3ZvaWQgdXNiZHJ2X2NsZWFyX3N0cnVjdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPnByaXY7CisKKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1BDSSkKKyAgICBpb3VubWFwKG1hY3AtPnJlZ3ApOworCisgICAgcGNpX3JlbGVhc2VfcmVnaW9ucyhtYWNwLT5wZGV2KTsKKyAgICBwY2lfZGlzYWJsZV9kZXZpY2UobWFjcC0+cGRldik7CisgICAgcGNpX3NldF9kcnZkYXRhKG1hY3AtPnBkZXYsIE5VTEwpOworI2VuZGlmCisKKyAgICBrZnJlZShtYWNwKTsKKworICAgIGtmcmVlKGRldik7CisKK30KKwordm9pZCB1c2JkcnZfcmVtb3ZlMShzdHJ1Y3QgcGNpX2RldiAqcGNpZCkKK3sKKyAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcDsKKworICAgIGlmICghKGRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBwY2lfZ2V0X2RydmRhdGEocGNpZCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBtYWNwID0gZGV2LT5wcml2OworICAgIHVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisKKyAgICB1c2JkcnZfY2xlYXJfc3RydWN0cyhkZXYpOworfQorCisKK3ZvaWQgemZMbngxMG1zVGltZXIoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPnByaXY7CisKKyAgICBtb2RfdGltZXIoJihtYWNwLT5oYlRpbWVyMTBtcyksIGppZmZpZXMgKyAoMSpIWikvMTAwKTsgICAvLzEwIG1zCisgICAgemZpSGVhcnRCZWF0KGRldik7CisgICAgcmV0dXJuOworfQorCit2b2lkIHpmTG54SW5pdFZhcFN0cnVjdCh2b2lkKQoreworICAgIHUxNl90IGk7CisKKyAgICBmb3IgKGk9MDsgaTxaTV9WQVBfUE9SVF9OVU1CRVI7IGkrKykKKyAgICB7CisgICAgICAgIHZhcFtpXS5kZXYgPSBOVUxMOworICAgICAgICB2YXBbaV0ub3BlbkZsYWcgPSAwOworICAgIH0KK30KKworaW50IHpmTG54VmFwT3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworICAgIHUxNl90IHZhcElkOworCisgICAgdmFwSWQgPSB6ZkxueEdldFZhcElkKGRldik7CisKKyAgICBpZiAodmFwW3ZhcElkXS5vcGVuRmxhZyA9PSAwKQorICAgIHsKKyAgICAgICAgdmFwW3ZhcElkXS5vcGVuRmxhZyA9IDE7CisgICAgCXByaW50aygiemZMbnhWYXBPcGVuIDogZGV2aWNlIG5hbWU9JXMsIHZhcCBJRD0lZFxuIiwgZGV2LT5uYW1lLCB2YXBJZCk7CisgICAgCXpmaVdsYW5TZXRTU0lEKGRldiwgInZhcDEiLCA0KTsKKyAgICAJemZpV2xhbkVuYWJsZShkZXYpOworICAgIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwcmludGsoIlZBUCBvcGVuZWQgZXJyb3IgOiB2YXAgSUQ9JWRcbiIsIHZhcElkKTsKKyAgICB9CisJcmV0dXJuIDA7Cit9CisKK2ludCB6ZkxueFZhcENsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisgICAgdTE2X3QgdmFwSWQ7CisKKyAgICB2YXBJZCA9IHpmTG54R2V0VmFwSWQoZGV2KTsKKworICAgIGlmICh2YXBJZCAhPSAweGZmZmYpCisgICAgeworICAgICAgICBpZiAodmFwW3ZhcElkXS5vcGVuRmxhZyA9PSAxKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGsoInpmTG54VmFwQ2xvc2U6IGRldmljZSBuYW1lPSVzLCB2YXAgSUQ9JWRcbiIsIGRldi0+bmFtZSwgdmFwSWQpOworCisgICAgICAgICAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7CisgICAgICAgICAgICB2YXBbdmFwSWRdLm9wZW5GbGFnID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50aygiVkFQIHBvcnQgd2FzIG5vdCBvcGVuZWQgOiB2YXAgSUQ9JWRcbiIsIHZhcElkKTsKKyAgICAgICAgfQorICAgIH0KKwlyZXR1cm4gMDsKK30KKworaW50IHpmTG54VmFwWG1pdEZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisgICAgaW50IG5vdGlmeV9zdG9wID0gRkFMU0U7CisgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5wcml2OworICAgIHUxNl90IHZhcElkOworCisgICAgdmFwSWQgPSB6ZkxueEdldFZhcElkKGRldik7CisgICAgLy9wcmludGsoInpmTG54VmFwWG1pdEZyYW1lOiB2YXAgSUQ9JWRcbiIsIHZhcElkKTsKKyAgICAvL3ByaW50aygiemZMbnhWYXBYbWl0RnJhbWUoKSwgc2tiPSVseGhcbiIsICh1MzJfdClza2IpOworCisgICAgaWYgKHZhcElkID49IFpNX1ZBUF9QT1JUX05VTUJFUikKKyAgICB7CisgICAgICAgIGRldl9rZnJlZV9za2JfaXJxKHNrYik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyNpZiAxCisgICAgaWYgKHZhcFt2YXBJZF0ub3BlbkZsYWcgPT0gMCkKKyAgICB7CisgICAgICAgIGRldl9rZnJlZV9za2JfaXJxKHNrYik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyNlbmRpZgorCisKKyAgICB6ZmlUeFNlbmRFdGgoZGV2LCBza2IsIDB4MSk7CisKKyAgICBtYWNwLT5kcnZfc3RhdHMubmV0X3N0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworICAgIG1hY3AtPmRydl9zdGF0cy5uZXRfc3RhdHMudHhfcGFja2V0cysrOworCisgICAgLy9kZXZfa2ZyZWVfc2tiX2lycShza2IpOworCisgICAgaWYgKG5vdGlmeV9zdG9wKSB7CisgICAgICAgIG5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisgICAgICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IHpmTG54UmVnaXN0ZXJWYXBEZXYoc3RydWN0IG5ldF9kZXZpY2UqIHBhcmVudERldiwgdTE2X3QgdmFwSWQpCit7CisgICAgLyogQWxsb2NhdGUgbmV0IGRldmljZSBzdHJ1Y3R1cmUgKi8KKyAgICB2YXBbdmFwSWRdLmRldiA9IGFsbG9jX2V0aGVyZGV2KDApOworICAgIHByaW50aygiUmVnaXN0ZXIgdmFwIGRldj0leFxuIiwgKHUzMl90KXZhcFt2YXBJZF0uZGV2KTsKKworICAgIGlmKHZhcFt2YXBJZF0uZGV2ID09IE5VTEwpIHsKKyAgICAgICAgcHJpbnRrKCJhbGxvY19ldGhlcmRldiBmYWlsXG4iKTsKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgfQorCisgICAgLyogU2V0dXAgdGhlIGRlZmF1bHQgc2V0dGluZ3MgKi8KKyAgICBldGhlcl9zZXR1cCh2YXBbdmFwSWRdLmRldik7CisKKyAgICAvKiBNQUMgYWRkcmVzcyAqLworICAgIG1lbWNweSh2YXBbdmFwSWRdLmRldi0+ZGV2X2FkZHIsIHBhcmVudERldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKworICAgIHZhcFt2YXBJZF0uZGV2LT5pcnEgPSBwYXJlbnREZXYtPmlycTsKKyAgICB2YXBbdmFwSWRdLmRldi0+YmFzZV9hZGRyID0gcGFyZW50RGV2LT5iYXNlX2FkZHI7CisgICAgdmFwW3ZhcElkXS5kZXYtPm1lbV9zdGFydCA9IHBhcmVudERldi0+bWVtX3N0YXJ0OworICAgIHZhcFt2YXBJZF0uZGV2LT5tZW1fZW5kID0gcGFyZW50RGV2LT5tZW1fZW5kOworICAgIHZhcFt2YXBJZF0uZGV2LT5wcml2ID0gcGFyZW50RGV2LT5wcml2OworCisgICAgLy9kZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZ6ZDEyMTJfd2RzX3htaXRfZnJhbWU7CisgICAgdmFwW3ZhcElkXS5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZ6ZkxueFZhcFhtaXRGcmFtZTsKKyAgICB2YXBbdmFwSWRdLmRldi0+b3BlbiA9ICZ6ZkxueFZhcE9wZW47CisgICAgdmFwW3ZhcElkXS5kZXYtPnN0b3AgPSAmemZMbnhWYXBDbG9zZTsKKyAgICB2YXBbdmFwSWRdLmRldi0+Z2V0X3N0YXRzID0gJnVzYmRydl9nZXRfc3RhdHM7CisgICAgdmFwW3ZhcElkXS5kZXYtPmNoYW5nZV9tdHUgPSAmdXNiZHJ2X2NoYW5nZV9tdHU7CisjaWZkZWYgWk1fSE9TVEFQRF9TVVBQT1JUCisgICAgdmFwW3ZhcElkXS5kZXYtPmRvX2lvY3RsID0gdXNiZHJ2X2lvY3RsOworI2Vsc2UKKyAgICB2YXBbdmFwSWRdLmRldi0+ZG9faW9jdGwgPSBOVUxMOworI2VuZGlmCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMCkpCisgICAgdmFwW3ZhcElkXS5kZXYtPmRlc3RydWN0b3IgPSBmcmVlX25ldGRldjsKKyNlbHNlCisgICAgdmFwW3ZhcElkXS5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfRFlOQUxMT0M7CisjZW5kaWYKKworICAgIHZhcFt2YXBJZF0uZGV2LT50eF9xdWV1ZV9sZW4gPSAwOworCisgICAgdmFwW3ZhcElkXS5kZXYtPmRldl9hZGRyWzBdID0gcGFyZW50RGV2LT5kZXZfYWRkclswXTsKKyAgICB2YXBbdmFwSWRdLmRldi0+ZGV2X2FkZHJbMV0gPSBwYXJlbnREZXYtPmRldl9hZGRyWzFdOworICAgIHZhcFt2YXBJZF0uZGV2LT5kZXZfYWRkclsyXSA9IHBhcmVudERldi0+ZGV2X2FkZHJbMl07CisgICAgdmFwW3ZhcElkXS5kZXYtPmRldl9hZGRyWzNdID0gcGFyZW50RGV2LT5kZXZfYWRkclszXTsKKyAgICB2YXBbdmFwSWRdLmRldi0+ZGV2X2FkZHJbNF0gPSBwYXJlbnREZXYtPmRldl9hZGRyWzRdOworICAgIHZhcFt2YXBJZF0uZGV2LT5kZXZfYWRkcls1XSA9IHBhcmVudERldi0+ZGV2X2FkZHJbNV0gKyAodmFwSWQrMSk7CisKKyAgICAvKiBTdG9wIHRoZSBuZXR3b3JrIHF1ZXVlIGZpcnN0ICovCisgICAgbmV0aWZfc3RvcF9xdWV1ZSh2YXBbdmFwSWRdLmRldik7CisKKyAgICBzcHJpbnRmKHZhcFt2YXBJZF0uZGV2LT5uYW1lLCAidmFwJWQiLCB2YXBJZCk7CisgICAgcHJpbnRrKCJSZWdpc3RlciBWQVAgZGV2IHN1Y2Nlc3MgOiAlc1xuIiwgdmFwW3ZhcElkXS5kZXYtPm5hbWUpOworCisgICAgaWYocmVnaXN0ZXJfbmV0ZGV2aWNlKHZhcFt2YXBJZF0uZGV2KSAhPSAwKSB7CisgICAgICAgIHByaW50aygicmVnaXN0ZXIgVkFQIGRldmljZSBmYWlsXG4iKTsKKyAgICAgICAgdmFwW3ZhcElkXS5kZXYgPSBOVUxMOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IHpmTG54VW5yZWdpc3RlclZhcERldihzdHJ1Y3QgbmV0X2RldmljZSogcGFyZW50RGV2LCB1MTZfdCB2YXBJZCkKK3sKKyAgICBpbnQgcmV0ID0gMDsKKworICAgIHByaW50aygiVW5yZWdpc3RlciBWQVAgZGV2IDogJXNcbiIsIHZhcFt2YXBJZF0uZGV2LT5uYW1lKTsKKworICAgIGlmKHZhcFt2YXBJZF0uZGV2ICE9IE5VTEwpIHsKKyAgICAgICAgcHJpbnRrKCJVbnJlZ2lzdGVyIHZhcCBkZXY9JXhcbiIsICh1MzJfdCl2YXBbdmFwSWRdLmRldik7CisgICAgICAgIC8vCisgICAgICAgIC8vdW5yZWdpc3Rlcl9uZXRkZXZpY2Uod2RzW3dkc0lkXS5kZXYpOworICAgICAgICB1bnJlZ2lzdGVyX25ldGRldih2YXBbdmFwSWRdLmRldik7CisKKyAgICAgICAgcHJpbnRrKCJWQVAgdW5yZWdpc3Rlcl9uZXRkZXZpY2VcbiIpOworICAgICAgICB2YXBbdmFwSWRdLmRldiA9IE5VTEw7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBwcmludGsoInVucmVnaXN0ZXIgVkFQIGRldmljZTogJWQgZmFpbFxuIiwgdmFwSWQpOworICAgICAgICByZXQgPSAtRUlOVkFMOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSAvKiB0dW5lIG1lISAqLworIyAgZGVmaW5lIFNVQk1JVF9VUkIodSxmKSAgICAgICB1c2Jfc3VibWl0X3VyYih1LGYpCisjICBkZWZpbmUgVVNCX0FMTE9DX1VSQih1LGYpICAgIHVzYl9hbGxvY191cmIodSxmKQorI2Vsc2UKKyMgIGRlZmluZSBTVUJNSVRfVVJCKHUsZikgICAgICAgdXNiX3N1Ym1pdF91cmIodSkKKyMgIGRlZmluZSBVU0JfQUxMT0NfVVJCKHUsZikgICAgdXNiX2FsbG9jX3VyYih1KQorI2VuZGlmCisKKy8vZXh0ZXJuIHZvaWQgemZpV2xhblF1ZXJ5TWFjQWRkcmVzcyh6ZGV2X3QqIGRldiwgdThfdCogYWRkcik7CitleHRlcm4gc3RydWN0IGl3X2hhbmRsZXJfZGVmIHA4MDIxMXdleHRfaGFuZGxlcl9kZWY7CisKK2V4dGVybiBpbnQgdXNiZHJ2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IHVzYmRydl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgdXNiZHJ2X3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IHVzYmRydl94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCB1c2JkcnZfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSk7CitleHRlcm4gdm9pZCB1c2JkcnZfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCB1c2JkcnZfc2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKTsKK2V4dGVybiBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqIHVzYmRydl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IHVzYmRydl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7CitleHRlcm4gVXNiVHhRX3QgKnpmTG54R2V0VXNiVHhCdWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKK2ludCB6ZkxueEFsbG9jQWxsVXJicyhzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3ApCit7CisgICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IG1hY3AtPmludGVyZmFjZTsKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgKmlmYWNlX2Rlc2MgPSAmaW50ZXJmYWNlLT5hbHRzZXR0aW5nWzBdOworI2Vsc2UKKyAgICBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjID0gJmludGVyZmFjZS0+YWx0c2V0dGluZ1swXTsKKyNlbmRpZgorCisgICAgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKyAgICBpbnQgaTsKKworICAgIC8qIGRlc2NyaXB0b3IgbWF0Y2hlcywgbGV0J3MgZmluZCB0aGUgZW5kcG9pbnRzIG5lZWRlZCAqLworICAgIC8qIGNoZWNrIG91dCB0aGUgZW5kcG9pbnRzICovCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKyAgICBmb3IgKGkgPSAwOyBpIDwgaWZhY2VfZGVzYy0+Yk51bUVuZHBvaW50czsgKytpKQorICAgIHsKKyAgICAgICAgZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV07CisjZWxzZQorICAgIGZvciAoaSA9IDA7IGkgPCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkKKyAgICB7CisgICAgICAgIGVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisjZW5kaWYKKyAgICAgICAgaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApICYmCisgICAgICAgICAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAyKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogd2UgZm91bmQgYSBidWxrIGluIGVuZHBvaW50ICovCisgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImJ1bGsgaW46IHdNYXhQYWNrZXRTaXplID0gJXhcbiIsIGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSA9PSAweDAwKSAmJgorICAgICAgICAgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMikpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHdlIGZvdW5kIGEgYnVsayBvdXQgZW5kcG9pbnQgKi8KKyAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiYnVsayBvdXQ6IHdNYXhQYWNrZXRTaXplID0gJXhcbiIsIGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApICYmCisgICAgICAgICAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAzKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogd2UgZm91bmQgYSBpbnRlcnJ1cHQgaW4gZW5kcG9pbnQgKi8KKyAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiaW50ZXJydXB0IGluOiB3TWF4UGFja2V0U2l6ZSA9ICV4XG4iLCBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpKTsKKyAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiaW50ZXJydXB0IGluOiBpbnRfaW50ZXJ2YWwgPSAlZFxuIiwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApID09IDB4MDApICYmCisgICAgICAgICAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAzKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogd2UgZm91bmQgYSBpbnRlcnJ1cHQgb3V0IGVuZHBvaW50ICovCisgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImludGVycnVwdCBvdXQ6IHdNYXhQYWNrZXRTaXplID0gJXhcbiIsIGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkpOworICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJpbnRlcnJ1cHQgb3V0OiBpbnRfaW50ZXJ2YWwgPSAlZFxuIiwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBBbGxvY2F0ZSBhbGwgVHggVVJCcyAqLworICAgIGZvciAoaSA9IDA7IGkgPCBaTV9NQVhfVFhfVVJCX05VTTsgaSsrKQorICAgIHsKKyAgICAgICAgbWFjcC0+V2xhblR4RGF0YVVyYltpXSA9IFVTQl9BTExPQ19VUkIoMCwgR0ZQX0tFUk5FTCk7CisKKyAgICAgICAgaWYgKG1hY3AtPldsYW5UeERhdGFVcmJbaV0gPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGo7CisKKyAgICAgICAgICAgIC8qIEZyZWUgYWxsIHVyYnMgKi8KKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdXNiX2ZyZWVfdXJiKG1hY3AtPldsYW5UeERhdGFVcmJbal0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEFsbG9jYXRlIGFsbCBSeCBVUkJzICovCisgICAgZm9yIChpID0gMDsgaSA8IFpNX01BWF9SWF9VUkJfTlVNOyBpKyspCisgICAgeworICAgICAgICBtYWNwLT5XbGFuUnhEYXRhVXJiW2ldID0gVVNCX0FMTE9DX1VSQigwLCBHRlBfS0VSTkVMKTsKKworICAgICAgICBpZiAobWFjcC0+V2xhblJ4RGF0YVVyYltpXSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgajsKKworICAgICAgICAgICAgLyogRnJlZSBhbGwgdXJicyAqLworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1c2JfZnJlZV91cmIobWFjcC0+V2xhblJ4RGF0YVVyYltqXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBaTV9NQVhfVFhfVVJCX05VTTsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVzYl9mcmVlX3VyYihtYWNwLT5XbGFuVHhEYXRhVXJiW2pdKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBBbGxvY2F0ZSBSZWdpc3RlciBSZWFkL1dyaXRlIFVTQiAqLworICAgIG1hY3AtPlJlZ091dFVyYiA9IFVTQl9BTExPQ19VUkIoMCwgR0ZQX0tFUk5FTCk7CisgICAgbWFjcC0+UmVnSW5VcmIgPSBVU0JfQUxMT0NfVVJCKDAsIEdGUF9LRVJORUwpOworCisgICAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgemZMbnhGcmVlQWxsVXJicyhzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3ApCit7CisgICAgaW50IGk7CisKKyAgICAvKiBGcmVlIGFsbCBUeCBVUkJzICovCisgICAgZm9yIChpID0gMDsgaSA8IFpNX01BWF9UWF9VUkJfTlVNOyBpKyspCisgICAgeworICAgICAgICBpZiAobWFjcC0+V2xhblR4RGF0YVVyYltpXSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICB1c2JfZnJlZV91cmIobWFjcC0+V2xhblR4RGF0YVVyYltpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBGcmVlIGFsbCBSeCBVUkJzICovCisgICAgZm9yIChpID0gMDsgaSA8IFpNX01BWF9SWF9VUkJfTlVNOyBpKyspCisgICAgeworICAgICAgICBpZiAobWFjcC0+V2xhblJ4RGF0YVVyYltpXSAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICB1c2JfZnJlZV91cmIobWFjcC0+V2xhblJ4RGF0YVVyYltpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBGcmVlIFVTQiBSZWdpc3RlciBSZWFkL1dyaXRlIFVSQiAqLworICAgIHVzYl9mcmVlX3VyYihtYWNwLT5SZWdPdXRVcmIpOworICAgIHVzYl9mcmVlX3VyYihtYWNwLT5SZWdJblVyYik7Cit9CisKK3ZvaWQgemZMbnhVbmxpbmtBbGxVcmJzKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCkKK3sKKyAgICBpbnQgaTsKKworICAgIC8qIFVubGluayBhbGwgVHggVVJCcyAqLworICAgIGZvciAoaSA9IDA7IGkgPCBaTV9NQVhfVFhfVVJCX05VTTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1hY3AtPldsYW5UeERhdGFVcmJbaV0gIT0gTlVMTCkKKyAgICAgICAgeworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxNSkKKyAgICAgICAgICAgIG1hY3AtPldsYW5UeERhdGFVcmJbaV0tPnRyYW5zZmVyX2ZsYWdzICY9IH5VUkJfQVNZTkNfVU5MSU5LOworI2VuZGlmCisgICAgICAgICAgICB1c2JfdW5saW5rX3VyYihtYWNwLT5XbGFuVHhEYXRhVXJiW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFVubGluayBhbGwgUnggVVJCcyAqLworICAgIGZvciAoaSA9IDA7IGkgPCBaTV9NQVhfUlhfVVJCX05VTTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1hY3AtPldsYW5SeERhdGFVcmJbaV0gIT0gTlVMTCkKKyAgICAgICAgeworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxNSkKKyAgICAgICAgICAgIG1hY3AtPldsYW5SeERhdGFVcmJbaV0tPnRyYW5zZmVyX2ZsYWdzICY9IH5VUkJfQVNZTkNfVU5MSU5LOworI2VuZGlmCisgICAgICAgICAgICB1c2JfdW5saW5rX3VyYihtYWNwLT5XbGFuUnhEYXRhVXJiW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFVubGluayBVU0IgUmVnaXN0ZXIgUmVhZC9Xcml0ZSBVUkIgKi8KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTUpCisgICAgbWFjcC0+UmVnT3V0VXJiLT50cmFuc2Zlcl9mbGFncyAmPSB+VVJCX0FTWU5DX1VOTElOSzsKKyNlbmRpZgorICAgIHVzYl91bmxpbmtfdXJiKG1hY3AtPlJlZ091dFVyYik7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTUpCisgICAgbWFjcC0+UmVnSW5VcmItPnRyYW5zZmVyX2ZsYWdzICY9IH5VUkJfQVNZTkNfVU5MSU5LOworI2VuZGlmCisgICAgdXNiX3VubGlua191cmIobWFjcC0+UmVnSW5VcmIpOworfQorCit1OF90IHpmTG54SW5pdFNldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCkKK3sKKyAgICAvL3Vuc2lnbmVkIGNoYXIgYWRkcls2XTsKKworICAgIC8vaW5pdF9NVVRFWCgmbWFjcC0+cHNfc2VtKTsKKyAgICAvL2luaXRfTVVURVgoJm1hY3AtPnJlZ19zZW0pOworICAgIC8vaW5pdF9NVVRFWCgmbWFjcC0+YmNuX3NlbSk7CisgICAgLy9pbml0X01VVEVYKCZtYWNwLT5jb25maWdfc2VtKTsKKworICAgIHNwaW5fbG9ja19pbml0KCYobWFjcC0+Y3NfbG9jaykpOworI2lmIDAKKyAgICAvKiBNQUMgYWRkcmVzcyAqLworICAgIHpmaVdsYW5RdWVyeU1hY0FkZHJlc3MoZGV2LCBhZGRyKTsKKyAgICBkZXYtPmRldl9hZGRyWzBdID0gYWRkclswXTsKKyAgICBkZXYtPmRldl9hZGRyWzFdID0gYWRkclsxXTsKKyAgICBkZXYtPmRldl9hZGRyWzJdID0gYWRkclsyXTsKKyAgICBkZXYtPmRldl9hZGRyWzNdID0gYWRkclszXTsKKyAgICBkZXYtPmRldl9hZGRyWzRdID0gYWRkcls0XTsKKyAgICBkZXYtPmRldl9hZGRyWzVdID0gYWRkcls1XTsKKyNlbmRpZgorI2lmIFdJUkVMRVNTX0VYVCA+IDEyCisgICAgZGV2LT53aXJlbGVzc19oYW5kbGVycyA9IChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikmcDgwMjExd2V4dF9oYW5kbGVyX2RlZjsKKyNlbmRpZgorCisgICAgZGV2LT5vcGVuID0gdXNiZHJ2X29wZW47CisgICAgZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB1c2JkcnZfeG1pdF9mcmFtZTsKKyAgICBkZXYtPnN0b3AgPSB1c2JkcnZfY2xvc2U7CisgICAgZGV2LT5jaGFuZ2VfbXR1ID0gJnVzYmRydl9jaGFuZ2VfbXR1OworICAgIGRldi0+Z2V0X3N0YXRzID0gdXNiZHJ2X2dldF9zdGF0czsKKyAgICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHVzYmRydl9zZXRfbXVsdGk7CisgICAgZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSB1c2JkcnZfc2V0X21hYzsKKyAgICBkZXYtPmRvX2lvY3RsID0gdXNiZHJ2X2lvY3RsOworCisgICAgZGV2LT5mbGFncyB8PSBJRkZfTVVMVElDQVNUOworCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjQpKQorICAgIGRldi0+ZGV2X2FkZHJbMF0gPSAweDAwOworICAgIGRldi0+ZGV2X2FkZHJbMV0gPSAweDAzOworICAgIGRldi0+ZGV2X2FkZHJbMl0gPSAweDdmOworICAgIGRldi0+ZGV2X2FkZHJbM10gPSAweDExOworICAgIGRldi0+ZGV2X2FkZHJbNF0gPSAweDIyOworICAgIGRldi0+ZGV2X2FkZHJbNV0gPSAweDMzOworI2VuZGlmCisKKyAgICAvKiBJbml0aWFsaXplIEhlYXJ0IEJlYXQgdGltZXIgKi8KKyAgICBpbml0X3RpbWVyKCZtYWNwLT5oYlRpbWVyMTBtcyk7CisgICAgbWFjcC0+aGJUaW1lcjEwbXMuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldjsKKyAgICBtYWNwLT5oYlRpbWVyMTBtcy5mdW5jdGlvbiA9ICh2b2lkICopJnpmTG54MTBtc1RpbWVyOworCisgICAgLyogSW5pdGlhbGl6ZSBXRFMgYW5kIFZBUCBkYXRhIHN0cnVjdHVyZSAqLworICAgIC8vemZJbml0V2RzU3RydWN0KCk7CisgICAgemZMbnhJbml0VmFwU3RydWN0KCk7CisKKyAgICByZXR1cm4gMTsKK30KKwordThfdCB6ZkxueENsZWFyU3RydWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworICAgIHUxNl90IGlpOworICAgIHUxNl90IFR4UUNudDsKKworICAgIFR4UUNudCA9IHpmTG54Q2hlY2tUeEJ1ZmZlckNudChkZXYpOworCisgICAgcHJpbnRrKEtFUk5fRVJSICJUeFFDbnQ6ICVkXG4iLCBUeFFDbnQpOworCisgICAgZm9yKGlpID0gMDsgaWkgPCBUeFFDbnQ7IGlpKyspCisgICAgeworICAgICAgICBVc2JUeFFfdCAqVHhRID0gemZMbnhHZXRVc2JUeEJ1ZmZlcihkZXYpOworCisgICAgICAgIHByaW50ayhLRVJOX0VSUiAiZGV2X2tmcmVlX3NrYl9hbnlcbiIpOworICAgICAgICAvKiBGcmVlIGJ1ZmZlciAqLworICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShUeFEtPmJ1Zik7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy91c2JkcnYuaCBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3VzYmRydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNDE4ODEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy91c2JkcnYuaApAQCAtMCwwICsxLDI1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE1vZHVsZSBOYW1lIDogdXNiZHJ2LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQWJzdHJhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgIFRoaXMgbW9kdWxlIGNvbnRhaW5zIG5ldHdvcmsgaW50ZXJmYWNlIHVwL2Rvd24gcmVsYXRlZCBkZWZpbml0aW9uKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTk9URVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgIFBsYXRmb3JtIGRlcGVuZGVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9VU0JEUlZfSAorI2RlZmluZSBfVVNCRFJWX0gKKworI2RlZmluZSBXTEFOX1VTQiAgICAwCisjZGVmaW5lIFdMQU5fUENJICAgIDEKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisgICAgI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJ6ZGNvbXBhdC5oIgorCisjaW5jbHVkZSAib2FsX2R0LmgiCisjaW5jbHVkZSAib2FsX21hcmMuaCIKKyNpbmNsdWRlICI4MDIxMWNvcmUvcHViX3pmaS5oIgorLy8jaW5jbHVkZSAicHViX3pmdy5oIgorI2luY2x1ZGUgIjgwMjExY29yZS9wdWJfdXNiLmgiCisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKy8qIFBsZWFzZSBpbmNsdWRlIGhlYWRlciBmaWxlcyBmb3IgZGV2aWNlIHR5cGUgaW4gdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZpbGUgKi8KKyNkZWZpbmUgdXJiX3QgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1cmIKKworI2RlZmluZSB1c2JfY29tcGxldGVfdCAgICAgICAgICAgICAgdXNiX2NvbXBsZXRlX3QKKyNkZWZpbmUgcGlwZV90ICAgICAgICAgICAgICAgICAgICAgIHUzMl90CisKKy8qIFVTQiBFbmRwb2ludCBkZWZpbml0aW9uICovCisjZGVmaW5lIFVTQl9XTEFOX1RYX1BJUEUgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVVNCX1dMQU5fUlhfUElQRSAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBVU0JfUkVHX0lOX1BJUEUgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFVTQl9SRUdfT1VUX1BJUEUgICAgICAgICAgICAgICAgICAgIDQKKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1VTQikKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNlbmRpZgorCisjaWZkZWYgWk1fSE9TVEFQRF9TVVBQT1JUCisjaW5jbHVkZSAiYXRocl9jb21tb24uaCIKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqCQlEZXNjcmlwdG9yIERhdGEgU3RydWN0dXJlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgZHJpdmVyX3N0YXRzIHsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBuZXRfc3RhdHM7Cit9OworCisjZGVmaW5lIFpNX01BWF9SWF9CVUZGRVJfU0laRSAgICAgICAgICAgICAgIDgxOTIKKworI2lmIFpNX1VTQl9UWF9TVFJFQU1fTU9ERSA9PSAxCisjZGVmaW5lIFpNX01BWF9UWF9BR0dSRUdBVEVfTlVNICAgICAgICAgICAgIDQKKyNkZWZpbmUgWk1fVVNCX1RYX0JVRl9TSVpFICAgICAgICAgICAgICAgICAgODA5NgorI2RlZmluZSBaTV9NQVhfVFhfVVJCX05VTSAgICAgICAgICAgICAgICAgICA0CisjZWxzZQorI2RlZmluZSBaTV9VU0JfVFhfQlVGX1NJWkUgICAgICAgICAgICAgICAgICAyMDQ4CisjZGVmaW5lIFpNX01BWF9UWF9VUkJfTlVNICAgICAgICAgICAgICAgICAgIDgKKyNlbmRpZgorI2RlZmluZSBaTV9VU0JfUkVHX01BWF9CVUZfU0laRSAgICAgICAgICAgICA2NAorI2RlZmluZSBaTV9NQVhfUlhfVVJCX05VTSAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBaTV9NQVhfVFhfQlVGX05VTSAgICAgICAgICAgICAgICAgICAxMjgKKwordHlwZWRlZiBzdHJ1Y3QgVXNiVHhRCit7CisgICAgemJ1Zl90ICpidWY7CisgICAgdThfdCBoZHJbODBdOworICAgIHUxNl90IGhkcmxlbjsKKyAgICB1OF90IHNuYXBbOF07CisgICAgdTE2X3Qgc25hcExlbjsKKyAgICB1OF90IHRhaWxbMTZdOworICAgIHUxNl90IHRhaWxMZW47CisgICAgdTE2X3Qgb2Zmc2V0OworfSBVc2JUeFFfdDsKKworCitzdHJ1Y3QgemRhcF9pb2N0bCB7CisJdTE2X3QgY21kOyAgICAgICAgICAgICAgICAvKiBDb21tYW5kIHRvIHJ1biAqLworCXUzMl90IGFkZHI7ICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiB0aGUgZGF0YSBidWZmZXIgKi8KKwl1MzJfdCB2YWx1ZTsgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gdGhlIGRhdGEgYnVmZmVyICovCisJdThfdAlkYXRhWzB4MTAwXTsKK307CisKKyNkZWZpbmUgWk1fT0FMX01BWF9TVEFfU1VQUE9SVCAxNgorCitzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUKK3sKKwkvL2xpbnV4IHVzZWQKKwlzdHJ1Y3QgbmV0X2RldmljZSAJKmRldmljZTsKKyNpZiAoV0xBTl9IT1NUSUYgPT0gV0xBTl9QQ0kpCisJc3RydWN0IHBjaV9kZXYgCQkqcGRldjsKKyNlbmRpZgorI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1VTQikKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAgICAqaW50ZXJmYWNlOworI2VuZGlmCisJc3RydWN0IGRyaXZlcl9zdGF0cyBkcnZfc3RhdHM7CisJY2hhciBpZm5hbWVbSUZOQU1TSVpdOworCWludAkgICAgICAgICAgICAgICAgdXNpbmdfZGFjOworCXU4X3QJCQlyZXZfaWQ7CQkvKiBhZGFwdGVyIFBDSSByZXZpc2lvbiBJRCAqLworCXJ3bG9ja190IAkJaXNvbGF0ZV9sb2NrOworICAgIHNwaW5sb2NrX3QgICAgICBjc19sb2NrOworCWludCAJCQlkcml2ZXJfaXNvbGF0ZWQ7CisjaWYgKFdMQU5fSE9TVElGID09IFdMQU5fUENJKQorCXZvaWQJCQkqcmVncDsKKyNlbmRpZgorCisgICAgICAgIC8qIHRpbWVyIGZvciBoZWFydCBiZWF0ICovCisJc3RydWN0IHRpbWVyX2xpc3QgaGJUaW1lcjEwbXM7CisKKwkvKiBGb3IgZHJpdmVyIGNvcmUgKi8KKwl2b2lkKiB3ZDsKKworI2lmIChXTEFOX0hPU1RJRiA9PSBXTEFOX1VTQikKKwl1OF90ICAgICAgICAgICAgICAgICAgICB0eFVzYkJ1ZltaTV9NQVhfVFhfVVJCX05VTV1bWk1fVVNCX1RYX0JVRl9TSVpFXTsKKwl1OF90ICAgICAgICAgICAgICAgICAgICByZWdVc2JSZWFkQnVmW1pNX1VTQl9SRUdfTUFYX0JVRl9TSVpFXTsKKwl1OF90ICAgICAgICAgICAgICAgICAgICByZWdVc2JXcml0ZUJ1ZltaTV9VU0JfUkVHX01BWF9CVUZfU0laRV07CisJdXJiX3QJCQkqV2xhblR4RGF0YVVyYltaTV9NQVhfVFhfVVJCX05VTV07CisJdXJiX3QJCQkqV2xhblJ4RGF0YVVyYltaTV9NQVhfUlhfVVJCX05VTV07CisJdXJiX3QJCQkqUmVnT3V0VXJiOworCXVyYl90CQkJKlJlZ0luVXJiOworCVVzYlR4UV90ICAgICAgICAgICAgICAgIFVzYlR4QnVmUVtaTV9NQVhfVFhfQlVGX05VTV07CisJemJ1Zl90ICAgICAgICAgICAgICAgICAgKlVzYlJ4QnVmUVtaTV9NQVhfUlhfVVJCX05VTV07CisgICAgICAgIHUxNl90ICAgICAgICAgICAgICAgICAgIFR4QnVmSGVhZDsKKyAgICAgICAgdTE2X3QgICAgICAgICAgICAgICAgICAgVHhCdWZUYWlsOworICAgICAgICB1MTZfdCAgICAgICAgICAgICAgICAgICBUeEJ1ZkNudDsKKyAgICAgICAgdTE2X3QgICAgICAgICAgICAgICAgICAgVHhVcmJIZWFkOworICAgICAgICB1MTZfdCAgICAgICAgICAgICAgICAgICBUeFVyYlRhaWw7CisgICAgICAgIHUxNl90ICAgICAgICAgICAgICAgICAgIFR4VXJiQ250OworICAgICAgICB1MTZfdCAgICAgICAgICAgICAgICAgICBSeEJ1ZkhlYWQ7CisgICAgICAgIHUxNl90ICAgICAgICAgICAgICAgICAgIFJ4QnVmVGFpbDsKKyAgICAgICAgdTE2X3QgICAgICAgICAgICAgICAgICAgUnhCdWZDbnQ7CisjZW5kaWYKKworI2lmIFpNX1VTQl9TVFJFQU1fTU9ERSA9PSAxCisgICAgICAgIHpidWZfdCAgICAgICAgICAgICAgICAgICpyZWFtaW5fYnVmOworI2VuZGlmCisKKyNpZmRlZiBaTV9IT1NUQVBEX1NVUFBPUlQKKyAgICAgICAgc3RydWN0IGF0aHJfd2xhbl9wYXJhbSAgYXRocl93cGFfcmVxOworI2VuZGlmCisgICAgICAgIHN0cnVjdCBzb2NrICAgICAgICAgICAgICpuZXRsaW5rX3NrOworICAgICAgICB1OF90ICAgICAgICAgICAgRGV2aWNlT3BlbmVkOyAvL0NXWWFuZygrKQorICAgICAgICB1OF90ICAgICAgICAgICAgc3VwSWVbNTBdOworICAgICAgICB1OF90ICAgICAgICAgICAgc3VwTGVuOworICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExcmVxX3dwYWllIHN0YXdwYWllW1pNX09BTF9NQVhfU1RBX1NVUFBPUlRdOworICAgICAgICB1OF90ICAgICAgICAgICAgZm9yd2FyZE1nbXQ7CisKKyAgICAgICAgc3RydWN0IHpmQ2JVc2JGdW5jVGJsIHVzYkNiRnVuY3Rpb25zOworCisgICAgICAgIC8qIEZvciBrZXZlbnRkICovCisgICAgICAgIHUzMl90ICAgICAgICAgICAgICAgICAgIGZsYWdzOworICAgICAgICB1bnNpZ25lZCBsb25nICAgICAgICAgICBrZXZlbnRfZmxhZ3M7CisgICAgICAgIHUxNl90ICAgICAgICAgICAgICAgICAgIGtldmVudF9yZWFkeTsKKworICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlICAgICAgICBpb2N0bF9zZW07CisgICAgICAgIHN0cnVjdCB3b3JrX3N0cnVjdCAgICAgIGtldmVudDsKKyAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgd2FpdF9xdWV1ZV9ldmVudDsKKyNpZmRlZiBaTV9IQUxQTFVTX0xPQ0sKKyAgICAgICAgdW5zaWduZWQgbG9uZyAgICAgICAgICAgaGFsX2lycUZsYWc7CisjZW5kaWYKKyAgICAgICAgdTE2X3QgICAgICAgICAgICAgICAgICAgYWRhcHRlclN0YXRlOworfTsKKworLyogV0RTICovCisjZGVmaW5lIFpNX1dEU19QT1JUX05VTUJFUiAgNgorCitzdHJ1Y3QgenNXZHNTdHJ1Y3QKK3sKKyAgICBzdHJ1Y3QgbmV0X2RldmljZSogZGV2OworICAgIHUxNl90IG9wZW5GbGFnOworfTsKKworLyogVkFQICovCisjZGVmaW5lIFpNX1ZBUF9QT1JUX05VTUJFUiAgNworCitzdHJ1Y3QgenNWYXBTdHJ1Y3QKK3sKKyAgICBzdHJ1Y3QgbmV0X2RldmljZSogZGV2OworICAgIHUxNl90IG9wZW5GbGFnOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBaTV9JT0NUTF9SRUdfUkVBRAkJCTB4MDEKKyNkZWZpbmUgWk1fSU9DVExfUkVHX1dSSVRFCQkJMHgwMgorI2RlZmluZSBaTV9JT0NUTF9NRU1fRFVNUAkJCTB4MDMKKyNkZWZpbmUgWk1fSU9DVExfUkVHX0RVTVAJCQkweDA1CisjZGVmaW5lIFpNX0lPQ1RMX1RYRF9EVU1QIAkJCTB4MDYKKyNkZWZpbmUgWk1fSU9DVExfUlhEX0RVTVAgCQkJMHgwNworI2RlZmluZSBaTV9JT0NUTF9NRU1fUkVBRAkJCTB4MEIKKyNkZWZpbmUgWk1fSU9DVExfTUVNX1dSSVRFCQkJMHgwQworI2RlZmluZSBaTV9JT0NUTF9ETUFfVEVTVCAgICAgICAgICAgMHgxMAorI2RlZmluZSBaTV9JT0NUTF9SRUdfVEVTVCAgICAgICAgICAgMHgxMQorI2RlZmluZSBaTV9JT0NUTF9URVNUICAgICAgICAgICAgICAgMHg4MAorI2RlZmluZSBaTV9JT0NUTF9UQUxMWSAgICAgICAgICAgICAgMHg4MSAvL0NXWWFuZygrKQorI2RlZmluZSBaTV9JT0NUTF9SVFMgICAgICAgICAgICAgICAgMHhBMAorI2RlZmluZSBaTV9JT0NUTF9NSVhfTU9ERSAgICAgICAgICAgMHhBMQorI2RlZmluZSBaTV9JT0NUTF9GUkFHICAgICAgICAgICAgICAgMHhBMgorI2RlZmluZSBaTV9JT0NUTF9TQ0FOICAgICAgICAgICAgICAgMHhBMworI2RlZmluZSBaTV9JT0NUTF9LRVkgICAgICAgICAgICAgICAgMHhBNAorI2RlZmluZSBaTV9JT0NUTF9SQVRFICAgICAgICAgICAgICAgMHhBNQorI2RlZmluZSBaTV9JT0NUTF9FTkNSWVBUSU9OX01PREUgICAgMHhBNgorI2RlZmluZSBaTV9JT0NUTF9HRVRfVFhDTlQgICAgICAgICAgMHhBNworI2RlZmluZSBaTV9JT0NUTF9HRVRfREVBR0dfQ05UICAgICAgMHhBOAorI2RlZmluZSBaTV9JT0NUTF9EVVJBVElPTl9NT0RFICAgICAgMHhBOQorI2RlZmluZSBaTV9JT0NUTF9TRVRfQUVTX0tFWSAgICAgICAgMHhBQQorI2RlZmluZSBaTV9JT0NUTF9TRVRfQUVTX01PREUgICAgICAgMHhBQgorI2RlZmluZSBaTV9JT0NUTF9TSUdOQUxfU1RSRU5HVEggICAgMHhBQyAvL0NXWWFuZygrKQorI2RlZmluZSBaTV9JT0NUTF9TSUdOQUxfUVVBTElUWSAgICAgMHhBRCAvL0NXWWFuZygrKQorI2RlZmluZSBaTV9JT0NUTF9TRVRfUElCU1NfTU9ERSAgICAgMHhBRQorCisjZGVmaW5lCVpEQVBJT0NUTAkJCQlTSU9DREVWUFJJVkFURQorCitlbnVtIGRldlN0YXRlIHsKKyAgICBPcGVuZWQsCisgICAgRW5hYmxlZCwKKyAgICBEaXNhYmxlZCwKKyAgICBDbG9zZWQKK307CisKKyNlbmRpZgkvKiBfVVNCRFJWX0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvd3JhcF9idWYuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfYnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI0OTZhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfYnVmLmMKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBNb2R1bGUgTmFtZSA6IHdyYXBfYnVmLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEFic3RyYWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICBUaGlzIG1vZHVsZSBjb250YWlucyB3cmFwcGVyIGZ1bmN0aW9ucyBmb3IgYnVmZmVyIG1hbmFnZW1lbnQgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE5PVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICBQbGF0Zm9ybSBkZXBlbmRlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm9hbF9kdC5oIgorI2luY2x1ZGUgInVzYmRydi5oIgorCisKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisKKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjZW5kaWYKKworCisKKy8qIENhbGxlZCB0byBhbGxvY2F0ZSBidWZmZXIsIG11c3QgcmV0dXJuIGEgY29udGludWUgYnVmZmVyIHNwYWNlICovCit6YnVmX3QqIHpmd0J1ZkFsbG9jYXRlKHpkZXZfdCogZGV2LCB1MTZfdCBsZW4pCit7CisgICAgemJ1Zl90KiBidWY7CisKKyAgICAvKiBBbGxvY2F0ZSBTS0IgZm9yIHBhY2tldCovCisgICAgYnVmID0gZGV2X2FsbG9jX3NrYihsZW4pOworCisgICAgcmV0dXJuIGJ1ZjsKK30KKworCisvKiBDYWxsZWQgdG8gZnJlZSBidWZmZXIsIHJlcGxhY2UgYmVsb3cgMyBmdW5jdGlvbnMgKi8KK3ZvaWQgemZ3QnVmRnJlZSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IHN0YXR1cykKK3sKKyAgICBkZXZfa2ZyZWVfc2tiX2FueShidWYpOworfQorCisvKiBDYWxsZWQgdG8gYWRqdXN0IGJ1ZmZlciBzaXplIGFuZCBoZWFkIHBvaW50ZXIgKi8KK3UxNl90IHpmd0J1ZlJlbW92ZUhlYWQoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBzaXplKQoreworICAgIC8vem1fYXNzZXJ0KGJ1Zi0+bGVuID4gc2l6ZSk7CisKKyAgICBidWYtPmRhdGEgKz0gc2l6ZTsKKyAgICBidWYtPmxlbiAtPSBzaXplOworICAgIHJldHVybiAwOworfQorCisKKworCisvKiByZXR1cm4gdGFpbCBpZiBoZWFkPT1OVUxMLCBjYWxsZWQgdG8gY2hhaW4gbXVsdGlwbGUgYnVmZmVyIHRvZ2V0aGVyICovCisvKiBVc2VkIHRvIGNoYWluIFJ4IGJ1ZmZlciB0byBmb3JtIGEgZnJhbWUuIGlmIHRoZSBwcmVwYXJlZCBSeCBidWZmZXIgICovCisvKiBpcyBncmVhdGVyIHRoYW4gYW4gZXRoZXJuZXQgZnJhbWUoMTUxOCszMiBieXRlKSwgdGhlbiB0aGlzIGZ1bmN0aW9uICAgICovCisvKiB3aWxsIG9ubHkgYmUgY2FsbGVkIHdpdGggaGVhZD1OVUxMLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCit1MTZfdCB6ZndCdWZDaGFpbih6ZGV2X3QqIGRldiwgemJ1Zl90KiogaGVhZCwgemJ1Zl90KiB0YWlsKQoreworCisgICAgKmhlYWQgPSB0YWlsOworICAgIHJldHVybiAwOworfQorCisKKy8qIENhbGxlZCB3aGVuIGRvaW5nIGluZnJhLWJzcyBmb3J3YXJkaW5nICovCit1MTZfdCB6ZndCdWZDb3B5KHpkZXZfdCogZGV2LCB6YnVmX3QqIGRzdCwgemJ1Zl90KiBzcmMpCit7CisgICAgbWVtY3B5KGRzdC0+ZGF0YSwgc3JjLT5kYXRhLCBzcmMtPmxlbik7CisgICAgZHN0LT50YWlsID0gZHN0LT5kYXRhOworICAgIHNrYl9wdXQoZHN0LCBzcmMtPmxlbik7CisgICAgcmV0dXJuIDA7Cit9CisKKworLyogQ2FsbGVkIHRvIGFkanVzdCBidWZmZXIgc2l6ZSBhbmQgdGFpbCBwb2ludGVyICovCit1MTZfdCB6ZndCdWZTZXRTaXplKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3Qgc2l6ZSkKK3sKKyNpZmRlZiBORVRfU0tCVUZGX0RBVEFfVVNFU19PRkZTRVQKKyAgICBidWYtPnRhaWwgPSAwOworICAgIGJ1Zi0+bGVuID0gMDsKKyNlbHNlCisgICAgYnVmLT50YWlsID0gYnVmLT5kYXRhOworICAgIGJ1Zi0+bGVuID0gMDsKKyNlbmRpZgorCisgICAgc2tiX3B1dChidWYsIHNpemUpOworICAgIHJldHVybiAwOworfQorCit1MTZfdCB6ZndCdWZHZXRTaXplKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZikKK3sKKyAgICByZXR1cm4gYnVmLT5sZW47Cit9CisKK3ZvaWQgemZ3Q29weUJ1ZkNvbnRleHQoemRldl90KiBkZXYsIHpidWZfdCogc291cmNlLCB6YnVmX3QqIGRzdCkKK3sKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfZGJnLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy93cmFwX2RiZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNzYzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy93cmFwX2RiZy5jCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKy8qICBNb2R1bGUgTmFtZSA6IHdyYXBfZGJnLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEFic3RyYWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICBUaGlzIG1vZHVsZSBjb250YWlucyB3cmFwcGVyIGZ1bmN0aW9ucyBmb3IgZGVidWcgZnVuY3Rpb25zICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE5PVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICBQbGF0Zm9ybSBkZXBlbmRlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm9hbF9kdC5oIgorI2luY2x1ZGUgInVzYmRydi5oIgorCisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorCisjaWYgV0lSRUxFU1NfRVhUID4gMTIKKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorI2VuZGlmCisKK3ZvaWQgemZ3RHVtcEJ1Zih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgdTE2X3QgaTsKKworICAgIGZvciAoaT0wOyBpPGJ1Zi0+bGVuOyBpKyspCisgICAgeworICAgICAgICBwcmludGsoIiUwMnggIiwgKigoKHU4X3QqKWJ1Zi0+ZGF0YSkraSkpOworICAgICAgICBpZiAoKGkmMHhmKT09MHhmKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGsoIlxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgcHJpbnRrKCJcbiIpOworfQorCisKK3ZvaWQgemZ3RGJnUmVhZFJlZ0RvbmUoemRldl90KiBkZXYsIHUzMl90IGFkZHIsIHUzMl90IHZhbCkKK3sKKyAgICBwcmludGsoIlJlYWQgYWRkcjoleCA9ICV4XG4iLCBhZGRyLCB2YWwpOworfQorCit2b2lkIHpmd0RiZ1dyaXRlUmVnRG9uZSh6ZGV2X3QqIGRldiwgdTMyX3QgYWRkciwgdTMyX3QgdmFsKQoreworICAgIHByaW50aygiV3JpdGUgYWRkcjoleCA9ICV4XG4iLCBhZGRyLCB2YWwpOworfQorCit2b2lkIHpmd0RiZ1JlYWRUYWxseURvbmUoemRldl90KiBkZXYpCit7CisgICAgLy9wcmludGsoIlJlYWQgVGFsbCBEb25lXG4iKTsKK30KKwordm9pZCB6ZndEYmdXcml0ZUVlcHJvbURvbmUoemRldl90KiBkZXYsIHUzMl90IGFkZHIsIHUzMl90IHZhbCkKK3sKK30KKwordm9pZCB6ZndEYmdRdWVyeUh3VHhCdXN5RG9uZSh6ZGV2X3QqIGRldiwgdTMyX3QgdmFsKQoreworfQorCisvL0ZvciBFdmwgKysKK3ZvaWQgemZ3RGJnUmVhZEZsYXNoRG9uZSh6ZGV2X3QqIGRldiwgdTMyX3QgYWRkciwgdTMyX3QqIHJzcGRhdGEsIHUzMl90IGRhdGFsZW4pCit7CisgICAgcHJpbnRrKCJSZWFkIEZsYXNoIGFkZHI6JXggbGVuZ3RoOiV4XG4iLCBhZGRyLCBkYXRhbGVuKTsKK30KKwordm9pZCB6ZndEYmdQcm9ncmFtZUZsYXNoRG9uZSh6ZGV2X3QqIGRldikKK3sKKyAgICBwcmludGsoIlByb2dyYW0gRmxhc2ggRG9uZVxuIik7Cit9CisKK3ZvaWQgemZ3RGJnUHJvZ3JhbWVGbGFzaENoa0RvbmUoemRldl90KiBkZXYpCit7CisgICAgcHJpbnRrKCJQcm9ncmFtIEZsYXNoIERvbmVcbiIpOworfQorCit2b2lkIHpmd0RiZ0dldEZsYXNoQ2hrU3VtRG9uZSh6ZGV2X3QqIGRldiwgdTMyX3QqIHJzcGRhdGEpCit7CisgICAgcHJpbnRrKCJHZXQgRmxhc2ggQ2hrU3VtIERvbmVcbiIpOworfQorCit2b2lkIHpmd0RiZ0Rvd25sb2FkRndJbml0RG9uZSh6ZGV2X3QqIGRldikKK3sKKyAgICBwcmludGsoIkRvd25sb2FkIEZXIEluaXQgRG9uZVxuIik7Cit9CisvL0ZvciBFdmwgLS0KKworLyogTGVhdmUgYW4gZW1wdHkgbGluZSBiZWxvdyB0byByZW1vdmUgd2FybmluZyBtZXNzYWdlIG9uIHNvbWUgY29tcGlsZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTE4ZDFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvd3JhcF9ldi5jCkBAIC0wLDAgKzEsMjgzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTW9kdWxlIE5hbWUgOiB3cmFwX2V2LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEFic3RyYWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICBUaGlzIG1vZHVsZSBjb250YWlucyB3cmFwcGVyIGZ1bmN0aW9ucyBmb3IgZXZlbnRzICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE5PVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICBQbGF0Zm9ybSBkZXBlbmRlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm9hbF9kdC5oIgorI2luY2x1ZGUgInVzYmRydi5oIgorCisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorCisjaWYgV0lSRUxFU1NfRVhUID4gMTIKKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorI2VuZGlmCisKKworLyoqKioqIE1hbmFnZW1lbnQgKioqKiovCit1MTZfdCB6ZkxueEF1dGhOb3RpZnkoemRldl90KiBkZXYsIHUxNl90KiBtYWNBZGRyKQoreworICAgIHJldHVybiAwOworfQorCit1MTZfdCB6ZkxueEFzb2NOb3RpZnkoemRldl90KiBkZXYsIHUxNl90KiBtYWNBZGRyLCB1OF90KiBib2R5LCB1MTZfdCBib2R5U2l6ZSwgdTE2X3QgcG9ydCkKK3sKKy8vI2lmZGVmIFpNX0hPU1RBUERfU1VQUE9SVAorICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKilkZXYtPnByaXY7CisgICAgdW5pb24gaXdyZXFfZGF0YSB3cmVxOworICAgIHU4X3QgKmFkZHIgPSAodThfdCAqKSBtYWNBZGRyOworICAgIHUxNl90IGksIGo7CisKKyAgICBtZW1zZXQoJndyZXEsIDAsIHNpemVvZih3cmVxKSk7CisgICAgbWVtY3B5KHdyZXEuYWRkci5zYV9kYXRhLCBtYWNBZGRyLCBFVEhfQUxFTik7CisgICAgd3JlcS5hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKyAgICBwcmludGsoS0VSTl9ERUJVRyAiam9pbl9ldmVudCBvZiBNQUM6ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorICAgICAgICAgICAgYWRkclswXSwgYWRkclsxXSwgYWRkclsyXSwgYWRkclszXSwgYWRkcls0XSwgYWRkcls1XSk7CisKKyAgICBmb3IoaSA9IDA7IGkgPCBaTV9PQUxfTUFYX1NUQV9TVVBQT1JUOyBpKyspCisgICAgeworICAgICAgICBmb3IoaiA9IDA7IGogPCBJRUVFODAyMTFfQUREUl9MRU47IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChtYWNwLT5zdGF3cGFpZVtpXS53cGFfbWFjYWRkcltqXSAhPSAwKSAmJgorICAgICAgICAgICAgICAgIChtYWNwLT5zdGF3cGFpZVtpXS53cGFfbWFjYWRkcltqXSAhPSBhZGRyW2pdKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoaiA9PSA2KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChpIDwgWk1fT0FMX01BWF9TVEFfU1VQUE9SVCkKKyAgICB7CisgICAgICAgIC8vcHJpbnRrKCJ6ZndBc29jTm90aWZ5IC0gc3RvcmUgd3BhIGllIGluIG1hY3AsIGluZGV4ID0gJWRcbiIsIGkpOworICAgICAgICBtZW1jcHkobWFjcC0+c3Rhd3BhaWVbaV0ud3BhX21hY2FkZHIsIG1hY0FkZHIsIElFRUU4MDIxMV9BRERSX0xFTik7CisgICAgICAgIG1lbWNweShtYWNwLT5zdGF3cGFpZVtpXS53cGFfaWUsIGJvZHksIGJvZHlTaXplKTsKKyAgICB9CisgICAgLy9pZihtYWNwLT5jYXJkU2V0dGluZy5Cc3NUeXBlID09IElORlJBU1RSVUNUVVJFX0JTUykgeworICAgIC8vICAgICAgICAgICAgLy93aXJlbGVzc19zZW5kX2V2ZW50KG1hY3AtPmRldmljZSwgU0lPQ0dJV1NDQU4sICZ3cmVxLCBOVUxMKTsKKyAgICAvLyAgICB3aXJlbGVzc19zZW5kX2V2ZW50KG1hY3AtPmRldmljZSwgU0lPQ0dJV0FQLCAmd3JlcSwgTlVMTCk7CisgICAgLy99CisjaWYgV0lSRUxFU1NfRVhUID49IDE1CisgICAgLy9lbHNlIGlmKG1hY3AtPmNhcmRTZXR0aW5nLkJzc1R5cGUgPT0gQVBfQlNTKSB7CisvLyAgICAgICAgaWYgKHBvcnQgPT0gMCkKKy8vICAgICAgICB7CisgICAgICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVlJFR0lTVEVSRUQsICZ3cmVxLCBOVUxMKTsKKy8vICAgICAgICB9CisvLyAgICAgICAgZWxzZQorLy8gICAgICAgIHsKKy8vICAgICAgICAgICAgLyogQ2hlY2sgd2hldGhlciB0aGUgVkFQIGRldmljZSBpcyB2YWxpZCAqLworLy8gICAgICAgICAgICBpZiAodmFwW3BvcnRdLmRldiAhPSBOVUxMKQorLy8gICAgICAgICAgICB7CisvLyAgICAgICAgICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHZhcFtwb3J0XS5kZXYsIElXRVZSRUdJU1RFUkVELCAmd3JlcSwgTlVMTCk7CisvLyAgICAgICAgICAgIH0KKy8vICAgICAgICAgICAgZWxzZQorLy8gICAgICAgICAgICB7CisvLyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIkNhbicgZmluZCBhIHZhbGlkIFZBUCBkZXZpY2UsIHBvcnQ6ICVkXG4iLCBwb3J0KTsKKy8vICAgICAgICAgICAgfQorLy8gICAgICAgIH0KKyAgICAvL30KKyNlbmRpZgorLy8jZW5kaWYKKworICAgIHJldHVybiAwOworfQorCisKKy8qIE5vdGlmaWNhdGlvbiB0aGF0IGEgU1RBIGlzIGRpc2Fzc29jaWF0ZWQgZnJvbSBBUCAqLworLyogQVAgbW9kZSBvbmx5ICovCit1MTZfdCB6ZkxueERpc0Fzb2NOb3RpZnkoemRldl90KiBkZXYsIHU4X3QqIG1hY0FkZHIsIHUxNl90IHBvcnQpCit7CisgICAgdW5pb24gaXdyZXFfZGF0YSB3cmVxOworICAgIHU4X3QgKmFkZHIgPSAodThfdCAqKSBtYWNBZGRyOworCisgICAgbWVtc2V0KCZ3cmVxLCAwLCBzaXplb2Yod3JlcSkpOworICAgIG1lbWNweSh3cmVxLmFkZHIuc2FfZGF0YSwgbWFjQWRkciwgRVRIX0FMRU4pOworICAgIHdyZXEuYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisgICAgcHJpbnRrKEtFUk5fREVCVUcgInpmd0Rpc0Fzb2NOb3RpZnkoKSwgTUFDOiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKyAgICAgICAgICAgIGFkZHJbMF0sIGFkZHJbMV0sIGFkZHJbMl0sIGFkZHJbM10sIGFkZHJbNF0sIGFkZHJbNV0pOworCisKKyAgICByZXR1cm4gMDsKK30KKworLyogTm90aWZpY2F0aW9uIHRoYXQgYSBTVEEgaXMgY29ubmVjdCB0byBBUCAqLworLyogQVAgbW9kZSBvbmx5ICovCit1MTZfdCB6ZkxueEFwQ29ubmVjdE5vdGlmeSh6ZGV2X3QqIGRldiwgdThfdCogbWFjQWRkciwgdTE2X3QgcG9ydCkKK3sKKyAgICB1bmlvbiBpd3JlcV9kYXRhIHdyZXE7CisgICAgdThfdCAqYWRkciA9ICh1OF90ICopIG1hY0FkZHI7CisKKyAgICBtZW1zZXQoJndyZXEsIDAsIHNpemVvZih3cmVxKSk7CisgICAgbWVtY3B5KHdyZXEuYWRkci5zYV9kYXRhLCBtYWNBZGRyLCBFVEhfQUxFTik7CisgICAgd3JlcS5hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKyAgICBwcmludGsoS0VSTl9ERUJVRyAiemZ3QXBDb25uZWN0Tm90aWZ5KCksIE1BQzogJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisgICAgICAgICAgICBhZGRyWzBdLCBhZGRyWzFdLCBhZGRyWzJdLCBhZGRyWzNdLCBhZGRyWzRdLCBhZGRyWzVdKTsKKworCisgICAgcmV0dXJuIDA7Cit9CisKKworCit2b2lkIHpmTG54Q29ubmVjdE5vdGlmeSh6ZGV2X3QqIGRldiwgdTE2X3Qgc3RhdHVzLCB1MTZfdCogYnNzaWQpCit7CisgICAgdW5pb24gaXdyZXFfZGF0YSB3cmVxOworICAgIHU4X3QgKmFkZHIgPSAodThfdCAqKSBic3NpZDsKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPnByaXY7CisKKyAgICBpZiAoYnNzaWQgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1lbXNldCgmd3JlcSwgMCwgc2l6ZW9mKHdyZXEpKTsKKyAgICAgICAgaWYgKHN0YXR1cyA9PSBaTV9TVEFUVVNfTUVESUFfQ09OTkVDVCkKKyAgICAgICAgICAgIG1lbWNweSh3cmVxLmFkZHIuc2FfZGF0YSwgYnNzaWQsIEVUSF9BTEVOKTsKKyAgICAgICAgd3JlcS5hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKworICAgICAgICBpZiAoc3RhdHVzID09IFpNX1NUQVRVU19NRURJQV9DT05ORUNUKQorICAgICAgICB7CisjaWZkZWYgWk1fQ09ORklHX0JJR19FTkRJQU4KKyAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICJDb25uZWN0ZWQgdG8gQVAsIE1BQzogJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisgICAgICAgICAgICAgICAgICAgIGFkZHJbMV0sIGFkZHJbMF0sIGFkZHJbM10sIGFkZHJbMl0sIGFkZHJbNV0sIGFkZHJbNF0pOworI2Vsc2UKKyAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICJDb25uZWN0ZWQgdG8gQVAsIE1BQzogJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisgICAgICAgICAgICAgICAgICAgIGFkZHJbMF0sIGFkZHJbMV0sIGFkZHJbMl0sIGFkZHJbM10sIGFkZHJbNF0sIGFkZHJbNV0pOworI2VuZGlmCisKKyAgICAgICAgICAgIG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKHN0YXR1cyA9PSBaTV9TVEFUVVNfTUVESUFfRElTQ09OTkVDVCkgfHwKKyAgICAgICAgICAgICAgICAgKHN0YXR1cyA9PSBaTV9TVEFUVVNfTUVESUFfRElTQUJMRUQpIHx8CisgICAgICAgICAgICAgICAgIChzdGF0dXMgPT0gWk1fU1RBVFVTX01FRElBX0NPTk5FQ1RJT05fRElTQUJMRUQpIHx8CisJICAgICAgICAgKHN0YXR1cyA9PSBaTV9TVEFUVVNfTUVESUFfQ09OTkVDVElPTl9SRVNFVCkgfHwKKwkgICAgICAgICAoc3RhdHVzID09IFpNX1NUQVRVU19NRURJQV9SRVNFVCkgfHwKKwkgICAgICAgICAoc3RhdHVzID09IFpNX1NUQVRVU19NRURJQV9ESVNDT05ORUNUX0RFQVVUSCkgfHwKKwkgICAgICAgICAoc3RhdHVzID09IFpNX1NUQVRVU19NRURJQV9ESVNDT05ORUNUX0RJU0FTT0MpIHx8CisJICAgICAgICAgKHN0YXR1cyA9PSBaTV9TVEFUVVNfTUVESUFfRElTQ09OTkVDVF9CRUFDT05fTUlTUykgfHwKKyAgICAgICAgICAgICAgICAgKHN0YXR1cyA9PSBaTV9TVEFUVVNfTUVESUFfRElTQ09OTkVDVF9OT1RfRk9VTkQpIHx8CisJICAgICAgICAgKHN0YXR1cyA9PSBaTV9TVEFUVVNfTUVESUFfRElTQ09OTkVDVF9USU1FT1VUKSkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIkRpc2Nvbm5lY3Rpb24gTm90aWZ5XG4iKTsKKworICAgICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworICAgICAgICB9CisKKwkvKiBTYXZlIHRoZSBjb25uZWN0ZWQgc3RhdHVzICovCisJbWFjcC0+YWRhcHRlclN0YXRlID0gc3RhdHVzOworCisgICAgICAgIGlmKHpmaVdsYW5RdWVyeVdsYW5Nb2RlKGRldikgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSkgeworICAgICAgICAvLyAgICAgICAgICAgIC8vd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdTQ0FOLCAmd3JlcSwgTlVMTCk7CisgICAgICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV0FQLCAmd3JlcSwgTlVMTCk7CisgICAgICAgIH0KKyNpZiBXSVJFTEVTU19FWFQgPj0gMTUKKyAgICAgICAgZWxzZSBpZih6ZmlXbGFuUXVlcnlXbGFuTW9kZShkZXYpID09IFpNX01PREVfQVApIHsKKyAgICAgICAgICAgIC8vaWYgKHBvcnQgPT0gMCkKKyAgICAgICAgICAgIC8veworICAgICAgICAgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBJV0VWUkVHSVNURVJFRCwgJndyZXEsIE5VTEwpOworICAgICAgICAgICAgLy99CisgICAgICAgICAgICAvL2Vsc2UKKyAgICAgICAgICAgIC8veworICAgICAgICAgICAgLy8gICAgLyogQ2hlY2sgd2hldGhlciB0aGUgVkFQIGRldmljZSBpcyB2YWxpZCAqLworICAgICAgICAgICAgLy8gICAgaWYgKHZhcFtwb3J0XS5kZXYgIT0gTlVMTCkKKyAgICAgICAgICAgIC8vICAgIHsKKyAgICAgICAgICAgIC8vICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHZhcFtwb3J0XS5kZXYsIElXRVZSRUdJU1RFUkVELCAmd3JlcSwgTlVMTCk7CisgICAgICAgICAgICAvLyAgICB9CisgICAgICAgICAgICAvLyAgICBlbHNlCisgICAgICAgICAgICAvLyAgICB7CisgICAgICAgICAgICAvLyAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJDYW4nIGZpbmQgYSB2YWxpZCBWQVAgZGV2aWNlLCBwb3J0OiAlZFxuIiwgcG9ydCk7CisgICAgICAgICAgICAvLyAgICB9CisgICAgICAgICAgICAvL30KKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIC8vcmV0dXJuIDA7Cit9CisKK3ZvaWQgemZMbnhTY2FuTm90aWZ5KHpkZXZfdCogZGV2LCBzdHJ1Y3QgenNTY2FuUmVzdWx0KiByZXN1bHQpCit7CisgICAgcmV0dXJuOworfQorCit2b2lkIHpmTG54U3RhdGlzdGljc05vdGlmeSh6ZGV2X3QqIGRldiwgc3RydWN0IHpzU3Rhc3RpY3MqIHJlc3VsdCkKK3sKKyAgICByZXR1cm47Cit9CisKKy8vdm9pZCB6ZndNaWNGYWlsdXJlTm90aWZ5KHpkZXZfdCogZGV2LCB1OF90KiBtZXNzYWdlLCB1MTZfdCBldmVudCkKK3ZvaWQgemZMbnhNaWNGYWlsdXJlTm90aWZ5KHpkZXZfdCogZGV2LCB1MTZfdCogYWRkciwgdTE2X3Qgc3RhdHVzKQoreworCXN0YXRpYyBjb25zdCBjaGFyICp0YWcgPSAiTUxNRS1NSUNIQUVMTUlDRkFJTFVSRS5pbmRpY2F0aW9uIjsKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisJY2hhciBidWZbMTI4XTsKKworCS8qIFRPRE86IG5lZWRlZCBwYXJhbWV0ZXJzOiBjb3VudCwgdHlwZSwgc3JjIGFkZHJlc3MgKi8KKwkvL3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyglc2Nhc3QgYWRkcj0lcykiLCB0YWcsCisJLy8gICAgKHN0YXR1cyA9PSBaTV9NSUNfR1JPVVBfRVJST1IpID8gICJicm9hZCIgOiAidW5pIiwKKwkvLyAgICBldGhlcl9zcHJpbnRmKCh1OF90ICopYWRkcikpOworCisJaWYgKHpmaVdsYW5RdWVyeVdsYW5Nb2RlKGRldikgPT0gWk1fTU9ERV9JTkZSQVNUUlVDVFVSRSkKKwl7CisJCXN0cmNweShidWYsIHRhZyk7CisJfQorCisJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCXdycXUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKKwl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVkNVU1RPTSwgJndycXUsIGJ1Zik7Cit9CisKKwordm9pZCB6ZkxueEFwTWljRmFpbHVyZU5vdGlmeSh6ZGV2X3QqIGRldiwgdThfdCogYWRkciwgemJ1Zl90KiBidWYpCit7CisgICAgdW5pb24gaXdyZXFfZGF0YSB3cmVxOworCisgICAgbWVtc2V0KCZ3cmVxLCAwLCBzaXplb2Yod3JlcSkpOworICAgIG1lbWNweSh3cmVxLmFkZHIuc2FfZGF0YSwgYWRkciwgRVRIX0FMRU4pOworICAgIHdyZXEuYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisgICAgcHJpbnRrKEtFUk5fREVCVUcgInpmd0FwTWljRmFpbHVyZU5vdGlmeSgpLCBNQUM6ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorICAgICAgICAgICAgYWRkclswXSwgYWRkclsxXSwgYWRkclsyXSwgYWRkclszXSwgYWRkcls0XSwgYWRkcls1XSk7CisKKyAgICByZXR1cm47Cit9CisKKy8vIHN0YXR1cyA9IDAgID0+IHBhcnRuZXIgbG9zdAorLy8gICAgICAgID0gMSAgPT4gcGFydG5lciBhbGl2ZQorLy92b2lkIHpmd0lic3NQYXJ0bmVyTm90aWZ5KHpkZXZfdCogZGV2LCB1OF90IHN0YXR1cykKK3ZvaWQgemZMbnhJYnNzUGFydG5lck5vdGlmeSh6ZGV2X3QqIGRldiwgdTE2X3Qgc3RhdHVzLCBzdHJ1Y3QgenNQYXJ0bmVyTm90aWZ5RXZlbnQgKmV2ZW50KQoreworfQorCit2b2lkIHpmTG54TWFjQWRkcmVzc05vdGlmeSh6ZGV2X3QqIGRldiwgdThfdCogYWRkcikKK3sKKyAgICBkZXYtPmRldl9hZGRyWzBdID0gYWRkclswXTsKKyAgICBkZXYtPmRldl9hZGRyWzFdID0gYWRkclsxXTsKKyAgICBkZXYtPmRldl9hZGRyWzJdID0gYWRkclsyXTsKKyAgICBkZXYtPmRldl9hZGRyWzNdID0gYWRkclszXTsKKyAgICBkZXYtPmRldl9hZGRyWzRdID0gYWRkcls0XTsKKyAgICBkZXYtPmRldl9hZGRyWzVdID0gYWRkcls1XTsKK30KKwordm9pZCB6ZkxueFNlbmRDb21wbGV0ZUluZGljYXRpb24oemRldl90KiBkZXYsIHpidWZfdCogYnVmKQoreworfQorCisKK3ZvaWQgemZMbnhSZXN0b3JlQnVmRGF0YSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpIHsKKworfQorLyogTGVhdmUgYW4gZW1wdHkgbGluZSBiZWxvdyB0byByZW1vdmUgd2FybmluZyBtZXNzYWdlIG9uIHNvbWUgY29tcGlsZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfbWVtLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy93cmFwX21lbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwODFiYjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy93cmFwX21lbS5jCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKy8qICBNb2R1bGUgTmFtZSA6IHdyYXBfbWVtLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEFic3RyYWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICBUaGlzIG1vZHVsZSBjb250YWlucyB3cmFwcGVyIGZ1bmN0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE5PVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICBQbGF0Zm9ybSBkZXBlbmRlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm9hbF9kdC5oIgorI2luY2x1ZGUgInVzYmRydi5oIgorCisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorCisjaWYgV0lSRUxFU1NfRVhUID4gMTIKKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorI2VuZGlmCisKKy8qIE1lbW9yeSBtYW5hZ2VtZW50ICovCisvKiBDYWxsZWQgdG8gYWxsb2NhdGUgdW5jYWNoZWQgbWVtb3J5LCBhbGxvY2F0ZWQgbWVtb3J5IG11c3QgICAgKi8KKy8qIGluIDQtYnl0ZSBib3VuZGFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwordm9pZCogemZ3TWVtQWxsb2NhdGUoemRldl90KiBkZXYsIHUzMl90IHNpemUpCit7CisgICAgdm9pZCogbWVtID0gTlVMTDsKKyAgICBtZW0gPSBrbWFsbG9jKHNpemUsIEdGUF9BVE9NSUMpOworICAgIHJldHVybiBtZW07Cit9CisKKworLyogQ2FsbGVkIHRvIGZyZWUgYWxsb2NhdGVkIG1lbW9yeSAqLwordm9pZCB6ZndNZW1GcmVlKHpkZXZfdCogZGV2LCB2b2lkKiBtZW0sIHUzMl90IHNpemUpCit7CisgICAga2ZyZWUobWVtKTsKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgemZ3TWVtb3J5Q29weSh1OF90KiBkc3QsIHU4X3QqIHNyYywgdTE2X3QgbGVuZ3RoKQoreworICAgIC8vdTE2X3QgaTsKKworICAgIG1lbWNweShkc3QsIHNyYywgbGVuZ3RoKTsKKyAgICAvL2ZvcihpPTA7IGk8bGVuZ3RoOyBpKyspCisgICAgLy97CisgICAgLy8gICAgZHN0W2ldID0gc3JjW2ldOworICAgIC8vfQorICAgIHJldHVybjsKK30KKwordm9pZCB6ZndaZXJvTWVtb3J5KHU4X3QqIHZhLCB1MTZfdCBsZW5ndGgpCit7CisgICAgLy91MTZfdCBpOworICAgIG1lbXNldCh2YSwgMCwgbGVuZ3RoKTsKKyAgICAvL2ZvcihpPTA7IGk8bGVuZ3RoOyBpKyspCisgICAgLy97CisgICAgLy8gICAgdmFbaV0gPSAwOworICAgIC8vfQorICAgIHJldHVybjsKK30KKwordm9pZCB6ZndNZW1vcnlNb3ZlKHU4X3QqIGRzdCwgdThfdCogc3JjLCB1MTZfdCBsZW5ndGgpCit7CisgICAgbWVtY3B5KGRzdCwgc3JjLCBsZW5ndGgpOworICAgIHJldHVybjsKK30KKwordThfdCB6ZndNZW1vcnlJc0VxdWFsKHU4X3QqIG0xLCB1OF90KiBtMiwgdTE2X3QgbGVuZ3RoKQoreworICAgIC8vdTE2X3QgaTsKKyAgICBpbnQgcmV0OworCisgICAgcmV0ID0gbWVtY21wKG0xLCBtMiwgbGVuZ3RoKTsKKworICAgIHJldHVybiAoKHJldD09MCk/VFJVRTpGQUxTRSk7CisgICAgLy9mb3IoaT0wOyBpPGxlbmd0aDsgaSsrKQorICAgIC8veworICAgIC8vICAgIGlmICggbTFbaV0gIT0gbTJbaV0gKQorICAgIC8vICAgIHsKKyAgICAvLyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIC8vICAgIH0KKyAgICAvL30KKworICAgIC8vcmV0dXJuIFRSVUU7Cit9CisKKy8qIExlYXZlIGFuIGVtcHR5IGxpbmUgYmVsb3cgdG8gcmVtb3ZlIHdhcm5pbmcgbWVzc2FnZSBvbiBzb21lIGNvbXBpbGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy93cmFwX21pcy5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvd3JhcF9taXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGFkZjM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvd3JhcF9taXMuYwpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE1vZHVsZSBOYW1lIDogd3JhcF9taXMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQWJzdHJhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBtaXNjIGZ1bmN0aW9ucyAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTk9URVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgIFBsYXRmb3JtIGRlcGVuZGVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAib2FsX2R0LmgiCisjaW5jbHVkZSAidXNiZHJ2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisKKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjZW5kaWYKKworLy9leHRlcm4gc3RydWN0IHpzV2RzU3RydWN0IHdkc1taTV9XRFNfUE9SVF9OVU1CRVJdOworZXh0ZXJuIHN0cnVjdCB6c1ZhcFN0cnVjdCB2YXBbWk1fVkFQX1BPUlRfTlVNQkVSXTsKK2V4dGVybiB1MTZfdCB6ZkxueEdldFZhcElkKHpkZXZfdCogZGV2KTsKKworLyogU2ltcGx5IHJldHVybiAweGZmZmYgaWYgVkFQIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgKi8KK3UxNl90IHpmd0dldFZhcElkKHpkZXZfdCogZGV2KQoreworICAgIHJldHVybiB6ZkxueEdldFZhcElkKGRldik7Cit9CisKK3ZvaWQgemZ3U2xlZXAoemRldl90KiBkZXYsIHUzMl90IG1zKQoreworICAgIGlmIChpbl9pbnRlcnJ1cHQoKSA9PSAwKQorICAgIHsKKyAgICAgICAgbWRlbGF5KG1zKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaW50IGlpOworICAgICAgICBpbnQgaXRlciA9IDEwMDAwMCAqIG1zOworCisgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IGl0ZXI7IGlpKyspCisgICAgICAgIHsKKworICAgICAgICB9CisgICAgfQorfQorCisjaWZkZWYgWk1fSEFMUExVU19MT0NLCithc21saW5rYWdlIHN0cnVjdCB6c1dsYW5EZXYgKnpmd0dldFdsYW5EZXYoemRldl90KiBkZXYpCit7CisgICAgcmV0dXJuICgoc3RydWN0IHpzV2xhbkRldiopKCgoc3RydWN0IHVzYmRydl9wcml2YXRlKilkZXYtPnByaXYpLT53ZCkpOworfQorCithc21saW5rYWdlIHZvaWQgemZ3RW50ZXJDcml0aWNhbFNlY3Rpb24oemRldl90KiBkZXYpCit7CisgICAgc3Bpbl9sb2NrX2lycXNhdmUoJigoKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKShkZXYtPnByaXYpKS0+Y3NfbG9jayksCisgICAgICAgICAgICAoKChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKikoZGV2LT5wcml2KSktPmhhbF9pcnFGbGFnKSk7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCB6ZndMZWF2ZUNyaXRpY2FsU2VjdGlvbih6ZGV2X3QqIGRldikKK3sKKyAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoKChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKikoZGV2LT5wcml2KSktPmNzX2xvY2spLAorICAgICAgICAgICAgKCgoc3RydWN0IHVzYmRydl9wcml2YXRlICopKGRldi0+cHJpdikpLT5oYWxfaXJxRmxhZykpOworfQorCithc21saW5rYWdlIHU4X3QgemZ3QnVmUmVhZEJ5dGUoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQpCit7CisgICAgcmV0dXJuICoodThfdCopKCh1OF90KilidWYtPmRhdGErb2Zmc2V0KTsKK30KKworYXNtbGlua2FnZSB1MTZfdCB6ZndCdWZSZWFkSGFsZldvcmQoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQpCit7CisgICAgcmV0dXJuIHptd19jcHVfdG9fbGUxNigqKHUxNl90KikoKHU4X3QqKWJ1Zi0+ZGF0YStvZmZzZXQpKTsKK30KKworYXNtbGlua2FnZSB2b2lkIHpmd0J1ZldyaXRlQnl0ZSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCwgdThfdCB2YWx1ZSkKK3sKKyAgICAqKHU4X3QqKSgodThfdCopYnVmLT5kYXRhK29mZnNldCkgPSB2YWx1ZTsKK30KKworYXNtbGlua2FnZSB2b2lkIHpmd0J1ZldyaXRlSGFsZldvcmQoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBvZmZzZXQsIHUxNl90IHZhbHVlKQoreworICAgICoodTE2X3QqKSgodThfdCopYnVmLT5kYXRhK29mZnNldCkgPSB6bXdfY3B1X3RvX2xlMTYodmFsdWUpOworfQorCithc21saW5rYWdlIHU4X3QgKnpmd0dldEJ1ZmZlcih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCit7CisgICAgcmV0dXJuICh1OF90KikoYnVmLT5kYXRhKTsKK30KKyNlbmRpZgorCisvKiBMZWF2ZSBhbiBlbXB0eSBsaW5lIGJlbG93IHRvIHJlbW92ZSB3YXJuaW5nIG1lc3NhZ2Ugb24gc29tZSBjb21waWxlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvd3JhcF9wa3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfcGt0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJkZGE0YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfcGt0LmMKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBNb2R1bGUgTmFtZSA6IHdyYXBfcGt0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEFic3RyYWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICBUaGlzIG1vZHVsZSBjb250YWlucyB3cmFwcGVyIGZ1bmN0aW9ucyBmb3IgcGFja2V0IGhhbmRsaW5nICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE5PVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICBQbGF0Zm9ybSBkZXBlbmRlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm9hbF9kdC5oIgorI2luY2x1ZGUgInVzYmRydi5oIgorCisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorCisjaWYgV0lSRUxFU1NfRVhUID4gMTIKKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorI2VuZGlmCisKKworCisvL2V4dGVybiBzdHJ1Y3QgenNXZHNTdHJ1Y3Qgd2RzW1pNX1dEU19QT1JUX05VTUJFUl07CitleHRlcm4gc3RydWN0IHpzVmFwU3RydWN0IHZhcFtaTV9WQVBfUE9SVF9OVU1CRVJdOworCisKKy8qKioqKiBSeCAqKioqKi8KK3ZvaWQgemZMbnhSZWN2ODAyMTEoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCBzdHJ1Y3QgenNBZGRpdGlvbkluZm8qIGFkZEluZm8pCit7CisgICAgdTE2X3QgZnJhbWVUeXBlOworICAgIHUxNl90IGZyYW1lQ3RybDsKKyAgICB1MTZfdCBmcmFtZVN1YnR5cGU7CisgICAgemJ1Zl90ICpza2IxOworICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+cHJpdjsKKworICAgIC8vZnJhbWVDdHJsID0gem13X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMCk7CisgICAgZnJhbWVDdHJsID0gKih1OF90KikoKHU4X3QqKWJ1Zi0+ZGF0YSk7CisgICAgZnJhbWVUeXBlID0gZnJhbWVDdHJsICYgMHhmOworICAgIGZyYW1lU3VidHlwZSA9IGZyYW1lQ3RybCAmIDB4ZjA7CisKKyAgICBpZiAoKGZyYW1lVHlwZSA9PSAweDApICYmIChtYWNwLT5mb3J3YXJkTWdtdCkpCisgICAgeworICAgICAgICBzd2l0Y2ggKGZyYW1lU3VidHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIEJlYWNvbiAqLworICAgICAgICAgICAgY2FzZSAweDgwIDoKKyAgICAgICAgICAgICAgICAvKiBQcm9iZSByZXNwb25zZSAqLworICAgICAgICAgICAgY2FzZSAweDUwIDoKKyAgICAgICAgICAgICAgICBza2IxID0gc2tiX2NvcHkoYnVmLCBHRlBfQVRPTUlDKTsKKyAgICAgICAgICAgICAgICBpZihza2IxICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBza2IxLT5kZXYgPSBkZXY7CisgICAgICAgICAgICAgICAgI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjIpKQorCSAgICAgICAgICAgIHNrYjEtPm1hYy5yYXcgPSBza2IxLT5kYXRhOworICAgICAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgICAgIHNrYjEtPm1hY19oZWFkZXIgPSBza2IxLT5kYXRhOworICAgICAgICAgICAgICAgICNlbmRpZgorCSAgICAgICAgICAgIHNrYjEtPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJICAgICAgICAgICAgc2tiMS0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOworCSAgICAgICAgICAgIHNrYjEtPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucygweDAwMTkpOyAgLyogRVRIX1BfODAyMTFfUkFXICovCisgICAgCSAgICAgICAgICAgIG5ldGlmX3J4KHNrYjEpOworCSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB6ZmlSZWN2ODAyMTEoZGV2LCBidWYsIGFkZEluZm8pOworICAgIHJldHVybjsKK30KKworI2RlZmluZSBaTV9BVk9JRF9VRFBfTEFSR0VfUEFDS0VUX0ZBSUwKK3ZvaWQgemZMbnhSZWN2RXRoKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdTE2X3QgcG9ydCkKK3sKKyNpZmRlZiBaTV9BVk9JRF9VRFBfTEFSR0VfUEFDS0VUX0ZBSUwKKyAgICB6YnVmX3QgKm5ld19idWY7CisKKyAgICAvL25ld19idWYgPSBkZXZfYWxsb2Nfc2tiKDIwNDgpOworICAgIG5ld19idWYgPSBkZXZfYWxsb2Nfc2tiKGJ1Zi0+bGVuKTsKKworI2lmZGVmIE5FVF9TS0JVRkZfREFUQV9VU0VTX09GRlNFVAorICAgIG5ld19idWYtPnRhaWwgPSAwOworICAgIG5ld19idWYtPmxlbiA9IDA7CisjZWxzZQorICAgIG5ld19idWYtPnRhaWwgPSBuZXdfYnVmLT5kYXRhOworICAgIG5ld19idWYtPmxlbiA9IDA7CisjZW5kaWYKKworICAgIHNrYl9wdXQobmV3X2J1ZiwgYnVmLT5sZW4pOworICAgIG1lbWNweShuZXdfYnVmLT5kYXRhLCBidWYtPmRhdGEsIGJ1Zi0+bGVuKTsKKworICAgIC8qIEZyZWUgYnVmZmVyICovCisgICAgZGV2X2tmcmVlX3NrYl9hbnkoYnVmKTsKKworICAgIGlmIChwb3J0ID09IDApCisgICAgeworICAgICAgICBuZXdfYnVmLT5kZXYgPSBkZXY7CisgICAgICAgIG5ld19idWYtPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMobmV3X2J1ZiwgZGV2KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogVkFQICovCisgICAgICAgIGlmICh2YXBbMF0uZGV2ICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5ld19idWYtPmRldiA9IHZhcFswXS5kZXY7CisgICAgICAgICAgICBuZXdfYnVmLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKG5ld19idWYsIHZhcFswXS5kZXYpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbmV3X2J1Zi0+ZGV2ID0gZGV2OworICAgICAgICAgICAgbmV3X2J1Zi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhuZXdfYnVmLCBkZXYpOworICAgICAgICB9CisgICAgfQorCisgICAgbmV3X2J1Zi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKyAgICBkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCisgICAgc3dpdGNoKG5ldGlmX3J4KG5ld19idWYpKQorI2Vsc2UKKyAgICBpZiAocG9ydCA9PSAwKQorICAgIHsKKyAgICAgICAgYnVmLT5kZXYgPSBkZXY7CisgICAgICAgIGJ1Zi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhidWYsIGRldik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIFZBUCAqLworICAgICAgICBpZiAodmFwWzBdLmRldiAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBidWYtPmRldiA9IHZhcFswXS5kZXY7CisgICAgICAgICAgICBidWYtPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoYnVmLCB2YXBbMF0uZGV2KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGJ1Zi0+ZGV2ID0gZGV2OworICAgICAgICAgICAgYnVmLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKGJ1ZiwgZGV2KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJ1Zi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKyAgICBkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCisgICAgc3dpdGNoKG5ldGlmX3J4KGJ1ZikpCisjZW5kaWYKKyAgICB7CisgICAgY2FzZSBORVRfUlhfQkFEOgorICAgIGNhc2UgTkVUX1JYX0RST1A6CisgICAgY2FzZSBORVRfUlhfQ05fTU9EOgorICAgIGNhc2UgTkVUX1JYX0NOX0hJR0g6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAoKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSopKGRldi0+cHJpdikpLT4KKyAgICAgICAgICAgICAgICAgICAgZHJ2X3N0YXRzLm5ldF9zdGF0cy5yeF9wYWNrZXRzKys7CisgICAgICAgICAgICAoKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSopKGRldi0+cHJpdikpLT4KKyAgICAgICAgICAgICAgICAgICAgZHJ2X3N0YXRzLm5ldF9zdGF0cy5yeF9ieXRlcyArPSBidWYtPmxlbjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuOworfQorCisvKiBMZWF2ZSBhbiBlbXB0eSBsaW5lIGJlbG93IHRvIHJlbW92ZSB3YXJuaW5nIG1lc3NhZ2Ugb24gc29tZSBjb21waWxlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvd3JhcF9zZWMuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfc2VjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNmYzQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfc2VjLmMKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBNb2R1bGUgTmFtZSA6IHdyYXBfc2VjLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEFic3RyYWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICBUaGlzIG1vZHVsZSBjb250YWlucyB3cmFwcGVyIGZ1bmN0aW9ucyBmb3IgQ0VOQy4gICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE5PVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICBQbGF0Zm9ybSBkZXBlbmRlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm9hbF9kdC5oIgorI2luY2x1ZGUgInVzYmRydi5oIgorCisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorCisjaWYgV0lSRUxFU1NfRVhUID4gMTIKKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorI2VuZGlmCisKKyNpZmRlZiBaTV9FTkFCTEVfQ0VOQworZXh0ZXJuIGludCB6ZkxueENlbmNTZW5kTXNnKHN0cnVjdCBzb2NrICpuZXRsaW5rX3NrLCB1X2ludDhfdCAqbXNnLCBpbnQgbGVuKTsKKwordTE2X3QgemZMbnhDZW5jQXNvY05vdGlmeSh6ZGV2X3QqIGRldiwgdTE2X3QqIG1hY0FkZHIsIHU4X3QqIGJvZHksIHUxNl90IGJvZHlTaXplLCB1MTZfdCBwb3J0KQoreworICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKilkZXYtPnByaXY7CisgICAgc3RydWN0IHp5ZGFzX2NlbmNfc3RhX2luZm8gY2VuY19pbmZvOworICAgIC8vc3RydWN0IHNvY2sgKm5ldGxpbmtfc2s7CisgICAgdThfdCBpZV9sZW47CisgICAgaW50IGlpOworCisgICAgLyogQ3JlYXRlIE5FVExJTksgc29ja2V0ICovCisgICAgLy9uZXRsaW5rX3NrID0gbmV0bGlua19rZXJuZWxfY3JlYXRlKE5FVExJTktfVVNFUlNPQ0ssIE5VTEwpOworCisgICAgaWYgKG1hY3AtPm5ldGxpbmtfc2sgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHByaW50ayhLRVJOX0VSUiAiTkVUTElOSyBTb2NrZXQgaXMgTlVMTFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBtZW1zZXQoJmNlbmNfaW5mbywgMCwgc2l6ZW9mKGNlbmNfaW5mbykpOworCisgICAgLy9tZW1jcHkoY2VuY19pbmZvLmdzbiwgdmFwLT5pdl9jZW5jbXNrX2tleXMud2tfdHhpdiwgWk1fQ0VOQ19JVl9MRU4pOworICAgIHpmaVdsYW5RdWVyeUdTTihkZXYsIGNlbmNfaW5mby5nc24sIHBvcnQpOworICAgIGNlbmNfaW5mby5kYXRhbGVuICs9IFpNX0NFTkNfSVZfTEVOOworICAgIGllX2xlbiA9IGJvZHlbMV0gKyAyOworICAgIG1lbWNweShjZW5jX2luZm8ud2llLCBib2R5LCBpZV9sZW4pOworICAgIGNlbmNfaW5mby5kYXRhbGVuICs9IGllX2xlbjsKKworICAgIG1lbWNweShjZW5jX2luZm8uc3RhX21hYywgbWFjQWRkciwgNik7CisgICAgY2VuY19pbmZvLm1zZ190eXBlID0gWk1fQ0VOQ19XQUlfUkVRVUVTVDsKKyAgICBjZW5jX2luZm8uZGF0YWxlbiArPSA2ICsgMjsKKworICAgIHByaW50ayhLRVJOX0VSUiAiPT09PT0gemZ3Q2VuY1NlbmRNc2csIGJvZHlTaXplOiAlZCA9PT09PVxuIiwgYm9keVNpemUpOworCisgICAgZm9yKGlpID0gMDsgaWkgPCBib2R5U2l6ZTsgaWkrKykKKyAgICB7CisgICAgICAgIHByaW50ayhLRVJOX0VSUiAiJTAyeCAiLCBib2R5W2lpXSk7CisKKyAgICAgICAgaWYgKChpaSAmIDB4ZikgPT0gMHhmKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlxuIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB6ZkxueENlbmNTZW5kTXNnKG1hY3AtPm5ldGxpbmtfc2ssICh1OF90ICopJmNlbmNfaW5mbywgY2VuY19pbmZvLmRhdGFsZW4rNCk7CisKKyAgICAvKiBDbG9zZSBORVRMSU5LIHNvY2tldCAqLworICAgIC8vc29ja19yZWxlYXNlKG5ldGxpbmtfc2spOworCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworCit1OF90IHpmd0NlbmNIYW5kbGVCZWFjb25Qcm9icmVzcG9uKHpkZXZfdCogZGV2LCB1OF90ICpwV0lFYywKKyAgICAgICAgdThfdCAqcFBlZXJTU0lEYywgdThfdCAqcFBlZXJBZGRyYykKK3sKKyAgICByZXR1cm4gMDsKK30KKwordThfdCB6ZndHZXRQa3RFbmNFeGVtcHRpb25BY3Rpb25UeXBlKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZikKK3sKKyAgICByZXR1cm4gWk1fRU5DUllQVElPTl9FWEVNUFRfTk9fRVhFTVBUSU9OOworfQorCit2b2lkIGNvcHlUb0ludFR4QnVmZmVyKHpkZXZfdCogZGV2LCB6YnVmX3QqIGJ1ZiwgdThfdCogc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgIHUxNl90IG9mZnNldCwgdTE2X3QgbGVuZ3RoKQoreworICAgIHUxNl90IGk7CisKKyAgICBmb3IoaT0wOyBpPGxlbmd0aDtpKyspCisgICAgeworICAgICAgICAvL3ptd190eF9idWZfd3JpdGViKGRldiwgYnVmLCBvZmZzZXQraSwgc3JjW2ldKTsKKyAgICAgICAgKih1OF90KikoKHU4X3QqKWJ1Zi0+ZGF0YStvZmZzZXQraSkgPSBzcmNbaV07CisgICAgfQorfQorCit1MTZfdCB6ZndTdGFBZGRJZVdwYVJzbih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IG9mZnNldCwgdThfdCBmcmFtZVR5cGUpCit7CisgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5wcml2OworICAgIC8vem1fbXNnMV9tbShaTV9MVl8wLCAiQ1dZIC0gYWRkIHdwYWllIGNvbnRlbnQgTGVuZ3RoIDogIiwgbWFjcC0+c3VwSWVbMV0pOworICAgIGlmIChtYWNwLT5zdXBJZVsxXSAhPSAwKQorICAgIHsKKyAgICAgICAgY29weVRvSW50VHhCdWZmZXIoZGV2LCBidWYsIG1hY3AtPnN1cEllLCBvZmZzZXQsIG1hY3AtPnN1cEllWzFdKzIpOworICAgICAgICAvL21lbWNweShidWYtPmRhdGFbb2Zmc2V0XSwgbWFjcC0+c3VwSWUsIG1hY3AtPnN1cEllWzFdKzIpOworICAgICAgICBvZmZzZXQgKz0gKG1hY3AtPnN1cEllWzFdKzIpOworICAgIH0KKworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKKy8qIExlYXZlIGFuIGVtcHR5IGxpbmUgYmVsb3cgdG8gcmVtb3ZlIHdhcm5pbmcgbWVzc2FnZSBvbiBzb21lIGNvbXBpbGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy93cmFwX3VzYi5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvd3JhcF91c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2MwZWNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvd3JhcF91c2IuYwpAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE1vZHVsZSBOYW1lIDogd3JhcF91c2IuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQWJzdHJhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBVU0IgbWFuYWdlbWVudCAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTk9URVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgIFBsYXRmb3JtIGRlcGVuZGVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAib2FsX2R0LmgiCisjaW5jbHVkZSAidXNiZHJ2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisKKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgemZMbnhJbml0VXNiVHhRKHpkZXZfdCogZGV2KTsKK2V4dGVybiB2b2lkIHpmTG54SW5pdFVzYlJ4USh6ZGV2X3QqIGRldik7CitleHRlcm4gdTMyX3QgemZMbnhTdWJtaXRSZWdJblVyYih6ZGV2X3QgKmRldik7Cit1MzJfdCB6ZkxueFVzYk91dCh6ZGV2X3QqIGRldiwgdThfdCAqaGRyLCB1MTZfdCBoZHJsZW4sIHU4X3QgKnNuYXAsIHUxNl90IHNuYXBMZW4sCisgICAgICAgIHU4X3QgKnRhaWwsIHUxNl90IHRhaWxMZW4sIHpidWZfdCAqYnVmLCB1MTZfdCBvZmZzZXQpOwordTMyX3QgemZMbnhVc2JXcml0ZVJlZyh6ZGV2X3QqIGRldiwgdTMyX3QqIGNtZCwgdTE2X3QgY21kTGVuKTsKKwordm9pZCB6ZndVc2JSZWdpc3RlckNhbGxCYWNrKHpkZXZfdCogZGV2LCBzdHJ1Y3QgemZDYlVzYkZ1bmNUYmwgKnpmVXNiRnVuYykgeworICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKilkZXYtPnByaXY7CisKKyAgICBtYWNwLT51c2JDYkZ1bmN0aW9ucy56ZmNiVXNiUmVjdiA9IHpmVXNiRnVuYy0+emZjYlVzYlJlY3Y7CisgICAgbWFjcC0+dXNiQ2JGdW5jdGlvbnMuemZjYlVzYlJlZ0luID0gemZVc2JGdW5jLT56ZmNiVXNiUmVnSW47CisgICAgbWFjcC0+dXNiQ2JGdW5jdGlvbnMuemZjYlVzYk91dENvbXBsZXRlID0gemZVc2JGdW5jLT56ZmNiVXNiT3V0Q29tcGxldGU7CisKKyAgICByZXR1cm47Cit9CisKK3UzMl90IHpmd1VzYkdldEZyZWVUeFFTaXplKHpkZXZfdCogZGV2KQoreworICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKilkZXYtPnByaXY7CisgICAgdTMyX3QgICAgICAgIGZyZWVUeFFTaXplOworICAgIHVuc2lnbmVkIGxvbmcgaXJxRmxhZzsKKyAgICAvL3ptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CisKKyAgICAvL3ptd19lbnRlcl9jcml0aWNhbF9zZWN0aW9uKGRldik7CisgICAgc3Bpbl9sb2NrX2lycXNhdmUoJigoKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKShkZXYtPnByaXYpKS0+Y3NfbG9jayksIGlycUZsYWcpOworCisgICAgZnJlZVR4UVNpemUgPSBaTV9NQVhfVFhfQlVGX05VTSAtIG1hY3AtPlR4QnVmQ250OworCisgICAgLy96bXdfbGVhdmVfY3JpdGljYWxfc2VjdGlvbihkZXYpOworICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJigoKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKShkZXYtPnByaXYpKS0+Y3NfbG9jayksIGlycUZsYWcpOworCisgICAgcmV0dXJuIGZyZWVUeFFTaXplOworfQorCit1MzJfdCB6ZndVc2JHZXRNYXhUeFFTaXplKHpkZXZfdCogZGV2KQoreworICAgIHJldHVybiBaTV9NQVhfVFhfQlVGX05VTTsKK30KKwordTMyX3QgemZ3VXNiRW5hYmxlSW50RXB0KHpkZXZfdCAqZGV2LCB1OF90IGVuZHB0KQoreworICAgIC8qIEluaXRpYWxpemUgVVNCIFR4USAqLworICAgIHpmTG54SW5pdFVzYlR4UShkZXYpOworCisgICAgLyogSW5pdGlhbGl6ZSBVU0IgUnhRICovCisgICAgemZMbnhJbml0VXNiUnhRKGRldik7CisKKyAgICAvKiBJbml0aWFsaXplIFVTQiBSZWdpc3RlciBJbiBVUkIgKi8KKyAgICAvL3pmd1VzYlN1Ym1pdFJlZ0luKGRldik7CisgICAgLyogSW5pdGlhbGl6ZSBVU0IgUmVnaXN0ZXIgSW4gVVJCICovCisgICAgemZMbnhTdWJtaXRSZWdJblVyYihkZXYpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB6ZndVc2JFbmFibGVSeEVwdCh6ZGV2X3QqIGRldiwgdThfdCBlbmRwdCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwordTMyX3QgemZ3VXNiU3VibWl0Q29udHJvbCh6ZGV2X3QqIGRldiwgdThfdCByZXEsIHUxNl90IHZhbHVlLCB1MTZfdCBpbmRleCwgdm9pZCAqZGF0YSwgdTMyX3Qgc2l6ZSkKK3sKKyAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICB1MzJfdCByZXQgPSAwOworICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKilkZXYtPnByaXY7CisgICAgdThfdCogYnVmOworCisgICAgaWYgKHNpemUgPiAwKQorICAgIHsKKyAgICAgICAgYnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgbWVtY3B5KGJ1ZiwgKHU4X3QqKWRhdGEsIHNpemUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBidWYgPSBOVUxMOworICAgIH0KKworI2lmIDAKKyAgICBwcmludGsoS0VSTl9FUlIgInJlcSA9IDB4JTAyeFxuIiwgcmVxKTsKKyAgICBwcmludGsoS0VSTl9FUlIgInZhbHVlID0gMHglMDR4XG4iLCB2YWx1ZSk7CisgICAgcHJpbnRrKEtFUk5fRVJSICJpbmRleCA9IDB4JTA0eFxuIiwgaW5kZXgpOworICAgIHByaW50ayhLRVJOX0VSUiAiZGF0YSA9IDB4JWx4XG4iLCAodTMyX3QpIGRhdGEpOworICAgIHByaW50ayhLRVJOX0VSUiAic2l6ZSA9ICVsZFxuIiwgc2l6ZSk7CisjZW5kaWYKKworICAgIHJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhtYWNwLT51ZGV2LCB1c2Jfc25kY3RybHBpcGUobWFjcC0+dWRldiwgMCksCisgICAgICAgICAgICByZXEsIFVTQl9ESVJfT1VUIHwgMHg0MCwgdmFsdWUsIGluZGV4LCBidWYsIHNpemUsIEhaKTsKKworICAgIGlmIChyZXN1bHQgPCAwKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJ6ZndVc2JTdWJtaXRDb250cm9sKCkgZmFpbGVkLCByZXN1bHQ9MHgleFxuIiwgcmVzdWx0KTsKKyAgICAgICAgcmV0ID0gMTsKKyAgICB9CisgICAga2ZyZWUoYnVmKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgemZ3VXNiQ21kKHpkZXZfdCogZGV2LCB1OF90IGVuZHB0LCB1MzJfdCogY21kLCB1MTZfdCBjbWRMZW4pCit7CisgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKWRldi0+cHJpdjsKKyAgICB1MzJfdCByZXQ7CisKKyAgICAvL01QVXNiQ29tbWFuZChkZXYsIGVuZHB0LCBjbWQsIGNtZExlbik7CisgICAgcmV0ID0gemZMbnhVc2JXcml0ZVJlZyhkZXYsIGNtZCwgY21kTGVuKTsKKworICAgIC8qIGlmIHpmTG54VXNiV3JpdGVSZWcoKSByZXR1cm4gZXJyb3IsIGZyZWUgYW5kIGFsbG9jYXRlIHVyYiwgcmVzZW5kIGFnYWluICovCisgICAgaWYgKHJldCAhPSAwKQorICAgIHsKKyAgICAgICAgdXNiX2ZyZWVfdXJiKG1hY3AtPlJlZ091dFVyYik7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSAvKiB0dW5lIG1lISAqLworICAgICAgICBtYWNwLT5SZWdPdXRVcmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOworI2Vsc2UKKyAgICAgICAgbWFjcC0+UmVnT3V0VXJiID0gdXNiX2FsbG9jX3VyYigwKTsKKyNlbmRpZgorICAgICAgICByZXQgPSB6ZkxueFVzYldyaXRlUmVnKGRldiwgY21kLCBjbWRMZW4pOworICAgIH0KK30KKwordTMyX3QgemZ3VXNiU2VuZCh6ZGV2X3QqIGRldiwgdThfdCBlbmRwdCwgdThfdCAqaGRyLCB1MTZfdCBoZHJsZW4sIHU4X3QgKnNuYXAsIHUxNl90IHNuYXBMZW4sCisgICAgICAgICAgICAgICAgdThfdCAqdGFpbCwgdTE2X3QgdGFpbExlbiwgemJ1Zl90ICpidWYsIHUxNl90IG9mZnNldCkKK3sKKyAgICB1MzJfdCBzdGF0dXM7CisKKyNpZmRlZiBaTV9DT05GSUdfQklHX0VORElBTgorICAgIHUzMl90IGlpID0gMDsKKyAgICB1MTZfdCAqcGMgPSBOVUxMOworCisgICAgcGMgPSAodTE2X3QgKiloZHI7CisgICAgZm9yKGlpPTA7IGlpPChoZHJsZW4+PjEpOyBpaSsrKQorICAgIHsKKyAgICAgICAgcGNbaWldID0gY3B1X3RvX2xlMTYocGNbaWldKTsKKyAgICB9CisKKyAgICBwYyA9ICh1MTZfdCAqKXNuYXA7CisgICAgZm9yKGlpPTA7IGlpPChzbmFwTGVuPj4xKTsgaWkrKykKKyAgICB7CisgICAgICAgIHBjW2lpXSA9IGNwdV90b19sZTE2KHBjW2lpXSk7CisgICAgfQorCisgICAgcGMgPSAodTE2X3QgKil0YWlsOworICAgIGZvcihpaT0wOyBpaTwodGFpbExlbj4+MSk7IGlpKyspCisgICAgeworICAgICAgICBwY1tpaV0gPSBjcHVfdG9fbGUxNihwY1tpaV0pOworICAgIH0KKyNlbmRpZgorCisgICAgc3RhdHVzID0gemZMbnhVc2JPdXQoZGV2LCBoZHIsIGhkcmxlbiwgc25hcCwgc25hcExlbiwgdGFpbCwgdGFpbExlbiwgYnVmLCBvZmZzZXQpOworICAgIGlmICggc3RhdHVzID09IDAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KK30KKworLyogTGVhdmUgYW4gZW1wdHkgbGluZSBiZWxvdyB0byByZW1vdmUgd2FybmluZyBtZXNzYWdlIG9uIHNvbWUgY29tcGlsZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3d3cmFwLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy93d3JhcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NzI5ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy93d3JhcC5jCkBAIC0wLDAgKzEsMTIwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisvKiAgTW9kdWxlIE5hbWUgOiB3d3JhcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEFic3RyYWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgVGhpcyBtb2R1bGUgY29udGFpbnMgd3JhcHBlciBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE5PVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgUGxhdGZvcm0gZGVwZW5kZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBQbGVhc2UgaW5jbHVkZSB5b3VyIGhlYWRlciBmaWxlcyBoZXJlICovCisjaW5jbHVkZSAib2FsX2R0LmgiCisjaW5jbHVkZSAidXNiZHJ2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisKKyNpZiBXSVJFTEVTU19FWFQgPiAxMgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisjZGVmaW5lIFVSQl9aRVJPX1BBQ0tFVCBVU0JfWkVST19QQUNLRVQKKyNlbmRpZgorCitleHRlcm4gdm9pZCB6ZmlSZWN2ODAyMTEoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCBzdHJ1Y3QgenNBZGRpdGlvbkluZm8qIGFkZEluZm8pOworZXh0ZXJuIHZvaWQgemZDb3JlUmVjdih6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHN0cnVjdCB6c0FkZGl0aW9uSW5mbyogYWRkSW5mbyk7CitleHRlcm4gdm9pZCB6ZklkbENoa1JzcCh6ZGV2X3QqIGRldiwgdTMyX3QqIHJzcCwgdTE2X3QgcnNwTGVuKTsKK2V4dGVybiB2b2lkIHpmSWRsUnNwKHpkZXZfdCogZGV2LCB1MzJfdCAqcnNwLCB1MTZfdCByc3BMZW4pOworCisKKworLy9leHRlcm4gc3RydWN0IHpzV2RzU3RydWN0IHdkc1taTV9XRFNfUE9SVF9OVU1CRVJdOworZXh0ZXJuIHN0cnVjdCB6c1ZhcFN0cnVjdCB2YXBbWk1fVkFQX1BPUlRfTlVNQkVSXTsKKwordTMyX3QgemZMbnhVc2JTdWJtaXRUeERhdGEoemRldl90KiBkZXYpOwordTMyX3QgemZMbnhVc2JJbih6ZGV2X3QqIGRldiwgdXJiX3QgKnVyYiwgemJ1Zl90ICpidWYpOwordTMyX3QgemZMbnhTdWJtaXRSZWdJblVyYih6ZGV2X3QgKmRldik7Cit1MzJfdCB6ZkxueFVzYlN1Ym1pdEJ1bGtVcmIodXJiX3QgKnVyYiwgc3RydWN0IHVzYl9kZXZpY2UgKnVzYiwgdTE2X3QgZXBudW0sIHUxNl90IGRpcmVjdGlvbiwKKyAgICAgICAgdm9pZCAqdHJhbnNmZXJfYnVmZmVyLCBpbnQgYnVmZmVyX2xlbmd0aCwgdXNiX2NvbXBsZXRlX3QgY29tcGxldGUsIHZvaWQgKmNvbnRleHQpOwordTMyX3QgemZMbnhVc2JTdWJtaXRJbnRVcmIodXJiX3QgKnVyYiwgc3RydWN0IHVzYl9kZXZpY2UgKnVzYiwgdTE2X3QgZXBudW0sIHUxNl90IGRpcmVjdGlvbiwKKyAgICAgICAgdm9pZCAqdHJhbnNmZXJfYnVmZmVyLCBpbnQgYnVmZmVyX2xlbmd0aCwgdXNiX2NvbXBsZXRlX3QgY29tcGxldGUsIHZvaWQgKmNvbnRleHQsCisgICAgICAgIHUzMl90IGludGVydmFsKTsKKwordTE2X3QgemZMbnhHZXRGcmVlVHhVcmIoemRldl90ICpkZXYpCit7CisgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKWRldi0+cHJpdjsKKyAgICB1MTZfdCBpZHg7CisgICAgdW5zaWduZWQgbG9uZyBpcnFGbGFnOworCisgICAgc3Bpbl9sb2NrX2lycXNhdmUoJigoKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKShkZXYtPnByaXYpKS0+Y3NfbG9jayksIGlycUZsYWcpOworCisgICAgLy9pZHggPSAoKG1hY3AtPlR4VXJiVGFpbCArIDEpICYgKFpNX01BWF9UWF9VUkJfTlVNIC0gMSkpOworCisgICAgLy9pZiAoaWR4ICE9IG1hY3AtPlR4VXJiSGVhZCkKKyAgICBpZiAobWFjcC0+VHhVcmJDbnQgIT0gMCkKKyAgICB7CisgICAgICAgIGlkeCA9IG1hY3AtPlR4VXJiVGFpbDsKKyAgICAgICAgbWFjcC0+VHhVcmJUYWlsID0gKChtYWNwLT5UeFVyYlRhaWwgKyAxKSAmIChaTV9NQVhfVFhfVVJCX05VTSAtIDEpKTsKKyAgICAgICAgbWFjcC0+VHhVcmJDbnQtLTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy9wcmludGsoS0VSTl9FUlIgIm1hY3AtPlR4VXJiQ250OiAlZFxuIiwgbWFjcC0+VHhVcmJDbnQpOworICAgICAgICBpZHggPSAweGZmZmY7CisgICAgfQorCisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKCgoc3RydWN0IHVzYmRydl9wcml2YXRlICopKGRldi0+cHJpdikpLT5jc19sb2NrKSwgaXJxRmxhZyk7CisgICAgcmV0dXJuIGlkeDsKK30KKwordm9pZCB6ZkxueFB1dFR4VXJiKHpkZXZfdCAqZGV2KQoreworICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKilkZXYtPnByaXY7CisgICAgdTE2X3QgaWR4OworICAgIHVuc2lnbmVkIGxvbmcgaXJxRmxhZzsKKworICAgIHNwaW5fbG9ja19pcnFzYXZlKCYoKChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKikoZGV2LT5wcml2KSktPmNzX2xvY2spLCBpcnFGbGFnKTsKKworICAgIGlkeCA9ICgobWFjcC0+VHhVcmJIZWFkICsgMSkgJiAoWk1fTUFYX1RYX1VSQl9OVU0gLSAxKSk7CisKKyAgICAvL2lmIChpZHggIT0gbWFjcC0+VHhVcmJUYWlsKQorICAgIGlmIChtYWNwLT5UeFVyYkNudCA8IFpNX01BWF9UWF9VUkJfTlVNKQorICAgIHsKKyAgICAgICAgbWFjcC0+VHhVcmJIZWFkID0gaWR4OworICAgICAgICBtYWNwLT5UeFVyYkNudCsrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwcmludGsoIlVzYlR4VXJiUSBpbmNvbnNpc3RlbnQ6IFR4VXJiSGVhZDogJWQsIFR4VXJiVGFpbDogJWRcbiIsCisgICAgICAgICAgICAgICAgbWFjcC0+VHhVcmJIZWFkLCBtYWNwLT5UeFVyYlRhaWwpOworICAgIH0KKworICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJigoKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKShkZXYtPnByaXYpKS0+Y3NfbG9jayksIGlycUZsYWcpOworfQorCit1MTZfdCB6ZkxueENoZWNrVHhCdWZmZXJDbnQoemRldl90ICpkZXYpCit7CisgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKWRldi0+cHJpdjsKKyAgICB1MTZfdCBUeEJ1ZkNudDsKKyAgICB1bnNpZ25lZCBsb25nIGlycUZsYWc7CisKKyAgICBzcGluX2xvY2tfaXJxc2F2ZSgmKCgoc3RydWN0IHVzYmRydl9wcml2YXRlICopKGRldi0+cHJpdikpLT5jc19sb2NrKSwgaXJxRmxhZyk7CisKKyAgICBUeEJ1ZkNudCA9IG1hY3AtPlR4QnVmQ250OworCisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKCgoc3RydWN0IHVzYmRydl9wcml2YXRlICopKGRldi0+cHJpdikpLT5jc19sb2NrKSwgaXJxRmxhZyk7CisgICAgcmV0dXJuIFR4QnVmQ250OworfQorCitVc2JUeFFfdCAqemZMbnhHZXRVc2JUeEJ1ZmZlcih6ZGV2X3QgKmRldikKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSAoc3RydWN0IHVzYmRydl9wcml2YXRlICopZGV2LT5wcml2OworICAgIHUxNl90IGlkeDsKKyAgICBVc2JUeFFfdCAqVHhROworICAgIHVuc2lnbmVkIGxvbmcgaXJxRmxhZzsKKworICAgIHNwaW5fbG9ja19pcnFzYXZlKCYoKChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKikoZGV2LT5wcml2KSktPmNzX2xvY2spLCBpcnFGbGFnKTsKKworICAgIGlkeCA9ICgobWFjcC0+VHhCdWZIZWFkKzEpICYgKFpNX01BWF9UWF9CVUZfTlVNIC0gMSkpOworCisgICAgLy9pZiAoaWR4ICE9IG1hY3AtPlR4QnVmVGFpbCkKKyAgICBpZiAobWFjcC0+VHhCdWZDbnQgPiAwKQorICAgIHsKKyAgICAgICAgLy9wcmludGsoIkNXWSAtIHpmd0dldFVzYlR4QnVmZmVyICxtYWNwLT5UeEJ1ZkNudCA9ICVkXG4iLCBtYWNwLT5UeEJ1ZkNudCk7CisgICAgICAgIFR4USA9IChVc2JUeFFfdCAqKSYobWFjcC0+VXNiVHhCdWZRW21hY3AtPlR4QnVmSGVhZF0pOworICAgICAgICBtYWNwLT5UeEJ1ZkhlYWQgPSAoKG1hY3AtPlR4QnVmSGVhZCsxKSAmIChaTV9NQVhfVFhfQlVGX05VTSAtIDEpKTsKKyAgICAgICAgbWFjcC0+VHhCdWZDbnQtLTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKG1hY3AtPlR4QnVmSGVhZCAhPSBtYWNwLT5UeEJ1ZlRhaWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiemZ3R2V0VXNiVHhCdWYgVXNiVHhCdWZRIGluY29uc2lzdGVudDogVHhCdWZIZWFkOiAlZCwgVHhCdWZUYWlsOiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgbWFjcC0+VHhCdWZIZWFkLCBtYWNwLT5UeEJ1ZlRhaWwpOworICAgICAgICB9CisKKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKCgoc3RydWN0IHVzYmRydl9wcml2YXRlICopKGRldi0+cHJpdikpLT5jc19sb2NrKSwgaXJxRmxhZyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJigoKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKShkZXYtPnByaXYpKS0+Y3NfbG9jayksIGlycUZsYWcpOworICAgIHJldHVybiBUeFE7Cit9CisKK3UxNl90IHpmTG54UHV0VXNiVHhCdWZmZXIoemRldl90ICpkZXYsIHU4X3QgKmhkciwgdTE2X3QgaGRybGVuLAorICAgICAgICB1OF90ICpzbmFwLCB1MTZfdCBzbmFwTGVuLCB1OF90ICp0YWlsLCB1MTZfdCB0YWlsTGVuLAorICAgICAgICB6YnVmX3QgKmJ1ZiwgdTE2X3Qgb2Zmc2V0KQoreworICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKilkZXYtPnByaXY7CisgICAgdTE2X3QgaWR4OworICAgIFVzYlR4UV90ICpUeFE7CisgICAgdW5zaWduZWQgbG9uZyBpcnFGbGFnOworCisgICAgc3Bpbl9sb2NrX2lycXNhdmUoJigoKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKShkZXYtPnByaXYpKS0+Y3NfbG9jayksIGlycUZsYWcpOworCisgICAgaWR4ID0gKChtYWNwLT5UeEJ1ZlRhaWwrMSkgJiAoWk1fTUFYX1RYX0JVRl9OVU0gLSAxKSk7CisKKyAgICAvKiBGb3IgVHggZGVidWcgKi8KKyAgICAvL3ptX2Fzc2VydChtYWNwLT5UeEJ1ZkNudCA+PSAwKTsgLy8gZGVsZXRlZCBiZWNhdXNlIG9mIGFsd2F5cyB0cnVlCisKKyAgICAvL2lmIChpZHggIT0gbWFjcC0+VHhCdWZIZWFkKQorICAgIGlmIChtYWNwLT5UeEJ1ZkNudCA8IFpNX01BWF9UWF9CVUZfTlVNKQorICAgIHsKKyAgICAgICAgLy9wcmludGsoIkNXWSAtIHpmd1B1dFVzYlR4QnVmZmVyICxtYWNwLT5UeEJ1ZkNudCA9ICVkXG4iLCBtYWNwLT5UeEJ1ZkNudCk7CisgICAgICAgIFR4USA9IChVc2JUeFFfdCAqKSYobWFjcC0+VXNiVHhCdWZRW21hY3AtPlR4QnVmVGFpbF0pOworICAgICAgICBtZW1jcHkoVHhRLT5oZHIsIGhkciwgaGRybGVuKTsKKyAgICAgICAgVHhRLT5oZHJsZW4gPSBoZHJsZW47CisgICAgICAgIG1lbWNweShUeFEtPnNuYXAsIHNuYXAsIHNuYXBMZW4pOworICAgICAgICBUeFEtPnNuYXBMZW4gPSBzbmFwTGVuOworICAgICAgICBtZW1jcHkoVHhRLT50YWlsLCB0YWlsLCB0YWlsTGVuKTsKKyAgICAgICAgVHhRLT50YWlsTGVuID0gdGFpbExlbjsKKyAgICAgICAgVHhRLT5idWYgPSBidWY7CisgICAgICAgIFR4US0+b2Zmc2V0ID0gb2Zmc2V0OworCisgICAgICAgIG1hY3AtPlR4QnVmVGFpbCA9ICgobWFjcC0+VHhCdWZUYWlsKzEpICYgKFpNX01BWF9UWF9CVUZfTlVNIC0gMSkpOworICAgICAgICBtYWNwLT5UeEJ1ZkNudCsrOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwcmludGsoS0VSTl9FUlIgInpmTG54UHV0VXNiVHhCdWZmZXIgVXNiVHhCdWZRIGluY29uc2lzdGVudDogVHhCdWZIZWFkOiAlZCwgVHhCdWZUYWlsOiAlZCwgVHhCdWZDbnQ6ICVkXG4iLAorICAgICAgICAgICAgbWFjcC0+VHhCdWZIZWFkLCBtYWNwLT5UeEJ1ZlRhaWwsIG1hY3AtPlR4QnVmQ250KTsKKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKCgoc3RydWN0IHVzYmRydl9wcml2YXRlICopKGRldi0+cHJpdikpLT5jc19sb2NrKSwgaXJxRmxhZyk7CisgICAgICAgIHJldHVybiAweGZmZmY7CisgICAgfQorCisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKCgoc3RydWN0IHVzYmRydl9wcml2YXRlICopKGRldi0+cHJpdikpLT5jc19sb2NrKSwgaXJxRmxhZyk7CisgICAgcmV0dXJuIDA7Cit9CisKK3pidWZfdCAqemZMbnhHZXRVc2JSeEJ1ZmZlcih6ZGV2X3QgKmRldikKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSAoc3RydWN0IHVzYmRydl9wcml2YXRlICopZGV2LT5wcml2OworICAgIC8vdTE2X3QgaWR4OworICAgIHpidWZfdCAqYnVmOworICAgIHVuc2lnbmVkIGxvbmcgaXJxRmxhZzsKKworICAgIHNwaW5fbG9ja19pcnFzYXZlKCYoKChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKikoZGV2LT5wcml2KSktPmNzX2xvY2spLCBpcnFGbGFnKTsKKworICAgIC8vaWR4ID0gKChtYWNwLT5SeEJ1ZkhlYWQrMSkgJiAoWk1fTUFYX1JYX1VSQl9OVU0gLSAxKSk7CisKKyAgICAvL2lmIChpZHggIT0gbWFjcC0+UnhCdWZUYWlsKQorICAgIGlmIChtYWNwLT5SeEJ1ZkNudCAhPSAwKQorICAgIHsKKyAgICAgICAgYnVmID0gbWFjcC0+VXNiUnhCdWZRW21hY3AtPlJ4QnVmSGVhZF07CisgICAgICAgIG1hY3AtPlJ4QnVmSGVhZCA9ICgobWFjcC0+UnhCdWZIZWFkKzEpICYgKFpNX01BWF9SWF9VUkJfTlVNIC0gMSkpOworICAgICAgICBtYWNwLT5SeEJ1ZkNudC0tOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwcmludGsoIlJ4QnVmUSBpbmNvbnNpc3RlbnQ6IFJ4QnVmSGVhZDogJWQsIFJ4QnVmVGFpbDogJWRcbiIsCisgICAgICAgICAgICAgICAgbWFjcC0+UnhCdWZIZWFkLCBtYWNwLT5SeEJ1ZlRhaWwpOworICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoKChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKikoZGV2LT5wcml2KSktPmNzX2xvY2spLCBpcnFGbGFnKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKCgoc3RydWN0IHVzYmRydl9wcml2YXRlICopKGRldi0+cHJpdikpLT5jc19sb2NrKSwgaXJxRmxhZyk7CisgICAgcmV0dXJuIGJ1ZjsKK30KKwordTMyX3QgemZMbnhQdXRVc2JSeEJ1ZmZlcih6ZGV2X3QgKmRldiwgemJ1Zl90ICpidWYpCit7CisgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKWRldi0+cHJpdjsKKyAgICB1MTZfdCBpZHg7CisgICAgdW5zaWduZWQgbG9uZyBpcnFGbGFnOworCisgICAgc3Bpbl9sb2NrX2lycXNhdmUoJigoKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKShkZXYtPnByaXYpKS0+Y3NfbG9jayksIGlycUZsYWcpOworCisgICAgaWR4ID0gKChtYWNwLT5SeEJ1ZlRhaWwrMSkgJiAoWk1fTUFYX1JYX1VSQl9OVU0gLSAxKSk7CisKKyAgICAvL2lmIChpZHggIT0gbWFjcC0+UnhCdWZIZWFkKQorICAgIGlmIChtYWNwLT5SeEJ1ZkNudCAhPSBaTV9NQVhfUlhfVVJCX05VTSkKKyAgICB7CisgICAgICAgIG1hY3AtPlVzYlJ4QnVmUVttYWNwLT5SeEJ1ZlRhaWxdID0gYnVmOworICAgICAgICBtYWNwLT5SeEJ1ZlRhaWwgPSBpZHg7CisgICAgICAgIG1hY3AtPlJ4QnVmQ250Kys7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHByaW50aygiUnhCdWZRIGluY29uc2lzdGVudDogUnhCdWZIZWFkOiAlZCwgUnhCdWZUYWlsOiAlZFxuIiwKKyAgICAgICAgICAgICAgICBtYWNwLT5SeEJ1ZkhlYWQsIG1hY3AtPlJ4QnVmVGFpbCk7CisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJigoKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKShkZXYtPnByaXYpKS0+Y3NfbG9jayksIGlycUZsYWcpOworICAgICAgICByZXR1cm4gMHhmZmZmOworICAgIH0KKworICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJigoKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKShkZXYtPnByaXYpKS0+Y3NfbG9jayksIGlycUZsYWcpOworICAgIHJldHVybiAwOworfQorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKK3ZvaWQgemZMbnhVc2JEYXRhT3V0X2NhbGxiYWNrKHVyYl90ICp1cmIpCisjZWxzZQordm9pZCB6ZkxueFVzYkRhdGFPdXRfY2FsbGJhY2sodXJiX3QgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisjZW5kaWYKK3sKKyAgICB6ZGV2X3QqIGRldiA9IHVyYi0+Y29udGV4dDsKKyAgICAvL1VzYlR4UV90ICpUeERhdGE7CisKKyAgICAvKiBHaXZlIHRoZSB1cmIgYmFjayAqLworICAgIHpmTG54UHV0VHhVcmIoZGV2KTsKKworICAgIC8qIENoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYW55IHBlbmRpbmcgYnVmZmVyIG5lZWRlZCAqLworICAgIC8qIHRvIGJlIHNlbnQgKi8KKyAgICBpZiAoemZMbnhDaGVja1R4QnVmZmVyQ250KGRldikgIT0gMCkKKyAgICB7CisgICAgICAgIC8vVHhEYXRhID0gemZ3R2V0VXNiVHhCdWZmZXIoZGV2KTsKKworICAgICAgICAvL2lmIChUeERhdGEgPT0gTlVMTCkKKyAgICAgICAgLy97CisgICAgICAgIC8vICAgIHByaW50aygiR2V0IGEgTlVMTCBidWZmZXIgZnJvbSB6ZndHZXRVc2JUeEJ1ZmZlclxuIik7CisgICAgICAgIC8vICAgIHJldHVybjsKKyAgICAgICAgLy99CisgICAgICAgIC8vZWxzZQorICAgICAgICAvL3sKKyAgICAgICAgICAgIHpmTG54VXNiU3VibWl0VHhEYXRhKGRldik7CisgICAgICAgIC8vfQorICAgIH0KK30KKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCit2b2lkIHpmTG54VXNiRGF0YUluX2NhbGxiYWNrKHVyYl90ICp1cmIpCisjZWxzZQordm9pZCB6ZkxueFVzYkRhdGFJbl9jYWxsYmFjayh1cmJfdCAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKKyNlbmRpZgoreworICAgIHpkZXZfdCogZGV2ID0gdXJiLT5jb250ZXh0OworICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKilkZXYtPnByaXY7CisgICAgemJ1Zl90ICpidWY7CisgICAgemJ1Zl90ICpuZXdfYnVmOworICAgIGludCBzdGF0dXM7CisKKyNpZiBaTV9VU0JfU1RSRUFNX01PREUgPT0gMQorICAgIHN0YXRpYyBpbnQgcmVtYWluX2xlbiA9IDAsIGNoZWNrX3BhZCA9IDAsIGNoZWNrX2xlbiA9IDA7CisgICAgaW50IGluZGV4ID0gMDsKKyAgICBpbnQgY2hrX2lkeDsKKyAgICB1MTZfdCBwa3RfbGVuOworICAgIHUxNl90IHBrdF90YWc7CisgICAgdTE2X3QgaWk7CisgICAgemJ1Zl90ICpyeEJ1ZlBvb2xbOF07CisgICAgdTE2X3QgcnhCdWZQb29sSW5kZXggPSAwOworI2VuZGlmCisKKyAgICAvKiBDaGVjayBzdGF0dXMgZm9yIFVSQiAqLworICAgIGlmICh1cmItPnN0YXR1cyAhPSAwKXsKKyAgICAgICAgcHJpbnRrKCJ6ZkxueFVzYkRhdGFJbl9jYWxsYmFjaygpIDogc3RhdHVzPTB4JXhcbiIsIHVyYi0+c3RhdHVzKTsKKyAgICAgICAgaWYgKCh1cmItPnN0YXR1cyAhPSAtRU5PRU5UKSAmJiAodXJiLT5zdGF0dXMgIT0gLUVDT05OUkVTRVQpCisgICAgICAgICAgICAmJiAodXJiLT5zdGF0dXMgIT0gLUVTSFVURE9XTikpCisgICAgICAgIHsKKyAgICAgICAgICAgICNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorICAgICAgICAgICAgICAgIGlmICh1cmItPnN0YXR1cyA9PSBVU0JfU1RfSU5URVJOQUxFUlJPUikKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gLTE7CisgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgIGlmICh1cmItPnN0YXR1cyA9PSAtRVBJUEUpeworICAgICAgICAgICAgICAgICAgICAvL3ByaW50ayhLRVJOX0VSUiAibm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAtRVBJUEUiKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gLTE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHVyYi0+c3RhdHVzID09IC1FUFJPVE8peworICAgICAgICAgICAgICAgICAgICAvL3ByaW50ayhLRVJOX0VSUiAibm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAtRVBST1RPIik7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgLy9wcmludGsoS0VSTl9FUlIgInVyYi0+c3RhdHVzOiAweCUwOHhcbiIsIHVyYi0+c3RhdHVzKTsKKworICAgICAgICAvKiBEZXF1ZXVlIHNrYiBidWZmZXIgKi8KKyAgICAgICAgYnVmID0gemZMbnhHZXRVc2JSeEJ1ZmZlcihkZXYpOworICAgICAgICBkZXZfa2ZyZWVfc2tiX2FueShidWYpOworICAgICAgICAjaWYgMAorICAgICAgICAvKiBFbnF1ZXVlIHNrYiBidWZmZXIgKi8KKyAgICAgICAgemZMbnhQdXRVc2JSeEJ1ZmZlcihkZXYsIGJ1Zik7CisKKyAgICAgICAgLyogU3VibWl0IGEgUnggdXJiICovCisgICAgICAgIHpmTG54VXNiSW4oZGV2LCB1cmIsIGJ1Zik7CisgICAgICAgICNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSAwKQorICAgIHsKKyAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJHZXQgYW4gVVJCIHdob3NlIGxlbmd0aCBpcyB6ZXJvIik7CisgICAgICAgIHN0YXR1cyA9IC0xOworICAgIH0KKworICAgIC8qIERlcXVldWUgc2tiIGJ1ZmZlciAqLworICAgIGJ1ZiA9IHpmTG54R2V0VXNiUnhCdWZmZXIoZGV2KTsKKworICAgIC8vemZ3QnVmU2V0U2l6ZShkZXYsIGJ1ZiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKyNpZmRlZiBORVRfU0tCVUZGX0RBVEFfVVNFU19PRkZTRVQKKyAgICBidWYtPnRhaWwgPSAwOworICAgIGJ1Zi0+bGVuID0gMDsKKyNlbHNlCisgICAgYnVmLT50YWlsID0gYnVmLT5kYXRhOworICAgIGJ1Zi0+bGVuID0gMDsKKyNlbmRpZgorCisgICAgaWYgKChidWYtPnRhaWwgKyB1cmItPmFjdHVhbF9sZW5ndGgpID4gYnVmLT5lbmQpCisgICAgICAgIEJVRygpOworCisgICAgc2tiX3B1dChidWYsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisKKyNpZiBaTV9VU0JfU1RSRUFNX01PREUgPT0gMQorICAgIGlmIChyZW1haW5fbGVuICE9IDApCisgICAgeworICAgICAgICB6YnVmX3QgKnJlbWFpbl9idWYgPSBtYWNwLT5yZWFtaW5fYnVmOworCisgICAgICAgIGluZGV4ID0gcmVtYWluX2xlbjsKKyAgICAgICAgcmVtYWluX2xlbiAtPSBjaGVja19wYWQ7CisKKyAgICAgICAgLyogIENvcHkgZGF0YSAqLworICAgICAgICBtZW1jcHkoJihyZW1haW5fYnVmLT5kYXRhW2NoZWNrX2xlbl0pLCBidWYtPmRhdGEsIHJlbWFpbl9sZW4pOworICAgICAgICBjaGVja19sZW4gKz0gcmVtYWluX2xlbjsKKyAgICAgICAgcmVtYWluX2xlbiA9IDA7CisKKyAgICAgICAgcnhCdWZQb29sW3J4QnVmUG9vbEluZGV4KytdID0gcmVtYWluX2J1ZjsKKyAgICB9CisKKyAgICB3aGlsZShpbmRleCA8IHVyYi0+YWN0dWFsX2xlbmd0aCkKKyAgICB7CisgICAgICAgIHBrdF9sZW4gPSBidWYtPmRhdGFbaW5kZXhdICsgKGJ1Zi0+ZGF0YVtpbmRleCsxXSA8PCA4KTsKKyAgICAgICAgcGt0X3RhZyA9IGJ1Zi0+ZGF0YVtpbmRleCsyXSArIChidWYtPmRhdGFbaW5kZXgrM10gPDwgOCk7CisKKyAgICAgICAgaWYgKHBrdF90YWcgPT0gMHg0ZTAwKQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgcGFkX2xlbjsKKworICAgICAgICAgICAgLy9wcmludGsoIkdldCBhIHBhY2tldCwgaW5kZXg6ICVkLCBwa3RfbGVuOiAweCUwNHhcbiIsIGluZGV4LCBwa3RfbGVuKTsKKyAgICAgICAgICAgICNpZiAwCisgICAgICAgICAgICAvKiBEdW1wIGRhdGEgKi8KKyAgICAgICAgICAgIGZvciAoaWkgPSBpbmRleDsgaWkgPCBwa3RfbGVuKzQ7KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50aygiJTAyeCAiLCAoYnVmLT5kYXRhW2lpXSAmIDB4ZmYpKTsKKworICAgICAgICAgICAgICAgIGlmICgoKytpaSAlIDE2KSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBwcmludGsoIlxuIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByaW50aygiXG4iKTsKKyAgICAgICAgICAgICNlbmRpZgorCisgICAgICAgICAgICBwYWRfbGVuID0gNCAtIChwa3RfbGVuICYgMHgzKTsKKworICAgICAgICAgICAgaWYocGFkX2xlbiA9PSA0KQorICAgICAgICAgICAgICAgIHBhZF9sZW4gPSAwOworCisgICAgICAgICAgICBjaGtfaWR4ID0gaW5kZXg7CisgICAgICAgICAgICBpbmRleCA9IGluZGV4ICsgNCArIHBrdF9sZW4gKyBwYWRfbGVuOworCisgICAgICAgICAgICBpZiAoaW5kZXggPiBaTV9NQVhfUlhfQlVGRkVSX1NJWkUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVtYWluX2xlbiA9IGluZGV4IC0gWk1fTUFYX1JYX0JVRkZFUl9TSVpFOyAvLyAtIHBhZF9sZW47CisgICAgICAgICAgICAgICAgY2hlY2tfbGVuID0gWk1fTUFYX1JYX0JVRkZFUl9TSVpFIC0gY2hrX2lkeCAtIDQ7CisgICAgICAgICAgICAgICAgY2hlY2tfcGFkID0gcGFkX2xlbjsKKworICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGEgc2tiIGJ1ZmZlciAqLworICAgICAgICAgICAgICAgIC8vbmV3X2J1ZiA9IHpmd0J1ZkFsbG9jYXRlKGRldiwgWk1fTUFYX1JYX0JVRkZFUl9TSVpFKTsKKyAgICAgICAgICAgICAgICBuZXdfYnVmID0gZGV2X2FsbG9jX3NrYihaTV9NQVhfUlhfQlVGRkVSX1NJWkUpOworCisgICAgICAgICAgICAgICAgLyogU2V0IHNrYiBidWZmZXIgbGVuZ3RoICovCisgICAgICAgICAgICAjaWZkZWYgTkVUX1NLQlVGRl9EQVRBX1VTRVNfT0ZGU0VUCisgICAgICAgICAgICAgICAgbmV3X2J1Zi0+dGFpbCA9IDA7CisgICAgICAgICAgICAgICAgbmV3X2J1Zi0+bGVuID0gMDsKKyAgICAgICAgICAgICNlbHNlCisgICAgICAgICAgICAgICAgbmV3X2J1Zi0+dGFpbCA9IG5ld19idWYtPmRhdGE7CisgICAgICAgICAgICAgICAgbmV3X2J1Zi0+bGVuID0gMDsKKyAgICAgICAgICAgICNlbmRpZgorCisgICAgICAgICAgICAgICAgc2tiX3B1dChuZXdfYnVmLCBwa3RfbGVuKTsKKworICAgICAgICAgICAgICAgIC8qIENvcHkgdGhlIGJ1ZmZlciAqLworICAgICAgICAgICAgICAgIG1lbWNweShuZXdfYnVmLT5kYXRhLCAmKGJ1Zi0+ZGF0YVtjaGtfaWR4KzRdKSwgY2hlY2tfbGVuKTsKKworICAgICAgICAgICAgICAgIC8qIFJlY29yZCB0aGUgYnVmZmVyIHBvaW50ZXIgKi8KKyAgICAgICAgICAgICAgICBtYWNwLT5yZWFtaW5fYnVmID0gbmV3X2J1ZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgI2lmZGVmIFpNX0RPTlRfQ09QWV9SWF9CVUZGRVIKKyAgICAgICAgICAgICAgICBpZiAocnhCdWZQb29sSW5kZXggPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG5ld19idWYgPSBza2JfY2xvbmUoYnVmLCBHRlBfQVRPTUlDKTsKKworICAgICAgICAgICAgICAgICAgICBuZXdfYnVmLT5kYXRhID0gJihidWYtPmRhdGFbY2hrX2lkeCs0XSk7CisgICAgICAgICAgICAgICAgICAgIG5ld19idWYtPmxlbiA9IHBrdF9sZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIGEgc2tiIGJ1ZmZlciAqLworICAgICAgICAgICAgICAgIG5ld19idWYgPSBkZXZfYWxsb2Nfc2tiKFpNX01BWF9SWF9CVUZGRVJfU0laRSk7CisKKyAgICAgICAgICAgICAgICAvKiBTZXQgc2tiIGJ1ZmZlciBsZW5ndGggKi8KKyAgICAgICAgICAgICNpZmRlZiBORVRfU0tCVUZGX0RBVEFfVVNFU19PRkZTRVQKKyAgICAgICAgICAgICAgICBuZXdfYnVmLT50YWlsID0gMDsKKyAgICAgICAgICAgICAgICBuZXdfYnVmLT5sZW4gPSAwOworICAgICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAgICBuZXdfYnVmLT50YWlsID0gbmV3X2J1Zi0+ZGF0YTsKKyAgICAgICAgICAgICAgICBuZXdfYnVmLT5sZW4gPSAwOworICAgICAgICAgICAgI2VuZGlmCisKKyAgICAgICAgICAgICAgICBza2JfcHV0KG5ld19idWYsIHBrdF9sZW4pOworCisgICAgICAgICAgICAgICAgLyogQ29weSB0aGUgYnVmZmVyICovCisgICAgICAgICAgICAgICAgbWVtY3B5KG5ld19idWYtPmRhdGEsICYoYnVmLT5kYXRhW2Noa19pZHgrNF0pLCBwa3RfbGVuKTsKKworICAgICAgICAjaWZkZWYgWk1fRE9OVF9DT1BZX1JYX0JVRkZFUgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgcnhCdWZQb29sW3J4QnVmUG9vbEluZGV4KytdID0gbmV3X2J1ZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZmluZCB0YWcsIHBrdF9sZW46IDB4JTA0eCwgdGFnOiAweCUwNHhcbiIsIHBrdF9sZW4sIHBrdF90YWcpOworCisgICAgICAgICAgICAvKiBGcmVlIGJ1ZmZlciAqLworICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoYnVmKTsKKworICAgICAgICAgICAgLyogQWxsb2NhdGUgYSBza2IgYnVmZmVyICovCisgICAgICAgICAgICBuZXdfYnVmID0gZGV2X2FsbG9jX3NrYihaTV9NQVhfUlhfQlVGRkVSX1NJWkUpOworCisgICAgICAgICAgICAvKiBFbnF1ZXVlIHNrYiBidWZmZXIgKi8KKyAgICAgICAgICAgIHpmTG54UHV0VXNiUnhCdWZmZXIoZGV2LCBuZXdfYnVmKTsKKworICAgICAgICAgICAgLyogU3VibWl0IGEgUnggdXJiICovCisgICAgICAgICAgICB6ZkxueFVzYkluKGRldiwgdXJiLCBuZXdfYnVmKTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLyogRnJlZSBidWZmZXIgKi8KKyAgICBkZXZfa2ZyZWVfc2tiX2FueShidWYpOworI2VuZGlmCisKKyAgICAvKiBBbGxvY2F0ZSBhIHNrYiBidWZmZXIgKi8KKyAgICBuZXdfYnVmID0gZGV2X2FsbG9jX3NrYihaTV9NQVhfUlhfQlVGRkVSX1NJWkUpOworCisgICAgLyogRW5xdWV1ZSBza2IgYnVmZmVyICovCisgICAgemZMbnhQdXRVc2JSeEJ1ZmZlcihkZXYsIG5ld19idWYpOworCisgICAgLyogU3VibWl0IGEgUnggdXJiICovCisgICAgemZMbnhVc2JJbihkZXYsIHVyYiwgbmV3X2J1Zik7CisKKyNpZiBaTV9VU0JfU1RSRUFNX01PREUgPT0gMQorICAgIGZvcihpaSA9IDA7IGlpIDwgcnhCdWZQb29sSW5kZXg7IGlpKyspCisgICAgeworICAgICAgICBtYWNwLT51c2JDYkZ1bmN0aW9ucy56ZmNiVXNiUmVjdihkZXYsIHJ4QnVmUG9vbFtpaV0pOworICAgIH0KKyNlbHNlCisgICAgLyogcGFzcyBkYXRhIHRvIHVwcGVyIGxheWVyICovCisgICAgbWFjcC0+dXNiQ2JGdW5jdGlvbnMuemZjYlVzYlJlY3YoZGV2LCBidWYpOworI2VuZGlmCit9CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQordm9pZCB6ZkxueFVzYlJlZ091dF9jYWxsYmFjayh1cmJfdCAqdXJiKQorI2Vsc2UKK3ZvaWQgemZMbnhVc2JSZWdPdXRfY2FsbGJhY2sodXJiX3QgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisjZW5kaWYKK3sKKyAgICAvL2Rldl90KiBkZXYgPSB1cmItPmNvbnRleHQ7CisKKyAgICAvL3ByaW50ayhLRVJOX0VSUiAiemZ3VXNiUmVnT3V0X2NhbGxiYWNrXG4iKTsKK30KKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCit2b2lkIHpmTG54VXNiUmVnSW5fY2FsbGJhY2sodXJiX3QgKnVyYikKKyNlbHNlCit2b2lkIHpmTG54VXNiUmVnSW5fY2FsbGJhY2sodXJiX3QgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCisjZW5kaWYKK3sKKyAgICB6ZGV2X3QqIGRldiA9IHVyYi0+Y29udGV4dDsKKyAgICB1MzJfdCByc3BbNjQvNF07CisgICAgaW50IHN0YXR1czsKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSAoc3RydWN0IHVzYmRydl9wcml2YXRlICopZGV2LT5wcml2OworCisgICAgLyogQ2hlY2sgc3RhdHVzIGZvciBVUkIgKi8KKyAgICBpZiAodXJiLT5zdGF0dXMgIT0gMCl7CisgICAgICAgIHByaW50aygiemZMbnhVc2JSZWdJbl9jYWxsYmFjaygpIDogc3RhdHVzPTB4JXhcbiIsIHVyYi0+c3RhdHVzKTsKKyAgICAgICAgaWYgKCh1cmItPnN0YXR1cyAhPSAtRU5PRU5UKSAmJiAodXJiLT5zdGF0dXMgIT0gLUVDT05OUkVTRVQpCisgICAgICAgICAgICAmJiAodXJiLT5zdGF0dXMgIT0gLUVTSFVURE9XTikpCisgICAgICAgIHsKKyAgICAgICAgICAgICNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorICAgICAgICAgICAgICAgIGlmICh1cmItPnN0YXR1cyA9PSBVU0JfU1RfSU5URVJOQUxFUlJPUikKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gLTE7CisgICAgICAgICAgICAjZWxzZQorICAgICAgICAgICAgICAgIGlmICh1cmItPnN0YXR1cyA9PSAtRVBJUEUpeworICAgICAgICAgICAgICAgICAgICAvL3ByaW50ayhLRVJOX0VSUiAibm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAtRVBJUEUiKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gLTE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHVyYi0+c3RhdHVzID09IC1FUFJPVE8peworICAgICAgICAgICAgICAgICAgICAvL3ByaW50ayhLRVJOX0VSUiAibm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAtRVBST1RPIik7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgLy9wcmludGsoS0VSTl9FUlIgInVyYi0+c3RhdHVzOiAweCUwOHhcbiIsIHVyYi0+c3RhdHVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gMCkKKyAgICB7CisgICAgICAgIHByaW50ayhLRVJOX0VSUiAiR2V0IGFuIFVSQiB3aG9zZSBsZW5ndGggaXMgemVybyIpOworICAgICAgICBzdGF0dXMgPSAtMTsKKyAgICB9CisKKyAgICAvKiBDb3B5IGRhdGEgaW50byByZXNwb25lIGJ1ZmZlciAqLworICAgIG1lbWNweShyc3AsIG1hY3AtPnJlZ1VzYlJlYWRCdWYsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisKKyAgICAvKiBOb3RpZnkgdG8gdXBwZXIgbGF5ZXIgKi8KKyAgICAvL3pmSWRsQ2hrUnNwKGRldiwgcnNwLCAodTE2X3QpdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKyAgICAvL3pmaVVzYlJlZ0luKGRldiwgcnNwLCAodTE2X3QpdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKyAgICBtYWNwLT51c2JDYkZ1bmN0aW9ucy56ZmNiVXNiUmVnSW4oZGV2LCByc3AsICh1MTZfdCl1cmItPmFjdHVhbF9sZW5ndGgpOworCisgICAgLyogSXNzdWUgYW5vdGhlciBVU0IgSU4gVVJCICovCisgICAgemZMbnhTdWJtaXRSZWdJblVyYihkZXYpOworfQorCit1MzJfdCB6ZkxueFN1Ym1pdFJlZ0luVXJiKHpkZXZfdCAqZGV2KQoreworICAgIHUzMl90IHJldDsKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSAoc3RydWN0IHVzYmRydl9wcml2YXRlICopZGV2LT5wcml2OworCisgICAgLyogU3VibWl0IGEgcnggdXJiICovCisgICAgLy9yZXQgPSB6ZkxueFVzYlN1Ym1pdEJ1bGtVcmIobWFjcC0+UmVnSW5VcmIsIG1hY3AtPnVkZXYsCisgICAgLy8gICAgICAgIFVTQl9SRUdfSU5fUElQRSwgVVNCX0RJUl9JTiwgbWFjcC0+cmVnVXNiUmVhZEJ1ZiwKKyAgICAvLyAgICAgICAgWk1fVVNCX1JFR19NQVhfQlVGX1NJWkUsIHpmTG54VXNiUmVnSW5fY2FsbGJhY2ssIGRldik7CisgICAgLy9DV1lhbmcoLSkKKyAgICAvL2lmIChyZXQgIT0gMCkKKyAgICAvLyAgICBwcmludGsoInpmd1VzYlN1Ym1pdEJ1bGtVcmIgZmFpbCwgc3RhdHVzOiAweCUwOHhcbiIsIChpbnQpcmV0KTsKKworICAgIHJldCA9IHpmTG54VXNiU3VibWl0SW50VXJiKG1hY3AtPlJlZ0luVXJiLCBtYWNwLT51ZGV2LAorICAgICAgICAgICAgVVNCX1JFR19JTl9QSVBFLCBVU0JfRElSX0lOLCBtYWNwLT5yZWdVc2JSZWFkQnVmLAorICAgICAgICAgICAgWk1fVVNCX1JFR19NQVhfQlVGX1NJWkUsIHpmTG54VXNiUmVnSW5fY2FsbGJhY2ssIGRldiwgMSk7CisKKyAgICByZXR1cm4gcmV0OworfQorCit1MzJfdCB6ZkxueFVzYlN1Ym1pdFR4RGF0YSh6ZGV2X3QqIGRldikKK3sKKyAgICB1MzJfdCBpOworICAgIHUzMl90IHJldDsKKyAgICB1MTZfdCBmcmVlVHhVcmI7CisgICAgdThfdCAqcHVUeEJ1ZiA9IE5VTEw7CisgICAgVXNiVHhRX3QgKlR4RGF0YTsKKyAgICBpbnQgbGVuID0gMDsKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSAoc3RydWN0IHVzYmRydl9wcml2YXRlICopZGV2LT5wcml2OworI2lmIFpNX1VTQl9UWF9TVFJFQU1fTU9ERSA9PSAxCisgICAgdThfdCAgICAgICAgICAgICAgIGlpOworICAgIHUxNl90ICAgICAgICAgICAgICBvZmZzZXQgPSAwOworICAgIHUxNl90ICAgICAgICAgICAgICB1c2JUeEFnZ0NudDsKKyAgICB1MTZfdCAgICAgICAgICAgICAgKnBVc2JUeEhkcjsKKyAgICBVc2JUeFFfdCAgICAgICAgICAgKlR4UVBvb2xbWk1fTUFYX1RYX0FHR1JFR0FURV9OVU1dOworI2VuZGlmCisKKyAgICAvKiBGaXJzdCBjaGVjayB3aGV0aGVyIHRoZXJlIGlzIGEgZnJlZSBVUkIgKi8KKyAgICBmcmVlVHhVcmIgPSB6ZkxueEdldEZyZWVUeFVyYihkZXYpOworCisgICAgLyogSWYgdGhlcmUgaXMgbm8gYW55IGZyZWUgVHggVXJiICovCisgICAgaWYgKGZyZWVUeFVyYiA9PSAweGZmZmYpCisgICAgeworICAgICAgICAvL3ByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZ2V0IGZyZWUgVHggVXJiXG4iKTsKKyAgICAgICAgLy9wcmludGsoIkNXWSAtIENhbid0IGdldCBmcmVlIFR4IFVyYlxuIik7CisgICAgICAgIHJldHVybiAweGZmZmY7CisgICAgfQorCisjaWYgWk1fVVNCX1RYX1NUUkVBTV9NT0RFID09IDEKKyAgICB1c2JUeEFnZ0NudCA9IHpmTG54Q2hlY2tUeEJ1ZmZlckNudChkZXYpOworCisgICAgaWYgKHVzYlR4QWdnQ250ID49IFpNX01BWF9UWF9BR0dSRUdBVEVfTlVNKQorICAgIHsKKyAgICAgICB1c2JUeEFnZ0NudCA9IFpNX01BWF9UWF9BR0dSRUdBVEVfTlVNOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgIHVzYlR4QWdnQ250ID0gMTsKKyAgICB9CisKKyAgICAvL3ByaW50aygidXNiVHhBZ2dDbnQ6ICVkXG4iLCB1c2JUeEFnZ0NudCk7CisjZW5kaWYKKworI2lmIFpNX1VTQl9UWF9TVFJFQU1fTU9ERSA9PSAxCisgICAgZm9yKGlpID0gMDsgaWkgPCB1c2JUeEFnZ0NudDsgaWkrKykKKyAgICB7CisjZW5kaWYKKyAgICAvKiBEZXF1ZXVlIHRoZSBwYWNrZXQgZnJvbSBVc2JUeEJ1ZlEgKi8KKyAgICBUeERhdGEgPSB6ZkxueEdldFVzYlR4QnVmZmVyKGRldik7CisgICAgaWYgKFR4RGF0YSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgLyogR2l2ZSB0aGUgdXJiIGJhY2sgKi8KKyAgICAgICAgemZMbnhQdXRUeFVyYihkZXYpOworICAgICAgICByZXR1cm4gMHhmZmZmOworICAgIH0KKworICAgIC8qIFBvaW50IHRvIHRoZSBmcmVlVHhVcmIgYnVmZmVyICovCisgICAgcHVUeEJ1ZiA9IG1hY3AtPnR4VXNiQnVmW2ZyZWVUeFVyYl07CisKKyNpZiBaTV9VU0JfVFhfU1RSRUFNX01PREUgPT0gMQorICAgIHB1VHhCdWYgKz0gb2Zmc2V0OworICAgIHBVc2JUeEhkciA9ICh1MTZfdCAqKXB1VHhCdWY7CisKKyAgICAvKiBBZGQgdGhlIHBhY2tldCBsZW5ndGggYW5kIHRhZyBpbmZvcm1hdGlvbiAqLworICAgICpwVXNiVHhIZHIrKyA9IFR4RGF0YS0+aGRybGVuICsgVHhEYXRhLT5zbmFwTGVuICsKKyAgICAgICAgICAgICAoVHhEYXRhLT5idWYtPmxlbiAtIFR4RGF0YS0+b2Zmc2V0KSArICBUeERhdGEtPnRhaWxMZW47CisKKyAgICAqcFVzYlR4SGRyKysgPSAweDY5N2U7CisKKyAgICBwdVR4QnVmICs9IDQ7CisjZW5kaWYgLy8gI2lmZGVmIFpNX1VTQl9UWF9TVFJFQU1fTU9ERQorCisgICAgLyogQ29weSBXTEFOIGhlYWRlciBhbmQgcGFja2V0IGJ1ZmZlciBpbnRvIFVTQiBidWZmZXIgKi8KKyAgICBmb3IoaSA9IDA7IGkgPCBUeERhdGEtPmhkcmxlbjsgaSsrKQorICAgIHsKKyAgICAgICAgKnB1VHhCdWYrKyA9IFR4RGF0YS0+aGRyW2ldOworICAgIH0KKworICAgIC8qIENvcHkgU05BUCBoZWFkZXIgKi8KKyAgICBmb3IoaSA9IDA7IGkgPCBUeERhdGEtPnNuYXBMZW47IGkrKykKKyAgICB7CisgICAgICAgICpwdVR4QnVmKysgPSBUeERhdGEtPnNuYXBbaV07CisgICAgfQorCisgICAgLyogQ29weSBwYWNrZXQgYnVmZmVyICovCisgICAgZm9yKGkgPSAwOyBpIDwgVHhEYXRhLT5idWYtPmxlbiAtIFR4RGF0YS0+b2Zmc2V0OyBpKyspCisgICAgeworICAgIAkvLypwdVR4QnVmKysgPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgVHhEYXRhLT5idWYsIGkpOworICAgIAkqcHVUeEJ1ZisrID0gKih1OF90KikoKHU4X3QqKVR4RGF0YS0+YnVmLT5kYXRhK2krVHhEYXRhLT5vZmZzZXQpOworICAgIH0KKworICAgIC8qIENvcHkgdGFpbCAqLworICAgIGZvcihpID0gMDsgaSA8IFR4RGF0YS0+dGFpbExlbjsgaSsrKQorICAgIHsKKyAgICAgICAgKnB1VHhCdWYrKyA9IFR4RGF0YS0+dGFpbFtpXTsKKyAgICB9CisKKyAgICBsZW4gPSBUeERhdGEtPmhkcmxlbitUeERhdGEtPnNuYXBMZW4rVHhEYXRhLT5idWYtPmxlbitUeERhdGEtPnRhaWxMZW4tVHhEYXRhLT5vZmZzZXQ7CisKKyAgICAjaWYgMAorICAgIGlmIChUeERhdGEtPmhkcmxlbiAhPSAwKQorICAgIHsKKyAgICAgICAgcHVUeEJ1ZiA9IG1hY3AtPnR4VXNiQnVmW2ZyZWVUeFVyYl07CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRrKCIlMDJ4ICIsIHB1VHhCdWZbaV0pOworICAgICAgICAgICAgaWYgKGkgJSAxNiA9PSAxNSkKKyAgICAgICAgICAgICAgICBwcmludGsoIlxuIik7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRrKCJcbiIpOworICAgIH0KKyAgICAjZW5kaWYKKyAgICAjaWYgMAorICAgIC8qIEZvciBkZWJ1ZyBwdXJwb3NlICovCisgICAgaWYoVHhEYXRhLT5oZHJbOV0gJiAweDQwKQorICAgIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIHUxNl90IGN0cmxMZW4gPSBUeERhdGEtPmhkclswXSArIChUeERhdGEtPmhkclsxXSA8PCA4KTsKKworICAgICAgICBpZiAoY3RybExlbiAhPSBsZW4gKyA0KQorICAgICAgICB7CisgICAgICAgIC8qIER1bXAgY29udHJvbCBzZXR0aW5nICovCisgICAgICAgIGZvcihpID0gMDsgaSA8IDg7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIweCUwMnggIiwgVHhEYXRhLT5oZHJbaV0pOworICAgICAgICB9CisgICAgICAgIHByaW50ayhLRVJOX0VSUiAiXG4iKTsKKworICAgICAgICBwcmludGsoS0VSTl9FUlIgImN0ckxlbjogJWQsIGhkckxlbjogJWQsIHNuYXBMZW46ICVkXG4iLCBjdHJsTGVuLCBUeERhdGEtPmhkcmxlbiwgVHhEYXRhLT5zbmFwTGVuKTsKKyAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJidWZMZW46ICVkLCB0YWlsTGVuOiAlZCwgbGVuOiAlZFxuIiwgVHhEYXRhLT5idWYtPmxlbiwgVHhEYXRhLT50YWlsTGVuLCBsZW4pOworICAgICAgICB9CisgICAgfQorICAgICNlbmRpZgorCisjaWYgWk1fVVNCX1RYX1NUUkVBTV9NT0RFID09IDEKKyAgICAvLyBBZGQgdGhlIExlbmd0aCBhbmQgVGFnCisgICAgbGVuICs9IDQ7CisKKyAgICAvL3ByaW50aygiJWQgcGFja2V0LCBsZW5ndGg6ICVkXG4iLCBpaSsxLCBsZW4pOworCisgICAgaWYgKGlpIDwgKFpNX01BWF9UWF9BR0dSRUdBVEVfTlVNLTEpKQorICAgIHsKKyAgICAgICAgLyogUGFkIHRoZSBidWZmZXIgdG8gZmlybXdhcmUgZGVzY3JpcHRvciBib3VuZGFyeSAqLworICAgICAgICBvZmZzZXQgKz0gKCgobGVuLTEpIC8gNCkgKyAxKSAqIDQ7CisgICAgfQorCisgICAgaWYgKGlpID09IChaTV9NQVhfVFhfQUdHUkVHQVRFX05VTS0xKSkKKyAgICB7CisgICAgICAgIGxlbiArPSBvZmZzZXQ7CisgICAgfQorCisgICAgVHhRUG9vbFtpaV0gPSBUeERhdGE7CisKKyAgICAvL0RiZ1ByaW50KCIlZCBwYWNrZXQsIG9mZnNldDogJWRcbiIsIGlpKzEsIHBVc2JUeFRyYW5zZmVyLT5vZmZzZXQpOworCisgICAgLyogZnJlZSBwYWNrZXQgKi8KKyAgICAvL3pmQnVmRnJlZShkZXYsIHR4RGF0YS0+YnVmKTsKKyAgICB9CisjZW5kaWYKKyAgICAvL3ByaW50aygiQ1dZIC0gY2FsbCB6ZndVc2JTdWJtaXRCdWxrVXJiKCksIGxlbiA9IDB4JWRcbiIsIGxlbik7CisgICAgLyogU3VibWl0IGEgdHggdXJiICovCisgICAgcmV0ID0gemZMbnhVc2JTdWJtaXRCdWxrVXJiKG1hY3AtPldsYW5UeERhdGFVcmJbZnJlZVR4VXJiXSwgbWFjcC0+dWRldiwKKyAgICAgICAgICAgIFVTQl9XTEFOX1RYX1BJUEUsIFVTQl9ESVJfT1VULCBtYWNwLT50eFVzYkJ1ZltmcmVlVHhVcmJdLAorICAgICAgICAgICAgbGVuLCB6ZkxueFVzYkRhdGFPdXRfY2FsbGJhY2ssIGRldik7CisgICAgLy9DV1lhbmcoLSkKKyAgICAvL2lmIChyZXQgIT0gMCkKKyAgICAvLyAgICBwcmludGsoInpmd1VzYlN1Ym1pdEJ1bGtVcmIgZmFpbCwgc3RhdHVzOiAweCUwOHhcbiIsIChpbnQpcmV0KTsKKworICAgIC8qIGZyZWUgcGFja2V0ICovCisgICAgLy9kZXZfa2ZyZWVfc2tiX2FueShUeERhdGEtPmJ1Zik7CisjaWYgWk1fVVNCX1RYX1NUUkVBTV9NT0RFID09IDEKKyAgICBmb3IoaWkgPSAwOyBpaSA8IHVzYlR4QWdnQ250OyBpaSsrKQorICAgICAgICBtYWNwLT51c2JDYkZ1bmN0aW9ucy56ZmNiVXNiT3V0Q29tcGxldGUoZGV2LCBUeFFQb29sW2lpXS0+YnVmLCAxLCBUeFFQb29sW2lpXS0+aGRyKTsKKyNlbHNlCisgICAgbWFjcC0+dXNiQ2JGdW5jdGlvbnMuemZjYlVzYk91dENvbXBsZXRlKGRldiwgVHhEYXRhLT5idWYsIDEsIFR4RGF0YS0+aGRyKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJldDsKK30KKworCisKK3UzMl90IHpmTG54VXNiSW4oemRldl90KiBkZXYsIHVyYl90ICp1cmIsIHpidWZfdCAqYnVmKQoreworICAgIHUzMl90IHJldDsKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSAoc3RydWN0IHVzYmRydl9wcml2YXRlICopZGV2LT5wcml2OworCisgICAgLyogU3VibWl0IGEgcnggdXJiICovCisgICAgcmV0ID0gemZMbnhVc2JTdWJtaXRCdWxrVXJiKHVyYiwgbWFjcC0+dWRldiwgVVNCX1dMQU5fUlhfUElQRSwKKyAgICAgICAgICAgIFVTQl9ESVJfSU4sIGJ1Zi0+ZGF0YSwgWk1fTUFYX1JYX0JVRkZFUl9TSVpFLAorICAgICAgICAgICAgemZMbnhVc2JEYXRhSW5fY2FsbGJhY2ssIGRldik7CisgICAgLy9DV1lhbmcoLSkKKyAgICAvL2lmIChyZXQgIT0gMCkKKyAgICAvLyAgICBwcmludGsoInpmd1VzYlN1Ym1pdEJ1bGtVcmIgZmFpbCwgc3RhdHVzOiAweCUwOHhcbiIsIChpbnQpcmV0KTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3UzMl90IHpmTG54VXNiV3JpdGVSZWcoemRldl90KiBkZXYsIHUzMl90KiBjbWQsIHUxNl90IGNtZExlbikKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSAoc3RydWN0IHVzYmRydl9wcml2YXRlICopZGV2LT5wcml2OworICAgIHUzMl90IHJldDsKKworI2lmZGVmIFpNX0NPTkZJR19CSUdfRU5ESUFOCisgICAgaW50IGlpID0gMDsKKworICAgIGZvcihpaT0wOyBpaTwoY21kTGVuPj4yKTsgaWkrKykKKwljbWRbaWldID0gY3B1X3RvX2xlMzIoY21kW2lpXSk7CisjZW5kaWYKKworICAgIG1lbWNweShtYWNwLT5yZWdVc2JXcml0ZUJ1ZiwgY21kLCBjbWRMZW4pOworCisgICAgLyogSXNzdWUgYW4gVVNCIE91dCB0cmFuc2ZlciAqLworICAgIC8qIFN1Ym1pdCBhIHR4IHVyYiAqLworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyNCkKKyAgICByZXQgPSB6ZkxueFVzYlN1Ym1pdEJ1bGtVcmIobWFjcC0+UmVnT3V0VXJiLCBtYWNwLT51ZGV2LAorICAgICAgICAgICAgVVNCX1JFR19PVVRfUElQRSwgVVNCX0RJUl9PVVQsIG1hY3AtPnJlZ1VzYldyaXRlQnVmLAorICAgICAgICAgICAgY21kTGVuLCB6ZkxueFVzYlJlZ091dF9jYWxsYmFjaywgZGV2KTsKKyNlbHNlCisgICAgcmV0ID0gemZMbnhVc2JTdWJtaXRJbnRVcmIobWFjcC0+UmVnT3V0VXJiLCBtYWNwLT51ZGV2LAorICAgICAgICAgICAgVVNCX1JFR19PVVRfUElQRSwgVVNCX0RJUl9PVVQsIG1hY3AtPnJlZ1VzYldyaXRlQnVmLAorICAgICAgICAgICAgY21kTGVuLCB6ZkxueFVzYlJlZ091dF9jYWxsYmFjaywgZGV2LCAxKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJldDsKK30KKworCit1MzJfdCB6ZkxueFVzYk91dCh6ZGV2X3QqIGRldiwgdThfdCAqaGRyLCB1MTZfdCBoZHJsZW4sIHU4X3QgKnNuYXAsIHUxNl90IHNuYXBMZW4sCisgICAgICAgIHU4X3QgKnRhaWwsIHUxNl90IHRhaWxMZW4sIHpidWZfdCAqYnVmLCB1MTZfdCBvZmZzZXQpCit7CisgICAgdTMyX3QgcmV0OworICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKilkZXYtPnByaXY7CisKKyAgICAvKiBDaGVjayBsZW5ndGggb2YgdGFpbCBidWZmZXIgKi8KKyAgICAvL3ptX2Fzc2VydCgodGFpbExlbiA8PSAxNikpOworCisgICAgLyogRW5xdWV1ZSB0aGUgcGFja2V0IGludG8gVXNiVHhCdWZRICovCisgICAgaWYgKHpmTG54UHV0VXNiVHhCdWZmZXIoZGV2LCBoZHIsIGhkcmxlbiwgc25hcCwgc25hcExlbiwgdGFpbCwgdGFpbExlbiwgYnVmLCBvZmZzZXQpID09IDB4ZmZmZikKKyAgICB7CisgICAgICAgIC8qIGZyZWUgcGFja2V0ICovCisgICAgICAgIC8vcHJpbnRrKCJDV1kgLSB6ZndQdXRVc2JUeEJ1ZmZlciBFcnJvciwgZnJlZSBwYWNrZXRcbiIpOworICAgICAgICAvL2Rldl9rZnJlZV9za2JfYW55KGJ1Zik7CisgICAgICAgIG1hY3AtPnVzYkNiRnVuY3Rpb25zLnpmY2JVc2JPdXRDb21wbGV0ZShkZXYsIGJ1ZiwgMCwgaGRyKTsKKyAgICAgICAgcmV0dXJuIDB4ZmZmZjsKKyAgICB9CisKKyAgICAvL3JldHVybiAwOworICAgIC8vcHJpbnRrKCJDV1kgLSBjYWxsIHpmd1VzYlN1Ym1pdFR4RGF0YSgpXG4iKTsKKyAgICByZXQgPSB6ZkxueFVzYlN1Ym1pdFR4RGF0YShkZXYpOworICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQgemZMbnhJbml0VXNiVHhRKHpkZXZfdCogZGV2KQoreworICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IChzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKilkZXYtPnByaXY7CisKKyAgICBwcmludGsoS0VSTl9FUlIgInpmd0luaXRVc2JUeFFcbiIpOworCisgICAgLyogWmVybyBtZW1vcnkgZm9yIFVzYlR4QnVmUSAqLworICAgIG1lbXNldChtYWNwLT5Vc2JUeEJ1ZlEsIDAsIHNpemVvZihVc2JUeFFfdCkgKiBaTV9NQVhfVFhfVVJCX05VTSk7CisKKyAgICBtYWNwLT5UeEJ1ZkhlYWQgPSAwOworICAgIG1hY3AtPlR4QnVmVGFpbCA9IDA7CisgICAgbWFjcC0+VHhVcmJIZWFkID0gMDsKKyAgICBtYWNwLT5UeFVyYlRhaWwgPSAwOworICAgIG1hY3AtPlR4VXJiQ250ID0gWk1fTUFYX1RYX1VSQl9OVU07Cit9CisKK3ZvaWQgemZMbnhJbml0VXNiUnhRKHpkZXZfdCogZGV2KQoreworICAgIHUxNl90IGk7CisgICAgemJ1Zl90ICpidWY7CisgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKWRldi0+cHJpdjsKKworICAgIC8qIFplcm8gbWVtb3J5IGZvciBVc2JSeEJ1ZlEgKi8KKyAgICBtZW1zZXQobWFjcC0+VXNiUnhCdWZRLCAwLCBzaXplb2YoemJ1Zl90ICopICogWk1fTUFYX1JYX1VSQl9OVU0pOworCisgICAgbWFjcC0+UnhCdWZIZWFkID0gMDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBaTV9NQVhfUlhfVVJCX05VTTsgaSsrKQorICAgIHsKKyAgICAgICAgLy9idWYgPSB6ZndCdWZBbGxvY2F0ZShkZXYsIFpNX01BWF9SWF9CVUZGRVJfU0laRSk7CisgICAgICAgIGJ1ZiA9IGRldl9hbGxvY19za2IoWk1fTUFYX1JYX0JVRkZFUl9TSVpFKTsKKyAgICAgICAgbWFjcC0+VXNiUnhCdWZRW2ldID0gYnVmOworICAgIH0KKworICAgIC8vbWFjcC0+UnhCdWZUYWlsID0gWk1fTUFYX1JYX1VSQl9OVU0gLSAxOworICAgIG1hY3AtPlJ4QnVmVGFpbCA9IDA7CisKKyAgICAvKiBTdWJtaXQgYWxsIFJ4IHVyYnMgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgWk1fTUFYX1JYX1VSQl9OVU07IGkrKykKKyAgICB7CisgICAgICAgIHpmTG54UHV0VXNiUnhCdWZmZXIoZGV2LCBtYWNwLT5Vc2JSeEJ1ZlFbaV0pOworICAgICAgICB6ZkxueFVzYkluKGRldiwgbWFjcC0+V2xhblJ4RGF0YVVyYltpXSwgbWFjcC0+VXNiUnhCdWZRW2ldKTsKKyAgICB9Cit9CisKKworCit1MzJfdCB6ZkxueFVzYlN1Ym1pdEJ1bGtVcmIodXJiX3QgKnVyYiwgc3RydWN0IHVzYl9kZXZpY2UgKnVzYiwgdTE2X3QgZXBudW0sIHUxNl90IGRpcmVjdGlvbiwKKyAgICAgICAgdm9pZCAqdHJhbnNmZXJfYnVmZmVyLCBpbnQgYnVmZmVyX2xlbmd0aCwgdXNiX2NvbXBsZXRlX3QgY29tcGxldGUsIHZvaWQgKmNvbnRleHQpCit7CisgICAgdTMyX3QgcmV0OworCisgICAgaWYoZGlyZWN0aW9uID09IFVTQl9ESVJfT1VUKQorICAgIHsKKyAgICAgICAgdXNiX2ZpbGxfYnVsa191cmIodXJiLCB1c2IsIHVzYl9zbmRidWxrcGlwZSh1c2IsIGVwbnVtKSwKKyAgICAgICAgICAgICAgICB0cmFuc2Zlcl9idWZmZXIsIGJ1ZmZlcl9sZW5ndGgsIGNvbXBsZXRlLCBjb250ZXh0KTsKKworICAgICAgICB1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9aRVJPX1BBQ0tFVDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdXNiX2ZpbGxfYnVsa191cmIodXJiLCB1c2IsIHVzYl9yY3ZidWxrcGlwZSh1c2IsIGVwbnVtKSwKKyAgICAgICAgICAgICAgICB0cmFuc2Zlcl9idWZmZXIsIGJ1ZmZlcl9sZW5ndGgsIGNvbXBsZXRlLCBjb250ZXh0KTsKKyAgICB9CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTUpCisgICAgdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfQVNZTkNfVU5MSU5LOworI2VuZGlmCisKKyAgICBpZiAoZXBudW0gPT0gNCkKKyAgICB7CisgICAgICAgIGlmICh1cmItPmhjcHJpdikKKyAgICAgICAgeworICAgICAgICAgICAgLy9wcmludGsoIkNXWSAtIHVyYi0+aGNwcml2IHNldCBieSB1bmtub3duIHJlYXNvbiwgcmVzZXQgaXRcbiIpOworICAgICAgICAgICAgLy91cmItPmhjcHJpdiA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCisgICAgcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKyNlbHNlCisgICAgcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiKTsKKyNlbmRpZgorICAgIGlmICgoZXBudW0gPT0gNCkgJiAocmV0ICE9IDApKQorICAgIHsKKyAgICAgICAgLy9wcmludGsoIkNXWSAtIHJldCA9ICV4XG4iLCByZXQpOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCit1MzJfdCB6ZkxueFVzYlN1Ym1pdEludFVyYih1cmJfdCAqdXJiLCBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiLCB1MTZfdCBlcG51bSwgdTE2X3QgZGlyZWN0aW9uLAorICAgICAgICB2b2lkICp0cmFuc2Zlcl9idWZmZXIsIGludCBidWZmZXJfbGVuZ3RoLCB1c2JfY29tcGxldGVfdCBjb21wbGV0ZSwgdm9pZCAqY29udGV4dCwKKyAgICAgICAgdTMyX3QgaW50ZXJ2YWwpCit7CisgICAgdTMyX3QgcmV0OworCisgICAgaWYoZGlyZWN0aW9uID09IFVTQl9ESVJfT1VUKQorICAgIHsKKyAgICAgICAgdXNiX2ZpbGxfaW50X3VyYih1cmIsIHVzYiwgdXNiX3NuZGJ1bGtwaXBlKHVzYiwgZXBudW0pLAorICAgICAgICAgICAgICAgIHRyYW5zZmVyX2J1ZmZlciwgYnVmZmVyX2xlbmd0aCwgY29tcGxldGUsIGNvbnRleHQsIGludGVydmFsKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdXNiX2ZpbGxfaW50X3VyYih1cmIsIHVzYiwgdXNiX3JjdmJ1bGtwaXBlKHVzYiwgZXBudW0pLAorICAgICAgICAgICAgICAgIHRyYW5zZmVyX2J1ZmZlciwgYnVmZmVyX2xlbmd0aCwgY29tcGxldGUsIGNvbnRleHQsIGludGVydmFsKTsKKyAgICB9CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTUpCisgICAgdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfQVNZTkNfVU5MSU5LOworI2VuZGlmCisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCisgICAgcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKyNlbHNlCisgICAgcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJldDsKK30KKworI2lmZGVmIFpNX0VOQUJMRV9DRU5DCitpbnQgemZMbnhDZW5jU2VuZE1zZyhzdHJ1Y3Qgc29jayAqbmV0bGlua19zaywgdV9pbnQ4X3QgKm1zZywgaW50IGxlbikKK3sKKyNkZWZpbmUgQ09NTVRZUEVfR1JPVVAgICA4CisjZGVmaW5lIFdBSV9LX01TRyAgICAgICAgMHgxMQorCisJaW50IHJldCA9IC0xOworCWludCBzaXplOworCXVuc2lnbmVkIGNoYXIgKm9sZF90YWlsOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IG5sbXNnaGRyICpubGg7CisJY2hhciAqcG9zID0gTlVMTDsKKworCXNpemUgPSBOTE1TR19TUEFDRShsZW4pOworCXNrYiA9IGFsbG9jX3NrYihzaXplLCBHRlBfQVRPTUlDKTsKKworCWlmKHNrYiA9PSBOVUxMKQorCXsKKwkJcHJpbnRrKCJkZXZfYWxsb2Nfc2tiIGZhaWx1cmUgXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCW9sZF90YWlsID0gc2tiLT50YWlsOworCisJLyrM7tC0yv2+3bGoz+C52NDFz6IqLworCW5saCA9IE5MTVNHX1BVVChza2IsIDAsIDAsIFdBSV9LX01TRywgc2l6ZS1zaXplb2YoKm5saCkpOworCXBvcyA9IE5MTVNHX0RBVEEobmxoKTsKKwltZW1zZXQocG9zLCAwLCBsZW4pOworCisJLyq0q8rktb3Tw7unv9W85LXEyv2+3SovCisJbWVtY3B5KHBvcywgbXNnLCAgbGVuKTsKKwkvKrzGy+O+rbn919a92rbUxuS687XEyv2+3cq1vMqzpLbIKi8KKwlubGgtPm5sbXNnX2xlbiA9IHNrYi0+dGFpbCAtIG9sZF90YWlsOworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxNCkKKyAgICBORVRMSU5LX0NCKHNrYikuZHN0X2dyb3VwcyA9IENPTU1UWVBFX0dST1VQOworI2Vsc2UKKwlORVRMSU5LX0NCKHNrYikuZHN0X2dyb3VwID0gQ09NTVRZUEVfR1JPVVA7CisjZW5kaWYKKwluZXRsaW5rX2Jyb2FkY2FzdChuZXRsaW5rX3NrLCBza2IsIDAsIENPTU1UWVBFX0dST1VQLCBHRlBfQVRPTUlDKTsKKwlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7CitubG1zZ19mYWlsdXJlOiAvKk5MTVNHX1BVVCDKp7Dco6zU8rO3z/rM173T19a7urTmKi8KKyAgCWlmKHNrYikKKyAgICAJCWtmcmVlX3NrYihza2IpOworCWdvdG8gb3V0OworCisjdW5kZWYgQ09NTVRZUEVfR1JPVVAKKyN1bmRlZiBXQUlfS19NU0cKK30KKyNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCisKKy8qIFNpbXBseSByZXR1cm4gMHhmZmZmIGlmIFZBUCBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkICovCit1MTZfdCB6ZkxueEdldFZhcElkKHpkZXZfdCogZGV2KQoreworICAgIHUxNl90IGk7CisKKyAgICBmb3IgKGk9MDsgaTxaTV9WQVBfUE9SVF9OVU1CRVI7IGkrKykKKyAgICB7CisgICAgICAgIGlmICh2YXBbaV0uZGV2ID09IGRldikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDB4ZmZmZjsKK30KKwordTMyX3QgemZ3UmVhZFJlZyh6ZGV2X3QqIGRldiwgdTMyX3Qgb2Zmc2V0KQoreworICAgIHJldHVybiAwOworfQorCisjaWZuZGVmIElOSVRfV09SSworI2RlZmluZSB3b3JrX3N0cnVjdCB0cV9zdHJ1Y3QKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDQsMCkpCisjZGVmaW5lIHNjaGVkdWxlX3dvcmsoYSkgICBxdWV1ZV90YXNrKGEsICZ0cV9zY2hlZHVsZXIpCisjZWxzZQorI2RlZmluZSBzY2hlZHVsZV93b3JrKGEpICBzY2hlZHVsZV90YXNrKGEpCisjZW5kaWYKKworI2RlZmluZSBmbHVzaF9zY2hlZHVsZWRfd29yayAgZmx1c2hfc2NoZWR1bGVkX3Rhc2tzCisjZGVmaW5lIElOSVRfV09SSyhfd3EsIF9yb3V0aW5lLCBfZGF0YSkgIElOSVRfVFFVRVVFKF93cSwgX3JvdXRpbmUsIF9kYXRhKQorI2RlZmluZSBQUkVQQVJFX1dPUksoX3dxLCBfcm91dGluZSwgX2RhdGEpICBQUkVQQVJFX1RRVUVVRShfd3EsIF9yb3V0aW5lLCBfZGF0YSkKKyNlbmRpZgorCisjZGVmaW5lIEtFVkVOVF9XQVRDSERPRyAgICAgICAgMHgwMDAwMDAwMQorCit1MzJfdCBzbXBfa2V2ZW50X0xvY2sgPSAwOworCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkpCit2b2lkIGtldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCisjZWxzZQordm9pZCBrZXZlbnQodm9pZCAqZGF0YSkKKyNlbmRpZgoreworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDYsMjApKQorICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9CisgICAgICAgICAgICAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYmRydl9wcml2YXRlLCBrZXZlbnQpOworICAgIHpkZXZfdCAqZGV2ID0gbWFjcC0+ZGV2aWNlOworI2Vsc2UKKyAgICB6ZGV2X3QgKmRldiA9ICh6ZGV2X3QgKikgZGF0YTsKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSAoc3RydWN0IHVzYmRydl9wcml2YXRlICopZGV2LT5wcml2OworI2VuZGlmCisKKyAgICBpZiAobWFjcCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICh2b2lkICopJnNtcF9rZXZlbnRfTG9jaykpCisgICAgeworICAgICAgICAvL3NjaGVkdWxlX3dvcmsoJm1hY3AtPmtldmVudCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkb3duKCZtYWNwLT5pb2N0bF9zZW0pOworCisgICAgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLRVZFTlRfV0FUQ0hET0csICZtYWNwLT5rZXZlbnRfZmxhZ3MpKQorICAgIHsKKyAgICBleHRlcm4gdTE2X3QgemZIcFN0YXJ0UmVjdih6ZGV2X3QgKmRldik7CisgICAgICAgIC8vemZpSHdXYXRjaERvZ1JlaW5pdChkZXYpOworICAgICAgICBwcmludGsoKCJcbiAqKioqKioqKioqKiogSHcgd2F0Y2hEb2cgb2NjdXIhISAqKioqKioqKioqKioqKiBcbiIpKTsKKyAgICAgICAgemZpV2xhblN1c3BlbmQoZGV2KTsKKyAgICAgICAgemZpV2xhblJlc3VtZShkZXYsMCk7CisgICAgICAgIHpmSHBTdGFydFJlY3YoZGV2KTsKKyAgICB9CisKKyAgICBjbGVhcl9iaXQoMCwgKHZvaWQgKikmc21wX2tldmVudF9Mb2NrKTsKKyAgICB1cCgmbWFjcC0+aW9jdGxfc2VtKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGVU5DVElPTiBERVNDUklQVElPTiAgICAgICAgICAgICAgICAgemZMbnhDcmVhdGVUaHJlYWQgICAgICAgICAgICAqLworLyogICAgICBDcmVhdGUgYSBUaHJlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJTlBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBkZXYgOiBkZXZpY2UgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBPVVRQVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBhbHdheXMgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBBVVRIT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICBZdWFuLUd1IFdlaSAgICAgICAgIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIElOQy4gICAgMjAwNy4zICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordThfdCB6ZkxueENyZWF0ZVRocmVhZCh6ZGV2X3QgKmRldikKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSAoc3RydWN0IHVzYmRydl9wcml2YXRlICopZGV2LT5wcml2OworCisgICAgLyogQ3JlYXRlIE11dGV4IGFuZCBrZXZlbnRkICovCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkpCisgICAgSU5JVF9XT1JLKCZtYWNwLT5rZXZlbnQsIGtldmVudCwgZGV2KTsKKyNlbHNlCisgICAgSU5JVF9XT1JLKCZtYWNwLT5rZXZlbnQsIGtldmVudCk7CisjZW5kaWYKKyAgICBpbml0X01VVEVYKCZtYWNwLT5pb2N0bF9zZW0pOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgRlVOQ1RJT04gREVTQ1JJUFRJT04gICAgICAgICAgICAgICAgIHpmTG54U2lnbmFsVGhyZWFkICAgICAgICAgICAgKi8KKy8qICAgICAgU2lnbmFsIFRocmVhZCB3aXRoIEZsYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgSU5QVVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgZGV2IDogZGV2aWNlIHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIGZsYWcgOiBzaWduYWwgdGhyZWFkIGZsYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIE9VVFBVVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIG5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgIEFVVEhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgIFl1YW4tR3UgV2VpICAgICAgICAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSU5DLiAgICAyMDA3LjMgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIHpmTG54U2lnbmFsVGhyZWFkKHpkZXZfdCAqZGV2LCBpbnQgZmxhZykKK3sKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSAoc3RydWN0IHVzYmRydl9wcml2YXRlICopZGV2LT5wcml2OworCisgICAgaWYgKG1hY3AgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHByaW50aygibWFjcCBpcyBOVUxMXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgwICYmIG1hY3AtPmtldmVudF9yZWFkeSAhPSAxKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJLZXZlbnQgbm90IHJlYWR5XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNldF9iaXQoZmxhZywgJm1hY3AtPmtldmVudF9mbGFncyk7CisKKyAgICBpZiAoIXNjaGVkdWxlX3dvcmsoJm1hY3AtPmtldmVudCkpCisgICAgeworICAgICAgICAvL0ZhaWxzIGlzIE5vcm1hbAorICAgICAgICAvL3ByaW50ayhLRVJOX0VSUiAic2NoZWR1bGVfdGFzayBmYWlsZWQsIGZsYWcgPSAleFxuIiwgZmxhZyk7CisgICAgfQorfQorCisvKiBOb3RpZnkgd3JhcHBlciB0b2RvIHJlZG93bmxvYWQgZmlybXdhcmUgYW5kIHJlaW5pdCBwcm9jZWR1cmUgd2hlbiAqLworLyogaGFyZHdhcmUgd2F0Y2hkb2cgb2NjdXIgOiB6ZmlId1dhdGNoRG9nUmVpbml0KCkgKi8KK3ZvaWQgemZMbnhXYXRjaERvZ05vdGlmeSh6ZGV2X3QqIGRldikKK3sKKyAgICB6ZkxueFNpZ25hbFRocmVhZChkZXYsIEtFVkVOVF9XQVRDSERPRyk7Cit9CisKKy8qIFF1ZXJ5IER1cmFudGlvbiBvZiBBY3RpdmUgU2NhbiAqLwordm9pZCB6ZndHZXRBY3RpdmVTY2FuRHVyKHpkZXZfdCogZGV2LCB1OF90KiBEdXIpCit7CisgICAgKkR1ciA9IDMwOyAvLyBkZWZhdWx0IDMwIG1zCit9CisKK3ZvaWQgemZ3R2V0U2hvd1plcm9MZW5ndGhTU0lEKHpkZXZfdCogZGV2LCB1OF90KiBEdXIpCit7CisgICAgKkR1ciA9IDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3pkY29tcGF0LmggYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy96ZGNvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YzgwN2IzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvemRjb21wYXQuaApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE1vZHVsZSBOYW1lIDogemRjb21wYXQuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgQWJzdHJhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGZ1bmN0aW9uIGRlZmludGlvbiBmb3IgY29tcGF0aWJpbGl0eS4gICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTk9URVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgIFBsYXRmb3JtIGRlcGVuZGVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9aRENPTVBBVF9ICisjZGVmaW5lIF9aRENPTVBBVF9ICisKKyNpZm5kZWYgS0VSTkVMX1ZFUlNJT04KKyNkZWZpbmUgS0VSTkVMX1ZFUlNJT04oYSxiLGMpICgoKGEpIDw8IDE2KSArICgoYikgPDwgOCkgKyAoYykpCisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisjaWZuZGVmIElOSVRfVFFVRVVFCisjZGVmaW5lIElOSVRfVFFVRVVFKF90cSwgX3JvdXRpbmUsIF9kYXRhKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoX3RxKS0+bmV4dCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKF90cSktPnN5bmMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIFBSRVBBUkVfVFFVRVVFKChfdHEpLCAoX3JvdXRpbmUpLCAoX2RhdGEpKTsgICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUFJFUEFSRV9UUVVFVUUoX3RxLCBfcm91dGluZSwgX2RhdGEpICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIChfdHEpLT5yb3V0aW5lID0gX3JvdXRpbmU7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoX3RxKS0+ZGF0YSA9IF9kYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmbmRlZiBJTklUX1dPUksKKyNkZWZpbmUgd29ya19zdHJ1Y3QgdHFfc3RydWN0CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw0LDApKQorI2RlZmluZSBzY2hlZHVsZV93b3JrKGEpICAgcXVldWVfdGFzayhhLCAmdHFfc2NoZWR1bGVyKQorI2Vsc2UKKyNkZWZpbmUgc2NoZWR1bGVfd29yayhhKSAgc2NoZWR1bGVfdGFzayhhKQorI2VuZGlmCisKKyNkZWZpbmUgZmx1c2hfc2NoZWR1bGVkX3dvcmsgIGZsdXNoX3NjaGVkdWxlZF90YXNrcworI2RlZmluZSBJTklUX1dPUksoX3dxLCBfcm91dGluZSwgX2RhdGEpICBJTklUX1RRVUVVRShfd3EsIF9yb3V0aW5lLCBfZGF0YSkKKyNkZWZpbmUgUFJFUEFSRV9XT1JLKF93cSwgX3JvdXRpbmUsIF9kYXRhKSAgUFJFUEFSRV9UUVVFVUUoX3dxLCBfcm91dGluZSwgX2RhdGEpCisjZW5kaWYKKyNlbmRpZiAvLyA8IDIuNSBrZXJuZWwKKworCisjaWZuZGVmIERFQ0xBUkVfVEFTS0xFVAorI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDQsMCkpCisjZGVmaW5lIHRhc2tsZXRfc2NoZWR1bGUoYSkgICBxdWV1ZV90YXNrKGEsICZ0cV9zY2hlZHVsZXIpCisjZWxzZQorI2RlZmluZSB0YXNrbGV0X3NjaGVkdWxlKGEpICAgc2NoZWR1bGVfdGFzayhhKQorI2VuZGlmCisjZW5kaWYKKworCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMywzOCkpCit0eXBlZGVmIHN0cnVjdCBkZXZpY2UgbmV0ZGV2aWNlX3Q7CisjZWxpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw0LDQpKQordHlwZWRlZiBzdHJ1Y3QgbmV0X2RldmljZSBuZXRkZXZpY2VfdDsKKyNlbHNlCisjdW5kZWYgbmV0ZGV2aWNlX3QKK3R5cGVkZWYgc3RydWN0IG5ldF9kZXZpY2UgbmV0ZGV2aWNlX3Q7CisjZW5kaWYKKworI2lmZGVmIFdJUkVMRVNTX0VYVAorI2lmIChXSVJFTEVTU19FWFQgPCAxMykKK3N0cnVjdCBpd19yZXF1ZXN0X2luZm8KK3sKKyAgICAgICAgX191MTYgICAgICAgICAgIGNtZDsgICAgICAgICAgICAvKiBXaXJlbGVzcyBFeHRlbnNpb24gY29tbWFuZCAqLworICAgICAgICBfX3UxNiAgICAgICAgICAgZmxhZ3M7ICAgICAgICAgIC8qIE1vcmUgdG8gY29tZSA7LSkgKi8KK307CisjZW5kaWYKKyNlbmRpZgorCisvKiBsaW51eCA8IDIuNS42OSAqLworI2lmbmRlZiBJUlFfTk9ORQordHlwZWRlZiB2b2lkIGlycXJldHVybl90OworI2RlZmluZSBJUlFfTk9ORQorI2RlZmluZSBJUlFfSEFORExFRAorI2RlZmluZSBJUlFfUkVUVkFMKHgpCisjZW5kaWYKKworI2lmbmRlZiBpbl9hdG9taWMKKyNkZWZpbmUgaW5fYXRvbWljKCkgIDAKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkgIC8vIGZpeG1lCisjZGVmaW5lIFVSQl9BU1lOQ19VTkxJTksgIFVTQl9BU1lOQ19VTkxJTksKKyNlbHNlCisjZGVmaW5lIFVTQl9RVUVVRV9CVUxLIDAKKyNlbmRpZgorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwwKSkKKyNkZWZpbmUgZnJlZV9uZXRkZXYoeCkgICAgICAga2ZyZWUoeCkKKyNlbmRpZgorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvemR1c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3pkdXNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ4MzFmNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3pkdXNiLmMKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBNb2R1bGUgTmFtZSA6IHpkdXNiLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIEFic3RyYWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICBUaGlzIG1vZHVsZSBjb250YWlucyBwbHVnIGFuZCBwbGF5IGhhbmRsaW5nIGZvciBVU0IgZGV2aWNlIGRyaXZlciovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIE5PVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICBQbGF0Zm9ybSBkZXBlbmRlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpZmRlZiBNT0RWRVJTSU9OUworI2luY2x1ZGUgPGxpbnV4L21vZHZlcnNpb25zLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSAidXNiZHJ2LmgiCisjaW5jbHVkZSAiemR1c2IuaCIKKworaW50IHpmTG54QWxsb2NBbGxVcmJzKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCk7Cit2b2lkIHpmTG54RnJlZUFsbFVyYnMoc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwKTsKK3ZvaWQgemZMbnhVbmxpbmtBbGxVcmJzKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCk7CisKK01PRFVMRV9BVVRIT1IoIkF0aGVyb3MgQ29tbXVuaWNhdGlvbnMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQXRoZXJvcyA4MDIuMTFuIFdpcmVsZXNzIExBTiBhZGFwdGVyIik7CitNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CisKK3N0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lW10gPSAiT3R1cyI7CisKKy8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB6ZDEyMjFfaWRzIFtdID0geworCXsgVVNCX0RFVklDRShWRU5ET1JfQVRIUiwgUFJPRFVDVF9BUjkxNzApIH0sCisgICAgICAgIHsgVVNCX0RFVklDRShWRU5ET1JfRExJTkssIFBST0RVQ1RfRFdBMTYwQSkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODQ2LCAweDkwMTApIH0sCisJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHpkMTIyMV9pZHMpOworCitleHRlcm4gdThfdCB6ZkxueEluaXRTZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3ApOworZXh0ZXJuIGludCB1c2JkcnZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gdThfdCB6ZkxueENsZWFyU3RydWN0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgemZXZHNDbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgemZVbnJlZ2lzdGVyV2RzRGV2KHN0cnVjdCBuZXRfZGV2aWNlKiBwYXJlbnREZXYsIHUxNl90IHdkc0lkKTsKK2V4dGVybiBpbnQgemZMbnhWYXBDbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgemZMbnhVbnJlZ2lzdGVyVmFwRGV2KHN0cnVjdCBuZXRfZGV2aWNlKiBwYXJlbnREZXYsIHUxNl90IHZhcElkKTsKKworLyogV0RTICovCitleHRlcm4gc3RydWN0IHpzV2RzU3RydWN0IHdkc1taTV9XRFNfUE9SVF9OVU1CRVJdOworCisvKiBWQVAgKi8KK2V4dGVybiBzdHJ1Y3QgenNWYXBTdHJ1Y3QgdmFwW1pNX1ZBUF9QT1JUX05VTUJFUl07CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorc3RhdGljIHZvaWQgKnpmTG54UHJvYmUoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGlmbnVtLAorICAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisgICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9ICZkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2lmbnVtXTsKKyNlbHNlCitzdGF0aWMgaW50IHpmTG54UHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisgICAgc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKyNlbmRpZgorCisgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCA9IE5VTEw7CisgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gTlVMTDsKKyAgICBpbnQgdmVuZG9yX2lkLCBwcm9kdWN0X2lkOworICAgIGludCByZXN1bHQgPSAwOworCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisgICAgdXNiX2dldF9kZXYoZGV2KTsKKyNlbmRpZgorCisgICAgdmVuZG9yX2lkID0gZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yOworICAgIHByb2R1Y3RfaWQgPSBkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0OworCisjaWZkZWYgSE1BQ19ERUJVRworICAgIHByaW50ayhLRVJOX05PVElDRSAidmVuZG9yX2lkID0gJTA0eFxuIiwgdmVuZG9yX2lkKTsKKyAgICBwcmludGsoS0VSTl9OT1RJQ0UgInByb2R1Y3RfaWQgPSAlMDR4XG4iLCBwcm9kdWN0X2lkKTsKKworICAgIGlmIChkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIlVTQiAyLjAgSG9zdFxuIik7CisgICAgZWxzZQorICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIlVTQiAxLjEgSG9zdFxuIik7CisjZW5kaWYKKworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisgICAgaWYgKHVzYl9zZXRfY29uZmlndXJhdGlvbihkZXYsIGRldi0+Y29uZmlnWzBdLmJDb25maWd1cmF0aW9uVmFsdWUpKQorICAgIHsKKyAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ1c2Jfc2V0X2NvbmZpZ3VyYXRpb24oKSBmYWlsZWRcbiIpOworICAgICAgICByZXN1bHQgPSAtRUlPOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoIShtYWNwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYmRydl9wcml2YXRlKSwgR0ZQX0tFUk5FTCkpKQorICAgIHsKKyAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJvdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgZGV2aWNlIHN0cnVjdHVyZVxuIik7CisgICAgICAgIHJlc3VsdCA9IC1FTk9NRU07CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICAvKiBaZXJvIHRoZSBtZW1vcnkgKi8KKyAgICBtZW1zZXQobWFjcCwgMCwgc2l6ZW9mKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSkpOworCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKyAgICB1c2JfaW5jX2Rldl91c2UoZGV2KTsKKyNlbmRpZgorCisgICAgbmV0ID0gYWxsb2NfZXRoZXJkZXYoMCk7CisKKyAgICBpZiAobmV0ID09IE5VTEwpCisgICAgeworICAgICAgICBwcmludGsoS0VSTl9FUlIgInpmTG54UHJvYmU6IE5vdCBhYmxlIHRvIGFsbG9jIGV0aGVyZGV2IHN0cnVjdFxuIik7CisgICAgICAgIHJlc3VsdCA9IC1FTk9NRU07CisgICAgICAgIGdvdG8gZmFpbDE7CisgICAgfQorCisgICAgc3RyY3B5KG5ldC0+bmFtZSwgImF0aCVkIik7CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDI0KSkKKyAgICBTRVRfTU9EVUxFX09XTkVSKG5ldCk7CisjZW5kaWYKKworICAgIG5ldC0+cHJpdiA9IG1hY3A7ICAgLy9rZXJuZWwgMi42CisgICAgbWFjcC0+dWRldiA9IGRldjsKKyAgICBtYWNwLT5kZXZpY2UgPSBuZXQ7CisKKyAgICAvKiBzZXQgdXAgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uICovCisgICAgLyogY2hlY2sgb3V0IHRoZSBlbmRwb2ludHMgKi8KKyAgICBtYWNwLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisKKyAgICAvL2luaXRfd2FpdHF1ZXVlX2hlYWQoJm1hY3AtPnJlZ1NldF93YWl0KTsKKyAgICAvL2luaXRfd2FpdHF1ZXVlX2hlYWQoJm1hY3AtPmlvcndSc3Bfd2FpdCk7CisgICAgLy9pbml0X3dhaXRxdWV1ZV9oZWFkKCZtYWNwLT50ZXJtX3dhaXQpOworCisgICAgaWYgKCF6ZkxueEFsbG9jQWxsVXJicyhtYWNwKSkKKyAgICB7CisgICAgICAgIHJlc3VsdCA9IC1FTk9NRU07CisgICAgICAgIGdvdG8gZmFpbDI7CisgICAgfQorCisgICAgaWYgKCF6ZkxueEluaXRTZXR1cChuZXQsIG1hY3ApKQorICAgIHsKKyAgICAgICAgcmVzdWx0ID0gLUVJTzsKKyAgICAgICAgZ290byBmYWlsMzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKyAgICAgICAgdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIG1hY3ApOworICAgICAgICBTRVRfTkVUREVWX0RFVihuZXQsICZpbnRlcmZhY2UtPmRldik7CisjZW5kaWYKKworICAgICAgICBpZiAocmVnaXN0ZXJfbmV0ZGV2KG5ldCkgIT0gMCkKKyAgICAgICAgeworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorICAgICAgICAgICAgdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworI2VuZGlmCisgICAgICAgICAgICBnb3RvIGZhaWwzOworICAgICAgICB9CisgICAgfQorCisgICAgbmV0aWZfY2Fycmllcl9vZmYobmV0KTsKKyAgICBnb3RvIGRvbmU7CisKK2ZhaWwzOgorICAgIHpmTG54RnJlZUFsbFVyYnMobWFjcCk7CitmYWlsMjoKKyAgICBmcmVlX25ldGRldihuZXQpOyAgLy9rZXJuZWwgMi42CitmYWlsMToKKyAgICBrZnJlZShtYWNwKTsKKworZmFpbDoKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKyAgICB1c2JfcHV0X2RldihkZXYpOworI2VuZGlmCisgICAgbWFjcCA9IE5VTEw7CisKK2RvbmU6CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKyAgICByZXR1cm4gbWFjcDsKKyNlbHNlCisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbmRpZgorfQorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKK3N0YXRpYyB2b2lkIHpmTG54RGlzY29ubmVjdChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB2b2lkICpwdHIpCisjZWxzZQorc3RhdGljIHZvaWQgemZMbnhEaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCisjZW5kaWYKK3sKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSAoc3RydWN0IHVzYmRydl9wcml2YXRlICopIHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKyNlbHNlCisgICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gKHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqKXB0cjsKKyNlbmRpZgorCisgICAgcHJpbnRrKEtFUk5fREVCVUcgInpmTG54RGlzY29ubmVjdFxuIik7CisKKyAgICBpZiAoIW1hY3ApCisgICAgeworICAgICAgICBwcmludGsoS0VSTl9FUlIgInVucmVnaXN0ZXJpbmcgbm9uLWV4aXN0YW50IGRldmljZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobWFjcC0+ZHJpdmVyX2lzb2xhdGVkKQorICAgIHsKKyAgICAgICAgaWYgKG1hY3AtPmRldmljZS0+ZmxhZ3MgJiBJRkZfVVApCisgICAgICAgICAgICB1c2JkcnZfY2xvc2UobWFjcC0+ZGV2aWNlKTsKKyAgICB9CisKKyNpZiAwCisgICAgLyogQ2xvc2UgV0RTICovCisgICAgLy96Zldkc0Nsb3NlKHdkc1swXS5kZXYpOworICAgIC8qIFVucmVnaXN0ZXIgV0RTICovCisgICAgLy96ZlVucmVnaXN0ZXJXZHNEZXYobWFjcC0+ZGV2aWNlLCAwKTsKKworICAgIC8qIENsb3NlIFZBUCAqLworICAgIHpmTG54VmFwQ2xvc2UodmFwWzBdLmRldik7CisgICAgLyogVW5yZWdpc3RlciBWQVAgKi8KKyAgICB6ZkxueFVucmVnaXN0ZXJWYXBEZXYobWFjcC0+ZGV2aWNlLCAwKTsKKyNlbmRpZgorCisgICAgemZMbnhDbGVhclN0cnVjdHMobWFjcC0+ZGV2aWNlKTsKKworICAgIHVucmVnaXN0ZXJfbmV0ZGV2KG1hY3AtPmRldmljZSk7CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApKQorICAgIHVzYl9kZWNfZGV2X3VzZShkZXYpOworI2Vsc2UKKyAgICB1c2JfcHV0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSkpOworI2VuZGlmCisKKyAgICAvL3ByaW50ayhLRVJOX0VSUiAiMy4gemZMbnhVbmxpbmtBbGxVcmJzXG4iKTsKKyAgICAvL3pmTG54VW5saW5rQWxsVXJicyhtYWNwKTsKKworICAgIC8qIEZyZWUgbmV0d29yayBpbnRlcmZhY2UgKi8KKyAgICBmcmVlX25ldGRldihtYWNwLT5kZXZpY2UpOworCisgICAgemZMbnhGcmVlQWxsVXJicyhtYWNwKTsKKyAgICAvL3pmTG54Q2xlYXJTdHJ1Y3RzKG1hY3AtPmRldmljZSk7CisgICAga2ZyZWUobWFjcCk7CisgICAgbWFjcCA9IE5VTEw7CisKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKKyAgICB1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisjZW5kaWYKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHpkMTIyMV9kcml2ZXIgPSB7CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkpCisgICAgI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTUpKQorCS5vd25lciAgICAgICAgPSBUSElTX01PRFVMRSwKKwkjZW5kaWYKKyNlbmRpZgorCS5uYW1lICAgICAgICAgPSBkcml2ZXJfbmFtZSwKKwkucHJvYmUgICAgICAgID0gemZMbnhQcm9iZSwKKwkuZGlzY29ubmVjdCAgID0gemZMbnhEaXNjb25uZWN0LAorCS5pZF90YWJsZSAgICAgPSB6ZDEyMjFfaWRzLAorfTsKKworaW50IF9faW5pdCB6ZkxueElpbml0KHZvaWQpCit7CisgICAgcHJpbnRrKEtFUk5fTk9USUNFICIlcyAtIHZlcnNpb24gJXNcbiIsICBEUklWRVJfTkFNRSwgVkVSU0lPTklEKTsKKyAgICByZXR1cm4gdXNiX3JlZ2lzdGVyKCZ6ZDEyMjFfZHJpdmVyKTsKK30KKwordm9pZCBfX2V4aXQgemZMbnhFeGl0KHZvaWQpCit7CisgICAgdXNiX2RlcmVnaXN0ZXIoJnpkMTIyMV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh6ZkxueElpbml0KTsKK21vZHVsZV9leGl0KHpmTG54RXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy96ZHVzYi5oIGIvZHJpdmVycy9zdGFnaW5nL290dXMvemR1c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTZkYzIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvemR1c2IuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgTW9kdWxlIE5hbWUgOiB6ZHVzYi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBBYnN0cmFjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgVGhpcyBtb2R1bGUgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIFVTQiBkZXZpY2UgZHJpdmVyICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBOT1RFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgUGxhdGZvcm0gZGVwZW5kZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1pEVVNCX0gKKyNkZWZpbmUgX1pEVVNCX0gKKworI2lmbmRlZiBEUklWRVJfTkFNRQorI2RlZmluZSBEUklWRVJfTkFNRSAgICAgICAgICAgICAiYXJ1c2IiCisjZW5kaWYKKworI2RlZmluZSBWRVJTSU9OSUQgICAgICAgICAgICAgICAiMC4wLjAuOTk5IgorCisvKiBEZWZpbmUgdGhlc2UgdmFsdWVzIHRvIG1hdGNoIHlvdXIgZGV2aWNlICovCisjZGVmaW5lIFZFTkRPUl9BVEhSICAgICAgICAgICAgIDB4MENGMyAgLy9BdGhlcm9zCisjZGVmaW5lIFBST0RVQ1RfQVI5MTcwICAgICAgICAgIDB4OTE3MAorCisjZGVmaW5lIFZFTkRPUl9ETElOSyAgICAgICAgICAgIDB4MDdEMSAgLy9EbGluaworI2RlZmluZSBQUk9EVUNUX0RXQTE2MEEgICAgICAgICAweDNDMTAKKworI2VuZGlmCg==