LyoKICogIFUtYm9vdCAtIGkzODYgU3RhcnR1cCBDb2RlCiAqCiAqICBDb3B5cmlnaHQgKGMpIDIwMDIJT21pY3JvbiBDZXRpIEFCLCBEYW5pZWwgRW5nc3Ry9m0gPGRlbmFpZWxAb21pY3Jvbi5zZT4KICoKICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKICogcHJvamVjdC4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKICogTUEgMDIxMTEtMTMwNyBVU0EKICovCgoKI2luY2x1ZGUgPGNvbmZpZy5oPgojaW5jbHVkZSA8dmVyc2lvbi5oPgoKCi5zZWN0aW9uIC50ZXh0Ci5jb2RlMzIKLmdsb2JsIF9zdGFydAoudHlwZSBfc3RhcnQsIEBmdW5jdGlvbgouZ2xvYmwgX2kzODZib290X3N0YXJ0Cl9pMzg2Ym9vdF9zdGFydDoKX3N0YXJ0OgoJbW92bCAgICAkMHgxOCwlZWF4ICAgICAgICAgCS8qIExvYWQgb3VyIHNlZ2VtZW50IHJlZ2lzdGVzLCB0aGUKCQkJCQkgKiBnZHQgaGF2ZSBhbHJlYWR5IGJlZW4gbG9hZGVkIGJ5IHN0YXJ0MTYuUyAqLwoJbW92dyAgICAlYXgsJWZzCgltb3Z3CSVheCwlZHMKCW1vdncgICAgJWF4LCVncwoJbW92dyAgICAlYXgsJWVzCgltb3Z3ICAgICVheCwlc3MKCgkvKiBXZSBjYWxsIGEgZmV3IGZ1bmN0aW9ucyBpbiB0aGUgYm9hcmQgc3VwcG9ydCBwYWNrYWdlCgkgKiBzaW5jZSB3ZSBoYXZlIG5vIHN0YWNrIHlldCB3ZSdsbCBoYXZlIHRvIHVzZSAlZWJwCgkgKiB0byBzdG9yZSB0aGUgcmV0dXJuIGFkZHJlc3MgKi8KCgkvKiBFYXJseSBwbGF0Zm9ybSBpbml0IChzZXR1cCBncGlvLCBldGMgKSAqLwoJbW92ICAgICAkZWFybHlfYm9hcmRfaW5pdF9yZXQsICVlYnAKCWptcAllYXJseV9ib2FyZF9pbml0CmVhcmx5X2JvYXJkX2luaXRfcmV0OgoKCS8qIFRoZSBfX3BvcnQ4MCBlbnRyeS1wb2ludCBzaG91bGQgYmUgdXNhYmUgYnkgbm93ICovCgkvKiBzbyB3ZSB0cnkgdG8gaW5kaWNhdGUgcHJvZ3Jlc3MgKi8KCW1vdncJJDB4MDEsICVheAoJbW92bAkkLnByb2dyZXNzMCwgJWVicAoJam1wCV9fc2hvd19ib290X3Byb2dyZXNzCi5wcm9ncmVzczA6CgoJLyogc2l6ZSBtZW1vcnkgKi8KCW1vdgkkbWVtX2luaXRfcmV0LCAlZWJwCglqbXAgICAgIG1lbV9pbml0Cm1lbV9pbml0X3JldDoKCgkvKiBjaGVjayBhbW1vdW50IG9mIGNvbmZpZ3VyZWQgbWVtb3J5CgkgKiAod2UgbmVlZCBhdGxlYXN0IGJzcyBzdGFydCtic3Mgc2l6ZStzdGFjayBzaXplKSAqLwoJbW92bAkkX2kzODZib290X2Jzc19zdGFydCwgJWVjeCAgICAgICAgLyogQlNTIHN0YXJ0ICovCglhZGRsCSRfaTM4NmJvb3RfYnNzX3NpemUsICVlY3ggICAgICAgICAvKiBCU1Mgc2l6ZSAqLwoJYWRkbAkkQ0ZHX1NUQUNLX1NJWkUsICVlY3gKCWNtcGwJJWVjeCwgJWVheAoJamFlCW1lbV9vawoKCS8qIGluZGljYXRlIChsYWNrIG9mKSBwcm9ncmVzcyAqLwoJbW92dwkkMHg4MSwgJWF4Cgltb3ZsCSQucHJvZ3Jlc3MwYSwgJWVicAoJam1wCV9fc2hvd19ib290X3Byb2dyZXNzCi5wcm9ncmVzczBhOgoJam1wIAlkaWUKbWVtX29rOgoKCS8qIGluZGljYXRlIHByb2dyZXNzICovCgltb3Z3CSQweDAyLCAlYXgKCW1vdmwJJC5wcm9ncmVzczEsICVlYnAKCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwoucHJvZ3Jlc3MxOgoKCS8qIGNyZWF0ZSBhIHN0YWNrIGFmdGVyIHRoZSBic3MgKi8KCW1vdmwgICAgJF9pMzg2Ym9vdF9ic3Nfc3RhcnQsICVlYXgKCWFkZGwJJF9pMzg2Ym9vdF9ic3Nfc2l6ZSwgJWVheAoJYWRkbAkkQ0ZHX1NUQUNLX1NJWkUsICVlYXgKCW1vdmwgICAgJWVheCwgJWVzcAoKCXB1c2hsCSQwCglwb3BsCSVlYXgKCWNtcGwJJDAsICVlYXgKCWpuZQlub19zdGFjawoJcHVzaAkkMHg1NWFhNTVhYQoJcG9wbAklZWJ4CgljbXBsCSQweDU1YWE1NWFhLCAlZWJ4CglqZQlzdGFja19vawoKbm9fc3RhY2s6CgkvKiBpbmRpY2F0ZSAobGFjayBvZikgcHJvZ3Jlc3MgKi8KCW1vdncJJDB4ODIsICVheAoJbW92bAkkLnByb2dyZXNzMWEsICVlYnAKCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwoucHJvZ3Jlc3MxYToKCWptcCBkaWUKCgpzdGFja19vazoKCS8qIGluZGljYXRlIHByb2dyZXNzICovCgltb3Z3CSQweDAzLCAlYXgKCW1vdmwJJC5wcm9ncmVzczIsICVlYnAKCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwoucHJvZ3Jlc3MyOgoKCS8qIGNvcHkgZGF0YSBzZWN0aW9uIHRvIHJhbSwgc2l6ZSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkICovCgltb3ZsCSRfaTM4NmJvb3Rfcm9tZGF0YV9kZXN0LCAlZWRpCSAgLyogZGVzdGluYXRpb24gYWRkcmVzcyAqLwoJbW92bAkkX2kzODZib290X3JvbWRhdGFfc3RhcnQsICVlc2kJICAvKiBzb3VyY2UgYWRkcmVzcyAqLwoJbW92bAkkX2kzODZib290X3JvbWRhdGFfc2l6ZSwgJWVjeCAgICAgLyogbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgKi8KCW1vdmwJJWVjeCwgJWVheAoJYW5kbAkkMywgJWVheAoJam56CWRhdGFfZmFpbAoKCXNocmwJJDIsICVlY3gJICAgICAgICAgICAgICAgICAgLyogY29weSA0IGJ5dGUgZWFjaCB0aW1lICovCgljbGQKCWNtcGwJJDAsICVlY3gKCWplCWRhdGFfb2sKZGF0YV9zZWdtZW50OgoJbW92c2wKCWxvb3AJZGF0YV9zZWdtZW50CglqbXAJZGF0YV9vawpkYXRhX2ZhaWw6CgkvKiBpbmRpY2F0ZSAobGFjayBvZikgcHJvZ3Jlc3MgKi8KCW1vdncJJDB4ODMsICVheAoJbW92bAkkLnByb2dyZXNzMmEsICVlYnAKCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwoucHJvZ3Jlc3MyYToKCWptcCAJZGllCgpkYXRhX29rOgoKCS8qIGluZGljYXRlIHByb2dyZXNzICovCgltb3Z3CSQweDA0LCAlYXgKCW1vdmwJJC5wcm9ncmVzczMsICVlYnAKCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwoucHJvZ3Jlc3MzOgoKCS8qIGNsZWFyIGJzcyBzZWN0aW9uIGluIHJhbSwgc2l6ZSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkICAqLwoJbW92bAkkX2kzODZib290X2Jzc19zdGFydCwgJWVheCAgICAgICAgLyogQlNTIHN0YXJ0ICovCgltb3ZsCSRfaTM4NmJvb3RfYnNzX3NpemUsICVlY3ggICAgICAgICAvKiBCU1Mgc2l6ZSAqLwoJbW92bAklZWN4LCAlZWF4CglhbmRsCSQzLCAlZWF4CglqbnoJYnNzX2ZhaWwKCXNocmwJJDIsICVlY3gJICAgICAgICAgICAgICAgICAgLyogY2xlYXIgNCBieXRlIGVhY2ggdGltZSAqLwoJY2xkCgljbXBsCSQwLCAlZWN4CglqZQlic3Nfb2sKYnNzOgoJbW92bAkkMCwgKCVlZGkpCglhZGQJJDQsICVlZGkKCWxvb3AJYnNzCglqbXAgCWJzc19vawoKYnNzX2ZhaWw6CgkvKiBpbmRpY2F0ZSAobGFjayBvZikgcHJvZ3Jlc3MgKi8KCW1vdncJJDB4ODQsICVheAoJbW92bAkkLnByb2dyZXNzM2EsICVlYnAKCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwoucHJvZ3Jlc3MzYToKCWptcCAJZGllCgpic3Nfb2s6CgoJd2JpbnZkCgoKCS8qIGluZGljYXRlIHByb2dyZXNzICovCgltb3Z3CSQweDA1LCAlYXgKCW1vdmwJJC5wcm9ncmVzczQsICVlYnAKCWptcAlfX3Nob3dfYm9vdF9wcm9ncmVzcwoucHJvZ3Jlc3M0OgoKCWNhbGwJc3RhcnRfaTM4NmJvb3QgIC8qIEVudGVyLCBVLWJvb3QhICovCgoJLyogaW5kaWNhdGUgKGxhY2sgb2YpIHByb2dyZXNzICovCgltb3Z3CSQweDg1LCAlYXgKCW1vdmwJJC5wcm9ncmVzczRhLCAlZWJwCglqbXAJX19zaG93X2Jvb3RfcHJvZ3Jlc3MKLnByb2dyZXNzNGE6CgpkaWU6CWhsdAoJam1wCWRpZQoJaGx0Cg==