CiN2ZXJzaW9uIDYKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTUFDUk8gREVGSU5JVElPTlMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmVudW0gbWFjcm9fZGVmaW5pdGlvbnMgewogICAgT0ZQX01BWF9UQUJMRV9OQU1FX0xFTiA9IDMyLAogICAgT0ZQX01BWF9QT1JUX05BTUVfTEVOID0gMTYsCgogICAgT0ZQX1RDUF9QT1JUID0gNjY1MywKICAgIE9GUF9TU0xfUE9SVCA9IDY2NTMsCgogICAgT0ZQX0VUSF9BTEVOID0gNiwKCiAgICBPRlBfREVGQVVMVF9NSVNTX1NFTkRfTEVOID0gMTI4LAoKICAgIE9GUF9WTEFOX05PTkUgPSAwLAoKICAgIE9GUF9GTE9XX1BFUk1BTkVOVCA9IDAsCgogICAgT0ZQX0RFRkFVTFRfUFJJT1JJVFkgPSAweDgwMDAsCgogICAgT0ZQX05PX0JVRkZFUiA9IDB4ZmZmZmZmZmYsCgogICAgREVTQ19TVFJfTEVOID0gMjU2LAogICAgU0VSSUFMX05VTV9MRU4gPSAzMiwKCiAgICBPRlBRX0FMTCA9IDB4ZmZmZmZmZmYsCiAgICBPRlBRX01BWF9SQVRFX1VOQ0ZHID0gMHhmZmZmLAogICAgT0ZQUV9NSU5fUkFURV9VTkNGRyA9IDB4ZmZmZiwKfTsKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU1BFQ0lBTCBTVFJVQ1RVUkVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCnN0cnVjdCBvZl91aW50NjQgewogICAgdWludDY0X3QgdmFsdWU7Cn07CgpzdHJ1Y3Qgb2ZfdWludDMyIHsKICAgIHVpbnQzMl90IHZhbHVlOwp9OwoKc3RydWN0IG9mX3VpbnQ4IHsKICAgIHVpbnQ4X3QgdmFsdWU7Cn07CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhFQURFUiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKiBUeXBlIGZvciBoZWFkZXIgKi8KZW51bSBvZnBfdHlwZSh3aXJlX3R5cGU9dWludDhfdCkgewogICAgT0ZQVF9IRUxMTyA9IDAsCiAgICBPRlBUX0VSUk9SID0gMSwKICAgIE9GUFRfRUNIT19SRVFVRVNUID0gMiwKICAgIE9GUFRfRUNIT19SRVBMWSA9IDMsCiAgICBPRlBUX0VYUEVSSU1FTlRFUiA9IDQsCiAgICBPRlBUX0ZFQVRVUkVTX1JFUVVFU1QgPSA1LAogICAgT0ZQVF9GRUFUVVJFU19SRVBMWSA9IDYsCiAgICBPRlBUX0dFVF9DT05GSUdfUkVRVUVTVCA9IDcsCiAgICBPRlBUX0dFVF9DT05GSUdfUkVQTFkgPSA4LAogICAgT0ZQVF9TRVRfQ09ORklHID0gOSwKICAgIE9GUFRfUEFDS0VUX0lOID0gMTAsCiAgICBPRlBUX0ZMT1dfUkVNT1ZFRCA9IDExLAogICAgT0ZQVF9QT1JUX1NUQVRVUyA9IDEyLAogICAgT0ZQVF9QQUNLRVRfT1VUID0gMTMsCiAgICBPRlBUX0ZMT1dfTU9EID0gMTQsCiAgICBPRlBUX0dST1VQX01PRCA9IDE1LAogICAgT0ZQVF9QT1JUX01PRCA9IDE2LAogICAgT0ZQVF9UQUJMRV9NT0QgPSAxNywKICAgIE9GUFRfU1RBVFNfUkVRVUVTVCA9IDE4LCAvKiBU/G0gc/xy/G1sZXIgaedpbiBheW79IG9sc3VuIGRpeWUgbXVsdGlwYXJ0IHllcmluZSBzdGF0cyAqLwogICAgT0ZQVF9TVEFUU19SRVBMWSA9IDE5LCAvKiBU/G0gc/xy/G1sZXIgaedpbiBheW79IG9sc3VuIGRpeWUgbXVsdGlwYXJ0IHllcmluZSBzdGF0cyAqLwogICAgT0ZQVF9CQVJSSUVSX1JFUVVFU1QgPSAyMCwKICAgIE9GUFRfQkFSUklFUl9SRVBMWSA9IDIxLAogICAgT0ZQVF9ST0xFX1JFUVVFU1QgPSAyNCwKICAgIE9GUFRfUk9MRV9SRVBMWSA9IDI1LAogICAgT0ZQVF9HRVRfQVNZTkNfUkVRVUVTVCA9IDI2LAogICAgT0ZQVF9HRVRfQVNZTkNfUkVQTFkgPSAyNywKICAgIE9GUFRfU0VUX0FTWU5DID0gMjgsCiAgICBPRlBUX01FVEVSX01PRCA9IDI5LAogICAgT0ZQVF9ST0xFX1NUQVRVUyA9IDMwLAogICAgT0ZQVF9UQUJMRV9TVEFUVVMgPSAzMSwKICAgIE9GUFRfUkVRVUVTVEZPUldBUkQgPSAzMiwKICAgIE9GUFRfQlVORExFX0NPTlRST0wgPSAzMywKICAgIE9GUFRfQlVORExFX0FERF9NRVNTQUdFID0gMzQsCiAgICBPRlBUX0NPTlRST0xMRVJfU1RBVFVTID0gMzUsIC8qIDEuNCBkZW4gc29ucmEgeWVuaSBnZWxtaXMgKi8KfTsKCi8qIEhlYWRlciBvbiBhbGwgT3BlbkZsb3cgcGFja2V0cyAqLwpzdHJ1Y3Qgb2ZfaGVhZGVyIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSA/OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwp9OwoKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhFQURFUiBUWVBFUyAoRk9SIERJRkZFUkVOVCBQQUNLRVRTKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKiBOYW1lc3BhY2VzICovCi8qIFVzZWQgaW4gaGVhZGVyX3R5cGUgKi8KZW51bSBvZnBfaGVhZGVyX3R5cGVfbmFtZXNwYWNlKHdpcmVfdHlwZT11aW50MTZfdCwgc3RhYmxlPVRydWUpIHsKICAgIE9GUEhUTl9PTkYgPSAwLAogICAgT0ZQSFROX0VUSEVSVFlQRSA9IDEsCiAgICBPRlBIVE5fSVBfUFJPVE8gPSAyLAogICAgT0ZQSFROX1VEUF9UQ1BfUE9SVCA9IDMsCiAgICBPRlBIVE5fSVBWNF9PUFRJT04gPSA0LAp9OwoKLyogT05GIG5hbWVzcGFjZXMgKi8KZW51bSBvZnBfaGVhZGVyX3R5cGVfb25mKHdpcmVfdHlwZT11aW50MTZfdCwgc3RhYmxlPVRydWUsIGNvbXBsZXRlPUZhbHNlKSB7CiAgICBPRlBIVE9fRVRIRVJORVQgPSAwLAogICAgT0ZQSFRPX05PX0hFQURFUiA9IDEsCiAgICBPRlBIVE9fT1hNX0VYUEVSSU1FTlRFUiA9IDB4RkZGRiwKfTsKCi8qIEhlYWRlciB0eXBlIHN0cnVjdHVyZS4gKi8Kc3RydWN0IG9mX2hlYWRlcl90eXBlIHsKICAgIGVudW0gb2ZwX2hlYWRlcl90eXBlX25hbWVzcGFjZSBuYW1lc3BhY2UgPT0gPzsKICAgIHVpbnQxNl90IG5zX3R5cGU7Cn07CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUE9SVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLyogUG9ydCBudW1iZXJpbmcgKi8KLyogVPxtIHP8cvxtbGVyIGnnaW4gYXlu/SBvbHN1biBkaXllIG9mcF9wb3J0X25vIHllcmluZSBwb3J0ICovCmVudW0gb2ZwX3BvcnQod2lyZV90eXBlPXVpbnQzMl90KSB7CiAgICBPRlBQX01BWCA9IDB4ZmZmZmZmMDAsCiAgICBPRlBQX1VOU0VUID0gMHhmZmZmZmZmNywKICAgIE9GUFBfSU5fUE9SVCA9IDB4ZmZmZmZmZjgsCiAgICBPRlBQX1RBQkxFID0gMHhmZmZmZmZmOSwKICAgIE9GUFBfTk9STUFMID0gMHhmZmZmZmZmYSwKICAgIE9GUFBfRkxPT0QgPSAweGZmZmZmZmZiLAogICAgT0ZQUF9BTEwgPSAweGZmZmZmZmZjLAogICAgT0ZQUF9DT05UUk9MTEVSID0gMHhmZmZmZmZmZCwKICAgIE9GUFBfTE9DQUwgPSAweGZmZmZmZmZlLAogICAgT0ZQUF9BTlkgPSAweGZmZmZmZmZmLAp9OwoKLyogRmxhZ3MgdG8gaW5kaWNhdGUgYmVoYXZpb3Igb2YgdGhlIHBoeXNpY2FsIHBvcnQgKi8KLyogVXNlZCBpbiBvZl9wb3J0X2Rlc2MgYW5kIG9mcF9wb3J0X21vZCBtZXNzYWdlICovCmVudW0gb2ZwX3BvcnRfY29uZmlnKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CiAgICBPRlBQQ19QT1JUX0RPV04gPSAweDEsCiAgICBPRlBQQ19OT19SRUNWID0gMHg0LAogICAgT0ZQUENfTk9fRldEID0gMHgyMCwKICAgIE9GUFBDX05PX1BBQ0tFVF9JTiA9IDB4NDAsCiAgICBPRlBQQ19CU05fTUlSUk9SX0RFU1QgPSAweDgwMDAwMDAwLCAvKiBoZWFkZXIgZG9zeWFsYXL9bmRhIGJ1bHVubXV5b3IgKi8KfTsKCi8qIEN1cnJlbnQgc3RhdGUgb2YgdGhlIHBoeXNpY2FsIHBvcnQgKi8KLyogTm90IGNvbmZpZ3VyYWJsZSBmcm9tIHRoZSBjb250cm9sbGVyICovCi8qIFVzZWQgaW4gb2ZfcG9ydF9kZXNjICovCmVudW0gb2ZwX3BvcnRfc3RhdGUod2lyZV90eXBlPXVpbnQzMl90LCBiaXRtYXNrPVRydWUpIHsKICAgIE9GUFBTX0xJTktfRE9XTiA9IDB4MSwKICAgIE9GUFBTX0JMT0NLRUQgPSAweDIsCiAgICBPRlBQU19MSVZFID0gMHg0LAp9OwoKLyogUG9ydCBkZXNjcmlwdGlvbiBwcm9wZXJ0eSB0eXBlcyAqLwovKiBub3QgaW4gYmVmb3JlICovCi8qIFVzZWQgaW4gb2ZfcG9ydF9kZXNjX3Byb3BfZXRoZXJuZXQgKi8KZW51bSBvZnBfcG9ydF9kZXNjX3Byb3BfdHlwZSB7CiAgIE9GUFBEUFRfRVRIRVJORVQgPSAwLAogICBPRlBQRFBUX09QVElDQUwgPSAxLAogICBPRlBQRFBUX1BJUEVMSU5FX0lOUFVUID0gMiwKICAgT0ZQUERQVF9QSVBFTElORV9PVVRQVVQgPSAzLAogICBPRlBQRFBUX1JFQ0lSQ1VMQVRFID0gNCwKICAgT0ZQUERQVF9FWFBFUklNRU5URVIgPSAweEZGRkYsCn07CgovKiBGZWF0dXJlcyBvZiBwb3J0cyBhdmFpbGFibGUgaW4gYSBkYXRhcGF0aC4gKi8KZW51bSBvZnBfcG9ydF9mZWF0dXJlcyh3aXJlX3R5cGU9dWludDMyX3QsIGJpdG1hc2s9VHJ1ZSkgewogICAgT0ZQUEZfMTBNQl9IRCA9IDB4MSwKICAgIE9GUFBGXzEwTUJfRkQgPSAweDIsCiAgICBPRlBQRl8xMDBNQl9IRCA9IDB4NCwKICAgIE9GUFBGXzEwME1CX0ZEID0gMHg4LAogICAgT0ZQUEZfMUdCX0hEID0gMHgxMCwKICAgIE9GUFBGXzFHQl9GRCA9IDB4MjAsCiAgICBPRlBQRl8xMEdCX0ZEID0gMHg0MCwKICAgIE9GUFBGXzQwR0JfRkQgPSAweDgwLAogICAgT0ZQUEZfMTAwR0JfRkQgPSAweDEwMCwKICAgIE9GUFBGXzFUQl9GRCA9IDB4MjAwLAogICAgT0ZQUEZfT1RIRVIgPSAweDQwMCwKICAgIE9GUFBGX0NPUFBFUiA9IDB4ODAwLAogICAgT0ZQUEZfRklCRVIgPSAweDEwMDAsCiAgICBPRlBQRl9BVVRPTkVHID0gMHgyMDAwLAogICAgT0ZQUEZfUEFVU0UgPSAweDQwMDAsCiAgICBPRlBQRl9QQVVTRV9BU1lNID0gMHg4MDAwLAogICAgT0ZQUEZfQlNOX0JSRUFLT1VUX0NBUEFCTEUgPSAweDgwMDAwMDAwLCAvKiBub3QgaW4gc3BlYy4gKi8KfTsKCi8qIEZlYXR1cmVzIG9mIG9wdGljYWwgcG9ydHMgYXZhaWxhYmxlIGluIHN3aXRjaC4gKi8KZW51bSBvZnBfb3B0aWNhbF9wb3J0X2ZlYXR1cmVzKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CiAgICBPRlBPUEZfUlhfVFVORSA9IDB4MSwKICAgIE9GUE9QRl9UWF9UVU5FID0gMHgyLAogICAgT0ZQT1BGX1RYX1BXUiA9IDB4NCwKICAgIE9GUE9QRl9VU0VfRlJFUSA9IDB4OCwKfTsKCi8qIERlc2NyaXB0aW9uIG9mIGEgcG9ydCAqLwovKiBU/G0gc/xy/G1sZXIgaedpbiBheW79IG9sc3VuIGRpeWUgb2ZwX3BvcnQgeWVyaW5lIG9mX3BvcnRfZGVzYyAqLwpzdHJ1Y3Qgb2ZfcG9ydF9kZXNjIHsKICAgIG9mX3BvcnRfbm9fdCBwb3J0X25vOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgcGFkKDIpOwogICAgb2ZfbWFjX2FkZHJfdCBod19hZGRyOwogICAgcGFkKDIpOwogICAgb2ZfcG9ydF9uYW1lX3QgbmFtZTsKICAgIGVudW0gb2ZwX3BvcnRfY29uZmlnIGNvbmZpZzsgLyogQml0bWFwIG9mIE9GUFBDXyogZmxhZ3MuICovCiAgICBlbnVtIG9mcF9wb3J0X3N0YXRlIHN0YXRlOyAvKiBCaXRtYXAgb2YgT0ZQUFNfKiBmbGFncy4gKi8KICAgIGxpc3Qob2ZfcG9ydF9kZXNjX3Byb3BfdCkgcHJvcGVydGllczsKfTsKCi8qIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBwb3J0IGRlc2NyaXB0aW9uIHByb3BlcnRpZXMuICovCnN0cnVjdCBvZl9wb3J0X2Rlc2NfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09ID87CiAgICB1aW50MTZfdCBsZW5ndGg7Cn07CgovKiBFdGhlcm5ldCBwb3J0IGRlc2NyaXB0aW9uIHByb3BlcnR5LiAqLwpzdHJ1Y3Qgb2ZfcG9ydF9kZXNjX3Byb3BfZXRoZXJuZXQgOiBvZl9wb3J0X2Rlc2NfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDA7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICBwYWQoNCk7CiAgICB1aW50MzJfdCBjdXJyOwogICAgdWludDMyX3QgYWR2ZXJ0aXNlZDsKICAgIHVpbnQzMl90IHN1cHBvcnRlZDsKICAgIHVpbnQzMl90IHBlZXI7CiAgICB1aW50MzJfdCBjdXJyX3NwZWVkOwogICAgdWludDMyX3QgbWF4X3NwZWVkOwp9OwoKLyogT3B0aWNhbCBwb3J0IGRlc2NyaXB0aW9uIHByb3BlcnR5LiAqLwpzdHJ1Y3Qgb2ZfcG9ydF9kZXNjX3Byb3Bfb3B0aWNhbCA6IG9mX3BvcnRfZGVzY19wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHBhZCg0KTsKICAgIHVpbnQzMl90IHN1cHBvcnRlZDsKICAgIHVpbnQzMl90IHR4X21pbl9mcmVxX2xtZGE7CiAgICB1aW50MzJfdCB0eF9tYXhfZnJlcV9sbWRhOwogICAgdWludDMyX3QgdHhfZ3JpZF9mcmVxX2xtZGE7CiAgICB1aW50MzJfdCByeF9taW5fZnJlcV9sbWRhOwogICAgdWludDMyX3QgcnhfbWF4X2ZyZXFfbG1kYTsKICAgIHVpbnQzMl90IHJ4X2dyaWRfZnJlcV9sbWRhOwogICAgdWludDE2X3QgdHhfcHdyX21pbjsKICAgIHVpbnQxNl90IHR4X3B3cl9tYXg7Cn07CgovKiBJbmdyZXNzIHBpcGVsaW5lIGZpZWxkcyBkZXNjcmlwdGlvbiBwcm9wZXJ0eSAqLwovKiBJbiAxLjUuMSBzcGVjIG9mcF9wb3J0X2Rlc2NfcHJvcF9veG0gKi8Kc3RydWN0IG9mX3BvcnRfZGVzY19wcm9wX2luZ3Jlc3MgewogICAgdWludDE2X3QgdHlwZSA9PSAyOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgb2Zfb2N0ZXRzX3Qgb3htX2lkczsKfTsKCi8qIEVncmVzcyBwaXBlbGluZSBmaWVsZHMgZGVzY3JpcHRpb24gcHJvcGVydHkgKi8KLyogSW4gMS41LjEgc3BlYyBvZnBfcG9ydF9kZXNjX3Byb3Bfb3htICovCnN0cnVjdCBvZl9wb3J0X2Rlc2NfcHJvcF9lZ3Jlc3MgewogICAgdWludDE2X3QgdHlwZSA9PSAzOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgb2Zfb2N0ZXRzX3Qgb3htX2lkczsKfTsKCi8qIFJlY2lyY3VsYXRlIHBvcnQgZGVzY3JpcHRpb24gcHJvcGVydHkuICovCnN0cnVjdCBvZnBfcG9ydF9kZXNjX3Byb3BfcmVjaXJjdWxhdGUgewogICAgdWludDE2X3QgdHlwZSA9PSA0OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgb2Zfb2N0ZXRzX3QgcG9ydF9ub3M7Cn07CgoKLyogRXhwZXJpbWVudGVyIHBvcnQgZGVzY3JpcHRpb24gcHJvcGVydHkuICovCnN0cnVjdCBvZl9wb3J0X2Rlc2NfcHJvcF9leHBlcmltZW50ZXIgOiBvZl9wb3J0X2Rlc2NfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OwogICAgdWludDMyX3QgZXhwX3R5cGU7Cn07CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGTE9XIE1BVENIIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKiBNYXRjaCBUeXBlICovCi8qIFN0YW5kYXJkIGRlcHJlY2F0ZWQgb2xtdf4gKi8KZW51bSBvZnBfbWF0Y2hfdHlwZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKICAgIE9GUE1UX1NUQU5EQVJEID0gMCwKICAgIE9GUE1UX09YTSA9IDEsCn07CgovKiBPWE0gQ2xhc3MgSURzICovCmVudW0gb2ZwX294bV9jbGFzcyh3aXJlX3R5cGU9dWludDE2X3QpIHsKICAgIE9GUFhNQ19OWE1fMCA9IDAsCiAgICBPRlBYTUNfTlhNXzEgPSAxLAogICAgT0ZQWE1DX09QRU5GTE9XX0JBU0lDID0gMHg4MDAwLAogICAgT0ZQWE1DX1BBQ0tFVF9SRUdTID0gMHg4MDAxLAogICAgT0ZQWE1DX0VYUEVSSU1FTlRFUiA9IDB4ZmZmZiwKfTsKCgovKiBWTEFOIGlkIHNldCBvciBub3QgKi8KZW51bSBvZnBfdmxhbl9pZCh3aXJlX3R5cGU9dWludDE2X3QpIHsKICAgIE9GUFZJRF9OT05FID0gMCwKICAgIE9GUFZJRF9QUkVTRU5UID0gMHgxMDAwLAp9OwoKLy8gRklYTUU6IE9GIHNwZWMgc3BlY2lmaWVkIHRoaXMgYXMgJzknIGJpdHMsIGltcGxpY2l0bHkgYWRkaW5nIHRvIGZ1bGwgYnl0ZQovKiBCaXQgZGVmaW5pdGlvbnMgZm9yIElQdjYgRXh0ZW5zaW9uIEhlYWRlciBwc2V1ZG8tZmllbGQuICovCmVudW0gb2ZwX2lwdjZleHRoZHJfZmxhZ3Mod2lyZV90eXBlPXVpbnQxNl90LCBiaXRtYXNrPVRydWUpIHsKICAgIE9GUElFSF9OT05FWFQgPSAweDEsCiAgICBPRlBJRUhfRVNQID0gMHgyLAogICAgT0ZQSUVIX0FVVEggPSAweDQsCiAgICBPRlBJRUhfREVTVCA9IDB4OCwKICAgIE9GUElFSF9GUkFHID0gMHgxMCwKICAgIE9GUElFSF9ST1VURVIgPSAweDIwLAogICAgT0ZQSUVIX0hPUCA9IDB4NDAsCiAgICBPRlBJRUhfVU5SRVAgPSAweDgwLAogICAgT0ZQSUVIX1VOU0VRID0gMHgxMDAsCn07CgovKiBGbG93IE1hdGNoICovCi8qIHN0YW5kYXJkLTEuMCBp52luZGUgdjEgb2xhcmFrIHZhciAqLwovKiBzdGFuZGFyZC0xLjEgaedpbmRlIHYyIG9sYXJhayB2YXIgKi8KLyogc3RhbmRhcmQtMS4yIGRlbiBpdGliYXJlbiB2MyBvbGFyYWsgZGXwaf5taf4gdmUgb3htIGNsYXNzbGFy/SBvbHX+dHVydWxtdf4gKi8Kc3RydWN0IG9mX21hdGNoX3YzKGFsaWduPTgsIGxlbmd0aF9pbmNsdWRlc19hbGlnbj1GYWxzZSkgewogICAgdWludDE2X3QgdHlwZSA9PSAxOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgbGlzdChvZl9veG1fdCkgb3htX2xpc3Q7Cn07CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRkxPVyBTVEFUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLyogc3RhdHMgb3hzIGNsYXNzICovCi8qIG5vdCBpbiAxLjQgICovCmVudW0gb2ZwX294c19jbGFzcyh3aXJlX3R5cGU9dWludDE2X3QpIHsKICAgIE9GUFhTQ19PUEVORkxPV19CQVNJQyA9IDB4ODAwMiwKICAgIE9GUFhTQ19FWFBFUklNRU5URVIgPSAweEZGRkYsCn07CgpzdHJ1Y3Qgb2Zfc3RhdF92NiAoYWxpZ249OCwgbGVuZ3RoX2luY2x1ZGVzX2FsaWduPUZhbHNlKXsKICAgIHBhZCgyKTsgLyogcmVzZXJ2ZWQgKi8KICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIGxpc3Qob2Zfb3hzX3QpIG94c19maWVsZHM7Cn07CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZMT1cgSU5TVFJVQ1RJT05TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLyogaW5zdHJ1Y3Rpb24gdHlwZXMgKi8KZW51bSBvZnBfaW5zdHJ1Y3Rpb25fdHlwZSh3aXJlX3R5cGU9dWludDE2X3QsIGJpdG1hc2s9VHJ1ZSkgewogICAgT0ZQSVRfR09UT19UQUJMRSA9IDB4MSwKICAgIE9GUElUX1dSSVRFX01FVEFEQVRBID0gMHgyLAogICAgT0ZQSVRfV1JJVEVfQUNUSU9OUyA9IDB4MywKICAgIE9GUElUX0FQUExZX0FDVElPTlMgPSAweDQsCiAgICBPRlBJVF9DTEVBUl9BQ1RJT05TID0gMHg1LAogICAgT0ZQSVRfREVQUkVDQVRFRCA9IDB4NiwKICAgIE9GUElUX1NUQVRfVFJJR0dFUiA9IDB4NywKICAgIE9GUElUX0VYUEVSSU1FTlRFUiA9IDB4ZmZmZiwKfTsKCi8qIHN0YXQgdHJpZ2dlciBpbnN0cnVjdGlvbiBmbGFncyAqLwovKiBub3QgaW4gMS40ICovCmVudW0gb2ZwX3N0YXRfdHJpZ2dlcl9mbGFncyh3aXJlX3R5cGU9dWludDMyX3QsIGJpdG1hc2s9VHJ1ZSkgewogICAgT0ZQU1RGX1BFUklPRElDID0gMHgxLAogICAgT0ZQU1RGX09OTFlfRklSU1QgPSAweDIsCn07CgovKiBJbnN0cnVjdGlvbiBIZWFkZXIgKi8Kc3RydWN0IG9mX2luc3RydWN0aW9uIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKICAgIHVpbnQxNl90IGxlbjsKfTsKCi8qIEluc3RydWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQSVRfR09UT19UQUJMRSAqLwpzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fZ290b190YWJsZSA6IG9mX2luc3RydWN0aW9uIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMTsKICAgIHVpbnQxNl90IGxlbjsKICAgIHVpbnQ4X3QgdGFibGVfaWQ7CiAgICBwYWQoMyk7Cn07CgovKiBJbnN0cnVjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUElUX1dSSVRFX01FVEFEQVRBICovCnN0cnVjdCBvZl9pbnN0cnVjdGlvbl93cml0ZV9tZXRhZGF0YSA6IG9mX2luc3RydWN0aW9uIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMjsKICAgIHVpbnQxNl90IGxlbjsKICAgIHBhZCg0KTsKICAgIHVpbnQ2NF90IG1ldGFkYXRhOwogICAgdWludDY0X3QgbWV0YWRhdGFfbWFzazsKfTsKCi8qIEluc3RydWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQSVRfV1JJVEUgKi8Kc3RydWN0IG9mX2luc3RydWN0aW9uX3dyaXRlX2FjdGlvbnMgOiBvZl9pbnN0cnVjdGlvbiB7CiAgICB1aW50MTZfdCB0eXBlID09IDM7CiAgICB1aW50MTZfdCBsZW47CiAgICBwYWQoNCk7CiAgICBsaXN0KG9mX2FjdGlvbl90KSBhY3Rpb25zOwp9OwoKLyogSW5zdHJ1Y3Rpb24gc3RydWN0dXJlIGZvciBPRlBJVF9BUFBMWSAqLwpzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fYXBwbHlfYWN0aW9ucyA6IG9mX2luc3RydWN0aW9uIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gNDsKICAgIHVpbnQxNl90IGxlbjsKICAgIHBhZCg0KTsKICAgIGxpc3Qob2ZfYWN0aW9uX3QpIGFjdGlvbnM7Cn07CgovKiBJbnN0cnVjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUElUX0NMRUFSICovCnN0cnVjdCBvZl9pbnN0cnVjdGlvbl9jbGVhcl9hY3Rpb25zIDogb2ZfaW5zdHJ1Y3Rpb24gewogICAgdWludDE2X3QgdHlwZSA9PSA1OwogICAgdWludDE2X3QgbGVuOwogICAgcGFkKDQpOwp9OwoKLyogSW5zdHJ1Y3Rpb24gc3RydWN0dXJlIGZvciBPRlBJVF9TVEFUX1RSSUdHRVIgKi8KLyogbm90IGluIDEuNCAqLwpzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fc3RhdF90cmlnZ2VyIDogb2ZfaW5zdHJ1Y3Rpb24gewogICAgdWludDE2X3QgdHlwZSA9PSA3OwogICAgdWludDE2X3QgbGVuOwogICAgZW51bSBvZnBfc3RhdF90cmlnZ2VyX2ZsYWdzIGZsYWdzOwogICAgbGlzdChvZl9veHNfdCkgdGhyZXNob2xkczsKfTsKCi8qIEluc3RydWN0aW9uIHN0cnVjdHVyZSBmb3IgZXhwZXJpbWVudGFsIGluc3RydWN0aW9ucyAqLwpzdHJ1Y3Qgb2ZfaW5zdHJ1Y3Rpb25fZXhwZXJpbWVudGVyIDogb2ZfaW5zdHJ1Y3Rpb24gewogICAgdWludDE2X3QgdHlwZSA9PSA2NTUzNTsKICAgIHVpbnQxNl90IGxlbjsKICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OwogICAgb2Zfb2N0ZXRzX3QgZGF0YTsKfTsKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBQ1RJT04gU1RSVUNUVVJFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLyogYWN0aW9uIHR5cGVzICovCmVudW0gb2ZwX2FjdGlvbl90eXBlKHdpcmVfdHlwZT11aW50MTZfdCkgewogICAgT0ZQQVRfT1VUUFVUID0gMCwKICAgIE9GUEFUX0NPUFlfVFRMX09VVCA9IDB4YiwKICAgIE9GUEFUX0NPUFlfVFRMX0lOID0gMHhjLAogICAgT0ZQQVRfU0VUX01QTFNfVFRMID0gMHhmLAogICAgT0ZQQVRfREVDX01QTFNfVFRMID0gMHgxMCwKICAgIE9GUEFUX1BVU0hfVkxBTiA9IDB4MTEsCiAgICBPRlBBVF9QT1BfVkxBTiA9IDB4MTIsCiAgICBPRlBBVF9QVVNIX01QTFMgPSAweDEzLAogICAgT0ZQQVRfUE9QX01QTFMgPSAweDE0LAogICAgT0ZQQVRfU0VUX1FVRVVFID0gMHgxNSwKICAgIE9GUEFUX0dST1VQID0gMHgxNiwKICAgIE9GUEFUX1NFVF9OV19UVEwgPSAweDE3LAogICAgT0ZQQVRfREVDX05XX1RUTCA9IDB4MTgsCiAgICBPRlBBVF9TRVRfRklFTEQgPSAweDE5LAogICAgT0ZQQVRfUFVTSF9QQkIgPSAweDFhLAogICAgT0ZQQVRfUE9QX1BCQiA9IDB4MWIsCiAgICBPRlBBVF9DT1BZX0ZJRUxEID0gMHgxYywKICAgIE9GUEFUX01FVEVSID0gMHgxZCwKICAgIE9GUEFUX0VYUEVSSU1FTlRFUiA9IDB4ZmZmZiwKfTsKCi8qIEFjdGlvbiBoZWFkZXIgdGhhdCBpcyBjb21tb24gdG8gYWxsIGFjdGlvbnMgKi8Kc3RydWN0IG9mX2FjdGlvbiB7CiAgICB1aW50MTZfdCB0eXBlID09ID87CiAgICB1aW50MTZfdCBsZW47Cn07CgovKiBBY3Rpb24gc3RydWN0dXJlIGZvciBPRlBBVF9PVVRQVVQgKi8Kc3RydWN0IG9mX2FjdGlvbl9vdXRwdXQgOiBvZl9hY3Rpb24gewogICAgdWludDE2X3QgdHlwZSA9PSAwOwogICAgdWludDE2X3QgbGVuOwogICAgb2ZfcG9ydF9ub190IHBvcnQ7CiAgICB1aW50MTZfdCBtYXhfbGVuOwogICAgcGFkKDYpOwp9OwoKLypUaGUgbWF4X2xlbiBpbmRpY2F0ZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGRhdGEgZnJvbSBhIHBhY2tldCB0aGF0IHNob3VsZCBiZSBzZW50IHdoZW4gdGhlIHBvcnQgaXMgT0ZQUF9DT05UUk9MTEVSKi8KZW51bSBvZnBfY29udHJvbGxlcl9tYXhfbGVuKHdpcmVfdHlwZT11aW50MTZfdCwgY29tcGxldGU9RmFsc2UpIHsKICAgIE9GUENNTF9NQVggPSAweGZmZTUsCiAgICBPRlBDTUxfTk9fQlVGRkVSID0gMHhmZmZmLAp9OwoKLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfR1JPVVAuICovCnN0cnVjdCBvZl9hY3Rpb25fZ3JvdXAgOiBvZl9hY3Rpb24gewogICAgdWludDE2X3QgdHlwZSA9PSAyMjsKICAgIHVpbnQxNl90IGxlbjsKICAgIHVpbnQzMl90IGdyb3VwX2lkOwp9OwoKLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfU0VUX1FVRVVFLiAqLwpzdHJ1Y3Qgb2ZfYWN0aW9uX3NldF9xdWV1ZSA6IG9mX2FjdGlvbiB7CiAgICB1aW50MTZfdCB0eXBlID09IDIxOwogICAgdWludDE2X3QgbGVuOwogICAgdWludDMyX3QgcXVldWVfaWQ7Cn07CgovKiBBY3Rpb24gc3RydWN0dXJlIGZvciBPRlBBVF9NRVRFUiAqLwpzdHJ1Y3Qgb2ZfYWN0aW9uX21ldGVyIDogb2ZfYWN0aW9uIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMjk7CiAgICB1aW50MTZfdCBsZW47CiAgICB1aW50MzJfdCBtZXRlcl9pZDsKfTsKCi8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX1NFVF9NUExTX1RUTC4gKi8Kc3RydWN0IG9mX2FjdGlvbl9zZXRfbXBsc190dGwgOiBvZl9hY3Rpb24gewogICAgdWludDE2X3QgdHlwZSA9PSAxNTsKICAgIHVpbnQxNl90IGxlbjsKICAgIHVpbnQ4X3QgbXBsc190dGw7CiAgICBwYWQoMyk7Cn07CgovKiBBY3Rpb24gc3RydWN0dXJlIGZvciBPRlBBVF9DT1BZX1RUTF9PVVQgKi8Kc3RydWN0IG9mX2FjdGlvbl9jb3B5X3R0bF9vdXQgOiBvZl9hY3Rpb24gewogICAgdWludDE2X3QgdHlwZSA9PSAxMTsKICAgIHVpbnQxNl90IGxlbjsKICAgIHBhZCg0KTsKfTsKCi8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX0NPUFlfVFRMX0lOICovCnN0cnVjdCBvZl9hY3Rpb25fY29weV90dGxfaW4gOiBvZl9hY3Rpb24gewogICAgdWludDE2X3QgdHlwZSA9PSAxMjsKICAgIHVpbnQxNl90IGxlbjsKICAgIHBhZCg0KTsKfTsKCi8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX0RFQ19NUExTX1RUTCAqLwpzdHJ1Y3Qgb2ZfYWN0aW9uX2RlY19tcGxzX3R0bCA6IG9mX2FjdGlvbiB7CiAgICB1aW50MTZfdCB0eXBlID09IDE2OwogICAgdWludDE2X3QgbGVuOwogICAgcGFkKDQpOwp9OwoKLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfREVDX05XX1RUTCAqLwpzdHJ1Y3Qgb2ZfYWN0aW9uX2RlY19ud190dGwgOiBvZl9hY3Rpb24gewogICAgdWludDE2X3QgdHlwZSA9PSAyNDsKICAgIHVpbnQxNl90IGxlbjsKICAgIHBhZCg0KTsKfTsKCi8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX1BPUF9WTEFOICovCnN0cnVjdCBvZl9hY3Rpb25fcG9wX3ZsYW4gOiBvZl9hY3Rpb24gewogICAgdWludDE2X3QgdHlwZSA9PSAxODsKICAgIHVpbnQxNl90IGxlbjsKICAgIHBhZCg0KTsKfTsKCi8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX1BPUF9QQkIgKi8Kc3RydWN0IG9mX2FjdGlvbl9wb3BfcGJiIDogb2ZfYWN0aW9uIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMjc7CiAgICB1aW50MTZfdCBsZW47CiAgICBwYWQoNCk7Cn07CgovKiBBY3Rpb24gc3RydWN0dXJlIGZvciBPRlBBVF9TRVRfTldfVFRMLiAqLwpzdHJ1Y3Qgb2ZfYWN0aW9uX3NldF9ud190dGwgOiBvZl9hY3Rpb24gewogICAgdWludDE2X3QgdHlwZSA9PSAyMzsKICAgIHVpbnQxNl90IGxlbjsKICAgIHVpbnQ4X3QgbndfdHRsOwogICAgcGFkKDMpOwp9OwoKLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfUFVTSF9WTEFOICovCnN0cnVjdCBvZl9hY3Rpb25fcHVzaF92bGFuIDogb2ZfYWN0aW9uIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMTc7CiAgICB1aW50MTZfdCBsZW47CiAgICB1aW50MTZfdCBldGhlcnR5cGU7CiAgICBwYWQoMik7Cn07CgovKiBBY3Rpb24gc3RydWN0dXJlIGZvciBPRlBBVF9QVVNIX01QTFMgKi8Kc3RydWN0IG9mX2FjdGlvbl9wdXNoX21wbHMgOiBvZl9hY3Rpb24gewogICAgdWludDE2X3QgdHlwZSA9PSAxOTsKICAgIHVpbnQxNl90IGxlbjsKICAgIHVpbnQxNl90IGV0aGVydHlwZTsKICAgIHBhZCgyKTsKfTsKCi8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX1BVU0hfUEJCICovCnN0cnVjdCBvZl9hY3Rpb25fcHVzaF9wYmIgOiBvZl9hY3Rpb24gewogICAgdWludDE2X3QgdHlwZSA9PSAyNjsKICAgIHVpbnQxNl90IGxlbjsKICAgIHVpbnQxNl90IGV0aGVydHlwZTsKICAgIHBhZCgyKTsKfTsKCi8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX1BPUF9NUExTICovCnN0cnVjdCBvZl9hY3Rpb25fcG9wX21wbHMgOiBvZl9hY3Rpb24gewogICAgdWludDE2X3QgdHlwZSA9PSAyMDsKICAgIHVpbnQxNl90IGxlbjsKICAgIHVpbnQxNl90IGV0aGVydHlwZTsKICAgIHBhZCgyKTsKfTsKCi8qIEFjdGlvbiBzdHJ1Y3R1cmUgZm9yIE9GUEFUX1NFVF9GSUVMRCAqLwpzdHJ1Y3Qgb2ZfYWN0aW9uX3NldF9maWVsZChhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249VHJ1ZSkgOiBvZl9hY3Rpb24gewogICAgdWludDE2X3QgdHlwZSA9PSAyNTsKICAgIHVpbnQxNl90IGxlbjsKICAgIG9mX294bV90IGZpZWxkOwp9OwoKLyogQWN0aW9uIHN0cnVjdHVyZSBmb3IgT0ZQQVRfQ09QWV9GSUVMRCAqLwovKiBub3QgaW4gMS40ICovCnN0cnVjdCBvZnBfYWN0aW9uX2NvcHlfZmllbGQgewogICAgdWludDE2X3QgdHlwZSA9PSAyODsKICAgIHVpbnQxNl90IGxlbjsKICAgIHVpbnQxNl90IG5fYml0czsKICAgIHVpbnQxNl90IHNyY19vZmZzZXQ7CiAgICB1aW50MTZfdCBkc3Rfb2Zmc2V0OwogICAgcGFkKDIpOwogICAgbGlzdChvZl9veG1fdCkgb3htX2lkczsKfTsKCi8qIEFjdGlvbiBoZWFkZXIgZm9yIE9GUEFUX0VYUEVSSU1FTlRFUiAqLwpzdHJ1Y3Qgb2ZfYWN0aW9uX2V4cGVyaW1lbnRlcihhbGlnbj04LCBsZW5ndGhfaW5jbHVkZXNfYWxpZ249VHJ1ZSk6IG9mX2FjdGlvbiB7CiAgICB1aW50MTZfdCB0eXBlID09IDY1NTM1OwogICAgdWludDE2X3QgbGVuOwogICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87Cn07CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENPTlRST0xMRVIgU1RBVFVTIFNUUlVDVFVSRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qIG5vdCBpbiAxLjQgKi8KCi8qIFdoeSBpcyB0aGUgY29udHJvbGxlciBzdGF0dXMgYmVpbmcgcmVwb3J0ZWQ/ICovCmVudW0gb2ZwX2NvbnRyb2xsZXJfc3RhdHVzX3JlYXNvbih3aXJlX3R5cGU9dWludDhfdCkgewogICAgT0ZQQ1NSX1JFUVVFU1QgPSAwLAogICAgT0ZQQ1NSX0NIQU5ORUxfU1RBVFVTID0gMSwKICAgIE9GUENTUl9ST0xFID0gMiwKICAgIE9GUENTUl9DT05UUk9MTEVSX0FEREVEID0gMywKICAgIE9GUENTUl9DT05UUk9MTEVSX1JFTU9WRUQgPSA0LAogICAgT0ZQQ1NSX1NIT1JUX0lEID0gNSwKICAgIE9GUENTUl9FWFBFUklNRU5URVIgPSA2LAp9OwoKLyogQ29udHJvbCBjaGFubmVsIHN0YXR1cy4gKi8KZW51bSBvZnBfY29udHJvbF9jaGFubmVsX3N0YXR1cyh3aXJlX3R5cGU9dWludDhfdCkgewogICAgT0ZQQ1RfU1RBVFVTX1VQID0gMCwKICAgIE9GUENUX1NUQVRVU19ET1dOID0gMSwKfTsKCi8qIENvbnRyb2xsZXIgc3RhdHVzIHByb3BlcnR5IHR5cGVzICovCmVudW0gb2ZwX2NvbnRyb2xsZXJfc3RhdHVzX3Byb3BfdHlwZSB7CiAgICBPRlBDU1BUX1VSSSA9IDAsCiAgICBPRlBDU1BUX0VYUEVSSU1FTlRFUiA9IDB4RkZGRiwKfTsKCi8qIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBDb250cm9sbGVyIFN0YXR1cyBQcm9wZXJ0aWVzICovCnN0cnVjdCBvZl9jb250cm9sbGVyX3N0YXR1c19wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKICAgIHVpbnQxNl90IGxlbmd0aDsKfTsKCnN0cnVjdCBvZl9jb250cm9sbGVyX3N0YXR1c19lbnRyeSB7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MTZfdCBzaG9ydF9pZDsKICAgIGVudW0gb2ZwX2NvbnRyb2xsZXJfcm9sZSByb2xlOwogICAgZW51bSBvZnBfY29udHJvbGxlcl9zdGF0dXNfcmVhc29uIHJlYXNvbjsKICAgIGVudW0gb2ZwX2NvbnRyb2xfY2hhbm5lbF9zdGF0dXMgY2hhbm5lbF9zdGF0dXM7CiAgICBwYWQoNik7CiAgICBsaXN0KG9mX2NvbnRyb2xsZXJfc3RhdHVzX3Byb3BfdCkgcHJvcGVydGllczsKfTsKCi8qIEJvZHkgb2YgT0ZQTVBfQ09OVFJPTExFUl9TVEFUVVMgcmVwbHkgbWVzc2FnZSBhbmQgYm9keSBvZiBhc3luYyBPRlBUX0NPTlRST0xMRVJfU1RBVFVTIG1lc3NhZ2UgKi8Kc3RydWN0IG9mX2NvbnRyb2xsZXJfc3RhdHVzIDogb2ZfaGVhZGVyIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAzNTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIG9mX2NvbnRyb2xsZXJfc3RhdHVzX2VudHJ5X3QgZW50cnk7Cn07CgovKiBDb25uZWN0aW9uIFVSSSBjb250cm9sbGVyIHN0YXR1cyBwcm9wZXJ0eSAqLwpzdHJ1Y3Qgb2ZwX2NvbnRyb2xsZXJfc3RhdHVzX3Byb3BfdXJpIDogb2ZfY29udHJvbGxlcl9zdGF0dXNfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDA7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICBvZl9jb250cm9sbGVyX3VyaV90IHVyaTsKfTsKCi8qIEV4cGVyaW1lbnRlciBjb250cm9sbGVyIHN0YXR1cyBwcm9wZXJ0eSAqLwpzdHJ1Y3Qgb2ZwX2NvbnRyb2xsZXJfc3RhdHVzX3Byb3BfZXhwZXJpbWVudGVyIDogb2ZfY29udHJvbGxlcl9zdGF0dXNfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OwogICAgdWludDMyX3QgZXhwX3R5cGU7Cn07CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNRVNTQUdFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCi8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGRhdGFwYXRoLiAqLwplbnVtIG9mcF9jYXBhYmlsaXRpZXMod2lyZV90eXBlPXVpbnQzMl90LCBiaXRtYXNrPVRydWUpIHsKICAgIE9GUENfRkxPV19TVEFUUyA9IDB4MSwKICAgIE9GUENfVEFCTEVfU1RBVFMgPSAweDIsCiAgICBPRlBDX1BPUlRfU1RBVFMgPSAweDQsCiAgICBPRlBDX0dST1VQX1NUQVRTID0gMHg4LAogICAgT0ZQQ19JUF9SRUFTTSA9IDB4MjAsCiAgICBPRlBDX1FVRVVFX1NUQVRTID0gMHg0MCwKICAgIE9GUENfUE9SVF9CTE9DS0VEID0gMHgxMDAsCiAgICBPRlBDX0JVTkRMRVMgPSAweDIwMCwKICAgIE9GUENfRkxPV19NT05JVE9SSU5HID0gMHg0MDAsCn07CgovKiBIYW5kbGluZyBvZiBJUCBmcmFnbWVudHMuICovCmVudW0gb2ZwX2NvbmZpZ19mbGFncyh3aXJlX3R5cGU9dWludDE2X3QsIGJpdG1hc2s9VHJ1ZSkgewogICAgT0ZQQ19GUkFHX05PUk1BTCA9IDAsCiAgICBPRlBDX0ZSQUdfRFJPUCA9IDEsCiAgICBPRlBDX0ZSQUdfUkVBU00gPSAyLAogICAgT0ZQQ19GUkFHX01BU0sgPSAzLAp9OwoKLyogVGFibGUgbnVtYmVyaW5nLiBUYWJsZXMgY2FuIHVzZSBhbnkgbnVtYmVyIHVwIHRvIE9GUFRfTUFYLiAqLwplbnVtIG9mcF90YWJsZSh3aXJlX3R5cGU9dWludDhfdCwgY29tcGxldGU9RmFsc2UpIHsKICAgIE9GUFRUX01BWCA9IDB4ZmUsCiAgICBPRlBUVF9BTEwgPSAweGZmLAp9OwoKCi8qIEZsYWdzIHRvIGNvbmZpZ3VyZSB0aGUgdGFibGUuICovCmVudW0gb2ZwX3RhYmxlX2NvbmZpZyh3aXJlX3R5cGU9dWludDMyX3QsIGJpdG1hc2s9VHJ1ZSkgewogICAgT0ZQVENfREVQUkVDQVRFRF9NQVNLID0gMHgzLAogICAgT0ZQVENfRVZJQ1RJT04gPSAweDQsCiAgICBPRlBUQ19WQUNBTkNZX0VWRU5UUyA9IDB4OCwKfTsKCi8qIEV2aWN0aW9uIGZsYWdzLiAqLwplbnVtIG9mcF90YWJsZV9tb2RfcHJvcF9ldmljdGlvbl9mbGFnKHdpcmVfdHlwZT11aW50MzJfdCwgYml0bWFzaz1UcnVlKSB7CiAgICBPRlBUTVBFRl9PVEhFUiA9IDB4MSwKICAgIE9GUFRNUEVGX0lNUE9SVEFOQ0UgPSAweDIsCiAgICBPRlBUTVBFRl9MSUZFVElNRSA9IDB4NCwKfTsKCi8qIGZsb3cgbW9kIGNvbW1hbmQgKi8KZW51bSBvZnBfZmxvd19tb2RfY29tbWFuZCh3aXJlX3R5cGU9dWludDhfdCkgewogICAgT0ZQRkNfQUREID0gMCwKICAgIE9GUEZDX01PRElGWSA9IDEsCiAgICBPRlBGQ19NT0RJRllfU1RSSUNUID0gMiwKICAgIE9GUEZDX0RFTEVURSA9IDMsCiAgICBPRlBGQ19ERUxFVEVfU1RSSUNUID0gNCwKfTsKCi8qIGZsb3cgbW9kIGZsYWdzICovCmVudW0gb2ZwX2Zsb3dfbW9kX2ZsYWdzKHdpcmVfdHlwZT11aW50MTZfdCwgYml0bWFzaz1UcnVlKSB7CiAgICBPRlBGRl9TRU5EX0ZMT1dfUkVNID0gMHgxLAogICAgT0ZQRkZfQ0hFQ0tfT1ZFUkxBUCA9IDB4MiwKICAgIE9GUEZGX1JFU0VUX0NPVU5UUyA9IDB4NCwKICAgIE9GUEZGX05PX1BLVF9DT1VOVFMgPSAweDgsCiAgICBPRlBGRl9OT19CWVRfQ09VTlRTID0gMHgxMCwKCiAgICAvKiBOb24tc3RhbmRhcmQsIGVuYWJsZWQgYnkgYW4gZXhwZXJpbWVudGVyIG1lc3NhZ2UgKi8KICAgIC8qIFNlZSB0aGUgYnNuX2Zsb3dfaWRsZSBpbnB1dCBmaWxlICovCiAgICBPRlBGRl9CU05fU0VORF9JRExFID0gMHg4MCwKfTsKCi8qIEdyb3VwIGNvbW1hbmRzICovCmVudW0gb2ZwX2dyb3VwX21vZF9jb21tYW5kKHdpcmVfdHlwZT11aW50MTZfdCkgewogICAgT0ZQR0NfQUREID0gMCwKICAgIE9GUEdDX01PRElGWSA9IDEsCiAgICBPRlBHQ19ERUxFVEUgPSAyLAogICAgT0ZQR0NfSU5TRVJUX0JVQ0tFVCA9IDMsCiAgICBPRlBHQ19SRU1PVkVfQlVDS0VUID0gNSwKfTsKCi8qIEdyb3VwIHR5cGVzICovCmVudW0gb2ZwX2dyb3VwX3R5cGUod2lyZV90eXBlPXVpbnQ4X3QpIHsKICAgIE9GUEdUX0FMTCA9IDAsCiAgICBPRlBHVF9TRUxFQ1QgPSAxLAogICAgT0ZQR1RfSU5ESVJFQ1QgPSAyLAogICAgT0ZQR1RfRkYgPSAzLAp9OwoKLyogR3JvdXAgbnVtYmVyaW5nLiBHcm91cHMgY2FuIHVzZSBhbnkgbnVtYmVyIHVwIHRvIE9GUEdfTUFYLiAqLwplbnVtIG9mcF9ncm91cCh3aXJlX3R5cGU9dWludDMyX3QsIGNvbXBsZXRlPUZhbHNlKSB7CiAgICBPRlBHX01BWCA9IDB4ZmZmZmZmMDAsCiAgICBPRlBHX0FMTCA9IDB4ZmZmZmZmZmMsCiAgICBPRlBHX0FOWSA9IDB4ZmZmZmZmZmYsCn07CgovKiBCdWNrZXQgSWQgY2FuIGJlIGFueSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIE9GUEdfQlVDS0VUX01BWCAqLwplbnVtIG9mcF9ncm91cF9idWNrZXQod2lyZV90eXBlPXVpbnQzMl90KSB7CiAgICBPRlBHX0JVQ0tFVF9NQVggPSAweGZmZmZmZjAwLAogICAgT0ZQR19CVUNLRVRfRklSU1QgPSAweGZmZmZmZmZkLAogICAgT0ZQR19CVUNLRVRfTEFTVCA9IDB4ZmZmZmZmZmUsCiAgICBPRlBHX0JVQ0tFVF9BTEwgPSAweGZmZmZmZmZmLAp9OwoKLyogR3JvdXAgYnVja2V0IHByb3BlcnR5IHR5cGVzLiAqLwplbnVtIG9mcF9ncm91cF9idWNrZXRfcHJvcF90eXBlIHsKICAgIE9GUEdCUFRfV0VJR0hUID0gMCwKICAgIE9GUEdCUFRfV0FUQ0hfUE9SVCA9IDEsCiAgICBPRlBHQlBUX1dBVENIX0dST1VQID0gMiwKICAgIE9GUEdCUFRfRVhQRVJJTUVOVEVSID0gMHhGRkZGLAp9OwoKLyogR3JvdXAgcHJvcGVydHkgdHlwZXMuICovCmVudW0gb2ZwX2dyb3VwX3Byb3BfdHlwZSB7CiAgICBPRlBHUFRfRVhQRVJJTUVOVEVSID0gMHhGRkZGLAp9OwoKLyogUG9ydCBtb2QgcHJvcGVydHkgdHlwZXMgKi8KZW51bSBvZnBfcG9ydF9tb2RfcHJvcF90eXBlIHsKICAgIE9GUFBNUFRfRVRIRVJORVQgPSAwLAogICAgT0ZQUE1QVF9PUFRJQ0FMID0gMSwKICAgIE9GUFBNUFRfRVhQRVJJTUVOVEVSID0gMHhGRkZGLAp9OwoKLyogTWV0ZXIgbnVtYmVyaW5nLiBGbG93IG1ldGVycyBjYW4gdXNlIGFueSBudW1iZXIgdXAgdG8gT0ZQTV9NQVguICovCmVudW0gb2ZwX21ldGVyKHdpcmVfdHlwZT11aW50MzJfdCwgY29tcGxldGU9RmFsc2UpIHsKICAgIE9GUE1fTUFYID0gMHhmZmZmMDAwMCwKICAgIE9GUE1fU0xPV1BBVEggPSAweGZmZmZmZmZkLAogICAgT0ZQTV9DT05UUk9MTEVSID0gMHhmZmZmZmZmZSwKICAgIE9GUE1fQUxMID0gMHhmZmZmZmZmZiwKfTsKCi8qIE1ldGVyIGNvbW1hbmRzICovCmVudW0gb2ZwX21ldGVyX21vZF9jb21tYW5kKHdpcmVfdHlwZT11aW50MTZfdCkgewogICAgT0ZQTUNfQUREID0gMCwKICAgIE9GUE1DX01PRElGWSA9IDEsCiAgICBPRlBNQ19ERUxFVEUgPSAyLAp9OwoKLyogTWV0ZXIgY29uZmlndXJhdGlvbiBmbGFncyAqLwplbnVtIG9mcF9tZXRlcl9mbGFncyh3aXJlX3R5cGU9dWludDE2X3QsIGJpdG1hc2s9VHJ1ZSkgewogICAgT0ZQTUZfS0JQUyA9IDB4MSwKICAgIE9GUE1GX1BLVFBTID0gMHgyLAogICAgT0ZQTUZfQlVSU1QgPSAweDQsCiAgICBPRlBNRl9TVEFUUyA9IDB4OCwKfTsKCi8qIE1ldGVyIGJhbmQgdHlwZXMgKi8KZW51bSBvZnBfbWV0ZXJfYmFuZF90eXBlKHdpcmVfdHlwZT11aW50MTZfdCkgewogICAgT0ZQTUJUX0RST1AgPSAweDEsCiAgICBPRlBNQlRfRFNDUF9SRU1BUksgPSAweDIsCiAgICBPRlBNQlRfRVhQRVJJTUVOVEVSID0gMHhmZmZmLAp9OwoKLyogTXVsdGlwYXJ0IHJlcXVlc3QgZmxhZ3MgKi8KZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyh3aXJlX3R5cGU9dWludDE2X3QsIGJpdG1hc2s9VHJ1ZSkgewogICAgT0ZQU0ZfUkVRX01PUkUgPSAweDEsCn07CgovKiBNdWx0aXBhcnQgcmVwbHkgZmxhZ3MgKi8KZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3Mod2lyZV90eXBlPXVpbnQxNl90LCBiaXRtYXNrPVRydWUpIHsKICAgIE9GUFNGX1JFUExZX01PUkUgPSAweDEsCn07CgovKiAKICogTXVsdGlwYXJ0IE1lc3NhZ2UgVHlwZXMgCiAqCiAqIE9GMS41IHJlbmFtZXMgdGhlIE9GUE1QL1NUIGZvcjoKICogZmxvdyAoMSkgLT4gZmxvd19kZXNjICgxKQogKiBhZ2dyZWdhdGUgKDIpIC0+IGFnZ3JlZ2F0ZV9zdGF0cyAoMikKICogdGFibGUgKDMpIC0+IHRhYmxlX3N0YXRzICgzKQogKiBncm91cCAoNikgLT4gZ3JvdXBfc3RhdHMgKDYpCiAqIG1ldGVyICg5KSAtPiBtZXRlcl9zdGF0cyAoOSkKICogbWV0ZXJfY29uZmlnICgxMCkgLT4gbWV0ZXJfZGVzYyAoMTApCiAqIAogKiBPRjEuNCByZW5hbWVkOgogKiBxdWV1ZSAoNSkgLT4gcXVldWVfc3RhdHMgKDUpCiAqIHdoaWNoIHdhcyByZXRhaW5lZCBhcyAicXVldWUiIGluIHN0YW5kYXJkLTEuNC4KICoKICogVXNpbmcgZGlmZmVyZW50IG5hbWVzIGZvciB0aGUgc2FtZSBtZXNzYWdlCiAqIGluIExveGkgY2F1c2VzIGR1cGxpY2F0ZSBlbnVtIGVudHJpZXMgdGhhdAogKiBtYXAgdG8gZXNzZW50aWFsbHkgdGhlIHNhbWUgdW5kZXJseWluZyBtZXNzYWdlLgogKiBGb3Igc2ltcGxpY2l5LCB3ZSBjYW4gcmV0YWluIHRoZSBvcmlnaW5hbCwgCiAqIE9GMS4zLSwgbmFtaW5nIGNvbnZlbnRpb24gdG8gcmVkdWNlIGNvbXBsZXhpdHkuCiAqIFRoaXMgaXMgd2h5IE9GMS40KyBvZnBfc3RhdHNfdHlwZSBlbnVtcyBmcm9tIAogKiBPRjEuMy0gcmVtYWluIGFzIE9GUFNUXyogYW5kIGRvIG5vdCBhcHBlYXIgYXMKICogT0ZQTVBfKi4KICoKICogVXNpbmcgdGhlIF9TVEFUUyBpcyBjZXJ0YWlubHkgbW9yZSBleHBsaWNpdDsgCiAqIGhvd2V2ZXIsIHRoYXQgd291bGQgcGVyaGFwcyBuZWNlc3NpdGF0ZSBjaGFuZ2luZwogKiBPRjEuMy0gT0ZQTVAvU1QgbmFtZXMsIHdoaWNoIHdvdWxkIGJyZWFrIGV4aXN0aW5nCiAqIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSBPRjEuMy0gT0ZQTVAvU1QgbmFtZXMuCiAqLwplbnVtIG9mcF9zdGF0c190eXBlKHdpcmVfdHlwZT11aW50MTZfdCkgewogICAgT0ZQU1RfREVTQyA9IDAsCiAgICBPRlBTVF9GTE9XID0gMSwgLyogb21pdCBfZGVzYyAqLwogICAgT0ZQU1RfQUdHUkVHQVRFID0gMiwgLyogb21pdCBfc3RhdHMgKi8KICAgIE9GUFNUX1RBQkxFID0gMywgLyogb21pdCBfc3RhdHMgKi8KICAgIE9GUFNUX1BPUlQgPSA0LCAvKiBvbWl0IF9zdGF0czsgaGlzdG9yaWNhbGx5IG9taXR0ZWQgKi8KICAgIE9GUFNUX1FVRVVFID0gNSwgLyogb21pdCBfc3RhdHMgKi8KICAgIE9GUFNUX0dST1VQID0gNiwgLyogb21pdCBfc3RhdHMgKi8KICAgIE9GUFNUX0dST1VQX0RFU0MgPSA3LAogICAgT0ZQU1RfR1JPVVBfRkVBVFVSRVMgPSA4LAogICAgT0ZQU1RfTUVURVIgPSA5LCAvKiBvbWl0X3N0YXRzICovCiAgICBPRlBTVF9NRVRFUl9DT05GSUcgPSAxMCwgLyogcmV0YWluIE9GUFNUXyBwcmVmaXg7IHJldGFpbiBfY29uZmlnICovCiAgICBPRlBTVF9NRVRFUl9GRUFUVVJFUyA9IDExLAogICAgT0ZQU1RfVEFCTEVfRkVBVFVSRVMgPSAxMiwKICAgIE9GUFNUX1BPUlRfREVTQyA9IDEzLAogICAgT0ZQTVBfVEFCTEVfREVTQyA9IDE0LAogICAgT0ZQTVBfUVVFVUVfREVTQyA9IDE1LAogICAgT0ZQTVBfRkxPV19NT05JVE9SID0gMTYsCiAgICBPRlBNUF9GTE9XX0xJR0hUV0VJR0hUID0gMTcsIC8qIG9taXQgX3N0YXRzOyB1c2UgX2xpZ2h0d2VpZ2h0IHRvIGltcGx5IG5vIGRlc2MgaW5jbHVkZWQgKi8KICAgIE9GUE1QX0NPTlRST0xMRVJfU1RBVFVTID0gMTgsCiAgICBPRlBNUF9CVU5ETEVfRkVBVFVSRVMgPSAxOSwKICAgIE9GUFNUX0VYUEVSSU1FTlRFUiA9IDB4ZmZmZiwKfTsKCi8qIFJlYXNvbiBmb3IgZ2VuZXJhdGluZyBmbG93IHN0YXRzLiAqLwplbnVtIG9mcF9mbG93X3N0YXRzX3JlYXNvbih3aXJlX3R5cGU9dWludDhfdCkgewogICAgT0ZQRlNSX1NUQVRTX1JFUVVFU1QgPSAwLAogICAgT0ZQRlNSX1NUQVRfVFJJR0dFUiA9IDEsCn07CgovKiBQb3J0IHN0YXRzIHByb3BlcnR5IHR5cGVzLiAgKi8KZW51bSBvZnBfcG9ydF9zdGF0c19wcm9wX3R5cGUod2lyZV90eXBlPXVpbnQxNl90KSB7CiAgICBPRlBQU1BUX0VUSEVSTkVUICAgICAgICAgID0gMCwgICAgICAvKiBFdGhlcm5ldCBwcm9wZXJ0eS4gKi8KICAgIE9GUFBTUFRfT1BUSUNBTCAgICAgICAgICAgPSAxLCAgICAgIC8qIE9wdGljYWwgcHJvcGVydHkuICovCiAgICBPRlBQU1BUX0VYUEVSSU1FTlRFUiAgICAgID0gMHhGRkZGLCAvKiBFeHBlcmltZW50ZXIgcHJvcGVydHkuICovCn07CgovKiBGbGFncyBpcyBvbmUgb2YgT0ZQT1NGXyBiZWxvdyAqLwplbnVtIG9mcF9wb3J0X3N0YXRzX29wdGljYWxfZmxhZ3Mod2lyZV90eXBlPXVpbnQzMl90LCBiaXRtYXNrPVRydWUpIHsKICAgIE9GUE9TRl9SWF9UVU5FID0gMHgxLAogICAgT0ZQT1NGX1RYX1RVTkUgPSAweDIsCiAgICBPRlBPU0ZfVFhfUFdSID0gMHg0LAogICAgT0ZQT1NGX1JYX1BXUiA9IDB4MTAsCiAgICBPRlBPU0ZfVFhfQklBUyA9IDB4MjAsCiAgICBPRlBPU0ZfVFhfVEVNUCA9IDB4NDAsCn07CgovKiBxdWV1ZSBzdGF0aXN0aWNzIHByb3BlcnR5IHR5cGVzICovCmVudW0gb2ZwX3F1ZXVlX3N0YXRzX3Byb3BfdHlwZSB7CiAgICBPRlBRU1BUX0VYUEVSSU1FTlRFUiA9IDB4ZmZmZgp9OwoKLyogcXVldWUgZGVzY3JpcHRpb24gcHJvcGVydHkgdHlwZXMgKi8KZW51bSBvZnBfcXVldWVfZGVzY19wcm9wX3R5cGUgewogICAgT0ZQUURQVF9NSU5fUkFURSA9IDEsCiAgICBPRlBRRFBUX01BWF9SQVRFID0gMiwKICAgIE9GUFFEUFRfRVhQRVJJTUVOVEVSID0gMHhmZmZmLAp9OwoKLyogR3JvdXAgY29uZmlndXJhdGlvbiBmbGFncyAqLwplbnVtIG9mcF9ncm91cF9jYXBhYmlsaXRpZXMod2lyZV90eXBlPXVpbnQzMl90LCBiaXRtYXNrPVRydWUpIHsKICAgIE9GUEdGQ19TRUxFQ1RfV0VJR0hUID0gMHgxLAogICAgT0ZQR0ZDX1NFTEVDVF9MSVZFTkVTUyA9IDB4MiwKICAgIE9GUEdGQ19DSEFJTklORyA9IDB4NCwKICAgIE9GUEdGQ19DSEFJTklOR19DSEVDS1MgPSAweDgsCn07CgovKiBNZXRlciBmZWF0dXJlIGZsYWdzICovCmVudW0gb2ZwX21ldGVyX2ZlYXR1cmVfZmxhZ3Mod2lyZV90eXBlPXVpbnQzMl90LCBiaXRtYXNrPVRydWUpIHsKICAgIE9GUE1GRl9BQ1RJT05fU0VUID0gMHgxLAogICAgT0ZQTUZGX0FOWV9QT1NJVElPTiA9IDB4MiwKICAgIE9GUE1GRl9NVUxUSV9MSVNUID0gMHg0LAp9OwoKLyogVGFibGUgRmVhdHVyZXMgcmVxdWVzdCBjb21tYW5kcyAqLwplbnVtIG9mcF90YWJsZV9mZWF0dXJlc19jb21tYW5kKHdpcmVfdHlwZT11aW50OF90KSB7CiAgICBPRlBURkNfUkVQTEFDRSA9IDAsCiAgICBPRlBURkNfTU9ESUZZID0gMSwKICAgIE9GUFRGQ19FTkFCTEUgPSAyLAogICAgT0ZQVEZDX0RJU0FCTEUgPSAzLAp9OwoKLyogRmxhZ3Mgb2YgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSB0YWJsZS4gKi8KZW51bSBvZnBfdGFibGVfZmVhdHVyZV9mbGFnICh3aXJlX3R5cGU9dWludDMyX3QsIGJpdG1hc2s9VHJ1ZSkgewogICAgT0ZQVEZGX0lOR1JFU1NfVEFCTEUgPSAweDEsCiAgICBPRlBURkZfRUdSRVNTX1RBQkxFID0gMHgyLAogICAgT0ZQVEZGX0ZJUlNUX0VHUkVTUyA9IDB4MTAsCn07CgovKiBUYWJsZSBGZWF0dXJlIHByb3BlcnR5IHR5cGVzLiAqLwplbnVtIG9mcF90YWJsZV9mZWF0dXJlX3Byb3BfdHlwZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKICAgIE9GUFRGUFRfSU5TVFJVQ1RJT05TID0gMCwKICAgIE9GUFRGUFRfSU5TVFJVQ1RJT05TX01JU1MgPSAxLAogICAgT0ZQVEZQVF9ORVhUX1RBQkxFUyA9IDIsCiAgICBPRlBURlBUX05FWFRfVEFCTEVTX01JU1MgPSAzLAogICAgT0ZQVEZQVF9XUklURV9BQ1RJT05TID0gNCwKICAgIE9GUFRGUFRfV1JJVEVfQUNUSU9OU19NSVNTID0gNSwKICAgIE9GUFRGUFRfQVBQTFlfQUNUSU9OUyA9IDYsCiAgICBPRlBURlBUX0FQUExZX0FDVElPTlNfTUlTUyA9IDcsCiAgICBPRlBURlBUX01BVENIID0gOCwKICAgIE9GUFRGUFRfV0lMRENBUkRTID0gMHhhLAogICAgT0ZQVEZQVF9XUklURV9TRVRGSUVMRCA9IDB4YywKICAgIE9GUFRGUFRfV1JJVEVfU0VURklFTERfTUlTUyA9IDB4ZCwKICAgIE9GUFRGUFRfQVBQTFlfU0VURklFTEQgPSAweGUsCiAgICBPRlBURlBUX0FQUExZX1NFVEZJRUxEX01JU1MgPSAweGYsCiAgICBPRlBURlBUX1RBQkxFX1NZTkNfRlJPTSA9IDB4MTAsCiAgICBPRlBURlBUX1dSSVRFX0NPUFlGSUVMRCA9IDE4LAogICAgT0ZQVEZQVF9XUklURV9DT1BZRklFTERfTUlTUyA9IDE5LAogICAgT0ZQVEZQVF9BUFBMWV9DT1BZRklFTEQgPSAyMCwKICAgIE9GUFRGUFRfQVBQTFlfQ09QWUZJRUxEX01JU1MgPSAyMSwKICAgIE9GUFRGUFRfUEFDS0VUX1RZUEVTID0gMjIsCiAgICBPRlBURlBUX0VYUEVSSU1FTlRFUiA9IDB4ZmZmZSwKICAgIE9GUFRGUFRfRVhQRVJJTUVOVEVSX01JU1MgPSAweGZmZmYsCn07CgovKiBUYWJsZSBNb2QgcHJvcGVydHkgdHlwZXMuKi8KZW51bSBvZnBfdGFibGVfbW9kX3Byb3BfdHlwZSB7CiAgICBPRlBUTVBUX0VWSUNUSU9OID0gMHgyLAogICAgT0ZQVE1QVF9WQUNBTkNZID0gMHgzLAogICAgT0ZQVE1QVF9FWFBFUklNRU5URVIgPSAweEZGRkYsCn07CgoKLyogY29udHJvbGxlciByb2xlcyAqLwplbnVtIG9mcF9jb250cm9sbGVyX3JvbGUod2lyZV90eXBlPXVpbnQzMl90KSB7CiAgICBPRlBDUl9ST0xFX05PQ0hBTkdFID0gMCwKICAgIE9GUENSX1JPTEVfRVFVQUwgPSAxLAogICAgT0ZQQ1JfUk9MRV9NQVNURVIgPSAyLAogICAgT0ZQQ1JfUk9MRV9TTEFWRSA9IDMsCn07CgovKiBCdW5kbGUgY29udHJvbCBtZXNzYWdlIHR5cGVzICovCmVudW0gb2ZwX2J1bmRsZV9jdHJsX3R5cGUod2lyZV90eXBlPXVpbnQxNl90KSB7CiAgICBPRlBCQ1RfT1BFTl9SRVFVRVNUID0gMCwKICAgIE9GUEJDVF9PUEVOX1JFUExZID0gMSwKICAgIE9GUEJDVF9DTE9TRV9SRVFVRVNUID0gMiwKICAgIE9GUEJDVF9DTE9TRV9SRVBMWSA9IDMsCiAgICBPRlBCQ1RfQ09NTUlUX1JFUVVFU1QgPSA0LAogICAgT0ZQQkNUX0NPTU1JVF9SRVBMWSA9IDUsCiAgICBPRlBCQ1RfRElTQ0FSRF9SRVFVRVNUID0gNiwKICAgIE9GUEJDVF9ESVNDQVJEX1JFUExZID0gNywKfTsKCi8qIEJ1bmRsZSBjb25maWd1cmF0aW9uIGZsYWdzLiAqLwplbnVtIG9mcF9idW5kbGVfZmxhZ3Mod2lyZV90eXBlPXVpbnQxNl90LCBiaXRtYXNrPVRydWUpIHsKICAgIE9GUEJGX0FUT01JQyA9IDEsCiAgICBPRlBCRl9PUkRFUkVEID0gMiwKICAgIE9GUEJGX1RJTUUgPSA0LAp9OwoKLyogQnVuZGxlIGZlYXR1cmVzIHByb3BlcnR5IHR5cGVzLiAqLwplbnVtIG9mcF9idW5kbGVfZmVhdHVyZXNfcHJvcF90eXBlIHsKICAgIE9GUFRNUEJGX1RJTUVfQ0FQQUJJTElUWSA9IDB4MSwKICAgIE9GUFRNUEJGX0VYUEVSSU1FTlRFUiA9IDB4RkZGRiwKfTsKCgovKiBCdW5kbGUgcHJvcGVydHkgdHlwZXMuICovCmVudW0gb2ZwX2J1bmRsZV9wcm9wX3R5cGUgewogICAgT0ZQQlBUX1RJTUUgPSAxLAogICAgT0ZQQlBUX0VYUEVSSU1FTlRFUiA9IDB4RkZGRiwKfTsKCgovKiBBc3luYyBDb25maWcgcHJvcGVydHkgdHlwZXMuKi8KZW51bSBvZnBfYXN5bmNfY29uZmlnX3Byb3BfdHlwZSB7CiAgICBPRlBBQ1BUX1BBQ0tFVF9JTl9TTEFWRSA9IDAsCiAgICBPRlBBQ1BUX1BBQ0tFVF9JTl9NQVNURVIgPSAxLAogICAgT0ZQQUNQVF9QT1JUX1NUQVRVU19TTEFWRSA9IDIsCiAgICBPRlBBQ1BUX1BPUlRfU1RBVFVTX01BU1RFUiA9IDMsCiAgICBPRlBBQ1BUX0ZMT1dfUkVNT1ZFRF9TTEFWRSA9IDQsCiAgICBPRlBBQ1BUX0ZMT1dfUkVNT1ZFRF9NQVNURVIgPSA1LAogICAgT0ZQQUNQVF9ST0xFX1NUQVRVU19TTEFWRSA9IDYsCiAgICBPRlBBQ1BUX1JPTEVfU1RBVFVTX01BU1RFUiA9IDcsCiAgICBPRlBBQ1BUX1RBQkxFX1NUQVRVU19TTEFWRSA9IDgsCiAgICBPRlBBQ1BUX1RBQkxFX1NUQVRVU19NQVNURVIgPSA5LAogICAgT0ZQQUNQVF9SRVFVRVNURk9SV0FSRF9TTEFWRSA9IDEwLAogICAgT0ZQQUNQVF9SRVFVRVNURk9SV0FSRF9NQVNURVIgPSAxMSwKICAgIE9GUEFDUFRfRkxPV19TVEFUU19TTEFWRSA9IDEyLAogICAgT0ZQQUNQVF9GTE9XX1NUQVRTX01BU1RFUiA9IDEzLAogICAgT0ZQQUNQVF9DT05UX1NUQVRVU19TTEFWRSA9IDE0LAogICAgT0ZQQUNQVF9DT05UX1NUQVRVU19NQVNURVIgPSAxNSwKICAgIE9GUEFDUFRfRVhQRVJJTUVOVEVSX1NMQVZFID0gMHhGRkZFLAogICAgT0ZQQUNQVF9FWFBFUklNRU5URVJfTUFTVEVSID0gMHhGRkZGLAp9OwoKLyogV2h5IGlzIHRoaXMgcGFja2V0IGJlaW5nIHNlbnQgdG8gdGhlIGNvbnRyb2xsZXI/ICovCmVudW0gb2ZwX3BhY2tldF9pbl9yZWFzb24od2lyZV90eXBlPXVpbnQ4X3QpIHsKICAgIE9GUFJfTk9fTUFUQ0ggPSAwLAogICAgT0ZQUl9BQ1RJT04gPSAxLAogICAgT0ZQUl9JTlZBTElEX1RUTCA9IDIsCiAgICBPRlBSX0FDVElPTl9TRVQgPSAzLAogICAgT0ZQUl9HUk9VUCA9IDQsCiAgICBPRlBSX1BBQ0tFVF9PVVQgPSA1LAoKICAgIC8vIG5vbi1zdGFuZGFyZCBCU04gZXh0ZW5zaW9ucy4gT0YgZG9lcyBub3QgaGF2ZSBhIHN0YW5kYXJkLWNvbmZvcm1hbnQKICAgIC8vIHdheSB0byBleHRlbmQgdGhlIHNldCBvZiBwYWNrZXRfaW4gcmVhc29ucwogICAgT0ZQUl9CU05fTkVXX0hPU1QgPSAxMjgsCiAgICBPRlBSX0JTTl9TVEFUSU9OX01PVkUgPSAxMjksCiAgICBPRlBSX0JTTl9CQURfVkxBTiA9IDEzMCwKICAgIE9GUFJfQlNOX0RFU1RJTkFUSU9OX0xPT0tVUF9GQUlMVVJFID0gMTMxLAogICAgT0ZQUl9CU05fTk9fUk9VVEUgPSAxMzIsCiAgICBPRlBSX0JTTl9JQ01QX0VDSE9fUkVRVUVTVCA9IDEzMywKICAgIE9GUFJfQlNOX0RFU1RfTkVUV09SS19VTlJFQUNIQUJMRSA9IDEzNCwKICAgIE9GUFJfQlNOX0RFU1RfSE9TVF9VTlJFQUNIQUJMRSA9IDEzNSwKICAgIE9GUFJfQlNOX0RFU1RfUE9SVF9VTlJFQUNIQUJMRSA9IDEzNiwKICAgIE9GUFJfQlNOX0ZSQUdNRU5UQVRJT05fUkVRVUlSRUQgPSAxMzcsCiAgICBPRlBSX0JTTl9BUlAgPSAxMzksCiAgICBPRlBSX0JTTl9ESENQID0gMTQwLAogICAgT0ZQUl9CU05fREVCVUcgPSAxNDEsCiAgICBPRlBSX0JTTl9QQUNLRVRfT0ZfREVBVEggPSAxNDIsCn07CgovKiBXaHkgd2FzIHRoaXMgZmxvdyByZW1vdmVkPyAqLwplbnVtIG9mcF9mbG93X3JlbW92ZWRfcmVhc29uKHdpcmVfdHlwZT11aW50OF90KSB7CiAgICBPRlBSUl9JRExFX1RJTUVPVVQgPSAwLAogICAgT0ZQUlJfSEFSRF9USU1FT1VUID0gMSwKICAgIE9GUFJSX0RFTEVURSA9IDIsCiAgICBPRlBSUl9HUk9VUF9ERUxFVEUgPSAzLAogICAgT0ZQUlJfTUVURVJfREVMRVRFID0gNCwKICAgIE9GUFJSX0VWSUNUSU9OID0gNSwKfTsKCi8qIFdoYXQgY2hhbmdlZCBhYm91dCB0aGUgcGh5c2ljYWwgcG9ydCAqLwplbnVtIG9mcF9wb3J0X3JlYXNvbih3aXJlX3R5cGU9dWludDhfdCkgewogICAgT0ZQUFJfQUREID0gMCwKICAgIE9GUFBSX0RFTEVURSA9IDEsCiAgICBPRlBQUl9NT0RJRlkgPSAyLAp9OwoKLyogV2hhdCBjaGFuZ2VkIGFib3V0IHRoZSBjb250cm9sbGVyIHJvbGUgKi8KZW51bSBvZnBfY29udHJvbGxlcl9yb2xlX3JlYXNvbih3aXJlX3R5cGU9dWludDhfdCkgewogICAgT0ZQQ1JSX01BU1RFUl9SRVFVRVNUID0gMCwKICAgIE9GUENSUl9DT05GSUcgPSAxLAogICAgT0ZQQ1JSX0VYUEVSSU1FTlRFUiA9IDIsCn07CgovKiBSb2xlIHByb3BlcnR5IHR5cGVzLiovCmVudW0gb2ZwX3JvbGVfcHJvcF90eXBlIHsKICAgIE9GUFJQVF9FWFBFUklNRU5URVIgPSAweEZGRkYsCn07CgovKiBXaGF0IGNoYW5nZWQgYWJvdXQgdGhlIHRhYmxlICovCmVudW0gb2ZwX3RhYmxlX3JlYXNvbih3aXJlX3R5cGU9dWludDhfdCkgewogICAgT0ZQVFJfVkFDQU5DWV9ET1dOID0gMywKICAgIE9GUFRSX1ZBQ0FOQ1lfVVAgPSA0LAp9OwoKLyogUmVxdWVzdCBmb3J3YXJkIHJlYXNvbiAqLwplbnVtIG9mcF9yZXF1ZXN0Zm9yd2FyZF9yZWFzb24gewogICAgT0ZQUkZSX0dST1VQX01PRCA9IDAsCiAgICBPRlBSRlJfTUVURVJfTU9EID0gMSwKfTsKCi8qIEhlbGxvIGVsZW1lbnRzIHR5cGVzLiAqLwplbnVtIG9mcF9oZWxsb19lbGVtX3R5cGUod2lyZV90eXBlPXVpbnQxNl90KSB7CiAgICBPRlBIRVRfVkVSU0lPTkJJVE1BUCA9IDEsCn07CgovKiBWYWx1ZXMgZm9yIJJ0eXBlkiBpbiBvZnBfZXJyb3JfbWVzc2FnZSAqLwplbnVtIG9mcF9lcnJvcl90eXBlKHdpcmVfdHlwZT11aW50MTZfdCkgewogICAgT0ZQRVRfSEVMTE9fRkFJTEVEID0gMCwKICAgIE9GUEVUX0JBRF9SRVFVRVNUID0gMSwKICAgIE9GUEVUX0JBRF9BQ1RJT04gPSAyLAogICAgT0ZQRVRfQkFEX0lOU1RSVUNUSU9OID0gMywKICAgIE9GUEVUX0JBRF9NQVRDSCA9IDQsCiAgICBPRlBFVF9GTE9XX01PRF9GQUlMRUQgPSA1LAogICAgT0ZQRVRfR1JPVVBfTU9EX0ZBSUxFRCA9IDYsCiAgICBPRlBFVF9QT1JUX01PRF9GQUlMRUQgPSA3LAogICAgT0ZQRVRfVEFCTEVfTU9EX0ZBSUxFRCA9IDgsCiAgICBPRlBFVF9RVUVVRV9PUF9GQUlMRUQgPSA5LAogICAgT0ZQRVRfU1dJVENIX0NPTkZJR19GQUlMRUQgPSAxMCwKICAgIE9GUEVUX1JPTEVfUkVRVUVTVF9GQUlMRUQgPSAxMSwKICAgIE9GUEVUX01FVEVSX01PRF9GQUlMRUQgPSAxMiwKICAgIE9GUEVUX1RBQkxFX0ZFQVRVUkVTX0ZBSUxFRCA9IDEzLAogICAgT0ZQRVRfQkFEX1BST1BFUlRZID0gMTQsCiAgICBPRlBFVF9BU1lOQ19DT05GSUdfRkFJTEVEID0gMTUsCiAgICBPRlBFVF9GTE9XX01PTklUT1JfRkFJTEVEID0gMTYsCiAgICBPRlBFVF9CVU5ETEVfRkFJTEVEID0gMTcsCiAgICBPRlBFVF9FWFBFUklNRU5URVIgPSAweGZmZmYsCn07CgovKiBvZnBfZXJyb3JfbXNnIJJjb2RlkiB2YWx1ZXMgZm9yIE9GUEVUX0hFTExPX0ZBSUxFRCAqLwplbnVtIG9mcF9oZWxsb19mYWlsZWRfY29kZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKICAgIE9GUEhGQ19JTkNPTVBBVElCTEUgPSAwLAogICAgT0ZQSEZDX0VQRVJNID0gMSwKfTsKCi8qIG9mcF9lcnJvcl9tc2cgkmNvZGWSIHZhbHVlcyBmb3IgT0ZQRVRfQkFEX1JFUVVFU1QuICovCmVudW0gb2ZwX2JhZF9yZXF1ZXN0X2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CiAgICBPRlBCUkNfQkFEX1ZFUlNJT04gPSAwLAogICAgT0ZQQlJDX0JBRF9UWVBFID0gMSwKICAgIE9GUEJSQ19CQURfU1RBVCA9IDIsCiAgICBPRlBCUkNfQkFEX0VYUEVSSU1FTlRFUiA9IDMsCiAgICBPRlBCUkNfQkFEX0VYUEVSSU1FTlRFUl9UWVBFID0gNCwKICAgIE9GUEJSQ19FUEVSTSA9IDUsCiAgICBPRlBCUkNfQkFEX0xFTiA9IDYsCiAgICBPRlBCUkNfQlVGRkVSX0VNUFRZID0gNywKICAgIE9GUEJSQ19CVUZGRVJfVU5LTk9XTiA9IDgsCiAgICBPRlBCUkNfQkFEX1RBQkxFX0lEID0gOSwKICAgIE9GUEJSQ19JU19TTEFWRSA9IDEwLAogICAgT0ZQQlJDX0JBRF9QT1JUID0gMTEsCiAgICBPRlBCUkNfQkFEX1BBQ0tFVCA9IDEyLAogICAgT0ZQQlJDX01VTFRJUEFSVF9CVUZGRVJfT1ZFUkZMT1cgPSAxMywKICAgIE9GUEJSQ19NVUxUSVBBUlRfUkVRVUVTVF9USU1FT1VUID0gMTQsCiAgICBPRlBCUkNfTVVMVElQQVJUX1JFUExZX1RJTUVPVVQgPSAxNSwKICAgIE9GUEJSQ19NVUxUSVBBUlRfQkFEX1NDSEVEID0gMTYsCiAgICBPRlBCUkNfUElQRUxJTkVfRklFTERTX09OTFkgPSAxNywKICAgIE9GUEJSQ19VTktOT1dOID0gMTgsCn07CgovKiBvZnBfZXJyb3JfbXNnIJJjb2RlkiB2YWx1ZXMgZm9yIE9GUEVUX0JBRF9BQ1RJT04uICovCmVudW0gb2ZwX2JhZF9hY3Rpb25fY29kZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKICAgIE9GUEJBQ19CQURfVFlQRSA9IDAsCiAgICBPRlBCQUNfQkFEX0xFTiA9IDEsCiAgICBPRlBCQUNfQkFEX0VYUEVSSU1FTlRFUiA9IDIsCiAgICBPRlBCQUNfQkFEX0VYUEVSSU1FTlRFUl9UWVBFID0gMywKICAgIE9GUEJBQ19CQURfT1VUX1BPUlQgPSA0LAogICAgT0ZQQkFDX0JBRF9BUkdVTUVOVCA9IDUsCiAgICBPRlBCQUNfRVBFUk0gPSA2LAogICAgT0ZQQkFDX1RPT19NQU5ZID0gNywKICAgIE9GUEJBQ19CQURfUVVFVUUgPSA4LAogICAgT0ZQQkFDX0JBRF9PVVRfR1JPVVAgPSA5LAogICAgT0ZQQkFDX01BVENIX0lOQ09OU0lTVEVOVCA9IDEwLAogICAgT0ZQQkFDX1VOU1VQUE9SVEVEX09SREVSID0gMTEsCiAgICBPRlBCQUNfQkFEX1RBRyA9IDEyLAogICAgT0ZQQkFDX0JBRF9TRVRfVFlQRSA9IDEzLAogICAgT0ZQQkFDX0JBRF9TRVRfTEVOID0gMTQsCiAgICBPRlBCQUNfQkFEX1NFVF9BUkdVTUVOVCA9IDE1LAogICAgT0ZQQkFDX0JBRF9TRVRfTUFTSyA9IDE2LAogICAgT0ZQQkFDX0JBRF9NRVRFUiA9IDE3LAp9OwoKLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9CQURfSU5TVFJVQ1RJT04uICovCmVudW0gb2ZwX2JhZF9pbnN0cnVjdGlvbl9jb2RlKHdpcmVfdHlwZT11aW50MTZfdCkgewogICAgT0ZQQklDX1VOS05PV05fSU5TVCA9IDAsCiAgICBPRlBCSUNfVU5TVVBfSU5TVCA9IDEsCiAgICBPRlBCSUNfQkFEX1RBQkxFX0lEID0gMiwKICAgIE9GUEJJQ19VTlNVUF9NRVRBREFUQSA9IDMsCiAgICBPRlBCSUNfVU5TVVBfTUVUQURBVEFfTUFTSyA9IDQsCiAgICBPRlBCSUNfQkFEX0VYUEVSSU1FTlRFUiA9IDUsCiAgICBPRlBCSUNfQkFEX0VYUEVSSU1FTlRFUl9UWVBFID0gNiwKICAgIE9GUEJJQ19CQURfTEVOID0gNywKICAgIE9GUEJJQ19FUEVSTSA9IDgsCiAgICBPRlBCSUNfRFVQX0lOU1QgPSA5LAp9OwoKLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9CQURfTUFUQ0guICovCmVudW0gb2ZwX2JhZF9tYXRjaF9jb2RlKHdpcmVfdHlwZT11aW50MTZfdCkgewogICAgT0ZQQk1DX0JBRF9UWVBFID0gMCwKICAgIE9GUEJNQ19CQURfTEVOID0gMSwKICAgIE9GUEJNQ19CQURfVEFHID0gMiwKICAgIE9GUEJNQ19CQURfRExfQUREUl9NQVNLID0gMywKICAgIE9GUEJNQ19CQURfTldfQUREUl9NQVNLID0gNCwKICAgIE9GUEJNQ19CQURfV0lMRENBUkRTID0gNSwKICAgIE9GUEJNQ19CQURfRklFTEQgPSA2LAogICAgT0ZQQk1DX0JBRF9WQUxVRSA9IDcsCiAgICBPRlBCTUNfQkFEX01BU0sgPSA4LAogICAgT0ZQQk1DX0JBRF9QUkVSRVEgPSA5LAogICAgT0ZQQk1DX0RVUF9GSUVMRCA9IDEwLAogICAgT0ZQQk1DX0VQRVJNID0gMTEsCn07CgovKiBvZnBfZXJyb3JfbXNnIJJjb2RlkiB2YWx1ZXMgZm9yIE9GUEVUX0ZMT1dfTU9EX0ZBSUxFRC4gKi8KZW51bSBvZnBfZmxvd19tb2RfZmFpbGVkX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CiAgICBPRlBGTUZDX1VOS05PV04gPSAwLAogICAgT0ZQRk1GQ19UQUJMRV9GVUxMID0gMSwKICAgIE9GUEZNRkNfQkFEX1RBQkxFX0lEID0gMiwKICAgIE9GUEZNRkNfT1ZFUkxBUCA9IDMsCiAgICBPRlBGTUZDX0VQRVJNID0gNCwKICAgIE9GUEZNRkNfQkFEX1RJTUVPVVQgPSA1LAogICAgT0ZQRk1GQ19CQURfQ09NTUFORCA9IDYsCiAgICBPRlBGTUZDX0JBRF9GTEFHUyA9IDcsCiAgICBPRlBGTUZDX0NBTlRfU1lOQyA9IDgsCiAgICBPRlBGTUZDX0JBRF9QUklPUklUWSA9IDksCiAgICBPRlBGTUZDX0lTX1NZTkMgPSAxMCwKfTsKCi8qIJJmbGFnc5IgYml0cyBpbiBzdHJ1Y3Qgb2ZfZmxvd19tb25pdG9yX3JlcXVlc3QuICovCmVudW0gb2ZwX2Zsb3dfbW9uaXRvcl9mbGFncyAod2lyZV90eXBlPXVpbnQxNl90LCBiaXRtYXNrPVRydWUpewogICAgT0ZQRk1GX0lOSVRJQUwgPSAweDEsCiAgICBPRlBGTUZfQUREID0gMHgyLAogICAgT0ZQRk1GX1JFTU9WRUQgPSAweDQsCiAgICBPRlBGTUZfTU9ESUZZID0gMHg4LAogICAgT0ZQRk1GX0lOU1RSVUNUSU9OUyA9IDB4MTAsCiAgICBPRlBGTUZfTk9fQUJCUkVWID0gMHgyMCwKICAgIE9GUEZNRl9PTkxZX09XTiA9IDB4NDAsCn07CgovKiBvZnBfZXJyb3JfbXNnIJJjb2RlkiB2YWx1ZXMgZm9yIE9GUEVUX0dST1VQX01PRF9GQUlMRUQuICovCmVudW0gb2ZwX2dyb3VwX21vZF9mYWlsZWRfY29kZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKICAgIE9GUEdNRkNfR1JPVVBfRVhJU1RTID0gMCwKICAgIE9GUEdNRkNfSU5WQUxJRF9HUk9VUCA9IDEsCiAgICBPRlBHTUZDX1dFSUdIVF9VTlNVUFBPUlRFRCA9IDIsCiAgICBPRlBHTUZDX09VVF9PRl9HUk9VUFMgPSAzLAogICAgT0ZQR01GQ19PVVRfT0ZfQlVDS0VUUyA9IDQsCiAgICBPRlBHTUZDX0NIQUlOSU5HX1VOU1VQUE9SVEVEID0gNSwKICAgIE9GUEdNRkNfV0FUQ0hfVU5TVVBQT1JURUQgPSA2LAogICAgT0ZQR01GQ19MT09QID0gNywKICAgIE9GUEdNRkNfVU5LTk9XTl9HUk9VUCA9IDgsCiAgICBPRlBHTUZDX0NIQUlORURfR1JPVVAgPSA5LAogICAgT0ZQR01GQ19CQURfVFlQRSA9IDEwLAogICAgT0ZQR01GQ19CQURfQ09NTUFORCA9IDExLAogICAgT0ZQR01GQ19CQURfQlVDS0VUID0gMTIsCiAgICBPRlBHTUZDX0JBRF9XQVRDSCA9IDEzLAogICAgT0ZQR01GQ19FUEVSTSA9IDE0LAogICAgT0ZQR01GQ19VTktOT1dOX0JVQ0tFVCA9IDE1LAogICAgT0ZQR01GQ19CVUNLRVRfRVhJU1RTID0gMTYsCn07CgovKiBvZnBfZXJyb3JfbXNnIJJjb2RlkiB2YWx1ZXMgZm9yIE9GUEVUX1BPUlRfTU9EX0ZBSUxFRC4gKi8KZW51bSBvZnBfcG9ydF9tb2RfZmFpbGVkX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CiAgICBPRlBQTUZDX0JBRF9QT1JUID0gMCwKICAgIE9GUFBNRkNfQkFEX0hXX0FERFIgPSAxLAogICAgT0ZQUE1GQ19CQURfQ09ORklHID0gMiwKICAgIE9GUFBNRkNfQkFEX0FEVkVSVElTRSA9IDMsCiAgICBPRlBQTUZDX0VQRVJNID0gNCwKfTsKCi8qIG9mcF9lcnJvcl9tc2cgkmNvZGWSIHZhbHVlcyBmb3IgT0ZQRVRfVEFCTEVfTU9EX0ZBSUxFRC4gKi8KZW51bSBvZnBfdGFibGVfbW9kX2ZhaWxlZF9jb2RlKHdpcmVfdHlwZT11aW50MTZfdCkgewogICAgT0ZQVE1GQ19CQURfVEFCTEUgPSAwLAogICAgT0ZQVE1GQ19CQURfQ09ORklHID0gMSwKICAgIE9GUFRNRkNfRVBFUk0gPSAyLAp9OwoKLyogb2ZwX2Vycm9yIG1zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9RVUVVRV9PUF9GQUlMRUQgKi8KZW51bSBvZnBfcXVldWVfb3BfZmFpbGVkX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CiAgICBPRlBRT0ZDX0JBRF9QT1JUID0gMCwKICAgIE9GUFFPRkNfQkFEX1FVRVVFID0gMSwKICAgIE9GUFFPRkNfRVBFUk0gPSAyLAp9OwoKLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9TV0lUQ0hfQ09ORklHX0ZBSUxFRCAqLwplbnVtIG9mcF9zd2l0Y2hfY29uZmlnX2ZhaWxlZF9jb2RlKHdpcmVfdHlwZT11aW50MTZfdCkgewogICAgT0ZQU0NGQ19CQURfRkxBR1MgPSAwLAogICAgT0ZQU0NGQ19CQURfTEVOID0gMSwKICAgIE9GUFNDRkNfRVBFUk0gPSAyLAogICAgT0ZQUlJGQ19JRF9VTlNVUCA9IDMsCiAgICBPRlBSUkZDX0lEX0lOX1VTRSA9IDQsCn07CgovKiBvZnBfZXJyb3JfbXNnIJJjb2RlkiB2YWx1ZXMgZm9yIE9GUEVUX1JPTEVfUkVRVUVTVF9GQUlMRUQuICovCmVudW0gb2ZwX3JvbGVfcmVxdWVzdF9mYWlsZWRfY29kZSh3aXJlX3R5cGU9dWludDE2X3QpewogICAgT0ZQUlJGQ19TVEFMRSA9IDAsCiAgICBPRlBSUkZDX1VOU1VQID0gMSwKICAgIE9GUFJSRkNfQkFEX1JPTEUgPSAyLAp9OwoKLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9NRVRFUl9NT0RfRkFJTEVEICovCmVudW0gb2ZwX21ldGVyX21vZF9mYWlsZWRfY29kZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKICAgIE9GUE1NRkNfVU5LTk9XTiA9IDAsCiAgICBPRlBNTUZDX01FVEVSX0VYSVNUUyA9IDEsCiAgICBPRlBNTUZDX0lOVkFMSURfTUVURVIgPSAyLAogICAgT0ZQTU1GQ19VTktOT1dOX01FVEVSID0gMywKICAgIE9GUE1NRkNfQkFEX0NPTU1BTkQgPSA0LAogICAgT0ZQTU1GQ19CQURfRkxBR1MgPSA1LAogICAgT0ZQTU1GQ19CQURfUkFURSA9IDYsCiAgICBPRlBNTUZDX0JBRF9CVVJTVCA9IDcsCiAgICBPRlBNTUZDX0JBRF9CQU5EID0gOCwKICAgIE9GUE1NRkNfQkFEX0JBTkRfVkFMVUUgPSA5LAogICAgT0ZQTU1GQ19PVVRfT0ZfTUVURVJTID0gMTAsCiAgICBPRlBNTUZDX09VVF9PRl9CQU5EUyA9IDExLAp9OwoKLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9UQUJMRV9GRUFUVVJFU19GQUlMRUQgKi8KZW51bSBvZnBfdGFibGVfZmVhdHVyZXNfZmFpbGVkX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CiAgICBPRlBURkZDX0JBRF9UQUJMRSA9IDAsCiAgICBPRlBURkZDX0JBRF9NRVRBREFUQSA9IDEsCiAgICBPRlBURkZDX0VQRVJNID0gNSwKICAgIE9GUFRGRkNfQkFEX0NBUEEgPSA2LAogICAgT0ZQVEZGQ19CQURfTUFYX0VOVCA9IDcsCiAgICBPRlBURkZDX0JBRF9GRUFUVVJFUyA9IDgsCiAgICBPRlBURkZDX0JBRF9DT01NQU5EID0gOSwKICAgIE9GUFRGRkNfVE9PX01BTlkgPSAxMCwKfTsKCi8qIG9mcF9lcnJvcl9tc2cgkmNvZGWSIHZhbHVlcyBmb3IgT0ZQRVRfQkFEX1BST1BFUlRZLiAqLwplbnVtIG9mcF9iYWRfcHJvcGVydHlfY29kZSh3aXJlX3R5cGU9dWludDE2X3QpIHsKICAgIE9GUEJQQ19CQURfVFlQRSA9IDAsCiAgICBPRlBCUENfQkFEX0xFTiA9IDEsCiAgICBPRlBCUENfQkFEX1ZBTFVFID0gMiwKICAgIE9GUEJQQ19UT09fTUFOWSA9IDMsCiAgICBPRlBCUENfRFVQX1RZUEUgPSA0LAogICAgT0ZQQlBDX0JBRF9FWFBFUklNRU5URVIgPSA1LAogICAgT0ZQQlBDX0JBRF9FWFBfVFlQRSA9IDYsCiAgICBPRlBCUENfQkFEX0VYUF9WQUxVRSA9IDcsCiAgICBPRlBCUENfRVBFUk0gPSA4LAp9OwoKLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9BU1lOQ19DT05GSUdfRkFJTEVELiAqLwplbnVtIG9mcF9hc3luY19jb25maWdfZmFpbGVkX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CiAgICBPRlBBQ0ZDX0lOVkFMSUQgPSAwLAogICAgT0ZQQUNGQ19VTlNVUFBPUlRFRCA9IDEsCiAgICBPRlBBQ0ZDX0VQRVJNID0gMiwKfTsKCi8qIG9mcF9lcnJvcl9tc2cgkmNvZGWSIHZhbHVlcyBmb3IgT0ZQRVRfRkxPV19NT05JVE9SX0ZBSUxFRC4gKi8KZW51bSBvZnBfZmxvd19tb25pdG9yX2ZhaWxlZF9jb2RlKHdpcmVfdHlwZT11aW50MTZfdCkgewogICAgT0ZQTU9GQ19VTktOT1dOID0gMCwKICAgIE9GUE1PRkNfTU9OSVRPUl9FWElTVFMgPSAxLAogICAgT0ZQTU9GQ19JTlZBTElEX01PTklUT1IgPSAyLAogICAgT0ZQTU9GQ19VTktOT1dOX01PTklUT1IgPSAzLAogICAgT0ZQTU9GQ19CQURfQ09NTUFORCA9IDQsCiAgICBPRlBNT0ZDX0JBRF9GTEFHUyA9IDUsCiAgICBPRlBNT0ZDX0JBRF9UQUJMRV9JRCA9IDYsCiAgICBPRlBNT0ZDX0JBRF9PVVQgPSA3LAp9OwoKLyogb2ZwX2Vycm9yX21zZyCSY29kZZIgdmFsdWVzIGZvciBPRlBFVF9CVU5ETEVfRkFJTEVELiAqLwplbnVtIG9mcF9idW5kbGVfZmFpbGVkX2NvZGUod2lyZV90eXBlPXVpbnQxNl90KSB7CiAgICBPRlBCRkNfVU5LTk9XTiA9IDAsCiAgICBPRlBCRkNfRVBFUk0gPSAxLAogICAgT0ZQQkZDX0JBRF9JRCA9IDIsCiAgICBPRlBCRkNfQlVORExFX0VYSVNUID0gMywKICAgIE9GUEJGQ19CVU5ETEVfQ0xPU0VEID0gNCwKICAgIE9GUEJGQ19PVVRfT0ZfQlVORExFUyA9IDUsCiAgICBPRlBCRkNfQkFEX1RZUEUgPSA2LAogICAgT0ZQQkZDX0JBRF9GTEFHUyA9IDcsCiAgICBPRlBCRkNfTVNHX0JBRF9MRU4gPSA4LAogICAgT0ZQQkZDX01TR19CQURfWElEID0gOSwKICAgIE9GUEJGQ19NU0dfVU5TVVAgPSAxMCwKICAgIE9GUEJGQ19NU0dfQ09ORkxJQ1QgPSAxMSwKICAgIE9GUEJGQ19NU0dfVE9PX01BTlkgPSAxMiwKICAgIE9GUEJGQ19NU0dfRkFJTEVEID0gMTMsCiAgICBPRlBCRkNfVElNRU9VVCA9IDE0LAogICAgT0ZQQkZDX0JVTkRMRV9JTl9QUk9HUkVTUyA9IDE1LAogICAgT0ZQQkZDX1NDSEVEX05PVF9TVVBQT1JURUQgPSAxNiwKICAgIE9GUEJGQ19TQ0hFRF9GVVRVUkUgPSAxNywKICAgIE9GUEJGQ19TQ0hFRF9QQVNUID0gMTgsCn07CgplbnVtIG9mcF9idW5kbGVfZmVhdHVyZV9mbGFncyh3aXJlX3R5cGU9dWludDMyX3QsIGJpdG1hc2s9VHJ1ZSkgewogICAgT0ZQQkZfVElNRVNUQU1QID0gMHgxLAogICAgT0ZQQkZfVElNRV9TRVRfU0NIRUQgPSAweDIsCn07CgovKiBDb25maWd1cmUvTW9kaWZ5IGJlaGF2aW9yIG9mIGEgZmxvdyB0YWJsZSAqLwpzdHJ1Y3Qgb2ZfdGFibGVfbW9kIDogb2ZfaGVhZGVyIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxNzsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQ4X3QgdGFibGVfaWQ7CiAgICBwYWQoMyk7CiAgICB1aW50MzJfdCBjb25maWc7CiAgICBsaXN0KG9mX3RhYmxlX21vZF9wcm9wX3QpIHByb3BlcnRpZXM7Cn07CgovKiBDb21tb24gaGVhZGVyIGZvciBhbGwgVGFibGUgTW9kIFByb3BlcnRpZXMgKi8Kc3RydWN0IG9mX3RhYmxlX21vZF9wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKICAgIHVpbnQxNl90IGxlbmd0aDsKfTsKCi8qIEV2aWN0aW9uIHRhYmxlIG1vZCBQcm9wZXJ0eS4gTW9zdGx5IHVzZWQgaW4gT0ZQTVBfVEFCTEVfREVTQyByZXBsaWVzLiAqLwpzdHJ1Y3Qgb2ZfdGFibGVfbW9kX3Byb3BfZXZpY3Rpb24gOiBvZl90YWJsZV9tb2RfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDI7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICBlbnVtIG9mcF90YWJsZV9tb2RfcHJvcF9ldmljdGlvbl9mbGFnIGZsYWdzOwp9OwoKLyogVmFjYW5jeSB0YWJsZSBtb2QgcHJvcGVydHkgKi8Kc3RydWN0IG9mX3RhYmxlX21vZF9wcm9wX3ZhY2FuY3kgOiBvZl90YWJsZV9tb2RfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDM7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50OF90IHZhY2FuY3lfZG93bjsKICAgIHVpbnQ4X3QgdmFjYW5jeV91cDsKICAgIHVpbnQ4X3QgdmFjYW5jeTsKICAgIHBhZCgxKTsKfTsKCi8qIEV4cGVyaW1lbnRlciB0YWJsZSBtb2QgcHJvcGVydHkgKi8Kc3RydWN0IG9mX3RhYmxlX21vZF9wcm9wX2V4cGVyaW1lbnRlciA6IG9mX3RhYmxlX21vZF9wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMHhmZmZmOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CiAgICB1aW50MzJfdCBleHBfdHlwZTsKfTsKCi8qIEZsb3cgc2V0dXAgYW5kIHRlYXJkb3duIChjb250cm9sbGVyIC0+IGRhdGFwYXRoKS4gKi8Kc3RydWN0IG9mX2Zsb3dfbW9kIDogb2ZfaGVhZGVyIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxNDsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQ2NF90IGNvb2tpZTsKICAgIHVpbnQ2NF90IGNvb2tpZV9tYXNrOwogICAgdWludDhfdCB0YWJsZV9pZDsKICAgIG9mX2ZtX2NtZF90IF9jb21tYW5kID09ID87CiAgICB1aW50MTZfdCBpZGxlX3RpbWVvdXQ7CiAgICB1aW50MTZfdCBoYXJkX3RpbWVvdXQ7CiAgICB1aW50MTZfdCBwcmlvcml0eTsKICAgIHVpbnQzMl90IGJ1ZmZlcl9pZDsKICAgIG9mX3BvcnRfbm9fdCBvdXRfcG9ydDsKICAgIHVpbnQzMl90IG91dF9ncm91cDsKICAgIGVudW0gb2ZwX2Zsb3dfbW9kX2ZsYWdzIGZsYWdzOwogICAgdWludDE2X3QgaW1wb3J0YW5jZTsKICAgIG9mX21hdGNoX3QgbWF0Y2g7CiAgICBsaXN0KG9mX2luc3RydWN0aW9uX3QpIGluc3RydWN0aW9uczsKfTsKCi8qIEdyb3VwIHNldHVwIGFuZCB0ZWFyZG93biAoY29udHJvbGxlciAtPiBkYXRhcGF0aCkuICovCnN0cnVjdCBvZl9ncm91cF9tb2QgOiBvZl9oZWFkZXIgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE1OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgZW51bSBvZnBfZ3JvdXBfbW9kX2NvbW1hbmQgY29tbWFuZCA9PSA/OwogICAgZW51bSBvZnBfZ3JvdXBfdHlwZSBncm91cF90eXBlOwogICAgcGFkKDEpOwogICAgdWludDMyX3QgZ3JvdXBfaWQ7CiAgICB1aW50MTZfdCBidWNrZXRfYXJyYXlfbGVuID09IGxlbmd0aChidWNrZXRzKTsKICAgIHBhZCgyKTsKICAgIGVudW0gb2ZwX2dyb3VwX2J1Y2tldCBjb21tYW5kX2J1Y2tldF9pZDsKICAgIGxpc3Qob2ZfYnVja2V0X3QpIGJ1Y2tldHM7CiAgICBsaXN0KG9mX2dyb3VwX3Byb3BfdCkgcHJvcGVydGllczsKfTsKCi8qIEJ1Y2tldCBmb3IgdXNlIGluIGdyb3Vwcy4gKi8Kc3RydWN0IG9mX2J1Y2tldCB7CiAgICB1aW50MTZfdCBsZW47CiAgICB1aW50MTZfdCBhY3Rpb25fYXJyYXlfbGVuID09IGxlbmd0aChhY3Rpb25zKTsKICAgIGVudW0gb2ZwX2dyb3VwX2J1Y2tldCBidWNrZXRfaWQ7CiAgICBsaXN0KG9mX2FjdGlvbl90KSBhY3Rpb25zOwogICAgbGlzdChvZl9ncm91cF9idWNrZXRfcHJvcF90KSBwcm9wZXJ0aWVzOwp9OwoKLyogQ29tbW9uIGhlYWRlciBmb3IgYWxsIGdyb3VwIGJ1Y2tldCBwcm9wZXJ0aWVzLiAqLwpzdHJ1Y3Qgb2ZfZ3JvdXBfYnVja2V0X3Byb3AgewogICAgdWludDE2X3QgdHlwZSA9PSA/OwogICAgdWludDE2X3QgbGVuZ3RoOwp9OwoKLyogR3JvdXAgYnVja2V0IHdlaWdodCBwcm9wZXJ0eSwgZm9yIHNlbGVjdCBncm91cHMgb25seS4gKi8Kc3RydWN0IG9mX2dyb3VwX2J1Y2tldF9wcm9wX3dlaWdodCA6IG9mX2dyb3VwX2J1Y2tldF9wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMDsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQxNl90IHdlaWdodDsKICAgIHBhZCgyKTsKfTsKCi8qIEdyb3VwIGJ1Y2tldCB3YXRjaCBwb3J0ICovCnN0cnVjdCBvZl9ncm91cF9idWNrZXRfcHJvcF93YXRjaF9wb3J0IDogb2ZfZ3JvdXBfYnVja2V0X3Byb3AgewogICAgdWludDE2X3QgdHlwZSA9PSAxOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3Qgd2F0Y2g7Cn07CgovKiBHcm91cCBidWNrZXQgd2F0Y2ggZ3JvdXAgKi8Kc3RydWN0IG9mX2dyb3VwX2J1Y2tldF9wcm9wX3dhdGNoX2dyb3VwIDogb2ZfZ3JvdXBfYnVja2V0X3Byb3B7CiAgICB1aW50MTZfdCB0eXBlID09IDI7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB3YXRjaDsKfTsKCi8qIEV4cGVyaW1lbnRlciBncm91cCBidWNrZXQgcHJvcGVydHkgKi8Kc3RydWN0IG9mX2dyb3VwX2J1Y2tldF9wcm9wX2V4cGVyaW1lbnRlciA6IG9mX2dyb3VwX2J1Y2tldF9wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMzsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OwogICAgdWludDMyX3QgZXhwX3R5cGU7Cn07CgovKiBDb21tb24gaGVhZGVyIGZvciBhbGwgZ3JvdXAgcHJvcGVydGllcy4gKi8Kc3RydWN0IG9mX2dyb3VwX3Byb3AgewogICAgdWludDE2X3QgdHlwZSA9PSA/OwogICAgdWludDE2X3QgbGVuZ3RoOwp9OwoKLyogRXhwZXJpbWVudGVyIGdyb3VwIHByb3BlcnR5ICovCnN0cnVjdCBvZl9ncm91cF9wcm9wX2V4cGVyaW1lbnRlciB7CiAgICB1aW50MTZfdCB0eXBlID09IDY1NTM1OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CiAgICB1aW50MzJfdCBleHBfdHlwZTsKfTsKCi8qIE1vZGlmeSBiZWhhdmlvciBvZiB0aGUgcGh5c2ljYWwgcG9ydCAqLwpzdHJ1Y3Qgb2ZfcG9ydF9tb2QgOiBvZl9oZWFkZXIgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE2OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgb2ZfcG9ydF9ub190IHBvcnRfbm87CiAgICBwYWQoNCk7CiAgICBvZl9tYWNfYWRkcl90IGh3X2FkZHI7CiAgICBwYWQoMik7CiAgICBlbnVtIG9mcF9wb3J0X2NvbmZpZyBjb25maWc7CiAgICBlbnVtIG9mcF9wb3J0X2NvbmZpZyBtYXNrOwogICAgbGlzdChvZl9wb3J0X21vZF9wcm9wX3QpIHByb3BlcnRpZXM7Cn07CgovKiBDb21tb24gaGVhZGVyIGZvciBhbGwgcG9ydCBtb2QgcHJvcGVydGllcy4gKi8Kc3RydWN0IG9mX3BvcnRfbW9kX3Byb3AgewogICAgdWludDE2X3QgdHlwZSA9PSA/OwogICAgdWludDE2X3QgbGVuZ3RoOwp9OwoKLyogRXRoZXJuZXQgcG9ydCBtb2QgcHJvcGVydHkuICovCnN0cnVjdCBvZl9wb3J0X21vZF9wcm9wX2V0aGVybmV0IDogb2ZfcG9ydF9tb2RfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDA7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICBlbnVtIG9mcF9wb3J0X2ZlYXR1cmVzIGFkdmVydGlzZTsKfTsKCi8qIE9wdGljYWwgcG9ydCBtb2QgcHJvcGVydHkgKi8Kc3RydWN0IG9mX3BvcnRfbW9kX3Byb3Bfb3B0aWNhbCA6IG9mX3BvcnRfbW9kX3Byb3AgewogICAgdWludDE2X3QgdHlwZSA9PSAxOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgY29uZmlndXJlOwogICAgdWludDMyX3QgZnJlcV9sZG1hOwogICAgdWludDMyX3QgZmxfb2Zmc2V0OyAvKiBUT0RPIHNpZ25lZCAqLwogICAgdWludDMyX3QgZ3JpZF9zcGFuOwogICAgdWludDMyX3QgdHhfcHdyOwp9OwoKLyogRXhwZXJpbWVudGVyIHBvcnQgbW9kIHByb3BlcnR5LiAqLwpzdHJ1Y3Qgb2ZfcG9ydF9tb2RfcHJvcF9leHBlcmltZW50ZXIgOiBvZl9wb3J0X21vZF9wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMHhmZmZmOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CiAgICB1aW50MzJfdCBleHBfdHlwZTsKfTsKCi8qIE1ldGVyIGNvbmZpZ3VyYXRpb24uIE9GUFRfTUVURVJfTU9ELiAqLwpzdHJ1Y3Qgb2ZfbWV0ZXJfbW9kIDogb2ZfaGVhZGVyIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAyOTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIGVudW0gb2ZwX21ldGVyX21vZF9jb21tYW5kIGNvbW1hbmQ7CiAgICBlbnVtIG9mcF9tZXRlcl9mbGFncyBmbGFnczsKICAgIHVpbnQzMl90IG1ldGVyX2lkOwogICAgbGlzdChvZl9tZXRlcl9iYW5kX3QpIGJhbmRzOwp9OwoKLyogQ29tbW9uIGhlYWRlciBmb3IgYWxsIG1ldGVyIGJhbmRzICovCnN0cnVjdCBvZl9tZXRlcl9iYW5kIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKICAgIHVpbnQxNl90IGxlbjsKLy8gIHVpbnQzMl90IHJhdGU7ICAvLyBUaGVzZSBhcmUgZXhjbHVkZWQgYi9jIHRoaXMgaXMgdGhlIGhlYWRlcgovLyAgdWludDMyX3QgYnVyc3Rfc2l6ZTsgIC8vIFRoZXNlIGFyZSBleGNsdWRlZCBiL2MgdGhpcyBpcyB0aGUgaGVhZGVyCn07CgovKiBPRlBNQlRfRFJPUCBiYW5kIC0gZHJvcCBwYWNrZXRzICovCnN0cnVjdCBvZl9tZXRlcl9iYW5kX2Ryb3AgOiBvZl9tZXRlcl9iYW5kIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMTsKICAgIHVpbnQxNl90IGxlbjsKICAgIHVpbnQzMl90IHJhdGU7CiAgICB1aW50MzJfdCBidXJzdF9zaXplOwogICAgcGFkKDQpOwp9OwoKLyogT0ZQTUJUX0RTQ1BfUkVNQVJLIGJhbmQgLSBSZW1hcmsgRFNDUCBpbiB0aGUgSVAgaGVhZGVyICovCnN0cnVjdCBvZl9tZXRlcl9iYW5kX2RzY3BfcmVtYXJrIDogb2ZfbWV0ZXJfYmFuZCB7CiAgICB1aW50MTZfdCB0eXBlID09IDI7CiAgICB1aW50MTZfdCBsZW47CiAgICB1aW50MzJfdCByYXRlOwogICAgdWludDMyX3QgYnVyc3Rfc2l6ZTsKICAgIHVpbnQ4X3QgcHJlY19sZXZlbDsKICAgIHBhZCgzKTsKfTsKCi8qIE9GUE1CVF9FWFBFUklNRU5URVIgYmFuZCAtIEV4cGVyaW1lbnRlciB0eXBlLgoqIFRoZSByZXN0IG9mIHRoZSBiYW5kIGlzIGV4cGVyaW1lbnRlci1kZWZpbmVkLiAqLwpzdHJ1Y3Qgb2ZfbWV0ZXJfYmFuZF9leHBlcmltZW50ZXIgOiBvZl9tZXRlcl9iYW5kIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gNjU1MzU7CiAgICB1aW50MTZfdCBsZW47CiAgICB1aW50MzJfdCByYXRlOwogICAgdWludDMyX3QgYnVyc3Rfc2l6ZTsKICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlcjsKfTsKCi8qIE11bHRpcGFydCBSZXF1ZXN0ICovCnN0cnVjdCBvZl9zdGF0c19yZXF1ZXN0IDogb2ZfaGVhZGVyIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxODsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gPzsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CiAgICBwYWQoNCk7Cn07CgovKiBNdWx0aXBhcnQgUmVwbHkgKi8Kc3RydWN0IG9mX3N0YXRzX3JlcGx5IDogb2ZfaGVhZGVyIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gPzsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcGx5X2ZsYWdzIGZsYWdzOwogICAgcGFkKDQpOwp9OwoKLyogQm9keSBmb3Igb2ZwX211bHRpcGFydF9yZXF1ZXN0IG9mIHR5cGUgT0ZQU1RfRkxPVyhfREVTQykgKi8Kc3RydWN0IG9mX2Zsb3dfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE4OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxOwogICAgZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyBmbGFnczsKICAgIHBhZCg0KTsKICAgIHVpbnQ4X3QgdGFibGVfaWQ7CiAgICBwYWQoMyk7CiAgICBvZl9wb3J0X25vX3Qgb3V0X3BvcnQ7CiAgICB1aW50MzJfdCBvdXRfZ3JvdXA7CiAgICBwYWQoNCk7CiAgICB1aW50NjRfdCBjb29raWU7CiAgICB1aW50NjRfdCBjb29raWVfbWFzazsKICAgIG9mX21hdGNoX3QgbWF0Y2g7Cn07CgovKiBCb2R5IGZvciBvZnBfbXVsdGlwYXJ0X3JlcGx5IG9mIHR5cGUgT0ZQU1RfRkxPVyhfREVTQykgKi8Kc3RydWN0IG9mX2Zsb3dfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTk7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDE7CiAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKICAgIHBhZCg0KTsKICAgIGxpc3Qob2ZfZmxvd19zdGF0c19lbnRyeV90KSBlbnRyaWVzOwp9OwoKLyogQm9keSBmb3Igb2ZwX211bHRpcGFydF9yZXF1ZXN0IG9mIHR5cGUgT0ZQTVBfRkxPV18oU1RBVFMpTElHSFRXRUlHSFQgKi8Kc3RydWN0IG9mX2Zsb3dfbGlnaHR3ZWlnaHRfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE4OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxNzsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CiAgICBwYWQoNCk7CiAgICB1aW50OF90IHRhYmxlX2lkOwogICAgcGFkKDMpOwogICAgb2ZfcG9ydF9ub190IG91dF9wb3J0OwogICAgdWludDMyX3Qgb3V0X2dyb3VwOwogICAgcGFkKDQpOwogICAgdWludDY0X3QgY29va2llOwogICAgdWludDY0X3QgY29va2llX21hc2s7CiAgICBvZl9tYXRjaF90IG1hdGNoOwp9OwoKLyogRW50cnkgZm9yIE9GUFNUX0ZMT1cgKi8Kc3RydWN0IG9mX2Zsb3dfc3RhdHNfZW50cnkgewogICAgdWludDE2X3QgbGVuZ3RoOwogICAgcGFkKDIpOwogICAgdWludDhfdCB0YWJsZV9pZDsKICAgIHBhZCgxKTsKICAgIHVpbnQxNl90IHByaW9yaXR5OwogICAgdWludDE2X3QgaWRsZV90aW1lb3V0OwogICAgdWludDE2X3QgaGFyZF90aW1lb3V0OwogICAgZW51bSBvZnBfZmxvd19tb2RfZmxhZ3MgZmxhZ3M7CiAgICB1aW50MTZfdCBpbXBvcnRhbmNlOwogICAgdWludDY0X3QgY29va2llOwogICAgb2ZfbWF0Y2hfdCBtYXRjaDsKICAgIG9mX3N0YXRfdCBzdGF0czsKICAgIGxpc3Qob2ZfaW5zdHJ1Y3Rpb25fdCkgaW5zdHJ1Y3Rpb25zOwp9OwoKLyogRW50cnkgZm9yIE9GUE1QX0ZMT1dfKFNUQVRTKUxJR0hUV0VJR0hUICovCnN0cnVjdCBvZl9mbG93X2xpZ2h0d2VpZ2h0X3N0YXRzX2VudHJ5IHsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHBhZCgyKTsKICAgIHVpbnQ4X3QgdGFibGVfaWQ7CiAgICBlbnVtIG9mcF9mbG93X3N0YXRzX3JlYXNvbiByZWFzb247CiAgICB1aW50MTZfdCBwcmlvcml0eTsKICAgIG9mX21hdGNoX3QgbWF0Y2g7CiAgICBvZl9zdGF0X3Qgc3RhdHM7Cn07CgovKiBCb2R5IG9mIHJlcGx5IHRvIE9GUFNUX0ZMT1dfKFNUQVRTKUxJR0hUV0VJR0hUIHJlcXVlc3QgKi8Kc3RydWN0IG9mX2Zsb3dfbGlnaHR3ZWlnaHRfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTk7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDE3OwogICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CiAgICBwYWQoNCk7CiAgICBsaXN0KG9mX2Zsb3dfbGlnaHR3ZWlnaHRfc3RhdHNfZW50cnlfdCkgZW50cmllczsKfTsKCi8qIEJvZHkgZm9yIG9mcF9tdWx0aXBhcnRfcmVxdWVzdCBvZiB0eXBlIE9GUE1QX0FHR1JFR0FURV9TVEFUUy4gKi8Kc3RydWN0IG9mX2FnZ3JlZ2F0ZV9zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTg7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDI7CiAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOwogICAgcGFkKDQpOwogICAgdWludDhfdCB0YWJsZV9pZDsKICAgIHBhZCgzKTsKICAgIG9mX3BvcnRfbm9fdCBvdXRfcG9ydDsKICAgIHVpbnQzMl90IG91dF9ncm91cDsKICAgIHBhZCg0KTsKICAgIHVpbnQ2NF90IGNvb2tpZTsKICAgIHVpbnQ2NF90IGNvb2tpZV9tYXNrOwogICAgb2ZfbWF0Y2hfdCBtYXRjaDsKfTsKCi8qIEJvZHkgb2YgcmVwbHkgdG8gT0ZQTVBfQUdHUkVHQVRFX1NUQVRTIHJlcXVlc3QuICovCnN0cnVjdCBvZl9hZ2dyZWdhdGVfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTk7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDI7CiAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKICAgIHBhZCg0KTsKICAgIG9mX3N0YXRfdCBzdGF0czsKfTsKCgovKiBCb2R5IGZvciBvZnBfbXVsdGlwYXJ0X3JlcXVlc3Qgb2YgdHlwZXMgT0ZQTVBfUE9SVF9TVEFUUyAqLwpzdHJ1Y3Qgb2ZfcG9ydF9zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTg7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDQ7CiAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOwogICAgcGFkKDQpOwogICAgb2ZfcG9ydF9ub190IHBvcnRfbm87CiAgICBwYWQoNCk7Cn07CgpzdHJ1Y3Qgb2ZfcG9ydF9zdGF0c19lbnRyeSB7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICBwYWQoMik7CiAgICBvZl9wb3J0X25vX3QgcG9ydF9ubzsKICAgIHVpbnQzMl90IGR1cmF0aW9uX3NlYzsKICAgIHVpbnQzMl90IGR1cmF0aW9uX25zZWM7CiAgICB1aW50NjRfdCByeF9wYWNrZXRzOwogICAgdWludDY0X3QgdHhfcGFja2V0czsKICAgIHVpbnQ2NF90IHJ4X2J5dGVzOwogICAgdWludDY0X3QgdHhfYnl0ZXM7CiAgICB1aW50NjRfdCByeF9kcm9wcGVkOwogICAgdWludDY0X3QgdHhfZHJvcHBlZDsKICAgIHVpbnQ2NF90IHJ4X2Vycm9yczsKICAgIHVpbnQ2NF90IHR4X2Vycm9yczsKICAgIGxpc3Qob2ZfcG9ydF9zdGF0c19wcm9wX3QpIHByb3BlcnRpZXM7Cn07CgovKiBCb2R5IG9mIHJlcGx5IHRvIE9GUE1QX1BPUlRfU1RBVFMgcmVxdWVzdC4gKi8Kc3RydWN0IG9mX3BvcnRfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTk7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDQ7CiAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKICAgIHBhZCg0KTsKICAgIGxpc3Qob2ZfcG9ydF9zdGF0c19lbnRyeV90KSBlbnRyaWVzOwp9OwoKLyogQ29tbW9uIGhlYWRlciBmb3IgYWxsIHBvcnQgc3RhdHMgcHJvcGVydGllcy4gKi8Kc3RydWN0IG9mX3BvcnRfc3RhdHNfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09ID87CiAgICB1aW50MTZfdCBsZW5ndGg7Cn07CgovKiBFdGhlcm5ldCBwb3J0IHN0YXRzIHByb3BlcnR5LiAqLwpzdHJ1Y3Qgb2ZfcG9ydF9zdGF0c19wcm9wX2V0aGVybmV0IDogb2ZfcG9ydF9zdGF0c19wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMDsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHBhZCg0KTsKICAgIHVpbnQ2NF90IHJ4X2ZyYW1lX2VycjsKICAgIHVpbnQ2NF90IHJ4X292ZXJfZXJyOwogICAgdWludDY0X3QgcnhfY3JjX2VycjsKICAgIHVpbnQ2NF90IGNvbGxpc2lvbnM7Cn07CgovKiBPcHRpY2FsIHBvcnQgc3RhdHMgcHJvcGVydHkuICovCnN0cnVjdCBvZl9wb3J0X3N0YXRzX3Byb3Bfb3B0aWNhbCA6IG9mX3BvcnRfc3RhdHNfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDE7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICBwYWQoNCk7CiAgICB1aW50MzJfdCBmbGFnczsKICAgIHVpbnQzMl90IHR4X2ZyZXFfbG1kYTsKICAgIHVpbnQzMl90IHR4X29mZnNldDsKICAgIHVpbnQzMl90IHR4X2dyaWRfc3BhbjsKICAgIHVpbnQzMl90IHJ4X2ZyZXFfbG1kYTsKICAgIHVpbnQzMl90IHJ4X29mZnNldDsKICAgIHVpbnQzMl90IHJ4X2dyaWRfc3BhbjsKICAgIHVpbnQxNl90IHR4X3B3cjsKICAgIHVpbnQxNl90IHJ4X3B3cjsKICAgIHVpbnQxNl90IGJpYXNfY3VycmVudDsKICAgIHVpbnQxNl90IHRlbXBlcmF0dXJlOwp9OwoKLyogRXhwZXJpbWVudGVyIHBvcnQgc3RhdHMgcHJvcGVydHkuICovCnN0cnVjdCBvZl9wb3J0X3N0YXRzX3Byb3BfZXhwZXJpbWVudGVyIDogb2ZfcG9ydF9zdGF0c19wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMHhmZmZmOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CiAgICB1aW50MzJfdCBleHBfdHlwZTsKfTsKCi8qIEJvZHkgZm9yIG9mcF9tdWx0aXBhcnRfcmVxdWVzdCBvZiBPRlBNUF9QT1JUX0RFU0MuICovCnN0cnVjdCBvZl9wb3J0X2Rlc2Nfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE4OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxMzsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CiAgICBwYWQoNCk7CiAgICBvZl9wb3J0X25vX3QgcG9ydF9ubzsKICAgIHBhZCg0KTsKfTsKCi8qIEJvZHkgZm9yIG9mcF9tdWx0aXBhcnRfcmVwbHkgb2YgT0ZQTVBfUE9SVF9ERVNDLiAqLwpzdHJ1Y3Qgb2ZfcG9ydF9kZXNjX3N0YXRzX3JlcGx5IDogb2Zfc3RhdHNfcmVwbHkgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE5OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxMzsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcGx5X2ZsYWdzIGZsYWdzOwogICAgcGFkKDQpOwogICAgbGlzdChvZl9wb3J0X2Rlc2NfdCkgZW50cmllczsKfTsKCi8qIEJvZHkgZm9yIG9mcF9tdWx0aXBhcnRfcmVxdWVzdCBvZiBPRlBNUF9RVUVVRV9TVEFUUy4gKi8Kc3RydWN0IG9mX3F1ZXVlX3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxODsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gNTsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CiAgICBwYWQoNCk7CiAgICBvZl9wb3J0X25vX3QgcG9ydF9ubzsKICAgIHVpbnQzMl90IHF1ZXVlX2lkOwp9OwoKc3RydWN0IG9mX3F1ZXVlX3N0YXRzX2VudHJ5IHsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHBhZCg2KTsKICAgIG9mX3BvcnRfbm9fdCBwb3J0X25vOwogICAgdWludDMyX3QgcXVldWVfaWQ7CiAgICB1aW50NjRfdCB0eF9ieXRlczsKICAgIHVpbnQ2NF90IHR4X3BhY2tldHM7CiAgICB1aW50NjRfdCB0eF9lcnJvcnM7CiAgICB1aW50MzJfdCBkdXJhdGlvbl9zZWM7CiAgICB1aW50MzJfdCBkdXJhdGlvbl9uc2VjOwogICAgbGlzdChvZl9xdWV1ZV9zdGF0c19wcm9wX3QpIHByb3BlcnRpZXM7Cn07CgpzdHJ1Y3Qgb2ZfcXVldWVfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTk7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDU7CiAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKICAgIHBhZCg0KTsKICAgIGxpc3Qob2ZfcXVldWVfc3RhdHNfZW50cnlfdCkgZW50cmllczsKfTsKCi8qIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBxdWV1ZSBwcm9wZXJ0aWVzICovCnN0cnVjdCBvZl9xdWV1ZV9zdGF0c19wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKICAgIHVpbnQxNl90IGxlbmd0aDsKfTsKCi8qIEV4cGVyaW1lbnRlciBxdWV1ZSBwcm9wZXJ0eSBkZXNjcmlwdGlvbi4gKi8Kc3RydWN0IG9mX3F1ZXVlX3N0YXRzX3Byb3BfZXhwZXJpbWVudGVyIDogb2ZfcXVldWVfc3RhdHNfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OwogICAgdWludDMyX3QgZXhwX3R5cGU7Cn07CgovKiBCb2R5IGZvciBvZnBfbXVsdGlwYXJ0X3JlcXVlc3Qgb2YgT0ZQTVBfUVVFVUVfREVTQyAqLwpzdHJ1Y3Qgb2ZfcXVldWVfZGVzY19zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTg7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDE1OwogICAgZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyBmbGFnczsKICAgIHBhZCg0KTsKICAgIG9mX3BvcnRfbm9fdCBwb3J0X25vOwogICAgdWludDMyX3QgcXVldWVfaWQ7Cn07CgpzdHJ1Y3Qgb2ZfcXVldWVfZGVzYyB7CiAgICB1aW50MzJfdCBwb3J0X25vOwogICAgdWludDMyX3QgcXVldWVfaWQ7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICBwYWQoNik7CiAgICBsaXN0KG9mX3F1ZXVlX2Rlc2NfcHJvcF90KSBwcm9wZXJ0aWVzOwp9OwoKLyogQm9keSBvZiByZXBseSB0byBPRlBNUF9RVUVVRV9ERVNDIHJlcXVlc3QuICovCnN0cnVjdCBvZl9xdWV1ZV9kZXNjX3N0YXRzX3JlcGx5IDogb2Zfc3RhdHNfcmVwbHkgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE5OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxNTsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcGx5X2ZsYWdzIGZsYWdzOwogICAgcGFkKDQpOwogICAgbGlzdChvZl9xdWV1ZV9kZXNjX3QpIGVudHJpZXM7Cn07CgovKiBDb21tb24gaGVhZGVyIGZvciBhbGwgcXVldWUgcHJvcGVydGllcyAqLwpzdHJ1Y3Qgb2ZfcXVldWVfZGVzY19wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKICAgIHVpbnQxNl90IGxlbmd0aDsKfTsKCi8qIE1pbi1SYXRlIHF1ZXVlIHByb3BlcnR5IGRlc2NyaXB0aW9uLiAqLwpzdHJ1Y3Qgb2ZfcXVldWVfZGVzY19wcm9wX21pbl9yYXRlIDogb2ZfcXVldWVfZGVzY19wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQxNl90IHJhdGU7CiAgICBwYWQoMik7Cn07CgovKiBNYXgtUmF0ZSBxdWV1ZSBwcm9wZXJ0eSBkZXNjcmlwdGlvbi4gKi8Kc3RydWN0IG9mX3F1ZXVlX2Rlc2NfcHJvcF9tYXhfcmF0ZSA6IG9mX3F1ZXVlX2Rlc2NfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDI7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MTZfdCByYXRlOwogICAgcGFkKDIpOwp9OwoKLyogRXhwZXJpbWVudGVyIHF1ZXVlIHByb3BlcnR5IGRlc2NyaXB0aW9uLiAqLwpzdHJ1Y3Qgb2ZfcXVldWVfZGVzY19wcm9wX2V4cGVyaW1lbnRlciA6IG9mX3F1ZXVlX2Rlc2NfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OwogICAgdWludDMyX3QgZXhwX3R5cGU7Cn07CgovKiBCb2R5IG9mIE9GUE1QX0dST1VQX1NUQVRTICovCnN0cnVjdCBvZl9ncm91cF9zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTg7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDY7CiAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOwogICAgcGFkKDQpOwogICAgdWludDMyX3QgZ3JvdXBfaWQ7CiAgICBwYWQoNCk7Cn07CgpzdHJ1Y3Qgb2ZfZ3JvdXBfc3RhdHNfZW50cnkgewogICAgdWludDE2X3QgbGVuZ3RoOwogICAgcGFkKDIpOwogICAgdWludDMyX3QgZ3JvdXBfaWQ7CiAgICB1aW50MzJfdCByZWZfY291bnQ7CiAgICBwYWQoNCk7CiAgICB1aW50NjRfdCBwYWNrZXRfY291bnQ7CiAgICB1aW50NjRfdCBieXRlX2NvdW50OwogICAgdWludDMyX3QgZHVyYXRpb25fc2VjOwogICAgdWludDMyX3QgZHVyYXRpb25fbnNlYzsKICAgIGxpc3Qob2ZfYnVja2V0X2NvdW50ZXJfdCkgYnVja2V0X3N0YXRzOwp9OwoKLyogQm9keSBvZiByZXBseSB0byBPRlBNUF9HUk9VUF9TVEFUUyByZXF1ZXN0LiAqLwpzdHJ1Y3Qgb2ZfZ3JvdXBfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTk7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDY7CiAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKICAgIHBhZCg0KTsKICAgIGxpc3Qob2ZfZ3JvdXBfc3RhdHNfZW50cnlfdCkgZW50cmllczsKfTsKCi8qIFVzZWQgaW4gZ3JvdXAgc3RhdHMgcmVwbGllcy4gKi8Kc3RydWN0IG9mX2J1Y2tldF9jb3VudGVyIHsKICAgIHVpbnQ2NF90IHBhY2tldF9jb3VudDsKICAgIHVpbnQ2NF90IGJ5dGVfY291bnQ7Cn07CgovKiBCb2R5IG9mIE9GUE1QX0dST1VQX0RFU0MgcmVxdWVzdHMuICovCnN0cnVjdCBvZl9ncm91cF9kZXNjX3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxODsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gNzsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CiAgICBwYWQoNCk7CiAgICB1aW50MzJfdCBncm91cF9pZDsKICAgIHBhZCg0KTsKfTsKCnN0cnVjdCBvZl9ncm91cF9kZXNjX3N0YXRzX2VudHJ5IHsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIGVudW0gb2ZwX2dyb3VwX3R5cGUgZ3JvdXBfdHlwZTsKICAgIHBhZCgxKTsKICAgIHVpbnQzMl90IGdyb3VwX2lkOwogICAgdWludDE2X3QgYnVja2V0X2FycmF5X2xlbiA9PSBsZW5ndGgoYnVja2V0cyk7CiAgICBwYWQoNik7CiAgICBsaXN0KG9mX2J1Y2tldF90KSBidWNrZXRzOwogICAgbGlzdChvZl9ncm91cF9wcm9wX3QpIHByb3BlcnRpZXM7Cn07CgovKiBCb2R5IG9mIHJlcGx5IHRvIE9GUE1QX0dST1VQX0RFU0MgcmVxdWVzdC4gKi8Kc3RydWN0IG9mX2dyb3VwX2Rlc2Nfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTk7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDc7CiAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKICAgIHBhZCg0KTsKICAgIGxpc3Qob2ZfZ3JvdXBfZGVzY19zdGF0c19lbnRyeV90KSBlbnRyaWVzOwp9OwoKLyogQm9keSBvZiBPRlBNUF9HUk9VUF9GRUFUVVJFUyByZXF1ZXN0LiBHcm91cCBmZWF0dXJlcy4gKi8Kc3RydWN0IG9mX2dyb3VwX2ZlYXR1cmVzX3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxODsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gODsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CiAgICBwYWQoNCk7Cn07CgovKiBCb2R5IG9mIHJlcGx5IHRvIE9GUE1QX0dST1VQX0ZFQVRVUkVTIHJlcXVlc3QuIEdyb3VwIGZlYXR1cmVzLiAqLwpzdHJ1Y3Qgb2ZfZ3JvdXBfZmVhdHVyZXNfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTk7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDg7CiAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKICAgIHBhZCg0KTsKICAgIHVpbnQzMl90IHR5cGVzOwogICAgZW51bSBvZnBfZ3JvdXBfY2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKICAgIHVpbnQzMl90IG1heF9ncm91cHNfYWxsOwogICAgdWludDMyX3QgbWF4X2dyb3Vwc19zZWxlY3Q7CiAgICB1aW50MzJfdCBtYXhfZ3JvdXBzX2luZGlyZWN0OwogICAgdWludDMyX3QgbWF4X2dyb3Vwc19mZjsKICAgIHVpbnQzMl90IGFjdGlvbnNfYWxsOwogICAgdWludDMyX3QgYWN0aW9uc19zZWxlY3Q7CiAgICB1aW50MzJfdCBhY3Rpb25zX2luZGlyZWN0OwogICAgdWludDMyX3QgYWN0aW9uc19mZjsKfTsKCi8qIEJvZHkgb2YgT0ZQTVBfTUVURVJfU1RBVFMgcmVxdWVzdCAqLwpzdHJ1Y3Qgb2ZfbWV0ZXJfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE4OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSA5OwogICAgZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyBmbGFnczsKICAgIHBhZCg0KTsKICAgIHVpbnQzMl90IG1ldGVyX2lkOwogICAgcGFkKDQpOwp9OwoKc3RydWN0IG9mX21ldGVyX3N0YXRzIHsKICAgIHVpbnQzMl90IG1ldGVyX2lkOwogICAgdWludDE2X3QgbGVuOwogICAgcGFkKDYpOwogICAgdWludDMyX3QgcmVmX2NvdW50OwogICAgdWludDY0X3QgcGFja2V0X2luX2NvdW50OwogICAgdWludDY0X3QgYnl0ZV9pbl9jb3VudDsKICAgIHVpbnQzMl90IGR1cmF0aW9uX3NlYzsKICAgIHVpbnQzMl90IGR1cmF0aW9uX25zZWM7CiAgICBsaXN0KG9mX21ldGVyX2JhbmRfc3RhdHNfdCkgYmFuZF9zdGF0czsKfTsKCi8qIEJvZHkgb2YgcmVwbHkgdG8gT0ZQTVBfTUVURVJfU1RBVFMgcmVxdWVzdCAqLwpzdHJ1Y3Qgb2ZfbWV0ZXJfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTk7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDk7CiAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKICAgIHBhZCg0KTsKICAgIGxpc3Qob2ZfbWV0ZXJfc3RhdHNfdCkgZW50cmllczsKfTsKCi8qIFN0YXRpc3RpY3MgZm9yIGVhY2ggbWV0ZXIgYmFuZCAqLwpzdHJ1Y3Qgb2ZfbWV0ZXJfYmFuZF9zdGF0cyB7CiAgICB1aW50NjRfdCBwYWNrZXRfYmFuZF9jb3VudDsKICAgIHVpbnQ2NF90IGJ5dGVfYmFuZF9jb3VudDsKfTsKCi8qIEJvZHkgb2YgT0ZQTVBfTUVURVJfREVTQyByZXF1ZXN0ICovCnN0cnVjdCBvZl9tZXRlcl9jb25maWdfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE4OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxMDsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CiAgICBwYWQoNCk7CiAgICB1aW50MzJfdCBtZXRlcl9pZDsKICAgIHBhZCg0KTsKfTsKCnN0cnVjdCBvZl9tZXRlcl9jb25maWcgewogICAgdWludDE2X3QgbGVuZ3RoOwogICAgZW51bSBvZnBfbWV0ZXJfZmxhZ3MgZmxhZ3M7CiAgICB1aW50MzJfdCBtZXRlcl9pZDsKICAgIGxpc3Qob2ZfbWV0ZXJfYmFuZF90KSBlbnRyaWVzOwp9OwoKLyogQm9keSBvZiByZXBseSB0byBPRlBNUF9NRVRFUl9ERVNDIHJlcXVlc3QgKi8Kc3RydWN0IG9mX21ldGVyX2NvbmZpZ19zdGF0c19yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMTA7CiAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKICAgIHBhZCg0KTsKICAgIGxpc3Qob2ZfbWV0ZXJfY29uZmlnX3QpIGVudHJpZXM7Cn07CgoKLyogQm9keSBvZiBPRlBNUF9NRVRFUl9GRUFUVVJFUyByZXF1ZXN0LiAqLwpzdHJ1Y3Qgb2ZfbWV0ZXJfZmVhdHVyZXNfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE4OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxMTsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CiAgICBwYWQoNCk7Cn07CgpzdHJ1Y3Qgb2ZfbWV0ZXJfZmVhdHVyZXMgewogICAgdWludDMyX3QgICAgbWF4X21ldGVyOwogICAgdWludDMyX3QgICAgYmFuZF90eXBlczsKICAgIHVpbnQzMl90ICAgIGNhcGFiaWxpdGllczsKICAgIHVpbnQ4X3QgICAgIG1heF9iYW5kczsKICAgIHVpbnQ4X3QgICAgIG1heF9jb2xvcjsKICAgIHBhZCgyKTsKICAgIHVpbnQzMl90IGZlYXR1cmVzOwogICAgcGFkKDQpOwp9OwoKLyogQm9keSBvZiByZXBseSB0byBPRlBNUF9NRVRFUl9GRUFUVVJFUyByZXF1ZXN0LiBNZXRlciBmZWF0dXJlcy4gKi8Kc3RydWN0IG9mX21ldGVyX2ZlYXR1cmVzX3N0YXRzX3JlcGx5IDogb2Zfc3RhdHNfcmVwbHkgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE5OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxMTsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcGx5X2ZsYWdzIGZsYWdzOwogICAgcGFkKDQpOwogICAgb2ZfbWV0ZXJfZmVhdHVyZXNfdCBmZWF0dXJlczsKCn07CgovKiBCb2R5IG9mIE9GUE1QX1RBQkxFX1NUQVRTIHJlcXVlc3QuICovCnN0cnVjdCBvZl90YWJsZV9zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTg7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDM7CiAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOwogICAgcGFkKDQpOwp9OwoKc3RydWN0IG9mX3RhYmxlX3N0YXRzX2VudHJ5IHsKICAgIHVpbnQ4X3QgdGFibGVfaWQ7CiAgICBwYWQoMyk7CiAgICB1aW50MzJfdCBhY3RpdmVfY291bnQ7CiAgICB1aW50NjRfdCBsb29rdXBfY291bnQ7CiAgICB1aW50NjRfdCBtYXRjaGVkX2NvdW50Owp9OwoKLyogQm9keSBvZiByZXBseSB0byBPRlBNUF9UQUJMRV9TVEFUUyByZXF1ZXN0LiAqLwpzdHJ1Y3Qgb2ZfdGFibGVfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTk7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDM7CiAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKICAgIHBhZCg0KTsKICAgIGxpc3Qob2ZfdGFibGVfc3RhdHNfZW50cnlfdCkgZW50cmllczsKfTsKCi8qIEZsb3cgbW9uaXRvciBjb21tYW5kcyAqLwplbnVtIG9mcF9mbG93X21vbml0b3JfY29tbWFuZCh3aXJlX3R5cGU9dWludDhfdCkgewogICAgT0ZQRk1DX0FERCA9IDAsCiAgICBPRlBGTUNfTU9ESUZZID0gMSwKICAgIE9GUEZNQ19ERUxFVEUgPSAyLAp9OwoKc3RydWN0IG9mX2Zsb3dfbW9uaXRvcl9lbnRyeSB7CiAgICB1aW50MzJfdCBtb25pdG9yX2lkOwogICAgdWludDMyX3Qgb3V0X3BvcnQ7CiAgICB1aW50MzJfdCBvdXRfZ3JvdXA7CiAgICBlbnVtIG9mcF9mbG93X21vbml0b3JfZmxhZ3MgZmxhZ3M7CiAgICB1aW50OF90IHRhYmxlX2lkOwogICAgZW51bSBvZnBfZmxvd19tb25pdG9yX2NvbW1hbmQgY29tbWFuZDsKICAgIG9mX21hdGNoX3QgbWF0Y2g7Cn07CgovKiBCb2R5IG9mIE9GUE1QX0ZMT1dfTU9OSVRPUiByZXF1ZXN0ICovCnN0cnVjdCBvZl9mbG93X21vbml0b3JfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE4OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxNjsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CiAgICBwYWQoNCk7CiAgICBsaXN0KG9mX2Zsb3dfbW9uaXRvcl9lbnRyeV90KSBlbnRyaWVzOwp9OwoKZW51bSBvZnBfZmxvd191cGRhdGVfZXZlbnQod2lyZV90eXBlPXVpbnQxNl90KSB7CiAgICBPRlBGTUVfSU5JVElBTCA9IDAsCiAgICBPRlBGTUVfQURERUQgPSAxLAogICAgT0ZQRk1FX1JFTU9WRUQgPSAyLAogICAgT0ZQRk1FX01PRElGSUVEID0gMywKICAgIE9GUEZNRV9BQkJSRVYgPSA0LAogICAgT0ZQRk1FX1BBVVNFRCA9IDUsCiAgICBPRlBGTUVfUkVTVU1FRCA9IDYsCn07CgpzdHJ1Y3Qgb2ZfZmxvd19tb25pdG9yX3JlcGx5X2VudHJ5IHsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIGVudW0gb2ZwX2Zsb3dfdXBkYXRlX2V2ZW50IGV2ZW50Owp9OwoKLyogQm9keSBvZiBPRlBNUF9GTE9XX01PTklUT1IgcmVwbHkgKi8Kc3RydWN0IG9mX2Zsb3dfbW9uaXRvcl9yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMTY7CiAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKICAgIHBhZCg0KTsKICAgIGxpc3Qob2ZfZmxvd19tb25pdG9yX3JlcGx5X2VudHJ5X3QpIGVudHJpZXM7Cn07CgovKiBCb2R5IG9mIE9GUE1QX1RBQkxFX0RFU0MgcmVxdWVzdC4gKi8Kc3RydWN0IG9mX3RhYmxlX2Rlc2Nfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE4OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxNDsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CiAgICBwYWQoNCk7Cn07CgovKiBCb2R5IG9mIHJlcGx5IHRvIE9GUE1QX1RBQkxFX0RFU0MgcmVxdWVzdC4gKi8Kc3RydWN0IG9mX3RhYmxlX2Rlc2Nfc3RhdHNfcmVwbHkgOiBvZl9zdGF0c19yZXBseSB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTk7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDE0OwogICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CiAgICBwYWQoNCk7CiAgICBsaXN0KG9mX3RhYmxlX2Rlc2NfdCkgZW50cmllczsKfTsKCgovKiBCb2R5IG9mIE9GUE1QX1RBQkxFX0ZFQVRVUkVTIHJlcXVlc3QuICovCnN0cnVjdCBvZl90YWJsZV9mZWF0dXJlc19zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTg7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDEyOwogICAgZW51bSBvZnBfc3RhdHNfcmVxdWVzdF9mbGFncyBmbGFnczsKICAgIHBhZCg0KTsKICAgIGxpc3Qob2ZfdGFibGVfZmVhdHVyZXNfdCkgZW50cmllczsKfTsKCnN0cnVjdCBvZl90YWJsZV9mZWF0dXJlcyB7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50OF90IHRhYmxlX2lkOwogICAgZW51bSBvZnBfdGFibGVfZmVhdHVyZXNfY29tbWFuZCBjb21tYW5kOwogICAgZW51bSBvZnBfdGFibGVfZmVhdHVyZV9mbGFnIGZlYXR1cmVzOwogICAgb2ZfdGFibGVfbmFtZV90IG5hbWU7CiAgICB1aW50NjRfdCBtZXRhZGF0YV9tYXRjaDsKICAgIHVpbnQ2NF90IG1ldGFkYXRhX3dyaXRlOwogICAgZW51bSBvZnBfdGFibGVfY29uZmlnIGNhcGFiaWxpdGllczsKICAgIHVpbnQzMl90IG1heF9lbnRyaWVzOwogICAgbGlzdChvZl90YWJsZV9mZWF0dXJlX3Byb3BfdCkgcHJvcGVydGllczsKfTsKCi8qIEJvZHkgb2YgcmVwbHkgdG8gT0ZQTVBfVEFCTEVfRkVBVFVSRVMgcmVxdWVzdC4gKi8Kc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVzX3N0YXRzX3JlcGx5IDogb2Zfc3RhdHNfcmVwbHkgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE5OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxMjsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcGx5X2ZsYWdzIGZsYWdzOwogICAgcGFkKDQpOwogICAgbGlzdChvZl90YWJsZV9mZWF0dXJlc190KSBlbnRyaWVzOwp9OwoKLyogQ29tbW9uIGhlYWRlciBmb3IgYWxsIFRhYmxlIEZlYXR1cmUgUHJvcGVydGllcyAqLwpzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSA/OwogICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7Cn07CgovKiBJbnN0cnVjdGlvbnMgcHJvcGVydHkgKi8Kc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF9pbnN0cnVjdGlvbnMgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgewogICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDA7CiAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgIC8vIEZJWE1FIENoZWNrIGlmIGluc3RydWN0aW9uX3QgaXMgcmlnaHQgZm9yIGlkcyBoZXJlCiAgICBsaXN0KG9mX2luc3RydWN0aW9uX2lkX3QpICAgaW5zdHJ1Y3Rpb25faWRzOwp9OwoKLyogSW5zdHJ1Y3Rpb24gTWlzcyBwcm9wZXJ0eSAqLwpzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2luc3RydWN0aW9uc19taXNzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAxOwogICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICBsaXN0KG9mX2luc3RydWN0aW9uX2lkX3QpICAgaW5zdHJ1Y3Rpb25faWRzOwp9OwoKLyogSW5zdHJ1Y3Rpb24gSUQgKi8Kc3RydWN0IG9mX2luc3RydWN0aW9uX2lkIHsKICAgIHVpbnQxNl90IHR5cGU7CiAgICB1aW50MTZfdCBsZW47CiAgICBvZl9vY3RldHNfdCBleHBfZGF0YTsKfTsKCi8qIE9GUFRGUFRfVEFCTEVfU1lOQ19GUk9NIHByb3BlcnR5ICovCnN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfdGFibGVfc3luY19mcm9tIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAxNjsKICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOwogICAgbGlzdChvZl91aW50OF90KSB0YWJsZV9pZHM7Cn07CgovKiBPRlBURlBUX05FWFRfVEFCTEVTIHByb3BlcnR5ICovCnN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfbmV4dF90YWJsZXMgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgewogICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDI7CiAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgIGxpc3Qob2ZfdWludDhfdCkgbmV4dF90YWJsZV9pZHM7Cn07CgovKiBORVhUX1RBQkxFU19NSVNTIHByb3BlcnR5ICovCnN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfbmV4dF90YWJsZXNfbWlzcyA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CiAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMzsKICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOwogICAgbGlzdChvZl91aW50OF90KSBuZXh0X3RhYmxlX2lkczsKfTsKCi8qIE9GUFRGUFRfV1JJVEVfQUNUSU9OUyBwcm9wZXJ0eSAqLwpzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX3dyaXRlX2FjdGlvbnMgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgewogICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDQ7CiAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgIGxpc3Qob2ZfYWN0aW9uX2lkX3QpIGFjdGlvbl9pZHM7Cn07CgovKiBGUFRGUFRfV1JJVEVfQUNUSU9OU19NSVNTIHByb3BlcnR5ICovCnN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3Bfd3JpdGVfYWN0aW9uc19taXNzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSA1OwogICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICBsaXN0KG9mX2FjdGlvbl9pZF90KSBhY3Rpb25faWRzOwp9OwoKLyogT0ZQVEZQVF9BUFBMWV9BQ1RJT05TIHByb3BlcnR5ICovCnN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfYWN0aW9ucyA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CiAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gNjsKICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOwogICAgbGlzdChvZl9hY3Rpb25faWRfdCkgYWN0aW9uX2lkczsKfTsKCi8qIE9GUFRGUFRfQVBQTFlfQUNUSU9OU19NSVNTIHByb3BlcnR5ICovCnN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfYWN0aW9uc19taXNzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSA3OwogICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICBsaXN0KG9mX2FjdGlvbl9pZF90KSBhY3Rpb25faWRzOwp9OwoKLyogQWN0aW9uIElEICovCnN0cnVjdCBvZl9hY3Rpb25faWQgewogICAgdWludDE2X3QgdHlwZTsKICAgIHVpbnQxNl90IGxlbjsKICAgIG9mX29jdGV0c190IGV4cF9kYXRhOwp9OwoKLyogT0ZQVEZQVF9NQVRDSCBwcm9wZXJ0eSAqLwpzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX21hdGNoIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSA4OwogICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICBsaXN0KG9mX3VpbnQzMl90KSBveG1faWRzOwp9OwoKLyogT0ZQVEZQVF9XSUxEQ0FSRFMgcHJvcGVydHkgKi8Kc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF93aWxkY2FyZHMgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgewogICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDEwOwogICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICBsaXN0KG9mX3VpbnQzMl90KSBveG1faWRzOwp9OwoKLyogT0ZQVEZQVF9XUklURV9TRVRGSUVMRCBwcm9wZXJ0eSAqLwpzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX3dyaXRlX3NldGZpZWxkIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAxMjsKICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOwogICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKfTsKCi8qIE9GUFRGUFRfV1JJVEVfU0VURklFTERfTUlTUyBwcm9wZXJ0eSAqLwpzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX3dyaXRlX3NldGZpZWxkX21pc3MgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgewogICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDEzOwogICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICBsaXN0KG9mX3VpbnQzMl90KSBveG1faWRzOwp9OwoKLyogT0ZQVEZQVF9BUFBMWV9TRVRGSUVMRCBwcm9wZXJ0eSAqLwpzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2FwcGx5X3NldGZpZWxkIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAxNDsKICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOwogICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKfTsKCi8qIE9GUFRGUFRfQVBQTFlfU0VURklFTERfTUlTUyBwcm9wZXJ0eSAqLwpzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2FwcGx5X3NldGZpZWxkX21pc3MgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgewogICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDE1OwogICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICBsaXN0KG9mX3VpbnQzMl90KSBveG1faWRzOwp9OwoKLyogT0ZQVEZQVF9XUklURV9DT1BZRklFTEQgcHJvcGVydHkgKi8Kc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF93cml0ZV9jb3B5ZmllbGQgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgewogICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDE4OwogICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICBsaXN0KG9mX3VpbnQzMl90KSBveG1faWRzOwp9OwoKLyogT0ZQVEZQVF9XUklURV9DT1BZRklFTERfTUlTUyBwcm9wZXJ0eSAqLwpzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX3dyaXRlX2NvcHlmaWVsZF9taXNzIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAxOTsKICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOwogICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKfTsKCi8qIE9GUFRGUFRfQVBQTFlfQ09QWUZJRUxEIHByb3BlcnR5ICovCnN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfYXBwbHlfY29weWZpZWxkIDogb2ZfdGFibGVfZmVhdHVyZV9wcm9wIHsKICAgIHVpbnQxNl90ICAgICAgICAgdHlwZSA9PSAyMDsKICAgIHVpbnQxNl90ICAgICAgICAgbGVuZ3RoOwogICAgbGlzdChvZl91aW50MzJfdCkgb3htX2lkczsKfTsKCi8qIE9GUFRGUFRfQVBQTFlfQ09QWUZJRUxEX01JU1MgcHJvcGVydHkgKi8Kc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcF9hcHBseV9jb3B5ZmllbGRfbWlzcyA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CiAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gMjE7CiAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgIGxpc3Qob2ZfdWludDMyX3QpIG94bV9pZHM7Cn07CgovKiBPRlBURlBUX1BBQ0tFVF9UWVBFUyBwcm9wZXJ0eSAqLwpzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX294bV92YWx1ZXMgewogICAgdWludDE2X3QgdHlwZSA9PSAyMjsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIG9mX29jdGV0c190IG94bV92YWx1ZXM7Cn07CgovKiBPRlBURlBUX0VYUEVSSU1FTlRFUiBwcm9wZXJ0eSAqLwpzdHJ1Y3Qgb2ZfdGFibGVfZmVhdHVyZV9wcm9wX2V4cGVyaW1lbnRlciA6IG9mX3RhYmxlX2ZlYXR1cmVfcHJvcCB7CiAgICB1aW50MTZfdCAgICAgICAgIHR5cGUgPT0gNjU1MzQ7CiAgICB1aW50MTZfdCAgICAgICAgIGxlbmd0aDsKICAgIHVpbnQzMl90ICAgICAgICAgZXhwZXJpbWVudGVyID09ID87CiAgICB1aW50MzJfdCAgICAgICAgIHN1YnR5cGU7Cn07CgovKiBPRlBURlBUX0VYUEVSSU1FTlRFUl9NSVNTIHByb3BlcnR5ICovCnN0cnVjdCBvZl90YWJsZV9mZWF0dXJlX3Byb3BfZXhwZXJpbWVudGVyX21pc3MgOiBvZl90YWJsZV9mZWF0dXJlX3Byb3AgewogICAgdWludDE2X3QgICAgICAgICB0eXBlID09IDY1NTM1OwogICAgdWludDE2X3QgICAgICAgICBsZW5ndGg7CiAgICB1aW50MzJfdCAgICAgICAgIGV4cGVyaW1lbnRlciA9PSA/OwogICAgdWludDMyX3QgICAgICAgICBzdWJ0eXBlOwp9OwoKLyoKICogTm90IHN1cHBvcnRpbmcgdGhlIGZsb3cgbW9uaXRvciBtdWx0aXBhcnQgbWVzc2FnZXMuIFRoaXMgbWVzc2FnZSBpcwogKiBwb29ybHkgZGVzaWduZWQgYmVjYXVzZSBpdCBpbmNsdWRlcyBhIHZhcmlhYmxlIGxlbmd0aCBtYXRjaCBpbnNpZGUgYQogKiBzdHJ1Y3QgKG9mcF9mbG93X21vbml0b3JfcmVxdWVzdCkgd2l0aCBubyBleHBsaWNpdCBsZW5ndGggbWVtYmVyLgogKiBJJ20gbm90IHdyaXRpbmcgdGhlIHNwZWNpYWwgY2FzZSBjb2RlIHRvIGZpZ3VyZSBvdXQgdGhlIHRvdGFsIGxlbmd0aC4KICovCgoKIC8qIFNlbmQgcGFja2V0IChjb250cm9sbGVyIC0+IGRhdGFwYXRoKS4gKi8KIHN0cnVjdCBvZl9wYWNrZXRfb3V0IDogb2ZfaGVhZGVyIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxMzsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQzMl90IGJ1ZmZlcl9pZDsKICAgIHVpbnQxNl90IGFjdGlvbnNfbGVuID09IGxlbmd0aChhY3Rpb25zKTsKICAgIHBhZCgyKTsKICAgIG9mX21hdGNoX3QgbWF0Y2g7CiAgICBsaXN0KG9mX2FjdGlvbl90KSBhY3Rpb25zOwogICAgb2Zfb2N0ZXRzX3QgZGF0YTsKfTsKCi8qIEJhcnJpZXIgbWVzc2FnZSByZXF1ZXN0ICovCnN0cnVjdCBvZl9iYXJyaWVyX3JlcXVlc3QgOiBvZl9oZWFkZXIgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDIwOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwp9OwoKLyogQmFycmllciBtZXNzYWdlIHJlcXVlc3QgKi8Kc3RydWN0IG9mX2JhcnJpZXJfcmVwbHkgOiBvZl9oZWFkZXIgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDIxOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwp9OwoKLyogUm9sZSByZXF1ZXN0ICovCnN0cnVjdCBvZl9yb2xlX3JlcXVlc3QgOiBvZl9oZWFkZXIgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDI0OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgZW51bSBvZnBfY29udHJvbGxlcl9yb2xlIHJvbGU7CiAgICB1aW50MTZfdCBzaG9ydF9pZDsKICAgIHBhZCgyKTsKICAgIHVpbnQ2NF90IGdlbmVyYXRpb25faWQ7Cn07CgovKiBSb2xlIHJlcGx5ICovCnN0cnVjdCBvZl9yb2xlX3JlcGx5IDogb2ZfaGVhZGVyIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAyNTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIGVudW0gb2ZwX2NvbnRyb2xsZXJfcm9sZSByb2xlOwogICAgdWludDE2X3Qgc2hvcnRfaWQ7CiAgICBwYWQoMik7CiAgICB1aW50NjRfdCBnZW5lcmF0aW9uX2lkOwp9OwoKLyogQnVuZGxlIGNvbnRyb2wgbWVzc2FnZSAqLwpzdHJ1Y3Qgb2ZfYnVuZGxlX2N0cmxfbXNnIDogb2ZfaGVhZGVyIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAzMzsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQzMl90IGJ1bmRsZV9pZDsKICAgIGVudW0gb2ZwX2J1bmRsZV9jdHJsX3R5cGUgYnVuZGxlX2N0cmxfdHlwZTsKICAgIGVudW0gb2ZwX2J1bmRsZV9mbGFncyBmbGFnczsKICAgIGxpc3Qob2ZfYnVuZGxlX3Byb3BfdCkgcHJvcGVydGllczsKfTsKCi8qIEJ1bmRsZSBhZGQgbWVzc2FnZSAqLwpzdHJ1Y3Qgb2ZfYnVuZGxlX2FkZF9tc2cgOiBvZl9oZWFkZXIgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDM0OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDMyX3QgYnVuZGxlX2lkOwogICAgcGFkKDEpOwogICAgZW51bSBvZnBfYnVuZGxlX2ZsYWdzIGZsYWdzOwogICAgb2ZfaGVhZGVyX3QgbWVzc2FnZTsKICAgIGxpc3Qob2ZfYnVuZGxlX3Byb3BfdCkgcHJvcGVydGllczsKfTsKCi8qIEJ1bmRsZSBwcm9wZXJ0eSB0eXBlcy4gKi8Kc3RydWN0IG9mX2J1bmRsZV9wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gPzsKICAgIHVpbnQxNl90IGxlbmd0aDsKfTsKCi8qIEJ1bmRsZSB0aW1lIHByb3BlcnR5LiAqLwpzdHJ1Y3Qgb2ZfYnVuZGxlX3Byb3BfdGltZSA6IG9mX2J1bmRsZV9wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHBhZCg0KTsKICAgIGxpc3Qob2ZfdGltZV90KSBzY2hlZHVsZWRfdGltZTsKfTsKCi8qIEV4cGVyaW1lbnRlciBidW5kbGUgcHJvcGVydHkgKi8Kc3RydWN0IG9mX2J1bmRsZV9wcm9wX2V4cGVyaW1lbnRlciA6IG9mX2J1bmRsZV9wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gNjU1MzU7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKICAgIHVpbnQzMl90IGV4cF90eXBlOwp9OwoKLyogVGltZSBGb3JtYXQuICovCnN0cnVjdCBvZl90aW1lIHsKICAgIHVpbnQ2NF90IHNlY29uZHM7CiAgICB1aW50MzJfdCBuYW5vc2Vjb25kczsKICAgIHBhZCg0KTsKfTsKCi8qIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBhc3luYyBjb25maWcgUHJvcGVydGllcyAqLwpzdHJ1Y3Qgb2ZfYXN5bmNfY29uZmlnX3Byb3AgewogICAgdWludDE2X3QgdHlwZSA9PSA/OwogICAgdWludDE2X3QgbGVuZ3RoOwp9OwoKLyogT0ZQQUNQVF9QQUNLRVRfSU5fU0xBVkUgcHJvcGVydHkgKi8Kc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX3BhY2tldF9pbl9zbGF2ZSA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMDsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IG1hc2s7Cn07CgovKiBPRlBBQ1BUX1BBQ0tFVF9JTl9NQVNURVIgcHJvcGVydHkgKi8Kc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX3BhY2tldF9pbl9tYXN0ZXIgOiBvZl9hc3luY19jb25maWdfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDE7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCBtYXNrOwp9OwoKLyogT0ZQQUNQVF9QT1JUX1NUQVRVU19TTEFWRSBwcm9wZXJ0eSAqLwpzdHJ1Y3Qgb2ZfYXN5bmNfY29uZmlnX3Byb3BfcG9ydF9zdGF0dXNfc2xhdmUgOiBvZl9hc3luY19jb25maWdfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDI7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCBtYXNrOwp9OwoKLyogT0ZQQUNQVF9QT1JUX1NUQVRVU19NQVNURVIgcHJvcGVydHkgKi8Kc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX3BvcnRfc3RhdHVzX21hc3RlciA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMzsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IG1hc2s7Cn07CgovKiBPRlBBQ1BUX0ZMT1dfUkVNT1ZFRF9TTEFWRSBwcm9wZXJ0eSAqLwpzdHJ1Y3Qgb2ZfYXN5bmNfY29uZmlnX3Byb3BfZmxvd19yZW1vdmVkX3NsYXZlIDogb2ZfYXN5bmNfY29uZmlnX3Byb3AgewogICAgdWludDE2X3QgdHlwZSA9PSA0OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgbWFzazsKfTsKCi8qIE9GUEFDUFRfRkxPV19SRU1PVkVEX01BU1RFUiBwcm9wZXJ0eSAqLwpzdHJ1Y3Qgb2ZfYXN5bmNfY29uZmlnX3Byb3BfZmxvd19yZW1vdmVkX21hc3RlciA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gNTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IG1hc2s7Cn07CgovKiBPRlBBQ1BUX1JPTEVfU1RBVFVTX1NMQVZFIHByb3BlcnR5ICovCnN0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF9yb2xlX3N0YXR1c19zbGF2ZSA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gNjsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IG1hc2s7Cn07CgovKiBPRlBBQ1BUX1JPTEVfU1RBVFVTX01BU1RFUiBwcm9wZXJ0eSAqLwpzdHJ1Y3Qgb2ZfYXN5bmNfY29uZmlnX3Byb3Bfcm9sZV9zdGF0dXNfbWFzdGVyIDogb2ZfYXN5bmNfY29uZmlnX3Byb3AgewogICAgdWludDE2X3QgdHlwZSA9PSA3OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgbWFzazsKfTsKCi8qIE9GUEFDUFRfVEFCTEVfU1RBVFVTX1NMQVZFIHByb3BlcnR5ICovCnN0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF90YWJsZV9zdGF0dXNfc2xhdmUgOiBvZl9hc3luY19jb25maWdfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDg7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCBtYXNrOwp9OwoKLyogT0ZQQUNQVF9UQUJMRV9TVEFUVVNfTUFTVEVSIHByb3BlcnR5ICovCnN0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF90YWJsZV9zdGF0dXNfbWFzdGVyIDogb2ZfYXN5bmNfY29uZmlnX3Byb3AgewogICAgdWludDE2X3QgdHlwZSA9PSA5OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgbWFzazsKfTsKCi8qIE9GUEFDUFRfUkVRVUVTVEZPUldBUkRfU0xBVkUgcHJvcGVydHkgKi8Kc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX3JlcXVlc3Rmb3J3YXJkX3NsYXZlIDogb2ZfYXN5bmNfY29uZmlnX3Byb3AgewogICAgdWludDE2X3QgdHlwZSA9PSAxMDsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IG1hc2s7Cn07CgovKiBPRlBBQ1BUX1JFUVVFU1RGT1JXQVJEX01BU1RFUiBwcm9wZXJ0eSAqLwpzdHJ1Y3Qgb2ZfYXN5bmNfY29uZmlnX3Byb3BfcmVxdWVzdGZvcndhcmRfbWFzdGVyIDogb2ZfYXN5bmNfY29uZmlnX3Byb3AgewogICAgdWludDE2X3QgdHlwZSA9PSAxMTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IG1hc2s7Cn07CgovKiBPRlBBQ1BUX0ZMT1dfU1RBVFNfU0xBVkUgcHJvcGVydHkgKi8Kc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX2Zsb3dfc3RhdHNfc2xhdmUgOiBvZl9hc3luY19jb25maWdfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDEyOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgbWFzazsKfTsKCi8qIE9GUEFDUFRfRkxPV19TVEFUU19NQVNURVIgcHJvcGVydHkgKi8Kc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX2Zsb3dfc3RhdHNfbWFzdGVyIDogb2ZfYXN5bmNfY29uZmlnX3Byb3AgewogICAgdWludDE2X3QgdHlwZSA9PSAxMzsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IG1hc2s7Cn07CgovKiBPRlBBQ1BUX0NPTlRfU1RBVFVTX1NMQVZFIHByb3BlcnR5ICovCnN0cnVjdCBvZl9hc3luY19jb25maWdfcHJvcF9jb250X3N0YXR1c19zbGF2ZSA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMTQ7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCBtYXNrOwp9OwoKLyogT0ZQQUNQVF9DT05UX1NUQVRVU19NQVNURVIgcHJvcGVydHkgKi8Kc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX2NvbnRfc3RhdHVzX21hc3RlciA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMTU7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCBtYXNrOwp9OwoKLyogT0ZQVEZQVF9FWFBFUklNRU5URVJfU0xBVkUgcHJvcGVydHkgKi8Kc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX2V4cGVyaW1lbnRlcl9zbGF2ZSA6IG9mX2FzeW5jX2NvbmZpZ19wcm9wIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMHhmZmZlOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgLy91aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKICAgIC8vdWludDMyX3QgZXhwX3R5cGU7Cn07CgovKiBPRlBURlBUX0VYUEVSSU1FTlRFUl9NQVNURVIgcHJvcGVydHkgKi8Kc3RydWN0IG9mX2FzeW5jX2NvbmZpZ19wcm9wX2V4cGVyaW1lbnRlcl9tYXN0ZXIgOiBvZl9hc3luY19jb25maWdfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIC8vdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CiAgICAvL3VpbnQzMl90IGV4cF90eXBlOwp9OwoKLyogUGFja2V0IHJlY2VpdmVkIG9uIHBvcnQgKGRhdGFwYXRoIC0+IGNvbnRyb2xsZXIpLiAqLwpzdHJ1Y3Qgb2ZfcGFja2V0X2luIDogb2ZfaGVhZGVyIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxMDsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQzMl90IGJ1ZmZlcl9pZDsKICAgIHVpbnQxNl90IHRvdGFsX2xlbjsKICAgIHVpbnQ4X3QgcmVhc29uOwogICAgdWludDhfdCB0YWJsZV9pZDsKICAgIHVpbnQ2NF90IGNvb2tpZTsKICAgIG9mX21hdGNoX3QgbWF0Y2g7CiAgICBwYWQoMik7CiAgICBvZl9vY3RldHNfdCBkYXRhOwp9OwoKLyogRmxvdyByZW1vdmVkIChkYXRhcGF0aCAtPiBjb250cm9sbGVyKS4gKi8Kc3RydWN0IG9mX2Zsb3dfcmVtb3ZlZCA6IG9mX2hlYWRlciB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTE7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50OF90IHRhYmxlX2lkOwogICAgZW51bSBvZnBfZmxvd19yZW1vdmVkX3JlYXNvbiByZWFzb247CiAgICB1aW50MTZfdCBwcmlvcml0eTsKICAgIHVpbnQxNl90IGlkbGVfdGltZW91dDsKICAgIHVpbnQxNl90IGhhcmRfdGltZW91dDsKICAgIHVpbnQ2NF90IGNvb2tpZTsKICAgIG9mX21hdGNoX3QgbWF0Y2g7CiAgICBvZl9zdGF0X3Qgc3RhdHM7Cn07CgovKiBBIHBoeXNpY2FsIHBvcnQgaGFzIGNoYW5nZWQgaW4gdGhlIGRhdGFwYXRoICovCnN0cnVjdCBvZl9wb3J0X3N0YXR1cyA6IG9mX2hlYWRlciB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTI7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICBlbnVtIG9mcF9wb3J0X3JlYXNvbiByZWFzb247CiAgICBwYWQoNyk7CiAgICBvZl9wb3J0X2Rlc2NfdCBkZXNjOwp9OwoKLyogUm9sZSBzdGF0dXMgZXZlbnQgbWVzc2FnZS4gKi8Kc3RydWN0IG9mX3JvbGVfc3RhdHVzIDogb2ZfaGVhZGVyIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAzMDsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIGVudW0gb2ZwX2NvbnRyb2xsZXJfcm9sZSByb2xlOwogICAgZW51bSBvZnBfY29udHJvbGxlcl9yb2xlX3JlYXNvbiByZWFzb247CiAgICBwYWQoMyk7CiAgICB1aW50NjRfdCBnZW5lcmF0aW9uX2lkOwogICAgbGlzdChvZl9yb2xlX3Byb3BfdCkgcHJvcGVydGllczsKfTsKCi8qIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBSb2xlIFByb3BlcnRpZXMgKi8Kc3RydWN0IG9mX3JvbGVfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09ID87CiAgICB1aW50MTZfdCBsZW5ndGg7Cn07CgovKiBFeHBlcmltZW50ZXIgcm9sZSBwcm9wZXJ0eSAqLwpzdHJ1Y3Qgb2Zfcm9sZV9wcm9wX2V4cGVyaW1lbnRlciA6IG9mX3JvbGVfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDB4ZmZmZjsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IGV4cGVyaW1lbnRlciA9PSA/OwogICAgdWludDMyX3QgZXhwX3R5cGU7Cn07CgovKiBUYWJsZSBkZXNjcmlvdGlvbiAqLwpzdHJ1Y3Qgb2ZfdGFibGVfZGVzYyB7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50OF90IHRhYmxlX2lkOwogICAgcGFkKDEpOwogICAgZW51bSBvZnBfdGFibGVfY29uZmlnIGNvbmZpZzsKICAgIGxpc3Qob2ZfdGFibGVfbW9kX3Byb3BfdCkgcHJvcGVydGllczsKfTsKCgovKiBBIHRhYmxlIGNvbmZpZyBoYXMgY2hhbmdlZCBpbiB0aGUgZGF0YXBhdGggKi8Kc3RydWN0IG9mX3RhYmxlX3N0YXR1cyA6IG9mX2hlYWRlciB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMzE7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICBlbnVtIG9mcF90YWJsZV9yZWFzb24gcmVhc29uOwogICAgcGFkKDcpOwogICAgb2ZfdGFibGVfZGVzY190IHRhYmxlOwp9OwoKLyogR3JvdXAvTWV0ZXIgcmVxdWVzdCBmb3J3YXJkaW5nLiAqLwpzdHJ1Y3Qgb2ZfcmVxdWVzdGZvcndhcmQgOiBvZl9oZWFkZXIgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDMyOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgb2ZfaGVhZGVyX3QgcmVxdWVzdDsKfTsKCi8qIE9GUFRfSEVMTE8uIFRoaXMgbWVzc2FnZSBpbmNsdWRlcyB6ZXJvIG9yIG1vcmUgaGVsbG8gZWxlbWVudHMgaGF2aW5nCiogdmFyaWFibGUgc2l6ZS4gVW5rbm93biBlbGVtZW50cyB0eXBlcyBtdXN0IGJlIGlnbm9yZWQvc2tpcHBlZCwgdG8gYWxsb3cKKiBmb3IgZnV0dXJlIGV4dGVuc2lvbnMuICovCnN0cnVjdCBvZl9oZWxsbyA6IG9mX2hlYWRlciB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMDsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIGxpc3Qob2ZfaGVsbG9fZWxlbV90KSBlbGVtZW50czsKfTsKCi8qIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBIZWxsbyBFbGVtZW50cyAqLwpzdHJ1Y3Qgb2ZfaGVsbG9fZWxlbSB7CiAgICB1aW50MTZfdCB0eXBlID09ID87CiAgICB1aW50MTZfdCBsZW5ndGg7Cn07CgovKiBWZXJzaW9uIGJpdG1hcCBIZWxsbyBFbGVtZW50ICovCnN0cnVjdCBvZl9oZWxsb19lbGVtX3ZlcnNpb25iaXRtYXAgOiBvZl9oZWxsb19lbGVtIHsKICAgIHVpbnQxNl90IHR5cGUgPT0gMTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIGxpc3Qob2ZfdWludDMyX3QpIGJpdG1hcHM7Cn07CgovKiBFQ0hPIFJFUVVFU1QgKi8Kc3RydWN0IG9mX2VjaG9fcmVxdWVzdCA6IG9mX2hlYWRlciB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMjsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIG9mX29jdGV0c190IGRhdGE7Cn07CgovKiBFQ0hPIFJFUExZICovCnN0cnVjdCBvZl9lY2hvX3JlcGx5IDogb2ZfaGVhZGVyIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAzOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgb2Zfb2N0ZXRzX3QgZGF0YTsKfTsKCi8qIE9GUFRfRVJST1I6IEVycm9yIG1lc3NhZ2UuICovCnN0cnVjdCBvZl9lcnJvcl9tc2cgOiBvZl9oZWFkZXIgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSA/Owp9OwoKLyogRXhwZXJpbWVudGVyIGV4dGVuc2lvbiBtZXNzYWdlLiAqLwpzdHJ1Y3Qgb2ZfZXhwZXJpbWVudGVyIDogb2ZfaGVhZGVyIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSA0OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CiAgICB1aW50MzJfdCBzdWJ0eXBlOwogICAgb2Zfb2N0ZXRzX3QgZGF0YTsKfTsKCi8qIEZlYXR1cmVzIFJlcXVlc3QgKi8Kc3RydWN0IG9mX2ZlYXR1cmVzX3JlcXVlc3QgOiBvZl9oZWFkZXIgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDU7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7Cn07CgovKiBGZWF0dXJlcyBSZXBseSAgKG9mcF9zd2l0Y2hfZmVhdHVyZXMpICovCnN0cnVjdCBvZl9mZWF0dXJlc19yZXBseSA6IG9mX2hlYWRlciB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gNjsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQ2NF90IGRhdGFwYXRoX2lkOwogICAgdWludDMyX3Qgbl9idWZmZXJzOwogICAgdWludDhfdCBuX3RhYmxlczsKICAgIHVpbnQ4X3QgYXV4aWxpYXJ5X2lkOwogICAgcGFkKDIpOwogICAgZW51bSBvZnBfY2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKICAgIHVpbnQzMl90IHJlc2VydmVkOwp9OwoKLyogR2V0IENvbmZpZ3VyYXRpb24gTWVzc2FnZSAqLwpzdHJ1Y3Qgb2ZfZ2V0X2NvbmZpZ19yZXF1ZXN0IDogb2ZfaGVhZGVyIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSA3OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwp9OwoKLyogR2V0IENvbmZpZ3VyYXRpb24gUmVwbHkgKG9mcF9zd2l0Y2hfY29uZmlnKSAqLwpzdHJ1Y3Qgb2ZfZ2V0X2NvbmZpZ19yZXBseSA6IG9mX2hlYWRlciB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gODsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIGVudW0gb2ZwX2NvbmZpZ19mbGFncyBmbGFnczsKICAgIHVpbnQxNl90IG1pc3Nfc2VuZF9sZW47Cn07CgovKiBTZXQgQ29uZmlndXJhdGlvbiBNZXNzYWdlICovCnN0cnVjdCBvZl9zZXRfY29uZmlnIDogb2ZfaGVhZGVyIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSA5OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgZW51bSBvZnBfY29uZmlnX2ZsYWdzIGZsYWdzOwogICAgdWludDE2X3QgbWlzc19zZW5kX2xlbjsKfTsKCi8qIEZsb3cgQWRkIE1lc3NhZ2UgKi8Kc3RydWN0IG9mX2Zsb3dfYWRkIDogb2ZfZmxvd19tb2QgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE0OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDY0X3QgY29va2llOwogICAgdWludDY0X3QgY29va2llX21hc2s7CiAgICB1aW50OF90IHRhYmxlX2lkOwogICAgb2ZfZm1fY21kX3QgX2NvbW1hbmQgPT0gMDsKICAgIHVpbnQxNl90IGlkbGVfdGltZW91dDsKICAgIHVpbnQxNl90IGhhcmRfdGltZW91dDsKICAgIHVpbnQxNl90IHByaW9yaXR5OwogICAgdWludDMyX3QgYnVmZmVyX2lkOwogICAgb2ZfcG9ydF9ub190IG91dF9wb3J0OwogICAgdWludDMyX3Qgb3V0X2dyb3VwOwogICAgZW51bSBvZnBfZmxvd19tb2RfZmxhZ3MgZmxhZ3M7CiAgICB1aW50MTZfdCBpbXBvcnRhbmNlOwogICAgb2ZfbWF0Y2hfdCBtYXRjaDsKICAgIGxpc3Qob2ZfaW5zdHJ1Y3Rpb25fdCkgaW5zdHJ1Y3Rpb25zOwp9OwoKLyogRmxvdyBNb2RpZnkgTWVzc2FnZSAqLwpzdHJ1Y3Qgb2ZfZmxvd19tb2RpZnkgOiBvZl9mbG93X21vZCB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTQ7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50NjRfdCBjb29raWU7CiAgICB1aW50NjRfdCBjb29raWVfbWFzazsKICAgIHVpbnQ4X3QgdGFibGVfaWQ7CiAgICBvZl9mbV9jbWRfdCBfY29tbWFuZCA9PSAxOwogICAgdWludDE2X3QgaWRsZV90aW1lb3V0OwogICAgdWludDE2X3QgaGFyZF90aW1lb3V0OwogICAgdWludDE2X3QgcHJpb3JpdHk7CiAgICB1aW50MzJfdCBidWZmZXJfaWQ7CiAgICBvZl9wb3J0X25vX3Qgb3V0X3BvcnQ7CiAgICB1aW50MzJfdCBvdXRfZ3JvdXA7CiAgICBlbnVtIG9mcF9mbG93X21vZF9mbGFncyBmbGFnczsKICAgIHVpbnQxNl90IGltcG9ydGFuY2U7CiAgICBvZl9tYXRjaF90IG1hdGNoOwogICAgbGlzdChvZl9pbnN0cnVjdGlvbl90KSBpbnN0cnVjdGlvbnM7Cn07CgovKiBGbG93IE1vZGlmeSBTdHJpY3QgTWVzc2FnZSAqLwpzdHJ1Y3Qgb2ZfZmxvd19tb2RpZnlfc3RyaWN0IDogb2ZfZmxvd19tb2QgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE0OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDY0X3QgY29va2llOwogICAgdWludDY0X3QgY29va2llX21hc2s7CiAgICB1aW50OF90IHRhYmxlX2lkOwogICAgb2ZfZm1fY21kX3QgX2NvbW1hbmQgPT0gMjsKICAgIHVpbnQxNl90IGlkbGVfdGltZW91dDsKICAgIHVpbnQxNl90IGhhcmRfdGltZW91dDsKICAgIHVpbnQxNl90IHByaW9yaXR5OwogICAgdWludDMyX3QgYnVmZmVyX2lkOwogICAgb2ZfcG9ydF9ub190IG91dF9wb3J0OwogICAgdWludDMyX3Qgb3V0X2dyb3VwOwogICAgZW51bSBvZnBfZmxvd19tb2RfZmxhZ3MgZmxhZ3M7CiAgICB1aW50MTZfdCBpbXBvcnRhbmNlOwogICAgb2ZfbWF0Y2hfdCBtYXRjaDsKICAgIGxpc3Qob2ZfaW5zdHJ1Y3Rpb25fdCkgaW5zdHJ1Y3Rpb25zOwp9OwoKLyogRmxvdyBEZWxldGUgTWVzc2FnZSAqLwpzdHJ1Y3Qgb2ZfZmxvd19kZWxldGUgOiBvZl9mbG93X21vZCB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTQ7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50NjRfdCBjb29raWU7CiAgICB1aW50NjRfdCBjb29raWVfbWFzazsKICAgIHVpbnQ4X3QgdGFibGVfaWQ7CiAgICBvZl9mbV9jbWRfdCBfY29tbWFuZCA9PSAzOwogICAgdWludDE2X3QgaWRsZV90aW1lb3V0OwogICAgdWludDE2X3QgaGFyZF90aW1lb3V0OwogICAgdWludDE2X3QgcHJpb3JpdHk7CiAgICB1aW50MzJfdCBidWZmZXJfaWQ7CiAgICBvZl9wb3J0X25vX3Qgb3V0X3BvcnQ7CiAgICB1aW50MzJfdCBvdXRfZ3JvdXA7CiAgICBlbnVtIG9mcF9mbG93X21vZF9mbGFncyBmbGFnczsKICAgIHVpbnQxNl90IGltcG9ydGFuY2U7CiAgICBvZl9tYXRjaF90IG1hdGNoOwogICAgbGlzdChvZl9pbnN0cnVjdGlvbl90KSBpbnN0cnVjdGlvbnM7Cn07CgovKiBGbG93IERlbGV0ZSBTdHJpY3QgTWVzc2FnZSAqLwpzdHJ1Y3Qgb2ZfZmxvd19kZWxldGVfc3RyaWN0IDogb2ZfZmxvd19tb2QgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE0OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDY0X3QgY29va2llOwogICAgdWludDY0X3QgY29va2llX21hc2s7CiAgICB1aW50OF90IHRhYmxlX2lkOwogICAgb2ZfZm1fY21kX3QgX2NvbW1hbmQgPT0gNDsKICAgIHVpbnQxNl90IGlkbGVfdGltZW91dDsKICAgIHVpbnQxNl90IGhhcmRfdGltZW91dDsKICAgIHVpbnQxNl90IHByaW9yaXR5OwogICAgdWludDMyX3QgYnVmZmVyX2lkOwogICAgb2ZfcG9ydF9ub190IG91dF9wb3J0OwogICAgdWludDMyX3Qgb3V0X2dyb3VwOwogICAgZW51bSBvZnBfZmxvd19tb2RfZmxhZ3MgZmxhZ3M7CiAgICB1aW50MTZfdCBpbXBvcnRhbmNlOwogICAgb2ZfbWF0Y2hfdCBtYXRjaDsKICAgIGxpc3Qob2ZfaW5zdHJ1Y3Rpb25fdCkgaW5zdHJ1Y3Rpb25zOwp9OwoKLyogR3JvdXAgQWRkIG1lc3NhZ2UgKi8Kc3RydWN0IG9mX2dyb3VwX2FkZCA6IG9mX2dyb3VwX21vZCB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTU7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICBlbnVtIG9mcF9ncm91cF9tb2RfY29tbWFuZCBjb21tYW5kID09IDA7CiAgICBlbnVtIG9mcF9ncm91cF90eXBlIGdyb3VwX3R5cGU7CiAgICBwYWQoMSk7CiAgICB1aW50MzJfdCBncm91cF9pZDsKICAgIHVpbnQxNl90IGJ1Y2tldF9hcnJheV9sZW4gPT0gbGVuZ3RoKGJ1Y2tldHMpOwogICAgcGFkKDIpOwogICAgZW51bSBvZnBfZ3JvdXBfYnVja2V0IGNvbW1hbmRfYnVja2V0X2lkOwogICAgbGlzdChvZl9idWNrZXRfdCkgYnVja2V0czsKICAgIGxpc3Qob2ZfZ3JvdXBfcHJvcF90KSBwcm9wZXJ0aWVzOwp9OwoKLyogR3JvdXAgTW9kaWZ5IE1lc3NhZ2UgKi8Kc3RydWN0IG9mX2dyb3VwX21vZGlmeSA6IG9mX2dyb3VwX21vZCB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTU7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICBlbnVtIG9mcF9ncm91cF9tb2RfY29tbWFuZCBjb21tYW5kID09IDE7CiAgICBlbnVtIG9mcF9ncm91cF90eXBlIGdyb3VwX3R5cGU7CiAgICBwYWQoMSk7CiAgICB1aW50MzJfdCBncm91cF9pZDsKICAgIHVpbnQxNl90IGJ1Y2tldF9hcnJheV9sZW4gPT0gbGVuZ3RoKGJ1Y2tldHMpOwogICAgcGFkKDIpOwogICAgZW51bSBvZnBfZ3JvdXBfYnVja2V0IGNvbW1hbmRfYnVja2V0X2lkOwogICAgbGlzdChvZl9idWNrZXRfdCkgYnVja2V0czsKICAgIGxpc3Qob2ZfZ3JvdXBfcHJvcF90KSBwcm9wZXJ0aWVzOwp9OwoKLyogR3JvdXAgRGVsZXRlIE1lc3NhZ2UgKi8Kc3RydWN0IG9mX2dyb3VwX2RlbGV0ZSA6IG9mX2dyb3VwX21vZCB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTU7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICBlbnVtIG9mcF9ncm91cF9tb2RfY29tbWFuZCBjb21tYW5kID09IDI7CiAgICBlbnVtIG9mcF9ncm91cF90eXBlIGdyb3VwX3R5cGU7CiAgICBwYWQoMSk7CiAgICB1aW50MzJfdCBncm91cF9pZDsKICAgIHVpbnQxNl90IGJ1Y2tldF9hcnJheV9sZW4gPT0gbGVuZ3RoKGJ1Y2tldHMpOwogICAgcGFkKDIpOwogICAgZW51bSBvZnBfZ3JvdXBfYnVja2V0IGNvbW1hbmRfYnVja2V0X2lkOwogICAgbGlzdChvZl9idWNrZXRfdCkgYnVja2V0czsKICAgIGxpc3Qob2ZfZ3JvdXBfcHJvcF90KSBwcm9wZXJ0aWVzOwp9OwoKLyogR3JvdXAgSW5zZXJ0IEJ1Y2tldCBNZXNzYWdlICovCnN0cnVjdCBvZl9ncm91cF9pbnNlcnRfYnVja2V0IDogb2ZfZ3JvdXBfbW9kIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxNTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIGVudW0gb2ZwX2dyb3VwX21vZF9jb21tYW5kIGNvbW1hbmQgPT0gMzsKICAgIGVudW0gb2ZwX2dyb3VwX3R5cGUgZ3JvdXBfdHlwZTsKICAgIHBhZCgxKTsKICAgIHVpbnQzMl90IGdyb3VwX2lkOwogICAgdWludDE2X3QgYnVja2V0X2FycmF5X2xlbiA9PSBsZW5ndGgoYnVja2V0cyk7CiAgICBwYWQoMik7CiAgICBlbnVtIG9mcF9ncm91cF9idWNrZXQgY29tbWFuZF9idWNrZXRfaWQ7CiAgICBsaXN0KG9mX2J1Y2tldF90KSBidWNrZXRzOwogICAgbGlzdChvZl9ncm91cF9wcm9wX3QpIHByb3BlcnRpZXM7Cn07CgovKiBHcm91cCBSZW1vdmUgQnVja2V0IE1lc3NhZ2UgKi8Kc3RydWN0IG9mX2dyb3VwX3JlbW92ZV9idWNrZXQgOiBvZl9ncm91cF9tb2QgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE1OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgZW51bSBvZnBfZ3JvdXBfbW9kX2NvbW1hbmQgY29tbWFuZCA9PSA1OwogICAgZW51bSBvZnBfZ3JvdXBfdHlwZSBncm91cF90eXBlOwogICAgcGFkKDEpOwogICAgdWludDMyX3QgZ3JvdXBfaWQ7CiAgICB1aW50MTZfdCBidWNrZXRfYXJyYXlfbGVuID09IGxlbmd0aChidWNrZXRzKTsKICAgIHBhZCgyKTsKICAgIGVudW0gb2ZwX2dyb3VwX2J1Y2tldCBjb21tYW5kX2J1Y2tldF9pZDsKICAgIGxpc3Qob2ZfYnVja2V0X3QpIGJ1Y2tldHM7CiAgICBsaXN0KG9mX2dyb3VwX3Byb3BfdCkgcHJvcGVydGllczsKfTsKCi8qIEhlbGxvIEZhaWxlZCBFcnJvciBNZXNzYWdlICovCnN0cnVjdCBvZl9oZWxsb19mYWlsZWRfZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMDsKICAgIGVudW0gb2ZwX2hlbGxvX2ZhaWxlZF9jb2RlIGNvZGU7CiAgICBvZl9vY3RldHNfdCBkYXRhOwp9OwoKLyogQmFkIFJlcXVlc3QgRXJyb3IgTWVzc2FnZSAqLwpzdHJ1Y3Qgb2ZfYmFkX3JlcXVlc3RfZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMTsKICAgIGVudW0gb2ZwX2JhZF9yZXF1ZXN0X2NvZGUgY29kZTsKICAgIG9mX29jdGV0c190IGRhdGE7Cn07CgovKiBCYWQgQWN0aW9uIEVycm9yIE1lc3NhZ2UgKi8Kc3RydWN0IG9mX2JhZF9hY3Rpb25fZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMjsKICAgIGVudW0gb2ZwX2JhZF9hY3Rpb25fY29kZSBjb2RlOwogICAgb2Zfb2N0ZXRzX3QgZGF0YTsKfTsKCi8qIEJhZCBJbnN0cnVjdGlvbiBFcnJvciBNZXNzYWdlICovCnN0cnVjdCBvZl9iYWRfaW5zdHJ1Y3Rpb25fZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMzsKICAgIGVudW0gb2ZwX2JhZF9pbnN0cnVjdGlvbl9jb2RlIGNvZGU7CiAgICBvZl9vY3RldHNfdCBkYXRhOwp9OwoKLyogQmFkIE1hdGNoIEVycm9yIE1lc3NhZ2UgKi8Kc3RydWN0IG9mX2JhZF9tYXRjaF9lcnJvcl9tc2cgOiBvZl9lcnJvcl9tc2cgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSA0OwogICAgZW51bSBvZnBfYmFkX21hdGNoX2NvZGUgY29kZTsKICAgIG9mX29jdGV0c190IGRhdGE7Cn07CgovKiBGbG93IE1vZCBGYWlsZWQgRXJyb3IgTWVzc2FnZSAqLwpzdHJ1Y3Qgb2ZfZmxvd19tb2RfZmFpbGVkX2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQxNl90IGVycl90eXBlID09IDU7CiAgICBlbnVtIG9mcF9mbG93X21vZF9mYWlsZWRfY29kZSBjb2RlOwogICAgb2Zfb2N0ZXRzX3QgZGF0YTsKfTsKCi8qIEdyb3VwIE1vZCBGYWlsZWQgRXJyb3IgTWVzc2FnZSAqLwpzdHJ1Y3Qgb2ZfZ3JvdXBfbW9kX2ZhaWxlZF9lcnJvcl9tc2cgOiBvZl9lcnJvcl9tc2cgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSA2OwogICAgZW51bSBvZnBfZ3JvdXBfbW9kX2ZhaWxlZF9jb2RlIGNvZGU7CiAgICBvZl9vY3RldHNfdCBkYXRhOwp9OwoKLyogUG9ydCBNb2QgRmFpbGVkIEVycm9yIE1lc3NhZ2UgKi8Kc3RydWN0IG9mX3BvcnRfbW9kX2ZhaWxlZF9lcnJvcl9tc2cgOiBvZl9lcnJvcl9tc2cgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSA3OwogICAgZW51bSBvZnBfcG9ydF9tb2RfZmFpbGVkX2NvZGUgY29kZTsKICAgIG9mX29jdGV0c190IGRhdGE7Cn07CgovKiBUYWJsZSBNb2QgRmFpbGVkIEVycm9yIE1lc3NhZ2UgKi8Kc3RydWN0IG9mX3RhYmxlX21vZF9mYWlsZWRfZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3QgZXJyX3R5cGUgPT0gODsKICAgIGVudW0gb2ZwX3RhYmxlX21vZF9mYWlsZWRfY29kZSBjb2RlOwogICAgb2Zfb2N0ZXRzX3QgZGF0YTsKfTsKCi8qIFF1ZXVlIE9wIEZhaWxlZCBFcnJvciBNZXNzYWdlICovCnN0cnVjdCBvZl9xdWV1ZV9vcF9mYWlsZWRfZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3QgZXJyX3R5cGUgPT0gOTsKICAgIGVudW0gb2ZwX3F1ZXVlX29wX2ZhaWxlZF9jb2RlIGNvZGU7CiAgICBvZl9vY3RldHNfdCBkYXRhOwp9OwoKLyogU3dpdGNoIENvbmZpZyBGYWlsZWQgRXJyb3IgTWVzc2FnZSAqLwpzdHJ1Y3Qgb2Zfc3dpdGNoX2NvbmZpZ19mYWlsZWRfZXJyb3JfbXNnIDogb2ZfZXJyb3JfbXNnIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3QgZXJyX3R5cGUgPT0gMTA7CiAgICBlbnVtIG9mcF9zd2l0Y2hfY29uZmlnX2ZhaWxlZF9jb2RlIGNvZGU7CiAgICBvZl9vY3RldHNfdCBkYXRhOwp9OwoKLyogUm9sZSBSZXF1ZXN0IEZhaWxlZCBFcnJvciBNZXNzYWdlICovCnN0cnVjdCBvZl9yb2xlX3JlcXVlc3RfZmFpbGVkX2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQxNl90IGVycl90eXBlID09IDExOwogICAgZW51bSBvZnBfcm9sZV9yZXF1ZXN0X2ZhaWxlZF9jb2RlIGNvZGU7CiAgICBvZl9vY3RldHNfdCBkYXRhOwp9OwoKLyogTWV0ZXIgTW9kIEZhaWxlZCBFcnJvciBNZXNzYWdlICovCnN0cnVjdCBvZl9tZXRlcl9tb2RfZmFpbGVkX2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQxNl90IGVycl90eXBlID09IDEyOwogICAgZW51bSBvZnBfbWV0ZXJfbW9kX2ZhaWxlZF9jb2RlIGNvZGU7CiAgICBvZl9vY3RldHNfdCBkYXRhOwp9OwoKLyogVGFibGUgRmVhdHVyZXMgRmFpbGVkIEVycm9yIE1lc3NhZ2UgKi8Kc3RydWN0IG9mX3RhYmxlX2ZlYXR1cmVzX2ZhaWxlZF9lcnJvcl9tc2cgOiBvZl9lcnJvcl9tc2cgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSAxMzsKICAgIGVudW0gb2ZwX3RhYmxlX2ZlYXR1cmVzX2ZhaWxlZF9jb2RlIGNvZGU7CiAgICBvZl9vY3RldHNfdCBkYXRhOwp9OwoKLyogQmFkIFByb3BlcnR5IEVycm9yIE1lc3NhZ2UgKi8Kc3RydWN0IG9mX2JhZF9wcm9wZXJ0eV9lcnJvcl9tc2cgOiBvZl9lcnJvcl9tc2cgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSAxNDsKICAgIGVudW0gb2ZwX2JhZF9wcm9wZXJ0eV9jb2RlIGNvZGU7CiAgICBvZl9vY3RldHNfdCBkYXRhOwp9OwoKLyogQXN5bmMgQ29uZmlnIEZhaWxlZCBFcnJvciBNZXNzYWdlICovCnN0cnVjdCBvZl9hc3luY19jb25maWdfZmFpbGVkX2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQxNl90IGVycl90eXBlID09IDE1OwogICAgZW51bSBvZnBfYXN5bmNfY29uZmlnX2ZhaWxlZF9jb2RlIGNvZGU7CiAgICBvZl9vY3RldHNfdCBkYXRhOwp9OwoKLyogRmxvdyBNb25pdG9yIEZhaWxlZCBFcnJvciBNZXNzYWdlICovCnN0cnVjdCBvZl9mbG93X21vbml0b3JfZmFpbGVkX2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQxNl90IGVycl90eXBlID09IDE2OwogICAgZW51bSBvZnBfZmxvd19tb25pdG9yX2ZhaWxlZF9jb2RlIGNvZGU7CiAgICBvZl9vY3RldHNfdCBkYXRhOwp9OwoKLyogQnVuZGxlIEZhaWxlZCBFcnJvciBNZXNzYWdlICovCnN0cnVjdCBvZl9idW5kbGVfZmFpbGVkX2Vycm9yX21zZyA6IG9mX2Vycm9yX21zZyB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQxNl90IGVycl90eXBlID09IDE3OwogICAgZW51bSBvZnBfYnVuZGxlX2ZhaWxlZF9jb2RlIGNvZGU7CiAgICBvZl9vY3RldHNfdCBkYXRhOwp9OwoKLyogRXhwZXJpbWVudGVyIEVycm9yIE1lc3NhZ2UgKi8Kc3RydWN0IG9mX2V4cGVyaW1lbnRlcl9lcnJvcl9tc2cgOiBvZl9lcnJvcl9tc2cgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBlcnJfdHlwZSA9PSAweGZmZmY7CiAgICB1aW50MTZfdCBzdWJ0eXBlOwogICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CiAgICBvZl9vY3RldHNfdCBkYXRhOwp9OwoKLyogR2V0IEFzeW5jIFJlcXVlc3QgTWVzc2FnZSAqLwpzdHJ1Y3Qgb2ZfYXN5bmNfZ2V0X3JlcXVlc3QgOiBvZl9oZWFkZXIgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDI2OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgbGlzdChvZl9hc3luY19jb25maWdfcHJvcF90KSBwcm9wZXJ0aWVzOwp9OwoKLyogR2V0IEFzeW5jIFJlcGx5IE1lc3NhZ2UgKi8Kc3RydWN0IG9mX2FzeW5jX2dldF9yZXBseSA6IG9mX2hlYWRlciB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMjc7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICBsaXN0KG9mX2FzeW5jX2NvbmZpZ19wcm9wX3QpIHByb3BlcnRpZXM7Cn07CgovKiBTZXQgQXN5bmMgTWVzc2FnZSAqLwpzdHJ1Y3Qgb2ZfYXN5bmNfc2V0IDogb2ZfaGVhZGVyIHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAyODsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIGxpc3Qob2ZfYXN5bmNfY29uZmlnX3Byb3BfdCkgcHJvcGVydGllczsKfTsKCi8qIGRlc2NyaXB0aW9uIHN0YXRpc3RpYyByZXF1ZXN0ICovCnN0cnVjdCBvZl9kZXNjX3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxODsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMDsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CiAgICBwYWQoNCk7Cn07CgovKiBkZXNjcmlwdGlvbiBzdGF0aXN0aWMgcmVwbHkgKG9mcF9kZXNjKSAqLwpzdHJ1Y3Qgb2ZfZGVzY19zdGF0c19yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMDsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcGx5X2ZsYWdzIGZsYWdzOwogICAgcGFkKDQpOwogICAgb2ZfZGVzY19zdHJfdCBtZnJfZGVzYzsKICAgIG9mX2Rlc2Nfc3RyX3QgaHdfZGVzYzsKICAgIG9mX2Rlc2Nfc3RyX3Qgc3dfZGVzYzsKICAgIG9mX3NlcmlhbF9udW1fdCBzZXJpYWxfbnVtOwogICAgb2ZfZGVzY19zdHJfdCBkcF9kZXNjOwp9OwoKLyogY29udHJvbGxlciBzdGF0dXMgc3RhdGlzdGljIHJlcXVlc3QgKi8Kc3RydWN0IG9mX2NvbnRyb2xsZXJfc3RhdHVzX3N0YXRzX3JlcXVlc3QgOiBvZl9zdGF0c19yZXF1ZXN0IHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxODsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMTg7CiAgICBlbnVtIG9mcF9zdGF0c19yZXF1ZXN0X2ZsYWdzIGZsYWdzOwogICAgcGFkKDQpOwp9OwoKLypjb250cm9sbGVyIHN0YXR1cyBzdGF0aXN0aWMgcmVwbHkgKi8Kc3RydWN0IG9mX2NvbnRyb2xsZXJfc3RhdHVzX3N0YXRzX3JlcGx5IDogb2Zfc3RhdHNfcmVwbHkgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE5OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxODsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcGx5X2ZsYWdzIGZsYWdzOwogICAgcGFkKDQpOwogICAgbGlzdChvZl9jb250cm9sbGVyX3N0YXR1c19lbnRyeV90KSBjb250cm9sbGVyX3N0YXR1czsKfTsKCi8qIEJ1bmRsZSBmZWF0dXJlcyBwcm9wZXJ0aWVzIGhlYWRlciAqLwpzdHJ1Y3Qgb2ZfYnVuZGxlX2ZlYXR1cmVzX3Byb3AgewogICAgdWludDE2X3QgdHlwZSA9PSA/OwogICAgdWludDE2X3QgbGVuZ3RoOwp9OwoKLyogQnVuZGxlIGZlYXR1cmVzIHN0YXRpc3RpYyByZXF1ZXN0ICovCnN0cnVjdCBvZl9idW5kbGVfZmVhdHVyZXNfc3RhdHNfcmVxdWVzdCA6IG9mX3N0YXRzX3JlcXVlc3QgewogICAgdWludDhfdCB2ZXJzaW9uOwogICAgdWludDhfdCB0eXBlID09IDE4OwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgdWludDMyX3QgeGlkOwogICAgdWludDE2X3Qgc3RhdHNfdHlwZSA9PSAxOTsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CiAgICBwYWQoNCk7CiAgICBlbnVtIG9mcF9idW5kbGVfZmVhdHVyZV9mbGFncyBmZWF0dXJlX3JlcXVlc3RfZmxhZ3M7CiAgICBwYWQoNCk7CiAgICBsaXN0KG9mX2J1bmRsZV9mZWF0dXJlc19wcm9wX3QpIHByb3BlcnRpZXM7Cn07CgovKkJ1bmRsZSBmZWF0dXJlcyBzdGF0aXN0aWMgcmVwbHkgKi8Kc3RydWN0IG9mX2J1bmRsZV9mZWF0dXJlc19zdGF0c19yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMTk7CiAgICBlbnVtIG9mcF9zdGF0c19yZXBseV9mbGFncyBmbGFnczsKICAgIHBhZCg0KTsKICAgIGVudW0gb2ZwX2J1bmRsZV9mZWF0dXJlX2ZsYWdzIGNhcGFiaWxpdGllczsKICAgIHBhZCg2KTsKICAgIGxpc3Qob2ZfYnVuZGxlX2ZlYXR1cmVzX3Byb3BfdCkgcHJvcGVydGllczsKfTsKCi8qIEJ1bmRsZSB0aW1lIGZlYXR1cmVzLiAqLwpzdHJ1Y3Qgb2ZfYnVuZGxlX2ZlYXR1cmVzX3Byb3BfdGltZSA6IG9mX2J1bmRsZV9mZWF0dXJlc19wcm9wewogICAgdWludDE2X3QgdHlwZSA9PSAxOwogICAgdWludDE2X3QgbGVuZ3RoOwogICAgcGFkKDQpOwogICAgb2ZfdGltZV90IHNjaGVkX2FjY3VyYWN5OwogICAgb2ZfdGltZV90IHNjaGVkX21heF9mdXR1cmU7CiAgICBvZl90aW1lX3Qgc2NoZWRfbWF4X3Bhc3Q7CiAgICBvZl90aW1lX3QgdGltZXN0YW1wOwp9OwoKLyogRXhwZXJpbWVudGVyIHN0YXRzIHJlcXVlc3QgKi8Kc3RydWN0IG9mX2V4cGVyaW1lbnRlcl9zdGF0c19yZXF1ZXN0IDogb2Zfc3RhdHNfcmVxdWVzdCB7CiAgICB1aW50OF90IHZlcnNpb247CiAgICB1aW50OF90IHR5cGUgPT0gMTg7CiAgICB1aW50MTZfdCBsZW5ndGg7CiAgICB1aW50MzJfdCB4aWQ7CiAgICB1aW50MTZfdCBzdGF0c190eXBlID09IDB4ZmZmZjsKICAgIGVudW0gb2ZwX3N0YXRzX3JlcXVlc3RfZmxhZ3MgZmxhZ3M7CiAgICBwYWQoNCk7CiAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKICAgIHVpbnQzMl90IHN1YnR5cGU7Cn07CgovKiBFeHBlcmltZW50ZXIgc3RhdHMgcmVwbHkgKi8Kc3RydWN0IG9mX2V4cGVyaW1lbnRlcl9zdGF0c19yZXBseSA6IG9mX3N0YXRzX3JlcGx5IHsKICAgIHVpbnQ4X3QgdmVyc2lvbjsKICAgIHVpbnQ4X3QgdHlwZSA9PSAxOTsKICAgIHVpbnQxNl90IGxlbmd0aDsKICAgIHVpbnQzMl90IHhpZDsKICAgIHVpbnQxNl90IHN0YXRzX3R5cGUgPT0gMHhmZmZmOwogICAgZW51bSBvZnBfc3RhdHNfcmVwbHlfZmxhZ3MgZmxhZ3M7CiAgICBwYWQoNCk7CiAgICB1aW50MzJfdCBleHBlcmltZW50ZXIgPT0gPzsKICAgIHVpbnQzMl90IHN1YnR5cGU7Cn07CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIDEuMy4xIFF1ZXVlIFN0cnVjdHVyZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpzdHJ1Y3Qgb2ZfcXVldWVfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09ID87CiAgICB1aW50MTZfdCBsZW47CiAgICBwYWQoNCk7Cn07CgpzdHJ1Y3Qgb2ZfcXVldWVfcHJvcF9taW5fcmF0ZSA6IG9mX3F1ZXVlX3Byb3AgewogICAgdWludDE2X3QgdHlwZSA9PSAxOwogICAgdWludDE2X3QgbGVuOwogICAgcGFkKDQpOwogICAgdWludDE2X3QgcmF0ZTsKICAgIHBhZCg2KTsKfTsKCnN0cnVjdCBvZl9xdWV1ZV9wcm9wX21heF9yYXRlIDogb2ZfcXVldWVfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDI7CiAgICB1aW50MTZfdCBsZW47CiAgICBwYWQoNCk7CiAgICB1aW50MTZfdCByYXRlOwogICAgcGFkKDYpOwp9OwoKc3RydWN0IG9mX3F1ZXVlX3Byb3BfZXhwZXJpbWVudGVyIDogb2ZfcXVldWVfcHJvcCB7CiAgICB1aW50MTZfdCB0eXBlID09IDY1NTM1OwogICAgdWludDE2X3QgbGVuOwogICAgcGFkKDQpOwogICAgdWludDMyX3QgZXhwZXJpbWVudGVyID09ID87CiAgICBwYWQoNCk7CiAgICBvZl9vY3RldHNfdCBkYXRhOwp9OwoKc3RydWN0IG9mX3BhY2tldF9xdWV1ZSB7CiAgICB1aW50MzJfdCBxdWV1ZV9pZDsKICAgIG9mX3BvcnRfbm9fdCBwb3J0OwogICAgdWludDE2X3QgbGVuOwogICAgcGFkKDYpOwogICAgbGlzdChvZl9xdWV1ZV9wcm9wX3QpIHByb3BlcnRpZXM7Cn07CgoKCgo=