I2luY2x1ZGUgPENvcHlyaWdodC5oPgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogbXNBcGlQcm90b3R5cGUuaAoqCiogREVTQ1JJUFRJT046CiogICAgICAgQVBJIFByb3RvdHlwZXMgZm9yIFF1YXJ0ZXJEZWNrIERldmljZQoqCiogREVQRU5ERU5DSUVTOgoqCiogRklMRSBSRVZJU0lPTiBOVU1CRVI6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpZm5kZWYgX19tc0FwaVByb3RvdHlwZV9oCiNkZWZpbmUgX19tc0FwaVByb3RvdHlwZV9oCgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIiB7CiNlbmRpZgoKCi8qIGd0QnJnRmRiLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2ZkYlNldEF0dVNpemUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFNldHMgdGhlIE1hYyBhZGRyZXNzIHRhYmxlIHNpemUuCioKKiBJTlBVVFM6CiogICAgICAgc2l6ZSAgICAtIE1hYyBhZGRyZXNzIHRhYmxlIHNpemUuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYlNldEF0dVNpemUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBBVFVfU0laRSBzaXplCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0QWdpbmdUaW1lUmFuZ2UKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgdGhlIG1heGltYWwgYW5kIG1pbmltdW0gYWdlIHRpbWVzIHRoYXQgdGhlIGhhcmR3YXJlIGNhbiBzdXBwb3J0LgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIG1heFRpbWVvdXQgLSBtYXggYWdpbmcgdGltZSBpbiBzZWNvdW5kcy4KKiAgICAgICBtaW5UaW1lb3V0IC0gbWluIGFnaW5nIHRpbWUgaW4gc2Vjb3VuZHMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJHZXRBZ2luZ1RpbWVSYW5nZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIE9VVCBHVF9VMzIgKm1heFRpbWVvdXQsCiAgICBPVVQgR1RfVTMyICptaW5UaW1lb3V0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJHZXRBZ2luZ1RpbWVvdXQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgdGhlIHRpbWVvdXQgcGVyaW9kIGluIHNlY29uZHMgZm9yIGFnaW5nIG91dCBkeW5hbWljYWxseSBsZWFybmVkCiogICAgICAgZm9yd2FyZGluZyBpbmZvcm1hdGlvbi4gVGhlIHJldHVybmVkIHZhbHVlIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgdGhlIHZhbHVlCiogICAgICAgIHByb2dyYW1tZWQgd2l0aCA8Z2ZkYlNldEFnaW5nVGltZW91dD4uIFBsZWFzZSByZWZlciB0byB0aGUgZGVzY3JpcHRpb24gb2YKKiAgICAgICAgPGdmZGJTZXRBZ2luZ1RpbWVvdXQ+LgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIHRpbWVvdXQgLSBhZ2luZyB0aW1lIGluIHNlY29uZHMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkdldEFnaW5nVGltZW91dAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfVTMyICAgICAgICp0aW1lb3V0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJTZXRBZ2luZ1RpbWVvdXQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFNldHMgdGhlIHRpbWVvdXQgcGVyaW9kIGluIHNlY29uZHMgZm9yIGFnaW5nIG91dCBkeW5hbWljYWxseSBsZWFybmVkCiogICAgICAgZm9yd2FyZGluZyBpbmZvcm1hdGlvbi4gVGhlIHN0YW5kYXJkIHJlY29tbWVuZHMgMzAwIHNlYy4KKiAgICAgICAgU3VwcG9ydGVkIGFnaW5nIHRpbWVvdXQgdmFsdWVzIGFyZSBtdWx0aXBsZSBvZiB0aW1lLWJhc2UsIHdoZXJlIHRpbWUtYmFzZQoqICAgICAgICBpcyBlaXRoZXIgMTUgb3IgMTYgc2Vjb25kcywgZGVwZW5kaW5nIG9uIHRoZSBTd2l0Y2ggZGV2aWNlLiBGb3IgZXhhbXBsZSwKKiAgICAgICAgODhFNjA2MyB1c2VzIHRpbWUtYmFzZSAxNiwgYW5kIHNvIHN1cHBvcnRlZCBhZ2luZyB0aW1lb3V0cyBhcmUgMCwxNiwzMiwKKiAgICAgICAgNDgsLi4uLCBhbmQgNDA4MC4gSWYgdW5zdXBwb3J0ZWQgdGltZW91dCB2YWx1ZSAoYmlnZ2VyIHRoYW4gMTYpIGlzIHVzZWQsIAoqICAgICAgICB0aGUgdmFsdWUgd2lsbCBiZSByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IHN1cHBvcnRlZCB2YWx1ZSBzbWFsbGVyIHRoYW4gdGhlIAoqICAgICAgICBnaXZlbiB0aW1lb3V0LiBJZiB0aGUgZ2l2ZW4gdGltZW91dCBpcyBsZXNzIHRoYW4gMTYsIG1pbmltdW0gdGltZW91dCB2YWx1ZQoqICAgICAgICAxNiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4gRS5nLikgMzUgYmVjb21lcyAzMiBhbmQgNSBiZWNvbWVzIDE2LgoqICAgICAgICA8Z2ZkYkdldEFnaW5nVGltZVJhbmdlPiBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSB0aW1lLWJhc2UuCioKKiBJTlBVVFM6CiogICAgICAgdGltZW91dCAtIGFnaW5nIHRpbWUgaW4gc2Vjb25kcy4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiU2V0QWdpbmdUaW1lb3V0CigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfVTMyIHRpbWVvdXQKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0QXR1RHluYW1pY0NvdW50CioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXRzIHRoZSBjdXJyZW50IG51bWJlciBvZiBkeW5hbWljIHVuaWNhc3QgZW50cmllcyBpbiB0aGlzCiogICAgICAgRmlsdGVyaW5nIERhdGFiYXNlLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIG51bUR5bkVudHJpZXMgLSBudW1iZXIgb2YgZHluYW1pYyBlbnRyaWVzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PX1NVQ0ggLSB2bGFuIGRvZXMgbm90IGV4aXN0LgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiR2V0QXR1RHluYW1pY0NvdW50CigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgT1VUIEdUX1UzMiAqbnVtRHluRW50cmllcwopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJHZXRBdHVFbnRyeUZpcnN0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXRzIGZpcnN0IGxleGljb2dyYXBoaWMgTUFDIGFkZHJlc3MgZW50cnkgZnJvbSB0aGUgQVRVLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIGF0dUVudHJ5IC0gbWF0Y2ggQWRkcmVzcyB0cmFuc2xhdGUgdW5pdCBlbnRyeS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT19TVUNIIC0gdGFibGUgaXMgZW1wdHkuCioKKiBDT01NRU5UUzoKKiAgICAgICBTZWFyY2ggc3RhcnRzIGZyb20gTWFjWzAwOjAwOjAwOjAwOjAwOjAwXQoqCiogICAgICAgIERCTnVtIGluIGF0dUVudHJ5IC0gCiogICAgICAgICAgICBBVFUgTUFDIEFkZHJlc3MgRGF0YWJhc2UgbnVtYmVyLiBJZiBtdWx0aXBsZSBhZGRyZXNzIAoqICAgICAgICAgICAgZGF0YWJhc2VzIGFyZSBub3QgYmVpbmcgdXNlZCwgREJOdW0gc2hvdWxkIGJlIHplcm8uCiogICAgICAgICAgICBJZiBtdWx0aXBsZSBhZGRyZXNzIGRhdGFiYXNlcyBhcmUgYmVpbmcgdXNlZCwgdGhpcyB2YWx1ZQoqICAgICAgICAgICAgc2hvdWxkIGJlIHNldCB0byB0aGUgZGVzaXJlZCBhZGRyZXNzIGRhdGFiYXNlIG51bWJlci4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkdldEF0dUVudHJ5Rmlyc3QKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBPVVQgR1RfQVRVX0VOVFJZICAgICphdHVFbnRyeQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJHZXRBdHVFbnRyeU5leHQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgbmV4dCBsZXhpY29ncmFwaGljIE1BQyBhZGRyZXNzIGZyb20gdGhlIHNwZWNpZmllZCBNYWMgQWRkci4KKgoqIElOUFVUUzoKKiAgICAgICBhdHVFbnRyeSAtIHRoZSBNYWMgQWRkcmVzcyB0byBzdGFydCB0aGUgc2VhcmNoLgoqCiogT1VUUFVUUzoKKiAgICAgICBhdHVFbnRyeSAtIG1hdGNoIEFkZHJlc3MgdHJhbnNsYXRlIHVuaXQgZW50cnkuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzLgoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvciBvciBlbnRyeSBkb2VzIG5vdCBleGlzdC4KKiAgICAgICBHVF9OT19TVUNIIC0gbm8gbW9yZSBlbnRyaWVzLgoqCiogQ09NTUVOVFM6CiogICAgICAgU2VhcmNoIHN0YXJ0cyBmcm9tIGF0dS5tYWNBZGRyW3h4Onh4Onh4Onh4Onh4Onh4XSBzcGVjaWZpZWQgYnkgdGhlCiogICAgICAgdXNlci4KKgoqICAgICAgICBEQk51bSBpbiBhdHVFbnRyeSAtIAoqICAgICAgICAgICAgQVRVIE1BQyBBZGRyZXNzIERhdGFiYXNlIG51bWJlci4gSWYgbXVsdGlwbGUgYWRkcmVzcyAKKiAgICAgICAgICAgIGRhdGFiYXNlcyBhcmUgbm90IGJlaW5nIHVzZWQsIERCTnVtIHNob3VsZCBiZSB6ZXJvLgoqICAgICAgICAgICAgSWYgbXVsdGlwbGUgYWRkcmVzcyBkYXRhYmFzZXMgYXJlIGJlaW5nIHVzZWQsIHRoaXMgdmFsdWUKKiAgICAgICAgICAgIHNob3VsZCBiZSBzZXQgdG8gdGhlIGRlc2lyZWQgYWRkcmVzcyBkYXRhYmFzZSBudW1iZXIuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJHZXRBdHVFbnRyeU5leHQKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTk9VVCBHVF9BVFVfRU5UUlkgICphdHVFbnRyeQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJGaW5kQXR1TWFjRW50cnkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEZpbmQgRkRCIGVudHJ5IGZvciBzcGVjaWZpYyBNQUMgYWRkcmVzcyBmcm9tIHRoZSBBVFUuCioKKiBJTlBVVFM6CiogICAgICAgYXR1RW50cnkgLSB0aGUgTWFjIGFkZHJlc3MgdG8gc2VhcmNoLgoqCiogT1VUUFVUUzoKKiAgICAgICBmb3VuZCAgICAtIEdUX1RSVUUsIGlmIHRoZSBhcHByb3ByaWF0ZSBlbnRyeSBleGlzdHMuCiogICAgICAgYXR1RW50cnkgLSB0aGUgZW50cnkgcGFyYW1ldGVycy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MuCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yIG9yIGVudHJ5IGRvZXMgbm90IGV4aXN0LgoqICAgICAgIEdUX05PX1NVQ0ggLSBubyBtb3JlIGVudHJpZXMuCioKKiBDT01NRU5UUzoKKiAgICAgICAgREJOdW0gaW4gYXR1RW50cnkgLSAKKiAgICAgICAgICAgIEFUVSBNQUMgQWRkcmVzcyBEYXRhYmFzZSBudW1iZXIuIElmIG11bHRpcGxlIGFkZHJlc3MgCiogICAgICAgICAgICBkYXRhYmFzZXMgYXJlIG5vdCBiZWluZyB1c2VkLCBEQk51bSBzaG91bGQgYmUgemVyby4KKiAgICAgICAgICAgIElmIG11bHRpcGxlIGFkZHJlc3MgZGF0YWJhc2VzIGFyZSBiZWluZyB1c2VkLCB0aGlzIHZhbHVlCiogICAgICAgICAgICBzaG91bGQgYmUgc2V0IHRvIHRoZSBkZXNpcmVkIGFkZHJlc3MgZGF0YWJhc2UgbnVtYmVyLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiRmluZEF0dU1hY0VudHJ5CigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU5PVVQgR1RfQVRVX0VOVFJZICAqYXR1RW50cnksCiAgICBPVVQgR1RfQk9PTCAgICAgICAgICpmb3VuZAopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJGbHVzaAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGZsdXNoIGFsbCBvciB1bmJsb2NrZWQgYWRkcmVzc2VzIGZyb20gdGhlIE1BQyBBZGRyZXNzCiogICAgICAgVGFibGUuCioKKiBJTlBVVFM6CiogICAgICAgZmx1c2hDbWQgLSB0aGUgZmx1c2ggb3BlcmF0aW9uIHR5cGUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9fUkVTT1VSQ0UgIC0gZmFpbGVkIHRvIGFsbG9jYXRlIGEgdDJjIHN0cnVjdAoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJGbHVzaAooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0ZMVVNIX0NNRCBmbHVzaENtZAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiRmx1c2hJbkRCCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZmx1c2ggYWxsIG9yIHVuYmxvY2tlZCBhZGRyZXNzZXMgZnJvbSB0aGUgcGFydGljdWxhcgoqICAgICAgIEFUVSBEYXRhYmFzZSAoREJOdW0pLiBJZiBtdWx0aXBsZSBhZGRyZXNzIGRhdGFiYXNlcyBhcmUgYmVpbmcgdXNlZCwgdGhpcwoqICAgICAgICBBUEkgY2FuIGJlIHVzZWQgdG8gZmx1c2ggZW50cmllcyBpbiBhIHBhcnRpY3VsYXIgREJOdW0gZGF0YWJhc2UuCioKKiBJTlBVVFM6CiogICAgICAgZmx1c2hDbWQgLSB0aGUgZmx1c2ggb3BlcmF0aW9uIHR5cGUuCiogICAgICAgIERCTnVtICAgICAtIEFUVSBNQUMgQWRkcmVzcyBEYXRhYmFzZSBOdW1iZXIuIAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJGbHVzaEluREIKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9GTFVTSF9DTUQgZmx1c2hDbWQsCiAgICBJTiBHVF9VMzIgREJOdW0KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2ZkYkFkZE1hY0VudHJ5CioKKiBERVNDUklQVElPTjoKKiAgICAgICBDcmVhdGVzIHRoZSBuZXcgZW50cnkgaW4gTUFDIGFkZHJlc3MgdGFibGUuCioKKiBJTlBVVFM6CiogICAgICAgbWFjRW50cnkgICAgLSBtYWMgYWRkcmVzcyBlbnRyeSB0byBpbnNlcnQgdG8gdGhlIEFUVS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9fUkVTT1VSQ0UgICAgLSBmYWlsZWQgdG8gYWxsb2NhdGUgYSB0MmMgc3RydWN0CiogICAgICAgR1RfT1VUX09GX0NQVV9NRU0gLSBvYU1hbGxvYyBmYWlsZWQKKgoqIENPTU1FTlRTOgoqICAgICAgICBEQk51bSBpbiBhdHVFbnRyeSAtIAoqICAgICAgICAgICAgQVRVIE1BQyBBZGRyZXNzIERhdGFiYXNlIG51bWJlci4gSWYgbXVsdGlwbGUgYWRkcmVzcyAKKiAgICAgICAgICAgIGRhdGFiYXNlcyBhcmUgbm90IGJlaW5nIHVzZWQsIERCTnVtIHNob3VsZCBiZSB6ZXJvLgoqICAgICAgICAgICAgSWYgbXVsdGlwbGUgYWRkcmVzcyBkYXRhYmFzZXMgYXJlIGJlaW5nIHVzZWQsIHRoaXMgdmFsdWUKKiAgICAgICAgICAgIHNob3VsZCBiZSBzZXQgdG8gdGhlIGRlc2lyZWQgYWRkcmVzcyBkYXRhYmFzZSBudW1iZXIuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJBZGRNYWNFbnRyeQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0FUVV9FTlRSWSAqbWFjRW50cnkKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiRGVsTWFjRW50cnkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIERlbGV0ZXMgTUFDIGFkZHJlc3MgZW50cnkuCioKKiBJTlBVVFM6CiogICAgICAgbWFjQWRkcmVzcyAtIG1hYyBhZGRyZXNzLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT19SRVNPVVJDRSAgLSBmYWlsZWQgdG8gYWxsb2NhdGUgYSB0MmMgc3RydWN0CiogICAgICAgR1RfTk9fU1VDSCAgICAgIC0gaWYgc3BlY2lmaWVkIGFkZHJlc3MgZW50cnkgZG9lcyBub3QgZXhpc3QKKgoqIENPTU1FTlRTOgoqICAgICAgIEZvciBTVkwgbW9kZSB2bGFuIElkIGlzIGlnbm9yZWQuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJEZWxNYWNFbnRyeQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0VUSEVSQUREUiAgKm1hY0FkZHJlc3MKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2ZkYkRlbEF0dUVudHJ5CioKKiBERVNDUklQVElPTjoKKiAgICAgICBEZWxldGVzIEFUVSBlbnRyeS4KKgoqIElOUFVUUzoKKiAgICAgICBhdHVFbnRyeSAtIHRoZSBBVFUgZW50cnkgdG8gYmUgZGVsZXRlZC4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9fUkVTT1VSQ0UgIC0gZmFpbGVkIHRvIGFsbG9jYXRlIGEgdDJjIHN0cnVjdAoqICAgICAgIEdUX05PX1NVQ0ggICAgICAtIGlmIHNwZWNpZmllZCBhZGRyZXNzIGVudHJ5IGRvZXMgbm90IGV4aXN0CioKKiBDT01NRU5UUzoKKiAgICAgICAgREJOdW0gaW4gYXR1RW50cnkgLSAKKiAgICAgICAgICAgIEFUVSBNQUMgQWRkcmVzcyBEYXRhYmFzZSBudW1iZXIuIElmIG11bHRpcGxlIGFkZHJlc3MgCiogICAgICAgICAgICBkYXRhYmFzZXMgYXJlIG5vdCBiZWluZyB1c2VkLCBEQk51bSBzaG91bGQgYmUgemVyby4KKiAgICAgICAgICAgIElmIG11bHRpcGxlIGFkZHJlc3MgZGF0YWJhc2VzIGFyZSBiZWluZyB1c2VkLCB0aGlzIHZhbHVlCiogICAgICAgICAgICBzaG91bGQgYmUgc2V0IHRvIHRoZSBkZXNpcmVkIGFkZHJlc3MgZGF0YWJhc2UgbnVtYmVyLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiRGVsQXR1RW50cnkKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9BVFVfRU5UUlkgICphdHVFbnRyeQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiTGVhcm5FbmFibGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEVuYWJsZS9kaXNhYmxlIGF1dG9tYXRpYyBsZWFybmluZyBvZiBuZXcgc291cmNlIE1BQyBhZGRyZXNzZXMgb24gcG9ydAoqICAgICAgIGluZ3Jlc3MuCioKKiBJTlBVVFM6CiogICAgICAgZW4gLSBHVF9UUlVFIGZvciBlbmFibGUgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkxlYXJuRW5hYmxlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfQk9PTCAgZW4KKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJHZXRMZWFybkVuYWJsZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgR2V0IGF1dG9tYXRpYyBsZWFybmluZyBzdGF0dXMgb2YgbmV3IHNvdXJjZSBNQUMgYWRkcmVzc2VzIG9uIHBvcnQgaW5ncmVzcy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lCioKKiBPVVRQVVRTOgoqICAgICAgIGVuIC0gR1RfVFJVRSBpZiBlbmFibGVkICBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJHZXRMZWFybkVuYWJsZQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIE9VVCBHVF9CT09MICAqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N0cFNldE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBFbmFibGUgdGhlIFNwYW5uaW5nIHRyZWUuCioKKiBJTlBVVFM6CiogICAgICAgZW4gLSBHVF9UUlVFIGZvciBlbmFibGUsIEdUX0ZBTFNFIGZvciBkaXNhYmxlLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgd2hlbiBlbmFibGVkLCB0aGlzIGZ1bmN0aW9uIHNldHMgYWxsIHBvcnQgdG8gYmxvY2tpbmcgc3RhdGUsIGFuZCBpbnNlcnRzCiogICAgICAgdGhlIEJQRFUgTUFDIGludG8gdGhlIEFUVSB0byBiZSBjYXB0dXJlZCB0byBDUFUsIG9uIGRpc2FibGUgYWxsIHBvcnQgYXJlCiogICAgICAgYmVpbmcgbW9kaWZpZWQgdG8gYmUgaW4gZm9yd2FyZGluZyBzdGF0ZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0cFNldE1vZGUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9CT09MICBlbgopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdHBTZXRQb3J0U3RhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXQgdGhlIHBvcnQgc3RhdGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBzdGF0ZSAtIHRoZSBwb3J0IHN0YXRlIHRvIHNldC4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdHBTZXRQb3J0U3RhdGUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgICAgcG9ydCwKICAgIElOIEdUX1BPUlRfU1RQX1NUQVRFICBzdGF0ZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdHBHZXRQb3J0U3RhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBwb3J0IHN0YXRlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIHN0YXRlIC0gdGhlIGN1cnJlbnQgcG9ydCBzdGF0ZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdHBHZXRQb3J0U3RhdGUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgICAgICAgIHBvcnQsCiAgICBPVVQgR1RfUE9SVF9TVFBfU1RBVEUgICpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0RWdyZXNzTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldCB0aGUgZWdyZXNzIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgLSB0aGUgZWdyZXNzIG1vZGUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0RWdyZXNzTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgSU4gR1RfRUdSRVNTX01PREUgIG1vZGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0RWdyZXNzTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldCB0aGUgZWdyZXNzIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIHRoZSBlZ3Jlc3MgbW9kZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRFZ3Jlc3NNb2RlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgT1VUIEdUX0VHUkVTU19NT0RFICAqbW9kZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRWbGFuVHVubmVsCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgdmxhbiB0dW5uZWwgbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgbW9kZSAtIHRoZSB2bGFuIHR1bm5lbCBtb2RlLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFZsYW5UdW5uZWwKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9MUE9SVCBwb3J0LAogICAgSU4gR1RfQk9PTCAgbW9kZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRWbGFuVHVubmVsCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IHRoZSB2bGFuIHR1bm5lbCBtb2RlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgLSB0aGUgdmxhbiB0dW5uZWwgbW9kZS4uCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0VmxhblR1bm5lbAooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICptb2RlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0SUdNUFNub29wCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgIFRoaXMgcm91dGluZSBzZXQgdGhlIElHTVAgU25vb3AuIFdoZW4gc2V0IHRvIG9uZSBhbmQgdGhpcyBwb3J0IHJlY2VpdmVzCiogICAgICAgIElHTVAgZnJhbWUsIHRoZSBmcmFtZSBpcyBzd2l0Y2hlZCB0byB0aGUgQ1BVIHBvcnQsIG92ZXJyaWRpbmcgYWxsIG90aGVyIAoqICAgICAgICBzd2l0Y2hpbmcgZGVjaXNpb25zLCB3aXRoIGV4Y2VwdGlvbiBmb3IgQ1BVJ3MgVHJhaWxlci4KKiAgICAgICAgQ1BVIHBvcnQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgSW5ncmVzcyBNb2RlIGJpdHMuIEEgcG9ydCBpcyBjb25zaWRlcmVkIAoqICAgICAgICB0aGUgQ1BVIHBvcnQgaWYgaXRzIEluZ3Jlc3MgTW9kZSBhcmUgZWl0aGVyIEdUX1RSQUlMRVJfSU5HUkVTUyBvciAKKiAgICAgICAgR1RfQ1BVUE9SVF9JTkdSRVNTLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgIG1vZGUgLSBHVF9UUlVFIGZvciBJR01QIFNub29wIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0SUdNUFNub29wCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgcG9ydCwKICAgIElOIEdUX0JPT0wgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldElHTVBTbm9vcAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXQgdGhlIElHTVAgU25vb3AgbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgLSBHVF9UUlVFOiBJR01QIFNub29wIGVuYWJsZWQKKiAgICAgICAgICAgICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0SUdNUFNub29wCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKm1vZGUKKTsKCi8qIHRoZSBmb2xsb3dpbmcgdHdvIEFQSXMgYXJlIGFkZGVkIHRvIHN1cHBvcnQgY2xpcHBlcnNoaXAgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldEhlYWRlck1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0IGluZ3Jlc3MgYW5kIGVncmVzcyBoZWFkZXIgbW9kZSBvZiBhIHN3aXRjaCBwb3J0LiAKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBtb2RlIC0gR1RfVFJVRSBmb3IgaGVhZGVyIG1vZGUgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0SGVhZGVyTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUIHBvcnQsCiAgICBJTiBHVF9CT09MICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRIZWFkZXJNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGdldHMgaW5ncmVzcyBhbmQgZWdyZXNzIGhlYWRlciBtb2RlIG9mIGEgc3dpdGNoIHBvcnQuIAoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAtIEdUX1RSVUU6IGhlYWRlciBtb2RlIGVuYWJsZWQKKiAgICAgICAgICAgICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0SGVhZGVyTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICptb2RlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0UHJvdGVjdGVkTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBzZXQgcHJvdGVjdGVkIG1vZGUgb2YgYSBzd2l0Y2ggcG9ydC4gCiogICAgICAgIFdoZW4gdGhpcyBtb2RlIGlzIHNldCB0byBHVF9UUlVFLCBmcmFtZXMgYXJlIGFsbG93ZWQgdG8gZWdyZXNzIHBvcnQKKiAgICAgICAgZGVmaW5lZCBieSB0aGUgODAyLjFRIFZMQU4gbWVtYmVyc2hpcCBmb3IgdGhlIGZyYW1lJ3MgVklEICdBTkQnCiogICAgICAgIGJ5IHRoZSBwb3J0J3MgVkxBTlRhYmxlIGlmIDgwMi4xUSBpcyBlbmFibGVkIG9uIHRoZSBwb3J0LiBCb3RoIG11c3QKKiAgICAgICAgYWxsb3cgdGhlIGZyYW1lIHRvIEVncmVzcy4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBtb2RlIC0gR1RfVFJVRSBmb3IgcHJvdGVjdGVkIG1vZGUgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRQcm90ZWN0ZWRNb2RlCigKICAgIElOICBHVF9RRF9ERVYgICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgIHBvcnQsCiAgICBJTiBHVF9CT09MICAgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UHJvdGVjdGVkTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHByb3RlY3RlZCBtb2RlIG9mIGEgc3dpdGNoIHBvcnQuIAoqICAgICAgICBXaGVuIHRoaXMgbW9kZSBpcyBzZXQgdG8gR1RfVFJVRSwgZnJhbWVzIGFyZSBhbGxvd2VkIHRvIGVncmVzcyBwb3J0CiogICAgICAgIGRlZmluZWQgYnkgdGhlIDgwMi4xUSBWTEFOIG1lbWJlcnNoaXAgZm9yIHRoZSBmcmFtZSdzIFZJRCAnQU5EJwoqICAgICAgICBieSB0aGUgcG9ydCdzIFZMQU5UYWJsZSBpZiA4MDIuMVEgaXMgZW5hYmxlZCBvbiB0aGUgcG9ydC4gQm90aCBtdXN0CiogICAgICAgIGFsbG93IHRoZSBmcmFtZSB0byBFZ3Jlc3MuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBtb2RlIC0gR1RfVFJVRTogaGVhZGVyIG1vZGUgZW5hYmxlZAoqICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQcm90ZWN0ZWRNb2RlCigKICAgIElOICBHVF9RRF9ERVYgICAgICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICAgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldEZvcndhcmRVbmtub3duCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldCBGb3J3YXJkIFVua25vd24gbW9kZSBvZiBhIHN3aXRjaCBwb3J0LiAKKiAgICAgICAgV2hlbiB0aGlzIG1vZGUgaXMgc2V0IHRvIEdUX1RSVUUsIG5vcm1hbCBzd2l0Y2ggb3BlcmF0aW9uIG9jY3Vycy4KKiAgICAgICAgV2hlbiB0aGlzIG1vZGUgaXMgc2V0IHRvIEdUX0ZBTFNFLCB1bmljYXN0IGZyYW1lIHdpdGggdW5rbm93biBEQSBhZGRyZXNzZXMKKiAgICAgICAgd2lsbCBub3QgZWdyZXNzIG91dCB0aGlzIHBvcnQuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgZm9yIHByb3RlY3RlZCBtb2RlIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0Rm9yd2FyZFVua25vd24KKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICBwb3J0LAogICAgSU4gR1RfQk9PTCAgICAgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0Rm9yd2FyZFVua25vd24KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBGb3J3YXJkIFVua25vd24gbW9kZSBvZiBhIHN3aXRjaCBwb3J0LiAKKiAgICAgICAgV2hlbiB0aGlzIG1vZGUgaXMgc2V0IHRvIEdUX1RSVUUsIG5vcm1hbCBzd2l0Y2ggb3BlcmF0aW9uIG9jY3Vycy4KKiAgICAgICAgV2hlbiB0aGlzIG1vZGUgaXMgc2V0IHRvIEdUX0ZBTFNFLCB1bmljYXN0IGZyYW1lIHdpdGggdW5rbm93biBEQSBhZGRyZXNzZXMKKiAgICAgICAgd2lsbCBub3QgZWdyZXNzIG91dCB0aGlzIHBvcnQuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBtb2RlIC0gR1RfVFJVRTogaGVhZGVyIG1vZGUgZW5hYmxlZAoqICAgICAgICAgICAgICAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEZvcndhcmRVbmtub3duCigKICAgIElOICBHVF9RRF9ERVYgICAgICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICAgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFN3aXRjaFJlZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJlYWRzIFN3aXRjaCBQb3J0IFJlZ2lzdGVycy4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgIHJlZ0FkZHIgLSBUaGUgcmVnaXN0ZXIncyBhZGRyZXNzLgoqCiogT1VUUFVUUzoKKiAgICAgICBkYXRhICAgIC0gVGhlIHJlYWQgcmVnaXN0ZXIncyBkYXRhLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRTd2l0Y2hSZWcKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gIEdUX1UzMiAgICAgICAgIHJlZ0FkZHIsCiAgICBPVVQgR1RfVTE2ICAgICAgICAgKmRhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFN3aXRjaFJlZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHdyaXRlcyBTd2l0Y2ggUG9ydCBSZWdpc3RlcnMuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICByZWdBZGRyIC0gVGhlIHJlZ2lzdGVyJ3MgYWRkcmVzcy4KKgoqIE9VVFBVVFM6CiogICAgICAgZGF0YSAgICAtIFRoZSByZWFkIHJlZ2lzdGVyJ3MgZGF0YS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0U3dpdGNoUmVnCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOICBHVF9VMzIgICAgICAgICByZWdBZGRyLAogICAgSU4gIEdUX1UxNiAgICAgICAgIGRhdGEKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRHbG9iYWxSZWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZWFkcyBTd2l0Y2ggR2xvYmFsIFJlZ2lzdGVycy4KKgoqIElOUFVUUzoKKiAgICAgICByZWdBZGRyIC0gVGhlIHJlZ2lzdGVyJ3MgYWRkcmVzcy4KKgoqIE9VVFBVVFM6CiogICAgICAgZGF0YSAgICAtIFRoZSByZWFkIHJlZ2lzdGVyJ3MgZGF0YS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0R2xvYmFsUmVnCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9VMzIgICAgICAgICByZWdBZGRyLAogICAgT1VUIEdUX1UxNiAgICAgICAgICpkYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRHbG9iYWxSZWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSB3cml0ZXMgU3dpdGNoIEdsb2JhbCBSZWdpc3RlcnMuCioKKiBJTlBVVFM6CiogICAgICAgcmVnQWRkciAtIFRoZSByZWdpc3RlcidzIGFkZHJlc3MuCioKKiBPVVRQVVRTOgoqICAgICAgIGRhdGEgICAgLSBUaGUgcmVhZCByZWdpc3RlcidzIGRhdGEuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldEdsb2JhbFJlZwooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfVTMyICAgICAgICAgcmVnQWRkciwKICAgIElOICBHVF9VMTYgICAgICAgICBkYXRhCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3ZsblNldFBvcnRWbGFuUG9ydHMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBwb3J0IFZMQU4gZ3JvdXAgcG9ydCBtZW1iZXJzaGlwIGxpc3QuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyIHRvIHNldC4KKiAgICAgICBtZW1Qb3J0cyAgICAtIGFycmF5IG9mIGxvZ2ljYWwgcG9ydHMuCiogICAgICAgbWVtUG9ydHNMZW4gLSBudW1iZXIgb2YgbWVtYmVycyBpbiBtZW1Qb3J0cyBhcnJheQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2bG5TZXRQb3J0VmxhblBvcnRzCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgcG9ydCwKICAgIElOIEdUX0xQT1JUIG1lbVBvcnRzW10sCiAgICBJTiBHVF9VOCAgICBtZW1Qb3J0c0xlbgopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5HZXRQb3J0VmxhblBvcnRzCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgcG9ydCBWTEFOIGdyb3VwIHBvcnQgbWVtYmVyc2hpcCBsaXN0LgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgICAgIC0gbG9naWNhbCBwb3J0IG51bWJlciB0byBzZXQuCioKKiBPVVRQVVRTOgoqICAgICAgIG1lbVBvcnRzICAgIC0gYXJyYXkgb2YgbG9naWNhbCBwb3J0cy4KKiAgICAgICBtZW1Qb3J0c0xlbiAtIG51bWJlciBvZiBtZW1iZXJzIGluIG1lbVBvcnRzIGFycmF5CioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3ZsbkdldFBvcnRWbGFuUG9ydHMKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9MUE9SVCBtZW1Qb3J0c1tdLAogICAgT1VUIEdUX1U4ICAgICptZW1Qb3J0c0xlbgopOwoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmxuU2V0UG9ydFVzZXJQcmlMc2IKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBTZXQgdGhlIHVzZXIgcHJpb3JpdHkgKFZQVCkgTFNCIGJpdCwgdG8gYmUgYWRkZWQgdG8gdGhlCiogICAgICAgdXNlciBwcmlvcml0eSBvbiB0aGUgZWdyZXNzLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyIHRvIHNldC4KKiAgICAgICB1c2VyUHJpTHNiIC0gR1RfVFJVRSBmb3IgMSwgR1RfRkFMU0UgZm9yIDAuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3ZsblNldFBvcnRVc2VyUHJpTHNiCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgcG9ydCwKICAgIElOIEdUX0JPT0wgIHVzZXJQcmlMc2IKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmxuR2V0UG9ydFVzZXJQcmlMc2IKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSB1c2VyIHByaW9yaXR5IChWUFQpIExTQiBiaXQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIgdG8gc2V0LgoqCiogT1VUUFVUUzoKKiAgICAgICB1c2VyUHJpTHNiIC0gR1RfVFJVRSBmb3IgMSwgR1RfRkFMU0UgZm9yIDAuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3ZsbkdldFBvcnRVc2VyUHJpTHNiCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgKnVzZXJQcmlMc2IKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5TZXRQb3J0VmlkCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgU2V0IHRoZSBwb3J0IGRlZmF1bHQgdmxhbiBpZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlciB0byBzZXQuCiogICAgICAgdmlkICAtIHRoZSBwb3J0IHZsYW4gaWQuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3ZsblNldFBvcnRWaWQKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9MUE9SVCBwb3J0LAogICAgSU4gR1RfVTE2ICAgdmlkCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmxuR2V0UG9ydFZpZAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIEdldCB0aGUgcG9ydCBkZWZhdWx0IHZsYW4gaWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIgdG8gc2V0LgoqCiogT1VUUFVUUzoKKiAgICAgICB2aWQgIC0gdGhlIHBvcnQgdmxhbiBpZC4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmxuR2V0UG9ydFZpZAooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX1UxNiAgICp2aWQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3ZsblNldFBvcnRWbGFuREJOdW0KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBwb3J0IFZMQU4gZGF0YWJhc2UgbnVtYmVyIChEQk51bSkuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIgdG8gc2V0LgoqICAgICAgIERCTnVtICAgICAtIGRhdGFiYXNlIG51bWJlciBmb3IgdGhpcyBwb3J0IAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzpJTiBHVF9JTkdSRVNTX01PREUgbW9kZQoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2bG5TZXRQb3J0VmxhbkRCTnVtCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgcG9ydCwKICAgIElOIEdUX1UzMiAgIERCTnVtCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmxuR2V0UG9ydFZsYW5EQk51bQoqCiogREVTQ1JJUFRJT046SU4gR1RfSU5HUkVTU19NT0RFIG1vZGUKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgcG9ydCBWTEFOIGRhdGFiYXNlIG51bWJlciAoREJOdW0pLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgIC0gbG9naWNhbCBwb3J0IG51bWJlciB0byBnZXQuCioKKiBPVVRQVVRTOgoqICAgICAgIERCTnVtICAgICAtIGRhdGFiYXNlIG51bWJlciBmb3IgdGhpcyBwb3J0IAoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmxuR2V0UG9ydFZsYW5EQk51bQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX1UzMiAgICAqREJOdW0KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5TZXRQb3J0VmxhbkRvdDFxTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIHBvcnQgODAyLjFxIG1vZGUgKDExOjEwKSAKKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlciB0byBzZXQuCiogICAgICAgbW9kZSAgICAgLSA4MDIuMXEgbW9kZSBmb3IgdGhpcyBwb3J0IAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzpJTiBHVF9JTkdSRVNTX01PREUgbW9kZQoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2bG5TZXRQb3J0VmxhbkRvdDFxTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gR1RfRE9UMVFfTU9ERSAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5HZXRQb3J0VmxhbkRvdDFxTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgdGhlIHBvcnQgODAyLjFxIG1vZGUgKGJpdCAxMToxMCkuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyIHRvIGdldC4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAgICAgLSA4MDIuMXEgbW9kZSBmb3IgdGhpcyBwb3J0IAoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2bG5HZXRQb3J0VmxhbkRvdDFxTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0RPVDFRX01PREUgICAgKm1vZGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmxuU2V0UG9ydFZsYW5Gb3JjZURlZmF1bHRWSUQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBwb3J0IDgwMi4xcSBtb2RlICgxMToxMCkgCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIgdG8gc2V0LgoqICAgICAgIG1vZGUgICAgLSBHVF9UUlVFLCBmb3JjZSB0byB1c2UgZGVmYXVsdCBWSUQKKiAgICAgICAgICAgICAgICAgR1RfRkFVTFNFLCBvdGhlcndpc2UgCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2bG5TZXRQb3J0VmxhbkZvcmNlRGVmYXVsdFZJRAooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gR1RfQk9PTCAgICAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3ZsbkdldFBvcnRWbGFuRm9yY2VEZWZhdWx0VklECioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgcG9ydCBtb2RlIGZvciBGb3JjZURlZmF1bHRWSUQgKGJpdCAxMikuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyIHRvIGdldC4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAgICAgLSBGb3JjZURlZmF1bHRWSUQgbW9kZSBmb3IgdGhpcyBwb3J0IAoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmxuR2V0UG9ydFZsYW5Gb3JjZURlZmF1bHRWSUQKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgICBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGV2ZW50U2V0QWN0aXZlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZW5hYmxlcy9kaXNhYmxlcyB0aGUgcmVjZWl2ZSBvZiBhbiBoYXJkd2FyZSBkcml2ZW4gZXZlbnQuCioKKiBJTlBVVFM6CiogICAgICAgZXZlbnRUeXBlIC0gdGhlIGV2ZW50IHR5cGUuIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sb3dpbmc6IAoqICAgICAgICAgICBHVF9TVEFUU19ET05FLCBHVF9WVFVfUFJPQiwgR1RfVlRVX0RPTkUsIEdUX0FUVV9GVUxMLCAgCiogICAgICAgICAgIEdUX0FUVV9ET05FLCBHVF9QSFlfSU5URVJSVVBULCBHVF9FRV9JTlRFUlJVUFQsIGFuZCBHVF9ERVZJQ0VfSU5UCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBFYWNoIHN3aXRjaCBkZXZpY2UgaGFzIGl0cyBvd24gc2V0IG9mIGV2ZW50IFR5cGVzLiBQbGVhc2UgcmVmZXIgdG8gdGhlCiogICAgICAgIGRldmljZSBkYXRhc2hlZXQgZm9yIHRoZSBsaXN0IG9mIGV2ZW50IHR5cGVzIHRoYXQgdGhlIGRldmljZSBzdXBwb3J0cy4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZXZlbnRTZXRBY3RpdmUKKAogICAgSU4gR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gR1RfVTMyICAgICAgICAgZXZlbnRUeXBlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGV2ZW50R2V0SW50U3RhdHVzCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmVhZHMgYW4gaGFyZHdhcmUgZHJpdmVuIGV2ZW50IHN0YXR1cy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBpbnRDYXVzZSAtICBJdCBwcm92aWRlcyB0aGUgc291cmNlIG9mIGludGVycnVwdCBvZiB0aGUgZm9sbG93aW5nOgoqICAgICAgICAgICAgICAgIEdUX1NUQVRTX0RPTkUsIEdUX1ZUVV9QUk9CLCBHVF9WVFVfRE9ORSwgR1RfQVRVX0ZVTEwsICAKKiAgICAgICAgICAgICAgICBHVF9BVFVfRE9ORSwgR1RfUEhZX0lOVEVSUlVQVCwgYW5kIEdUX0VFX0lOVEVSUlVQVC4KKiAgICAgICAgICAgICAgICBGb3IgR2lnYWJpdCBTd2l0Y2gsIEdUX0FUVV9GVUxMIGlzIHJlcGxhY2VkIHdpdGggR1RfQVRVX0ZVTEwgYW5kIAoqICAgICAgICAgICAgICAgIEdUX1BIWV9JTlRFUlJVUFQgaXMgbm90IHN1cHBvcnRlZC4KKiAgICAgICAgICAgICAgICBHVF9ERVZJQ0VfSU5UIG1heSBub3QgYmUgYXZhaWxhYmxlIG9uIHRoZSBkZXZpY2VzLCBzbyBwbGVhc2UgcmVmZXIKKiAgICAgICAgICAgICAgICB0byB0aGUgZGF0YXNoZWV0IGZvciBkZXRhaWxzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZXZlbnRHZXRJbnRTdGF0dXMKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIE9VVCBHVF9VMTYgICAgICAgICppbnRDYXVzZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndnR1R2V0SW50U3RhdHVzCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgIENoZWNrIHRvIHNlZSBpZiBhIHNwZWNpZmljIHR5cGUgb2YgVlRVIGludGVycnVwdCBvY2N1cmVkCioKKiBJTlBVVFM6CiogICAgICAgaW50VHlwZSAtIHRoZSB0eXBlIG9mIGludGVycnVwdCB3aGljaCBjYXVzZXMgYW4gaW50ZXJydXB0LgoqICAgICAgICAgICAgYW55IGNvbWJpbmF0aW9uIG9mIAoqICAgICAgICAgICAgR1RfTUVNRUJFUl9WSU9MQVRJT04sCiogICAgICAgICAgICBHVF9NSVNTX1ZJT0xBVElPTiwKKiAgICAgICAgICAgIEdUX0ZVTExfVklPTEFUSU9OCioKKiBPVVRQVVRTOgoqICAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICAgIEZVTExfVklPTEFUSU9OIGlzIG9ubHkgZm9yIEZhc3QgRXRoZXJuZXQgU3dpdGNoIChub3QgZm9yIEdpZ2FiaXQgU3dpdGNoKS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKR1RfU1RBVFVTIGd2dHVHZXRJbnRTdGF0dXMKKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAgICAgICAqZGV2LAogICAgT1VUIEdUX1ZUVV9JTlRfU1RBVFVTICAgICAqdnR1SW50U3RhdHVzCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2dHVHZXRFbnRyeUNvdW50CioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXRzIHRoZSBjdXJyZW50IG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBWVFUgdGFibGUKKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBudW1FbnRyaWVzIC0gbnVtYmVyIG9mIFZUVSBlbnRyaWVzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PX1NVQ0ggLSB2bGFuIGRvZXMgbm90IGV4aXN0LgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndnR1R2V0RW50cnlDb3VudAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfVTMyICAgICAgICAgKm51bUVudHJpZXMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Z0dUdldEVudHJ5Rmlyc3QKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgZmlyc3QgbGV4aWNvZ3JhcGhpYyBlbnRyeSBmcm9tIHRoZSBWVFUuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgdnR1RW50cnkgLSBtYXRjaCBWVFUgZW50cnkuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9fU1VDSCAtIHRhYmxlIGlzIGVtcHR5LgoqCiogQ09NTUVOVFM6CiogICAgICAgU2VhcmNoIHN0YXJ0cyBmcm9tIHZpZCBvZiBhbGwgb25lJ3MKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Z0dUdldEVudHJ5Rmlyc3QKKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAgICpkZXYsCiAgICBPVVQgR1RfVlRVX0VOVFJZICAgICp2dHVFbnRyeQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndnR1R2V0RW50cnlOZXh0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXRzIG5leHQgbGV4aWNvZ3JhcGhpYyBWVFUgZW50cnkgZnJvbSB0aGUgc3BlY2lmaWVkIFZJRC4KKgoqIElOUFVUUzoKKiAgICAgICB2dHVFbnRyeSAtIHRoZSBWSUQgdG8gc3RhcnQgdGhlIHNlYXJjaC4KKgoqIE9VVFBVVFM6CiogICAgICAgdnR1RW50cnkgLSBtYXRjaCBWVFUgIGVudHJ5LgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2Vzcy4KKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3Igb3IgZW50cnkgZG9lcyBub3QgZXhpc3QuCiogICAgICAgR1RfTk9fU1VDSCAtIG5vIG1vcmUgZW50cmllcy4KKgoqIENPTU1FTlRTOgoqICAgICAgIFNlYXJjaCBzdGFydHMgZnJvbSB0aGUgVklEIHNwZWNpZmllZCBieSB0aGUgdXNlci4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Z0dUdldEVudHJ5TmV4dAooCiAgICBJTiAgR1RfUURfREVWICAgICAgICAgKmRldiwKICAgIElOT1VUIEdUX1ZUVV9FTlRSWSAgKnZ0dUVudHJ5Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2dHVGaW5kVmlkRW50cnkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEZpbmQgVlRVIGVudHJ5IGZvciBhIHNwZWNpZmljIFZJRCwgaXQgd2lsbCByZXR1cm4gdGhlIGVudHJ5LCBpZiBmb3VuZCwgCiogICAgICAgYWxvbmcgd2l0aCBpdHMgYXNzb2NpYXRlZCBkYXRhIAoqCiogSU5QVVRTOgoqICAgICAgIHZ0dUVudHJ5IC0gY29udGFpbnMgdGhlIFZJRCB0byBzZWFyY2ggZm9yLgoqCiogT1VUUFVUUzoKKiAgICAgICBmb3VuZCAgICAtIEdUX1RSVUUsIGlmIHRoZSBhcHByb3ByaWF0ZSBlbnRyeSBleGlzdHMuCiogICAgICAgdnR1RW50cnkgLSB0aGUgZW50cnkgcGFyYW1ldGVycy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MuCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yIG9yIGVudHJ5IGRvZXMgbm90IGV4aXN0LgoqICAgICAgIEdUX05PX1NVQ0ggLSBubyBtb3JlIGVudHJpZXMuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Z0dUZpbmRWaWRFbnRyeQooCiAgICBJTiBHVF9RRF9ERVYgICAgICAgICAqZGV2LAogICAgSU5PVVQgR1RfVlRVX0VOVFJZICAqdnR1RW50cnksCiAgICBPVVQgR1RfQk9PTCAgICAgICAgICpmb3VuZAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndnR1Rmx1c2gKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZW1vdmVzIGFsbCBlbnRyaWVzIGZyb20gVlRVIFRhYmxlLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndnR1Rmx1c2gKKAogICAgSU4gR1RfUURfREVWICpkZXYKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Z0dUFkZEVudHJ5CioKKiBERVNDUklQVElPTjoKKiAgICAgICBDcmVhdGVzIHRoZSBuZXcgZW50cnkgaW4gVlRVIHRhYmxlIGJhc2VkIG9uIHVzZXIgaW5wdXQuCioKKiBJTlBVVFM6CiogICAgICAgdnR1RW50cnkgICAgLSB2dHUgZW50cnkgdG8gaW5zZXJ0IHRvIHRoZSBWVFUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0ZVTEwgICAgICAgICAgICAgIC0gdnR1IHRhYmxlIGlzIGZ1bGwKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2dHVBZGRFbnRyeQooCiAgICBJTiBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiBHVF9WVFVfRU5UUlkgKnZ0dUVudHJ5Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2dHVEZWxFbnRyeQoqCiogREVTQ1JJUFRJT046CiogICAgICAgRGVsZXRlcyBWVFUgZW50cnkgc3BlY2lmaWVkIGJ5IHVzZXIuCioKKiBJTlBVVFM6CiogICAgICAgdnR1RW50cnkgLSB0aGUgVlRVIGVudHJ5IHRvIGJlIGRlbGV0ZWQgCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PX1NVQ0ggICAgICAtIGlmIHNwZWNpZmllZCBhZGRyZXNzIGVudHJ5IGRvZXMgbm90IGV4aXN0CioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Z0dURlbEVudHJ5CigKICAgIElOIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOIEdUX1ZUVV9FTlRSWSAqdnR1RW50cnkKKTsKCi8qIGd0UGh5Q3RybC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRQaHlSZXNldAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBwcmVmb3JtcyBQSFkgcmVzZXQuCiogICAgICAgIEFmdGVyIHJlc2V0LCBwaHkgd2lsbCBiZSBpbiBBdXRvbmVnb3RpYXRpb24gbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICAgIHBvcnQgLSBUaGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKiAgICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiBDT01NRU5UUzoKKiAgICAgICAgIGRhdGEgc2hlZXQgcmVnaXN0ZXIgMC4xNSAtIFJlc2V0CiogICAgICAgICBkYXRhIHNoZWV0IHJlZ2lzdGVyIDAuMTMgLSBTcGVlZAoqICAgICAgICAgZGF0YSBzaGVldCByZWdpc3RlciAwLjEyIC0gQXV0b25lZ290aWF0aW9uCiogICAgICAgICBkYXRhIHNoZWV0IHJlZ2lzdGVyIDAuOCAgLSBEdXBsZXggTW9kZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpHVF9TVEFUVVMgZ3BydFBoeVJlc2V0CigKICAgIElOIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICBwb3J0Cik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0UG9ydExvb3BiYWNrCioKKiBERVNDUklQVElPTjoKKiBFbmFibGUvRGlzYWJsZSBJbnRlcm5hbCBQb3J0IExvb3BiYWNrLiAKKiBGb3IgMTAvMTAwIEZhc3QgRXRoZXJuZXQgUEhZLCBzcGVlZCBvZiBMb29wYmFjayBpcyBkZXRlcm1pbmVkIGFzIGZvbGxvd3M6CiogICBJZiBBdXRvLU5lZ290aWF0aW9uIGlzIGVuYWJsZWQsIHRoaXMgcm91dGluZSBkaXNhYmxlcyBBdXRvLU5lZ290aWF0aW9uIGFuZCAKKiAgIGZvcmNlcyBzcGVlZCB0byBiZSAxME1icHMuCiogICBJZiBBdXRvLU5lZ290aWF0aW9uIGlzIGRpc2FibGVkLCB0aGUgZm9yY2VkIHNwZWVkIGlzIHVzZWQuCiogICBEaXNhYmxpbmcgTG9vcGJhY2sgc2ltcGx5IGNsZWFycyBiaXQgMTQgb2YgY29udHJvbCByZWdpc3RlcigwLjE0KS4gVGhlcmVmb3JlLAoqICAgaXQgaXMgcmVjb21tZW5kZWQgdG8gY2FsbCBncHJ0U2V0UG9ydEF1dG9Nb2RlIGZvciBQSFkgY29uZmlndXJhdGlvbiBhZnRlciAKKiAgIExvb3BiYWNrIHRlc3QuCiogRm9yIDEwLzEwMC8xMDAwIEdpZ2FnYml0IEV0aGVybmV0IFBIWSwgc3BlZWQgb2YgTG9vcGJhY2sgaXMgZGV0ZXJtaW5lZCBhcyBmb2xsb3dzOgoqICAgSWYgQXV0by1OZWdvdGlhdGlvbiBpcyBlbmFibGVkIGFuZCBMaW5rIGlzIGFjdGl2ZSwgdGhlIGN1cnJlbnQgc3BlZWQgaXMgdXNlZC4KKiAgIElmIEF1dG8tTmVnb3RpYXRpb24gaXMgZGlzYWJsZWQsIHRoZSBmb3JjZWQgc3BlZWQgaXMgdXNlZC4KKiAgIEFsbCBvdGhlciBjYXNlcywgZGVmYXVsdCBNQUMgSW50ZXJmYWNlIHNwZWVkIGlzIHVzZWQuIFBsZWFzZSByZWZlciB0byB0aGUgZGF0YQoqICAgc2hlZXQgZm9yIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgZGVmYXVsdCBNQUMgSW50ZXJmYWNlIHNwZWVkLgoqCiogSU5QVVRTOgoqICAgICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICAgIGVuYWJsZSAtIElmIEdUX1RSVUUsIGVuYWJsZSBsb29wYmFjayBtb2RlCiogICAgICAgICAgICAgICAgICAgICBJZiBHVF9GQUxTRSwgZGlzYWJsZSBsb29wYmFjayBtb2RlCioKKiBPVVRQVVRTOgoqICAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgICBHVF9PSyAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgICBHVF9GQUlMICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICAgIGRhdGEgc2hlZXQgcmVnaXN0ZXIgMC4xNCAtIExvb3BfYmFjawoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpHVF9TVEFUVVMgZ3BydFNldFBvcnRMb29wYmFjawooCiAgICBJTiBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOIEdUX0JPT0wgICAgICAgICBlbmFibGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQb3J0U3BlZWQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICAgU2V0cyBzcGVlZCBmb3IgYSBzcGVjaWZpYyBsb2dpY2FsIHBvcnQuIFRoaXMgZnVuY3Rpb24gd2lsbCBrZWVwIHRoZSBkdXBsZXggCiogICAgICAgIG1vZGUgYW5kIGxvb3BiYWNrIG1vZGUgdG8gdGhlIHByZXZpb3VzIHZhbHVlLCBidXQgZGlzYWJsZSBvdGhlcnMsIHN1Y2ggYXMgCiogICAgICAgIEF1dG9uZWdvdGlhdGlvbi4KKgoqIElOUFVUUzoKKiAgICAgICAgIHBvcnQgIC0gbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgICAgc3BlZWQgLSBwb3J0IHNwZWVkLgoqICAgICAgICAgICAgICAgIFBIWV9TUEVFRF8xMF9NQlBTIGZvciAxME1icHMKKiAgICAgICAgICAgICAgICBQSFlfU1BFRURfMTAwX01CUFMgZm9yIDEwME1icHMKKiAgICAgICAgICAgICAgICBQSFlfU1BFRURfMTAwMF9NQlBTIGZvciAxMDAwTWJwcwoqCiogT1VUUFVUUzoKKiBOb25lLgoqCiogUkVUVVJOUzoKKiBHVF9PSyAtIG9uIHN1Y2Nlc3MKKiBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIGRhdGEgc2hlZXQgcmVnaXN0ZXIgMC4xMyAtIFNwZWVkIFNlbGVjdGlvbiAoTFNCKQoqIGRhdGEgc2hlZXQgcmVnaXN0ZXIgMC42ICAtIFNwZWVkIFNlbGVjdGlvbiAoTVNCKQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpHVF9TVEFUVVMgZ3BydFNldFBvcnRTcGVlZAooCiAgICBJTiBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOIEdUX1BIWV9TUEVFRCAgICBzcGVlZAopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFBvcnRBdXRvTmVnRW5hYmxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgIEVuYWJsZS9kaXNhYmxlIGFuIEF1dG8tTmVnb3RpYXRpb24gZm9yIGR1cGxleCBtb2RlIG9uIHNwZWNpZmljCiogICAgICAgICBsb2dpY2FsIHBvcnQuIFdoZW4gQXV0b25lZ290aWF0aW9uIGlzIGRpc2FibGVkLCBwaHkgd2lsbCBiZSBpbiAxME1icHMgSGFsZiAKKiAgICAgICAgRHVwbGV4IG1vZGUuIEVuYWJsaW5nIEF1dG9uZWdvdGlhdGlvbiB3aWxsIHNldCAxMDBCQVNFLVRYIEZ1bGwgRHVwbGV4LCAKKiAgICAgICAgMTAwQkFTRS1UWCBGdWxsIER1cGxleCwgMTAwQkFTRS1UWCBGdWxsIER1cGxleCwgYW5kIDEwMEJBU0UtVFggRnVsbCBEdXBsZXgKKiAgICAgICAgaW4gQXV0b05lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgcmVnaXN0ZXIuCioKKiBJTlBVVFM6CiogICAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgICAgc3RhdGUgLSBHVF9UUlVFIGZvciBlbmFibGUgQXV0by1OZWdvdGlhdGlvbiBmb3IgZHVwbGV4IG1vZGUsCiogICAgICAgICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgIEdUX09LICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgIEdUX0ZBSUwgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgICAgZGF0YSBzaGVldCByZWdpc3RlciAwLjEyIC0gQXV0by1OZWdvdGlhdGlvbiBFbmFibGUKKiAgICAgICAgIGRhdGEgc2hlZXQgcmVnaXN0ZXIgNC44LCA0LjcsIDQuNiwgNC41IC0gQXV0by1OZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkdUX1NUQVRVUyBncHJ0UG9ydEF1dG9OZWdFbmFibGUKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOIEdUX0JPT0wgICAgICAgICBzdGF0ZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFBvcnRQb3dlckRvd24KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICAgRW5hYmxlL2Rpc2FibGUgKHBvd2VyIGRvd24pIG9uIHNwZWNpZmljIGxvZ2ljYWwgcG9ydC4gV2hlbiB0aGlzIGZ1bmN0aW9uIAoqICAgICAgICBpcyBjYWxsZWQgd2l0aCBub3JtYWwgb3BlcmF0aW9uIHJlcXVlc3QsIHBoeSB3aWxsIHNldCB0byBBdXRvbmVnb3RpYXRpb24gCiogICAgICAgIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgICBwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgICAgc3RhdGUgICAgLSAgR1RfVFJVRTogcG93ZXIgZG93bgoqICAgICAgICAgICAgICAgICAgICAgR1RfRkFMU0U6IG5vcm1hbCBvcGVyYXRpb24KKgoqIE9VVFBVVFM6CiogICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgIEdUX09LICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgIEdUX0ZBSUwgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgICAgZGF0YSBzaGVldCByZWdpc3RlciAwLjExIC0gUG93ZXIgRG93bgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpHVF9TVEFUVVMgZ3BydFBvcnRQb3dlckRvd24KKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIElOIEdUX0JPT0wgICAgICAgIHN0YXRlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0UG9ydFJlc3RhcnRBdXRvTmVnCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgIFJlc3RhcnQgQXV0b05lZ290aWF0aW9uLiBJZiBBdXRvTmVnb3RpYXRpb24gaXMgbm90IGVuYWJsZWQsIGl0J2xsIGVuYWJsZSAKKiAgICAgICAgaXQuIExvb3BiYWNrIGFuZCBQb3dlciBEb3duIHdpbGwgYmUgZGlzYWJsZWQgYnkgdGhpcyByb3V0aW5lLgoqCiogSU5QVVRTOgoqICAgICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CiogICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgIEdUX09LICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgIEdUX0ZBSUwgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgICAgZGF0YSBzaGVldCByZWdpc3RlciAwLjkgLSBSZXN0YXJ0IEF1dG8tTmVnb3RpYXRpb24KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKR1RfU1RBVFVTIGdwcnRQb3J0UmVzdGFydEF1dG9OZWcKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgcG9ydAopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFBvcnREdXBsZXhNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgIFNldHMgZHVwbGV4IG1vZGUgZm9yIGEgc3BlY2lmaWMgbG9naWNhbCBwb3J0LiBUaGlzIGZ1bmN0aW9uIHdpbGwga2VlcCAKKiAgICAgICAgdGhlIHNwZWVkIGFuZCBsb29wYmFjayBtb2RlIHRvIHRoZSBwcmV2aW91cyB2YWx1ZSwgYnV0IGRpc2FibGUgb3RoZXJzLAoqICAgICAgICBzdWNoIGFzIEF1dG9uZWdvdGlhdGlvbi4KKgoqIElOUFVUUzoKKiAgICAgICAgIHBvcnQgICAgIC0gbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgICAgZE1vZGUgICAgLSBkdWxwZXggbW9kZQoqCiogT1VUUFVUUzoKKiAgICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICAgR1RfT0sgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICAgR1RfRkFJTCAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgICBkYXRhIHNoZWV0IHJlZ2lzdGVyIDAuOCAtIER1cGxleCBNb2RlCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkdUX1NUQVRVUyBncHJ0U2V0UG9ydER1cGxleE1vZGUKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIElOIEdUX0JPT0wgICAgICAgIGRNb2RlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0UG9ydEF1dG9Nb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHVwIHRoZSBwb3J0IHdpdGggZ2l2ZW4gQXV0byBNb2RlLgoqICAgICAgICBTdXBwb3J0ZWQgbW9kZSBpcyBhcyBmb2xsb3dzOgoqICAgICAgICAtIEF1dG8gZm9yIGJvdGggc3BlZWQgYW5kIGR1cGxleC4KKiAgICAgICAgLSBBdXRvIGZvciBzcGVlZCBvbmx5IGFuZCBGdWxsIGR1cGxleC4KKiAgICAgICAgLSBBdXRvIGZvciBzcGVlZCBvbmx5IGFuZCBIYWxmIGR1cGxleC4KKiAgICAgICAgLSBBdXRvIGZvciBkdXBsZXggb25seSBhbmQgc3BlZWQgMTAwME1icHMuCiogICAgICAgIC0gQXV0byBmb3IgZHVwbGV4IG9ubHkgYW5kIHNwZWVkIDEwME1icHMuCiogICAgICAgIC0gQXV0byBmb3IgZHVwbGV4IG9ubHkgYW5kIHNwZWVkIDEwTWJwcy4KKiAgICAgICAgLSBTcGVlZCAxMDAwTWJwcyBhbmQgRnVsbCBkdXBsZXguCiogICAgICAgIC0gU3BlZWQgMTAwME1icHMgYW5kIEhhbGYgZHVwbGV4LgoqICAgICAgICAtIFNwZWVkIDEwME1icHMgYW5kIEZ1bGwgZHVwbGV4LgoqICAgICAgICAtIFNwZWVkIDEwME1icHMgYW5kIEhhbGYgZHVwbGV4LgoqICAgICAgICAtIFNwZWVkIDEwTWJwcyBhbmQgRnVsbCBkdXBsZXguCiogICAgICAgIC0gU3BlZWQgMTBNYnBzIGFuZCBIYWxmIGR1cGxleC4KKiAgICAgICAgCioKKiBJTlBVVFM6CiogICAgICAgICBwb3J0IC0gVGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICAgIG1vZGUgLSBBdXRvIE1vZGUgdG8gYmUgd3JpdHRlbgoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqIENPTU1FTlRTOgoqICAgICAgICAgZGF0YSBzaGVldCByZWdpc3RlciA0LjgsIDQuNywgNC42LCBhbmQgNC41IEF1dG9uZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50CiogICAgICAgICBkYXRhIHNoZWV0IHJlZ2lzdGVyIDQuNiwgNC41IEF1dG9uZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50IGZvciAxMDAwQlgKKiAgICAgICAgIGRhdGEgc2hlZXQgcmVnaXN0ZXIgOS45LCA5LjggQXV0b25lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgZm9yIDEwMDBCVAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKR1RfU1RBVFVTIGdwcnRTZXRQb3J0QXV0b01vZGUKKAogICAgSU4gR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgIHBvcnQsCiAgICBJTiBHVF9QSFlfQVVUT19NT0RFIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFBhdXNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgd2lsbCBzZXQgdGhlIHBhdXNlIGJpdCBpbiBBdXRvbmVnb3RpYXRpb24gQWR2ZXJ0aXNlbWVudAoqICAgICAgICBSZWdpc3Rlci4gQW5kIHJlc3RhcnQgdGhlIGF1dG9uZWdvdGlhdGlvbi4KKgoqIElOUFVUUzoKKiBwb3J0IC0gVGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiBzdGF0ZSAtIEdUX1BIWV9QQVVTRV9NT0RFIGVudW0gdmFsdWUuCiogICAgICAgICAgICBHVF9QSFlfTk9fUEFVU0UgICAgICAgIC0gZGlzYWJsZSBwYXVzZQoqICAgICAgICAgICAgIEdUX1BIWV9QQVVTRSAgICAgICAgLSBzdXBwb3J0IHBhdXNlCiogICAgICAgICAgICBHVF9QSFlfQVNZTU1FVFJJQ19QQVVTRSAgICAtIHN1cHBvcnQgYXN5bW1ldHJpYyBwYXVzZQoqICAgICAgICAgICAgR1RfUEhZX0JPVEhfUEFVU0UgICAgLSBzdXBwb3J0IGJvdGggcGF1c2UgYW5kIGFzeW1tZXRyaWMgcGF1c2UKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiBDT01NRU5UUzoKKiBkYXRhIHNoZWV0IHJlZ2lzdGVyIDQuMTAgQXV0b25lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkdUX1NUQVRVUyBncHJ0U2V0UGF1c2UKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOIEdUX1BIWV9QQVVTRV9NT0RFIHN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQaHlSZWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZWFkcyBQaHkgUmVnaXN0ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgcmVnQWRkciAtIFRoZSByZWdpc3RlcidzIGFkZHJlc3MuCioKKiBPVVRQVVRTOgoqICAgICAgIGRhdGEgICAgLSBUaGUgcmVhZCByZWdpc3RlcidzIGRhdGEuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFBoeVJlZwooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBJTiAgR1RfVTMyICAgICAgICAgcmVnQWRkciwKICAgIE9VVCBHVF9VMTYgICAgICAgICAqZGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0UGh5UmVnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgd3JpdGVzIFBoeSBSZWdpc3RlcnMuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICByZWdBZGRyIC0gVGhlIHJlZ2lzdGVyJ3MgYWRkcmVzcy4KKgoqIE9VVFBVVFM6CiogICAgICAgZGF0YSAgICAtIFRoZSByZWFkIHJlZ2lzdGVyJ3MgZGF0YS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0UGh5UmVnCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOICBHVF9VMzIgICAgICAgICByZWdBZGRyLAogICAgSU4gIEdUX1UxNiAgICAgICAgIGRhdGEKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRQaHlJbnRFbmFibGUKKgoqIERFU0NSSVBUSU9OOgoqIEVuYWJsZS9EaXNhYmxlIG9uZSBQSFkgSW50ZXJydXB0CiogVGhpcyByZWdpc3RlciBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIElOVCMgcGluIGlzIGFzc2VydGVkIHdoZW4gYW4gaW50ZXJydXB0IAoqIGV2ZW50IG9jY3Vycy4gV2hlbiBhbiBpbnRlcnJ1cHQgb2NjdXJzLCB0aGUgY29ycmVzcG9uZGluZyBiaXQgaXMgc2V0IGFuZAoqIHJlbWFpbnMgc2V0IHVudGlsIHJlZ2lzdGVyIDE5IGlzIHJlYWQgdmlhIHRoZSBTTUkuIFdoZW4gaW50ZXJydXB0IGVuYWJsZQoqIGJpdHMgYXJlIG5vdCBzZXQgaW4gcmVnaXN0ZXIgMTgsIGludGVycnVwdCBzdGF0dXMgYml0cyBpbiByZWdpc3RlciAxOSBhcmUgCiogc3RpbGwgc2V0IHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IGV2ZW50cyBvY2N1ci4gSG93ZXZlciwgdGhlIElOVCMgCiogaXMgbm90IGFzc2VydGVkLgoqCiogSU5QVVRTOgoqIHBvcnQgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogaW50VHlwZSAtIHRoZSB0eXBlIG9mIGludGVycnVwdCB0byBlbmFibGUvZGlzYWJsZS4gYW55IGNvbWJpbmF0aW9uIG9mIAoqICAgICAgICAgICAgR1RfU1BFRURfQ0hBTkdFRCwKKiAgICAgICAgICAgIEdUX0RVUExFWF9DSEFOR0VELAoqICAgICAgICAgICAgR1RfUEFHRV9SRUNFSVZFRCwKKiAgICAgICAgICAgIEdUX0FVVE9fTkVHX0NPTVBMRVRFRCwKKiAgICAgICAgICAgIEdUX0xJTktfU1RBVFVTX0NIQU5HRUQsCiogICAgICAgICAgICBHVF9TWU1CT0xfRVJST1IsCiogICAgICAgICAgICBHVF9GQUxTRV9DQVJSSUVSLAoqICAgICAgICAgICAgR1RfRklGT19GTE9XLAoqICAgICAgICAgICAgR1RfQ1JPU1NPVkVSX0NIQU5HRUQsCiogICAgICAgICAgICBHVF9QT0xBUklUWV9DSEFOR0VELCBhbmQKKiAgICAgICAgICAgIEdUX0pBQkJFUgoqCiogT1VUUFVUUzoKKiBOb25lLgoqCiogUkVUVVJOUzoKKiBHVF9PSyAtIG9uIHN1Y2Nlc3MKKiBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIDg4RTMwODEgZGF0YSBzaGVldCByZWdpc3RlciAxOAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpHVF9TVEFUVVMgZ3BydFBoeUludEVuYWJsZQooCklOIEdUX1FEX0RFViAqZGV2LApJTiBHVF9MUE9SVCAgIHBvcnQsCklOIEdUX1UxNiAgICBpbnRUeXBlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UGh5SW50U3RhdHVzCioKKiBERVNDUklQVElPTjoKKiBDaGVjayB0byBzZWUgaWYgYSBzcGVjaWZpYyB0eXBlIG9mICBpbnRlcnJ1cHQgb2NjdXJlZAoqCiogSU5QVVRTOgoqIHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogaW50VHlwZSAtIHRoZSB0eXBlIG9mIGludGVycnVwdCB3aGljaCBjYXVzZXMgYW4gaW50ZXJydXB0LgoqICAgICAgICAgICAgYW55IGNvbWJpbmF0aW9uIG9mIAoqICAgICAgICAgICAgR1RfU1BFRURfQ0hBTkdFRCwKKiAgICAgICAgICAgIEdUX0RVUExFWF9DSEFOR0VELAoqICAgICAgICAgICAgR1RfUEFHRV9SRUNFSVZFRCwKKiAgICAgICAgICAgIEdUX0FVVE9fTkVHX0NPTVBMRVRFRCwKKiAgICAgICAgICAgIEdUX0xJTktfU1RBVFVTX0NIQU5HRUQsCiogICAgICAgICAgICBHVF9TWU1CT0xfRVJST1IsCiogICAgICAgICAgICBHVF9GQUxTRV9DQVJSSUVSLAoqICAgICAgICAgICAgR1RfRklGT19GTE9XLAoqICAgICAgICAgICAgR1RfQ1JPU1NPVkVSX0NIQU5HRUQsCiogICAgICAgICAgICBHVF9QT0xBUklUWV9DSEFOR0VELCBhbmQKKiAgICAgICAgICAgIEdUX0pBQkJFUgoqCiogT1VUUFVUUzoKKiBOb25lLgoqCiogUkVUVVJOUzoKKiBHVF9PSyAtIG9uIHN1Y2Nlc3MKKiBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIDg4RTMwODEgZGF0YSBzaGVldCByZWdpc3RlciAxOQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpHVF9TVEFUVVMgZ3BydEdldFBoeUludFN0YXR1cwooCklOIEdUX1FEX0RFViAqZGV2LApJTiAgR1RfTFBPUlQgcG9ydCwKT1VUICBHVF9VMTYqIGludFR5cGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFBoeUludFBvcnRTdW1tYXJ5CioKKiBERVNDUklQVElPTjoKKiBMaXN0cyB0aGUgcG9ydHMgdGhhdCBoYXZlIGFjdGl2ZSBpbnRlcnJ1cHRzLiBJdCBwcm92aWRlcyBhIHF1aWNrIHdheSB0byAKKiBpc29sYXRlIHRoZSBpbnRlcnJ1cHQgc28gdGhhdCB0aGUgTUFDIG9yIHN3aXRjaCBkb2VzIG5vdCBoYXZlIHRvIHBvbGwgdGhlCiogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAoMTkpIGZvciBhbGwgcG9ydHMuIFJlYWRpbmcgdGhpcyByZWdpc3RlciBkb2VzIG5vdAoqIGRlLWFzc2VydCB0aGUgSU5UIyBwaW4KKgoqIElOUFVUUzoKKiBub25lCioKKiBPVVRQVVRTOgoqIEdUX1U4ICppbnRQb3J0TWFzayAtIGJpdCBNYXNrIHdpdGggdGhlIGJpdHMgc2V0IGZvciB0aGUgY29ycmVzcG9uZGluZyAKKiBwaHlzIHdpdGggYWN0aXZlIGludGVycnVwdC4gRS5nLiwgdGhlIGJpdCBudW1iZXIgMCBhbmQgMiBhcmUgc2V0IHdoZW4gCiogcG9ydCBudW1iZXIgMCBhbmQgMiBoYXZlIGFjdGl2ZSBpbnRlcnJ1cHQKKgoqIFJFVFVSTlM6CiogR1RfT0sgLSBvbiBzdWNjZXNzCiogR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiA4OEUzMDgxIGRhdGEgc2hlZXQgcmVnaXN0ZXIgMjAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKR1RfU1RBVFVTIGdwcnRHZXRQaHlJbnRQb3J0U3VtbWFyeQooCklOIEdUX1FEX0RFViAqZGV2LApPVVQgR1RfVTE2ICppbnRQb3J0TWFzawopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRGb3JjZUZjCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0IHRoZSBmb3JjZSBmbG93IGNvbnRyb2wgc3RhdGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBmb3JjZSAtIEdUX1RSVUUgZm9yIGZvcmNlIGZsb3cgY29udHJvbCAgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0Rm9yY2VGYwooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUIHBvcnQsCiAgICBJTiBHVF9CT09MICBmb3JjZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRGb3JjZUZjCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IHRoZSBmb3JjZSBmbG93IGNvbnRyb2wgc3RhdGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgZm9yY2UgLSBHVF9UUlVFIGZvciBmb3JjZSBmbG93IGNvbnRyb2wgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEZvcmNlRmMKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqZm9yY2UKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0VHJhaWxlck1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXQgdGhlIGVncmVzcyB0cmFpbGVyIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgLSBHVF9UUlVFIGZvciBhZGQgdHJhaWxlciBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRUcmFpbGVyTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUIHBvcnQsCiAgICBJTiBHVF9CT09MICBtb2RlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFRyYWlsZXJNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IHRoZSBlZ3Jlc3MgdHJhaWxlciBtb2RlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgLSBHVF9UUlVFIGZvciBhZGQgdHJhaWxlciBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRUcmFpbGVyTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICptb2RlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldEluZ3Jlc3NNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0IHRoZSBpbmdyZXNzIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgLSB0aGUgaW5ncmVzcyBtb2RlLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRJbmdyZXNzTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgSU4gR1RfSU5HUkVTU19NT0RFIG1vZGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0SW5ncmVzc01vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXQgdGhlIGluZ3Jlc3MgbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gdGhlIGluZ3Jlc3MgbW9kZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0SW5ncmVzc01vZGUKKAogICAgSU4gR1RfUURfREVWICAgICAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgT1VUIEdUX0lOR1JFU1NfTU9ERSAqbW9kZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRNY1JhdGVMaW1pdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldCB0aGUgcG9ydCBtdWx0aWNhc3QgcmF0ZSBsaW1pdC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgcmF0ZSAtIEdUX1RSVUUgdG8gRW5hYmxlLCBHVF9GQUxTRSBmb3Igb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldE1jUmF0ZUxpbWl0CigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgIHBvcnQsCiAgICBJTiBHVF9NQ19SQVRFICAgcmF0ZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRNY1JhdGVMaW1pdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIEdldCB0aGUgcG9ydCBtdWx0aWNhc3QgcmF0ZSBsaW1pdC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIHJhdGUgLSBHVF9UUlVFIHRvIEVuYWJsZSwgR1RfRkFMU0UgZm9yIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRNY1JhdGVMaW1pdAooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX01DX1JBVEUgICpyYXRlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldEN0ck1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBwb3J0IGNvdW50ZXJzIG1vZGUgb2Ygb3BlcmF0aW9uLgoqCiogSU5QVVRTOgoqICAgICAgIG1vZGUgIC0gdGhlIGNvdW50ZXIgbW9kZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRDdHJNb2RlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfQ1RSX01PREUgIG1vZGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0Q2xlYXJBbGxDdHIKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBjbGVhcnMgYWxsIHBvcnQgY291bnRlcnMuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRDbGVhckFsbEN0cgooCiAgICBJTiBHVF9RRF9ERVYgKmRldgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFBvcnRDdHIKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSBwb3J0IGNvdW50ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIGN0ciAtIHRoZSBjb3VudGVycyB2YWx1ZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQb3J0Q3RyCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgT1VUIEdUX1BPUlRfU1RBVCAgICAqY3RyCik7CgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQYXJ0bmVyTGlua1BhdXNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmV0cml2ZXMgdGhlIGxpbmsgcGFydG5lciBwYXVzZSBzdGF0ZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIHN0YXRlIC0gR1RfVFJVRSBmb3IgZW5hYmxlICBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQYXJ0bmVyTGlua1BhdXNlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKnN0YXRlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFNlbGZMaW5rUGF1c2UKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXRyaXZlcyB0aGUgbGluayBwYXVzZSBzdGF0ZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIHN0YXRlIC0gR1RfVFJVRSBmb3IgZW5hYmxlICBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRTZWxmTGlua1BhdXNlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKnN0YXRlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFJlc29sdmUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXRyaXZlcyB0aGUgcmVzb2x2ZSBzdGF0ZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIHN0YXRlIC0gR1RfVFJVRSBmb3IgRG9uZSAgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UmVzb2x2ZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICpzdGF0ZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRMaW5rU3RhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXRyaXZlcyB0aGUgbGluayBzdGF0ZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIHN0YXRlIC0gR1RfVFJVRSBmb3IgVXAgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldExpbmtTdGF0ZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICpzdGF0ZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQb3J0TW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJldHJpdmVzIHRoZSBwb3J0IG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gR1RfVFJVRSBmb3IgTUlJICBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQb3J0TW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICptb2RlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFBoeU1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXRyaXZlcyB0aGUgUEhZIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gR1RfVFJVRSBmb3IgTUlJIFBIWSAgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UGh5TW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICptb2RlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldER1cGxleAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJldHJpdmVzIHRoZSBwb3J0IGR1cGxleCBtb2RlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIEdUX1RSVUUgZm9yIEZ1bGwgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldER1cGxleAooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICptb2RlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFNwZWVkCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmV0cml2ZXMgdGhlIHBvcnQgc3BlZWQuCioKKiBJTlBVVFM6CiogICAgICAgc3BlZWQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIEdUX1RSVUUgZm9yIDEwME1iL3MgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFNwZWVkCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKnNwZWVkCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXREdXBsZXgKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBkdXBsZXggbW9kZSBvZiBNSUkvU05JL1JNSUkgcG9ydHMuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtICAgICB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgICAgICAgICAoZm9yIEZ1bGxTYWlsLCBpdCB3aWxsIGJlIHBvcnQgMiwgYW5kIGZvciBDbGlwcGVyU2hpcCwgCiogICAgICAgICAgICAgICAgaXQgY291bGQgYmUgZWl0aGVyIHBvcnQgNSBvciBwb3J0IDYuKQoqICAgICAgIG1vZGUgLSAgR1RfVFJVRSBmb3IgRnVsbCBEdXBsZXgsCiogICAgICAgICAgICAgICAgR1RfRkFMU0UgZm9yIEhhbGYgRHVwbGV4LgoqCiogT1VUUFVUUzogTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldER1cGxleAooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgSU4gIEdUX0JPT0wgIG1vZGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NTZXRQb3J0RGVmYXVsdFRjCioKKiBERVNDUklQVElPTjoKKiAgICAgICBTZXRzIHRoZSBkZWZhdWx0IHRyYWZmaWMgY2xhc3MgZm9yIGEgc3BlY2lmaWMgcG9ydC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgdHJhZkNsYXNzIC0gZGVmYXVsdCB0cmFmZmljIGNsYXNzIG9mIGEgcG9ydC4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdjb3NTZXRQb3J0RGVmYXVsdFRjCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgcG9ydCwKICAgIElOIEdUX1U4ICAgIHRyYWZDbGFzcwopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2Nvc0dldFBvcnREZWZhdWx0VGMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgdGhlIGRlZmF1bHQgdHJhZmZpYyBjbGFzcyBmb3IgYSBzcGVjaWZpYyBwb3J0LgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CiogICAgICAgdHJhZkNsYXNzIC0gZGVmYXVsdCB0cmFmZmljIGNsYXNzIG9mIGEgcG9ydC4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdjb3NHZXRQb3J0RGVmYXVsdFRjCigKICAgIElOICBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUICAgcG9ydCwKICAgIE9VVCBHVF9VOCAgICAgKnRyYWZDbGFzcwopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc1NldFByaW9NYXBSdWxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBwcmlvcml0eSBtYXBwaW5nIHJ1bGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgLSBHVF9UUlVFIGZvciB1c2VyIHByaW8gcnVsZSwgR1RfRkFMU0UgZm9yIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NTZXRQcmlvTWFwUnVsZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUIHBvcnQsCiAgICBJTiBHVF9CT09MICBtb2RlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc0dldFByaW9NYXBSdWxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IHRoZSBwcmlvcml0eSBtYXBwaW5nIHJ1bGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIEdUX1RSVUUgZm9yIHVzZXIgcHJpbyBydWxlLCBHVF9GQUxTRSBmb3Igb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldFByaW9NYXBSdWxlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKm1vZGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zSXBQcmlvTWFwRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzIHRoZSBJUCBwcmlvcml0eSBtYXBwaW5nLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBlbiAgIC0gR1RfVFJVRSB0byBFbmFibGUsIEdUX0ZBTFNFIGZvciBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zSXBQcmlvTWFwRW4KKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9MUE9SVCBwb3J0LAogICAgSU4gR1RfQk9PTCAgZW4KKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zR2V0SXBQcmlvTWFwRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXR1cm4gdGhlIElQIHByaW9yaXR5IG1hcHBpbmcgc3RhdGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgZW4gICAgLSBHVF9UUlVFIGZvciB1c2VyIHByaW8gcnVsZSwgR1RfRkFMU0UgZm9yIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NHZXRJcFByaW9NYXBFbgooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICplbgopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NVc2VyUHJpb01hcEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZW5hYmxlcyB0aGUgdXNlciBwcmlvcml0eSBtYXBwaW5nLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBlbiAgIC0gR1RfVFJVRSB0byBFbmFibGUsIEdUX0ZBTFNFIGZvciBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zVXNlclByaW9NYXBFbgooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUIHBvcnQsCiAgICBJTiBHVF9CT09MICBlbgopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NHZXRVc2VyUHJpb01hcEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmV0dXJuIHRoZSB1c2VyIHByaW9yaXR5IG1hcHBpbmcgc3RhdGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgZW4gICAgLSBHVF9UUlVFIGZvciB1c2VyIHByaW8gcnVsZSwgR1RfRkFMU0UgZm9yIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NHZXRVc2VyUHJpb01hcEVuCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKmVuCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2Nvc0dldFVzZXJQcmlvMlRjCioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXRzIHRoZSB0cmFmZmljIGNsYXNzIG51bWJlciBmb3IgYSBzcGVjaWZpYyA4MDIuMXAgdXNlciBwcmlvcml0eS4KKgoqIElOUFVUUzoKKiAgICAgICB1c2VyUHJpb3IgLSB1c2VyIHByaW9yaXR5CioKKiBPVVRQVVRTOgoqICAgICAgIHRyQ2xhc3MgLSBUaGUgVHJhZmZpYyBDbGFzcyB0aGUgcmVjZWl2ZWQgZnJhbWUgaXMgYXNzaWduZWQuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqICAgICAgIFRhYmxlIC0gVXNlclByaW8yVGMKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2Nvc0dldFVzZXJQcmlvMlRjCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX1U4ICAgIHVzZXJQcmlvciwKICAgIE9VVCBHVF9VOCAgICp0ckNsYXNzCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnY29zU2V0VXNlclByaW8yVGMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFNldHMgdGhlIHRyYWZmaWMgY2xhc3MgbnVtYmVyIGZvciBhIHNwZWNpZmljIDgwMi4xcCB1c2VyIHByaW9yaXR5LgoqCiogSU5QVVRTOgoqICAgICAgIHVzZXJQcmlvciAtIHVzZXIgcHJpb3JpdHkgb2YgYSBwb3J0LgoqICAgICAgIHRyQ2xhc3MgICAtIHRoZSBUcmFmZmljIENsYXNzIHRoZSByZWNlaXZlZCBmcmFtZSBpcyBhc3NpZ25lZC4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CiogICAgICAgVGFibGUgLSBVc2VyUHJpbzJUYwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnY29zU2V0VXNlclByaW8yVGMKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9VOCAgICB1c2VyUHJpb3IsCiAgICBJTiBHVF9VOCAgICB0ckNsYXNzCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnY29zR2V0RHNjcDJUYwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJldHJpZXZlcyB0aGUgdHJhZmZpYyBjbGFzcyBhc3NpZ25lZCBmb3IgYSBzcGVjaWZpYwoqICAgICAgIElQdjQgRHNjcC4KKgoqIElOUFVUUzoKKiAgICAgICBkc2NwICAgIC0gdGhlIElQdjQgZnJhbWUgZHNjcCB0byBxdWVyeS4KKgoqIE9VVFBVVFM6CiogICAgICAgdHJDbGFzcyAtIFRoZSBUcmFmZmljIENsYXNzIHRoZSByZWNlaXZlZCBmcmFtZSBpcyBhc3NpZ25lZC4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CiogICAgICAgVGFibGUgLSBVc2VyUHJpbzJUYwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnY29zR2V0RHNjcDJUYwooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9VOCAgIGRzY3AsCiAgICBPVVQgR1RfVTggICAqdHJDbGFzcwopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2Nvc1NldERzY3AyVGMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSB0cmFmZmljIGNsYXNzIGFzc2lnbmVkIGZvciBhIHNwZWNpZmljCiogICAgICAgSVB2NCBEc2NwLgoqCiogSU5QVVRTOgoqICAgICAgIGRzY3AgICAgLSB0aGUgSVB2NCBmcmFtZSBkc2NwIHRvIG1hcC4KKiAgICAgICB0ckNsYXNzIC0gdGhlIFRyYWZmaWMgQ2xhc3MgdGhlIHJlY2VpdmVkIGZyYW1lIGlzIGFzc2lnbmVkLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKiAgICAgICBUYWJsZSAtIFVzZXJQcmlvMlRjCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdjb3NTZXREc2NwMlRjCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfVTggICAgZHNjcCwKICAgIElOIEdUX1U4ICAgIHRyQ2xhc3MKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIHFkTG9hZERyaXZlcgoqCiogREVTQ1JJUFRJT046CiogICAgICAgUXVhcnRlckRlY2sgRHJpdmVyIEluaXRpYWxpemF0aW9uIFJvdXRpbmUuIAoqICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHJvdXRpbmUgdGhhdCBuZWVkcyBiZSBjYWxsZWQgYnkgc3lzdGVtIHNvZnR3YXJlLiAKKiAgICAgICBJdCB0YWtlcyBzeXNDZmcgZnJvbSBzeXN0ZW0gc29mdHdhcmUsIGFuZCByZXR1cmVzIGEgcG9pbnRlciAoKmRldikgCiogICAgICAgdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpbmNsdWRlcyBpbmZvbWF0aW9uIHJlbGF0ZWQgdG8gdGhpcyBRdWFydGVyRGVjawoqICAgICAgIGRldmljZS4gVGhpcyBwb2ludGVyICgqZGV2KSBpcyB0aGVuIHVzZWQgZm9yIGFsbCB0aGUgQVBJIGZ1bmN0aW9ucy4gCioKKiBJTlBVVFM6CiogICAgICAgc3lzQ2ZnICAgICAgLSBIb2xkcyBzeXN0ZW0gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogT1VUUFVUUzoKKiAgICAgICBkZXYgICAgICAgICAtIEhvbGRzIGdlbmVyYWwgc3lzdGVtIGluZm9ybWF0aW9uLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0FMUkVBRFlfRVhJU1QgICAgLSBpZiBkZXZpY2UgYWxyZWFkeSBzdGFydGVkCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzoKKiAgICAgcWRVbmxvYWREcml2ZXIgaXMgcHJvdmlkZWQgd2hlbiB0aGUgZHJpdmVyIGlzIG5vdCB0byBiZSB1c2VkIGFueW1vcmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIHFkTG9hZERyaXZlcgooCiAgICBJTiAgR1RfU1lTX0NPTkZJRyAgICpzeXNDZmcsCiAgICBPVVQgR1RfUURfREVWICAgICpkZXYKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIHFkVW5sb2FkRHJpdmVyCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIGZ1bmN0aW9uIHVubG9hZHMgdGhlIFF1YXRlckRlY2sgRHJpdmVyLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgMS4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG9mCiogICAgICAgICAgIHFkTG9hZERyaXZlcigpLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBxZFVubG9hZERyaXZlcgooCiAgICBJTiBHVF9RRF9ERVYqIGRldgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogc3lzRW5hYmxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIHN5c3RlbSBmb3IgZnVsbCBvcGVyYXRpb24uCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgc3lzRW5hYmxlCigKICAgIElOIEdUX1FEX0RFViogZGV2Cik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU3dSZXNldAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHByZWZvcm1zIHN3aXRjaCBzb2Z0d2FyZSByZXNldC4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1N3UmVzZXQKKAogICAgSU4gR1RfUURfREVWKiBkZXYKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXREaXNjYXJkRXhjZXNzaXZlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0IHRoZSBEaXNjYXJkIEV4Y2Vzc2l2ZSBzdGF0ZS4KKgoqIElOUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgRGlzY2FyZCBpcyBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0RGlzY2FyZEV4Y2Vzc2l2ZQooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIElOIEdUX0JPT0wgZW4KKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0RGlzY2FyZEV4Y2Vzc2l2ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldCB0aGUgRGlzY2FyZCBFeGNlc3NpdmUgc3RhdGUuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgZW4gLSBHVF9UUlVFIERpc2NhcmQgaXMgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0RGlzY2FyZEV4Y2Vzc2l2ZQooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIElOIEdUX0JPT0wgKmVuCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFNjaGVkdWxpbmdNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0IHRoZSBTY2hlZHVsaW5nIE1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgbW9kZSAtIEdUX1RSVUUgd3JyLCBHVF9GQUxTRSBzdHJpY3QuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0U2NoZWR1bGluZ01vZGUKKAogICAgSU4gR1RfUURfREVWKiBkZXYsCiAgICBJTiBHVF9CT09MIG1vZGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0U2NoZWR1bGluZ01vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXQgdGhlIFNjaGVkdWxpbmcgTW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gR1RfVFJVRSB3cnIsIEdUX0ZBTFNFIHN0cmljdC4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAtIG9uIGJhZCBwYXJhbWV0ZXIKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFNjaGVkdWxpbmdNb2RlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgT1VUIEdUX0JPT0wgKm1vZGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0TWF4RnJhbWVTaXplCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgU2V0IHRoZSBtYXggZnJhbWUgc2l6ZSBhbGxvd2VkLgoqCiogSU5QVVRTOgoqICAgICAgIG1vZGUgLSBHVF9UUlVFIG1heCBzaXplIDE1MjIsIEdUX0ZBTFNFIG1heCBzaXplIDE1MzUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0TWF4RnJhbWVTaXplCigKICAgIElOIEdUX1FEX0RFViogZGV2LAogICAgSU4gR1RfQk9PTCBtb2RlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldE1heEZyYW1lU2l6ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIEdldCB0aGUgbWF4IGZyYW1lIHNpemUgYWxsb3dlZC4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gR1RfVFJVRSBtYXggc2l6ZSAxNTIyLCBHVF9GQUxTRSBtYXggc2l6ZSAxNTM1LgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0TWF4RnJhbWVTaXplCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgT1VUIEdUX0JPT0wgKm1vZGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzUmVMb2FkCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgY2F1c2UgdG8gdGhlIHN3aXRjaCB0byByZWxvYWQgdGhlIEVFUFJPTS4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1JlTG9hZAooCiAgICBJTiBHVF9RRF9ERVYqIGRldgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFdhdGNoRG9nCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgU2V0IHRoZSB0aGUgd2F0Y2ggZG9nIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgZW4gLSBHVF9UUlVFIGVuYWJsZXMsIEdUX0ZBTFNFIGRpc2FibGUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0V2F0Y2hEb2cKKAogICAgSU4gR1RfUURfREVWKiBkZXYsCiAgICBJTiBHVF9CT09MIGVuCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFdhdGNoRG9nCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgR2V0IHRoZSB0aGUgd2F0Y2ggZG9nIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgZW4gLSBHVF9UUlVFIGVuYWJsZXMsIEdUX0ZBTFNFIGRpc2FibGUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRXYXRjaERvZwooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIE9VVCBHVF9CT09MICplbgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldER1cGxleFBhdXNlTWFjCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgZnVsbCBkdXBsZXggcGF1c2Ugc3JjIE1hYyBBZGRyZXNzLgoqCiogSU5QVVRTOgoqICAgICAgIG1hYyAtIFRoZSBNYWMgYWRkcmVzcyB0byBiZSBzZXQuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXREdXBsZXhQYXVzZU1hYwooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIElOIEdUX0VUSEVSQUREUiAqbWFjCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0RHVwbGV4UGF1c2VNYWMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBHZXRzIHRoZSBmdWxsIGR1cGxleCBwYXVzZSBzcmMgTWFjIEFkZHJlc3MuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgbWFjIC0gdGhlIE1hYyBhZGRyZXNzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0RHVwbGV4UGF1c2VNYWMKKAogICAgSU4gR1RfUURfREVWKiBkZXYsCiAgICBPVVQgR1RfRVRIRVJBRERSICptYWMKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UGVyUG9ydER1cGxleFBhdXNlTWFjCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB3aGV0aGVyIHRoZSBmdWxsIGR1cGxleCBwYXVzZSBzcmMgTWFjIEFkZHJlc3MgaXMgcGVyCiogICAgICAgcG9ydCBvciBwZXIgZGV2aWNlLgoqCiogSU5QVVRTOgoqICAgICAgIGVuIC0gR1RfVFVSRSBwZXIgcG9ydCBtYWMsIEdUX0ZBTFNFIGdsb2JhbCBtYWMuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0UGVyUG9ydER1cGxleFBhdXNlTWFjCigKICAgIElOIEdUX1FEX0RFViogZGV2LAogICAgSU4gR1RfQk9PTCBlbgopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRQZXJQb3J0RHVwbGV4UGF1c2VNYWMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBHZXRzIHdoZXRoZXIgdGhlIGZ1bGwgZHVwbGV4IHBhdXNlIHNyYyBNYWMgQWRkcmVzcyBpcyBwZXIKKiAgICAgICBwb3J0IG9yIHBlciBkZXZpY2UuCioKKiBJTlBVVFM6CiogICAgICAgZW4gLSBHVF9UVVJFIHBlciBwb3J0IG1hYywgR1RfRkFMU0UgZ2xvYmFsIG1hYy4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAtIG9uIGJhZCBwYXJhbWV0ZXIKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFBlclBvcnREdXBsZXhQYXVzZU1hYwooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIElOIEdUX0JPT0wgKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRQb3J0V2FrZW9uRnJhbWVFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgcG9ydCBpbnRlcnJ1cHQgZm9yIHdha2Ugb24gZnJhbWUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydFZlYyAtIGNvbWJpbmUgcG9ydCBpbnRlcnJ1cHQgZW5hYmxlPTEgZGlzYWJsZT0wOgoqICAgICAgICAgICAgICAgICBwb3J0IDA6IGJpdDAsIHBvcnQgMTogYml0MSwgcG9ydCAyOiBiaXQyLCAuLi4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRQb3J0V2FrZW9uRnJhbWVFbgooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX1U4ICAgICAgICBwb3J0VmVjCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRQb3J0V2FrZW9uRnJhbWVFblN0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBwb3J0IGludGVycnVwdCBzdGF0dXMgZm9yIHdha2Ugb24gZnJhbWUuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgcG9ydFZlYyAtIGNvbWJpbmUgcG9ydCBpbnRlcnJ1cHQgZW5hYmxlPTEgZGlzYWJsZT0wOgoqICAgICAgICAgICAgICAgICBwb3J0IDA6IGJpdDAsIHBvcnQgMTogYml0MSwgcG9ydCAyOiBiaXQyLCAuLi4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRQb3J0V2FrZW9uRnJhbWVFblN0CigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX1U4ICAgICAgICpwb3J0VmVjCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRQb3J0V2FrZW9uRnJhbWVFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgcG9ydCBpbnRlcnJ1cHQgc3RhdHVzIGZvciB3YWtlIG9uIGZyYW1lLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIHBvcnRWZWMgLSBjb21iaW5lIHBvcnQgaW50ZXJydXB0IGVuYWJsZT0xIGRpc2FibGU9MDoKKiAgICAgICAgICAgICAgICAgcG9ydCAwOiBiaXQwLCBwb3J0IDE6IGJpdDEsIHBvcnQgMjogYml0MiwgLi4uCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UG9ydFdha2VvbkZyYW1lRW4KKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfVTggICAgICAgKnBvcnRWZWMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFdvTE1hYwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIFdha2Ugb24gTGFuIE1hYyBBZGRyZXNzLgoqICAgICAgICBNQUMgYWRkcmVzcyBzaG91bGQgYmUgYW4gVW5pY2FzdCBhZGRyZXNzLgoqICAgICAgICBGb3IgZGlmZmVyZW50IE1BQyBBZGRyZXNzZXMgcGVyIHBvcnQgb3BlcmF0aW9uLCAKKiAgICAgICAgdXNlIGdzeXNTZXRQZXJQb3J0RHVwbGV4UGF1c2VNYWMgQVBJLgoqCiogSU5QVVRTOgoqICAgICAgIG1hYyAtIFRoZSBNYWMgYWRkcmVzcyB0byBiZSBzZXQuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRXb0xNYWMKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9FVEhFUkFERFIgKm1hYwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0V29MTWFjCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgR2V0cyB0aGUgV2FrZSBvbiBMYW4gTWFjIEFkZHJlc3MuCiogICAgICAgIEZvciBkaWZmZXJlbnQgTUFDIEFkZHJlc3NlcyBwZXIgcG9ydCBvcGVyYXRpb24sIAoqICAgICAgICB1c2UgZ3N5c0dldFBlclBvcnREdXBsZXhQYXVzZU1hYyBBUEkuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgbWFjIC0gdGhlIE1hYyBhZGRyZXNzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0V29MTWFjCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIE9VVCBHVF9FVEhFUkFERFIgKm1hYwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UGVyUG9ydFdvTE1hYwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgd2hldGhlciB0aGUgV2FrZSBvbiBMYW4gTWFjIEFkZHJlc3MgaXMgcGVyCiogICAgICAgcG9ydCBvciBwZXIgZGV2aWNlLgoqCiogSU5QVVRTOgoqICAgICAgIGVuIC0gR1RfVFVSRSBwZXIgcG9ydCBtYWMsIEdUX0ZBTFNFIGdsb2JhbCBtYWMuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0UGVyUG9ydFdvTE1hYwooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0JPT0wgICAgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0UGVyUG9ydFdvTE1hYwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIEdldHMgd2hldGhlciB0aGUgV2FrZSBvbiBMYW5jIE1hYyBBZGRyZXNzIGlzIHBlcgoqICAgICAgIHBvcnQgb3IgcGVyIGRldmljZS4KKgoqIElOUFVUUzoKKiAgICAgICBlbiAtIEdUX1RVUkUgcGVyIHBvcnQgbWFjLCBHVF9GQUxTRSBnbG9iYWwgbWFjLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UGVyUG9ydFdvTE1hYwooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfQk9PTCAgICAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0V29MUGFzcwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIFdha2Ugb24gTGFuIFBhc3N3b3JkIE1hYyBBZGRyZXNzLgoqCiogSU5QVVRTOgoqICAgICAgIG1hYyAtIFRoZSBNYWMgYWRkcmVzcyB0byBiZSBzZXQuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRXb0xQYXNzCigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfRVRIRVJBRERSICptYWMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFdvTFBhc3MKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBHZXRzIHRoZSBXYWtlIG9uIExhbiBwYXNzd29yZCBNYWMgQWRkcmVzcy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBtYWMgLSB0aGUgTWFjIGFkZHJlc3MuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRXb0xQYXNzCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIE9VVCBHVF9FVEhFUkFERFIgKm1hYwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzUmVhZE1paVJlZ2lzdGVyCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmVhZHMgUXVhcnRlckRlY2sgUmVnaXN0ZXJzLiBTaW5jZSB0aGlzIHJvdXRpbmUgaXMgb25seSBmb3IKKiAgICAgICAgRGlhZ25vc3RpYyBQdXJwb3NlLCBubyBlcnJvciBjaGVja2luZyB3aWxsIGJlIHBlcmZvcm1lZC4KKiAgICAgICAgVXNlciBoYXMgdG8ga25vdyBleGFjdGx5IHdoaWNoIHBoeSBhZGRyZXNzKDAgfiAweDFGKSB3aWxsIGJlIHJlYWQuCioKKiBJTlBVVFM6CiogICAgICAgcGh5QWRkciAtIFBoeSBBZGRyZXNzIHRvIHJlYWQgdGhlIHJlZ2lzdGVyIGZvci4oIDAgfiAweDFGICkKKiAgICAgICByZWdBZGRyIC0gVGhlIHJlZ2lzdGVyJ3MgYWRkcmVzcy4KKgoqIE9VVFBVVFM6CiogICAgICAgZGF0YSAgICAtIFRoZSByZWFkIHJlZ2lzdGVyJ3MgZGF0YS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzUmVhZE1paVJlZwooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIElOICBHVF9VMzIgICAgcGh5QWRkciwKICAgIElOICBHVF9VMzIgICAgcmVnQWRkciwKICAgIE9VVCBHVF9VMzIgICAgKmRhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1dyaXRlTWlpUmVnaXN0ZXIKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSB3cml0ZXMgUXVhcnRlckRlY2sgUmVnaXN0ZXJzLiBTaW5jZSB0aGlzIHJvdXRpbmUgaXMgb25seSBmb3IKKiAgICAgICAgRGlhZ25vc3RpYyBQdXJwb3NlLCBubyBlcnJvciBjaGVja2luZyB3aWxsIGJlIHBlcmZvcm1lZC4KKiAgICAgICAgVXNlciBoYXMgdG8ga25vdyBleGFjdGx5IHdoaWNoIHBoeSBhZGRyZXNzKDAgfiAweDFGKSB3aWxsIGJlIHJlYWQuCioKKiBJTlBVVFM6CiogICAgICAgcGh5QWRkciAtIFBoeSBBZGRyZXNzIHRvIHJlYWQgdGhlIHJlZ2lzdGVyIGZvci4oIDAgfiAweDFGICkKKiAgICAgICByZWdBZGRyIC0gVGhlIHJlZ2lzdGVyJ3MgYWRkcmVzcy4KKiAgICAgICBkYXRhICAgIC0gZGF0YSB0byBiZSB3cml0dGVuLgoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNXcml0ZU1paVJlZwooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIElOICBHVF9VMzIgICAgcGh5QWRkciwKICAgIElOICBHVF9VMzIgICAgcmVnQWRkciwKICAgIElOICBHVF9VMTYgICAgZGF0YQopOwoKI2lmZGVmIEdUX1JNR01UX0FDQ0VTUwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNBY2Nlc3NNdWx0aVJlZ3MKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgZnVuY3Rpb24gYWNjZXNzZXMgc3dpdGNoJ3MgcmVnaXN0ZXJzLgoqCiogSU5QVVRTOgoqICAgcmVnTGlzdCAgICAgLSBsaXN0IG9mIEhXX0RFVl9SV19SRUcuCiogICAgIEhXX0RFVl9SV19SRUc6CiogICAgIGNtZCAtIEhXX1JFR19SRUFELCBIV19SRUdfV1JJVEUsIEhXX1JFR19XQUlUX1RJTExfMCBvciBIV19SRUdfV0FJVF9USUxMXzEgCiogICAgIGFkZHIgLSBTTUkgQWRkcmVzcyAKKiAgICAgcmVnICAtIFJlZ2lzdGVyIG9mZnNldCAKKiAgICAgZGF0YSAtIElOUFVULE9VVFBVVDpWYWx1ZSBpbiB0aGUgUmVnaXN0ZXIgb3IgQml0IG51bWJlcgoqICAgICAKKiBPVVRQVVRTOgoqICAgcmVnTGlzdAoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNBY2Nlc3NNdWx0aVJlZ3MKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU5PVVQgSFdfREVWX1JFR19BQ0NFU1MgKnJlZ0xpc3QKKTsKI2VuZGlmCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRTV19Nb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IHRoZSBTd2l0Y2ggbW9kZS4gVGhlc2UgdHdvIGJpdHMgcmV0dXJlbiAKKiAgICAgICB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgU1dfTU9ERVsxOjBdIHBpbnMuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIEdUX1RSVUUgRGlzY2FyZCBpcyBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgICAgVGhpcyBmZWF0dXJlIGlzIGZvciBib3RoIGNsaXBwZXJzaGlwIGFuZCBmdWxsc2FpbAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0U1dfTW9kZQooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIElOIEdUX1NXX01PREUgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEluaXRSZWFkeQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldCB0aGUgSW5pdFJlYWR5IGJpdC4gVGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lIHdoZW4gdGhlIEFUVSwKKiAgICAgICB0aGUgUXVldWUgQ29udHJvbGxlciBhbmQgdGhlIFN0YXRpc3RpY3MgQ29udHJvbGxlciBhcmUgZG9uZSB3aXRoIHRoZWlyIAoqICAgICAgIGluaXRpYWxpemF0aW9uIGFuZCBhcmUgcmVhZHkgdG8gYWNjZXB0IGZyYW1lcy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gR1RfVFJVRTogc3dpdGNoIGlzIHJlYWR5LCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgICAgVGhpcyBmZWF0dXJlIGlzIGZvciBib3RoIGNsaXBwZXJzaGlwIGFuZCBmdWxsc2FpbAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0SW5pdFJlYWR5CigKICAgIElOIEdUX1FEX0RFViogZGV2LAogICAgSU4gR1RfQk9PTCAqbW9kZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N0YXRzRmx1c2hBbGwKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEZsdXNoIEFsbCBSTU9OIGNvdW50ZXJzIGZvciBhbGwgcG9ydHMuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0YXRzRmx1c2hBbGwKKAogICAgSU4gR1RfUURfREVWKiBkZXYKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N0YXRzRmx1c2hQb3J0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBGbHVzaCBBbGwgUk1PTiBjb3VudGVycyBmb3IgYSBnaXZlbiBwb3J0LgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCiogICAgICAgTm9uZQoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3RhdHNGbHVzaFBvcnQKKAogICAgSU4gR1RfUURfREVWKiBkZXYsCiAgICBJTiBHVF9MUE9SVCAgICBwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdGF0c0dldFBvcnRDb3VudGVyCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGdldHMgYSBzcGVjaWZpYyBjb3VudGVyIG9mIHRoZSBnaXZlbiBwb3J0CioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgY291bnRlciAtIHRoZSBjb3VudGVyIHdoaWNoIHdpbGwgYmUgcmVhZAoqCiogT1VUUFVUUzoKKiAgICAgICAgc3RhdHNEYXRhIC0gcG9pbnRzIHRvIDMyYml0IGRhdGEgc3RvcmFnZSBmb3IgdGhlIE1JQiBjb3VudGVyCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdGF0c0dldFBvcnRDb3VudGVyCigKICAgIElOICBHVF9RRF9ERVYgICAgICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgICAgIHBvcnQsCiAgICBJTiAgR1RfU1RBVFNfQ09VTlRFUlMgICAgY291bnRlciwKICAgIE9VVCBHVF9VMzIgICAgICAgICAgICAqc3RhdHNEYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdGF0c0dldFBvcnRBbGxDb3VudGVycwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgYWxsIFJNT04gY291bnRlcnMgb2YgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIHN0YXRzQ291bnRlclNldCAtIHBvaW50cyB0byBHVF9TVEFUU19DT1VOVEVSX1NFVCBmb3IgdGhlIE1JQiBjb3VudGVycwoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3RhdHNHZXRQb3J0QWxsQ291bnRlcnMKKAogICAgSU4gIEdUX1FEX0RFViogZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgT1VUIEdUX1NUQVRTX0NPVU5URVJfU0VUICAgICpzdGF0c0NvdW50ZXJTZXQKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY1NldExpbWl0TW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIHBvcnQncyByYXRlIGNvbnRyb2wgaW5ncmVzcyBsaW1pdCBtb2RlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgICAgIC0gcmF0ZSBjb250cm9sIGluZ3Jlc3MgbGltaXQgbW9kZS4gCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNTZXRMaW1pdE1vZGUKKAogICAgSU4gR1RfUURfREVWKiAgICAgICAgICAgIGRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICAgIHBvcnQsCiAgICBJTiBHVF9SQVRFX0xJTUlUX01PREUgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNHZXRMaW1pdE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSBwb3J0J3MgcmF0ZSBjb250cm9sIGluZ3Jlc3MgbGltaXQgbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAgICAgLSByYXRlIGNvbnRyb2wgaW5ncmVzcyBsaW1pdCBtb2RlLiAKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjR2V0TGltaXRNb2RlCigKICAgIElOIEdUX1FEX0RFViogZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfUkFURV9MSU1JVF9NT0RFICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY1NldFByaTNSYXRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgaW5ncmVzcyBkYXRhIHJhdGUgbGltaXQgZm9yIHByaW9yaXR5IDMgZnJhbWVzLgoqICAgICAgIFByaW9yaXR5IDMgZnJhbWVzIHdpbGwgYmUgZGlzY2FyZGVkIGFmdGVyIHRoZSBpbmdyZXNzIHJhdGUgc2VsZWN0aW9uCiogICAgICAgaXMgcmVhY2hlZCBvciBleGNlZWRlZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgbW9kZSAtIHRoZSBwcmlvcml0eSAzIGZyYW1lIHJhdGUgbGltaXQgbW9kZQoqICAgICAgICAgICAgICBHVF9GQUxTRTogdXNlIHRoZSBzYW1lIHJhdGUgYXMgUHJpMlJhdGUKKiAgICAgICAgICAgICAgR1RfVFJVRTogIHVzZSB0d2ljZSB0aGUgcmF0ZSBhcyBQcmkyUmF0ZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNTZXRQcmkzUmF0ZQooCiAgICBJTiBHVF9RRF9ERVYqICAgICAgICAgICAgZGV2LAogICAgSU4gR1RfTFBPUlQgcG9ydCwKICAgIElOIEdUX0JPT0wgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjR2V0UHJpM1JhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSBpbmdyZXNzIGRhdGEgcmF0ZSBsaW1pdCBmb3IgcHJpb3JpdHkgMyBmcmFtZXMuCiogICAgICAgUHJpb3JpdHkgMyBmcmFtZXMgd2lsbCBiZSBkaXNjYXJkZWQgYWZ0ZXIgdGhlIGluZ3Jlc3MgcmF0ZSBzZWxlY3Rpb24KKiAgICAgICBpcyByZWFjaGVkIG9yIGV4Y2VlZGVkLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgLSB0aGUgcHJpb3JpdHkgMyBmcmFtZSByYXRlIGxpbWl0IG1vZGUKKiAgICAgICAgICAgICAgR1RfRkFMU0U6IHVzZSB0aGUgc2FtZSByYXRlIGFzIFByaTJSYXRlCiogICAgICAgICAgICAgIEdUX1RSVUU6ICB1c2UgdHdpY2UgdGhlIHJhdGUgYXMgUHJpMlJhdGUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjR2V0UHJpM1JhdGUKKAogICAgSU4gR1RfUURfREVWKiBkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNTZXRQcmkyUmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIGluZ3Jlc3MgZGF0YSByYXRlIGxpbWl0IGZvciBwcmlvcml0eSAyIGZyYW1lcy4KKiAgICAgICBQcmlvcml0eSAyIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZCBhZnRlciB0aGUgaW5ncmVzcyByYXRlIHNlbGVjdGlvbgoqICAgICAgIGlzIHJlYWNoZWQgb3IgZXhjZWVkZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgLSB0aGUgcHJpb3JpdHkgMiBmcmFtZSByYXRlIGxpbWl0IG1vZGUKKiAgICAgICAgICAgICAgR1RfRkFMU0U6IHVzZSB0aGUgc2FtZSByYXRlIGFzIFByaTFSYXRlCiogICAgICAgICAgICAgIEdUX1RSVUU6ICB1c2UgdHdpY2UgdGhlIHJhdGUgYXMgUHJpMVJhdGUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjU2V0UHJpMlJhdGUKKAogICAgSU4gR1RfUURfREVWKiAgICAgICAgICAgIGRldiwKICAgIElOIEdUX0xQT1JUIHBvcnQsCiAgICBJTiBHVF9CT09MICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY0dldFByaTJSYXRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgaW5ncmVzcyBkYXRhIHJhdGUgbGltaXQgZm9yIHByaW9yaXR5IDIgZnJhbWVzLgoqICAgICAgIFByaW9yaXR5IDIgZnJhbWVzIHdpbGwgYmUgZGlzY2FyZGVkIGFmdGVyIHRoZSBpbmdyZXNzIHJhdGUgc2VsZWN0aW9uCiogICAgICAgaXMgcmVhY2hlZCBvciBleGNlZWRlZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gdGhlIHByaW9yaXR5IDIgZnJhbWUgcmF0ZSBsaW1pdCBtb2RlCiogICAgICAgICAgICAgIEdUX0ZBTFNFOiB1c2UgdGhlIHNhbWUgcmF0ZSBhcyBQcmkxUmF0ZQoqICAgICAgICAgICAgICBHVF9UUlVFOiAgdXNlIHR3aWNlIHRoZSByYXRlIGFzIFByaTFSYXRlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY0dldFByaTJSYXRlCigKICAgIElOIEdUX1FEX0RFViogICAgICAgICAgICBkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNTZXRQcmkxUmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIGluZ3Jlc3MgZGF0YSByYXRlIGxpbWl0IGZvciBwcmlvcml0eSAxIGZyYW1lcy4KKiAgICAgICBQcmlvcml0eSAxIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZCBhZnRlciB0aGUgaW5ncmVzcyByYXRlIHNlbGVjdGlvbgoqICAgICAgIGlzIHJlYWNoZWQgb3IgZXhjZWVkZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgLSB0aGUgcHJpb3JpdHkgMSBmcmFtZSByYXRlIGxpbWl0IG1vZGUKKiAgICAgICAgICAgICAgR1RfRkFMU0U6IHVzZSB0aGUgc2FtZSByYXRlIGFzIFByaTBSYXRlCiogICAgICAgICAgICAgIEdUX1RSVUU6ICB1c2UgdHdpY2UgdGhlIHJhdGUgYXMgUHJpMFJhdGUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjU2V0UHJpMVJhdGUKKAogICAgSU4gR1RfUURfREVWKiAgICAgICAgICAgIGRldiwKICAgIElOIEdUX0xQT1JUIHBvcnQsCiAgICBJTiBHVF9CT09MICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY0dldFByaTFSYXRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgaW5ncmVzcyBkYXRhIHJhdGUgbGltaXQgZm9yIHByaW9yaXR5IDEgZnJhbWVzLgoqICAgICAgIFByaW9yaXR5IDEgZnJhbWVzIHdpbGwgYmUgZGlzY2FyZGVkIGFmdGVyIHRoZSBpbmdyZXNzIHJhdGUgc2VsZWN0aW9uCiogICAgICAgaXMgcmVhY2hlZCBvciBleGNlZWRlZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gdGhlIHByaW9yaXR5IDEgZnJhbWUgcmF0ZSBsaW1pdCBtb2RlCiogICAgICAgICAgICAgIEdUX0ZBTFNFOiB1c2UgdGhlIHNhbWUgcmF0ZSBhcyBQcmkwUmF0ZQoqICAgICAgICAgICAgICBHVF9UUlVFOiAgdXNlIHR3aWNlIHRoZSByYXRlIGFzIFByaTBSYXRlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY0dldFByaTFSYXRlCigKICAgIElOIEdUX1FEX0RFViogICAgICAgICAgICBkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNTZXRQcmkwUmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIHBvcnQncyBpbmdyZXNzIGRhdGEgbGltaXQgZm9yIHByaW9yaXR5IDAgZnJhbWVzLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIHJhdGUgICAgLSBpbmdyZXNzIGRhdGEgcmF0ZSBsaW1pdCBmb3IgcHJpb3JpdHkgMCBmcmFtZXMuIFRoZXNlIGZyYW1lcwoqICAgICAgICAgICAgIHdpbGwgYmUgZGlzY2FyZGVkIGFmdGVyIHRoZSBpbmdyZXNzIHJhdGUgc2VsZWN0ZWQgaXMgcmVhY2hlZCAKKiAgICAgICAgICAgICBvciBleGNlZWRlZC4gCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY1NldFByaTBSYXRlCigKICAgIElOIEdUX1FEX0RFViogICAgICAgICAgICBkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIElOIEdUX1BSSTBfUkFURSAgICByYXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY0dldFByaTBSYXRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgcG9ydCdzIGluZ3Jlc3MgZGF0YSBsaW1pdCBmb3IgcHJpb3JpdHkgMCBmcmFtZXMuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIgdG8gc2V0LgoqCiogT1VUUFVUUzoKKiAgICAgICByYXRlICAgIC0gaW5ncmVzcyBkYXRhIHJhdGUgbGltaXQgZm9yIHByaW9yaXR5IDAgZnJhbWVzLiBUaGVzZSBmcmFtZXMKKiAgICAgICAgICAgICB3aWxsIGJlIGRpc2NhcmRlZCBhZnRlciB0aGUgaW5ncmVzcyByYXRlIHNlbGVjdGVkIGlzIHJlYWNoZWQgCiogICAgICAgICAgICAgb3IgZXhjZWVkZWQuIAoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNHZXRQcmkwUmF0ZQooCiAgICBJTiBHVF9RRF9ERVYqICAgICAgICAgICAgZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfUFJJMF9SQVRFICAgICpyYXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY1NldEJ5dGVzQ291bnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBieWV0cyB0byBjb3VudCBmb3IgbGltaXRpbmcgbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZAoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIgdG8gc2V0LgoqICAgICAgICBsaW1pdE1HTVQgLSBHVF9UUlVFOiBUbyBsaW1pdCBhbmQgY291bnQgTUdNVCBmcmFtZSBieXRlcwoqICAgICAgICAgICAgICAgIEdUX0ZBTFNFOiBvdGhlcndpc2UKKiAgICAgICAgY291bnRJRkcgIC0gR1RfVFJVRTogVG8gY291bnQgSUZHIGJ5dGVzCiogICAgICAgICAgICAgICAgR1RfRkFMU0U6IG90aGVyd2lzZQoqICAgICAgICBjb3VudFByZSAgLSBHVF9UUlVFOiBUbyBjb3VudCBQcmVhbWJsZSBieXRlcwoqICAgICAgICAgICAgICAgIEdUX0ZBTFNFOiBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjU2V0Qnl0ZXNDb3VudAooCiAgICBJTiBHVF9RRF9ERVYqICAgICAgIGRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICAgICAgcG9ydCwKICAgIElOIEdUX0JPT0wgICAgICAgICBsaW1pdE1HTVQsCiAgICBJTiBHVF9CT09MICAgICAgICAgY291bnRJRkcsCiAgICBJTiBHVF9CT09MICAgICAgICAgY291bnRQcmUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjR2V0Qnl0ZXNDb3VudAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgdGhlIGJ5ZXRzIHRvIGNvdW50IGZvciBsaW1pdGluZyBuZWVkcyB0byBiZSBkZXRlcm1pbmVkCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIgCioKKiBPVVRQVVRTOgoqICAgICAgICBsaW1pdE1HTVQgLSBHVF9UUlVFOiBUbyBsaW1pdCBhbmQgY291bnQgTUdNVCBmcmFtZSBieXRlcwoqICAgICAgICAgICAgICAgIEdUX0ZBTFNFOiBvdGhlcndpc2UKKiAgICAgICAgY291bnRJRkcgIC0gR1RfVFJVRTogVG8gY291bnQgSUZHIGJ5dGVzCiogICAgICAgICAgICAgICAgR1RfRkFMU0U6IG90aGVyd2lzZQoqICAgICAgICBjb3VudFByZSAgLSBHVF9UUlVFOiBUbyBjb3VudCBQcmVhbWJsZSBieXRlcwoqICAgICAgICAgICAgICAgIEdUX0ZBTFNFOiBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjR2V0Qnl0ZXNDb3VudAooCiAgICBJTiBHVF9RRF9ERVYqICAgICAgIGRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICAgICAgcG9ydCwKICAgIElOIEdUX0JPT0wgICAgICAgICAqbGltaXRNR01ULAogICAgSU4gR1RfQk9PTCAgICAgICAgICpjb3VudElGRywKICAgIElOIEdUX0JPT0wgICAgICAgICAqY291bnRQcmUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjU2V0RWdyZXNzUmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIHBvcnQncyBlZ3Jlc3MgZGF0YSBsaW1pdC4KKiAgICAgICAgCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAgIC0gbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICByYXRlVHlwZSAgLSBlZ3Jlc3MgZGF0YSByYXRlIGxpbWl0IChHVF9FUkFURV9UWVBFIHVuaW9uIHR5cGUpLiAKKiAgICAgICAgICAgICAgICAgICAgdW5pb24gdHlwZSBpcyB1c2VkIHRvIHN1cHBvcnQgbXVsdGlwbGUgZGV2aWNlcyB3aXRoIHRoZQoqICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgZm9ybWF0cyBvZiBlZ3Jlc3MgcmF0ZS4KKiAgICAgICAgICAgICAgICAgICAgR1RfRVJBVEVfVFlQRSBoYXMgdGhlIGZvbGxvd2luZyBmaWVsZHM6CiogICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkUmF0ZSAtIEdUX0VHUkVTU19SQVRFIGVudW0gdHlwZSBzaG91bGQgdXNlZCBmb3IgdGhlIAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBkZXZpY2VzOgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg4RTYyMTgsIDg4RTYzMTgsIDg4RTYwNjMsIDg4RTYwODMsIDg4RTYxODEsIDg4RTYxODMsCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgODhFNjA5MywgODhFNjA5NSwgODhFNjE4NSwgODhFNjEwOCwgODhFNjA2NSwgODhFNjA2MSwgCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZWlyIHZhcmlhdGlvbnMKKiAgICAgICAgICAgICAgICAgICAgICAgIGtiUmF0ZSAtIHJhdGUgaW4ga2JwcyB0aGF0IHNob3VsZCB1c2VkIGZvciB0aGUgZm9sbG93aW5nIAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZXM6CiogICAgICAgICAgICAgICAgICAgICAgICAgICAgODhFNjA5NywgODhFNjA5NiB3aXRoIHRoZSBHVF9QSVJMX0VMSU1JVF9NT0RFIG9mIAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVF9QSVJMX0VMSU1JVF9MQVlFUjEsCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUX1BJUkxfRUxJTUlUX0xBWUVSMiwgb3IgCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUX1BJUkxfRUxJTUlUX0xBWUVSMyAoc2VlIGdyY1NldEVMaW1pdE1vZGUpCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgNjRrYnBzIH4gMU1icHMgICAgOiBpbmNyZW1lbnRzIG9mIDY0a2JwcywKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxTWJwcyB+IDEwME1icHMgICA6IGluY3JlbWVudHMgb2YgMU1icHMsIGFuZAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwME1icHMgfiAxMDAwTWJwczogaW5jcmVtZW50cyBvZiAxME1icHMKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVyZWZvcmUsIHRoZSB2YWxpZCB2YWx1ZXMgYXJlOgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NCwgMTI4LCAxOTIsIDI1NiwgMzIwLCAzODQsLi4uLCA5NjAsCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAsIDIwMDAsIDMwMDAsIDQwMDAsIC4uLiwgMTAwMDAwLAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTAwMDAsIDEyMDAwMCwgMTMwMDAwLCAuLi4sIDEwMDAwMDAuCiogICAgICAgICAgICAgICAgICAgICAgICBmUmF0ZSAtIGZyYW1lIHBlciBzZWNvbmQgdGhhdCBzaG91bGQgdXNlZCBmb3IgdGhlIGZvbGxvd2luZwoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZXM6CiogICAgICAgICAgICAgICAgICAgICAgICAgICAgODhFNjA5NywgODhFNjA5NiB3aXRoIEdUX1BJUkxfRUxJTUlUX01PREUgb2YgCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUX1BJUkxfRUxJTUlUX0ZSQU1FCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDc2MDAgYW5kIDE0ODgwMDAKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqIENPTU1FTlRTOiAKKiAgICAgICAgICAgIEdUXzE2TSwgR1RfMzJNLCBHVF82NE0sIEdUXzEyOE0sIGFuZCBHVF8yNTZNIGluIEdUX0VHUkVTU19SQVRFIGVudW0KKiAgICAgICAgICAgIGFyZSBzdXBwb3J0ZWQgb25seSBieSBHaWdhYml0IEV0aGVybmV0IFN3aXRjaC4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjU2V0RWdyZXNzUmF0ZQooCiAgICBJTiBHVF9RRF9ERVYgICAgICAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgSU4gR1RfRVJBVEVfVFlQRSAgICpyYXRlVHlwZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNHZXRFZ3Jlc3NSYXRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgcG9ydCdzIGVncmVzcyBkYXRhIGxpbWl0LgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICByYXRlVHlwZSAgLSBlZ3Jlc3MgZGF0YSByYXRlIGxpbWl0IChHVF9FUkFURV9UWVBFIHVuaW9uIHR5cGUpLiAKKiAgICAgICAgICAgICAgICAgICAgdW5pb24gdHlwZSBpcyB1c2VkIHRvIHN1cHBvcnQgbXVsdGlwbGUgZGV2aWNlcyB3aXRoIHRoZQoqICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgZm9ybWF0cyBvZiBlZ3Jlc3MgcmF0ZS4KKiAgICAgICAgICAgICAgICAgICAgR1RfRVJBVEVfVFlQRSBoYXMgdGhlIGZvbGxvd2luZyBmaWVsZHM6CiogICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkUmF0ZSAtIEdUX0VHUkVTU19SQVRFIGVudW0gdHlwZSBzaG91bGQgdXNlZCBmb3IgdGhlIAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd2luZyBkZXZpY2VzOgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg4RTYyMTgsIDg4RTYzMTgsIDg4RTYwNjMsIDg4RTYwODMsIDg4RTYxODEsIDg4RTYxODMsCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgODhFNjA5MywgODhFNjA5NSwgODhFNjE4NSwgODhFNjEwOCwgODhFNjA2NSwgODhFNjA2MSwgCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZWlyIHZhcmlhdGlvbnMKKiAgICAgICAgICAgICAgICAgICAgICAgIGtiUmF0ZSAtIHJhdGUgaW4ga2JwcyB0aGF0IHNob3VsZCB1c2VkIGZvciB0aGUgZm9sbG93aW5nIAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZXM6CiogICAgICAgICAgICAgICAgICAgICAgICAgICAgODhFNjA5NywgODhFNjA5NiB3aXRoIHRoZSBHVF9QSVJMX0VMSU1JVF9NT0RFIG9mIAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVF9QSVJMX0VMSU1JVF9MQVlFUjEsCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUX1BJUkxfRUxJTUlUX0xBWUVSMiwgb3IgCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUX1BJUkxfRUxJTUlUX0xBWUVSMyAoc2VlIGdyY1NldEVMaW1pdE1vZGUpCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgNjRrYnBzIH4gMU1icHMgICAgOiBpbmNyZW1lbnRzIG9mIDY0a2JwcywKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxTWJwcyB+IDEwME1icHMgICA6IGluY3JlbWVudHMgb2YgMU1icHMsIGFuZAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwME1icHMgfiAxMDAwTWJwczogaW5jcmVtZW50cyBvZiAxME1icHMKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVyZWZvcmUsIHRoZSB2YWxpZCB2YWx1ZXMgYXJlOgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NCwgMTI4LCAxOTIsIDI1NiwgMzIwLCAzODQsLi4uLCA5NjAsCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAsIDIwMDAsIDMwMDAsIDQwMDAsIC4uLiwgMTAwMDAwLAoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTAwMDAsIDEyMDAwMCwgMTMwMDAwLCAuLi4sIDEwMDAwMDAuCiogICAgICAgICAgICAgICAgICAgICAgICBmUmF0ZSAtIGZyYW1lIHBlciBzZWNvbmQgdGhhdCBzaG91bGQgdXNlZCBmb3IgdGhlIGZvbGxvd2luZwoqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZXM6CiogICAgICAgICAgICAgICAgICAgICAgICAgICAgODhFNjA5NywgODhFNjA5NiB3aXRoIEdUX1BJUkxfRUxJTUlUX01PREUgb2YgCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUX1BJUkxfRUxJTUlUX0ZSQU1FCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWQgdmFsdWVzIGFyZSBiZXR3ZWVuIDc2MDAgYW5kIDE0ODgwMDAKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqIENPTU1FTlRTOgoqICAgICAgICAgICAgR1RfMTZNLCBHVF8zMk0sIEdUXzY0TSwgR1RfMTI4TSwgYW5kIEdUXzI1Nk0gaW4gR1RfRUdSRVNTX1JBVEUgZW51bQoqICAgICAgICAgICAgYXJlIHN1cHBvcnRlZCBvbmx5IGJ5IEdpZ2FiaXQgRXRoZXJuZXQgU3dpdGNoLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNHZXRFZ3Jlc3NSYXRlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfRVJBVEVfVFlQRSAgKnJhdGVUeXBlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGF2U2V0UEFWCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgUG9ydCBBc3NvY2lhdGlvbiBWZWN0b3IgCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgcGF2ICAgICAtIFBvcnQgQXNzb2NpYXRpb24gVmVjdG9yIAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGF2U2V0UEFWCigKICAgIElOIEdUX1FEX0RFViogICAgICAgZGV2LAogICAgSU4gR1RfTFBPUlQgICAgcG9ydCwKICAgIElOIEdUX1UxNiAgICBwYXYKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BhdkdldFBBVgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgdGhlIFBvcnQgQXNzb2NpYXRpb24gVmVjdG9yIAoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBwYXYgICAgIC0gUG9ydCBBc3NvY2lhdGlvbiBWZWN0b3IgCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwYXZHZXRQQVYKKAogICAgSU4gR1RfUURfREVWKiAgICAgICBkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9VMTYgICAgKnBhdgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGF2U2V0SW5ncmVzc01vbml0b3IKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBJbmdyZXNzIE1vbml0b3IgYml0IGluIHRoZSBQQVYuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgLSB0aGUgaW5ncmVzcyBtb25pdG9yIGJpdCBpbiB0aGUgUEFWCiogICAgICAgICAgICAgIEdUX0ZBTFNFOiBJbmdyZXNzIE1vbml0b3IgZW5hYmxlZCAKKiAgICAgICAgICAgICAgR1RfVFJVRTogIEluZ3Jlc3MgTW9uaXRvciBkaXNhYmxlZCAKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGF2U2V0SW5ncmVzc01vbml0b3IKKAogICAgSU4gR1RfUURfREVWKiAgICAgICBkZXYsCiAgICBJTiBHVF9MUE9SVCBwb3J0LAogICAgSU4gR1RfQk9PTCAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGF2R2V0SW5ncmVzc01vbml0b3IKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSBJbmdyZXNzIE1vbml0b3IgYml0IGluIHRoZSBQQVYuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIAoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIHRoZSBpbmdyZXNzIG1vbml0b3IgYml0IGluIHRoZSBQQVYKKiAgICAgICAgICAgICAgR1RfRkFMU0U6IEluZ3Jlc3MgTW9uaXRvciBlbmFibGVkIAoqICAgICAgICAgICAgICBHVF9UUlVFOiAgSW5ncmVzcyBNb25pdG9yIGRpc2FibGVkIAoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGF2R2V0SW5ncmVzc01vbml0b3IKKAogICAgSU4gR1RfUURfREVWKiAgICAgICBkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmN0R2V0Q2FibGVTdGF0dXMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBwZXJmb3JtIHRoZSB2aXJ0dWFsIGNhYmxlIHRlc3QgZm9yIHRoZSByZXF1ZXN0ZWQgcG9ydCwKKiAgICAgICBhbmQgcmV0dXJucyB0aGUgdGhlIHN0YXR1cyBwZXIgTURJIHBhaXIuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIGNhYmxlU3RhdHVzIC0gdGhlIHBvcnQgY29wcGVyIGNhYmxlIHN0YXR1cy4KKiAgICAgICBjYWJsZUxlbiAgICAtIHRoZSBwb3J0IGNvcHBlciBjYWJsZSBsZW5ndGguCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBJbnRlcm5hbCBHaWdhYml0IFBoeXMgaW4gODhFNjE2NSBmYW1pbHkgYW5kIDg4RTYzNTEgZmFtaWx5IGRldmljZXMKKiAgICAgICAgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBBUEkuIEZvciB0aG9zZSBkZXZpY2VzLCBndmN0R2V0QWR2Q2FibGVEaWFnIAoqICAgICAgICBBUEkgY2FuIGJlIHVzZWQsIGluc3RlYWQuCioKCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmN0R2V0Q2FibGVEaWFnCigKICAgIElOIEdUX1FEX0RFViogICAgICAgZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgT1VUIEdUX0NBQkxFX1NUQVRVUyAqY2FibGVTdGF0dXMKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2Y3RHZXQxMDAwQlRFeHRlbmRlZFN0YXR1cwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJldHJpZXZlcyBleHRlbmRlZCBjYWJsZSBzdGF0dXMsIHN1Y2ggYXMgUGFpciBQb2xvYXJpdHksCiogICAgICAgIFBhaXIgU3dhcCwgYW5kIFBhaXIgU2tldy4gTm90ZSB0aGF0IHRoaXMgcm91dGluZSB3aWxsIGJlIHN1Y2Nlc3Mgb25seQoqICAgICAgICBpZiAxMDAwQmFzZS1UIExpbmsgaXMgdXAuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIGV4dGVuZGVkU3RhdHVzIC0gdGhlIGV4dGVuZGVkIGNhYmxlIHN0YXR1cy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVELSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKiBDT01NRU5UUzoKKiAgICAgICBJbnRlcm5hbCBHaWdhYml0IFBoeXMgaW4gODhFNjE2NSBmYW1pbHkgYW5kIDg4RTYzNTEgZmFtaWx5IGRldmljZXMKKiAgICAgICAgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBBUEkuIEZvciB0aG9zZSBkZXZpY2VzLCBndmN0R2V0QWR2RXh0ZW5kZWRTdGF0dXMgCiogICAgICAgIEFQSSBjYW4gYmUgdXNlZCwgaW5zdGVhZC4KKgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmN0R2V0MTAwMEJURXh0ZW5kZWRTdGF0dXMKKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgICAgIHBvcnQsCiAgICBPVVQgR1RfMTAwMEJUX0VYVEVOREVEX1NUQVRVUyAqZXh0ZW5kZWRTdGF0dXMKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0TWVtU2V0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBTZXQgYSBibG9jayBvZiBtZW1vcnkKKgoqIElOUFVUUzoKKiAgICAgICBzdGFydCAgLSBzdGFydCBhZGRyZXNzIG9mIG1lbW9yeSBibG9jayBmb3Igc2V0dGluZwoqICAgICAgIHNpbWJvbCAtIGNoYXJhY3RlciB0byBzdG9yZSwgY29udmVydGVkIHRvIGFuIHVuc2lnbmVkIGNoYXIKKiAgICAgICBzaXplICAgLSBzaXplIG9mIGJsb2NrIHRvIGJlIHNldAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIFBvaW50ZXIgdG8gc2V0IG1lbW9yeSBibG9jawoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQgKiBndE1lbVNldAooCiAgICBJTiB2b2lkICogc3RhcnQsCiAgICBJTiBpbnQgICAgc3ltYm9sLAogICAgSU4gR1RfVTMyIHNpemUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RNZW1DcHkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIENvcGllcyAnc2l6ZScgY2hhcmFjdGVycyBmcm9tIHRoZSBvYmplY3QgcG9pbnRlZCB0byBieSAnc291cmNlJyBpbnRvCiogICAgICAgdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5ICdkZXN0aW5hdGlvbicuIElmIGNvcHlpbmcgdGFrZXMgcGxhY2UgYmV0d2VlbgoqICAgICAgIG9iamVjdHMgdGhhdCBvdmVybGFwLCB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLgoqCiogSU5QVVRTOgoqICAgICAgIGRlc3RpbmF0aW9uIC0gZGVzdGluYXRpb24gb2YgY29weQoqICAgICAgIHNvdXJjZSAgICAgIC0gc291cmNlIG9mIGNvcHkKKiAgICAgICBzaXplICAgICAgICAtIHNpemUgb2YgbWVtb3J5IHRvIGNvcHkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBQb2ludGVyIHRvIGRlc3RpbmF0aW9uCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCAqIGd0TWVtQ3B5CigKICAgIElOIHZvaWQgKiAgICAgICBkZXN0aW5hdGlvbiwKICAgIElOIGNvbnN0IHZvaWQgKiBzb3VyY2UsCiAgICBJTiBHVF9VMzIgICAgICAgc2l6ZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RNZW1DbXAKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIENvbXBhcmVzIGdpdmVuIG1lbW9yaWVzLgoqCiogSU5QVVRTOgoqICAgICAgIHNyYzEgLSBzb3VyY2UgMQoqICAgICAgIHNyYzIgLSBzb3VyY2UgMgoqICAgICAgIHNpemUgLSBzaXplIG9mIG1lbW9yeSB0byBjb3B5CioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUKKgoqIFJFVFVSTlM6CiogICAgICAgMCwgaWYgZXF1YWwuCiogICAgICAgIG5lZ2F0aXZlIG51bWJlciwgaWYgc3JjMSA8IHNyYzIuCiogICAgICAgIHBvc2l0aXZlIG51bWJlciwgaWYgc3JjMSA+IHNyYzIuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KaW50IGd0TWVtQ21wCigKICAgIElOIGNoYXIgc3JjMVtdLAogICAgSU4gY2hhciBzcmMyW10sCiAgICBJTiBHVF9VMzIgc2l6ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndFN0cmxlbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgRGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgYSBzdHJpbmcKKiBJTlBVVFM6CiogICAgICAgc291cmNlICAtIHN0cmluZwoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIHNpemUgICAgLSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBzdHJpbmcsIG5vdCBpbmNsdWRpbmcgRU9TLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1UzMiBndFN0cmxlbgooCiAgICBJTiBjb25zdCB2b2lkICogc291cmNlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0RGVsYXkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFdhaXQgZm9yIHRoZSBnaXZlbiB1U2VjIGFuZCByZXR1cm4uCiogICAgICAgIEN1cnJlbnQgU3dpdGNoIGRldmljZXMgd2l0aCBHaWdhYml0IEV0aGVybmV0IFN1cHBvcnQgcmVxdWlyZSAyNTAgdVNlYwoqICAgICAgICBvZiBkZWxheSB0aW1lIGZvciBQUFUgdG8gYmUgZGlzYWJsZWQuCiogICAgICAgIFNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgU3lzdGVtIGFuZC9vciBPUyBkZXBlbmRlbnQsIGl0IHNob3VsZCBiZSBwcm92aWRlZAoqICAgICAgICBieSBlYWNoIERTRFQgdXNlci4KKgoqIElOUFVUUzoKKiAgICAgICBkZWxheVRpbWUgLSBkZWxheSBpbiB1U2VjLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIE5vbmUKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIGd0RGVsYXkKKAogICAgSU4gY29uc3QgdW5zaWduZWQgaW50IGRlbGF5VGltZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RWZXJzaW9uCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZlcnNpb24gb2YgdGhlIFF1YXJ0ZXJEZWNrIFNXIHN1aXRlLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIHZlcnNpb24gICAgIC0gUXVhcnRlckRlY2sgc29mdHdhcmUgdmVyc2lvbi4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgb24gc3VjY2VzcywKKiAgICAgICBHVF9CQURfUEFSQU0gb24gYmFkIHBhcmFtZXRlcnMsCiogICAgICAgR1RfRkFJTCBvdGhlcndpc2UuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RWZXJzaW9uCigKICAgIE9VVCBHVF9WRVJTSU9OICAgKnZlcnNpb24KKTsKCgovKiBQcm90b3R5cGVzIGFkZGVkIGZvciBHaWdhYml0IEV0aGVybmV0IFN3aXRjaCBTdXBwb3J0ICovCgoKLyogZ3RCcmdGZGIuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiTW92ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBtb3ZlcyBhbGwgb3IgdW5ibG9ja2VkIGFkZHJlc3NlcyBmcm9tIGEgcG9ydCB0byBhbm90aGVyLgoqCiogSU5QVVRTOgoqICAgICAgICBtb3ZlQ21kICAtIHRoZSBtb3ZlIG9wZXJhdGlvbiB0eXBlLgoqICAgICAgICBtb3ZlRnJvbSAtIHBvcnQgd2hlcmUgbW92aW5nIGZyb20KKiAgICAgICAgbW92ZVRvICAgLSBwb3J0IHdoZXJlIG1vdmluZyB0bwoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYk1vdmUKKAogICAgSU4gR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gR1RfTU9WRV9DTUQgICAgbW92ZUNtZCwKICAgIElOIEdUX1UzMiAgICAgICAgbW92ZUZyb20sCiAgICBJTiBHVF9VMzIgICAgICAgIG1vdmVUbwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiTW92ZUluREIKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICAgVGhpcyByb3V0aW5lIG1vdmUgYWxsIG9yIHVuYmxvY2tlZCBhZGRyZXNzZXMgd2hpY2ggYXJlIGluIHRoZSBwYXJ0aWN1bGFyCiogICAgICAgICBBVFUgRGF0YWJhc2UgKERCTnVtKSBmcm9tIGEgcG9ydCB0byBhbm90aGVyLgoqCiogSU5QVVRTOgoqICAgICAgICAgbW92ZUNtZCAgLSB0aGUgbW92ZSBvcGVyYXRpb24gdHlwZS4KKiAgICAgICAgREJOdW0gICAgICAgICAtIEFUVSBNQUMgQWRkcmVzcyBEYXRhYmFzZSBOdW1iZXIuCiogICAgICAgIG1vdmVGcm9tIC0gcG9ydCB3aGVyZSBtb3ZpbmcgZnJvbQoqICAgICAgICBtb3ZlVG8gICAtIHBvcnQgd2hlcmUgbW92aW5nIHRvCioKKiBPVVRQVVRTOgoqICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICAgIEdUX05PVF9TVVBQT1JURUQtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJNb3ZlSW5EQgooCiAgICBJTiBHVF9RRF9ERVYgICAqZGV2LAogICAgSU4gR1RfTU9WRV9DTUQgbW92ZUNtZCwKICAgIElOIEdUX1UzMiAgICAgICAgIERCTnVtLAogICAgSU4gR1RfVTMyICAgICAgICBtb3ZlRnJvbSwKICAgIElOIEdUX1UzMiAgICAgICAgbW92ZVRvCik7CgovKiBndEJyZ1N0cC5jICovCgovKiBndEJyZ1ZsYW4uYyAqLwoKLyogZ3RCcmdWdHUuYyAqLwoKLyogZ3RFdmVudHMuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXR1R2V0SW50U3RhdHVzCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgQ2hlY2sgdG8gc2VlIGlmIGEgc3BlY2lmaWMgdHlwZSBvZiBBVFUgaW50ZXJydXB0IG9jY3VyZWQKKgoqIElOUFVUUzoKKiAgICAgaW50VHlwZSAtIHRoZSB0eXBlIG9mIGludGVycnVwdCB3aGljaCBjYXVzZXMgYW4gaW50ZXJydXB0LgoqICAgICAgICAgICAgICAgICAgICBHVF9NRU1FQkVSX1ZJT0xBVElPTiwgR1RfTUlTU19WSU9MQVRJT04sIG9yIEdUX0ZVTExfVklPTEFUSU9OIAoqCiogT1VUUFVUUzoKKiAgICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICAgR1RfT0sgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICAgR1RfRkFJTCAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdHVHZXRJbnRTdGF0dXMKKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAgICAgICAgICAqZGV2LAogICAgT1VUIEdUX0FUVV9JTlRfU1RBVFVTICAgICphdHVJbnRTdGF0dXMKKTsKCgovKiBndFBoeUN0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0MTAwMFRNYXN0ZXJNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldCB0aGUgcG9ydCBtdWx0aWNhc3QgcmF0ZSBsaW1pdC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBtb2RlIC0gR1RfMTAwMFRfTUFTVEVSX1NMQVZFIHN0cnVjdHVyZQoqICAgICAgICAgICAgICAgIGF1dG9Db25maWcgICAtIEdUX1RSVUUgZm9yIGF1dG8sIEdUX0ZBTFNFIGZvciBtYW51YWwgc2V0dXAuCiogICAgICAgICAgICAgICAgbWFzdGVyUHJlZmVyIC0gR1RfVFJVRSBpZiBNYXN0ZXIgY29uZmlndXJhdGlvbiBpcyBwcmVmZXJyZWQuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldDEwMDBUTWFzdGVyTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gR1RfMTAwMFRfTUFTVEVSX1NMQVZFICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXQxMDAwVE1hc3Rlck1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0IHRoZSBwb3J0IG11bHRpY2FzdCByYXRlIGxpbWl0LgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBtb2RlIC0gR1RfMTAwMFRfTUFTVEVSX1NMQVZFIHN0cnVjdHVyZQoqICAgICAgICAgICAgICAgIGF1dG9Db25maWcgICAtIEdUX1RSVUUgZm9yIGF1dG8sIEdUX0ZBTFNFIGZvciBtYW51YWwgc2V0dXAuCiogICAgICAgICAgICAgICAgbWFzdGVyUHJlZmVyIC0gR1RfVFJVRSBpZiBNYXN0ZXIgY29uZmlndXJhdGlvbiBpcyBwcmVmZXJyZWQuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0MTAwMFRNYXN0ZXJNb2RlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUXzEwMDBUX01BU1RFUl9TTEFWRSAgICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UGh5UmVnCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHJlYWRzIFBoeSBSZWdpc3RlcnMuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgIHJlZ0FkZHIgLSBUaGUgcmVnaXN0ZXIncyBhZGRyZXNzLgoqCiogT1VUUFVUUzoKKiAgICAgICAgZGF0YSAgICAtIFRoZSByZWFkIHJlZ2lzdGVyJ3MgZGF0YS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UGh5UmVnCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOICBHVF9VMzIgICAgICAgICByZWdBZGRyLAogICAgT1VUIEdUX1UxNiAgICAgICAgICpkYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQaHlSZWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgd3JpdGVzIFBoeSBSZWdpc3RlcnMuCiogICAgICAgIAoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICAgcmVnQWRkciAtIFRoZSByZWdpc3RlcidzIGFkZHJlc3MuCioKKiBPVVRQVVRTOgoqICAgICAgICBkYXRhICAgIC0gVGhlIHJlYWQgcmVnaXN0ZXIncyBkYXRhLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRQaHlSZWcKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gIEdUX1UzMiAgICAgICAgIHJlZ0FkZHIsCiAgICBJTiAgR1RfVTE2ICAgICAgICAgZGF0YQopOwoKCi8qIGd0UG9ydEN0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0RHJvcE9uTG9jawoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBzZXQgdGhlIERyb3Agb24gTG9jay4gV2hlbiBzZXQgdG8gb25lLCBJbmdyZXNzIGZyYW1lcyB3aWxsCiogICAgICAgIGJlIGRpc2NhcmRlZCBpZiB0aGVpciBTQSBmaWVsZCBpcyBub3QgaW4gdGhlIEFUVSdzIGFkZHJlc3MgZGF0YWJhc2UuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgZm9yIFVua25vd24gU0EgZHJvcCBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0RHJvcE9uTG9jawooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgSU4gR1RfQk9PTCAgICAgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0RHJvcE9uTG9jawoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXRzIERyb3BPbkxvY2sgbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgLSBHVF9UUlVFOiBEcm9wT25Mb2NrIGVuYWJsZWQsCiogICAgICAgICAgICAgICAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0RHJvcE9uTG9jawooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0RG91YmxlVGFnCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldCB0aGUgSW5ncmVzcyBEb3VibGUgVGFnIE1vZGUuIFdoZW4gc2V0IHRvIG9uZSwgCiogICAgICAgIGluZ3Jlc3NpbmcgZnJhbWVzIGFyZSBleGFtaW5lZCB0byBzZWUgaWYgdGhleSBjb250YWluIGFuIDgwMi4zYWMgdGFnLgoqICAgICAgICBJZiB0aGV5IGRvLCB0aGUgdGFnIGlzIHJlbW92ZWQgYW5kIHRoZW4gdGhlIGZyYW1lIGlzIHByb2Nlc3NlZCBmcm9tCiogICAgICAgIHRoZXJlIChpLmUuLCByZW1vdmVkIHRhZyBpcyBpZ25vcmVkKS4gRXNzZW50aWFsbHksIHVudGFnZ2VkIGZyYW1lcwoqICAgICAgICByZW1haW4gdW50YWdnZWQsIHNpbmdsZSB0YWdnZWQgZnJhbWVzIGJlY29tZSB1bnRhZ2dlZCBhbmQgZG91YmxlIHRhZ2dlZAoqICAgICAgICBmcmFtZXMgYmVjb21lIHNpbmdsZSB0YWdnZWQuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgZm9yIERvdWxiZVRhZyBtb2RlIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXREb3VibGVUYWcKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIElOIEdUX0JPT0wgICAgICAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldERvdWJsZVRhZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXRzIERvdWJsZVRhZyBtb2RlLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAtIEdUX1RSVUU6IERvdWJsZVRhZyBlbmFibGVkLAoqICAgICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldERvdWJsZVRhZwooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0SW50ZXJzd2l0Y2hQb3J0CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldCBJbnRlcnN3aXRjaCBQb3J0LiBXaGVuIHNldCB0byBvbmUsIAoqICAgICAgICBpdCBpbmRpY2F0ZXMgdGhpcyBwb3J0IGlzIGEgaW50ZXJzd2l0Y2ggcG9ydCB1c2VkIHRvIGNvbW11bmljYXRlZCB3aXRoCiogICAgICAgIENQVSBvciB0byBjYXNjYWRlIHdpdGggYW5vdGhlciBzd2l0Y2ggZGV2aWNlLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgIG1vZGUgLSBHVF9UUlVFIGZvciBJbnRlcnN3aXRjaCBwb3J0IG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRJbnRlcnN3aXRjaFBvcnQKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIElOIEdUX0JPT0wgICAgICAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEludGVyc3dpdGhQb3J0CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGdldHMgSW50ZXJzd2l0Y2hQb3J0LgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAtIEdUX1RSVUU6IFRoaXMgcG9ydCBpcyBpbnRlcnN3aXRjaCBwb3J0LAoqICAgICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEludGVyc3dpdGNoUG9ydAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0TGVhcm5EaXNhYmxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGVuYWJsZXMvZGlzYWJsZXMgYXV0b21hdGljIGxlYXJuaW5nIG9mIG5ldyBzb3VyY2UgTUFDCiogICAgICAgIGFkZHJlc3NlcyBvbiB0aGUgZ2l2ZW4gcG9ydCBpbmdyZXNzCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgZm9yIGRpc2FibGUgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldExlYXJuRGlzYWJsZQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgSU4gR1RfQk9PTCAgICAgICAgbW9kZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldExlYXJuRGlzYWJsZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXRzIExlYXJuRGlzYWJsZSBzZXR1cAoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAtIEdUX1RSVUU6IExlYXJuaW5nIGRpc2FibGVkIG9uIHRoZSBnaXZlbiBwb3J0IGluZ3Jlc3MgZnJhbWVzLAoqICAgICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldExlYXJuRGlzYWJsZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0SWdub3JlRkNTCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldHMgRkNTIElnbm9yZSBtb2RlLiBXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSwKKiAgICAgICAgdGhlIGxhc3QgZm91ciBieXRlcyBvZiBmcmFtZXMgcmVjZWl2ZWQgb24gdGhpcyBwb3J0IGFyZSBvdmVyd3JpdHRlbiB3aXRoCiogICAgICAgIGEgZ29vZCBDUkMgYW5kIHRoZSBmcmFtZXMgd2lsbCBiZSBhY2NlcHRlZCBieSB0aGUgc3dpdGNoLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgIG1vZGUgLSBHVF9UUlVFIGZvciBpZ25vcmUgRkNTIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRJZ25vcmVGQ1MKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIElOIEdUX0JPT0wgICAgICAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRJZ25vcmVGQ1MKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBJZ25vcmUgRkNTIHNldHVwCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBtb2RlIC0gR1RfVFJVRTogSWdub3JlIEZDUyBvbiB0aGUgZ2l2ZW4gcG9ydCdzIGluZ3Jlc3MgZnJhbWVzLAoqICAgICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldElnbm9yZUZDUwooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0VlRVUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBWVFUgUHJpb3JpdHkgT3ZlcnJpZGUuIFRoZSBmb2xsb3dpbmcgbW9kZXMgYXJlIHN1cHBvcnRlZDoKKiAgICAgICAgICAgIFBSSV9PVkVSUklERV9OT05FIC0KKiAgICAgICAgICAgICAgICBOb3JtYWwgZnJhbWUgcHJpb3JpdHkgcHJvY2Vzc2luZyBvY2N1cnMuCiogICAgICAgICAgICBQUklfT1ZFUlJJREVfRlJBTUVfUVVFVUUgLQoqICAgICAgICAgICAgICAgIEJvdGggZnJhbWUgYW5kIHF1ZXVlIG92ZXJyaWRlcyB0YWtlIHBsYWNlIG9uIHRoZSBmcmFtZS4KKiAgICAgICAgICAgIFBSSV9PVkVSUklERV9GUkFNRSAtCiogICAgICAgICAgICAgICAgUHJpb3JpdHkgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgVklEIChpbiB0aGUgVlRVIHRhYmxlKSBpcyB1c2VkCiogICAgICAgICAgICAgICAgdG8gb3ZlcndpdGUgdGhlIGZyYW1lJ3MgRlByaSAoZnJhbWUgcHJpb3JpdHkpLgoqICAgICAgICAgICAgICAgIElmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQsIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBiZQoqICAgICAgICAgICAgICAgIHRoaXMgbmV3IHByaW9yaXR5IHZhbHVlLgoqICAgICAgICAgICAgUFJJX09WRVJSSURFX1FVRVVFIC0KKiAgICAgICAgICAgICAgICBQcmlvcml0eSBhc3NpZ25lZCB0byB0aGUgZnJhbWUncyBWSUQgKGluIHRoZSBWVFUgdGFibGUpIGlzIHVzZWQKKiAgICAgICAgICAgICAgICB0byBvdmVyd2l0ZSB0aGUgZnJhbWUncyBRUHJpIChxdWV1ZSBwcmlvcml0eSkuCiogICAgICAgICAgICAgICAgUVByaSBpcyB1c2VkIGludGVybmFsbHkgdG8gbWFwIHRoZSBmcmFtZSB0byBvbmUgb2YgdGhlIGVncmVzcwoqICAgICAgICAgICAgICAgIHF1ZXVlcyBpbnNpZGUgdGhlIHN3aXRjaC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBtb2RlIC0gR1RfUFJJX09WRVJSSURFIHR5cGUKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgbW9kZSBpcyBpbnZhbGlkCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKiAgICAgICAgUFJJX09WRVJSSURFX0ZSQU1FIGFuZCBQUklfT1ZFUlJJREVfUVVFVUUgbW9kZXMgYXJlIHN1cHBvcnRlZCBvbmx5IG9uCiogICAgICAgIGNlcnRhaW4gc3dpdGNoIGRldmljZS4gUGxlYXNlIHJlZmVyIHRvIHRoZSBkZXZpY2UgZGF0YXNoZWV0LgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0VlRVUHJpT3ZlcnJpZGUKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIElOIEdUX1BSSV9PVkVSUklERSAgICAgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0VlRVUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBWVFUgUHJpb3JpdHkgT3ZlcnJpZGUuIFRoZSBmb2xsb3dpbmcgbW9kZXMgYXJlIHN1cHBvcnRlZDoKKiAgICAgICAgICAgIFBSSV9PVkVSUklERV9OT05FIC0KKiAgICAgICAgICAgICAgICBOb3JtYWwgZnJhbWUgcHJpb3JpdHkgcHJvY2Vzc2luZyBvY2N1cnMuCiogICAgICAgICAgICBQUklfT1ZFUlJJREVfRlJBTUVfUVVFVUUgLQoqICAgICAgICAgICAgICAgIEJvdGggZnJhbWUgYW5kIHF1ZXVlIG92ZXJyaWRlcyB0YWtlIHBsYWNlIG9uIHRoZSBmcmFtZS4KKiAgICAgICAgICAgIFBSSV9PVkVSUklERV9GUkFNRSAtCiogICAgICAgICAgICAgICAgUHJpb3JpdHkgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgVklEIChpbiB0aGUgVlRVIHRhYmxlKSBpcyB1c2VkCiogICAgICAgICAgICAgICAgdG8gb3ZlcndpdGUgdGhlIGZyYW1lJ3MgRlByaSAoZnJhbWUgcHJpb3JpdHkpLgoqICAgICAgICAgICAgICAgIElmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQsIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBiZQoqICAgICAgICAgICAgICAgIHRoaXMgbmV3IHByaW9yaXR5IHZhbHVlLgoqICAgICAgICAgICAgUFJJX09WRVJSSURFX1FVRVVFIC0KKiAgICAgICAgICAgICAgICBQcmlvcml0eSBhc3NpZ25lZCB0byB0aGUgZnJhbWUncyBWSUQgKGluIHRoZSBWVFUgdGFibGUpIGlzIHVzZWQKKiAgICAgICAgICAgICAgICB0byBvdmVyd2l0ZSB0aGUgZnJhbWUncyBRUHJpIChxdWV1ZSBwcmlvcml0eSkuCiogICAgICAgICAgICAgICAgUVByaSBpcyB1c2VkIGludGVybmFsbHkgdG8gbWFwIHRoZSBmcmFtZSB0byBvbmUgb2YgdGhlIGVncmVzcwoqICAgICAgICAgICAgICAgIHF1ZXVlcyBpbnNpZGUgdGhlIHN3aXRjaC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgLSBHVF9QUklfT1ZFUlJJREUgdHlwZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBQUklfT1ZFUlJJREVfRlJBTUUgYW5kIFBSSV9PVkVSUklERV9RVUVVRSBtb2RlcyBhcmUgc3VwcG9ydGVkIG9ubHkgb24KKiAgICAgICAgY2VydGFpbiBzd2l0Y2ggZGV2aWNlLiBQbGVhc2UgcmVmZXIgdG8gdGhlIGRldmljZSBkYXRhc2hlZXQuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRWVFVQcmlPdmVycmlkZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9QUklfT1ZFUlJJREUgICAgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRTQVByaU92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgU0EgUHJpb3JpdHkgT3ZlcnJpZGUuIFRoZSBmb2xsb3dpbmcgbW9kZSBpcyBzdXBwb3J0ZWQ6CiogICAgICAgICAgICBQUklfT1ZFUlJJREVfTk9ORSAtCiogICAgICAgICAgICAgICAgTm9ybWFsIGZyYW1lIHByaW9yaXR5IHByb2Nlc3Npbmcgb2NjdXJzLgoqICAgICAgICAgICAgUFJJX09WRVJSSURFX0ZSQU1FX1FVRVVFIC0KKiAgICAgICAgICAgICAgICBCb3RoIGZyYW1lIGFuZCBxdWV1ZSBvdmVycmlkZXMgdGFrZSBwbGFjZSBvbiB0aGUgZnJhbWUuCiogICAgICAgICAgICBQUklfT1ZFUlJJREVfRlJBTUUgLQoqICAgICAgICAgICAgICAgIFByaW9yaXR5IGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIFNBIChpbiB0aGUgQVRVIHRhYmxlKSBpcyB1c2VkCiogICAgICAgICAgICAgICAgdG8gb3ZlcndpdGUgdGhlIGZyYW1lJ3MgRlByaSAoZnJhbWUgcHJpb3JpdHkpLgoqICAgICAgICAgICAgICAgIElmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQsIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBiZQoqICAgICAgICAgICAgICAgIHRoaXMgbmV3IHByaW9yaXR5IHZhbHVlLgoqICAgICAgICAgICAgUFJJX09WRVJSSURFX1FVRVVFIC0KKiAgICAgICAgICAgICAgICBQcmlvcml0eSBhc3NpZ25lZCB0byB0aGUgZnJhbWUncyBTQSAoaW4gdGhlIEFUVSB0YWJsZSkgaXMgdXNlZAoqICAgICAgICAgICAgICAgIHRvIG92ZXJ3aXRlIHRoZSBmcmFtZSdzIFFQcmkgKHF1ZXVlIHByaW9yaXR5KS4KKiAgICAgICAgICAgICAgICBRUHJpIGlzIHVzZWQgaW50ZXJuYWxseSB0byBtYXAgdGhlIGZyYW1lIHRvIG9uZSBvZiB0aGUgZWdyZXNzCiogICAgICAgICAgICAgICAgcXVldWVzIGluc2lkZSB0aGUgc3dpdGNoLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgIG1vZGUgLSBHVF9QUklfT1ZFUlJJREUgdHlwZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBtb2RlIGlzIGludmFsaWQKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqICAgICAgICBQUklfT1ZFUlJJREVfRlJBTUUgYW5kIFBSSV9PVkVSUklERV9RVUVVRSBtb2RlcyBhcmUgc3VwcG9ydGVkIG9ubHkgb24KKiAgICAgICAgY2VydGFpbiBzd2l0Y2ggZGV2aWNlLiBQbGVhc2UgcmVmZXIgdG8gdGhlIGRldmljZSBkYXRhc2hlZXQuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRTQVByaU92ZXJyaWRlCigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgICAgIHBvcnQsCiAgICBJTiBHVF9CT09MICAgICAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRTQVByaU92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgU0EgUHJpb3JpdHkgT3ZlcnJpZGUuIFRoZSBmb2xsb3dpbmcgbW9kZSBpcyBzdXBwb3J0ZWQ6CiogICAgICAgICAgICBQUklfT1ZFUlJJREVfTk9ORSAtCiogICAgICAgICAgICAgICAgTm9ybWFsIGZyYW1lIHByaW9yaXR5IHByb2Nlc3Npbmcgb2NjdXJzLgoqICAgICAgICAgICAgUFJJX09WRVJSSURFX0ZSQU1FX1FVRVVFIC0KKiAgICAgICAgICAgICAgICBCb3RoIGZyYW1lIGFuZCBxdWV1ZSBvdmVycmlkZXMgdGFrZSBwbGFjZSBvbiB0aGUgZnJhbWUuCiogICAgICAgICAgICBQUklfT1ZFUlJJREVfRlJBTUUgLQoqICAgICAgICAgICAgICAgIFByaW9yaXR5IGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIFNBIChpbiB0aGUgQVRVIHRhYmxlKSBpcyB1c2VkCiogICAgICAgICAgICAgICAgdG8gb3ZlcndpdGUgdGhlIGZyYW1lJ3MgRlByaSAoZnJhbWUgcHJpb3JpdHkpLgoqICAgICAgICAgICAgICAgIElmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQsIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBiZQoqICAgICAgICAgICAgICAgIHRoaXMgbmV3IHByaW9yaXR5IHZhbHVlLgoqICAgICAgICAgICAgUFJJX09WRVJSSURFX1FVRVVFIC0KKiAgICAgICAgICAgICAgICBQcmlvcml0eSBhc3NpZ25lZCB0byB0aGUgZnJhbWUncyBTQSAoaW4gdGhlIEFUVSB0YWJsZSkgaXMgdXNlZAoqICAgICAgICAgICAgICAgIHRvIG92ZXJ3aXRlIHRoZSBmcmFtZSdzIFFQcmkgKHF1ZXVlIHByaW9yaXR5KS4KKiAgICAgICAgICAgICAgICBRUHJpIGlzIHVzZWQgaW50ZXJuYWxseSB0byBtYXAgdGhlIGZyYW1lIHRvIG9uZSBvZiB0aGUgZWdyZXNzCiogICAgICAgICAgICAgICAgcXVldWVzIGluc2lkZSB0aGUgc3dpdGNoLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAtIEdUX1BSSV9PVkVSUklERSB0eXBlCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIFBSSV9PVkVSUklERV9GUkFNRSBhbmQgUFJJX09WRVJSSURFX1FVRVVFIG1vZGVzIGFyZSBzdXBwb3J0ZWQgb25seSBvbgoqICAgICAgICBjZXJ0YWluIHN3aXRjaCBkZXZpY2UuIFBsZWFzZSByZWZlciB0byB0aGUgZGV2aWNlIGRhdGFzaGVldC4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFNBUHJpT3ZlcnJpZGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgT1VUIEdUX1BSSV9PVkVSUklERSAgICAgICAgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldERBUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBEQSBQcmlvcml0eSBPdmVycmlkZS4gVGhlIGZvbGxvd2luZyBtb2RlIGlzIHN1cHBvcnRlZDoKKiAgICAgICAgICAgIFBSSV9PVkVSUklERV9OT05FIC0KKiAgICAgICAgICAgICAgICBOb3JtYWwgZnJhbWUgcHJpb3JpdHkgcHJvY2Vzc2luZyBvY2N1cnMuCiogICAgICAgICAgICBQUklfT1ZFUlJJREVfRlJBTUUgLQoqICAgICAgICAgICAgICAgIFByaW9yaXR5IGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIERBIChpbiB0aGUgQVRVIHRhYmxlKSBpcyB1c2VkCiogICAgICAgICAgICAgICAgdG8gb3ZlcndpdGUgdGhlIGZyYW1lJ3MgRlByaSAoZnJhbWUgcHJpb3JpdHkpLgoqICAgICAgICAgICAgICAgIElmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQsIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBiZQoqICAgICAgICAgICAgICAgIHRoaXMgbmV3IHByaW9yaXR5IHZhbHVlLgoqICAgICAgICAgICAgUFJJX09WRVJSSURFX1FVRVVFIC0KKiAgICAgICAgICAgICAgICBQcmlvcml0eSBhc3NpZ25lZCB0byB0aGUgZnJhbWUncyBEQSAoaW4gdGhlIEFUVSB0YWJsZSkgaXMgdXNlZAoqICAgICAgICAgICAgICAgIHRvIG92ZXJ3aXRlIHRoZSBmcmFtZSdzIFFQcmkgKHF1ZXVlIHByaW9yaXR5KS4KKiAgICAgICAgICAgICAgICBRUHJpIGlzIHVzZWQgaW50ZXJuYWxseSB0byBtYXAgdGhlIGZyYW1lIHRvIG9uZSBvZiB0aGUgZWdyZXNzCiogICAgICAgICAgICAgICAgcXVldWVzIGluc2lkZSB0aGUgc3dpdGNoLgoqICAgICAgICAgICAgUFJJX09WRVJSSURFX0ZSQU1FX1FVRVVFIC0KKiAgICAgICAgICAgICAgICBCb3RoIGZyYW1lIGFuZCBxdWV1ZSBvdmVycmlkZXMgdGFrZSBwbGFjZSBvbiB0aGUgZnJhbWUuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgbW9kZSAtIEdUX1BSSV9PVkVSUklERSB0eXBlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIG1vZGUgaXMgaW52YWxpZAoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCiogICAgICAgIFBSSV9PVkVSUklERV9GUkFNRSBhbmQgUFJJX09WRVJSSURFX1FVRVVFIG1vZGVzIGFyZSBzdXBwb3J0ZWQgb25seSBvbgoqICAgICAgICBjZXJ0YWluIHN3aXRjaCBkZXZpY2UuIFBsZWFzZSByZWZlciB0byB0aGUgZGV2aWNlIGRhdGFzaGVldC4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldERBUHJpT3ZlcnJpZGUKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOIEdUX1BSSV9PVkVSUklERSAgICAgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0REFQcmlPdmVycmlkZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIERBIFByaW9yaXR5IE92ZXJyaWRlLiBUaGUgZm9sbG93aW5nIG1vZGUgaXMgc3VwcG9ydGVkOgoqICAgICAgICAgICAgUFJJX09WRVJSSURFX05PTkUgLQoqICAgICAgICAgICAgICAgIE5vcm1hbCBmcmFtZSBwcmlvcml0eSBwcm9jZXNzaW5nIG9jY3Vycy4KKiAgICAgICAgICAgIFBSSV9PVkVSUklERV9GUkFNRSAtCiogICAgICAgICAgICAgICAgUHJpb3JpdHkgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgREEgKGluIHRoZSBBVFUgdGFibGUpIGlzIHVzZWQKKiAgICAgICAgICAgICAgICB0byBvdmVyd2l0ZSB0aGUgZnJhbWUncyBGUHJpIChmcmFtZSBwcmlvcml0eSkuCiogICAgICAgICAgICAgICAgSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCwgdGhlIHByaW9yaXR5IGluIHRoZSBmcmFtZSB3aWxsIGJlCiogICAgICAgICAgICAgICAgdGhpcyBuZXcgcHJpb3JpdHkgdmFsdWUuCiogICAgICAgICAgICBQUklfT1ZFUlJJREVfUVVFVUUgLQoqICAgICAgICAgICAgICAgIFByaW9yaXR5IGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIERBIChpbiB0aGUgQVRVIHRhYmxlKSBpcyB1c2VkCiogICAgICAgICAgICAgICAgdG8gb3ZlcndpdGUgdGhlIGZyYW1lJ3MgUVByaSAocXVldWUgcHJpb3JpdHkpLgoqICAgICAgICAgICAgICAgIFFQcmkgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIG1hcCB0aGUgZnJhbWUgdG8gb25lIG9mIHRoZSBlZ3Jlc3MKKiAgICAgICAgICAgICAgICBxdWV1ZXMgaW5zaWRlIHRoZSBzd2l0Y2guCiogICAgICAgICAgICBQUklfT1ZFUlJJREVfRlJBTUVfUVVFVUUgLQoqICAgICAgICAgICAgICAgIEJvdGggZnJhbWUgYW5kIHF1ZXVlIG92ZXJyaWRlcyB0YWtlIHBsYWNlIG9uIHRoZSBmcmFtZS4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgLSBHVF9QUklfT1ZFUlJJREUgdHlwZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBQUklfT1ZFUlJJREVfRlJBTUUgYW5kIFBSSV9PVkVSUklERV9RVUVVRSBtb2RlcyBhcmUgc3VwcG9ydGVkIG9ubHkgb24KKiAgICAgICAgY2VydGFpbiBzd2l0Y2ggZGV2aWNlLiBQbGVhc2UgcmVmZXIgdG8gdGhlIGRldmljZSBkYXRhc2hlZXQuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXREQVByaU92ZXJyaWRlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIE9VVCBHVF9QUklfT1ZFUlJJREUgICAgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRDUFVQb3J0CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldHMgQ1BVIFBvcnQgbnVtYmVyLiBXaGVuIFNub29waW5nIGlzIGVuYWJsZWQgb24gdGhpcyBwb3J0CiogICAgICAgIG9yIHdoZW4gdGhpcyBwb3J0IGlzIGNvbmZpZ3VyZWQgYXMgYW4gSW50ZXJzd2l0Y2ggUG9ydCBhbmQgaXQgcmVjZWl2ZXMgYSAKKiAgICAgICAgVG9fQ1BVIGZyYW1lLCB0aGUgc3dpdGNoIG5lZWRzIHRvIGtub3cgd2hhdCBwb3J0IG9uIHRoaXMgZGV2aWNlIHRoZSBmcmFtZSAKKiAgICAgICAgc2hvdWxkIGVncmVzcy4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBjcHVQb3J0IC0gQ1BVIFBvcnQgbnVtYmVyIG9yIGludGVyc3dpdGNoIHBvcnQgd2hlcmUgQ1BVIFBvcnQgaXMgY29ubmVjdGVkCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldENQVVBvcnQKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOIEdUX0xQT1JUICAgICBjcHVQb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRDUFVQb3J0CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGdldHMgQ1BVIExvZ2ljYWwgUG9ydAoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgY3B1UG9ydCAtIENQVSBQb3J0J3MgbG9naWNhbCBudW1iZXIKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldENQVVBvcnQKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgT1VUIEdUX0xQT1JUICAgICAqY3B1TFBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldExvY2tlZFBvcnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBMb2NrZWRQb3J0LiBXaGVuIGl0J3Mgc2V0IHRvIG9uZSwgQ1BVIGRpcmVjdGVkIAoqICAgICAgICBsZWFybmluZyBmb3IgODAyLjF4IE1BQyBhdXRoZW50aWNhdGlvbiBpcyBlbmFibGVkIG9uIHRoaXMgcG9ydC4gSW4gdGhpcwoqICAgICAgICBtb2RlLCBhbiBBVFUgTWlzcyBWaW9sYXRpb24gaW50ZXJydXB0IHdpbGwgb2NjdXIgd2hlbiBhIG5ldyBTQSBhZGRyZXNzCiogICAgICAgIGlzIHJlY2VpdmVkIGluIGEgZnJhbWUgb24gdGhpcyBwb3J0LiBBdXRvbWF0aWNhbGx5IFNBIGxlYXJuaW5nIGFuZCAKKiAgICAgICAgcmVmcmVzaGluZyBpcyBkaXNhYmxlZCBpbiB0aGlzIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgZm9yIExvY2tlZCBQb3J0LCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0TG9ja2VkUG9ydAooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gR1RfQk9PTCAgICAgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0TG9ja2VkUG9ydAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXRzIExvY2tlZCBQb3J0IG1vZGUgZm9yIHRoZSBnaXZlbiBwb3J0CioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBtb2RlICAtIEdUX1RSVUUgaWYgTG9ja2VkUG9ydCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRMb2NrZWRQb3J0CigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0SWdub3JlV3JvbmdEYXRhCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldHMgSWdub3JlIFdyb25nIERhdGEuIElmIHRoZSBmcmFtZSdzIFNBIGFkZHJlc3MgaXMgZm91bmQgCiogICAgICAgIGluIHRoZSBkYXRhYmFzZSBhbmQgaWYgdGhlIGVudHJ5IGlzICdzdGF0aWMnIG9yIGlmIHRoZSBwb3J0IGlzICdsb2NrZWQnCiogICAgICAgIHRoZSBzb3VyY2UgcG9ydCdzIGJpdCBpcyBjaGVja2VkIHRvIGluc3VyZSB0aGUgU0EgaGFzIGJlZW4gYXNzaWduZWQgdG8gCiogICAgICAgIHRoaXMgcG9ydC4gSWYgdGhlIFNBIGlzIE5PVCBhc3NpZ25lZCB0byB0aGlzIHBvcnQsIGl0IGlzIGNvbnNpZGVyZWQgYW4gCiogICAgICAgIEFUVSBNZW1iZXIgVmlvbGF0aW9uLiBJZiB0aGUgSWdub3JlV3JvbmdEYXRhIGlzIHNldCB0byBHVF9GQUxTRSwgYW4gQVRVCiogICAgICAgIE1lbWJlciBWaW9sYXRpb24gaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLiBJZiBpdCdzIHNldCB0byBHVF9UUlVFLAoqICAgICAgICB0aGUgQVRVIE1lbWJlciBWaW9sYXRpb24gZXJyb3Igd2lsbCBiZSBtYXNrZWQgYW5kIGlnbm9yZWQuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgZm9yIElnbm9yZVdyb25nRGF0YSwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldElnbm9yZVdyb25nRGF0YQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgSU4gR1RfQk9PTCAgICAgICAgbW9kZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldElnbm9yZVdyb25nRGF0YQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXRzIElnbm9yZSBXcm9uZyBEYXRhIG1vZGUgZm9yIHRoZSBnaXZlbiBwb3J0CioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBtb2RlICAtIEdUX1RSVUUgaWYgSWdub3JlV3JvbmdEYXRhLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldElnbm9yZVdyb25nRGF0YQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAqbW9kZQopOwoKCi8qIGd0UG9ydFJhdGVDdHJsLmMgKi8KCi8qIGd0UG9ydFJtb24uYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3RhdHNHZXRQb3J0Q291bnRlcjIKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBhIHNwZWNpZmljIGNvdW50ZXIgb2YgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBjb3VudGVyIC0gdGhlIGNvdW50ZXIgd2hpY2ggd2lsbCBiZSByZWFkCioKKiBPVVRQVVRTOgoqICAgICAgICBzdGF0c0RhdGEgLSBwb2ludHMgdG8gMzJiaXQgZGF0YSBzdG9yYWdlIGZvciB0aGUgTUlCIGNvdW50ZXIKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgR2lnYWJpdCBTd2l0Y2ggb25seQoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3RhdHNHZXRQb3J0Q291bnRlcjIKKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIElOICBHVF9TVEFUU19DT1VOVEVSUzIgICAgY291bnRlciwKICAgIE9VVCBHVF9VMzIgICAgICAgICAgICAqc3RhdHNEYXRhCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3RhdHNHZXRQb3J0QWxsQ291bnRlcnMyCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGdldHMgYWxsIGNvdW50ZXJzIG9mIHRoZSBnaXZlbiBwb3J0CioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIHN0YXRzQ291bnRlclNldCAtIHBvaW50cyB0byBHVF9TVEFUU19DT1VOVEVSX1NFVCBmb3IgdGhlIE1JQiBjb3VudGVycwoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICAgVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyBHaWdhYml0IFN3aXRjaCBvbmx5CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdGF0c0dldFBvcnRBbGxDb3VudGVyczIKKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIE9VVCBHVF9TVEFUU19DT1VOVEVSX1NFVDIgICAgKnN0YXRzQ291bnRlclNldAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3RhdHNHZXRIaXN0b2dyYW1Nb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGdldHMgdGhlIEhpc3RvZ3JhbSBDb3VudGVycyBNb2RlLgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAtIEhpc3RvZ3JhbSBNb2RlIChHVF9DT1VOVF9SWF9PTkxZLCBHVF9DT1VOVF9UWF9PTkxZLCAKKiAgICAgICAgICAgICAgICAgICAgYW5kIEdUX0NPVU5UX1JYX1RYKQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIEdpZ2FiaXQgU3dpdGNoIG9ubHkKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0YXRzR2V0SGlzdG9ncmFtTW9kZQooCiAgICBJTiAgR1RfUURfREVWICAgICAgICAgICAgICAgICpkZXYsCiAgICBPVVQgR1RfSElTVE9HUkFNX01PREUgICAgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N0YXRzU2V0SGlzdG9ncmFtTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBIaXN0b2dyYW0gQ291bnRlcnMgTW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICAgbW9kZSAtIEhpc3RvZ3JhbSBNb2RlIChHVF9DT1VOVF9SWF9PTkxZLCBHVF9DT1VOVF9UWF9PTkxZLCAKKiAgICAgICAgICAgICAgICAgICAgYW5kIEdUX0NPVU5UX1JYX1RYKQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqICAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0YXRzU2V0SGlzdG9ncmFtTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgICAgICAgICAgICAgICAgICpkZXYsCiAgICBJTiBHVF9ISVNUT0dSQU1fTU9ERSAgICAgICAgbW9kZQopOwoKCi8qIGd0UG9ydFN0YXR1cy5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQYXVzZUVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHJldHJpdmVzIHRoZSBsaW5rIHBhdXNlIHN0YXRlLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBzdGF0ZSAtIEdUX1RSVUUgZm9yIGVuYWJsZSBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgSWYgc2V0IE1BQyBQYXVzZSAoZm9yIEZ1bGwgRHVwbGV4IGZsb3cgY29udHJvbCkgaXMgaW1wbGVtZW50ZWQgaW4gdGhlCiogICAgICAgIGxpbmsgcGFydG5lciBhbmQgaW4gTXlQYXVzZQoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UGF1c2VFbgooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEhkRmxvdwoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSByZXRyaXZlcyB0aGUgaGFsZiBkdXBsZXggZmxvdyBjb250cm9sIHZhbHVlLgoqICAgICAgICBJZiBzZXQsIEhhbGYgRHVwbGV4IGJhY2sgcHJlc3N1cmUgd2lsbCBiZSB1c2VkIG9uIHRoaXMgcG9ydCBpZiB0aGlzIHBvcnQKKiAgICAgICAgaXMgaW4gYSBoYWxmIGR1cGxleCBtb2RlLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBzdGF0ZSAtIEdUX1RSVUUgZm9yIGVuYWJsZSBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEhkRmxvdwooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQSFlEZXRlY3QKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgcmV0cml2ZXMgdGhlIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBQSFkgZGV0ZWN0aW9uLgoqICAgICAgICBJZiBzZXQsIEFuIDgwMi4zIFBIWSBpcyBhdHRhY2hlZCB0byB0aGlzIHBvcnQuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIHN0YXRlIC0gR1RfVFJVRSBpZiBjb25uZWN0ZWQgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIAoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFBIWURldGVjdAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQSFlEZXRlY3QKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBQSFlEZXRlY3QgYml0IHdoaWNoIG1ha2UgUFBVIGNoYW5nZSBpdHMgcG9sbGluZy4KKiAgICAgICAgUFBVJ3MgcG9vbCByb3V0aW5lIHVzZXMgdGhlc2UgYml0cyB0byBkZXRlcm1pbmUgd2hpY2ggcG9ydCdzIHRvIHBvbGwKKiAgICAgICAgUEhZcyBvbiBmb3IgTGluaywgRHVwbGV4LCBTcGVlZCwgYW5kIEZsb3cgQ29udHJvbC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBzdGF0ZSAtIEdUX1RSVUUgb3IgR1RfRkFMU0UKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgaWYgZ3N5c0dldFBQVVN0YXRlIHJldHVybnMgCiogICAgICAgIFBQVV9TVEFURV9BQ1RJVkUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRQSFlEZXRlY3QKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gIEdUX0JPT0wgICAgICBzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0U3BlZWRNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmV0cml2ZXMgdGhlIHBvcnQgc3BlZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gR1RfUE9SVF9TUEVFRF9NT0RFIHR5cGUuCiogICAgICAgICAgICAgICAgICAgIChQT1JUX1NQRUVEXzEwMDBfTUJQUyxQT1JUX1NQRUVEXzEwMF9NQlBTLCBvciBQT1JUX1NQRUVEXzEwX01CUFMpCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0U3BlZWRNb2RlCigKICAgIElOICBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCAgcG9ydCwKICAgIE9VVCBHVF9QT1JUX1NQRUVEX01PREUgICAqc3BlZWQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEhpZ2hFcnJvclJhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgcmV0cml2ZXMgdGhlIFBDUyBIaWdoIEVycm9yIFJhdGUuCiogICAgICAgIFRoaXMgcm91dGluZSByZXR1cm5zIEdUX1RSVUUgaWYgdGhlIHJhdGUgb2YgaW52YWxpZCBjb2RlIGdyb3VwcyBzZWVuIGJ5CiogICAgICAgIFBDUyBoYXMgZXhjZWVkZWQgMTAgdG8gdGhlIHBvd2VyIG9mIC0xMS4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgc3RhdGUgLSBHVF9UUlVFIG9yIEdUX0ZBTFNFCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRIaWdoRXJyb3JSYXRlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRUeFBhdXNlZAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSByZXRyaXZlcyBUcmFuc21pdCBQYXVzZSBzdGF0ZS4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgc3RhdGUgLSBHVF9UUlVFIGlmIFJ4IE1BQyByZWNlaXZlcyBhIFBBVVNFIGZyYW1lIHdpdGggbm9uZS16ZXJvIFB1YXNlIFRpbWUKKiAgICAgICAgICAgICAgICAgIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFR4UGF1c2VkCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgKnN0YXRlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0Rmxvd0N0cmwKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgcmV0cml2ZXMgRmxvdyBjb250cm9sIHN0YXRlLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBzdGF0ZSAtIEdUX1RSVUUgaWYgUnggTUFDIGRldGVybWluZXMgdGhhdCBubyBtb3JlIGRhdGEgc2hvdWxkIGJlIAoqICAgICAgICAgICAgICAgICAgICBlbnRlcmluZyB0aGlzIHBvcnQuCiogICAgICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRGbG93Q3RybAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0Q19EdXBsZXgKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgcmV0cml2ZXMgUG9ydCA5J3MgZHVwbGV4IGNvbmZpZ3VyYXRpb24gbW9kZSBkZXRlcm1pbmVkCiogICAgICAgIGF0IHJlc2V0LgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBzdGF0ZSAtIEdUX1RSVUUgaWYgY29uZmlndXJlZCBhcyBGdWxsIGR1cGxleCBvcGVyYXRpb24KKiAgICAgICAgICAgICAgICAgIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgUmV0dXJuIHZhbHVlIGlzIHZhbGlkIG9ubHkgaWYgdGhlIGdpdmVuIHBvcnQgaXMgOS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldENfRHVwbGV4CigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRDX01vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgcmV0cml2ZXMgcG9ydCdzIGludGVyZmFjZSB0eXBlIGNvbmZpZ3VyYXRpb24gbW9kZSAKKiAgICAgICAgZGV0ZXJtaW5lZCBhdCByZXNldC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgc3RhdGUgLSBvbmUgb2YgdmFsdWUgaW4gR1RfUE9SVF9DT05GSUdfTU9ERSBlbnVtIHR5cGUKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgUmV0dXJuIHZhbHVlIGlzIHZhbGlkIG9ubHkgaWYgdGhlIGdpdmVuIHBvcnQgaXMgOS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldENfTW9kZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfUE9SVF9DT05GSUdfTU9ERSAgICpzdGF0ZQopOwoKCi8qIGd0U3lzQ3RybC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRQUFVFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzL2Rpc2FibGVzIFBoeSBQb2xsaW5nIFVuaXQuCioKKiBJTlBVVFM6CiogICAgICAgIGVuIC0gR1RfVFJVRSB0byBlbmFibGUgUFBVLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0UFBVRW4KKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9CT09MICAgICAgICAgZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFBQVUVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGdldCB0aGUgUFBVIHN0YXRlLgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFIGlmIFBQVSBpcyBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0JBRF9QQVJBTSAgICAtIG9uIGJhZCBwYXJhbWV0ZXIKKiAgICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRQUFVFbgooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfQk9PTCAgICAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0Q2FzY2FkZVBvcnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBDYXNjYWRlIFBvcnQgbnVtYmVyLgoqICAgICAgICBJbiBtdWx0aWNoaXAgc3lzdGVtcyBmcmFtZXMgY29taW5nIGZyb20gYSBDUFUgbmVlZCB0byBrbm93IHdoZW4gdGhleQoqICAgICAgICBoYXZlIHJlYWNoZWQgdGhlaXIgZGVzdGluYXRpb24gY2hpcC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIENhc2NhZGUgUG9ydAoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldENhc2NhZGVQb3J0CigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgIHBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldENhc2NhZGVQb3J0CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGdldHMgQ2FzY2FkZSBQb3J0IG51bWJlci4KKiAgICAgICAgSW4gbXVsdGljaGlwIHN5c3RlbXMgZnJhbWVzIGNvbWluZyBmcm9tIGEgQ1BVIG5lZWQgdG8ga25vdyB3aGVuIHRoZXkKKiAgICAgICAgaGF2ZSByZWFjaGVkIHRoZWlyIGRlc3RpbmF0aW9uIGNoaXAuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBwb3J0IC0gQ2FzY2FkZSBQb3J0CioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRDYXNjYWRlUG9ydAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfTFBPUlQgICAgICpwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXREZXZpY2VOdW1iZXIKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBEZXZpY2UgTnVtYmVyLgoqICAgICAgICBJbiBtdWx0aWNoaXAgc3lzdGVtcyBmcmFtZXMgY29taW5nIGZyb20gYSBDUFUgbmVlZCB0byBrbm93IHdoZW4gdGhleQoqICAgICAgICBoYXZlIHJlYWNoZWQgdGhlaXIgZGVzdGluYXRpb24gY2hpcC4gRnJvbSBDUFUgZnJhbWVzIHdob3NlIERldl9OdW0KKiAgICAgICAgZmllbGRtYXRjaGVzIHRoZXNlIGJpdHMgaGF2ZSByZWFjaGVkdGhlaXIgZGVzdGluYXRpb24gY2hpcCBhbmQgYXJlIHNlbnQKKiAgICAgICAgb3V0IHRoaXMgY2hpcCB1c2luZyB0aGUgcG9ydCBudW1iZXIgaW5kaWNhdGVkIGluIHRoZSBmcmFtZSdzIFRyZ19Qb3J0IAoqICAgICAgICBmaWVsZC4KKgoqIElOUFVUUzoKKiAgICAgICAgZGV2TnVtIC0gRGV2aWNlIE51bWJlciAoMCB+IDMxKQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldERldmljZU51bWJlcgooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX1UzMiAgICAgICAgICBkZXZOdW0KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldERldmljZU51bWJlcgoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXRzIERldmljZSBOdW1iZXIuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBkZXZOdW0gLSBEZXZpY2UgTnVtYmVyICgwIH4gMzEpCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXREZXZpY2VOdW1iZXIKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX1UzMiAgICAgICpkZXZOdW0KKTsKCgovKiBndFBDU0N0cmwuYyAqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc0dldENvbW1hRGV0CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHJldHJpZXZlcyBDb21tYSBEZXRlY3Rpb24gc3RhdHVzIGluIFBDUwoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBzdGF0ZSAtIEdUX1RSVUUgZm9yIENvbW1hIERldGVjdGVkIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKiAgICAgICAgCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXRDb21tYURldAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzR2V0U3luY09LCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHJldHJpZXZlcyBTeW5PSyBiaXQuIEl0IGlzIHNldCB0byBhIG9uZSB3aGVuIHRoZSBQQ1MgaGFzCiogICAgICAgIGRldGVjdGVkIGEgZmV3IGNvbW1hIHBhdHRlcm5zIGFuZCBpcyBzeW5jaHJvbml6ZWQgd2l0aCBpdHMgcGVlciBQQ1MgCiogICAgICAgIGxheWVyLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBzdGF0ZSAtIEdUX1RSVUUgaWYgc3luY2hyb25pemVkIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKiAgICAgICAgCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXRTeW5jT0sKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgICAqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc0dldFN5bmNGYWlsCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHJldHJpZXZlcyBTeW5GYWlsIGJpdC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgc3RhdGUgLSBHVF9UUlVFIGlmIHN5bmNocm9uaXphaW9uIGZhaWxlZCBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCiogICAgICAgIAoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzR2V0U3luY0ZhaWwKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgICAqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc0dldEFuQnlwYXNzZWQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgcmV0cmlldmVzIEluYmFuZCBBdXRvLU5lZ290aWF0aW9uIGJ5cGFzcyBzdGF0dXMuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIHN0YXRlIC0gR1RfVFJVRSBpZiBBTiBpcyBieXBhc3NlZCBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCiogICAgICAgIAoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzR2V0QW5CeXBhc3NlZAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzR2V0QW5CeXBhc3NNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHJldHJpZXZlcyBFbmFibGUgbW9kZSBvZiBJbmJhbmQgQXV0by1OZWdvdGlhdGlvbiBieXBhc3MuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgLSBHVF9UUlVFIGlmIEFOIGJ5cGFzcyBpcyBlbmFibGVkIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKiAgICAgICAgCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXRBbkJ5cGFzc01vZGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzU2V0QW5CeXBhc3NNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHJldHJpZXZlcyBFbmFibGUgbW9kZSBvZiBJbmJhbmQgQXV0by1OZWdvdGlhdGlvbiBieXBhc3MuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIEFOIGJ5cGFzcyBtb2RlIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKiAgICAgICAgCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NTZXRBbkJ5cGFzc01vZGUKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOIEdUX0JPT0wgICAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NHZXRQQ1NBbkVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHJldHJpZXZlcyBFbmFibGUgbW9kZSBvZiBQQ1MgSW5iYW5kIEF1dG8tTmVnb3RpYXRpb24uCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgLSBHVF9UUlVFIGlmIFBDUyBBTiBpcyBlbmFibGVkIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKiAgICAgICAgCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXRQQ1NBbkVuCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc1NldFBDU0FuRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBFbmFibGUgbW9kZSBvZiBQQ1MgSW5iYW5kIEF1dG8tTmVnb3RpYXRpb24uCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIFBDUyBBTiBtb2RlIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKiAgICAgICAgCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NTZXRQQ1NBbkVuCigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgIHBvcnQsCiAgICBJTiBHVF9CT09MICAgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzU2V0UmVzdGFydFBDU0FuCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHJlc3RhcnRzIFBDUyBJbmJhbmQgQXV0by1OZWdvdGlhdGlvbi4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKiAgICAgICAgCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NTZXRSZXN0YXJ0UENTQW4KKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzR2V0UENTQW5Eb25lCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHJldHJpZXZlcyBjb21wbGV0aW9uIGluZm9ybWF0aW9uIG9mIFBDUyBBdXRvLU5lZ290aWF0aW9uLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBtb2RlIC0gR1RfVFJVRSBpZiBQQ1MgQU4gaXMgZG9uZSBvciBuZXZlciBkb25lCiogICAgICAgICAgICAgICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqICAgICAgICAKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Bjc0dldFBDU0FuRG9uZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NTZXRMaW5rVmFsdWUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBMaW5rJ3MgZm9yY2UgdmFsdWUKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBzdGF0ZSAtIEdUX1RSVUUgdG8gZm9yY2UgbGluayB1cCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqICAgICAgICAKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Bjc1NldExpbmtWYWx1ZQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gICAgR1RfQk9PTCAgICAgICAgc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc0dldExpbmtWYWx1ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgTGluayBWYWx1ZSB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIEZvcmNpbmcgTGluayAKKiAgICAgICAgdXAgb3IgZG93bi4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgc3RhdGUgLSBHVF9UUlVFIGlmIExpbmsgRm9yY2UgdmFsdWUgaXMgb25lIChsaW5rIHVwKQoqICAgICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UgKGxpbmsgZG93bikKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCiogICAgICAgIAoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzR2V0TGlua1ZhbHVlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NTZXRGb3JjZWRMaW5rCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGZvcmNlcyBMaW5rLiBJZiBMaW5rVmFsdWUgaXMgc2V0IHRvIG9uZSwgY2FsbGluZyB0aGlzIAoqICAgICAgICByb3V0aW5lIHdpdGggR1RfVFJVRSB3aWxsIGZvcmNlIExpbmsgdG8gYmUgdXAuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgc3RhdGUgLSBHVF9UUlVFIHRvIGZvcmNlIGxpbmsgKHVwIG9yIGRvd24pLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCiogICAgICAgIAoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzU2V0Rm9yY2VkTGluawooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gICAgR1RfQk9PTCAgICAgICAgc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc0dldEZvcmNlZExpbmsKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgcmV0cmlldmVzIEZvcmNlZCBMaW5rIGJpdAoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBzdGF0ZSAtIEdUX1RSVUUgaWYgRm9yY2VkTGluayBiaXQgaXMgb25lLAoqICAgICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCiogICAgICAgIAoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzR2V0Rm9yY2VkTGluawooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzU2V0RHB4VmFsdWUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBEdXBsZXgncyBGb3JjZWQgdmFsdWUuIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUKKiAgICAgICAgY2FsbGVkIHByaW9yIHRvIGdwY3NTZXRGb3JjZWREcHguCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgc3RhdGUgLSBHVF9UUlVFIHRvIGZvcmNlIGZ1bGwgZHVwbGV4LCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCiogICAgICAgIAoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzU2V0RHB4VmFsdWUKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOICAgIEdUX0JPT0wgICAgICAgIHN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NHZXREcHhWYWx1ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgRHVwbGV4J3MgRm9yY2VkIHZhbHVlCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIHN0YXRlIC0gR1RfVFJVRSBpZiBEdXBsZXgncyBGb3JjZWQgdmFsdWUgaXMgc2V0IHRvIEZ1bGwgZHVwbGV4LAoqICAgICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCiogICAgICAgIAoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzR2V0RHB4VmFsdWUKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgICAqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc1NldEZvcmNlZERweAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBmb3JjZXMgZHVwbGV4IG1vZGUuIElmIERweFZhbHVlIGlzIHNldCB0byBvbmUsIGNhbGxpbmcgdGhpcyAKKiAgICAgICAgcm91dGluZSB3aXRoIEdUX1RSVUUgd2lsbCBmb3JjZSBkdXBsZXggbW9kZSB0byBiZSBmdWxsIGR1cGxleC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBzdGF0ZSAtIEdUX1RSVUUgdG8gZm9yY2UgZHVwbGV4IG1vZGUsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKiAgICAgICAgCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NTZXRGb3JjZWREcHgKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOICAgIEdUX0JPT0wgICAgICAgIHN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NHZXRGb3JjZWREcHgKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgcmV0cmlldmVzIEZvcmNlZCBEdXBsZXguCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIHN0YXRlIC0gR1RfVFJVRSBpZiBGb3JjZWREcHggYml0IGlzIG9uZSwKKiAgICAgICAgICAgICAgICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqICAgICAgICAKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Bjc0dldEZvcmNlZERweAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzU2V0Rm9yY2VTcGVlZAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBmb3JjZXMgc3BlZWQuIAoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgIG1vZGUgLSBHVF9QT1JUX0ZPUkNFRF9TUEVFRF9NT0RFICgxMCwgMTAwLCAxMDAwLCBvciBObyBTcGVlZCBGb3JjZSkKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCiogICAgICAgIAoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzU2V0Rm9yY2VTcGVlZAooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gICAgR1RfUE9SVF9GT1JDRURfU1BFRURfTU9ERSAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzR2V0Rm9yY2VTcGVlZAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgRm9yY2UgU3BlZWQgdmFsdWUKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgc3RhdGUgLSBHVF9QT1JUX0ZPUkNFRF9TUEVFRF9NT0RFICgxMCwgMTAwLCAxMDAwLCBvciBubyBmb3JjZSBzcGVlZCkKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCiogICAgICAgIAoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzR2V0Rm9yY2VTcGVlZAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfUE9SVF9GT1JDRURfU1BFRURfTU9ERSAgICptb2RlCik7CgoKCi8qIGd0UW9zTWFwLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc0dldFRhZ1JlbWFwCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgR2V0cyB0aGUgcmVtYXBwZWQgcHJpb3JpdHkgdmFsdWUgZm9yIGEgc3BlY2lmaWMgODAyLjFwIHByaW9yaXR5IG9uIGEKKiAgICAgICAgZ2l2ZW4gcG9ydC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgcHJpICAgLSA4MDIuMXAgcHJpb3JpdHkKKgoqIE9VVFBVVFM6CiogICAgICAgIHJlbWFwcGVkUHJpIC0gcmVtYXBwZWQgUHJpb3JpdHkKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NHZXRUYWdSZW1hcAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBJTiAgR1RfVTggICAgICAgIHByaSwKICAgIE9VVCBHVF9VOCAgICAgICAqcmVtYXBwZWRQcmkKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc1NldFRhZ1JlbWFwCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgU2V0cyB0aGUgcmVtYXBwZWQgcHJpb3JpdHkgdmFsdWUgZm9yIGEgc3BlY2lmaWMgODAyLjFwIHByaW9yaXR5IG9uIGEKKiAgICAgICAgZ2l2ZW4gcG9ydC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgcHJpICAgLSA4MDIuMXAgcHJpb3JpdHkKKiAgICAgICAgcmVtYXBwZWRQcmkgLSByZW1hcHBlZCBQcmlvcml0eQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc1NldFRhZ1JlbWFwCigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgIHBvcnQsCiAgICBJTiBHVF9VOCAgICAgICAgcHJpLAogICAgSU4gR1RfVTggICAgICAgIHJlbWFwcGVkUHJpCik7CgoKLyogZ3RTeXNDb25maWcuYyAqLwoKLyogZ3RTeXNTdGF0dXMuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0UFBVU3RhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IHRoZSBQUFUgU3RhdGUuIFRoZXNlIHR3byBiaXRzIHJldHVybiAKKiAgICAgICAgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFBQVS4KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgLSBHVF9QUFVfU1RBVEUKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqICAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFBQVVN0YXRlCigKICAgIElOICBHVF9RRF9ERVYgICAgICAgKmRldiwKICAgIE9VVCBHVF9QUFVfU1RBVEUgICAgKm1vZGUKKTsKCgovKiBQcm90b3R5cGVzIGFkZGVkIGZvciA4OEU2MDkzICovCgoKLyogZ3RCcmdGZGIuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0TGVhcm4yQWxsCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgV2hlbiBtb3JlIHRoYW4gb25lIE1hcnZlbGwgZGV2aWNlIGlzIHVzZWQgdG8gZm9ybSBhIHNpbmdsZSAnc3dpdGNoJywgaXQKKiAgICAgICAgbWF5IGJlIGRlc2lyYWJsZSBmb3IgYWxsIGRldmljZXMgaW4gdGhlICdzd2l0Y2gnIHRvIGxlYXJuIGFueSBhZGRyZXNzIHRoaXMgCiogICAgICAgIGRldmljZSBsZWFybnMuIFdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lIGFsbCBvdGhlciBkZXZpY2VzIGluIHRoZSAKKiAgICAgICAgJ3N3aXRjaCcgbGVhcm4gdGhlIHNhbWUgYWRkcmVzc2VzIHRoaXMgZGV2aWNlIGxlYXJucy4gV2hlbiB0aGlzIGJpdCBpcyAKKiAgICAgICAgY2xlYXJlZCB0byBhIHplcm8sIG9ubHkgdGhlIGRldmljZXMgdGhhdCBhY3R1YWxseSByZWNlaXZlIGZyYW1lcyB3aWxsIGxlYXJuCiogICAgICAgIGZyb20gdGhvc2UgZnJhbWVzLiBUaGlzIG1vZGUgdHlwaWNhbGx5IHN1cHBvcnRzIG1vcmUgYWN0aXZlIE1BQyBhZGRyZXNzZXMgCiogICAgICAgIGF0IG9uZSB0aW1lIGFzIGVhY2ggZGV2aWNlIGluIHRoZSBzd2l0Y2ggZG9lcyBub3QgbmVlZCB0byBsZWFybiBhZGRyZXNzZXMgCiogICAgICAgIGl0IG1heSBuZXJ2ZXIgdXNlLgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAgLSBHVF9UUlVFIGlmIExlYXJuMkFsbCBpcyBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJHZXRMZWFybjJBbGwKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX0JPT0wgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJTZXRMZWFybjJBbGwKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBFbmFibGUgb3IgZGlzYWJsZSBMZWFybjJBbGwgbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgdG8gc2V0IExlYXJuMkFsbCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYlNldExlYXJuMkFsbAooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0JPT0wgICAgICAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2ZkYlJlbW92ZVBvcnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBkZWFzc29jaWFnZXMgYWxsIG9yIHVuYmxvY2tlZCBhZGRyZXNzZXMgZnJvbSBhIHBvcnQuCioKKiBJTlBVVFM6CiogICAgICAgbW92ZUNtZCAtIHRoZSBtb3ZlIG9wZXJhdGlvbiB0eXBlLgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYlJlbW92ZVBvcnQKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9NT1ZFX0NNRCAgICAgbW92ZUNtZCwKICAgIElOIEdUX0xQT1JUICAgICAgICBwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJSZW1vdmVQb3J0SW5EQgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGRlYXNzb2NpYWdlcyBhbGwgb3IgdW5ibG9ja2VkIGFkZHJlc3NlcyBmcm9tIGEgcG9ydCBpbiB0aGUKKiAgICAgICBwYXJ0aWN1bGFyIEFUVSBEYXRhYmFzZSAoREJOdW0pLgoqCiogSU5QVVRTOgoqICAgICAgIG1vdmVDbWQgIC0gdGhlIG1vdmUgb3BlcmF0aW9uIHR5cGUuCiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBEQk51bSAgICAgLSBBVFUgTUFDIEFkZHJlc3MgRGF0YWJhc2UgTnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJSZW1vdmVQb3J0SW5EQgooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX01PVkVfQ01EICAgICBtb3ZlQ21kLAogICAgSU4gR1RfTFBPUlQgICAgICAgIHBvcnQsCiAgICBJTiBHVF9VMzIgICAgICAgICBEQk51bQopOwoKCgovKiBndEJyZ1N0cC5jICovCgovKiBndEJyZ1ZsYW4uYyAqLwoKLyogZ3RCcmdWdHUuYyAqLwoKLyogZ3RFdmVudHMuYyAqLwoKLyogZ3RQQ1NDdHJsLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc0dldFBDU0xpbmsKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgcmV0cmlldmVzIExpbmsgdXAgc3RhdHVzIGluIFBDUwoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBzdGF0ZSAtIEdUX1RSVUUgZm9yIENvbW1hIERldGVjdGVkIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKiAgICAgICAgCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXRQQ1NMaW5rCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NTZXRGQ1ZhbHVlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldHMgRmxvdyBDb250cm9sJ3MgZm9yY2UgdmFsdWUKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBzdGF0ZSAtIEdUX1RSVUUgdG8gZm9yY2UgZmxvdyBjb250cm9sIGVuYWJsZWQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKiAgICAgICAgCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NTZXRGQ1ZhbHVlCigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgIHBvcnQsCiAgICBJTiAgICBHVF9CT09MICAgICAgICBzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzR2V0RkNWYWx1ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgRmxvdyBDb250cm9sIFZhbHVlIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgRm9yY2luZyAKKiAgICAgICAgRmxvdyBDb250cm9sIGVuYWJsZWQgb3IgZGlzYWJsZWQuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIHN0YXRlIC0gR1RfVFJVRSBpZiBGQyBGb3JjZSB2YWx1ZSBpcyBvbmUgKGZsb3cgY29udHJvbCBlbmFibGVkKQoqICAgICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UgKGZsb3cgY29udHJvbCBkaXNhYmxlZCkKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCiogICAgICAgIAoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzR2V0RkNWYWx1ZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzU2V0Rm9yY2VkRkMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZm9yY2VzIEZsb3cgQ29udHJvbC4gSWYgRkNWYWx1ZSBpcyBzZXQgdG8gb25lLCBjYWxsaW5nIHRoaXMgCiogICAgICAgIHJvdXRpbmUgd2l0aCBHVF9UUlVFIHdpbGwgZm9yY2UgRmxvdyBDb250cm9sIHRvIGJlIGVuYWJsZWQuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgc3RhdGUgLSBHVF9UUlVFIHRvIGZvcmNlIGZsb3cgY29udHJvbCAoZW5hYmxlIG9yIGRpc2FibGUpLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCiogICAgICAgIAoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzU2V0Rm9yY2VkRkMKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOICAgIEdUX0JPT0wgICAgICAgIHN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NHZXRGb3JjZWRGQwoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgRm9yY2VkIEZsb3cgQ29udHJvbCBiaXQKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgc3RhdGUgLSBHVF9UUlVFIGlmIEZvcmNlZEZDIGJpdCBpcyBvbmUsCiogICAgICAgICAgICAgICAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKiAgICAgICAgCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXRGb3JjZWRGQwooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICpzdGF0ZQopOwoKCgovKiBndFBoeUN0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UGFnZWRQaHlSZWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZWFkcyBwaHkgcmVnaXN0ZXIgb2YgdGhlIGdpdmVuIHBhZ2UKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgICAgLSBwb3J0IHRvIGJlIHJlYWQKKiAgICAgICAgcmVnQWRkciAgICAtIHJlZ2lzdGVyIG9mZnNldCB0byBiZSByZWFkCiogICAgICAgIHBhZ2UgICAgLSBwYWdlIG51bWJlciB0byBiZSByZWFkCioKKiBPVVRQVVRTOgoqICAgICAgICBkYXRhICAgIC0gdmFsdWUgb2YgdGhlIHJlYWQgcmVnaXN0ZXIKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIGlmIHJlYWQgc3VjY2Vzc2VkCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAgIC0gaWYgcmVhZCBmYWlsZWQKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQYWdlZFBoeVJlZwooCiAgICBJTiAgR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfVTMyICBwb3J0LAogICAgSU4gICAgR1RfVTMyICByZWdBZGRyLAogICAgSU4gICAgR1RfVTMyICBwYWdlLAogICAgT1VUIEdUX1UxNiogZGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0UGFnZWRQaHlSZWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSB3cml0ZXMgYSB2YWx1ZSB0byBwaHkgcmVnaXN0ZXIgb2YgdGhlIGdpdmVuIHBhZ2UKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgICAgLSBwb3J0IHRvIGJlIHJlYWQKKiAgICAgICAgcmVnQWRkciAgICAtIHJlZ2lzdGVyIG9mZnNldCB0byBiZSByZWFkCiogICAgICAgIHBhZ2UgICAgLSBwYWdlIG51bWJlciB0byBiZSByZWFkCiogICAgICAgIGRhdGEgICAgLSB2YWx1ZSBvZiB0aGUgcmVhZCByZWdpc3RlcgoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gaWYgcmVhZCBzdWNjZXNzZWQKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgICAgLSBpZiByZWFkIGZhaWxlZAoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFBhZ2VkUGh5UmVnCigKICAgIElOICBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9VMzIgcG9ydCwKICAgIElOICAgIEdUX1UzMiByZWdBZGRyLAogICAgSU4gICAgR1RfVTMyIHBhZ2UsCiAgICBJTiAgR1RfVTE2IGRhdGEKKTsKCgovKiBndFBvcnRDdHJsLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFVzZUNvcmVUYWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXQgdGhlIFVzZUNvcmVUYWcgYml0IGluIFBvcnQgQ29udHJvbCBSZWdpc3Rlci4KKiAgICAgICAgICAgIFdoZW4gdGhpcyBiaXQgaXMgY2xlYXJlZCB0byBhIHplcm8sIGluZ3Jlc3NpbmcgZnJhbWVzIGFyZSBjb25zaWRlcmVkCiogICAgICAgICAgICBUYWdnZWQgaWYgdGhlIDE2LWJpdHMgZm9sbG93aW5nIHRoZSBmcmFtZSdzIFNvdXJjZSBBZGRyZXNzIGlzIDB4ODEwMC4KKiAgICAgICAgICAgIFdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lLCBpbmdyZXNzaW5nIGZyYW1lcyBhcmUgY29uc2lkZXJlZCBUYWdnZWQKKiAgICAgICAgICAgIGlmIHRoZSAxNi1iaXRzIGZvbGxvd2luZyB0aGUgZnJhbWUncyBTb3VyY2UgQWRkcmVzcyBpcyBlcXVhbCB0byB0aGUgCiogICAgICAgICAgICBDb3JlVGFnIHJlZ2lzdGVyIHZhbHVlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgZm9yY2UgLSBHVF9UUlVFIGZvciBmb3JjZSBmbG93IGNvbnRyb2wgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFVzZUNvcmVUYWcKKAogICAgSU4gR1RfUURfREVWICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICBwb3J0LAogICAgSU4gR1RfQk9PTCAgICBmb3JjZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0VXNlQ29yZVRhZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldCB0aGUgVXNlIENvcmUgVGFnIHN0YXRlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIGZvcmNlIC0gR1RfVFJVRSBmb3IgdXNpbmcgY29yZSB0YWcgcmVnaXN0ZXIgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFVzZUNvcmVUYWcKKAogICAgSU4gIEdUX1FEX0RFViAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAqZm9yY2UKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldERpc2NhcmRUYWdnZWQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSwgYWxsIG5vbi1NR01UIGZyYW1lcyB0aGF0IGFyZSBwcm9jZXNzZWQgYXMgCiogICAgICAgIFRhZ2dlZCB3aWxsIGJlIGRpc2NhcmRlZCBhcyB0aGV5IGVudGVyIHRoaXMgc3dpdGNoIHBvcnQuIFByaW9yaXR5IG9ubHkgCiogICAgICAgIHRhZ2dlZCBmcmFtZXMgKHdpdGggYSBWSUQgb2YgMHgwMDApIGFyZSBjb25zaWRlcmVkIHRhZ2dlZC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBtb2RlIC0gR1RfVFJVRSB0byBkaXNjYXJkIHRhZ2dlZCBmcmFtZSwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldERpc2NhcmRUYWdnZWQKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOIEdUX0JPT0wgICAgICAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldERpc2NhcmRUYWdnZWQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBEaXNjYXJkVGFnZ2VkIGJpdCBmb3IgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgIC0gR1RfVFJVRSBpZiBEaXNjYXJkVGFnZ2VkIGJpdCBpcyBzZXQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0RGlzY2FyZFRhZ2dlZAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0RGlzY2FyZFVudGFnZ2VkCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gYSBvbmUsIGFsbCBub24tTUdNVCBmcmFtZXMgdGhhdCBhcmUgcHJvY2Vzc2VkIGFzIAoqICAgICAgICBVbnRhZ2dlZCB3aWxsIGJlIGRpc2NhcmRlZCBhcyB0aGV5IGVudGVyIHRoaXMgc3dpdGNoIHBvcnQuIFByaW9yaXR5IG9ubHkgCiogICAgICAgIHRhZ2dlZCBmcmFtZXMgKHdpdGggYSBWSUQgb2YgMHgwMDApIGFyZSBjb25zaWRlcmVkIHRhZ2dlZC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBtb2RlIC0gR1RfVFJVRSB0byBkaXNjYXJkIHVudGFnZ2VkIGZyYW1lLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0RGlzY2FyZFVudGFnZ2VkCigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgIHBvcnQsCiAgICBJTiBHVF9CT09MICAgICAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXREaXNjYXJkVW50YWdnZWQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBEaXNjYXJkVW50YWdnZWQgYml0IGZvciB0aGUgZ2l2ZW4gcG9ydAoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAgLSBHVF9UUlVFIGlmIERpc2NhcmRVbnRhZ2dlZCBiaXQgaXMgc2V0LCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldERpc2NhcmRVbnRhZ2dlZAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0TWFwREEKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSwgbm9ybWFsIHN3aXRjaCBvcGVyYXRpb24gd2lsbCBvY2N1ciB3aGVyZSBhIAoqICAgICAgICBmcmFtZSdzIERBIGFkZHJlc3MgaXMgdXNlZCB0byBkaXJlY3QgdGhlIGZyYW1lIG91dCB0aGUgY29ycmVjdCBwb3J0LgoqICAgICAgICBXaGVuIHRoaXMgYmUgaXMgY2xlYXJlZCB0byBhIHplcm8sIHRoZSBmcmFtZSB3aWxsIGJlIHNlbnQgb3V0IHRoZSBwb3J0KHMpIAoqICAgICAgICBkZWZpbmVkIGJ5IEZvcndhcmRVbmtub3duIGJpdHMgb3IgdGhlIERlZmF1bHRGb3J3YXJkIGJpdHMgZXZlbiBpZiB0aGUgREEgCiogICAgICAgIGlzIG91bmQgaW4gdGhlIGFkZHJlc3MgZGF0YWJhc2UuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgdG8gdXNlIE1hcERBLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0TWFwREEKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOIEdUX0JPT0wgICAgICAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldE1hcERBCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGdldHMgTWFwREEgYml0IGZvciB0aGUgZ2l2ZW4gcG9ydAoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAgLSBHVF9UUlVFIGlmIE1hcERBIGJpdCBpcyBzZXQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0TWFwREEKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldERlZmF1bHRGb3J3YXJkCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gYSBvbmUsIG5vcm1hbCBzd2l0Y2ggb3BlcmF0aW9uIHdpbGwgb2NjdXJzIGFuZCAKKiAgICAgICAgbXVsdGljYXN0IGZyYW1lcyB3aXRoIHVua25vd24gREEgYWRkcmVzc2VzIGFyZSBhbGxvd2VkIHRvIGVncmVzcyBvdXQgdGhpcyAKKiAgICAgICAgcG9ydCAoYXNzdW1pbmcgdGhlIFZMQU4gc2V0dGluZ3MgYWxsb3cgdGhlIGZyYW1lIHRvIGVncmVzcyB0aGlzIHBvcnQgdG9vKS4KKiAgICAgICAgV2hlbiB0aGlzIGJlIGlzIGNsZWFyZWQgdG8gYSB6ZXJvLCBtdWx0aWNhc3QgZnJhbWVzIHdpdGggdW5rbm93biBEQSAKKiAgICAgICAgYWRkcmVzc2VzIHdpbGwgbm90IGVncmVzcyBvdXQgdGhpcyBwb3J0LgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgIG1vZGUgLSBHVF9UUlVFIHRvIHVzZSBEZWZhdWx0Rm9yd2FyZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldERlZmF1bHRGb3J3YXJkCigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgIHBvcnQsCiAgICBJTiBHVF9CT09MICAgICAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXREZWZhdWx0Rm9yd2FyZAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXRzIERlZmF1bHRGb3J3YXJkIGJpdCBmb3IgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgIC0gR1RfVFJVRSBpZiBEZWZhdWx0Rm9yd2FyZCBiaXQgaXMgc2V0LCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldERlZmF1bHRGb3J3YXJkCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRFZ3Jlc3NNb25pdG9yU291cmNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgV2hlbiB0aGlzIGJlIGlzIGNsZWFyZWQgdG8gYSB6ZXJvLCBub3JtYWwgbmV0d29yayBzd2l0Y2hpbmcgb2NjdXJzLgoqICAgICAgICBXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSwgYW55IGZyYW1lIHRoYXQgZWdyZXNzZXMgb3V0IHRoaXMgcG9ydCB3aWxsCiogICAgICAgIGFsc28gYmUgc2VudCB0byB0aGUgRWdyZXNzTW9uaXRvckRlc3QgUG9ydAoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgIG1vZGUgLSBHVF9UUlVFIHRvIHNldCBFZ3Jlc3NNb25pdG9yU291cmNlLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0RWdyZXNzTW9uaXRvclNvdXJjZQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gR1RfQk9PTCAgICAgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0RWdyZXNzTW9uaXRvclNvdXJjZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXRzIEVncmVzc01vbml0b3JTb3VyY2UgYml0IGZvciB0aGUgZ2l2ZW4gcG9ydAoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAgLSBHVF9UUlVFIGlmIEVncmVzc01vbml0b3JTb3VyY2UgYml0IGlzIHNldCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRFZ3Jlc3NNb25pdG9yU291cmNlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRJbmdyZXNzTW9uaXRvclNvdXJjZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFdoZW4gdGhpcyBiZSBpcyBjbGVhcmVkIHRvIGEgemVybywgbm9ybWFsIG5ldHdvcmsgc3dpdGNoaW5nIG9jY3Vycy4KKiAgICAgICAgV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gYSBvbmUsIGFueSBmcmFtZSB0aGF0IGVncmVzc2VzIG91dCB0aGlzIHBvcnQgd2lsbAoqICAgICAgICBhbHNvIGJlIHNlbnQgdG8gdGhlIEVncmVzc01vbml0b3JEZXN0IFBvcnQKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBtb2RlIC0gR1RfVFJVRSB0byBzZXQgRWdyZXNzTW9uaXRvclNvdXJjZSwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldEluZ3Jlc3NNb25pdG9yU291cmNlCigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgIHBvcnQsCiAgICBJTiBHVF9CT09MICAgICAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRJbmdyZXNzTW9uaXRvclNvdXJjZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXRzIEluZ3Jlc3NNb25pdG9yU291cmNlIGJpdCBmb3IgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgIC0gR1RfVFJVRSBpZiBJbmdyZXNzTW9uaXRvclNvdXJjZSBiaXQgaXMgc2V0LCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEluZ3Jlc3NNb25pdG9yU291cmNlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgICptb2RlCik7CgoKLyogZ3RQb3J0UEFWLmMgKi8KCi8qIGd0UG9ydFJhdGVDdHJsLmMgKi8KCi8qIGd0UG9ydFJtb24uYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3RhdHNHZXRQb3J0Q291bnRlcjMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBhIHNwZWNpZmljIGNvdW50ZXIgb2YgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBjb3VudGVyIC0gdGhlIGNvdW50ZXIgd2hpY2ggd2lsbCBiZSByZWFkCioKKiBPVVRQVVRTOgoqICAgICAgICBzdGF0c0RhdGEgLSBwb2ludHMgdG8gMzJiaXQgZGF0YSBzdG9yYWdlIGZvciB0aGUgTUlCIGNvdW50ZXIKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgR2lnYWJpdCBTd2l0Y2ggb25seQoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3RhdHNHZXRQb3J0Q291bnRlcjMKKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIElOICBHVF9TVEFUU19DT1VOVEVSUzMgICAgY291bnRlciwKICAgIE9VVCBHVF9VMzIgICAgICAgICAgICAqc3RhdHNEYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdGF0c0dldFBvcnRBbGxDb3VudGVyczMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBhbGwgY291bnRlcnMgb2YgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgc3RhdHNDb3VudGVyU2V0IC0gcG9pbnRzIHRvIEdUX1NUQVRTX0NPVU5URVJfU0VUIGZvciB0aGUgTUlCIGNvdW50ZXJzCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgICBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIEdpZ2FiaXQgU3dpdGNoIG9ubHkKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0YXRzR2V0UG9ydEFsbENvdW50ZXJzMwooCiAgICBJTiAgR1RfUURfREVWICAgICAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgT1VUIEdUX1NUQVRTX0NPVU5URVJfU0VUMyAgICAqc3RhdHNDb3VudGVyU2V0Cik7CgoKLyogZ3RQb3J0U3RhdC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQb3J0Q3RyMgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgdGhlIHBvcnQgSW5EaXNjYXJkcywgSW5GaWx0ZXJlZCwgYW5kIE91dEZpbHRlcmVkIGNvdW50ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIGN0ciAtIHRoZSBjb3VudGVycyB2YWx1ZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQb3J0Q3RyMgooCiAgICBJTiAgR1RfUURfREVWICAgICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgICAgIHBvcnQsCiAgICBPVVQgR1RfUE9SVF9TVEFUMiAgICpjdHIKKTsKCi8qIGd0UG9ydFN0YXR1cy5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRNR01JSQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFNFUkRFUyBJbnRlcmZhY2UgbW9kZS4gV2hlbiB0aGlzIGJpdCBpcyBjbGVhcmVkIHRvIGEgemVybyBhbmQgYSBQSFkgaXMgCiogICAgICAgIGRldGVjdGVkIGNvbm5lY3RlZCB0byB0aGlzIHBvcnQsIHRoZSBTRVJERVMgaW50ZXJmYWNlIGJldHdlZW4gdGhpcyBwb3J0CiogICAgICAgIGFuZCB0aGUgUEhZIHdpbGwgYmUgU0dNSUkuICBXaGVuIHRoaXMgYml0IGlzIHNldCB0b2Egb25lIGFuZCBhIFBIWSBpcwoqICAgICAgICBkZXRlY3RlZCBjb25uZWN0ZWQgdG8gdGhpcyBwb3J0LCB0aGUgU0VSREVTIGludGVyZmFjZSBiZXR3ZWVuIHRoaXMgcG9ydCAKKiAgICAgICAgYW5kIHRoZSBQSFkgd2lsbCBiZSBNR01JSS4gV2hlbiBubyBQSFkgaXMgZGV0ZWN0ZWQgb24gdGhpcyBwb3J0IGFuZCB0aGUgCiogICAgICAgIFNFUkRFUyBpbnRlcmZhY2UgaXMgYmVpbmcgdXNlZCwgaXQgd2lsbCBiZSBjb25maWd1cmVkIGluIDEwMDBCYXNlLVggbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgc3RhdGUgLSBHVF9UUlVFIG9yIEdUX0ZBTFNFCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRNR01JSQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0TUdNSUkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBTRVJERVMgSW50ZXJmYWNlIG1vZGUuIFdoZW4gdGhpcyBiaXQgaXMgY2xlYXJlZCB0byBhIHplcm8gYW5kIGEgUEhZIGlzIAoqICAgICAgICBkZXRlY3RlZCBjb25uZWN0ZWQgdG8gdGhpcyBwb3J0LCB0aGUgU0VSREVTIGludGVyZmFjZSBiZXR3ZWVuIHRoaXMgcG9ydAoqICAgICAgICBhbmQgdGhlIFBIWSB3aWxsIGJlIFNHTUlJLiAgV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG9hIG9uZSBhbmQgYSBQSFkgaXMKKiAgICAgICAgZGV0ZWN0ZWQgY29ubmVjdGVkIHRvIHRoaXMgcG9ydCwgdGhlIFNFUkRFUyBpbnRlcmZhY2UgYmV0d2VlbiB0aGlzIHBvcnQgCiogICAgICAgIGFuZCB0aGUgUEhZIHdpbGwgYmUgTUdNSUkuIFdoZW4gbm8gUEhZIGlzIGRldGVjdGVkIG9uIHRoaXMgcG9ydCBhbmQgdGhlIAoqICAgICAgICBTRVJERVMgaW50ZXJmYWNlIGlzIGJlaW5nIHVzZWQsIGl0IHdpbGwgYmUgY29uZmlndXJlZCBpbiAxMDAwQmFzZS1YIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgc3RhdGUgLSBHVF9UUlVFIG9yIEdUX0ZBTFNFCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRNR01JSQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBJTiAgR1RfQk9PTCAgICAgIHN0YXRlCik7CgoKLyogZ3RRb3NNYXAuYyAqLwoKLyogZ3RTeXNDdHJsLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldENvcmVUYWdUeXBlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldHMgRXRoZXIgQ29yZSBUYWcgVHlwZS4KKiAgICAgICAgVGhpcyBFdGhlciBUeXBlIGlzIGFkZGVkIHRvIGZyYW1lcyB0aGF0IGVncmVzcyB0aGUgc3dpdGNoIGFzIERvdWJsZSBUYWdnZWQgCiogICAgICAgIGZyYW1lcy4gSXQgaXMgYWxzbyB0aGUgRXRoZXIgVHlwZSBleHBlY3RlZCBkdXJpbmcgSW5ncmVzcyB0byBkZXRlcm1pbmUgaWYgCiogICAgICAgIGEgZnJhbWUgaXMgVGFnZ2VkIG9yIG5vdCBvbiBwb3J0cyBjb25maWd1cmVkIGFzIFVzZUNvcmVUYWcgbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICAgZXRoZXJUeXBlIC0gQ29yZSBUYWcgVHlwZSAoMiBieXRlcykKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRDb3JlVGFnVHlwZQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX1UxNiAgICAgICAgICBldGhlclR5cGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldENvcmVUYWdUeXBlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGdldHMgQ29yZVRhZ1R5cGUKKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGV0aGVyVHlwZSAtIENvcmUgVGFnIFR5cGUgKDIgYnl0ZXMpCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRDb3JlVGFnVHlwZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfVTE2ICAgICAgKmV0aGVyVHlwZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0SW5ncmVzc01vbml0b3JEZXN0CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldHMgSW5ncmVzcyBNb25pdG9yIERlc3RpbmF0aW9uIFBvcnQuIEZyYW1lcyB0aGF0IGFyZSAKKiAgICAgICAgdGFyZ2V0ZWQgdG93YXJkIGFuIEluZ3Jlc3MgTW9uaXRvciBEZXN0aW5hdGlvbiBnbyBvdXQgdGhlIHBvcnQgbnVtYmVyIAoqICAgICAgICBpbmRpY2F0ZWQgaW4gdGhlc2UgYml0cy4gVGhpcyBpbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQgb24gYSBNYXJ2ZWxsIFRhZyBwb3J0CiogICAgICAgIHdpdGggdGhlIEluZ3Jlc3MgTW9uaXRvciB0eXBlLCBhbmQgZnJhbWVzIHJlY2VpdmVkIG9uIGEgTmV0d29yayBwb3J0IHRoYXQgCiogICAgICAgIGlzIGVuYWJsZWQgdG8gYmUgdGhlIEluZ3Jlc3MgTW9uaXRvciBTb3VyY2UgUG9ydC4KKiAgICAgICAgSWYgdGhlIEluZ3Jlc3MgTW9uaXRvciBEZXN0aW5hdGlvbiBQb3J0IHJlc2lkZXMgaW4gdGhpcyBkZXZpY2UgdGhlc2UgYml0cyAKKiAgICAgICAgc2hvdWxkIHBvaW50IHRvIHRoZSBOZXR3b3JrIHBvcnQgd2hlcmUgdGhlc2UgZnJhbWVzIGFyZSB0byBlZ3Jlc3MuIElmIHRoZSAKKiAgICAgICAgSW5ncmVzcyBNb25pdG9yIERlc3RpbmF0aW9uIFBvcnQgcmVzaWRlcyBpbiBhbm90aGVyIGRldmljZSB0aGVzZSBiaXRzIAoqICAgICAgICBzaG91bGQgcG9pbnQgdG8gdGhlIE1hcnZlbGwgVGFnIHBvcnQgaW4gdGhpcyBkZXZpY2UgdGhhdCBpcyB1c2VkIHRvIGdldCAKKiAgICAgICAgdG8gdGhlIGRldmljZSB0aGF0IGNvbnRhaW5zIHRoZSBJbmdyZXNzIE1vbml0b3IgRGVzdGluYXRpb24gUG9ydC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRJbmdyZXNzTW9uaXRvckRlc3QKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0SW5ncmVzc01vbml0b3JEZXN0CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGdldHMgSW5ncmVzcyBNb25pdG9yIERlc3RpbmF0aW9uIFBvcnQuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0SW5ncmVzc01vbml0b3JEZXN0CigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIE9VVCBHVF9MUE9SVCAgICAgICpwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRFZ3Jlc3NNb25pdG9yRGVzdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBzZXRzIEVncmVzcyBNb25pdG9yIERlc3RpbmF0aW9uIFBvcnQuIEZyYW1lcyB0aGF0IGFyZSAKKiAgICAgICAgdGFyZ2V0ZWQgdG93YXJkIGFuIEVncmVzcyBNb25pdG9yIERlc3RpbmF0aW9uIGdvIG91dCB0aGUgcG9ydCBudW1iZXIgCiogICAgICAgIGluZGljYXRlZCBpbiB0aGVzZSBiaXRzLiBUaGlzIGluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCBvbiBhIE1hcnZlbGwgVGFnIHBvcnQKKiAgICAgICAgd2l0aCB0aGUgRWdyZXNzIE1vbml0b3IgdHlwZSwgYW5kIGZyYW1lcyB0cmFuc21pdHRlZCBvbiBhIE5ldHdvcmsgcG9ydCB0aGF0IAoqICAgICAgICBpcyBlbmFibGVkIHRvIGJlIHRoZSBFZ3Jlc3MgTW9uaXRvciBTb3VyY2UgUG9ydC4KKiAgICAgICAgSWYgdGhlIEVncmVzcyBNb25pdG9yIERlc3RpbmF0aW9uIFBvcnQgcmVzaWRlcyBpbiB0aGlzIGRldmljZSB0aGVzZSBiaXRzIAoqICAgICAgICBzaG91bGQgcG9pbnQgdG8gdGhlIE5ldHdvcmsgcG9ydCB3aGVyZSB0aGVzZSBmcmFtZXMgYXJlIHRvIGVncmVzcy4gSWYgdGhlIAoqICAgICAgICBFZ3Jlc3MgTW9uaXRvciBEZXN0aW5hdGlvbiBQb3J0IHJlc2lkZXMgaW4gYW5vdGhlciBkZXZpY2UgdGhlc2UgYml0cyAKKiAgICAgICAgc2hvdWxkIHBvaW50IHRvIHRoZSBNYXJ2ZWxsIFRhZyBwb3J0IGluIHRoaXMgZGV2aWNlIHRoYXQgaXMgdXNlZCB0byBnZXQgCiogICAgICAgIHRvIHRoZSBkZXZpY2UgdGhhdCBjb250YWlucyB0aGUgRWdyZXNzIE1vbml0b3IgRGVzdGluYXRpb24gUG9ydC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRFZ3Jlc3NNb25pdG9yRGVzdAooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICBwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRFZ3Jlc3NNb25pdG9yRGVzdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXRzIEVncmVzcyBNb25pdG9yIERlc3RpbmF0aW9uIFBvcnQuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0RWdyZXNzTW9uaXRvckRlc3QKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX0xQT1JUICAgICAgKnBvcnQKKTsKCgovKiBndFN5c0NvbmZpZy5jICovCgovKiBndFN5c1N0YXR1cy5jICovCgoKLyogZnVuY3Rpb25zIGFkZGVkIG9uIHJldiAyLjIgKi8KCi8qIGd0UG9ydEN0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0TWVzc2FnZVBvcnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBXaGVuIHRoZSBMZWFybjJBbGwgYml0IGlzIHNldCB0byBvbmUsIGxlYXJuaW5nIG1lc3NhZ2UgZnJhbWVzIGFyZSAKKiAgICAgICAgZ2VuZXJhdGVkLiBUaGVzZSBmcmFtZXMgd2lsbCBiZSBzZW50IG91dCBhbGwgcG9ydHMgd2hvc2UgTWVzc2FnZSBQb3J0IGlzIAoqICAgICAgICBzZXQgdG8gb25lLgoqICAgICAgICAgSWYgdGhpcyBmZWF0dXJlIGlzIHVzZWQsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYWxsIE1hcnZlbGwgVGFnIHBvcnRzLCAKKiAgICAgICAgZXhjZXB0IGZvciB0aGUgQ1BVJ3MgcG9ydCwgaGF2ZSB0aGVpciBNZXNzYWdlUG9ydCBiaXQgc2V0IHRvIG9uZS4gCiogICAgICAgIFBvcnRzIHRoYXQgYXJlIG5vdCBNYXJ2ZWxsIFRhZyBwb3J0cyBzaG91bGQgbm90IGhhdmUgdGhlaXIgTWVzc2FnZSBQb3J0CiogICAgICAgIGJpdCBzZXQgdG8gb25lLgoqICAgICAgICAKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBtb2RlIC0gR1RfVFJVRSB0byBtYWtlIHRoaXMgcG9ydCBhIE1lc3NhZ2UgUG9ydC4gR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0TWVzc2FnZVBvcnQKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOIEdUX0JPT0wgICAgICAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldE1lc3NhZ2VQb3J0CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgV2hlbiB0aGUgTGVhcm4yQWxsIGJpdCBpcyBzZXQgdG8gb25lLCBsZWFybmluZyBtZXNzYWdlIGZyYW1lcyBhcmUgCiogICAgICAgIGdlbmVyYXRlZC4gVGhlc2UgZnJhbWVzIHdpbGwgYmUgc2VudCBvdXQgYWxsIHBvcnRzIHdob3NlIE1lc3NhZ2UgUG9ydCBpcyAKKiAgICAgICAgc2V0IHRvIG9uZS4KKiAgICAgICAgIElmIHRoaXMgZmVhdHVyZSBpcyB1c2VkLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFsbCBNYXJ2ZWxsIFRhZyBwb3J0cywgCiogICAgICAgIGV4Y2VwdCBmb3IgdGhlIENQVSdzIHBvcnQsIGhhdmUgdGhlaXIgTWVzc2FnZVBvcnQgYml0IHNldCB0byBvbmUuIAoqICAgICAgICBQb3J0cyB0aGF0IGFyZSBub3QgTWFydmVsbCBUYWcgcG9ydHMgc2hvdWxkIG5vdCBoYXZlIHRoZWlyIE1lc3NhZ2UgUG9ydAoqICAgICAgICBiaXQgc2V0IHRvIG9uZS4KKgoqICAgICAgICAKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgLSBHVF9UUlVFIHRvIG1ha2UgdGhpcyBwb3J0IGEgTWVzc2FnZSBQb3J0LiBHVF9GQUxTRSwgb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0TWVzc2FnZVBvcnQKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgKm1vZGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRUcnVua1BvcnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMvZGlzYWJsZXMgYW5kIHNldHMgdGhlIHRydW5rIElELgoqICAgICAgICAKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgZW4gLSBHVF9UUlVFIHRvIG1ha2UgdGhlIHBvcnQgYmUgYSBtZW1iZXIgb2YgYSB0cnVuayB3aXRoIHRoZSBnaXZlbiB0cnVua0lkLgoqICAgICAgICAgICAgIEdUX0ZBTFNFLCBvdGhlcndpc2UuCiogICAgICAgIHRydW5rSWQgLSB2YWxpZCBJRCBpcyAwIH4gMTUuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIHRydW5rSWQgaXMgbmVpdGhlciB2YWxpZCBub3IgSU5WQUxJRF9UUlVOS19JRAoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRUcnVua1BvcnQKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOIEdUX0JPT0wgICAgICAgICBlbiwKICAgIElOIEdUX1UzMiAgICAgICAgdHJ1bmtJZAopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFRydW5rUG9ydAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVuayBzdGF0ZSBvZiB0aGUgcG9ydC4KKiAgICAgICAgV2hlbiB0cnVuayBpcyBkaXNhYmxlZCwgdHJ1bmtJZCBmaWVsZCB3b24ndCBoYXZlIHZhbGlkIHZhbHVlLgoqICAgICAgICAKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIGVuIC0gR1RfVFJVRSwgaWYgdGhlIHBvcnQgaXMgYSBtZW1iZXIgb2YgYSB0cnVuaywKKiAgICAgICAgICAgICBHVF9GQUxTRSwgb3RoZXJ3aXNlLgoqICAgICAgICB0cnVua0lkIC0gMCB+IDE1LCB2YWxpZCBvbmx5IGlmIGVuIGlzIEdUX1RSVUUKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRUcnVua1BvcnQKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAqZW4sCiAgICBPVVQgR1RfVTMyICAgICAgICAqdHJ1bmtJZAopOwoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0R2xvYmFsMlJlZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJlYWRzIFN3aXRjaCBHbG9iYWwgMiBSZWdpc3RlcnMuCioKKiBJTlBVVFM6CiogICAgICAgcmVnQWRkciAtIFRoZSByZWdpc3RlcidzIGFkZHJlc3MuCioKKiBPVVRQVVRTOgoqICAgICAgIGRhdGEgICAgLSBUaGUgcmVhZCByZWdpc3RlcidzIGRhdGEuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEdsb2JhbDJSZWcKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX1UzMiAgICAgICAgIHJlZ0FkZHIsCiAgICBPVVQgR1RfVTE2ICAgICAgICAgKmRhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldEdsb2JhbDJSZWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSB3cml0ZXMgU3dpdGNoIEdsb2JhbDIgUmVnaXN0ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgIHJlZ0FkZHIgLSBUaGUgcmVnaXN0ZXIncyBhZGRyZXNzLgoqCiogT1VUUFVUUzoKKiAgICAgICBkYXRhICAgIC0gVGhlIHJlYWQgcmVnaXN0ZXIncyBkYXRhLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRHbG9iYWwyUmVnCigKICAgIElOICBHVF9RRF9ERVYgICAgICAgICpkZXYsCiAgICBJTiAgR1RfVTMyICAgICAgICAgICAgcmVnQWRkciwKICAgIElOICBHVF9VMTYgICAgICAgICAgICBkYXRhCik7CgovKiBndFN5c0N0cmwuYyAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRBUlBEZXN0CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldHMgQVJQIE1vbml0b3IgRGVzdGluYXRpb24gUG9ydC4gVGFnZ2VkIG9yIHVudGFnZ2VkIAoqICAgICAgICBmcmFtZXMgdGhhdCBpbmdyZXNzIE5ldHdvcmsgcG9ydHMgd2l0aCB0aGUgQnJvYWRjYXN0IERlc3RpbmF0aW9uIEFkZHJlc3MgCiogICAgICAgIGFuZCB3aXRoIGFuIEV0aGVydHlwZSBvZiAweDA4MDYgYXJlIG1pcnJvcmVkIHRvIHRoaXMgcG9ydC4gVGhlIEFSUERlc3QgCiogICAgICAgIHNob3VsZCBwb2ludCB0byB0aGUgcG9ydCB0aGF0IGRpcmVjdHMgdGhlc2UgZnJhbWVzIHRvIHRoZSBzd2l0Y2gncyBDUFUgCiogICAgICAgIHRoYXQgd2lsbCBwcm9jZXNzIEFSUHMuIFRoaXMgdGFyZ2V0IHBvcnQgc2hvdWxkIGJlIGEgTWFydmVsbCBUYWcgcG9ydCBzbyAKKiAgICAgICAgdGhhdCBmcmFtZXMgd2lsbCBlZ3Jlc3Mgd2l0aCBhIFRvX0NQVSBNYXJ2ZWxsIFRhZyB3aXRoIGEgQ1BVIENvZGUgb2YgQVJQLgoqICAgICAgICBUb19DUFUgTWFydmVsbCBUYWcgZnJhbWVzIHdpdGggYSBDUFUgQ29kZSBvZmYgQVJQIHRoYXQgaW5ncmVzcyBhIE1hcnZlbGwgCiogICAgICAgIFRhZyBwb3J0IHdpbGwgYmUgc2VudCB0byB0aGUgcG9ydCBudW1iZXIgZGVmaW5kZWQgaW4gQVJQRGVzdC4KKgoqICAgICAgICBJZiBBUlBEZXN0ID0gIDB4RiwgQVJQIE1vbml0b3JpbmcgaXMgZGlzYWJsZWQgYW5kIGluZ3Jlc3NpbmcgVG9fQ1BVIEFSUCAKKiAgICAgICAgZnJhbWVzIHdpbGwgYmUgZGlzY2FyZGVkLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEFSUERlc3QKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0QVJQRGVzdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXRzIEFSUCBNb25pdG9yIERlc3RpbmF0aW9uIFBvcnQuIFRhZ2dlZCBvciB1bnRhZ2dlZCAKKiAgICAgICAgZnJhbWVzIHRoYXQgaW5ncmVzcyBOZXR3b3JrIHBvcnRzIHdpdGggdGhlIEJyb2FkY2FzdCBEZXN0aW5hdGlvbiBBZGRyZXNzIAoqICAgICAgICBhbmQgd2l0aCBhbiBFdGhlcnR5cGUgb2YgMHgwODA2IGFyZSBtaXJyb3JlZCB0byB0aGlzIHBvcnQuIFRoZSBBUlBEZXN0IAoqICAgICAgICBzaG91bGQgcG9pbnQgdG8gdGhlIHBvcnQgdGhhdCBkaXJlY3RzIHRoZXNlIGZyYW1lcyB0byB0aGUgc3dpdGNoJ3MgQ1BVIAoqICAgICAgICB0aGF0IHdpbGwgcHJvY2VzcyBBUlBzLiBUaGlzIHRhcmdldCBwb3J0IHNob3VsZCBiZSBhIE1hcnZlbGwgVGFnIHBvcnQgc28gCiogICAgICAgIHRoYXQgZnJhbWVzIHdpbGwgZWdyZXNzIHdpdGggYSBUb19DUFUgTWFydmVsbCBUYWcgd2l0aCBhIENQVSBDb2RlIG9mIEFSUC4KKiAgICAgICAgVG9fQ1BVIE1hcnZlbGwgVGFnIGZyYW1lcyB3aXRoIGEgQ1BVIENvZGUgb2ZmIEFSUCB0aGF0IGluZ3Jlc3MgYSBNYXJ2ZWxsIAoqICAgICAgICBUYWcgcG9ydCB3aWxsIGJlIHNlbnQgdG8gdGhlIHBvcnQgbnVtYmVyIGRlZmluZGVkIGluIEFSUERlc3QuCioKKiAgICAgICAgSWYgQVJQRGVzdCA9ICAweEYsIEFSUCBNb25pdG9yaW5nIGlzIGRpc2FibGVkIGFuZCBpbmdyZXNzaW5nIFRvX0NQVSBBUlAgCiogICAgICAgIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZC4KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRBUlBEZXN0CigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIE9VVCBHVF9MUE9SVCAgICAgICpwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRSc3ZkMkNwdUVuYWJsZXMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBSZXNlcnZlZCBEQSBFbmFibGVzLiBXaGVuIHRoZSBmdW5jdGlvbiwgZ3N5c1NldFJzdmQyQ3B1LCBpcyBjYWxsZWQgd2l0aCAKKiAgICAgICAgZW4gPSBHVF9UUlVFLCB0aGUgMTYgcmVzZXJ2ZWQgbXVsdGljYXN0IERBIGFkZHJlc3Nlcywgd2hvc2UgYml0IGluIHRoaXMgCiogICAgICAgIGVuQml0cyhvciByZWdpc3RlcikgYXJlIGFsc28gc2V0IHRvIGEgb25lLCBhcmUgdHJlYXRlZCBhcyBNR01UIGZyYW1lcy4gCiogICAgICAgIEFsbCB0aGUgcmVzZXJ2ZWQgREEncyB0YWtlIHRoZSBmb3JtIDAxOjgwOkMyOjAwOjAwOjB4LiBXaGVuIHggPSAweDAsIAoqICAgICAgICBiaXQgMCBvZiB0aGlzIHJlZ2lzdGVyIGlzIHRlc3RlZC4gV2hlbiB4ID0gMHgyLCBiaXQgMiBvZiB0aGlzIGZpZWxkIGlzIAoqICAgICAgICB0ZXN0ZWQgYW5kIHNvIG9uLgoqICAgICAgICBJZiB0aGUgdGVzdGVkIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gYSB6ZXJvLCB0aGUgZnJhbWUgd2lsbCAKKiAgICAgICAgYmUgdHJlYXRlZCBhcyBhIG5vcm1hbCAobm9uLU1HTVQpIGZyYW1lLgoqCiogSU5QVVRTOgoqICAgICAgICBlbkJpdHMgLSBiaXQgdmVjdG9yIG9mIGVuYWJsZWQgUmVzZXJ2ZWQgTXVsdGljYXN0LgoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFJzdmQyQ3B1RW5hYmxlcwooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX1UxNiAgICAgICAgZW5CaXRzCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRSc3ZkMkNwdUVuYWJsZXMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBSZXNlcnZlZCBEQSBFbmFibGVzLiBXaGVuIHRoZSBmdW5jdGlvbiwgZ3N5c1NldFJzdmQyQ3B1LCBpcyBjYWxsZWQgd2l0aCAKKiAgICAgICAgZW4gPSBHVF9UUlVFLCB0aGUgMTYgcmVzZXJ2ZWQgbXVsdGljYXN0IERBIGFkZHJlc3Nlcywgd2hvc2UgYml0IGluIHRoaXMgCiogICAgICAgIGVuQml0cyhvciByZWdpc3RlcikgYXJlIGFsc28gc2V0IHRvIGEgb25lLCBhcmUgdHJlYXRlZCBhcyBNR01UIGZyYW1lcy4gCiogICAgICAgIEFsbCB0aGUgcmVzZXJ2ZWQgREEncyB0YWtlIHRoZSBmb3JtIDAxOjgwOkMyOjAwOjAwOjB4LiBXaGVuIHggPSAweDAsIAoqICAgICAgICBiaXQgMCBvZiB0aGlzIHJlZ2lzdGVyIGlzIHRlc3RlZC4gV2hlbiB4ID0gMHgyLCBiaXQgMiBvZiB0aGlzIGZpZWxkIGlzIAoqICAgICAgICB0ZXN0ZWQgYW5kIHNvIG9uLgoqICAgICAgICBJZiB0aGUgdGVzdGVkIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gYSB6ZXJvLCB0aGUgZnJhbWUgd2lsbCAKKiAgICAgICAgYmUgdHJlYXRlZCBhcyBhIG5vcm1hbCAobm9uLU1HTVQpIGZyYW1lLgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgZW5CaXRzIC0gYml0IHZlY3RvciBvZiBlbmFibGVkIFJlc2VydmVkIE11bHRpY2FzdC4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFJzdmQyQ3B1RW5hYmxlcwooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfVTE2ICAgICAgKmVuQml0cwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UnN2ZDJDcHUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBXaGVuIHRoZSBSc3ZkMkNwdSBpcyBzZXQgdG8gYSBvbmUoR1RfVFJVRSksIGZyYW1lcyB3aXRoIGEgRGVzdGluYXRpb24gCiogICAgICAgIEFkZHJlc3MgaW4gdGhlIHJhbmdlIDAxOjgwOkMyOjAwOjAwOjB4LCByZWdhcmRsZXNzIG9mIHRoZWlyIFZMQU4gCiogICAgICAgIG1lbWJlcnNoaXAsIHdpbGwgYmUgY29uc2lkZXJlZCBNR01UIGZyYW1lcyBhbmQgc2VudCB0byB0aGUgcG9ydCdzIENQVSAKKiAgICAgICAgUG9ydCBhcyBsb25nIGFzIHRoZSBhc3NvY2lhdGVkIFJzdmQyQ3B1RW5hYmxlIGJpdCAoZ3N5c1NldFJzdmQyQ3B1RW5hYmxlIAoqICAgICAgICBmdW5jdGlvbikgZm9yIHRoZSBmcmFtZXMncyBEQSBpcyBhbHNvIHNldCB0byBhIG9uZS4KKgoqIElOUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFIGlmIFJzdmQyQ3B1IGlzIHNldC4gR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRSc3ZkMkNwdQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0JPT0wgICAgICAgIGVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRSc3ZkMkNwdQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFdoZW4gdGhlIFJzdmQyQ3B1IGlzIHNldCB0byBhIG9uZShHVF9UUlVFKSwgZnJhbWVzIHdpdGggYSBEZXN0aW5hdGlvbiAKKiAgICAgICAgQWRkcmVzcyBpbiB0aGUgcmFuZ2UgMDE6ODA6QzI6MDA6MDA6MHgsIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgVkxBTiAKKiAgICAgICAgbWVtYmVyc2hpcCwgd2lsbCBiZSBjb25zaWRlcmVkIE1HTVQgZnJhbWVzIGFuZCBzZW50IHRvIHRoZSBwb3J0J3MgQ1BVIAoqICAgICAgICBQb3J0IGFzIGxvbmcgYXMgdGhlIGFzc29jaWF0ZWQgUnN2ZDJDcHVFbmFibGUgYml0IChnc3lzU2V0UnN2ZDJDcHVFbmFibGUgCiogICAgICAgIGZ1bmN0aW9uKSBmb3IgdGhlIGZyYW1lcydzIERBIGlzIGFsc28gc2V0IHRvIGEgb25lLgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFIGlmIFJzdmQyQ3B1IGlzIHNldC4gR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFJzdmQyQ3B1CigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIE9VVCBHVF9CT09MICAgICAgKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRNR01UUHJpCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhlc2UgYml0cyBhcmUgdXNlZCBhcyB0aGUgUFJJWzI6MF0gYml0cyBvbiBSc3ZkMkNQVSBNR01UIGZyYW1lcy4KKgoqIElOUFVUUzoKKiAgICAgICAgcHJpIC0gUFJJWzI6MF0gYml0cyAoc2hvdWxkIGJlIGxlc3MgdGhhbiA4KQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBJZiBwcmkgaXMgbm90IGxlc3MgdGhhbiA4LgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldE1HTVRQcmkKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9VMTYgICAgICAgIHByaQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0TUdNVFByaQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoZXNlIGJpdHMgYXJlIHVzZWQgYXMgdGhlIFBSSVsyOjBdIGJpdHMgb24gUnN2ZDJDUFUgTUdNVCBmcmFtZXMuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBwcmkgLSBQUklbMjowXSBiaXRzIChzaG91bGQgYmUgbGVzcyB0aGFuIDgpCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRNR01UUHJpCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIE9VVCBHVF9VMTYgICAgICAqcHJpCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRVc2VEb3VibGVUYWdEYXRhCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyBiaXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgRG91YmxlIFRhZyBkYXRhIHRoYXQgaXMgcmVtb3ZlZCBmcm9tIGEgCiogICAgICAgIERvdWJsZSBUYWcgZnJhbWUgaXMgdXNlZCBvciBpZ25vcmVkIHdoZW4gbWFraW5nIHN3aXRjaGluZyBkZWNpc2lvbnMgb24gCiogICAgICAgIHRoZSBmcmFtZS4KKgoqIElOUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFIHRvIHVzZSByZW1vdmVkIHRhZyBkYXRhLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0VXNlRG91YmxlVGFnRGF0YQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0JPT0wgICAgICAgIGVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRVc2VEb3VibGVUYWdEYXRhCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyBiaXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgRG91YmxlIFRhZyBkYXRhIHRoYXQgaXMgcmVtb3ZlZCBmcm9tIGEgCiogICAgICAgIERvdWJsZSBUYWcgZnJhbWUgaXMgdXNlZCBvciBpZ25vcmVkIHdoZW4gbWFraW5nIHN3aXRjaGluZyBkZWNpc2lvbnMgb24gCiogICAgICAgIHRoZSBmcmFtZS4KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGVuIC0gR1RfVFJVRSBpZiByZW1vdmVkIHRhZyBkYXRhIGlzIHVzZWQsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFVzZURvdWJsZVRhZ0RhdGEKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX0JPT0wgICAgICAqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFByZXZlbnRMb29wcwoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFdoZW4gYSBNYXJ2ZWxsIFRhZyBwb3J0IHJlY2VpdmVzIGEgRm9yd2FyZCBNYXJ2ZWxsIFRhZyB3aG9zZSBTcmNfRGV2IAoqICAgICAgICBmaWVsZCBlcXVhbHMgdGhpcyBkZXZpY2UncyBEZXZpY2UgTnVtYmVyLCB0aGUgZm9sbG93aW5nIGFjdGlvbiB3aWxsIGJlIAoqICAgICAgICB0YWtlbiBkZXBlbmRpbmcgdXBvbiB0aGUgdmFsdWUgb2YgdGhpcyBiaXQuCiogICAgICAgIEdUX1RSVUUgKDEpIC0gVGhlIGZyYW1lIHdpbGwgYmUgZGlzY2FyZGVkLgoqICAgICAgICBHVF9GQUxTRSgwKSAtIFRoZSBmcmFtZSB3aWxsIGJlIHByZXZlbnRlZCBmcm9tIGdvaW5nIG91dCBpdHMgb3JpZ2luYWwgCiogICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgcG9ydCBhcyBkZWZpbmVkIGJ5IHRoZSBmcmFtZSdzIFNyY19Qb3J0IGZpZWxkLgoqCiogSU5QVVRTOgoqICAgICAgICBlbiAtIEdUX1RSVUUgdG8gZGlzY2FyZCB0aGUgZnJhbWUgYXMgZGVzY3JpYmVkIGFib3ZlLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0UHJldmVudExvb3BzCigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfQk9PTCAgICAgICAgZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFByZXZlbnRMb29wcwoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFdoZW4gYSBNYXJ2ZWxsIFRhZyBwb3J0IHJlY2VpdmVzIGEgRm9yd2FyZCBNYXJ2ZWxsIFRhZyB3aG9zZSBTcmNfRGV2IAoqICAgICAgICBmaWVsZCBlcXVhbHMgdGhpcyBkZXZpY2UncyBEZXZpY2UgTnVtYmVyLCB0aGUgZm9sbG93aW5nIGFjdGlvbiB3aWxsIGJlIAoqICAgICAgICB0YWtlbiBkZXBlbmRpbmcgdXBvbiB0aGUgdmFsdWUgb2YgdGhpcyBiaXQuCiogICAgICAgIEdUX1RSVUUgKDEpIC0gVGhlIGZyYW1lIHdpbGwgYmUgZGlzY2FyZGVkLgoqICAgICAgICBHVF9GQUxTRSgwKSAtIFRoZSBmcmFtZSB3aWxsIGJlIHByZXZlbnRlZCBmcm9tIGdvaW5nIG91dCBpdHMgb3JpZ2luYWwgCiogICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgcG9ydCBhcyBkZWZpbmVkIGJ5IHRoZSBmcmFtZSdzIFNyY19Qb3J0IGZpZWxkLgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFIHRvIGRpc2NhcmQgdGhlIGZyYW1lIGFzIGRlc2NyaWJlZCBhYm92ZSwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UHJldmVudExvb3BzCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIE9VVCBHVF9CT09MICAgICAgKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRGbG93Q29udHJvbE1lc3NhZ2UKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBXaGVuIHRoaXMgYml0IGlzIHNldCB0byBvbmUsIE1hcnZlbGwgVGFnIEZsb3cgQ29udHJvbCBtZXNzYWdlcyB3aWxsIGJlIAoqICAgICAgICBnZW5lcmF0ZWQgd2hlbiBhbiBvdXRwdXQgcXVldWUgYmVjb21lcyBjb25nZXN0ZWQgYW5kIHJlY2VpdmVkIE1hcnZlbGwgVGFnIAoqICAgICAgICBGbG93IENvbnRyb2wgbWVzc2FnZXMgd2lsbCBwYXVzZSBNQUNzIGluc2lkZSB0aGlzIGRldmljZS4gV2hlbiB0aGlzIGJpdCAKKiAgICAgICAgaXMgY2xlYXJlZCB0byBhIHplcm8sIE1hcnZlbGwgVGFnIEZsb3cgQ29udHJvbCBtZXNzYWdlcyB3aWxsIG5vdCBiZSAKKiAgICAgICAgZ2VuZXJhdGVkIGFuZCBhbnkgcmVjZWl2ZWQgd2lsbCBiZSBpZ25vcmVkIGF0IHRoZSB0YXJnZXQgTUFDLgoqCiogSU5QVVRTOgoqICAgICAgICBlbiAtIEdUX1RSVUUgdG8gdXNlIE1hcnZlbGwgVGFnIEZsb3cgQ29udHJvbCBtZXNzYWdlLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Rmxvd0NvbnRyb2xNZXNzYWdlCigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfQk9PTCAgICAgICAgZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEZsb3dDb250cm9sTWVzc2FnZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIG9uZSwgTWFydmVsbCBUYWcgRmxvdyBDb250cm9sIG1lc3NhZ2VzIHdpbGwgYmUgCiogICAgICAgIGdlbmVyYXRlZCB3aGVuIGFuIG91dHB1dCBxdWV1ZSBiZWNvbWVzIGNvbmdlc3RlZCBhbmQgcmVjZWl2ZWQgTWFydmVsbCBUYWcgCiogICAgICAgIEZsb3cgQ29udHJvbCBtZXNzYWdlcyB3aWxsIHBhdXNlIE1BQ3MgaW5zaWRlIHRoaXMgZGV2aWNlLiBXaGVuIHRoaXMgYml0IAoqICAgICAgICBpcyBjbGVhcmVkIHRvIGEgemVybywgTWFydmVsbCBUYWcgRmxvdyBDb250cm9sIG1lc3NhZ2VzIHdpbGwgbm90IGJlIAoqICAgICAgICBnZW5lcmF0ZWQgYW5kIGFueSByZWNlaXZlZCB3aWxsIGJlIGlnbm9yZWQgYXQgdGhlIHRhcmdldCBNQUMuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBlbiAtIEdUX1RSVUUgdG8gdXNlIE1hcnZlbGwgVGFnIEZsb3cgQ29udHJvbCBtZXNzYWdlLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRGbG93Q29udHJvbE1lc3NhZ2UKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX0JPT0wgICAgICAqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEZvcmNlRmxvd0NvbnRyb2xQcmkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSB0aGUgUFJJWzI6MF0gYml0cyBvZiBnZW5lcmF0ZWQgTWFydmVsbCBUYWcgCiogICAgICAgIEZsb3cgQ29udHJvbCBmcmFtZXMgd2lsbCBiZSBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZSBGQyBQcmkgYml0cyAoc2V0IGJ5IAoqICAgICAgICBnc3lzU2V0RkNQcmkgZnVuY3Rpb24gY2FsbCkuIFdoZW4gdGhpcyBiaXQgaXMgY2xlYXJlZCB0byBhIHplcm8sIGdlbmVyYXRlZCAKKiAgICAgICAgTWFydmVsbCBUYWcgRmxvdyBDb250cm9sIGZyYW1lcyB3aWxsIHJldGFpbiB0aGUgUFJJWzI6MF0gYml0cyBmcm9tIHRoZSAKKiAgICAgICAgZnJhbWVzIHRoYXQgY2F1c2VkIHRoZSBjb25nZXN0aW9uLiBUaGlzIGJpdCB3aWxsIGhhdmUgbm8gZWZmZWN0IGlmIHRoZSAKKiAgICAgICAgRmxvd0NvbnRyb2xNZXNzYWdlIGJpdChnc3lzU2V0Rmxvd0NvbnRyb2xNZXNzYWdlIGZ1bmN0aW9uIGNhbGwpIGlzIAoqICAgICAgICBjbGVhcmVkIHRvIGEgemVyby4KKgoqIElOUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFIHRvIHVzZSBkZWZpbmVkIFBSSSBiaXRzLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Rm9yY2VGbG93Q29udHJvbFByaQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0JPT0wgICAgICAgIGVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRGb3JjZUZsb3dDb250cm9sUHJpCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gYSBvbmUgdGhlIFBSSVsyOjBdIGJpdHMgb2YgZ2VuZXJhdGVkIE1hcnZlbGwgVGFnIAoqICAgICAgICBGbG93IENvbnRyb2wgZnJhbWVzIHdpbGwgYmUgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgRkMgUHJpIGJpdHMgKHNldCBieSAKKiAgICAgICAgZ3N5c1NldEZDUHJpIGZ1bmN0aW9uIGNhbGwpLiBXaGVuIHRoaXMgYml0IGlzIGNsZWFyZWQgdG8gYSB6ZXJvLCBnZW5lcmF0ZWQgCiogICAgICAgIE1hcnZlbGwgVGFnIEZsb3cgQ29udHJvbCBmcmFtZXMgd2lsbCByZXRhaW4gdGhlIFBSSVsyOjBdIGJpdHMgZnJvbSB0aGUgCiogICAgICAgIGZyYW1lcyB0aGF0IGNhdXNlZCB0aGUgY29uZ2VzdGlvbi4gVGhpcyBiaXQgd2lsbCBoYXZlIG5vIGVmZmVjdCBpZiB0aGUgCiogICAgICAgIEZsb3dDb250cm9sTWVzc2FnZSBiaXQoZ3N5c1NldEZsb3dDb250cm9sTWVzc2FnZSBmdW5jdGlvbiBjYWxsKSBpcyAKKiAgICAgICAgY2xlYXJlZCB0byBhIHplcm8uCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBlbiAtIEdUX1RSVUUgdG8gdXNlIGRlZmluZWQgUFJJIGJpdHMsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEZvcmNlRmxvd0NvbnRyb2xQcmkKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX0JPT0wgICAgICAqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEZDUHJpCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhlc2UgYml0cyBhcmUgdXNlZCBhcyB0aGUgUFJJWzI6MF0gYml0cyBvbiBnZW5lcmF0ZWQgTWFydmVsbCBUYWcgRmxvdyAKKiAgICAgICAgQ29udHJvbCBmcmFtZXMgaWYgdGhlIEZvcmNlRmxvd0NvbnRyb2xQcmkgYml0KGdzeXNTZXRGb3JjZUZsb3dDb250cm9sUHJpKQoqICAgICAgICBpcyBzZXQgdG8gYSBvbmUuCioKKiBJTlBVVFM6CiogICAgICAgIHByaSAtIFBSSVsyOjBdIGJpdHMgKHNob3VsZCBiZSBsZXNzIHRoYW4gOCkKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gSWYgcHJpIGlzIG5vdCBsZXNzIHRoYW4gOC4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRGQ1ByaQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX1UxNiAgICAgICAgcHJpCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRGQ1ByaQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoZXNlIGJpdHMgYXJlIHVzZWQgYXMgdGhlIFBSSVsyOjBdIGJpdHMgb24gZ2VuZXJhdGVkIE1hcnZlbGwgVGFnIEZsb3cgCiogICAgICAgIENvbnRyb2wgZnJhbWVzIGlmIHRoZSBGb3JjZUZsb3dDb250cm9sUHJpIGJpdChnc3lzU2V0Rm9yY2VGbG93Q29udHJvbFByaSkKKiAgICAgICAgaXMgc2V0IHRvIGEgb25lLgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgcHJpIC0gUFJJWzI6MF0gYml0cyAoc2hvdWxkIGJlIGxlc3MgdGhhbiA4KQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0RkNQcmkKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX1UxNiAgICAgICpwcmkKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEZsb3dDdHJsRGVsYXkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIGZ1bmN0aW9uIHNldHMgRmxvdyBjb250cm9sIGRlbGF5IHRpbWUgZm9yIDEwTWJwcywgMTAwTWJwcywgYW5kIAoqICAgICAgICAxMDAwTWJwcy4gCioKKiBJTlBVVFM6CiogICAgICAgIHNwIC0gUE9SVF9TUEVFRF8xMF9NQlBTLCBQT1JUX1NQRUVEXzEwMF9NQlBTLCBvciBQT1JUX1NQRUVEXzEwMDBfTUJQUwoqICAgICAgICBkZWxheVRpbWUgLSBhY3R1YWwgZGVsYXkgdGltZSB3aWxsIGJlICh0aGlzIHZhbHVlIHggMi4wNDh1UykuCiogICAgICAgICAgICAgICAgICAgIHRoZSB2YWx1ZSBjYW5ub3QgZXhjZWVkIDB4MUZGRiAob3IgODE5MSBpbiBkZWNpbWFsKS4KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgc3AgaXMgbm90IHZhbGlkIG9yIGRlbGF5VGltZSBpcyA+IDB4MUZGRi4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRGbG93Q3RybERlbGF5CigKICAgIElOIEdUX1FEX0RFViAgICAgICAgICAgICpkZXYsCiAgICBJTiBHVF9QT1JUX1NQRUVEX01PREUgICAgc3AsCiAgICBJTiBHVF9VMzIgICAgICAgICAgICAgICAgZGVsYXlUaW1lCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRGbG93Q3RybERlbGF5CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgRmxvdyBjb250cm9sIGRlbGF5IHRpbWUgZm9yIDEwTWJwcywgMTAwTWJwcywgYW5kCiogICAgICAgIDEwMDBNYnBzLiAKKgoqIElOUFVUUzoKKiAgICAgICAgc3AgLSBQT1JUX1NQRUVEXzEwX01CUFMsIFBPUlRfU1BFRURfMTAwX01CUFMsIG9yIFBPUlRfU1BFRURfMTAwMF9NQlBTCioKKiBPVVRQVVRTOgoqICAgICAgICBkZWxheVRpbWUgLSBhY3R1YWwgZGVsYXkgdGltZSB3aWxsIGJlICh0aGlzIHZhbHVlIHggMi4wNDh1UykuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgc3AgaXMgbm90IHZhbGlkIG9yIGRlbGF5VGltZSBpcyA+IDB4MUZGRi4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRGbG93Q3RybERlbGF5CigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9QT1JUX1NQRUVEX01PREUgICAgc3AsCiAgICBPVVQgR1RfVTMyICAgICAgICAqZGVsYXlUaW1lCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXREZXZSb3V0aW5nVGFibGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIGZ1bmN0aW9uIHNldHMgRGV2aWNlIHRvIFBvcnQgbWFwcGluZyAod2hpY2ggZGV2aWNlIGlzIGNvbm5lY3RlZCB0byAKKiAgICAgICAgd2hpY2ggcG9ydCBvZiB0aGlzIGRldmljZSkuIAoqCiogSU5QVVRTOgoqICAgICAgICBkZXZOdW0gLSB0YXJnZXQgZGV2aWNlIG51bWJlci4KKiAgICAgICAgcG9ydE51bSAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBkZXZOdW0gPj0gMzIgb3IgcG9ydCA+PSB0b3RhbCBudW1iZXIgb2YgcG9ydHMuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0RGV2Um91dGluZ1RhYmxlCigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfVTMyICAgICAgICAgIGRldk51bSwKICAgIElOIEdUX0xQT1JUICAgICBwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXREZXZSb3V0aW5nVGFibGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIGZ1bmN0aW9uIGdldHMgRGV2aWNlIHRvIFBvcnQgbWFwcGluZyAod2hpY2ggZGV2aWNlIGlzIGNvbm5lY3RlZCB0byAKKiAgICAgICAgd2hpY2ggcG9ydCBvZiB0aGlzIGRldmljZSkuIAoqCiogSU5QVVRTOgoqICAgICAgICBkZXZOdW0gLSB0YXJnZXQgZGV2aWNlIG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIHBvcnROdW0gLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBkZXZOdW0gPj0gMzIKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXREZXZSb3V0aW5nVGFibGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX1UzMiAgICAgICAgIGRldk51bSwKICAgIE9VVCBHVF9MUE9SVCAgICAgKnBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFRydW5rTWFza1RhYmxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyBmdW5jdGlvbiBzZXRzIFRydW5rIG1hc2sgdmVjdG9yIHRhYmxlIGZvciBsb2FkIGJhbGFuY2luZy4KKiAgICAgICAgVGhpcyB2ZWN0b3Igd2lsbCBiZSBBTkQnZWQgd2l0aCB3aGVyZSB0aGUgZnJhbWUgd2FzIG9yaWdpbmFsbHkgZWdyZXNzZWQgdG8uCiogICAgICAgIFRvIGluc3VyZSBhbGwgdHJ1bmtzIGFyZSBsb2FkIGJhbGFuY2VkIGNvcnJlY3RseSwgdGhlIGRhdGEgaW4gdGhpcyB0YWJsZQoqICAgICAgICBuZWVkcyB0byBiZSBjb3JyZWN0bHkgY29uZmlndXJlZC4KKgoqIElOUFVUUzoKKiAgICAgICAgdHJ1bmtOdW0gLSBvbmUgb2YgdGhlIGVpZ2h0IFRydW5rIG1hc2sgdmVjdG9ycy4KKiAgICAgICAgdHJ1bmtNYXNrIC0gVHJ1bmsgTWFzayBiaXRzLiBCaXQgMCBjb250cm9scyB0cnVuayBtYXNraW5nIGZvciBwb3J0IDAsCiogICAgICAgICAgICAgICAgICAgIGJpdCAxIGZvciBwb3J0IDEgLCBldGMuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIHRydW5rTnVtID4gMHg3IG9yIHRydW5NYXNrID4gMHg3RkYgKG9yIHBvcnQgdmVjdG9yKS4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRUcnVua01hc2tUYWJsZQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX1UzMiAgICAgICAgICB0cnVua051bSwKICAgIElOIEdUX1UzMiAgICAgICAgdHJ1bmtNYXNrCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRUcnVua01hc2tUYWJsZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgZnVuY3Rpb24gc2V0cyBUcnVuayBtYXNrIHZlY3RvciB0YWJsZSBmb3IgbG9hZCBiYWxhbmNpbmcuCiogICAgICAgIFRoaXMgdmVjdG9yIHdpbGwgYmUgQU5EJ2VkIHdpdGggd2hlcmUgdGhlIGZyYW1lIHdhcyBvcmlnaW5hbGx5IGVncmVzc2VkIHRvLgoqICAgICAgICBUbyBpbnN1cmUgYWxsIHRydW5rcyBhcmUgbG9hZCBiYWxhbmNlZCBjb3JyZWN0bHksIHRoZSBkYXRhIGluIHRoaXMgdGFibGUKKiAgICAgICAgbmVlZHMgdG8gYmUgY29ycmVjdGx5IGNvbmZpZ3VyZWQuCioKKiBJTlBVVFM6CiogICAgICAgIHRydW5rTnVtIC0gb25lIG9mIHRoZSBlaWdodCBUcnVuayBtYXNrIHZlY3RvcnMuCioKKiBPVVRQVVRTOgoqICAgICAgICB0cnVua01hc2sgLSBUcnVuayBNYXNrIGJpdHMuIEJpdCAwIGNvbnRyb2xzIHRydW5rIG1hc2tpbmcgZm9yIHBvcnQgMCwKKiAgICAgICAgICAgICAgICAgICAgYml0IDEgZm9yIHBvcnQgMSAsIGV0Yy4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiB0cnVua051bSA+IDB4Ny4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRUcnVua01hc2tUYWJsZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfVTMyICAgICAgICAgdHJ1bmtOdW0sCiAgICBPVVQgR1RfVTMyICAgICAgICAqdHJ1bmtNYXNrCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRIYXNoVHJ1bmsKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBIYXNoIERBICYgU0EgZm9yIFRydW5rTWFzayBzZWxlY3Rpb24uIFRydW5rIGxvYWQgYmFsYW5jaW5nIGlzIGFjY29tcGxpc2hlZCAKKiAgICAgICAgYnkgdXNpbmcgdGhlIGZyYW1lJ3MgREEgYW5kIFNBIGZpZWxkcyB0byBhY2Nlc3Mgb25lIG9mIGVpZ2h0IFRydW5rIE1hc2tzLiAKKiAgICAgICAgV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gYSBvbmUsIHRoZSBoYXNoZWQgY29tcHV0ZWQgZm9yIGFkZHJlc3MgdGFibGUgCiogICAgICAgIGxvb2t1cHMgaXMgdXNlZCBmb3IgdGhlIFRydW5rTWFzayBzZWxlY3Rpb24uIFdoZW4gdGhpcyBiaXQgaXMgY2xlYXJlZCB0byAKKiAgICAgICAgYSB6ZXJvIHRoZSBsb3dlciAzIGJpdHMgb2YgdGhlIGZyYW1lJ3MgREEgYW5kIFNBIGFyZSBYT1InZWQgdG9nZXRoZXIgdG8gCiogICAgICAgIHNlbGVjdCB0aGUgVHJ1bmtNYXNrIHRvIHVzZS4KKgoqIElOUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFIHRvIHVzZSBsb29rdXAgdGFibGUsIEdUX0ZBTFNFIHRvIHVzZSBYT1IuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0SGFzaFRydW5rCigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfQk9PTCAgICAgICAgZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEhhc2hUcnVuawoqCiogREVTQ1JJUFRJT046CiogICAgICAgIEhhc2ggREEgJiBTQSBmb3IgVHJ1bmtNYXNrIHNlbGVjdGlvbi4gVHJ1bmsgbG9hZCBiYWxhbmNpbmcgaXMgYWNjb21wbGlzaGVkIAoqICAgICAgICBieSB1c2luZyB0aGUgZnJhbWUncyBEQSBhbmQgU0EgZmllbGRzIHRvIGFjY2VzcyBvbmUgb2YgZWlnaHQgVHJ1bmsgTWFza3MuIAoqICAgICAgICBXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSwgdGhlIGhhc2hlZCBjb21wdXRlZCBmb3IgYWRkcmVzcyB0YWJsZSAKKiAgICAgICAgbG9va3VwcyBpcyB1c2VkIGZvciB0aGUgVHJ1bmtNYXNrIHNlbGVjdGlvbi4gV2hlbiB0aGlzIGJpdCBpcyBjbGVhcmVkIHRvIAoqICAgICAgICBhIHplcm8gdGhlIGxvd2VyIDMgYml0cyBvZiB0aGUgZnJhbWUncyBEQSBhbmQgU0EgYXJlIFhPUidlZCB0b2dldGhlciB0byAKKiAgICAgICAgc2VsZWN0IHRoZSBUcnVua01hc2sgdG8gdXNlLgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFIHRvIHVzZSBsb29rdXAgdGFibGUsIEdUX0ZBTFNFIHRvIHVzZSBYT1IuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRIYXNoVHJ1bmsKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX0JPT0wgICAgICAqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFRydW5rUm91dGluZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgZnVuY3Rpb24gc2V0cyByb3V0aW5nIGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gVHJ1bmsgSUQuCioKKiBJTlBVVFM6CiogICAgICAgIHRydW5rSWQgLSBUcnVuayBJRC4KKiAgICAgICAgdHJ1bmtSb3V0ZSAtIFRydW5rIHJvdXRlIGJpdHMuIEJpdCAwIGNvbnRyb2xzIHRydW5rIHJvdXRpbmcgZm9yIHBvcnQgMCwKKiAgICAgICAgICAgICAgICAgICAgYml0IDEgZm9yIHBvcnQgMSAsIGV0Yy4KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgdHJ1bmtJZCA+IDB4RiBvciB0cnVua1JvdXRlID4gMHg3RkYob3IgcG9ydCB2ZWN0b3IpLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFRydW5rUm91dGluZwooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX1UzMiAgICAgICAgICB0cnVua0lkLAogICAgSU4gR1RfVTMyICAgICAgICB0cnVua1JvdXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRUcnVua1JvdXRpbmcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyByb3V0aW5nIGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gVHJ1bmsgSUQuCioKKiBJTlBVVFM6CiogICAgICAgIHRydW5rSWQgLSBUcnVuayBJRC4KKgoqIE9VVFBVVFM6CiogICAgICAgIHRydW5rUm91dGUgLSBUcnVuayByb3V0ZSBiaXRzLiBCaXQgMCBjb250cm9scyB0cnVuayByb3V0aW5nIGZvciBwb3J0IDAsCiogICAgICAgICAgICAgICAgICAgIGJpdCAxIGZvciBwb3J0IDEgLCBldGMuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgdHJ1bmtJZCA+IDB4Ri4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRUcnVua1JvdXRpbmcKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX1UzMiAgICAgICAgIHRydW5rSWQsCiAgICBPVVQgR1RfVTMyICAgICAgICAqdHJ1bmtSb3V0ZQopOwoKCgovKiBQcm90b3R5cGUgYWRkZWQgZm9yIDg4RTYwOTUgUmV2IDEgb3IgUmV2IDIgKi8KCi8qIGd0UG9ydEN0cmwuYyAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXREaXNjYXJkQkNhc3RNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgRGlzY2FyZCBCcm9hZGNhc3QgTW9kZS4gSWYgdGhlIG1vZGUgaXMgZW5hYmxlZCwKKiAgICAgICAgYWxsIHRoZSBicm9hZGNhc3QgZnJhbWVzIHRvIHRoZSBnaXZlbiBwb3J0IHdpbGwgYmUgZGlzY2FyZGVkLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqICAgICAgICBlbiAtIEdUX1RSVUUsIGlmIGVuYWJsZWQsCiogICAgICAgICAgICAgR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXREaXNjYXJkQkNhc3RNb2RlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXREaXNjYXJkQkNhc3RNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgRGlzY2FyZCBCcm9hZGNhc3QgbW9kZS4KKiAgICAgICAgSWYgdGhlIG1vZGUgaXMgZW5hYmxlZCwgYWxsIHRoZSBicm9hZGNhc3QgZnJhbWVzIHRvIHRoZSBnaXZlbiBwb3J0IHdpbGwgCiogICAgICAgIGJlIGRpc2NhcmRlZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgICBlbiAtIEdUX1RSVUUsIHRvIGVuYWJsZSB0aGUgbW9kZSwKKiAgICAgICAgICAgICBHVF9GQUxTRSwgb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldERpc2NhcmRCQ2FzdE1vZGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gIEdUX0JPT0wgICAgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0RkNPblJhdGVMaW1pdE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXR1cm5zIG1vZGUgdGhhdCB0ZWxscyBpZiBpbmdyZXNzIHJhdGUgbGltaXRpbmcgdXNlcyBGbG93IAoqICAgICAgICBDb250cm9sLiBXaGVuIHRoaXMgbW9kZSBpcyBlbmFibGVkIGFuZCB0aGUgcG9ydCByZWNlaXZlcyBmcmFtZXMgb3ZlciB0aGUgCiogICAgICAgIGxpbWl0LCBJbmdyZXNzIFJhdGUgTGltaXRpbmcgd2lsbCBiZSBwZXJmb3JtZWQgYnkgc3RhbGxpbmcgdGhlIAoqICAgICAgICBsaW5rIHBhcnRuZXIgdXNpbmcgZmxvdyBjb250cm9sLCBpbnN0ZWFkIG9mIGRpc2NhcmRpbmcgZnJhbWVzLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqICAgICAgICBlbiAtIEdUX1RSVUUsIGlmIHRoZSBtb2RlIGlzIGVuYWJsZWQsCiogICAgICAgICAgICAgR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRGQ09uUmF0ZUxpbWl0TW9kZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0RkNPblJhdGVMaW1pdE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBtb2RlIHRoYXQgdGVsbHMgaWYgaW5ncmVzcyByYXRlIGxpbWl0aW5nIHVzZXMgRmxvdyAKKiAgICAgICAgQ29udHJvbC4gV2hlbiB0aGlzIG1vZGUgaXMgZW5hYmxlZCBhbmQgdGhlIHBvcnQgcmVjZWl2ZXMgZnJhbWVzIG92ZXIgdGhlIAoqICAgICAgICBsaW1pdCwgSW5ncmVzcyBSYXRlIExpbWl0aW5nIHdpbGwgYmUgcGVyZm9ybWVkIGJ5IHN0YWxsaW5nIHRoZSAKKiAgICAgICAgbGluayBwYXJ0bmVyIHVzaW5nIGZsb3cgY29udHJvbCwgaW5zdGVhZCBvZiBkaXNjYXJkaW5nIGZyYW1lcy4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgICBlbiAtIEdUX1RSVUUsIHRvIGVuYWJsZSB0aGUgbW9kZSwKKiAgICAgICAgICAgICBHVF9GQUxTRSwgb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldEZDT25SYXRlTGltaXRNb2RlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOICBHVF9CT09MICAgICAgZW4KKTsKCgovKiBndFBvcnRSYXRlQ3RybC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY1NldEJ1cnN0UmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIHBvcnQncyBpbmdyZXNzIGRhdGEgbGltaXQgYmFzZWQgb24gYnVyc3Qgc2l6ZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBic2l6ZSAgICAtIGJ1cnN0IHNpemUuCiogICAgICAgcmF0ZSAgICAtIGluZ3Jlc3MgZGF0YSByYXRlIGxpbWl0LiBUaGVzZSBmcmFtZXMgd2lsbCBiZSBkaXNjYXJkZWQgYWZ0ZXIgCiogICAgICAgICAgICAgICAgdGhlIGluZ3Jlc3MgcmF0ZSBzZWxlY3RlZCBpcyByZWFjaGVkIG9yIGV4Y2VlZGVkLiAKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMgCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gcmF0ZSBmb3IgQnVyc3QgU2l6ZSAyNEsgYnl0ZSBpcyAxMjhLYnBzCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gcmF0ZSBmb3IgQnVyc3QgU2l6ZSA0OEsgYnl0ZSBpcyAyNTZLYnBzCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gcmF0ZSBmb3IgQnVyc3QgU2l6ZSA5NksgYnl0ZSBpcyA1MTJLYnBzCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgICAgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKiAgICAgICAgSWYgdGhlIGRldmljZSBzdXBwb3J0cyBib3RoIHByaW9yaXR5IGJhc2VkIFJhdGUgTGltaXRpbmcgYW5kIGJ1cnN0IHNpemUKKiAgICAgICAgYmFzZWQgUmF0ZSBsaW1pdGluZywgdXNlciBoYXMgdG8gbWFudWFsbHkgY2hhbmdlIHRoZSBtb2RlIHRvIGJ1cnN0IHNpemUKKiAgICAgICAgYmFzZWQgUmF0ZSBsaW1pdGluZyBieSBjYWxsaW5nIGdzeXNTZXRSYXRlTGltaXRNb2RlLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNTZXRCdXJzdFJhdGUKKAogICAgSU4gR1RfUURfREVWICAgICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIElOIEdUX0JVUlNUX1NJWkUgICBic2l6ZSwKICAgIElOIEdUX0JVUlNUX1JBVEUgICByYXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY0dldEJ1cnN0UmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJldHJpZXZlcyB0aGUgcG9ydCdzIGluZ3Jlc3MgZGF0YSBsaW1pdCBiYXNlZCBvbiBidXJzdCBzaXplLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBic2l6ZSAgICAtIGJ1cnN0IHNpemUuCiogICAgICAgcmF0ZSAgICAtIGluZ3Jlc3MgZGF0YSByYXRlIGxpbWl0LiBUaGVzZSBmcmFtZXMgd2lsbCBiZSBkaXNjYXJkZWQgYWZ0ZXIgCiogICAgICAgICAgICAgICAgdGhlIGluZ3Jlc3MgcmF0ZSBzZWxlY3RlZCBpcyByZWFjaGVkIG9yIGV4Y2VlZGVkLiAKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNHZXRCdXJzdFJhdGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgT1VUIEdUX0JVUlNUX1NJWkUgICAqYnNpemUsCiAgICBPVVQgR1RfQlVSU1RfUkFURSAgICpyYXRlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNTZXRUQ1BCdXJzdFJhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBwb3J0J3MgVENQL0lQIGluZ3Jlc3MgZGF0YSBsaW1pdCBiYXNlZCBvbiBidXJzdCBzaXplLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIHJhdGUgICAgLSBpbmdyZXNzIGRhdGEgcmF0ZSBsaW1pdCBmb3IgVENQL0lQIHBhY2tldHMuIFRoZXNlIGZyYW1lcyB3aWxsIAoqICAgICAgICAgICAgICAgIGJlIGRpc2NhcmRlZCBhZnRlciB0aGUgaW5ncmVzcyByYXRlIHNlbGVjdGVkIGlzIHJlYWNoZWQgb3IgZXhjZWVkZWQuIAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycyAKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWQgcmF0ZSBpcyBHVF9CVVJTVF9OT19MSU1JVCwgb3IgYmV0d2VlbgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2NEticHMgYW5kIDE1MDBLYnBzLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEICAgIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCiogICAgICAgIElmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgYm90aCBwcmlvcml0eSBiYXNlZCBSYXRlIExpbWl0aW5nIGFuZCBidXJzdCBzaXplCiogICAgICAgIGJhc2VkIFJhdGUgbGltaXRpbmcsIHVzZXIgaGFzIHRvIG1hbnVhbGx5IGNoYW5nZSB0aGUgbW9kZSB0byBidXJzdCBzaXplCiogICAgICAgIGJhc2VkIFJhdGUgbGltaXRpbmcgYnkgY2FsbGluZyBnc3lzU2V0UmF0ZUxpbWl0TW9kZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjU2V0VENQQnVyc3RSYXRlCigKICAgIElOIEdUX1FEX0RFViAgICAgICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgICAgIHBvcnQsCiAgICBJTiBHVF9CVVJTVF9SQVRFICAgcmF0ZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjR2V0VENQQnVyc3RSYXRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgcG9ydCdzIFRDUC9JUCBpbmdyZXNzIGRhdGEgbGltaXQgYmFzZWQgb24gYnVyc3Qgc2l6ZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgcmF0ZSAgICAtIGluZ3Jlc3MgZGF0YSByYXRlIGxpbWl0IGZvciBUQ1AvSVAgcGFja2V0cy4gVGhlc2UgZnJhbWVzIHdpbGwgCiogICAgICAgICAgICAgICAgYmUgZGlzY2FyZGVkIGFmdGVyIHRoZSBpbmdyZXNzIHJhdGUgc2VsZWN0ZWQgaXMgcmVhY2hlZCBvciBleGNlZWRlZC4gCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1ZBTFVFICAgICAgICAtIHJlZ2lzdGVyIHZhbHVlIGlzIG5vdCBrbm93bgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEICAgIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCiogICAgICAgIElmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgYm90aCBwcmlvcml0eSBiYXNlZCBSYXRlIExpbWl0aW5nIGFuZCBidXJzdCBzaXplCiogICAgICAgIGJhc2VkIFJhdGUgbGltaXRpbmcsIHVzZXIgaGFzIHRvIG1hbnVhbGx5IGNoYW5nZSB0aGUgbW9kZSB0byBidXJzdCBzaXplCiogICAgICAgIGJhc2VkIFJhdGUgbGltaXRpbmcgYnkgY2FsbGluZyBnc3lzU2V0UmF0ZUxpbWl0TW9kZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjR2V0VENQQnVyc3RSYXRlCigKICAgIElOICBHVF9RRF9ERVYgICAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIE9VVCBHVF9CVVJTVF9SQVRFICAgKnJhdGUKKTsKCgovKiBndFN5c0N0cmwuYyAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRSYXRlTGltaXRNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgSW5ncmVzcyBSYXRlIExpbWl0aW5nIGNhbiBiZSBlaXRoZXIgUHJpb3JpdHkgYmFzZWQgb3IgQnVyc3QgU2l6ZSBiYXNlZC4KKiAgICAgICAgVGhpcyByb3V0aW5lIHNldHMgd2hpY2ggbW9kZSB0byB1c2UuCioKKiBJTlBVVFM6CiogICAgICAgIG1vZGUgLSBlaXRoZXIgR1RfUkFURV9QUklfQkFTRSBvciBHVF9SQVRFX0JVUlNUX0JBU0UKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBtb2RlIGlzIHVzZWQuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0UmF0ZUxpbWl0TW9kZQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0lOR1JFU1NfUkFURV9NT0RFIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFJhdGVMaW1pdE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBJbmdyZXNzIFJhdGUgTGltaXRpbmcgY2FuIGJlIGVpdGhlciBQcmlvcml0eSBiYXNlZCBvciBCdXJzdCBTaXplIGJhc2VkLgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB3aGljaCBtb2RlIGlzIGJlaW5nIHVzZWQuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBtb2RlIC0gZWl0aGVyIEdUX1JBVEVfUFJJX0JBU0Ugb3IgR1RfUkFURV9CVVJTVF9CQVNFCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRSYXRlTGltaXRNb2RlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIE9VVCBHVF9JTkdSRVNTX1JBVEVfTU9ERSAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0QWdlSW50CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgRW5hYmxlL0Rpc2FibGUgQWdlIFJlZnJlc2ggSW50ZXJydXB0LiBJZiBDUFUgRGlyZWN0ZWQgTGVhcm5pbmcgaXMgYmVpbmcKKiAgICAgICAgdXNlZCAoZ3BydFNldExvY2tlZFBvcnQpLCBpdCBtYXkgYmUgZGVzaXJhYmxlIHRvIGtub3cgd2hlbiBhbiBhZGRyZXNzIGlzCiogICAgICAgIHN0aWxsIGJlaW5nIHVzZWQgYmVmb3JlIGl0IHRvdGFsbHkgYWdlcyBvdXQgb2YgdGhlIHN3aXRjaC4gVGhpcyBjYW4gYmUgCiogICAgICAgIGFjY29tcGxpc2hlZCBieSBlbmFibGluZyBBZ2UgUmVmcmVzaCBJbnRlcnJ1cHQgKG9yIEFUVSBBZ2UgVmlvbGF0aW9uIEludCkuCiogICAgICAgIEFuIEFUVSBBZ2UgVmlvbGF0aW9uIGxvb2tzIGlkZW50aWNhbCB0byBhbmQgcmVwb3J0ZWQgdGhlIHNhbWUgYXMgYW4gQVRVIAoqICAgICAgICBNaXNzIFZpb2xhdGlvbi4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB3aGVuIHRoaXMgcmVwb3J0ZWQuIE5vcm1hbCBBVFUgTWlzcwoqICAgICAgICBWaW9sYXRpb24gb25seSBvY2N1ciBpZiBhIG5ldyBTQSBhcnJpdmVzIGF0IGEgTG9ja2VkUG9ydC4gVGhlIEFnZSB2ZXJzaW9uIAoqICAgICAgICBvZiB0aGUgQVRVIE1pc3MgVmlvbGF0aW9uIG9jY3VycyBpZiBhbiBTQSBhcnJpdmVzIGF0IGEgTG9ja2VkUG9ydCwgd2hlcmUKKiAgICAgICAgdGhlIGFkZHJlc3MgaXMgY29udGFpbmVkIGluIHRoZSBBVFUncyBkYXRhYmFzZSwgYnV0IHdoZXJlIGl0cyBFbnRyeVN0YXRlIAoqICAgICAgICBpcyBsZXNzIHRoYW4gMHg0IChpLmUuLCBpdCBoYXMgYWdlZCBtb3JlIHRoYW4gMS8yIHdheSkuCiogICAgICAgIEdUX0FUVV9QUk9CIEludGVycnVwdCBzaG91bGQgYmUgZW5hYmxlZCBmb3IgdGhpcyBpbnRlcnJ1cHQgdG8gb2NjdXIuCiogICAgICAgIFJlZmVyIHRvIGV2ZW50U2V0QWN0aXZlIHJvdXRpbmUgdG8gZW5hYmxlIEdUX0FUVV9QUk9CLgoqICAgICAgICAKKgoqIElOUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFLCB0byBlbmFibGUsCiogICAgICAgICAgICAgR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRBZ2VJbnQKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9CT09MICAgICAgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0QWdlSW50CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgR2V0IHN0YXRlIG9mIEFnZSBSZWZyZXNoIEludGVycnVwdCBtb2RlLiBJZiBDUFUgRGlyZWN0ZWQgTGVhcm5pbmcgaXMgYmVpbmcKKiAgICAgICAgdXNlZCAoZ3BydFNldExvY2tlZFBvcnQpLCBpdCBtYXkgYmUgZGVzaXJhYmxlIHRvIGtub3cgd2hlbiBhbiBhZGRyZXNzIGlzCiogICAgICAgIHN0aWxsIGJlaW5nIHVzZWQgYmVmb3JlIGl0IHRvdGFsbHkgYWdlcyBvdXQgb2YgdGhlIHN3aXRjaC4gVGhpcyBjYW4gYmUgCiogICAgICAgIGFjY29tcGxpc2hlZCBieSBlbmFibGluZyBBZ2UgUmVmcmVzaCBJbnRlcnJ1cHQgKG9yIEFUVSBBZ2UgVmlvbGF0aW9uIEludCkuCiogICAgICAgIEFuIEFUVSBBZ2UgVmlvbGF0aW9uIGxvb2tzIGlkZW50aWNhbCB0byBhbmQgcmVwb3J0ZWQgdGhlIHNhbWUgYXMgYW4gQVRVIAoqICAgICAgICBNaXNzIFZpb2xhdGlvbi4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB3aGVuIHRoaXMgcmVwb3J0ZWQuIE5vcm1hbCBBVFUgTWlzcwoqICAgICAgICBWaW9sYXRpb24gb25seSBvY2N1ciBpZiBhIG5ldyBTQSBhcnJpdmVzIGF0IGEgTG9ja2VkUG9ydC4gVGhlIEFnZSB2ZXJzaW9uIAoqICAgICAgICBvZiB0aGUgQVRVIE1pc3MgVmlvbGF0aW9uIG9jY3VycyBpZiBhbiBTQSBhcnJpdmVzIGF0IGEgTG9ja2VkUG9ydCwgd2hlcmUKKiAgICAgICAgdGhlIGFkZHJlc3MgaXMgY29udGFpbmVkIGluIHRoZSBBVFUncyBkYXRhYmFzZSwgYnV0IHdoZXJlIGl0cyBFbnRyeVN0YXRlIAoqICAgICAgICBpcyBsZXNzIHRoYW4gMHg0IChpLmUuLCBpdCBoYXMgYWdlZCBtb3JlIHRoYW4gMS8yIHdheSkuCiogICAgICAgIEdUX0FUVV9QUk9CIEludGVycnVwdCBzaG91bGQgYmUgZW5hYmxlZCBmb3IgdGhpcyBpbnRlcnJ1cHQgdG8gb2NjdXIuCiogICAgICAgIFJlZmVyIHRvIGV2ZW50U2V0QWN0aXZlIHJvdXRpbmUgdG8gZW5hYmxlIEdUX0FUVV9QUk9CLgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFLCBpZiBlbmFibGVkLAoqICAgICAgICAgICAgIEdUX0ZBTFNFLCBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRBZ2VJbnQKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX0JPT0wgICAgICAgICplbgopOwoKCi8qIEZvciBaZXBoeXIgKi8KCi8qIGd0UGh5Q3RybC5jICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFBoeUxpbmtTdGF0dXMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgdGhlIExpbmsgc3RhdHVzLgoqCiogSU5QVVRTOgoqICAgICAgICAgcG9ydCAgICAgLSBUaGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKiAgICAgICBsaW5rU3RhdHVzIC0gR1RfRkFMU0UgaWYgbGluayBpcyBub3QgZXN0YWJsaXNoZWQsCiogICAgICAgICAgICAgICAgICAgICBHVF9UUlVFIGlmIGxpbmsgaXMgZXN0YWJsaXNoZWQuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIAoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQaHlMaW5rU3RhdHVzCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgIHBvcnQsCiAgICBJTiBHVF9CT09MICAgICAgKmxpbmtTdGF0dXMKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQa3RHZW5FbmFibGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzIG9yIGRpc2FibGVzIFBhY2tldCBHZW5lcmF0b3IuCiogICAgICAgTGluayBzaG91bGQgYmUgZXN0YWJsaXNoZWQgZmlyc3QgcHJpb3IgdG8gZW5hYmxpbmcgdGhlIHBhY2tldCBnZW5lcmF0b3IsCiogICAgICAgYW5kIGdlbmVyYXRvciB3aWxsIGdlbmVyYXRlIHBhY2tldHMgYXQgdGhlIHNwZWVkIG9mIHRoZSBlc3RhYmxpc2hlZCBsaW5rLgoqICAgICAgICBXaGVuIGVuYWJsZXMgcGFja2V0IGdlbmVyYXRvciwgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBzaG91bGQgYmUgCiogICAgICAgcHJvdmlkZWQ6CiogICAgICAgICAgIFBheWxvYWQgVHlwZTogIGVpdGhlciBSYW5kb20gb3IgNUFBNTVBQTUKKiAgICAgICAgICAgUGFja2V0IExlbmd0aDogZWl0aGVyIDY0IG9yIDE1MTQgYnl0ZXMKKiAgICAgICAgICAgRXJyb3IgUGFja2V0OiAgZWl0aGVyIEVycm9yIHBhY2tldCBvciBub3JtYWwgcGFja2V0CioKKiBJTlBVVFM6CiogICAgICAgICBwb3J0ICAgICAtIFRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgZW4gICAgICAtIEdUX1RSVUUgdG8gZW5hYmxlLCBHVF9GQUxTRSB0byBkaXNhYmxlCiogICAgICAgcGt0SW5mbyAtIHBhY2tldCBpbmZvcm1hdGlvbihHVF9QRyBzdHJ1Y3R1cmUgcG9pbnRlciksIGlmIGVuIGlzIEdUX1RSVUUuCiogICAgICAgICAgICAgICAgIGlnbm9yZWQsIGlmIGVuIGlzIEdUX0ZBTFNFCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIAoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRQa3RHZW5FbmFibGUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgcG9ydCwKICAgIElOIEdUX0JPT0wgICBlbiwKICAgIElOIEdUX1BHICAgICAqcGt0SW5mbwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0U2VyZGVzTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJlYWRzIFNlcmRlcyBJbnRlcmZhY2UgTW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlICAgIC0gU2VyZGVzIEludGVyZmFjZSBNb2RlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFNlcmRlc01vZGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gIEdUX1NFUkRFU19NT0RFICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRTZXJkZXNNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBTZXJkZXMgSW50ZXJmYWNlIE1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICBtb2RlICAgIC0gU2VyZGVzIEludGVyZmFjZSBNb2RlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRTZXJkZXNNb2RlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOICBHVF9TRVJERVNfTU9ERSBtb2RlCik7CgoKLyogZ3RTeXNDdHJsLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEZvcmNlU25vb3BQcmkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBGb3JjZSBTbm9vcGluZyBQcmlvcml0eS4gVGhlIHByaW9yaXR5IG9uIElHTVAgb3IgTUxEIFNub29wIGZyYW1lcyBhcmUKKiAgICAgICAgc2V0IHRvIHRoZSBTbm9vcFByaSB2YWx1ZSAoZ3N5c1NldFNub29wUHJpIEFQSSkgd2hlbiBGb3JjZSBTbm9vcGluZwoqICAgICAgIFByaW9yaXR5IGlzIGVuYWJsZWQuIFdoZW4gaXQncyBkaXNhYmxlZCwgdGhlIHByaW9yaXR5IG9uIHRoZXNlIGZyYW1lcwoqICAgICAgICBpcyBub3QgbW9kaWZpZWQuCioKKiBJTlBVVFM6CiogICAgICAgIGVuIC0gR1RfVFJVRSB0byB1c2UgZGVmaW5lZCBQUkkgYml0cywgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEZvcmNlU25vb3BQcmkKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9CT09MICAgICAgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0Rm9yY2VTbm9vcFByaQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIEZvcmNlIFNub29waW5nIFByaW9yaXR5LiBUaGUgcHJpb3JpdHkgb24gSUdNUCBvciBNTEQgU25vb3AgZnJhbWVzIGFyZQoqICAgICAgICBzZXQgdG8gdGhlIFNub29wUHJpIHZhbHVlIChnc3lzU2V0U25vb3BQcmkgQVBJKSB3aGVuIEZvcmNlIFNub29waW5nCiogICAgICAgUHJpb3JpdHkgaXMgZW5hYmxlZC4gV2hlbiBpdCdzIGRpc2FibGVkLCB0aGUgcHJpb3JpdHkgb24gdGhlc2UgZnJhbWVzCiogICAgICAgIGlzIG5vdCBtb2RpZmllZC4KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGVuIC0gR1RfVFJVRSB0byB1c2UgZGVmaW5lZCBQUkkgYml0cywgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0Rm9yY2VTbm9vcFByaQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfQk9PTCAgICAgICplbgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFNub29wUHJpCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgU25vb3AgUHJpb3JpdHkuIFdoZW4gRm9yY2VTbm9vcFByaSAoZ3N5c1NldEZvcmNlU25vb3BQcmkgQVBJKSBpcyBlbmFibGVkLAoqICAgICAgIHRoaXMgcHJpb3JpdHkgaXMgdXNlZCBhcyB0aGUgZWdyZXNzaW5nIGZyYW1lJ3MgUFJJWzI6MF0gYml0cyBvbiBnZW5lcmF0ZWQKKiAgICAgICBNYXJ2ZWxsIFRhZyBUb19DUFUgU25vb3AgZnJhbWVzIGFuZCBoaWdoZXIgMiBiaXRzIG9mIHRoZSBwcmlvcml0eSBhcmUKKiAgICAgICB1c2VkIGFzIHRoZSBpbnRlcm5hbCBRdWV1ZSBQcmlvcml0eSB0byB1c2Ugb24gSUdNUC9NTEQgc25vb3AgZnJhbWVzLgoqCiogSU5QVVRTOgoqICAgICAgICBwcmkgLSBQUklbMjowXSBiaXRzIChzaG91bGQgYmUgbGVzcyB0aGFuIDgpCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIElmIHByaSBpcyBub3QgbGVzcyB0aGFuIDguCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0U25vb3BQcmkKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9VMTYgICAgICAgIHByaQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFNub29wUHJpCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgU25vb3AgUHJpb3JpdHkuIFdoZW4gRm9yY2VTbm9vcFByaSAoZ3N5c1NldEZvcmNlU25vb3BQcmkgQVBJKSBpcyBlbmFibGVkLAoqICAgICAgIHRoaXMgcHJpb3JpdHkgaXMgdXNlZCBhcyB0aGUgZWdyZXNzaW5nIGZyYW1lJ3MgUFJJWzI6MF0gYml0cyBvbiBnZW5lcmF0ZWQKKiAgICAgICBNYXJ2ZWxsIFRhZyBUb19DUFUgU25vb3AgZnJhbWVzIGFuZCBoaWdoZXIgMiBiaXRzIG9mIHRoZSBwcmlvcml0eSBhcmUKKiAgICAgICB1c2VkIGFzIHRoZSBpbnRlcm5hbCBRdWV1ZSBQcmlvcml0eSB0byB1c2Ugb24gSUdNUC9NTEQgc25vb3AgZnJhbWVzLgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgcHJpIC0gUFJJWzI6MF0gYml0cyAoc2hvdWxkIGJlIGxlc3MgdGhhbiA4KQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0U25vb3BQcmkKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX1UxNiAgICAgICpwcmkKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRGb3JjZUFSUFByaQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIEZvcmNlIEFSUCBQcmlvcml0eS4gVGhlIHByaW9yaXR5IG9uIEFSUCBmcmFtZXMgYXJlIHNldCB0byB0aGUgQVJQUHJpIAoqICAgICAgIHZhbHVlIChnc3lzU2V0QVJQUHJpIEFQSSkgd2hlbiBGb3JjZSBBUlAgUHJpb3JpdHkgaXMgZW5hYmxlZC4gV2hlbiBpdCdzIAoqICAgICAgIGRpc2FibGVkLCB0aGUgcHJpb3JpdHkgb24gdGhlc2UgZnJhbWVzIGlzIG5vdCBtb2RpZmllZC4KKgoqIElOUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFIHRvIHVzZSBkZWZpbmVkIFBSSSBiaXRzLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Rm9yY2VBUlBQcmkKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9CT09MICAgICAgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0Rm9yY2VBUlBQcmkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBGb3JjZSBBUlAgUHJpb3JpdHkuIFRoZSBwcmlvcml0eSBvbiBBUlAgZnJhbWVzIGFyZSBzZXQgdG8gdGhlIEFSUFByaSAKKiAgICAgICB2YWx1ZSAoZ3N5c1NldEFSUFByaSBBUEkpIHdoZW4gRm9yY2UgQVJQIFByaW9yaXR5IGlzIGVuYWJsZWQuIFdoZW4gaXQncyAKKiAgICAgICBkaXNhYmxlZCwgdGhlIHByaW9yaXR5IG9uIHRoZXNlIGZyYW1lcyBpcyBub3QgbW9kaWZpZWQuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBlbiAtIEdUX1RSVUUgdG8gdXNlIGRlZmluZWQgUFJJIGJpdHMsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEZvcmNlQVJQUHJpCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIE9VVCBHVF9CT09MICAgICAgKmVuCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0QVJQUHJpCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgQVJQIFByaW9yaXR5LiBXaGVuIEZvcmNlQVJQUHJpIChnc3lzU2V0Rm9yY2VBUlBQcmkgQVBJKSBpcyBlbmFibGVkLAoqICAgICAgIHRoaXMgcHJpb3JpdHkgaXMgdXNlZCBhcyB0aGUgZWdyZXNzaW5nIGZyYW1lJ3MgUFJJWzI6MF0gYml0cyBvbiBnZW5lcmF0ZWQKKiAgICAgICBNYXJ2ZWxsIFRhZyBUb19DUFUgQVJQIGZyYW1lcyBhbmQgaGlnaGVyIDIgYml0cyBvZiB0aGUgcHJpb3JpdHkgYXJlCiogICAgICAgdXNlZCBhcyB0aGUgaW50ZXJuYWwgUXVldWUgUHJpb3JpdHkgdG8gdXNlIG9uIEFSUCBmcmFtZXMuCioKKiBJTlBVVFM6CiogICAgICAgIHByaSAtIFBSSVsyOjBdIGJpdHMgKHNob3VsZCBiZSBsZXNzIHRoYW4gOCkKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gSWYgcHJpIGlzIG5vdCBsZXNzIHRoYW4gOC4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRBUlBQcmkKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9VMTYgICAgICAgIHByaQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEFSUFByaQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIEFSUCBQcmlvcml0eS4gV2hlbiBGb3JjZUFSUFByaSAoZ3N5c1NldEZvcmNlQVJQUHJpIEFQSSkgaXMgZW5hYmxlZCwKKiAgICAgICB0aGlzIHByaW9yaXR5IGlzIHVzZWQgYXMgdGhlIGVncmVzc2luZyBmcmFtZSdzIFBSSVsyOjBdIGJpdHMgb24gZ2VuZXJhdGVkCiogICAgICAgTWFydmVsbCBUYWcgVG9fQ1BVIEFSUCBmcmFtZXMgYW5kIGhpZ2hlciAyIGJpdHMgb2YgdGhlIHByaW9yaXR5IGFyZQoqICAgICAgIHVzZWQgYXMgdGhlIGludGVybmFsIFF1ZXVlIFByaW9yaXR5IHRvIHVzZSBvbiBBUlAgZnJhbWVzLgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgcHJpIC0gUFJJWzI6MF0gYml0cyAoc2hvdWxkIGJlIGxlc3MgdGhhbiA4KQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0QVJQUHJpCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIE9VVCBHVF9VMTYgICAgICAqcHJpCik7CgoKLyogYWRkZWQgZm9yIDg4RTYwNjUgKi8KCi8qIGd0QnJnVmxhbi5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmxuU2V0Rm9yY2VNYXAKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzL2Rpc2FibGVzIEZvcmNlIE1hcCBmZWF0dXJlLgoqICAgICAgICBXaGVuIEZvcmNlIE1hcCBmZWF0dXJlIGlzIGVuYWJsZWQsIGFsbCByZWNlaXZlZCBmcmFtZXMgd2lsbCBiZQoqICAgICAgICBjb25zaWRlcmVkIE1HTVQgYW5kIHRoZXkgYXJlIG1hcHBlZCB0byB0aGUgcG9ydCBvciBwb3J0cyBkZWZpbmVkCiogICAgICAgIGluIHRoZSBWTEFOIFRhYmxlIG92ZXJyaWRpbmcgdGhlIG1hcHBpbmcgZnJvbSB0aGUgYWRkcmVzcyBkYXRhYmFzZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlciB0byBzZXQuCiogICAgICAgbW9kZSAgICAtIEdUX1RSVUUsIHRvIGVuYWJsZSBmb3JjZSBtYXAgZmVhdHVyZQoqICAgICAgICAgICAgICAgICBHVF9GQVVMU0UsIG90aGVyd2lzZSAKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2bG5TZXRGb3JjZU1hcAooCiAgICBJTiAgR1RfUURfREVWICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOICBHVF9CT09MICAgICAgbW9kZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5HZXRGb3JjZU1hcAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGNoZWNrcyBpZiBGb3JjZSBNYXAgZmVhdHVyZSBpcyBlbmFibGVkLgoqICAgICAgICBXaGVuIEZvcmNlIE1hcCBmZWF0dXJlIGlzIGVuYWJsZWQsIGFsbCByZWNlaXZlZCBmcmFtZXMgd2lsbCBiZQoqICAgICAgICBjb25zaWRlcmVkIE1HTVQgYW5kIHRoZXkgYXJlIG1hcHBlZCB0byB0aGUgcG9ydCBvciBwb3J0cyBkZWZpbmVkCiogICAgICAgIGluIHRoZSBWTEFOIFRhYmxlIG92ZXJyaWRpbmcgdGhlIG1hcHBpbmcgZnJvbSB0aGUgYWRkcmVzcyBkYXRhYmFzZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlciB0byBzZXQuCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgICAgLSBHVF9UUlVFLCB0byBlbmFibGUgZm9yY2UgbWFwIGZlYXR1cmUKKiAgICAgICAgICAgICAgICAgR1RfRkFVTFNFLCBvdGhlcndpc2UgCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmxuR2V0Rm9yY2VNYXAKKAogICAgSU4gIEdUX1FEX0RFViAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICptb2RlCik7CgovKiBndEV2ZW50cy5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdldmVudFNldEFnZUludEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGVuYWJsZXMvZGlzYWJsZXMgQWdlIEludGVycnVwdCBmb3IgYSBwb3J0LgoqICAgICAgICBXaGVuIGl0J3MgZW5hYmxlZCwgQVRVIEFnZSBWaW9sYXRpb24gaW50ZXJydXB0cyBmcm9tIHRoaXMgcG9ydCBhcmUgZW5hYmxlZC4KKiAgICAgICAgQW4gQWdlIFZpb2xhdGlvbiB3aWxsIG9jY3VyIGFueXRpbWUgYSBwb3J0IGlzIExvY2tlZChncHJ0U2V0TG9ja2VkUG9ydCkgCiogICAgICAgIGFuZCB0aGUgaW5ncmVzc2luZyBmcmFtZSdzIFNBIGlzIGNvbnRhaW5lZCBpbiB0aGUgQVRVIGFzIGEgbm9uLVN0YXRpYyAKKiAgICAgICAgZW50cnkgd2l0aCBhIEVudHJ5U3RhdGUgbGVzcyB0aGFuIDB4NC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgIG1vZGUgLSBHVF9UUlVFIHRvIGVuYWJsZSBBZ2UgSW50ZXJydXB0LAoqICAgICAgICAgICAgICAgR1RfRkFMVVNFIHRvIGRpc2FibGUKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZXZlbnRTZXRBZ2VJbnRFbgooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIElOICBHVF9CT09MICAgICAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdldmVudEdldEFnZUludEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGdldHMgQWdlIEludGVycnVwdCBFbmFibGUgZm9yIHRoZSBwb3J0LgoqICAgICAgICBXaGVuIGl0J3MgZW5hYmxlZCwgQVRVIEFnZSBWaW9sYXRpb24gaW50ZXJydXB0cyBmcm9tIHRoaXMgcG9ydCBhcmUgZW5hYmxlZC4KKiAgICAgICAgQW4gQWdlIFZpb2xhdGlvbiB3aWxsIG9jY3VyIGFueXRpbWUgYSBwb3J0IGlzIExvY2tlZChncHJ0U2V0TG9ja2VkUG9ydCkgCiogICAgICAgIGFuZCB0aGUgaW5ncmVzc2luZyBmcmFtZSdzIFNBIGlzIGNvbnRhaW5lZCBpbiB0aGUgQVRVIGFzIGEgbm9uLVN0YXRpYyAKKiAgICAgICAgZW50cnkgd2l0aCBhIEVudHJ5U3RhdGUgbGVzcyB0aGFuIDB4NC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgIG1vZGUgLSBHVF9UUlVFIHRvIGVuYWJsZSBBZ2UgSW50ZXJydXB0LAoqICAgICAgICAgICAgICAgR1RfRkFMVVNFIHRvIGRpc2FibGUKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZXZlbnRHZXRBZ2VJbnRFbgooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgICAqbW9kZQopOwoKCi8qIGd0UElSTC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwaXJsQWN0aXZhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBhY3RpdmF0ZXMgSW5ncmVzcyBSYXRlIExpbWl0aW5nIGZvciB0aGUgZ2l2ZW4gcG9ydHMgYnkgCiogICAgICAgIGluaXRpYWxpemluZyBhIHJlc291cmNlIGJ1Y2tldCwgYXNzaWduaW5nIHBvcnRzLCBhbmQgY29uZmlndXJpbmcKKiAgICAgICAgQnVja2V0IFBhcmFtZXRlcnMuCioKKiBJTlBVVFM6CiogICAgICAgIGlybFVuaXQgIC0gYnVja2V0IHRvIGJlIHVzZWQgKDAgfiAxMSkuCiogICAgICAgcG9ydFZlYyAgLSB0aGUgbGlzdCBvZiBwb3J0cyB0aGF0IHNoYXJlIHRoZSBidWNrZXQuCiogICAgICAgIHBpcmxEYXRhIC0gUElSTCByZXNvdXJjZSBwYXJhbWV0ZXJzLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BpcmxBY3RpdmF0ZQooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX1UzMiAgICAgICAgaXJsVW5pdCwKICAgIElOICBHVF9VMzIgICAgICAgIHBvcnRWZWMsCiAgICBJTiAgR1RfUElSTF9EQVRBICAgICpwaXJsRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGlybERlYWN0aXZhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBkZWFjdGl2YXRlcyBJbmdyZXNzIFJhdGUgTGltaXRpbmcgZm9yIHRoZSBnaXZlbiBidWNrZXQuCiogICAgICAgIEl0IHNpbXBseSByZW1vdmVzIGV2ZXJ5IHBvcnRzIGZyb20gdGhlIEluZ3Jlc3MgUmF0ZSBSZXNvdXJjZS4KKiAgICAgICAgSXQgaXMgYXNzdW1lZCB0aGF0IGdwaXJsQWN0aXZhdGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNhbGxlZCB3aXRoCiogICAgICAgIHRoZSBpcmxVbml0IGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKgoqIElOUFVUUzoKKiAgICAgICAgaXJsVW5pdCAgLSBidWNrZXQgdG8gYmUgZGVhY3RpdmF0ZWQKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwaXJsRGVhY3RpdmF0ZQooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX1UzMiAgICAgICAgaXJsVW5pdAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGlybFVwZGF0ZVBhcmFtCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgdXBkYXRlcyBJUkwgUGFyYW1ldGVyLgoqICAgICAgICBJdCBpcyBhc3N1bWVkIHRoYXQgZ3BpcmxBY3RpdmF0ZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY2FsbGVkIHdpdGgKKiAgICAgICAgdGhlIGdpdmVuIGlybFVuaXQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgoqCiogSU5QVVRTOgoqICAgICAgICBpcmxVbml0ICAtIGJ1Y2tldCB0byBiZSB1c2VkICgwIH4gMTEpCiogICAgICAgIHBpcmxEYXRhIC0gUElSTCByZXNvdXJjZSBwYXJhbWV0ZXJzCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGlybFVwZGF0ZVBhcmFtCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfVTMyICAgICAgICBpcmxVbml0LAogICAgSU4gIEdUX1BJUkxfREFUQSAgICAqcGlybERhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BpcmxSZWFkUGFyYW0KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgSVJMIFBhcmFtZXRlci4KKiAgICAgICAgSXQgaXMgYXNzdW1lZCB0aGF0IGdwaXJsQWN0aXZhdGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNhbGxlZCB3aXRoCiogICAgICAgIHRoZSBnaXZlbiBpcmxVbml0IGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKgoqIElOUFVUUzoKKiAgICAgICAgaXJsVW5pdCAgLSBidWNrZXQgdG8gYmUgdXNlZCAoMCB+IDExKS4KKgoqIE9VVFBVVFM6CiogICAgICAgIHBpcmxEYXRhIC0gUElSTCByZXNvdXJjZSBwYXJhbWV0ZXJzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BpcmxSZWFkUGFyYW0KKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9VMzIgICAgICAgIGlybFVuaXQsCiAgICBPVVQgR1RfUElSTF9EQVRBICAgICpwaXJsRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGlybFVwZGF0ZVBvcnRWZWMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSB1cGRhdGVzIHBvcnQgbGlzdCB0aGF0IHNoYXJlIHRoZSBidWNrZXQuCiogICAgICAgIEl0IGlzIGFzc3VtZWQgdGhhdCBncGlybEFjdGl2YXRlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjYWxsZWQgd2l0aAoqICAgICAgICB0aGUgZ2l2ZW4gaXJsVW5pdCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCioKKiBJTlBVVFM6CiogICAgICAgIGlybFVuaXQgIC0gYnVja2V0IHRvIGJlIHVzZWQgKDAgfiAxMSkuCiogICAgICAgcG9ydFZlYyAgLSB0aGUgbGlzdCBvZiBwb3J0cyB0aGF0IHNoYXJlIHRoZSBidWNrZXQuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGlybFVwZGF0ZVBvcnRWZWMKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9VMzIgICAgICAgIGlybFVuaXQsCiAgICBJTiAgR1RfVTMyICAgICAgICBwb3J0VmVjCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwaXJsUmVhZFBvcnRWZWMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgcG9ydCBsaXN0IHRoYXQgc2hhcmUgdGhlIGJ1Y2tldC4KKiAgICAgICAgSXQgaXMgYXNzdW1lZCB0aGF0IGdwaXJsQWN0aXZhdGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNhbGxlZCB3aXRoCiogICAgICAgIHRoZSBnaXZlbiBpcmxVbml0IGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKgoqIElOUFVUUzoKKiAgICAgICAgaXJsVW5pdCAgLSBidWNrZXQgdG8gYmUgdXNlZCAoMCB+IDExKS4KKgoqIE9VVFBVVFM6CiogICAgICAgcG9ydFZlYyAgLSB0aGUgbGlzdCBvZiBwb3J0cyB0aGF0IHNoYXJlIHRoZSBidWNrZXQuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGlybFJlYWRQb3J0VmVjCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfVTMyICAgICAgICBpcmxVbml0LAogICAgT1VUIEdUX1UzMiAgICAgICAgKnBvcnRWZWMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjR2V0UGlybEZjTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgUG9ydCBJbmdyZXNzIFJhdGUgTGltaXQgRmxvdyBDb250cm9sIG1vZGUuCiogICAgICAgIFdoZW4gRUJTTGltaXRBY3Rpb24gaXMgcHJvZ3JhbW1lZCB0byBnZW5lcmF0ZSBhIGZsb3cgY29udHJvbCBtZXNzYWdlLCAKKiAgICAgICAgdGhlIGRlYXNzZXJ0aW9uIG9mIGZsb3cgY29udHJvbCBpcyBjb250cm9sbGVkIGJ5IHRoaXMgbW9kZS4KKiAgICAgICAgICAgIEdUX1BJUkxfRkNfREVBU1NFUlRfRU1QVFk6CiogICAgICAgICAgICAgICAgRGUtYXNzZXJ0IHdoZW4gdGhlIGluZ3Jlc3MgcmF0ZSByZXNvdXJjZSBoYXMgYmVjb21lIGVtcHR5CiogICAgICAgICAgICBHVF9QSVJMX0ZDX0RFQVNTRVJUX0NCU19MSU1JVAoqICAgICAgICAgICAgICAgIERlLWFzc2VydCB3aGVuIHRoZSBpbmdyZXNzIHJhdGUgcmVzb3VyY2UgaGFzIGVub3VnaCByb29tIGFzCiogICAgICAgICAgICAgICAgc3BlY2lmaWVkIGJ5IHRoZSBDQlNMaW1pdC4KKiAgICAgICAgUGxlYXNlIHJlZmVyIHRvIEdUX1BJUkxfUkVTT1VSQ0Ugc3RydWN0dXJlIGZvciBFQlNMaW1pdEFjdGlvbiBhbmQKKiAgICAgICAgQ0JTTGltaXQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgLSBHVF9QSVJMX0ZDX0RFQVNTRVJUIGVudW0gdHlwZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEICAgIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY0dldFBpcmxGY01vZGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBPVVQgR1RfUElSTF9GQ19ERUFTU0VSVCAgICAgICAgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BpcmxHZXRJbmdyZXNzUmF0ZVJlc291cmNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBJbmdyZXNzIFJhdGUgTGltaXRpbmcgUmVzb3VyY2VzIGFzc2lnbmVkIHRvIHRoZSBwb3J0LgoqICAgICAgICBUaGlzIHZlY3RvciBpcyB1c2VkIHRvIGF0dGFjaCBzcGVjaWZpYyBjb3VudGVyIHJlc291cmNlcyB0byB0aGUgcGh5c2ljYWwKKiAgICAgICAgcG9ydC4gQW5kIHRoZSBzYW1lIGNvdW50ZXIgcmVzb3VyY2UgY2FuIGJlIGF0dGFjaGVkIHRvIG1vcmUgdGhhbiBvbmUgcG9ydC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqICAgICAgICByZXNWZWMgLSByZXNvdXJjZSB2ZWN0b3IgKGJpdCAwIGZvciBpcmwgdW5pdCAwLCBiaXQgMSBmb3IgaXJsIHVuaXQgMSwgZXRjLikKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAgICAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGlybEdldEluZ3Jlc3NSYXRlUmVzb3VyY2UKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBPVVQgR1RfVTMyICAgICAgICAqcmVzVmVjCik7CgoKCi8qIGd0UG9ydFN0YXR1cy5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQeE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgcmV0cml2ZXMgNCBiaXRzIG9mIFB4X01PREUgQ29uZmlndXJhdGlvbiB2YWx1ZS4KKiAgICAgICAgSWYgc3BlZWQgYW5kIGR1cGxleCBtb2RlcyBhcmUgZm9yY2VkLCB0aGUgcmV0dXJuZWQgbW9kZSB2YWx1ZSB3b3VsZCBiZQoqICAgICAgICBkaWZmZXJlbnQgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBwaW4gdmFsdWVzLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBtb2RlIC0gUHhfTU9ERSBjb25maWd1cmF0aW9uIHZhbHVlCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQeE1vZGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgT1VUIEdUX1UzMiAgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRNaWlJbnRlcmZhY2UKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgcmV0cml2ZXMgTWlpIEludGVyZmFjZSBNb2RlLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBzdGF0ZSAtIEdUX1RSVUUgaWYgTWlpIEludGVyZmFjZSBpcyBlbmFibGVkLAoqICAgICAgICAgICAgICAgICAgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0TWlpSW50ZXJmYWNlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRGZEZsb3dEaXMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgcmV0cml2ZXMgdGhlIHJlYWQgdGltZSB2YWx1ZSBvZiB0aGUgRnVsbCBEdXBsZXggRmxvdyBEaXNhYmxlLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBzdGF0ZSAtIEdUX1RSVUUgaWYgRnVsbCBEdXBsZXggRmxvdyBEaXNhYmxlLgoqICAgICAgICAgICAgICAgICAgIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEZkRmxvd0RpcwooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0SGRGbG93RGlzCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHJldHJpdmVzIHRoZSByZWFkIHRpbWUgdmFsdWUgb2YgdGhlIEhhbGYgRHVwbGV4IEZsb3cgRGlzYWJsZS4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgc3RhdGUgLSBHVF9UUlVFIGlmIEhhbGYgRHVwbGV4IEZsb3cgRGlzYWJsZS4KKiAgICAgICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRIZEZsb3dEaXMKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgICAqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldE91dFFTaXplCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGdldHMgZWdyZXNzIHF1ZXVlIHNpemUgY291bnRlciB2YWx1ZS4KKiAgICAgICAgVGhpcyBjb3VudGVyIHJlZmxlY3RzIHRoZSBjdXJyZW50IG51bWJlciBvZiBFZ3Jlc3MgYnVmZmVycyBzd2l0Y2hlZCB0byAKKiAgICAgICAgdGhpcyBwb3J0LiBUaGlzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgYnVmZmVycyBhY3Jvc3MgYWxsIGZvdXIgcHJpb3JpdHkgCiogICAgICAgIHF1ZXVlcy4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqICAgICAgICBjb3VudCAtIGVncmVzcyBxdWV1ZSBzaXplIGNvdW50ZXIgdmFsdWUKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRPdXRRU2l6ZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9VMTYgICAgICAgICpjb3VudAopOwoKCi8qIGd0UG9ydEN0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0U0FGaWx0ZXJpbmcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0IHRoZSBTb3VyY2UgQWRkcmVzcyhTQSkgZml0ZXJpbmcgbWV0aG9kLgoqICAgICAgICAgICAgR1RfU0FfRklMVEVSSU5HX0RJU0FCTEUgOgoqICAgICAgICAgICAgICAgIG5vIGZyYW1lIHdpbGwgYmUgZmlsdGVyZWQuCiogICAgICAgICAgICBHVF9TQV9EUk9QX09OX0xPQ0sgOgoqICAgICAgICAgICAgICAgIGRpc2NhcmQgaWYgU0EgZmllbGQgaXMgbm90IGluIHRoZSBBVFUncyBhZGRyZXNzIGRhdGFiYXNlLgoqICAgICAgICAgICAgR1RfU0FfRFJPUF9PTl9VTkxPQyA6IAoqICAgICAgICAgICAgICAgIGRpc2NhcmQgaWYgU0EgZmllbGQgaXMgaW4gdGhlIEFUVSdzIGFkZHJlc3MgZGF0YWJhc2UgYXMgU3RhdGljIAoqICAgICAgICAgICAgICAgIGVudHJ5IHdpdGggYSBQb3J0VmVjIG9mIGFsbCB6ZXJvcy4KKiAgICAgICAgICAgIEdUX1NBX0RST1BfVE9fQ1BVIDogCiogICAgICAgICAgICAgICAgSW5ncmVzc2luZyBmcmFtZXMgd2lsbCBiZSBtYXBwZWQgdG8gdGhlIENQVSBQb3J0IGlmIHRoZWlyIFNBIAoqICAgICAgICAgICAgICAgIGZpZWxkIGlzIGluIHRoZSBBVFUncyBhZGRyZXNzIGRhdGFiYXNlIGFzIFN0YXRpYyBlbnRyeSB3aXRoIGEgCiogICAgICAgICAgICAgICAgUG9ydFZlYyBvZiBhbGwgemVyb3MuIE90aGVyd2lzZSwgdGhlIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZCAKKiAgICAgICAgICAgICAgICBpZiB0aGVpciBTQSBmaWVsZCBpcyBub3QgaW4gdGhlIEFUVSdzIGFkZHJlc3MgZGF0YWJhc2Ugb3IgaWYgdGhpcwoqICAgICAgICAgICAgICAgIHBvcnQncyBiaXQgaXMgbm90IHNldCBpbiB0aGUgUG9ydFZlYyBiaXRzIGZvciB0aGUgZnJhbWUncyBTQS4KKiAgICAgICAgCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBtb2RlIC0gR1RfU0FfRklMVEVSSU5HIHN0cnVjdHVyZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFNBRmlsdGVyaW5nCigKICAgIElOIEdUX1FEX0RFViAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgcG9ydCwKICAgIElOIEdUX1NBX0ZJTFRFUklORyAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRTQUZpbHRlcmluZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSBTb3VyY2UgQWRkcmVzcyhTQSkgZml0ZXJpbmcgbWV0aG9kLgoqICAgICAgICAgICAgR1RfU0FfRklMVEVSSU5HX0RJU0FCTEUgOgoqICAgICAgICAgICAgICAgIG5vIGZyYW1lIHdpbGwgYmUgZmlsdGVyZWQuCiogICAgICAgICAgICBHVF9TQV9EUk9QX09OX0xPQ0sgOgoqICAgICAgICAgICAgICAgIGRpc2NhcmQgaWYgU0EgZmllbGQgaXMgbm90IGluIHRoZSBBVFUncyBhZGRyZXNzIGRhdGFiYXNlLgoqICAgICAgICAgICAgR1RfU0FfRFJPUF9PTl9VTkxPQyA6IAoqICAgICAgICAgICAgICAgIGRpc2NhcmQgaWYgU0EgZmllbGQgaXMgaW4gdGhlIEFUVSdzIGFkZHJlc3MgZGF0YWJhc2UgYXMgU3RhdGljIAoqICAgICAgICAgICAgICAgIGVudHJ5IHdpdGggYSBQb3J0VmVjIG9mIGFsbCB6ZXJvcy4KKiAgICAgICAgICAgIEdUX1NBX0RST1BfVE9fQ1BVIDogCiogICAgICAgICAgICAgICAgSW5ncmVzc2luZyBmcmFtZXMgd2lsbCBiZSBtYXBwZWQgdG8gdGhlIENQVSBQb3J0IGlmIHRoZWlyIFNBIAoqICAgICAgICAgICAgICAgIGZpZWxkIGlzIGluIHRoZSBBVFUncyBhZGRyZXNzIGRhdGFiYXNlIGFzIFN0YXRpYyBlbnRyeSB3aXRoIGEgCiogICAgICAgICAgICAgICAgUG9ydFZlYyBvZiBhbGwgemVyb3MuIE90aGVyd2lzZSwgdGhlIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZCAKKiAgICAgICAgICAgICAgICBpZiB0aGVpciBTQSBmaWVsZCBpcyBub3QgaW4gdGhlIEFUVSdzIGFkZHJlc3MgZGF0YWJhc2Ugb3IgaWYgdGhpcwoqICAgICAgICAgICAgICAgIHBvcnQncyBiaXQgaXMgbm90IHNldCBpbiB0aGUgUG9ydFZlYyBiaXRzIGZvciB0aGUgZnJhbWUncyBTQS4KKiAgICAgICAgCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIEdUX1NBX0ZJTFRFUklORyBzdHJ1Y3R1cmUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRTQUZpbHRlcmluZwooCiAgICBJTiAgR1RfUURfREVWICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgcG9ydCwKICAgIE9VVCBHVF9TQV9GSUxURVJJTkcgICAgKm1vZGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRBUlB0b0NQVQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFdoZW4gQVJQdG9DUFUgaXMgc2V0IHRvIEdUX1RSVUUsIEFSUCBmcmFtZXMgYXJlIG1hcHBlZCB0byB0aGUgQ1BVIHBvcnQuCiogICAgICAgIAoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgbW9kZSAtIEdUX1RSVUUsIHRvIG1hcCBBUlAgZnJhbWVzIHRvIENQVSBQb3J0LAoqICAgICAgICAgICAgICAgR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRBUlB0b0NQVQooCiAgICBJTiBHVF9RRF9ERVYgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgIHBvcnQsCiAgICBJTiBHVF9CT09MICAgIG1vZGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRBUlB0b0NQVQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFdoZW4gQVJQdG9DUFUgaXMgc2V0IHRvIEdUX1RSVUUsIEFSUCBmcmFtZXMgYXJlIG1hcHBlZCB0byB0aGUgQ1BVIHBvcnQuCiogICAgICAgIAoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgLSBHVF9UUlVFLCB0byBtYXAgQVJQIGZyYW1lcyB0byBDUFUgUG9ydCwKKiAgICAgICAgICAgICAgIEdUX0ZBTFNFLCBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0QVJQdG9DUFUKKAogICAgSU4gIEdUX1FEX0RFViAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0RWdyZXNzRmxvb2QKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXQgRWdyZXNzIEZsb29kaW5nIE1vZGUuCiogICAgICAgIEZyYW1lcyB3aXRoIHVua25vd24gREEgKERlc3RpbmF0aW9uIEFkZHJlc3MgdGhhdCBpcyBub3QgaW4gQVRVIGRhdGFiYXNlKQoqICAgICAgICBnZW5lcmFsbHkgZmxvb2Qgb3V0IGFsbCB0aGUgcG9ydHMuIFRoaXMgbW9kZSBjYW4gYmUgdXNlZCB0byBwcmV2ZW50CiogICAgICAgIHRob3NlIGZyYW1lcyBmcm9tIGVncmVzc2luZyB0aGlzIHBvcnQgYXMgZm9sbG93czoKKiAgICAgICAgICAgIEdUX0JMT0NLX0VHUkVTU19VTktOT1dOCiogICAgICAgICAgICAgICAgZG8gbm90IGVncmVzcyBmcmFtZSB3aXRoIHVua25vd24gREEgKGJvdGggdW5pY2FzdCBhbmQgbXVsdGljYXN0KQoqICAgICAgICAgICAgR1RfQkxPQ0tfRUdSRVNTX1VOS05PV05fTVVMVElDQVNUCiogICAgICAgICAgICAgICAgZG8gbm90IGVncmVzcyBmcmFtZSB3aXRoIHVua25vd24gbXVsdGljYXN0IERBCiogICAgICAgICAgICBHVF9CTE9DS19FR1JFU1NfVU5LTk9XTl9VTklDQVNUCiogICAgICAgICAgICAgICAgZG8gbm90IGVncmVzcyBmcmFtZSB3aXRoIHVua25vd24gdW5pY2FzdCBEQQoqICAgICAgICAgICAgR1RfQkxPQ0tfRUdSRVNTX05PTkUKKiAgICAgICAgICAgICAgICBlZ3Jlc3MgYWxsIGZyYW1lcyB3aXRoIHVua25vd24gREEKKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgbW9kZSAtIEdUX0VHUkVTU19GTE9PRCBzdHJ1Y3R1cmUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldEVncmVzc0Zsb29kCigKICAgIElOICBHVF9RRF9ERVYgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gIEdUX0VHUkVTU19GTE9PRCAgICAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEVncmVzc0Zsb29kCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBFZ3Jlc3MgRmxvb2RpbmcgTW9kZS4KKiAgICAgICAgRnJhbWVzIHdpdGggdW5rbm93biBEQSAoRGVzdGluYXRpb24gQWRkcmVzcyB0aGF0IGlzIG5vdCBpbiBBVFUgZGF0YWJhc2UpCiogICAgICAgIGdlbmVyYWxseSBmbG9vZCBvdXQgYWxsIHRoZSBwb3J0cy4gVGhpcyBtb2RlIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQKKiAgICAgICAgdGhvc2UgZnJhbWVzIGZyb20gZWdyZXNzaW5nIHRoaXMgcG9ydCBhcyBmb2xsb3dzOgoqICAgICAgICAgICAgR1RfQkxPQ0tfRUdSRVNTX1VOS05PV04KKiAgICAgICAgICAgICAgICBkbyBub3QgZWdyZXNzIGZyYW1lIHdpdGggdW5rbm93biBEQSAoYm90aCB1bmljYXN0IGFuZCBtdWx0aWNhc3QpCiogICAgICAgICAgICBHVF9CTE9DS19FR1JFU1NfVU5LTk9XTl9NVUxUSUNBU1QKKiAgICAgICAgICAgICAgICBkbyBub3QgZWdyZXNzIGZyYW1lIHdpdGggdW5rbm93biBtdWx0aWNhc3QgREEKKiAgICAgICAgICAgIEdUX0JMT0NLX0VHUkVTU19VTktOT1dOX1VOSUNBU1QKKiAgICAgICAgICAgICAgICBkbyBub3QgZWdyZXNzIGZyYW1lIHdpdGggdW5rbm93biB1bmljYXN0IERBCiogICAgICAgICAgICBHVF9CTE9DS19FR1JFU1NfTk9ORQoqICAgICAgICAgICAgICAgIGVncmVzcyBhbGwgZnJhbWVzIHdpdGggdW5rbm93biBEQQoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIEdUX0VHUkVTU19GTE9PRCBzdHJ1Y3R1cmUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEVncmVzc0Zsb29kCigKICAgIElOICBHVF9RRF9ERVYgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgT1VUIEdUX0VHUkVTU19GTE9PRCAgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQb3J0U2NoZWQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBQb3J0IFNjaGVkdWxpbmcgTW9kZS4KKiAgICAgICAgV2hlbiB1c2VQb3J0U2NoZWQgaXMgZW5hYmxpZWQsIHRoaXMgbW9kZSBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgUXVldWUKKiAgICAgICAgY29udHJvbGxlcidzIHNjaGVkdWxpbmcgb24gdGhlIHBvcnQgYXMgZm9sbG93czoKKiAgICAgICAgICAgIEdUX1BPUlRfU0NIRURfV0VJR0hURURfUlJCIC0gdXNlIDgsNCwyLDEgd2VpZ2h0ZWQgZmFpciBzY2hlZHVsaW5nCiogICAgICAgICAgICBHVF9QT1JUX1NDSEVEX1NUUklDVF9QUkkgLSB1c2UgYSBzdHJpY3QgcHJpb3JpdHkgc2NoZW1lCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgICBtb2RlIC0gR1RfUE9SVF9TQ0hFRF9NT0RFIGVudW0gdHlwZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRQb3J0U2NoZWQKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgR1RfUE9SVF9TQ0hFRF9NT0RFICAgICAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQb3J0U2NoZWQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBQb3J0IFNjaGVkdWxpbmcgTW9kZS4KKiAgICAgICAgV2hlbiB1c2VQb3J0U2NoZWQgaXMgZW5hYmxpZWQsIHRoaXMgbW9kZSBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgUXVldWUKKiAgICAgICAgY29udHJvbGxlcidzIHNjaGVkdWxpbmcgb24gdGhlIHBvcnQgYXMgZm9sbG93czoKKiAgICAgICAgICAgIEdUX1BPUlRfU0NIRURfV0VJR0hURURfUlJCIC0gdXNlIDgsNCwyLDEgd2VpZ2h0ZWQgZmFpciBzY2hlZHVsaW5nCiogICAgICAgICAgICBHVF9QT1JUX1NDSEVEX1NUUklDVF9QUkkgLSB1c2UgYSBzdHJpY3QgcHJpb3JpdHkgc2NoZW1lCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAtIEdUX1BPUlRfU0NIRURfTU9ERSBlbnVtIHR5cGUKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQb3J0U2NoZWQKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBPVVQgR1RfUE9SVF9TQ0hFRF9NT0RFICAgICAgICAqbW9kZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFByb3ZpZGVyVGFnCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldHMgUHJvdmlkZXIgVGFnIHdoaWNoIGluZGljYXRlcyB0aGUgcHJvdmlkZXIgdGFnIChFdGhlciAKKiAgICAgICAgVHlwZSkgdmFsdWUgdGhhdCBuZWVkcyB0byBiZSBtYXRjaGVkIHRvIGluIGluZ3Jlc3MgdG8gZGV0ZXJtaW5lIGlmIGEKKiAgICAgICAgZnJhbWUgaXMgUHJvdmlkZXIgdGFnZ2VkIG9yIG5vdC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgIHRhZyAgLSBQcm92aWRlciBUYWcgKEV0aGVyIFR5cGUpCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFByb3ZpZGVyVGFnCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgSU4gIEdUX1UxNiAgICAgICAgdGFnCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQcm92aWRlclRhZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXRzIFByb3ZpZGVyIFRhZyB3aGljaCBpbmRpY2F0ZXMgdGhlIHByb3ZpZGVyIHRhZyAoRXRoZXIgCiogICAgICAgIFR5cGUpIHZhbHVlIHRoYXQgbmVlZHMgdG8gYmUgbWF0Y2hlZCB0byBpbiBpbmdyZXNzIHRvIGRldGVybWluZSBpZiBhCiogICAgICAgIGZyYW1lIGlzIFByb3ZpZGVyIHRhZ2dlZCBvciBub3QuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKiAgICAgICAgdGFnICAtIFByb3ZpZGVyIFRhZyAoRXRoZXIgVHlwZSkKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQcm92aWRlclRhZwooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9VMTYgICAgICAgICp0YWcKKTsKCgoKLyogZ3RQb3J0UmF0ZUN0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNTZXRWaWROcmxFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGVuYWJsZXMvZGlzYWJsZXMgVklEIE5vbmUgUmF0ZSBMaW1pdCAoTlJMKS4KKiAgICAgICAgV2hlbiBWSUQgTlJMIGlzIGVuYWJsZWQgYW5kIHRoZSBkZXRlcm1pbmVkIFZJRCBvZiBhIGZyYW1lIHJlc3VsdHMgaW4gYSBWSUQKKiAgICAgICAgd2hvc2UgVklETm9uUmF0ZUxpbWl0IGluIHRoZSBWVFUgVGFibGUgaXMgc2V0IHRvIEdUX1RVUkUsIHRoZW4gdGhlIGZyYW1lCiogICAgICAgIHdpbGwgbm90IGJlIGluZ3Jlc3Mgbm9yIGVncmVzcyByYXRlIGxpbWl0ZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgIG1vZGUgLSBHVF9UUlVFIHRvIGVuYWJsZSBWSUQgTm9uZSBSYXRlIExpbWl0CiogICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAgICAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNTZXRWaWROcmxFbgooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIElOICBHVF9CT09MICAgICAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY0dldFZpZE5ybEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBWSUQgTm9uZSBSYXRlIExpbWl0IChOUkwpIG1vZGUuCiogICAgICAgIFdoZW4gVklEIE5STCBpcyBlbmFibGVkIGFuZCB0aGUgZGV0ZXJtaW5lZCBWSUQgb2YgYSBmcmFtZSByZXN1bHRzIGluIGEgVklECiogICAgICAgIHdob3NlIFZJRE5vblJhdGVMaW1pdCBpbiB0aGUgVlRVIFRhYmxlIGlzIHNldCB0byBHVF9UVVJFLCB0aGVuIHRoZSBmcmFtZQoqICAgICAgICB3aWxsIG5vdCBiZSBpbmdyZXNzIG5vciBlZ3Jlc3MgcmF0ZSBsaW1pdGVkLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIFZJRCBOb25lIFJhdGUgTGltaXQKKiAgICAgICAgICAgICAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEICAgIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY0dldFZpZE5ybEVuCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY1NldFNhTnJsRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzL2Rpc2FibGVzIFNBIE5vbmUgUmF0ZSBMaW1pdCAoTlJMKS4KKiAgICAgICAgV2hlbiBTQSBOUkwgaXMgZW5hYmxlZCBhbmQgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIGEgZnJhbWUgcmVzdWx0cyBpbiBhIEFUVQoqICAgICAgICBoaXQgd2hlcmUgdGhlIFNBJ3MgTUFDIGFkZHJlc3MgcmV0dXJucyBhbiBFbnRyeVN0YXRlIHRoYXQgaW5kaWNhdGVzIE5vbgoqICAgICAgICBSYXRlIExpbWl0ZWQsIHRoZW4gdGhlIGZyYW1lIHdpbGwgbm90IGJlIGluZ3Jlc3Mgbm9yIGVncmVzcyByYXRlIGxpbWl0ZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgIG1vZGUgLSBHVF9UUlVFIHRvIGVuYWJsZSBTQSBOb25lIFJhdGUgTGltaXQKKiAgICAgICAgICAgICAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEICAgIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY1NldFNhTnJsRW4KKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgR1RfQk9PTCAgICAgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNHZXRTYU5ybEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBTQSBOb25lIFJhdGUgTGltaXQgKE5STCkgbW9kZS4KKiAgICAgICAgV2hlbiBTQSBOUkwgaXMgZW5hYmxlZCBhbmQgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIGEgZnJhbWUgcmVzdWx0cyBpbiBhIEFUVQoqICAgICAgICBoaXQgd2hlcmUgdGhlIFNBJ3MgTUFDIGFkZHJlc3MgcmV0dXJucyBhbiBFbnRyeVN0YXRlIHRoYXQgaW5kaWNhdGVzIE5vbgoqICAgICAgICBSYXRlIExpbWl0ZWQsIHRoZW4gdGhlIGZyYW1lIHdpbGwgbm90IGJlIGluZ3Jlc3Mgbm9yIGVncmVzcyByYXRlIGxpbWl0ZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBtb2RlIC0gR1RfVFJVRSB0byBlbmFibGUgU0EgTm9uZSBSYXRlIExpbWl0CiogICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAgICAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNHZXRTYU5ybEVuCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY1NldERhTnJsRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzL2Rpc2FibGVzIERBIE5vbmUgUmF0ZSBMaW1pdCAoTlJMKS4KKiAgICAgICAgV2hlbiBEQSBOUkwgaXMgZW5hYmxlZCBhbmQgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgYSBmcmFtZSByZXN1bHRzIGluIAoqICAgICAgICBhIEFUVSBoaXQgd2hlcmUgdGhlIERBJ3MgTUFDIGFkZHJlc3MgcmV0dXJucyBhbiBFbnRyeVN0YXRlIHRoYXQgaW5kaWNhdGVzIAoqICAgICAgICBOb24gUmF0ZSBMaW1pdGVkLCB0aGVuIHRoZSBmcmFtZSB3aWxsIG5vdCBiZSBpbmdyZXNzIG5vciBlZ3Jlc3MgcmF0ZSAKKiAgICAgICAgbGltaXRlZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIERBIE5vbmUgUmF0ZSBMaW1pdAoqICAgICAgICAgICAgICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgICAgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjU2V0RGFOcmxFbgooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIElOICBHVF9CT09MICAgICAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY0dldERhTnJsRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIFNBIE5vbmUgUmF0ZSBMaW1pdCAoTlJMKSBtb2RlLgoqICAgICAgICBXaGVuIERBIE5STCBpcyBlbmFibGVkIGFuZCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBvZiBhIGZyYW1lIHJlc3VsdHMgaW4gCiogICAgICAgIGEgQVRVIGhpdCB3aGVyZSB0aGUgREEncyBNQUMgYWRkcmVzcyByZXR1cm5zIGFuIEVudHJ5U3RhdGUgdGhhdCBpbmRpY2F0ZXMgCiogICAgICAgIE5vbiBSYXRlIExpbWl0ZWQsIHRoZW4gdGhlIGZyYW1lIHdpbGwgbm90IGJlIGluZ3Jlc3Mgbm9yIGVncmVzcyByYXRlIAoqICAgICAgICBsaW1pdGVkLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIERBIE5vbmUgUmF0ZSBMaW1pdAoqICAgICAgICAgICAgICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgICAgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjR2V0RGFOcmxFbgooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNTZXRFTGltaXRNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBFZ3Jlc3MgUmF0ZSBMaW1pdCBjb3VudGluZyBtb2RlLgoqICAgICAgICBUaGUgc3VwcG9ydGVkIG1vZGVzIGFyZSBhcyBmb2xsb3dzOgoqICAgICAgICAgICAgR1RfUElSTF9FTElNSVRfRlJBTUUgLQoqICAgICAgICAgICAgICAgIENvdW50IHRoZSBudW1iZXIgb2YgZnJhbWVzCiogICAgICAgICAgICBHVF9QSVJMX0VMSU1JVF9MQVlFUjEgLQoqICAgICAgICAgICAgICAgIENvdW50IGFsbCBMYXllciAxIGJ5dGVzOiAKKiAgICAgICAgICAgICAgICBQcmVhbWJsZSAoOGJ5dGVzKSArIEZyYW1lJ3MgREEgdG8gQ1JDICsgSUZHICgxMmJ5dGVzKQoqICAgICAgICAgICAgR1RfUElSTF9FTElNSVRfTEFZRVIyIC0KKiAgICAgICAgICAgICAgICBDb3VudCBhbGwgTGF5ZXIgMiBieXRlczogRnJhbWUncyBEQSB0byBDUkMKKiAgICAgICAgICAgIEdUX1BJUkxfRUxJTUlUX0xBWUVSMSAtCiogICAgICAgICAgICAgICAgQ291bnQgYWxsIExheWVyIDEgYnl0ZXM6IAoqICAgICAgICAgICAgICAgIEZyYW1lJ3MgREEgdG8gQ1JDIC0gMTggLSA0IChpZiBmcmFtZSBpcyB0YWdnZWQpCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICAgbW9kZSAtIEdUX1BJUkxfRUxJTUlUX01PREUgZW51bSB0eXBlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgICAgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKiAgICAgICAgR1RfUElSTF9FTElNSVRfRlJBTUUgbW9kZSBpcyBzdXBwb3J0ZWQgYnkgb25seSBhIGZldyBkZXZpY2VzLgoqICAgICAgICBQbGVhc2UgcmVmZXIgdG8gdGhlIGRldmljZSBkYXRhc2hlZXQgZm9yIGRldGFpbHMuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY1NldEVMaW1pdE1vZGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgR1RfUElSTF9FTElNSVRfTU9ERSAgICAgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNHZXRFTGltaXRNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBFZ3Jlc3MgUmF0ZSBMaW1pdCBjb3VudGluZyBtb2RlLgoqICAgICAgICBUaGUgc3VwcG9ydGVkIG1vZGVzIGFyZSBhcyBmb2xsb3dzOgoqICAgICAgICAgICAgR1RfUElSTF9FTElNSVRfRlJBTUUgLQoqICAgICAgICAgICAgICAgIENvdW50IHRoZSBudW1iZXIgb2YgZnJhbWVzCiogICAgICAgICAgICBHVF9QSVJMX0VMSU1JVF9MQVlFUjEgLQoqICAgICAgICAgICAgICAgIENvdW50IGFsbCBMYXllciAxIGJ5dGVzOiAKKiAgICAgICAgICAgICAgICBQcmVhbWJsZSAoOGJ5dGVzKSArIEZyYW1lJ3MgREEgdG8gQ1JDICsgSUZHICgxMmJ5dGVzKQoqICAgICAgICAgICAgR1RfUElSTF9FTElNSVRfTEFZRVIyIC0KKiAgICAgICAgICAgICAgICBDb3VudCBhbGwgTGF5ZXIgMiBieXRlczogRnJhbWUncyBEQSB0byBDUkMKKiAgICAgICAgICAgIEdUX1BJUkxfRUxJTUlUX0xBWUVSMSAtCiogICAgICAgICAgICAgICAgQ291bnQgYWxsIExheWVyIDEgYnl0ZXM6IAoqICAgICAgICAgICAgICAgIEZyYW1lJ3MgREEgdG8gQ1JDIC0gMTggLSA0IChpZiBmcmFtZSBpcyB0YWdnZWQpCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgLSBHVF9QSVJMX0VMSU1JVF9NT0RFIGVudW0gdHlwZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEICAgIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCiogICAgICAgIEdUX1BJUkxfRUxJTUlUX0ZSQU1FIG1vZGUgaXMgc3VwcG9ydGVkIGJ5IG9ubHkgYSBmZXcgZGV2aWNlcy4KKiAgICAgICAgUGxlYXNlIHJlZmVyIHRvIHRoZSBkZXZpY2UgZGF0YXNoZWV0IGZvciBkZXRhaWxzLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNHZXRFTGltaXRNb2RlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX1BJUkxfRUxJTUlUX01PREUgICAgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY1NldFJzdmROcmxFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgUmVzZXJ2ZWQgTm9uIFJhdGUgTGltaXQuCiogICAgICAgIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIGZyYW1lcyB0aGF0IG1hdGNoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIAoqICAgICAgICBSc3ZkMkNwdSBiaXQgYmVsb3cgd2lsbCBhbHNvIGJlIGNvbnNpZGVyZWQgdG8gYmUgaW5ncmVzcyBhbmQgZWdyZXNzIG5vbiAKKiAgICAgICAgcmF0ZSBsaW1pdGVkLgoqCiogSU5QVVRTOgoqICAgICAgIGVuIC0gR1RfVFJVRSB0byBlbmFibGUgUmVzZXJ2ZWQgTm9uIFJhdGUgTGltaXQsCiogICAgICAgICAgICAgR1RfRkFMU0UgdG8gZGlzYWJsZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNTZXRSc3ZkTnJsRW4KKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0JPT0wgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNHZXRSc3ZkTnJsRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIFJlc2VydmVkIE5vbiBSYXRlIExpbWl0LgoqICAgICAgICBXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBmcmFtZXMgdGhhdCBtYXRjaCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSAKKiAgICAgICAgUnN2ZDJDcHUgYml0IGJlbG93IHdpbGwgYWxzbyBiZSBjb25zaWRlcmVkIHRvIGJlIGluZ3Jlc3MgYW5kIGVncmVzcyBub24gCiogICAgICAgIHJhdGUgbGltaXRlZC4KKgoqIElOUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgdG8gZW5hYmxlIFJlc2VydmVkIE5vbiBSYXRlIExpbWl0LAoqICAgICAgICAgICAgIEdUX0ZBTFNFIHRvIGRpc2FibGUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjR2V0UnN2ZE5ybEVuCigKICAgIElOICBHVF9RRF9ERVYgKmRldiwKICAgIE9VVCBHVF9CT09MICAgKmVuCik7CgoKLyogZ3RQb3J0Um1vbi5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdGF0c0dldFJlYWx0aW1lUG9ydENvdW50ZXIKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBhIHNwZWNpZmljIHJlYWx0aW1lIGNvdW50ZXIgb2YgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBjb3VudGVyIC0gdGhlIGNvdW50ZXIgd2hpY2ggd2lsbCBiZSByZWFkCioKKiBPVVRQVVRTOgoqICAgICAgICBzdGF0c0RhdGEgLSBwb2ludHMgdG8gMzJiaXQgZGF0YSBzdG9yYWdlIGZvciB0aGUgTUlCIGNvdW50ZXIKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdGF0c0dldFJlYWx0aW1lUG9ydENvdW50ZXIKKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIElOICBHVF9TVEFUU19DT1VOVEVSUzMgICAgY291bnRlciwKICAgIE9VVCBHVF9VMzIgICAgICAgICAgICAqc3RhdHNEYXRhCik7CgoKLyogZ3RRb3NNYXAuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zU2V0VklERlByaU92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldHMgVklEIEZyYW1lIFByaW9yaXR5IE92ZXJyaWRlLiBXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLAoqICAgICAgICBWSUQgRnJhbWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiB0aGlzIHBvcnQuCiogICAgICAgIFZJRCBGcmFtZSBwcmlvcml0eSBvdmVycmlkZSBvY2N1cnMgd2hlbiB0aGUgZGV0ZXJtaW5lZCBWSUQgb2YgYSBmcmFtZSAKKiAgICAgICAgcmVzdWx0cyBpbiBhIFZUVSBlbnRyeSB3aG9zZSB1c2VWSURGUHJpIG92ZXJyaWRlIGZpZWxkIGlzIHNldCB0byBHVF9UUlVFLgoqICAgICAgICBXaGVuIHRoaXMgb2NjdXJzIHRoZSBWSURGUHJpIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIFZJRCAoaW4gdGhlIAoqICAgICAgICBWVFUgVGFibGUpIGlzIHVzZWQgdG8gb3ZlcndyaXRlIHRoZSBmcmFtZSdzIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBmcmFtZSAKKiAgICAgICAgcHJpb3JpdHkuIElmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQgdGhlIHByaW9yaXR5IGluIHRoZSBmcmFtZSB3aWxsIGJlCiogICAgICAgIHRoaXMgbmV3IFZJREZQcmkgdmFsdWUuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYWZmZWN0IHRoZSBlZ3Jlc3MgcXVldWUKKiAgICAgICAgcHJpb3JpdHkgKFFQcmkpIHRoZSBmcmFtZSBpcyBzd2l0Y2hlZCBpbnRvLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgIG1vZGUgLSBHVF9UUlVFIGZvciBWSUQgRnJhbWUgUHJpb3JpdHkgT3ZlcnJpZGUsCiogICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zU2V0VklERlByaU92ZXJyaWRlCigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgICAgIHBvcnQsCiAgICBJTiBHVF9CT09MICAgICAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NHZXRWSURGUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBWSUQgRnJhbWUgUHJpb3JpdHkgT3ZlcnJpZGUuIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsCiogICAgICAgIFZJRCBGcmFtZSBwcmlvcml0eSBvdmVycmlkZXMgY2FuIG9jY3VyIG9uIHRoaXMgcG9ydC4KKiAgICAgICAgVklEIEZyYW1lIHByaW9yaXR5IG92ZXJyaWRlIG9jY3VycyB3aGVuIHRoZSBkZXRlcm1pbmVkIFZJRCBvZiBhIGZyYW1lIAoqICAgICAgICByZXN1bHRzIGluIGEgVlRVIGVudHJ5IHdob3NlIHVzZVZJREZQcmkgb3ZlcnJpZGUgZmllbGQgaXMgc2V0IHRvIEdUX1RSVUUuCiogICAgICAgIFdoZW4gdGhpcyBvY2N1cnMgdGhlIFZJREZQcmkgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgVklEIChpbiB0aGUgCiogICAgICAgIFZUVSBUYWJsZSkgaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIGZyYW1lIAoqICAgICAgICBwcmlvcml0eS4gSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgYmUKKiAgICAgICAgdGhpcyBuZXcgVklERlByaSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIGVncmVzcyBxdWV1ZQoqICAgICAgICBwcmlvcml0eSAoUVByaSkgdGhlIGZyYW1lIGlzIHN3aXRjaGVkIGludG8uCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgLSBHVF9UUlVFIGZvciBWSUQgRnJhbWUgUHJpb3JpdHkgT3ZlcnJpZGUsCiogICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NHZXRWSURGUHJpT3ZlcnJpZGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICAgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc1NldFNBRlByaU92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldHMgU291cmNlIEFkZHJlc3MoU0EpIEZyYW1lIFByaW9yaXR5IE92ZXJyaWRlLiAKKiAgICAgICAgV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgU0EgRnJhbWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiAKKiAgICAgICAgdGhpcyBwb3J0LgoqICAgICAgICBTQSBBVFUgRnJhbWUgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzIHdoZW4gdGhlIGRldGVybWluZWQgc291cmNlIGFkZHJlc3MKKiAgICAgICAgb2YgYSBmcmFtZSByZXN1bHRzIGluIGFuIEFUVSBoaXQgd2hlcmUgdGhlIFNBJ3MgTUFDIGFkZHJlc3MgZW50cnkgY29udGFpbnMgCiogICAgICAgIHRoZSB1c2VBVFVGUHJpIGZpZWxkIHNldCB0byBHVF9UUlVFLgoqICAgICAgICBXaGVuIHRoaXMgb2NjdXJzIHRoZSBBVFVGUHJpIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIFNBIChpbiB0aGUgCiogICAgICAgIEFUVSBUYWJsZSkgaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIGZyYW1lIAoqICAgICAgICBwcmlvcml0eS4gSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgYmUKKiAgICAgICAgdGhpcyBuZXcgQVRVRlByaSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIGVncmVzcyBxdWV1ZQoqICAgICAgICBwcmlvcml0eSAoUVByaSkgdGhlIGZyYW1lIGlzIHN3aXRjaGVkIGludG8uCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgZm9yIFNBIEZyYW1lIFByaW9yaXR5IE92ZXJyaWRlLAoqICAgICAgICAgICAgICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc1NldFNBRlByaU92ZXJyaWRlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgSU4gIEdUX0JPT0wgICAgICAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc0dldFNBRlByaU92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGdldHMgU291cmNlIEFkZHJlc3MoU0EpIEZyYW1lIFByaW9yaXR5IE92ZXJyaWRlLiAKKiAgICAgICAgV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgU0EgRnJhbWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiAKKiAgICAgICAgdGhpcyBwb3J0LgoqICAgICAgICBTQSBBVFUgRnJhbWUgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzIHdoZW4gdGhlIGRldGVybWluZWQgc291cmNlIGFkZHJlc3MKKiAgICAgICAgb2YgYSBmcmFtZSByZXN1bHRzIGluIGFuIEFUVSBoaXQgd2hlcmUgdGhlIFNBJ3MgTUFDIGFkZHJlc3MgZW50cnkgY29udGFpbnMgCiogICAgICAgIHRoZSB1c2VBVFVGUHJpIGZpZWxkIHNldCB0byBHVF9UUlVFLgoqICAgICAgICBXaGVuIHRoaXMgb2NjdXJzIHRoZSBBVFVGUHJpIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIFNBIChpbiB0aGUgCiogICAgICAgIEFUVSBUYWJsZSkgaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIGZyYW1lIAoqICAgICAgICBwcmlvcml0eS4gSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgYmUKKiAgICAgICAgdGhpcyBuZXcgQVRVRlByaSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIGVncmVzcyBxdWV1ZQoqICAgICAgICBwcmlvcml0eSAoUVByaSkgdGhlIGZyYW1lIGlzIHN3aXRjaGVkIGludG8uCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgLSBHVF9UUlVFIGZvciBTQSBGcmFtZSBQcmlvcml0eSBPdmVycmlkZSwKKiAgICAgICAgICAgICAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldFNBRlByaU92ZXJyaWRlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NTZXREQUZQcmlPdmVycmlkZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBzZXRzIERlc3RpbmF0aW9uIEFkZHJlc3MoREEpIEZyYW1lIFByaW9yaXR5IE92ZXJyaWRlLiAKKiAgICAgICAgV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgREEgRnJhbWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiAKKiAgICAgICAgdGhpcyBwb3J0LgoqICAgICAgICBEQSBBVFUgRnJhbWUgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzIHdoZW4gdGhlIGRldGVybWluZWQgZGVzdGluYXRpb24gYWRkcmVzcwoqICAgICAgICBvZiBhIGZyYW1lIHJlc3VsdHMgaW4gYW4gQVRVIGhpdCB3aGVyZSB0aGUgREEncyBNQUMgYWRkcmVzcyBlbnRyeSBjb250YWlucyAKKiAgICAgICAgdGhlIHVzZUFUVUZQcmkgZmllbGQgc2V0IHRvIEdUX1RSVUUuCiogICAgICAgIFdoZW4gdGhpcyBvY2N1cnMgdGhlIEFUVUZQcmkgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgREEgKGluIHRoZSAKKiAgICAgICAgQVRVIFRhYmxlKSBpcyB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgZnJhbWUncyBwcmV2aW91c2x5IGRldGVybWluZWQgZnJhbWUgCiogICAgICAgIHByaW9yaXR5LiBJZiB0aGUgZnJhbWUgZWdyZXNzZXMgdGFnZ2VkIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBiZQoqICAgICAgICB0aGlzIG5ldyBBVFVGUHJpIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgZWdyZXNzIHF1ZXVlCiogICAgICAgIHByaW9yaXR5IChRUHJpKSB0aGUgZnJhbWUgaXMgc3dpdGNoZWQgaW50by4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBtb2RlIC0gR1RfVFJVRSBmb3IgREEgRnJhbWUgUHJpb3JpdHkgT3ZlcnJpZGUsCiogICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zU2V0REFGUHJpT3ZlcnJpZGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgR1RfQk9PTCAgICAgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zR2V0REFGUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBEZXN0aW5hdGlvbiBBZGRyZXNzKERBKSBGcmFtZSBQcmlvcml0eSBPdmVycmlkZS4gCiogICAgICAgIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIERBIEZyYW1lIHByaW9yaXR5IG92ZXJyaWRlcyBjYW4gb2NjdXIgb24gCiogICAgICAgIHRoaXMgcG9ydC4KKiAgICAgICAgREEgQVRVIEZyYW1lIHByaW9yaXR5IG92ZXJyaWRlIG9jY3VycyB3aGVuIHRoZSBkZXRlcm1pbmVkIGRlc3RpbmF0aW9uIGFkZHJlc3MKKiAgICAgICAgb2YgYSBmcmFtZSByZXN1bHRzIGluIGFuIEFUVSBoaXQgd2hlcmUgdGhlIERBJ3MgTUFDIGFkZHJlc3MgZW50cnkgY29udGFpbnMgCiogICAgICAgIHRoZSB1c2VBVFVGUHJpIGZpZWxkIHNldCB0byBHVF9UUlVFLgoqICAgICAgICBXaGVuIHRoaXMgb2NjdXJzIHRoZSBBVFVGUHJpIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIERBIChpbiB0aGUgCiogICAgICAgIEFUVSBUYWJsZSkgaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIGZyYW1lIAoqICAgICAgICBwcmlvcml0eS4gSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgYmUKKiAgICAgICAgdGhpcyBuZXcgQVRVRlByaSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIGVncmVzcyBxdWV1ZQoqICAgICAgICBwcmlvcml0eSAoUVByaSkgdGhlIGZyYW1lIGlzIHN3aXRjaGVkIGludG8uCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgLSBHVF9UUlVFIGZvciBEQSBGcmFtZSBQcmlvcml0eSBPdmVycmlkZSwKKiAgICAgICAgICAgICAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldERBRlByaU92ZXJyaWRlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NTZXRWSURRUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBWSUQgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUuIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsCiogICAgICAgIFZJRCBRdWV1ZSBwcmlvcml0eSBvdmVycmlkZXMgY2FuIG9jY3VyIG9uIHRoaXMgcG9ydC4KKiAgICAgICAgVklEIFF1ZXVlIHByaW9yaXR5IG92ZXJyaWRlIG9jY3VycyB3aGVuIHRoZSBkZXRlcm1pbmVkIFZJRCBvZiBhIGZyYW1lIAoqICAgICAgICByZXN1bHRzIGluIGEgVlRVIGVudHJ5IHdob3NlIHVzZVZJRFFQcmkgb3ZlcnJpZGUgZmllbGQgaXMgc2V0IHRvIEdUX1RSVUUuCiogICAgICAgIFdoZW4gdGhpcyBvY2N1cnMgdGhlIFZJRFFQcmkgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgVklEIChpbiB0aGUgCiogICAgICAgIFZUVSBUYWJsZSkgaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIHF1ZXVlIAoqICAgICAgICBwcmlvcml0eS4gSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgbm90CiogICAgICAgIGJlIG1vZGlmaWVkIGJ5IHRoaXMgbmV3IFZJRFFQcmkgdmFsdWUuIFRoaXMgZnVuY3Rpb24gYWZmZWN0cyB0aGUgZWdyZXNzCiogICAgICAgIHF1ZXVlIHByaW9yaXR5IChRUHJpKSB0aGUgZnJhbWUgaXMgc3dpdGNoZWQgaW50by4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBtb2RlIC0gR1RfVFJVRSBmb3IgVklEIFF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlLAoqICAgICAgICAgICAgICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc1NldFZJRFFQcmlPdmVycmlkZQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgSU4gR1RfQk9PTCAgICAgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zR2V0VklEUVByaU92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGdldHMgVklEIFF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlLiBXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLAoqICAgICAgICBWSUQgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiB0aGlzIHBvcnQuCiogICAgICAgIFZJRCBRdWV1ZSBwcmlvcml0eSBvdmVycmlkZSBvY2N1cnMgd2hlbiB0aGUgZGV0ZXJtaW5lZCBWSUQgb2YgYSBmcmFtZSAKKiAgICAgICAgcmVzdWx0cyBpbiBhIFZUVSBlbnRyeSB3aG9zZSB1c2VWSURRUHJpIG92ZXJyaWRlIGZpZWxkIGlzIHNldCB0byBHVF9UUlVFLgoqICAgICAgICBXaGVuIHRoaXMgb2NjdXJzIHRoZSBWSURRUHJpIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIFZJRCAoaW4gdGhlIAoqICAgICAgICBWVFUgVGFibGUpIGlzIHVzZWQgdG8gb3ZlcndyaXRlIHRoZSBmcmFtZSdzIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBxdWV1ZSAKKiAgICAgICAgcHJpb3JpdHkuIElmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQgdGhlIHByaW9yaXR5IGluIHRoZSBmcmFtZSB3aWxsIG5vdAoqICAgICAgICBiZSBtb2RpZmllZCBieSB0aGlzIG5ldyBWSURRUHJpIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIGFmZmVjdHMgdGhlIGVncmVzcwoqICAgICAgICBxdWV1ZSBwcmlvcml0eSAoUVByaSkgdGhlIGZyYW1lIGlzIHN3aXRjaGVkIGludG8uCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgLSBHVF9UUlVFIGZvciBWSUQgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUsCiogICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NHZXRWSURRUHJpT3ZlcnJpZGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICAgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc1NldFNBUVByaU92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldHMgU291cmNlIEFkZHJlc3MoU0EpIFF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlLiAKKiAgICAgICAgV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgU0EgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiAKKiAgICAgICAgdGhpcyBwb3J0LgoqICAgICAgICBTQSBBVFUgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzIHdoZW4gdGhlIGRldGVybWluZWQgc291cmNlIGFkZHJlc3MKKiAgICAgICAgb2YgYSBmcmFtZSByZXN1bHRzIGluIGFuIEFUVSBoaXQgd2hlcmUgdGhlIFNBJ3MgTUFDIGFkZHJlc3MgZW50cnkgY29udGFpbnMgCiogICAgICAgIHRoZSB1c2VBVFVRUHJpIGZpZWxkIHNldCB0byBHVF9UUlVFLgoqICAgICAgICBXaGVuIHRoaXMgb2NjdXJzIHRoZSBBVFVRUHJpIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIFNBIChpbiB0aGUgCiogICAgICAgIEFUVSBUYWJsZSkgaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIHF1ZXVlIAoqICAgICAgICBwcmlvcml0eS4gSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgbm90CiogICAgICAgIGJlIG1vZGlmaWVkIGJ5IHRoaXMgbmV3IEFUVVFQcmkgdmFsdWUuIFRoaXMgZnVuY3Rpb24gYWZmZWN0cyB0aGUgZWdyZXNzCiogICAgICAgIHF1ZXVlIHByaW9yaXR5IChRUHJpKSB0aGUgZnJhbWUgaXMgc3dpdGNoZWQgaW50by4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBtb2RlIC0gR1RfVFJVRSBmb3IgU0EgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUsCiogICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zU2V0U0FRUHJpT3ZlcnJpZGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgR1RfQk9PTCAgICAgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zR2V0U0FRUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBTb3VyY2UgQWRkcmVzcyhTQSkgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUuIAoqICAgICAgICBXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBTQSBRdWV1ZSBwcmlvcml0eSBvdmVycmlkZXMgY2FuIG9jY3VyIG9uIAoqICAgICAgICB0aGlzIHBvcnQuCiogICAgICAgIFNBIEFUVSBRdWV1ZSBwcmlvcml0eSBvdmVycmlkZSBvY2N1cnMgd2hlbiB0aGUgZGV0ZXJtaW5lZCBzb3VyY2UgYWRkcmVzcwoqICAgICAgICBvZiBhIGZyYW1lIHJlc3VsdHMgaW4gYW4gQVRVIGhpdCB3aGVyZSB0aGUgU0EncyBNQUMgYWRkcmVzcyBlbnRyeSBjb250YWlucyAKKiAgICAgICAgdGhlIHVzZUFUVVFQcmkgZmllbGQgc2V0IHRvIEdUX1RSVUUuCiogICAgICAgIFdoZW4gdGhpcyBvY2N1cnMgdGhlIEFUVVFQcmkgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgU0EgKGluIHRoZSAKKiAgICAgICAgQVRVIFRhYmxlKSBpcyB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgZnJhbWUncyBwcmV2aW91c2x5IGRldGVybWluZWQgcXVldWUgCiogICAgICAgIHByaW9yaXR5LiBJZiB0aGUgZnJhbWUgZWdyZXNzZXMgdGFnZ2VkIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBub3QKKiAgICAgICAgYmUgbW9kaWZpZWQgYnkgdGhpcyBuZXcgQVRVUVByaSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBhZmZlY3RzIHRoZSBlZ3Jlc3MKKiAgICAgICAgcXVldWUgcHJpb3JpdHkgKFFQcmkpIHRoZSBmcmFtZSBpcyBzd2l0Y2hlZCBpbnRvLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgICBtb2RlIC0gR1RfVFJVRSBmb3IgU0EgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUsCiogICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NHZXRTQVFQcmlPdmVycmlkZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zU2V0REFRUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBEZXN0aW5hdGlvbiBBZGRyZXNzKERBKSBRdWV1ZSBQcmlvcml0eSBPdmVycmlkZS4gCiogICAgICAgIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIERBIFF1ZXVlIHByaW9yaXR5IG92ZXJyaWRlcyBjYW4gb2NjdXIgb24gCiogICAgICAgIHRoaXMgcG9ydC4KKiAgICAgICAgREEgQVRVIFF1ZXVlIHByaW9yaXR5IG92ZXJyaWRlIG9jY3VycyB3aGVuIHRoZSBkZXRlcm1pbmVkIGRlc3RpbmF0aW9uIGFkZHJlc3MKKiAgICAgICAgb2YgYSBmcmFtZSByZXN1bHRzIGluIGFuIEFUVSBoaXQgd2hlcmUgdGhlIERBJ3MgTUFDIGFkZHJlc3MgZW50cnkgY29udGFpbnMgCiogICAgICAgIHRoZSB1c2VBVFVRUHJpIGZpZWxkIHNldCB0byBHVF9UUlVFLgoqICAgICAgICBXaGVuIHRoaXMgb2NjdXJzIHRoZSBBVFVRUHJpIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIERBIChpbiB0aGUgCiogICAgICAgIEFUVSBUYWJsZSkgaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIHF1ZXVlCiogICAgICAgIHByaW9yaXR5LiBJZiB0aGUgZnJhbWUgZWdyZXNzZXMgdGFnZ2VkIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBub3QKKiAgICAgICAgYmUgbW9kaWZpZWQgYnkgdGhpcyBuZXcgQVRVUVByaSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBhZmZlY3RzIHRoZSBlZ3Jlc3MKKiAgICAgICAgcXVldWUgcHJpb3JpdHkgKFFQcmkpIHRoZSBmcmFtZSBpcyBzd2l0Y2hlZCBpbnRvLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgIG1vZGUgLSBHVF9UUlVFIGZvciBEQSBRdWV1ZSBQcmlvcml0eSBPdmVycmlkZSwKKiAgICAgICAgICAgICAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NTZXREQVFQcmlPdmVycmlkZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIElOICBHVF9CT09MICAgICAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NHZXREQVFQcmlPdmVycmlkZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBzZXRzIERlc3RpbmF0aW9uIEFkZHJlc3MoREEpIFF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlLiAKKiAgICAgICAgV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgREEgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiAKKiAgICAgICAgdGhpcyBwb3J0LgoqICAgICAgICBEQSBBVFUgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzIHdoZW4gdGhlIGRldGVybWluZWQgZGVzdGluYXRpb24gYWRkcmVzcwoqICAgICAgICBvZiBhIGZyYW1lIHJlc3VsdHMgaW4gYW4gQVRVIGhpdCB3aGVyZSB0aGUgREEncyBNQUMgYWRkcmVzcyBlbnRyeSBjb250YWlucyAKKiAgICAgICAgdGhlIHVzZUFUVVFQcmkgZmllbGQgc2V0IHRvIEdUX1RSVUUuCiogICAgICAgIFdoZW4gdGhpcyBvY2N1cnMgdGhlIEFUVVFQcmkgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgREEgKGluIHRoZSAKKiAgICAgICAgQVRVIFRhYmxlKSBpcyB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgZnJhbWUncyBwcmV2aW91c2x5IGRldGVybWluZWQgcXVldWUKKiAgICAgICAgcHJpb3JpdHkuIElmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQgdGhlIHByaW9yaXR5IGluIHRoZSBmcmFtZSB3aWxsIG5vdAoqICAgICAgICBiZSBtb2RpZmllZCBieSB0aGlzIG5ldyBBVFVRUHJpIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIGFmZmVjdHMgdGhlIGVncmVzcwoqICAgICAgICBxdWV1ZSBwcmlvcml0eSAoUVByaSkgdGhlIGZyYW1lIGlzIHN3aXRjaGVkIGludG8uCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgLSBHVF9UUlVFIGZvciBEQSBRdWV1ZSBQcmlvcml0eSBPdmVycmlkZSwKKiAgICAgICAgICAgICAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldERBUVByaU92ZXJyaWRlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NTZXRBUlBRUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBBUlAgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUuIAoqICAgICAgICBXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBBUlAgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiAKKiAgICAgICAgdGhpcyBwb3J0LgoqICAgICAgICBBUlAgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzIGZvciBhbGwgQVJQIGZyYW1lcy4KKiAgICAgICAgV2hlbiB0aGlzIG9jY3VycywgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIGVncmVzcyBxdWV1ZSBwcmlvcml0eQoqICAgICAgICB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggQXJwUVByaS4KKiAgICAgICAgSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgbm90CiogICAgICAgIGJlIG1vZGlmaWVkLiBXaGVuIHVzZWQsIHRoZSB0d28gYml0cyBvZiB0aGUgQXJwUVByaSBwcmlvcml0eSBkZXRlcm1pbmUgdGhlCiogICAgICAgIGVncmVzcyBxdWV1ZSB0aGUgZnJhbWUgaXMgc3dpdGNoZWQgaW50by4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBtb2RlIC0gR1RfVFJVRSBmb3IgQVJQIFF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlLAoqICAgICAgICAgICAgICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc1NldEFSUFFQcmlPdmVycmlkZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIElOICBHVF9CT09MICAgICAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NHZXRBUlBRUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBBUlAgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUuIAoqICAgICAgICBXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBBUlAgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiAKKiAgICAgICAgdGhpcyBwb3J0LgoqICAgICAgICBBUlAgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzIGZvciBhbGwgQVJQIGZyYW1lcy4KKiAgICAgICAgV2hlbiB0aGlzIG9jY3VycywgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIGVncmVzcyBxdWV1ZSBwcmlvcml0eQoqICAgICAgICB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggQXJwUVByaS4KKiAgICAgICAgSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgbm90CiogICAgICAgIGJlIG1vZGlmaWVkLiBXaGVuIHVzZWQsIHRoZSB0d28gYml0cyBvZiB0aGUgQXJwUVByaSBwcmlvcml0eSBkZXRlcm1pbmUgdGhlCiogICAgICAgIGVncmVzcyBxdWV1ZSB0aGUgZnJhbWUgaXMgc3dpdGNoZWQgaW50by4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgZm9yIEFSUCBRdWV1ZSBQcmlvcml0eSBPdmVycmlkZSwKKiAgICAgICAgICAgICAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldEFSUFFQcmlPdmVycmlkZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgICAqbW9kZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc1NldFFQcmlWYWx1ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgUXVldWUgcHJpb3JpdHkgdmFsdWUgdG8gdXNlZCB3aGVuIGZvcmNlZC4KKiAgICAgICAgV2hlbiBGb3JjZVFQcmkgaXMgZW5hYmxlZCAoZ3Fvc1NldEZvcmNlUVByaSksIGFsbCBmcmFtZXMgZW50ZXJpbmcgdGhpcyBwb3J0CiogICAgICAgIGFyZSBtYXBwZWQgdG8gdGhlIHByaW9yaXR5IHF1ZXVlIGRlZmluZWQgaW4gdGhpcyB2YWx1ZSwgdW5sZXNzIGEgVlRVLCBTQSwKKiAgICAgICAgREEgb3IgQVJQIHByaW9yaXR5IG92ZXJyaWRlIG9jY3Vycy4gVGhlIEZyYW1lJ3MgcHJpb3JpdHkgKEZQcmkpIGlzIG5vdAoqICAgICAgICBlZmZlY3RlZCBieSB0aGlzIHZhbHVlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBwcmkgIC0gUXVldWUgcHJpb3JpdHkgdmFsdWUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgcHJpID4gMwoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zU2V0UVByaVZhbHVlCigKICAgIElOICBHVF9RRF9ERVYgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICBwb3J0LAogICAgSU4gIEdUX1U4ICAgICAgcHJpCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NHZXRRUHJpVmFsdWUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIFF1ZXVlIHByaW9yaXR5IHZhbHVlIHRvIHVzZWQgd2hlbiBmb3JjZWQuCiogICAgICAgIFdoZW4gRm9yY2VRUHJpIGlzIGVuYWJsZWQgKGdxb3NTZXRGb3JjZVFQcmkpLCBhbGwgZnJhbWVzIGVudGVyaW5nIHRoaXMgcG9ydAoqICAgICAgICBhcmUgbWFwcGVkIHRvIHRoZSBwcmlvcml0eSBxdWV1ZSBkZWZpbmVkIGluIHRoaXMgdmFsdWUsIHVubGVzcyBhIFZUVSwgU0EsCiogICAgICAgIERBIG9yIEFSUCBwcmlvcml0eSBvdmVycmlkZSBvY2N1cnMuIFRoZSBGcmFtZSdzIHByaW9yaXR5IChGUHJpKSBpcyBub3QKKiAgICAgICAgZWZmZWN0ZWQgYnkgdGhpcyB2YWx1ZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIHByaSAgLSBRdWV1ZSBwcmlvcml0eSB2YWx1ZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zR2V0UVByaVZhbHVlCigKICAgIElOICBHVF9RRF9ERVYgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICBwb3J0LAogICAgT1VUIEdUX1U4ICAgICAgKnByaQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zU2V0Rm9yY2VRUHJpCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZW5hYmxlcy9kaXNhYmxlcyBmb3JjaW5nIFF1ZXVlIHByaW9yaXR5LgoqICAgICAgICBXaGVuIEZvcmNlUVByaSBpcyBkaXNhYmxlZCwgbm9ybWFsIHByaW9yaXR5IHF1ZXVlIG1hcHBpbmcgaXMgdXNlZCBvbiBhbGwgCiogICAgICAgIGluZ3Jlc3NpbmcgZnJhbWVzIGVudGVyaW5nIHRoaXMgcG9ydC4gV2hlbiBpdCdzIGVuYWJsZWQsIGFsbCBmcmFtZXMKKiAgICAgICAgZW50ZXJpbmcgdGhpcyBwb3J0IGFyZSBtYXBwZWQgdG8gdGhlIFFQcmlWYWx1ZSAoZ3Fvc1NldFFQcmlWYWx1ZSksIHVubGVzcwoqICAgICAgICBhIFZUVSwgU0EsIERBIG9yIEFSUCBwcmlvcml0eSBvdmVycmlkZSBvY2N1cnMuIFRoZSBmcmFtZSdzIHByaW9ydHkgKEZQcmkpCiogICAgICAgIGlzIG5vdCBlZmZlY3RlZCBieSB0aGlzIGZlYXR1cmUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIGVuICAgLSBHVF9UUlVFLCB0byBmb3JjZSBRdWV1ZSBQcmlvcml0eSwKKiAgICAgICAgICAgICAgIEdUX0ZBTFNFLCBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NTZXRGb3JjZVFQcmkKKAogICAgSU4gIEdUX1FEX0RFViAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgIHBvcnQsCiAgICBJTiAgR1RfQk9PTCAgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zR2V0Rm9yY2VRUHJpCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgY2hlY2tzIGlmIGZvcmNpbmcgUXVldWUgcHJpb3JpdHkgaXMgZW5hYmxlZC4KKiAgICAgICAgV2hlbiBGb3JjZVFQcmkgaXMgZGlzYWJsZWQsIG5vcm1hbCBwcmlvcml0eSBxdWV1ZSBtYXBwaW5nIGlzIHVzZWQgb24gYWxsIAoqICAgICAgICBpbmdyZXNzaW5nIGZyYW1lcyBlbnRlcmluZyB0aGlzIHBvcnQuIFdoZW4gaXQncyBlbmFibGVkLCBhbGwgZnJhbWVzCiogICAgICAgIGVudGVyaW5nIHRoaXMgcG9ydCBhcmUgbWFwcGVkIHRvIHRoZSBRUHJpVmFsdWUgKGdxb3NTZXRRUHJpVmFsdWUpLCB1bmxlc3MKKiAgICAgICAgYSBWVFUsIFNBLCBEQSBvciBBUlAgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzLiBUaGUgZnJhbWUncyBwcmlvcnR5IChGUHJpKQoqICAgICAgICBpcyBub3QgZWZmZWN0ZWQgYnkgdGhpcyBmZWF0dXJlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgZW4gICAtIEdUX1RSVUUsIHRvIGZvcmNlIFF1ZXVlIFByaW9yaXR5LAoqICAgICAgICAgICAgICAgR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldEZvcmNlUVByaQooCiAgICBJTiAgR1RfUURfREVWICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zU2V0RGVmRlByaQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIGRlZmF1bHQgZnJhbWUgcHJpb3JpdHkgKDAgfiA3KS4KKiAgICAgICAgVGhpcyBwcmlvcml0eSBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0IGZyYW1lIHByaW9yaXR5IChGUHJpKSB0byB1c2Ugd2hlbiAKKiAgICAgICAgbm8gb3RoZXIgcHJpb3JpdHkgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgIHByaSAgLSBkZWZhdWx0IGZyYW1lIHByaW9yaXR5CioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIHByaSA+IDcKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc1NldERlZkZQcmkKKAogICAgSU4gIEdUX1FEX0RFViAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgIHBvcnQsCiAgICBJTiAgR1RfVTggICAgICBwcmkKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc0dldERlZkZQcmkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSBkZWZhdWx0IGZyYW1lIHByaW9yaXR5ICgwIH4gNykuCiogICAgICAgIFRoaXMgcHJpb3JpdHkgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCBmcmFtZSBwcmlvcml0eSAoRlByaSkgdG8gdXNlIHdoZW4gCiogICAgICAgIG5vIG90aGVyIHByaW9yaXR5IGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CiogICAgICAgcHJpICAtIGRlZmF1bHQgZnJhbWUgcHJpb3JpdHkKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldERlZkZQcmkKKAogICAgSU4gIEdUX1FEX0RFViAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgIHBvcnQsCiAgICBPVVQgR1RfVTggICAgICAqcHJpCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zU2V0QXJwUVByaQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgQVJQIHF1ZXVlIFByaW9yaXR5IHRvIHVzZSBmb3IgQVJQIFFQcmkgT3ZlcnJpZGRlbiAKKiAgICAgICAgZnJhbWVzLiBXaGVuIGEgQVJQIGZyYW1lIGlzIHJlY2VpdmVkIG9uIGEgcG9yIHR0aGF0IGhhcyBpdHMgQVJQIAoqICAgICAgICBRUHJpT1ZlcnJpZGUgaXMgZW5hYmxlZCwgdGhlIFFQcmkgYXNzaWduZWQgdG8gdGhlIGZyYW1lIGNvbWVzIGZyb20KKiAgICAgICAgdGhpcyB2YWx1ZQoqCiogSU5QVVRTOgoqICAgICAgIHByaSAtIEFSUCBRdWV1ZSBQcmlvcml0eSAoMCB+IDMpCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIHByaSA+IDMKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc1NldEFycFFQcmkKKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX1U4ICAgICBwcmkKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NHZXRBcnBRUHJpCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBBUlAgcXVldWUgUHJpb3JpdHkgdG8gdXNlIGZvciBBUlAgUVByaSBPdmVycmlkZGVuIAoqICAgICAgICBmcmFtZXMuIFdoZW4gYSBBUlAgZnJhbWUgaXMgcmVjZWl2ZWQgb24gYSBwb3IgdHRoYXQgaGFzIGl0cyBBUlAgCiogICAgICAgIFFQcmlPVmVycmlkZSBpcyBlbmFibGVkLCB0aGUgUVByaSBhc3NpZ25lZCB0byB0aGUgZnJhbWUgY29tZXMgZnJvbQoqICAgICAgICB0aGlzIHZhbHVlCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgcHJpIC0gQVJQIFF1ZXVlIFByaW9yaXR5ICgwIH4gMykKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldEFycFFQcmkKKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgT1VUIEdUX1U4ICAgICAqcHJpCik7CgoKLyogZ3RTeXNDdHJsLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFVzZVBvcnRTY2hlZHVsZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgcGVyIHBvcnQgc2NoZWR1bGluZyBtb2RlCioKKiBJTlBVVFM6CiogICAgICAgZW4gLSBHVF9UUlVFIGVuYWJsZXMgcGVyIHBvcnQgc2NoZWR1bGluZywgCiogICAgICAgICAgICAgR1RfRkFMU0UgZGlzYWJsZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRVc2VQb3J0U2NoZWR1bGUKKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0JPT0wgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0VXNlUG9ydFNjaGVkdWxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBwZXIgcG9ydCBzY2hlZHVsaW5nIG1vZGUKKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgZW5hYmxlcyBwZXIgcG9ydCBzY2hlZHVsaW5nLCAKKiAgICAgICAgICAgICBHVF9GQUxTRSBkaXNhYmxlLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFVzZVBvcnRTY2hlZHVsZQooCiAgICBJTiAgR1RfUURfREVWICpkZXYsCiAgICBPVVQgR1RfQk9PTCAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0T2xkSGFkZXIKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIEVncmVzcyBPbGQgSGVhZGVyLgoqICAgICAgICBXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIGFuZCBmcmFtZXMgYXJlIGVncmVzc2VkIHdpdGggYSBNYXJ2ZWxsIEhlYWRlciwgCiogICAgICAgIHRoZSBmb3JtYXQgb2YgdGhlIEhlYWRlciBpcyBzbGlnaHRseSBtb2RpZmllZCB0byBiZSBiYWNrd2FyZHMgY29tcGF0aWJsZSAKKiAgICAgICAgd2l0aCBwcmV2aW91cyBkZXZpY2VzIHRoYXQgdXNlZCB0aGUgb3JpZ2luYWwgSGVhZGVyLiBTcGVjaWZpY2FsbHksIGJpdCAzCiogICAgICAgIG9mIHRoZSBIZWFkZXIncyAybmQgb2N0ZXQgaXMgY2xlYXJlZCB0byBhIHplcm8gc3VjaCB0aGF0IG9ubHkgRlByaVsyOjFdCiogICAgICAgIGlzIGF2YWlsYWJsZSBpbiB0aGUgSGVhZGVyLgoqCiogSU5QVVRTOgoqICAgICAgIGVuIC0gR1RfVFJVRSB0byBlbmFibGUgT2xkIEhlYWRlciBNb2RlLAoqICAgICAgICAgICAgIEdUX0ZBTFNFIHRvIGRpc2FibGUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldE9sZEhhZGVyCigKICAgIElOICBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9CT09MICAgZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldE9sZEhhZGVyCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBFZ3Jlc3MgT2xkIEhlYWRlci4KKiAgICAgICAgV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgZnJhbWVzIGFyZSBlZ3Jlc3NlZCB3aXRoIGEgTWFydmVsbCBIZWFkZXIsIAoqICAgICAgICB0aGUgZm9ybWF0IG9mIHRoZSBIZWFkZXIgaXMgc2xpZ2h0bHkgbW9kaWZpZWQgdG8gYmUgYmFja3dhcmRzIGNvbXBhdGlibGUgCiogICAgICAgIHdpdGggcHJldmlvdXMgZGV2aWNlcyB0aGF0IHVzZWQgdGhlIG9yaWdpbmFsIEhlYWRlci4gU3BlY2lmaWNhbGx5LCBiaXQgMwoqICAgICAgICBvZiB0aGUgSGVhZGVyJ3MgMm5kIG9jdGV0IGlzIGNsZWFyZWQgdG8gYSB6ZXJvIHN1Y2ggdGhhdCBvbmx5IEZQcmlbMjoxXQoqICAgICAgICBpcyBhdmFpbGFibGUgaW4gdGhlIEhlYWRlci4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgdG8gZW5hYmxlIE9sZCBIZWFkZXIgTW9kZSwKKiAgICAgICAgICAgICBHVF9GQUxTRSB0byBkaXNhYmxlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRPbGRIYWRlcgooCiAgICBJTiAgR1RfUURfREVWICpkZXYsCiAgICBPVVQgR1RfQk9PTCAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UmVjdXJzaXZlU3RyaXBwaW5nRGlzYWJsZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGRldGVybWluZXMgaWYgcmVjdXJzaXZlIHRhZyBzdHJpcHBpbmcgZmVhdHVyZSBuZWVkcyB0byBiZQoqICAgICAgICBkaXNhYmxlZC4KKgoqIElOUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgdG8gZGlzYWJsZSBSZWN1cnNpdmUgVGFnIFN0cmlwcGluZywKKiAgICAgICAgICAgICBHVF9GQUxTRSB0byBlbmFibGUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFJlY3Vyc2l2ZVN0cmlwcGluZ0Rpc2FibGUKKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0JPT0wgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0UmVjdXJzaXZlU3RyaXBwaW5nRGlzYWJsZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGNoZWNrcyBpZiByZWN1cnNpdmUgdGFnIHN0cmlwcGluZyBmZWF0dXJlIGlzIGRpc2FibGVkLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIGVuIC0gR1RfVFJVRSwgaWYgUmVjdXJzaXZlIFRhZyBTdHJpcHBpbmcgaXMgZGlzYWJsZWQsCiogICAgICAgICAgICAgR1RfRkFMU0UsIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UmVjdXJzaXZlU3RyaXBwaW5nRGlzYWJsZQooCiAgICBJTiAgR1RfUURfREVWICpkZXYsCiAgICBPVVQgR1RfQk9PTCAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0Q1BVUG9ydAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgQ1BVIFBvcnQgd2hlcmUgUnN2ZDJDcHUgZnJhbWVzIGFuZCBJR01QL01MRCBTbm9vcGVkIAoqICAgICAgICBmcmFtZXMgYXJlIGRlc3RpbmVkLgoqCiogSU5QVVRTOgoqICAgICAgIGNwdVBvcnQgLSBDUFUgUG9ydAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Q1BVUG9ydAooCiAgICBJTiAgR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgIGNwdVBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldENQVVBvcnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIENQVSBQb3J0IHdoZXJlIFJzdmQyQ3B1IGZyYW1lcyBhbmQgSUdNUC9NTEQgU25vb3BlZCAKKiAgICAgICAgZnJhbWVzIGFyZSBkZXN0aW5lZC4KKgoqIElOUFVUUzoKKiAgICAgICBjcHVQb3J0IC0gQ1BVIFBvcnQKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldENQVVBvcnQKKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgT1VUIEdUX0xQT1JUICAqY3B1UG9ydAopOwoKCgovKiBndFN5c1N0YXR1cy5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRGcmVlUVNpemUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIEZyZWUgUXVldWUgQ291bnRlci4gVGhpcyBjb3VudGVyIHJlZmxlY3RzIHRoZSAKKiAgICAgICAgY3VycmVudCBudW1iZXIgb2YgdW5hbGxsb2NhdGVkIGJ1ZmZlcnMgYXZhaWxhYmxlIGZvciBhbGwgdGhlIHBvcnRzLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIGNvdW50IC0gRnJlZSBRdWV1ZSBDb3VudGVyCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRGcmVlUVNpemUKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX1UxNiAgICAgICAgICpjb3VudAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgICAgICAgIE5ldyBBUElzIGluIERTRFQgMi42CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKiBndEJyZ0ZkYi5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJTZXRQb3J0QXR1TGVhcm5MaW1pdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgUG9ydCdzIGF1dG8gbGVhcm5pbmcgbGltaXQuIFdoZW4gdGhlIGxpbWl0IGlzIG5vbi16ZXJvIHZhbHVlLCB0aGUgbnVtYmVyCiogICAgICAgIG9mIE1BQyBhZGRyZXNzZXMgdGhhdCBjYW4gYmUgbGVhcm5lZCBvbiB0aGlzIHBvcnQgYXJlIGxpbWl0ZWQgdG8gdGhlIHZhbHVlCiogICAgICAgIHNwZWNpZmllZCBpbiB0aGlzIEFQSS4gV2hlbiB0aGUgbGVhcm4gbGltaXQgaGFzIGJlZW4gcmVhY2hlZCBhbnkgZnJhbWUgCiogICAgICAgIHRoYXQgaW5ncmVzc2VzIHRoaXMgcG9ydCB3aXRoIGEgc291cmNlIE1BQyBhZGRyZXNzIG5vdCBhbHJlYWR5IGluIHRoZSAKKiAgICAgICAgYWRkcmVzcyBkYXRhYmFzZSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBvcnQgd2lsbCBiZSBkaXNjYXJkZWQuIAoqICAgICAgICBOb3JtYWwgYXV0by1sZWFybmluZyB3aWxsIHJlc3VtZSBvbiB0aGUgcG9ydCBhcyBzb29uIGFzIHRoZSBudW1iZXIgb2YgCiogICAgICAgIGFjdGl2ZSB1bmljYXN0IE1BQyBhZGRyZXNzZXMgYXNzb2NpYXRlZCB0byB0aGlzIHBvcnQgaXMgbGVzcyB0aGFuIHRoZSAKKiAgICAgICAgbGVhcm4gbGltaXQuCiogICAgICAgIENQVSBkaXJlY3RlZCBBVFUgTG9hZCwgUHVyZ2UsIG9yIE1vdmUgd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSAKKiAgICAgICAgbGVhcm4gbGltaXQuCiogICAgICAgIFRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCB3aGVuIHRoZSBsaW1pdCBpcyB6ZXJvLgoqICAgICAgICBUaGUgZm9sbG93aW5nIGNhcmUgaXMgbmVlZGVkIHdoZW4gZW5hYmxpbmcgdGhpcyBmZWF0dXJlOgoqICAgICAgICAgICAgMSkgZGlzYWJsZSBsZWFybmluZyBvbiB0aGUgcG9ydHMKKiAgICAgICAgICAgIDIpIGZsdXNoIGFsbCBub24tc3RhdGljIGFkZHJlc3NlcyBpbiB0aGUgQVRVCiogICAgICAgICAgICAzKSBkZWZpbmUgdGhlIGRlc2lyZWQgbGltaXQgZm9yIHRoZSBwb3J0cwoqICAgICAgICAgICAgNCkgcmUtZW5hYmxlIGxlYXJpbmcgb24gdGhlIHBvcnRzCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgbGltaXQgLSBhdXRvIGxlYXJuaW5nIGxpbWl0ICggMCB+IDI1NSApCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBsaW1pdCA+IDB4RkYKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiU2V0UG9ydEF0dUxlYXJuTGltaXQKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgIHBvcnQsCiAgICBJTiAgR1RfVTMyICAgICAgIGxpbWl0Cik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0UG9ydEF0dUxlYXJuQ250CioKKiBERVNDUklQVElPTjoKKiAgICAgICBSZWFkIHRoZSBjdXJyZW50IG51bWJlciBvZiBhY3RpdmUgdW5pY2FzdCBNQUMgYWRkcmVzc2VzIGFzc29jaWF0ZWQgd2l0aCAKKiAgICAgICAgdGhlIGdpdmVuIHBvcnQuIFRoaXMgY291bnRlciAoTGVhcm5DbnQpIGlzIGhlbGQgYXQgemVybyBpZiBsZWFybiBsaW1pdAoqICAgICAgICAoZ2ZkYlNldFBvcnRBdHVMZWFybkxpbWl0IEFQSSkgaXMgc2V0IHRvIHplcm8uCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiogT1VUUFVUUzoKKiAgICAgICBjb3VudCAtIGN1cnJlbnQgYXV0byBsZWFybmluZyBjb3VudAoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJHZXRQb3J0QXR1TGVhcm5DbnQKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgIHBvcnQsCiAgICBJTiAgR1RfVTMyICAgICAgICpjb3VudAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0QXR1QWxsQ291bnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIENvdW50cyBhbGwgZW50cmllcyBpbiB0aGUgQWRkcmVzcyBUcmFuc2xhdGlvbiBVbml0LgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIGNvdW50IC0gbnVtYmVyIG9mIHZhbGlkIGVudHJpZXMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJHZXRBdHVBbGxDb3VudAooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgT1VUIEdUX1UzMiAgICAgICAgICpjb3VudAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0QXR1QWxsQ291bnRJbkRCTnVtCioKKiBERVNDUklQVElPTjoKKiAgICAgICBDb3VudHMgYWxsIGVudHJpZXMgaW4gdGhlIGRlZmluZWQgRklEIChvciBEQk51bSkuCioKKiBJTlBVVFM6CiogICAgICAgZGJOdW0gLSBEQk51bSBvZiBGSUQKKgoqIE9VVFBVVFM6CiogICAgICAgY291bnQgLSBudW1iZXIgb2YgdmFsaWQgZW50cmllcyBpbiBGSUQgKG9yIERCTnVtKS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkdldEF0dUFsbENvdW50SW5EQk51bQooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX1UzMiAgICAgICAgIGRiTnVtLAogICAgT1VUIEdUX1UzMiAgICAgICAgICpjb3VudAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0QXR1RHluYW1pY0NvdW50SW5EQk51bQoqCiogREVTQ1JJUFRJT046CiogICAgICAgQ291bnRzIGFsbCBub24tc3RhdGljIGVudHJpZXMgaW4gdGhlIGRlZmluZWQgRklEIChvciBEQk51bSkuCioKKiBJTlBVVFM6CiogICAgICAgZGJOdW0gLSBEQk51bSBvciBGSUQKKgoqIE9VVFBVVFM6CiogICAgICAgY291bnQgLSBudW1iZXIgb2YgdmFsaWQgbm9uLXN0YXRpYyBlbnRyaWVzIGluIEZJRCAob3IgREJOdW0pLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiR2V0QXR1RHluYW1pY0NvdW50SW5EQk51bQooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX1UzMiAgICAgICAgIGRiTnVtLAogICAgT1VUIEdUX1UzMiAgICAgICAgICpjb3VudAopOwoKCi8qIGd0QnJnU3R1LmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N0dUdldEVudHJ5Q291bnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4gdGhlIFNUVSB0YWJsZQoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIG51bUVudHJpZXMgLSBudW1iZXIgb2YgU1RVIGVudHJpZXMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0dUdldEVudHJ5Q291bnQKKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgT1VUIEdUX1UzMiAgICAqbnVtRW50cmllcwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3R1R2V0RW50cnlGaXJzdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgR2V0cyBmaXJzdCBsZXhpY29ncmFwaGljIGVudHJ5IGZyb20gdGhlIFNUVS4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBzdHVFbnRyeSAtIGZpbmQgdGhlIGZpcnN0IHZhbGlkIFNUVSBlbnRyeS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT19TVUNIIC0gdGFibGUgaXMgZW1wdHkuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3R1R2V0RW50cnlGaXJzdAooCiAgICBJTiAgR1RfUURfREVWICAgICAgICpkZXYsCiAgICBPVVQgR1RfU1RVX0VOVFJZICAgICpzdHVFbnRyeQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3R1R2V0RW50cnlOZXh0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXRzIG5leHQgbGV4aWNvZ3JhcGhpYyBTVFUgZW50cnkgZnJvbSB0aGUgc3BlY2lmaWVkIFNJRC4KKgoqIElOUFVUUzoKKiAgICAgICBzdHVFbnRyeSAtIHRoZSBTSUQgdG8gc3RhcnQgdGhlIHNlYXJjaC4KKgoqIE9VVFBVVFM6CiogICAgICAgc3R1RW50cnkgLSBuZXh0IFNUVSBlbnRyeS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MuCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yIG9yIGVudHJ5IGRvZXMgbm90IGV4aXN0LgoqICAgICAgIEdUX05PX1NVQ0ggLSBubyBtb3JlIGVudHJpZXMuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3R1R2V0RW50cnlOZXh0CigKICAgIElOICBHVF9RRF9ERVYgICAgICAgKmRldiwKICAgIElOT1VUIEdUX1NUVV9FTlRSWSAgKnN0dUVudHJ5Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdHVGaW5kU2lkRW50cnkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEZpbmQgU1RVIGVudHJ5IGZvciBhIHNwZWNpZmljIFNJRCwgaXQgd2lsbCByZXR1cm4gdGhlIGVudHJ5LCBpZiBmb3VuZCwgCiogICAgICAgYWxvbmcgd2l0aCBpdHMgYXNzb2NpYXRlZCBkYXRhIAoqCiogSU5QVVRTOgoqICAgICAgIHN0dUVudHJ5IC0gY29udGFpbnMgdGhlIFNJRCB0byBzZWFyY2hlIGZvciAKKgoqIE9VVFBVVFM6CiogICAgICAgZm91bmQgICAgLSBHVF9UUlVFLCBpZiB0aGUgYXBwcm9wcmlhdGUgZW50cnkgZXhpc3RzLgoqICAgICAgIHN0dUVudHJ5IC0gdGhlIGVudHJ5IHBhcmFtZXRlcnMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzLgoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvciBvciBlbnRyeSBkb2VzIG5vdCBleGlzdC4KKiAgICAgICBHVF9OT19TVUNIIC0gbm8gc3VjaCBlbnRyeS4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdHVGaW5kU2lkRW50cnkKKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAqZGV2LAogICAgSU5PVVQgR1RfU1RVX0VOVFJZICAqc3R1RW50cnksCiAgICBPVVQgR1RfQk9PTCAgICAgICAgICpmb3VuZAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3R1QWRkRW50cnkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIENyZWF0ZXMgb3IgdXBkYXRlIHRoZSBlbnRyeSBpbiBTVFUgdGFibGUgYmFzZWQgb24gdXNlciBpbnB1dC4KKgoqIElOUFVUUzoKKiAgICAgICBzdHVFbnRyeSAgICAtIHN0dSBlbnRyeSB0byBpbnNlcnQgdG8gdGhlIFNUVS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdHVBZGRFbnRyeQooCiAgICBJTiAgR1RfUURfREVWICAgICAgICpkZXYsCiAgICBJTiAgR1RfU1RVX0VOVFJZICAgICpzdHVFbnRyeQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3R1RGVsRW50cnkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIERlbGV0ZXMgU1RVIGVudHJ5IHNwZWNpZmllZCBieSB1c2VyLgoqCiogSU5QVVRTOgoqICAgICAgIHN0dUVudHJ5IC0gdGhlIFNUVSBlbnRyeSB0byBiZSBkZWxldGVkIAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdHVEZWxFbnRyeQooCiAgICBJTiAgR1RfUURfREVWICAgICAgICpkZXYsCiAgICBJTiAgR1RfU1RVX0VOVFJZICAgICAqc3R1RW50cnkKKTsKCgovKiBndENDUFZULmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B2dEluaXRpYWxpemUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBpbml0aWFsaXplcyB0aGUgUFZUIFRhYmxlIHRvIGFsbCBvbmUncyAoaW5pdGlhbCBzdGF0ZSkKKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdnRJbml0aWFsaXplCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B2dFdyaXRlUFZURGF0YQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHdyaXRlIENyb3NzIENoaXAgUG9ydCBWbGFuIERhdGEuCiogICAgICAgIENyb3NzIGNoaXAgUG9ydCBWTEFOIERhdGEgdXNlZCBhcyBhIGJpdCBtYXNrIHRvIGxpbWl0IHdoZXJlIGNyb3NzIGNoaXAKKiAgICAgICAgZnJhbWVzIGNhbiBlZ3Jlc3MgKGluIGNoaXAgUG9ydCBWTEFOcyBhcmUgbWFza2VkIHVzaW5nIGd2bG5TZXRQb3J0VmxhblBvcnRzCiogICAgICAgIEFQSSkuIENyb3NzIGNoaXAgZnJhbWVzIGFyZSBGb3J3YXJkIGZyYW1lcyB0aGF0IGluZ3Jlc3MgYSBEU0Egb3IgRXRoZXIgCiogICAgICAgIFR5cGUgRFNBIHBvcnQgKHNlZSBncHJ0U2V0RnJhbWVNb2RlIEFQSSkuIEJpdCAwIGlzIGEgbWFzayBmb3IgcG9ydCAwLCAKKiAgICAgICAgYml0IDEgZm9yIHBvcnQgMSwgZXRjLiBXaGVuIGEgcG9ydCdzIG1hc2sgYml0IGlzIG9uZSwgZnJhbWVzIGFyZSBhbGxvd2VkIAoqICAgICAgICB0byBlZ3Jlc3MgdGhhdCBwb3J0IG9uIHRoaXMgZGV2aWNlLiBXaGVuIGEgcG9ydCdzIG1hc2sgYml0IGlzIHplcm8sCiogICAgICAgIGZyYW1lcyBhcmUgbm90IGFsbG93ZWQgdG8gZWdyZXNzIHRoYXQgcG9ydCBvbiB0aGlzIGRldmljZS4KKgoqICAgICAgICBUaGUgQ3Jvc3MgQ2hpcCBQb3J0IFZMQU4gVGFibGUgaXMgYWNjZXNzZWQgYnkgaW5ncmVzc2luZyBmcmFtZXMgYmFzZWQKKiAgICAgICAgdXBvbiB0aGUgb3JpZ2luYWwgc291cmNlIHBvcnQgb2YgdGhlIGZyYW1lIHVzaW5nIHRoZSBGb3J3YXJkIGZyYW1lJ3MgRFNBIHRhZwoqICAgICAgICBmaWVsZHMgU3JjX0RldiwgU3JjX1BvcnQvU3JjX1RydW5rIGFuZCBTcmNfSXNfVHJ1bmsuIFRoZSAxIGVudHJ5IG9mIHRoZSA1MTIKKiAgICAgICAgdGhhdCBpcyBhY2Nlc3NlZCBieSB0aGUgZnJhbWUgaXM6CiogICAgICAgICAgICBJZiA1IEJpdCBQb3J0IChpbiBHbG9iYWwgMiwgb2Zmc2V0IDB4MUQpID0gMDoKKiAgICAgICAgICAgICAgICBJZiBTcmNfSXNfVHJ1bmsgPSAwICAgU3JjX0Rldls0OjBdLCBTcmNfUG9ydFszOjBdMTE5CiogICAgICAgICAgICAgICAgSWYgU3JjX0lzX1RydW5rID0gMSAgIERldmljZSBOdW1iZXIgKGdsb2JhbCBvZmZzZXQgMHgxQyksIFNyY19UcnVua1szOjBdCiogICAgICAgICAgICBJZiA1IEJpdCBQb3J0IChpbiBHbG9iYWwgMiwgb2Zmc2V0IDB4MUQpID0gMToKKiAgICAgICAgICAgICAgICBJZiBTcmNfSXNfVHJ1bmsgPSAwICAgU3JjX0RldlszOjBdLCBTcmNfUG9ydFs0OjBdMTIwCiogICAgICAgICAgICAgICAgSWYgU3JjX0lzX1RydW5rID0gMSAgIERldmljZSBOdW1iZXJbMzowXSwgU3JjX1RydW5rWzQ6MF0KKgoqICAgICAgICBDcm9zcyBjaGlwIHBvcnQgVkxBTnMgd2l0aCBUcnVua3MgYXJlIHN1cHBvcnRlZCBpbiB0aGUgdGFibGUgd2hlcmUgdGhpcwoqICAgICAgICBkZXZpY2UncyBlbnRyaWVzIHdvdWxkIGJlIHN0b3JlZCAoZGVmaW5lZCBieSB0aGlzIGRldmljZSdzIERldmljZSBOdW1iZXIpLgoqICAgICAgICBUaGlzIHBvcnRpb24gb2YgdGhlIHRhYmxlIGlzIGF2YWlsYWJsZSBmb3IgVHJ1bmsgZW50cmllcyBiZWNhdXNlIHRoaXMgZGV2aWNlJ3MKKiAgICAgICAgcG9ydCBWTEFOIG1hcHBpbmdzIHRvIHBvcnRzIGluc2lkZSB0aGlzIGRldmljZSBhcmUgbWFza2VkIGJ5IHRoZSBwb3J0J3MKKiAgICAgICAgVkxBTiBUYWJsZSAoc2VlIGd2bG5TZXRQb3J0VmxhblBvcnRzIEFQSSkuCioKKgoqIElOUFVUUzoKKiAgICAgICAgcHZ0UG9pbnRlciAtIHBvaW50ZXIgdG8gdGhlIGRlc2lyZWQgZW50cnkgb2YgUFZUICgwIH4gNTExKQoqICAgICAgICBwdnREYXRhICAgIC0gQ3Jvc3MgQ2hpcCBQb3J0IFZsYW4gRGF0YQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B2dFdyaXRlUFZURGF0YQooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX1UzMiAgICAgICAgcHZ0UG9pbnRlciwKICAgIElOICBHVF9VMzIgICAgICAgIHB2dERhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B2dFJlYWRQVlREYXRhCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmVhZHMgQ3Jvc3MgQ2hpcCBQb3J0IFZsYW4gRGF0YS4KKiAgICAgICAgQ3Jvc3MgY2hpcCBQb3J0IFZMQU4gRGF0YSB1c2VkIGFzIGEgYml0IG1hc2sgdG8gbGltaXQgd2hlcmUgY3Jvc3MgY2hpcAoqICAgICAgICBmcmFtZXMgY2FuIGVncmVzcyAoaW4gY2hpcCBQb3J0IFZMQU5zIGFyZSBtYXNrZWQgdXNpbmcgZ3ZsblNldFBvcnRWbGFuUG9ydHMKKiAgICAgICAgQVBJKS4gQ3Jvc3MgY2hpcCBmcmFtZXMgYXJlIEZvcndhcmQgZnJhbWVzIHRoYXQgaW5ncmVzcyBhIERTQSBvciBFdGhlciAKKiAgICAgICAgVHlwZSBEU0EgcG9ydCAoc2VlIGdwcnRTZXRGcmFtZU1vZGUgQVBJKS4gQml0IDAgaXMgYSBtYXNrIGZvciBwb3J0IDAsIAoqICAgICAgICBiaXQgMSBmb3IgcG9ydCAxLCBldGMuIFdoZW4gYSBwb3J0J3MgbWFzayBiaXQgaXMgb25lLCBmcmFtZXMgYXJlIGFsbG93ZWQgCiogICAgICAgIHRvIGVncmVzcyB0aGF0IHBvcnQgb24gdGhpcyBkZXZpY2UuIFdoZW4gYSBwb3J0J3MgbWFzayBiaXQgaXMgemVybywKKiAgICAgICAgZnJhbWVzIGFyZSBub3QgYWxsb3dlZCB0byBlZ3Jlc3MgdGhhdCBwb3J0IG9uIHRoaXMgZGV2aWNlLgoqCiogICAgICAgIFRoZSBDcm9zcyBDaGlwIFBvcnQgVkxBTiBUYWJsZSBpcyBhY2Nlc3NlZCBieSBpbmdyZXNzaW5nIGZyYW1lcyBiYXNlZAoqICAgICAgICB1cG9uIHRoZSBvcmlnaW5hbCBzb3VyY2UgcG9ydCBvZiB0aGUgZnJhbWUgdXNpbmcgdGhlIEZvcndhcmQgZnJhbWUncyBEU0EgdGFnCiogICAgICAgIGZpZWxkcyBTcmNfRGV2LCBTcmNfUG9ydC9TcmNfVHJ1bmsgYW5kIFNyY19Jc19UcnVuay4gVGhlIDEgZW50cnkgb2YgdGhlIDUxMgoqICAgICAgICB0aGF0IGlzIGFjY2Vzc2VkIGJ5IHRoZSBmcmFtZSBpczoKKiAgICAgICAgICAgIElmIDUgQml0IFBvcnQgKGluIEdsb2JhbCAyLCBvZmZzZXQgMHgxRCkgPSAwOgoqICAgICAgICAgICAgICAgIElmIFNyY19Jc19UcnVuayA9IDAgICBTcmNfRGV2WzQ6MF0sIFNyY19Qb3J0WzM6MF0xMTkKKiAgICAgICAgICAgICAgICBJZiBTcmNfSXNfVHJ1bmsgPSAxICAgRGV2aWNlIE51bWJlciAoZ2xvYmFsIG9mZnNldCAweDFDKSwgU3JjX1RydW5rWzM6MF0KKiAgICAgICAgICAgIElmIDUgQml0IFBvcnQgKGluIEdsb2JhbCAyLCBvZmZzZXQgMHgxRCkgPSAxOgoqICAgICAgICAgICAgICAgIElmIFNyY19Jc19UcnVuayA9IDAgICBTcmNfRGV2WzM6MF0sIFNyY19Qb3J0WzQ6MF0xMjAKKiAgICAgICAgICAgICAgICBJZiBTcmNfSXNfVHJ1bmsgPSAxICAgRGV2aWNlIE51bWJlclszOjBdLCBTcmNfVHJ1bmtbNDowXQoqCiogICAgICAgIENyb3NzIGNoaXAgcG9ydCBWTEFOcyB3aXRoIFRydW5rcyBhcmUgc3VwcG9ydGVkIGluIHRoZSB0YWJsZSB3aGVyZSB0aGlzCiogICAgICAgIGRldmljZSdzIGVudHJpZXMgd291bGQgYmUgc3RvcmVkIChkZWZpbmVkIGJ5IHRoaXMgZGV2aWNlJ3MgRGV2aWNlIE51bWJlcikuCiogICAgICAgIFRoaXMgcG9ydGlvbiBvZiB0aGUgdGFibGUgaXMgYXZhaWxhYmxlIGZvciBUcnVuayBlbnRyaWVzIGJlY2F1c2UgdGhpcyBkZXZpY2UncwoqICAgICAgICBwb3J0IFZMQU4gbWFwcGluZ3MgdG8gcG9ydHMgaW5zaWRlIHRoaXMgZGV2aWNlIGFyZSBtYXNrZWQgYnkgdGhlIHBvcnQncwoqICAgICAgICBWTEFOIFRhYmxlIChzZWUgZ3ZsblNldFBvcnRWbGFuUG9ydHMgQVBJKS4KKgoqCiogSU5QVVRTOgoqICAgICAgICBwdnRQb2ludGVyIC0gcG9pbnRlciB0byB0aGUgZGVzaXJlZCBlbnRyeSBvZiBQVlQgKDAgfiA1MTEpCioKKiBPVVRQVVRTOgoqICAgICAgICBwdnREYXRhICAgIC0gQ3Jvc3MgQ2hpcCBQb3J0IFZsYW4gRGF0YQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B2dFJlYWRQVlREYXRhCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfVTMyICAgICAgICBwdnRQb2ludGVyLAogICAgT1VUIEdUX1UzMiAgICAgICAgKnB2dERhdGEKKTsKCgovKiBndEV2ZW50cy5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdldmVudEdldERldkludFN0YXR1cwoqCiogREVTQ1JJUFRJT046CiogICAgICAgICBDaGVjayB0byBzZWUgd2hpY2ggZGV2aWNlIGludGVycnVwdHMgKFdhdGNoRG9nLCBKYW1MaW1pdCwgRHVwbGV4IE1pc21hdGNoLCBhbmQKKiAgICAgICAgU0VSREVTIExpbmsgSW50KSBoYXZlIG9jY3VycmVkLgoqCiogSU5QVVRTOgoqICAgICAgIGludFR5cGUgLSB0aGUgdHlwZSBvZiBpbnRlcnJ1cHQgd2hpY2ggY2F1c2VzIGFuIGludGVycnVwdC4KKiAgICAgICAgICAgICAgICAgIGFueSBjb21iaW5hdGlvbiBvZiAKKiAgICAgICAgICAgICAgICAgICAgR1RfREVWX0lOVF9XQVRDSERPRywKKiAgICAgICAgICAgICAgICAgICAgR1RfREVWX0lOVF9KQU1MSU1JVCwKKiAgICAgICAgICAgICAgICAgICAgR1RfREVWX0lOVF9EVVBMRVhfTUlTTUFUQ0gsCiogICAgICAgICAgICAgICAgICAgIEdUX0RFVl9JTlRfU0VSREVTX0xJTksKKiAgICAgICAgcG9ydCAgICAtIGxvZ2ljYWwgcG9ydCB3aGVyZSBHVF9ERVZfSU5UX0RVUExFWF9NSVNNQVRDSCBvY2N1cnJlZC4KKiAgICAgICAgICAgICAgICAgIHZhbGlkIG9ubHkgaWYgR1RfREVWX0lOVF9EVVBMRVhfTUlTTUFUQ0ggaXMgc2V0IGluIGludFR5cGUuCiogICAgICAgIGxpbmtJbnQgLSBTRVJERVMgcG9ydCBsaXN0IHdoZXJlIEdUX0RFVl9JTlRfU0VSREVTX0xJTksgaW50ZXJydXB0IGlzCiogICAgICAgICAgICAgICAgICBhc3NlcnRlZC4gSXQncyBpbiB2ZWN0b3IgZm9ybWF0LCBCaXQgMTAgaXMgZm9yIHBvcnQgMTAsIAoqICAgICAgICAgICAgICAgICAgQml0IDkgaXMgZm9yIHBvcnQgOSwgZXRjLgoqICAgICAgICAgICAgICAgICAgdmFsaWQgb25seSBpZiBHVF9ERVZfSU5UX1NFUkRFU19MSU5LIGJpdCBpcyBzZXQgaW4gaW50VHlwZS4KKiAgICAgICAgICAgICAgICAgIFRoZXNlIGJpdHMgYXJlIG9ubHkgdmFsaWQgb2YgdGhlIHBvcnQgdGhhdCBpcyBpbiAxMDAwQmFzZS1YIG1vZGUuCioKKiBPVVRQVVRTOgoqICAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgICBHVF9PSyAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdldmVudEdldERldkludFN0YXR1cwooCiAgICBJTiAgR1RfUURfREVWICAgICAgICAgICAgICpkZXYsCiAgICBPVVQgR1RfREVWX0lOVF9TVEFUVVMgICAgKmRldkludFN0YXR1cwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZXZlbnRTZXRBZ2VPdXRJbnRFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgIEludGVycnVwdCBvbiBBZ2UgT3V0LiBXaGVuIGFnaW5nIGlzIGVuYWJsZWQsIGFsbCBub24tc3RhdGljIGFkZHJlc3MgCiogICAgICAgIGVudHJpZXMgaW4gdGhlIEFUVSdzIGFkZHJlc3MgZGF0YWJhc2UgYXJlIHBlcmlvZGljYWxseSBhZ2VkLgoqICAgICAgICBXaGVuIHRoaXMgZmVhdHVyZSBpcyBzZXQgdG8gR1RfVFJVRSBhbmQgYW4gZW50cnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgCiogICAgICAgIHBvcnQgaXMgYWdlZCBvdXQsIGFuIEFnZU91dFZpb2xhdGlvbiB3aWxsIGJlIGNhcHR1cmVkIGZvciB0aGF0IGVudHJ5LgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIEFnZSBPdXQgSW50ZXJydXB0LAoqICAgICAgICAgICAgICAgR1RfRkFMVVNFIHRvIGRpc2FibGUKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZXZlbnRTZXRBZ2VPdXRJbnRFbgooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIElOICBHVF9CT09MICAgICAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdldmVudEdldEFnZU91dEludEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgSW50ZXJydXB0IG9uIEFnZSBPdXQuIFdoZW4gYWdpbmcgaXMgZW5hYmxlZCwgYWxsIG5vbi1zdGF0aWMgYWRkcmVzcyAKKiAgICAgICAgZW50cmllcyBpbiB0aGUgQVRVJ3MgYWRkcmVzcyBkYXRhYmFzZSBhcmUgcGVyaW9kaWNhbGx5IGFnZWQuCiogICAgICAgIFdoZW4gdGhpcyBmZWF0dXJlIGlzIHNldCB0byBHVF9UUlVFIGFuZCBhbiBlbnRyeSBhc3NvY2lhdGVkIHdpdGggdGhpcyAKKiAgICAgICAgcG9ydCBpcyBhZ2VkIG91dCwgYW4gQWdlT3V0VmlvbGF0aW9uIHdpbGwgYmUgY2FwdHVyZWQgZm9yIHRoYXQgZW50cnkuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAtIEdUX1RSVUUsIGlmIEFnZSBPdXQgSW50ZXJydXB0IGlzIGVuYWJsZWQKKiAgICAgICAgICAgICAgIEdUX0ZBTFVTRSwgb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZXZlbnRHZXRBZ2VPdXRJbnRFbgooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZXZlbnRTZXRPdmVyTGltaXRJbnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZW5hYmxlcy9kaXNhYmxlcyBPdmVyIExpbWl0IEludGVycnVwdCBmb3IgYSBwb3J0LgoqICAgICAgICBJZiBpdCdzIGVuYWJsZWQsIGFuIEFUVSBNaXNzIHZpb2xhdGlvbiB3aWxsIGJlIGdlbmVyYXRlZCB3aGVuIHBvcnQgYXV0bwoqICAgICAgICBsZWFybiByZWFjaGVkIHRoZSBsaW1pdChyZWZlciB0byBnZmRiR2V0UG9ydEF0dUxpbWl0UmVhY2hlZCBBUEkpLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIE92ZXIgTGltaXQgSW50ZXJydXB0LAoqICAgICAgICAgICAgICAgR1RfRkFMVVNFIHRvIGRpc2FibGUKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZXZlbnRTZXRPdmVyTGltaXRJbnQKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgR1RfQk9PTCAgICAgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZXZlbnRHZXRPdmVyTGltaXRJbnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZW5hYmxlcy9kaXNhYmxlcyBPdmVyIExpbWl0IEludGVycnVwdCBmb3IgYSBwb3J0LgoqICAgICAgICBJZiBpdCdzIGVuYWJsZWQsIGFuIEFUVSBNaXNzIHZpb2xhdGlvbiB3aWxsIGJlIGdlbmVyYXRlZCB3aGVuIHBvcnQgYXV0bwoqICAgICAgICBsZWFybiByZWFjaGVkIHRoZSBsaW1pdChyZWZlciB0byBnZmRiU2V0UG9ydEF0dUxlYXJuTGltaXQgQVBJKS4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqICAgICAgICBtb2RlIC0gR1RfVFJVRSB0byBlbmFibGUgT3ZlciBMaW1pdCBJbnRlcnJ1cHQsCiogICAgICAgICAgICAgICBHVF9GQUxVU0UgdG8gZGlzYWJsZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2V2ZW50R2V0T3ZlckxpbWl0SW50CigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdldmVudEdldFBvcnRBdHVMaW1pdFJlYWNoZWQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBjaGVja3MgaWYgbGVhcm4gbGltaXQgaGFzIGJlZW4gcmVhY2hlZC4KKiAgICAgICAgV2hlbiBpdCByZWFjaGVkLCB0aGUgcG9ydCBjYW4gbm8gbG9uZ2VyIGF1dG8gbGVhcm4gYW55IG1vcmUgTUFDIGFkZHJlc3NlcwoqICAgICAgICBiZWNhdXNlIHRoZSBhZGRyZXNzIGxlYXJuIGxpbWl0IHNldCBvbiB0aGlzIHBvcnQgaGFzIGJlZW4gcmVhY2hlZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKiBPVVRQVVRTOgoqICAgICAgIGxpbWl0IC0gR1RfVFJVRSwgaWYgbGltaXQgaGFzIGJlZW4gcmVhY2hlZAoqICAgICAgICAgICAgICAgIEdUX0ZBTFNFLCBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdldmVudEdldFBvcnRBdHVMaW1pdFJlYWNoZWQKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgIHBvcnQsCiAgICBJTiAgR1RfQk9PTCAgICAgICAqbGltaXQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZXZlbnRTZXREZXZJbnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBEZXZpY2UgSW50ZXJydXB0LgoqICAgICAgICBUaGUgZm9sbG93aW5nIGRldmljZSBpbnRlcnJ1cHRzIGFyZSBzdXBwb3J0ZWQ6CiogICAgICAgICAgICBHVF9ERVZfSU5UX1dBVENIRE9HICAgIC0gCiogICAgICAgICAgICAgICAgV2F0Y2hEb2cgZXZlbnQgaW50ZXJydXB0IChXYXRjaERvZyBldmVudCBjYW4gYmUgY29uZmlndXJlZCB3aXRoIAoqICAgICAgICAgICAgICAgIGd3ZFNldEV2ZW50IEFQSSkKKiAgICAgICAgICAgIEdUX0RFVl9JTlRfSkFNTElNSVQgICAgLQoqICAgICAgICAgICAgICAgIGFueSBvZiB0aGUgcG9ydHMgZGV0ZWN0IGFuIEluZ3Jlc3MgSmFtIExpbWl0IHZpb2xhdGlvbgoqICAgICAgICAgICAgICAgIChzZWUgZ3BydFNldFBhdXNlTGltaXRJbiBBUEkpCiogICAgICAgICAgICBHVF9ERVZfSU5UX0RVUExFWF9NSVNNQVRDSCAtIAoqICAgICAgICAgICAgICAgIGFueSBvZiB0aGUgcG9ydHMgZGV0ZWN0IGEgZHVwbGV4IG1pc21hdGNoIChpLmUuLCB0aGUgbG9jYWwgcG9ydCBpcyAKKiAgICAgICAgICAgICAgICBpbiBoYWxmIGR1cGxleCBtb2RlIHdoaWxlIHRoZSBsaW5rIHBhcnRuZXIgaXMgaW4gZnVsbCBkdXBsZXggbW9kZSkKKiAgICAgICAgICAgIEdUX0RFVl9JTlRfU0VSREVTX0xJTksgLSAKKiAgICAgICAgICAgICAgICBTRVJERVMgbGluayBjaGFnZSBpbnRlcnJ1cHQuCiogICAgICAgICAgICAgICAgQW4gaW50ZXJydXB0IG9jY3VycyB3aGVuIGEgU0VSREVTIHBvcnQgY2hhbmdlcyBsaW5rIHN0YXR1cwoqICAgICAgICAgICAgICAgIChsaW5rIHVwIG9yIGxpbmsgZG93bikKKiAgICAgICAgICAgIAoqICAgICAgICBJZiBhbnkgb2YgdGhlIGFib3ZlIGV2ZW50cyBpcyBlbmFibGVkLCBHVF9ERVZJQ0VfSU5UIGludGVycnVwdCB3aWxsCiogICAgICAgIGJlIGFzc2VydGVkIGJ5IHRoZSBlbmFibGVkIGV2ZW50IHdoZW4gR1RfREVWX0lOVCBpcyBlbmFibGVkIHdpdGggCiogICAgICAgIGV2ZW50U2V0QWN0aXZlIEFQSS4KKiAgICAgICAgCiogSU5QVVRTOgoqICAgICAgICBkZXZJbnQgLSBHVF9ERVZfSU5UCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZXZlbnRTZXREZXZJbnQKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0RFVl9FVkVOVCAgICAqZGV2SW50Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd3ZFNldEV2ZW50CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgV2F0Y2ggRG9nIEV2ZW50LgoqICAgICAgICBUaGUgZm9sbG93aW5nIFdhdGNoIERvZyBldmVudHMgYXJlIHN1cHBvcnRlZDoKKiAgICAgICAgICAgIEdUX1dEX1FDICAtIFF1ZXVlIENvbnRyb2xsZXIgV2F0Y2ggRG9nIGVuYWJsZS4KKiAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gZW5hYmxlZCwgdGhlIFFDJ3Mgd2F0Y2ggZG9nIGNpcmN1aXQgY2hlY2tzIGZvciBsaW5rCiogICAgICAgICAgICAgICAgICAgICAgICBsaXN0IGVycm9ycyBhbmQgYW55IGVycm9ycyBmb3VuZCBpbiB0aGUgUUMuCiogICAgICAgICAgICBHVF9XRF9FR1JFU1MgLSBFZ3Jlc3MgV2F0Y2ggRG9nIGVuYWJsZS4KKiAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gZW5hYmxlZCwgZWFjaCBwb3J0J3MgZWdyZXNzIGNpcmN1aXQgY2hlY2tzIGZvciBwcm9ibGVtcwoqICAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiB0aGUgcG9ydCBhbmQgdGhlIFF1ZXVlIENvbnRyb2xsZXIuCiogICAgICAgICAgICBHVF9XRF9GT1JDRSAtIEZvcmNlIGEgV2F0Y2ggRG9nIGV2ZW50LgoqICAgICAgICAgICAgCiogICAgICAgIElmIGFueSBvZiB0aGUgYWJvdmUgZXZlbnRzIGlzIGVuYWJsZWQsIEdUX0RFVklDRV9JTlQgaW50ZXJydXB0IHdpbGwKKiAgICAgICAgYmUgYXNzZXJ0ZWQgYnkgdGhlIGVuYWJsZWQgV2F0Y2hEb2cgZXZlbnQgd2hlbiBHVF9ERVZfSU5UX1dBVENIRE9HIGlzCiogICAgICAgIGVuYWJsZWQgd2l0aCBldmVudFNldERldkFjdGl2ZSBBUEkgYW5kIEdUX0RFVl9JTlQgaXMgZW5hYmxlZCB3aXRoIAoqICAgICAgICBldmVudFNldEFjdGl2ZSBBUEkuCiogICAgICAgIAoqIElOUFVUUzoKKiAgICAgICAgd2RFdmVudCAtIFdhdGNoIERvZyBFdmVudHMKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnd2RTZXRFdmVudAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfVTMyICAgICAgICB3ZEV2ZW50Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd3ZFNldFNXUmVzZXRPbldECioKKiBERVNDUklQVElPTjoKKiAgICAgICAgU1dSZXNldCBvbiBXYXRjaCBEb2cgRXZlbnQuCiogICAgICAgIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIGFueSBlbmFibGVkIHdhdGNoIGRvZyBldmVudCAoZ3dkU2V0RXZlbnQgQVBJKSAKKiAgICAgICAgd2lsbCBhdXRvbWF0aWNhbGx5IHJlc2V0IHRoZSBzd2l0Y2ggY29yZSdzIGRhdGFwYXRoIGp1c3QgYXMgaWYgZ3N5c1N3UmVzZXQKKiAgICAgICAgQVBJIGlzIGNhbGxlZC4KKgoqICAgICAgICBUaGUgV2F0Y2ggRG9nIEhpc3RvcnkgKGd3ZEdldEhpc3RvcnkgQVBJKSB3b24ndCBiZSBjbGVhcmVkIGJ5IHRoaXMgCiogICAgICAgIGF1dG9tYXRpYyBTV1Jlc2V0LiBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBrbm93IGlmIGFueSB3YXRjaCBkb2cgZXZlbnQgCiogICAgICAgIGV2ZXIgb2NjdXJyZWQgZXZlbiBpZiB0aGUgc3dpY2ggaXMgY29uZmlndXJlZCB0byBhdXRvbWF0aWNhbGx5IHJlY292ZXIgCiogICAgICAgIGZyb20gYSB3YXRjaCBkb2cuCioKKiAgICAgICAgV2hlbiB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQsIGVuYWJsZWQgd2F0Y2ggZG9nIGV2ZW50cyB3aWxsIG5vdCBjYXVzZSBhCiogICAgICAgIFNXUmVzZXQuCioKKiBJTlBVVFM6CiogICAgICAgIGVuICAgLSBHVF9UUlVFIHRvIGVuYWJsZSBTV1Jlc2V0IG9uIFdECiogICAgICAgICAgICAgICBHVF9GQUxVU0UgdG8gZGlzYWJsZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd3ZFNldFNXUmVzZXRPbldECigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9CT09MICAgICAgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnd2RHZXRTV1Jlc2V0T25XRAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFNXUmVzZXQgb24gV2F0Y2ggRG9nIEV2ZW50LgoqICAgICAgICBXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBhbnkgZW5hYmxlZCB3YXRjaCBkb2cgZXZlbnQgKGd3ZFNldEV2ZW50IEFQSSkgCiogICAgICAgIHdpbGwgYXV0b21hdGljYWxseSByZXNldCB0aGUgc3dpdGNoIGNvcmUncyBkYXRhcGF0aCBqdXN0IGFzIGlmIGdzeXNTd1Jlc2V0CiogICAgICAgIEFQSSBpcyBjYWxsZWQuCioKKiAgICAgICAgVGhlIFdhdGNoIERvZyBIaXN0b3J5IChnd2RHZXRIaXN0b3J5IEFQSSkgd29uJ3QgYmUgY2xlYXJlZCBieSB0aGlzIAoqICAgICAgICBhdXRvbWF0aWMgU1dSZXNldC4gVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8ga25vdyBpZiBhbnkgd2F0Y2ggZG9nIGV2ZW50IAoqICAgICAgICBldmVyIG9jY3VycmVkIGV2ZW4gaWYgdGhlIHN3aWNoIGlzIGNvbmZpZ3VyZWQgdG8gYXV0b21hdGljYWxseSByZWNvdmVyIAoqICAgICAgICBmcm9tIGEgd2F0Y2ggZG9nLgoqCiogICAgICAgIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkLCBlbmFibGVkIHdhdGNoIGRvZyBldmVudHMgd2lsbCBub3QgY2F1c2UgYQoqICAgICAgICBTV1Jlc2V0LgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgZW4gICAtIEdUX1RSVUUsIGlmIFNXUmVzZXQgb24gV0QgaXMgZW5hYmxlZAoqICAgICAgICAgICAgICAgR1RfRkFMVVNFLCBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd3ZEdldFNXUmVzZXRPbldECigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIE9VVCBHVF9CT09MICAgICAgICAqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3dkR2V0SGlzdG9yeQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgV2F0Y2ggRG9nIGhpc3RvcnkuIFRoZXkgYXJlCioKKiAgICAgICAgd2RFdmVudCAtIAoqICAgICAgICAgICAgV2hlbiBpdCdzIHNldCB0byBHVF9UUlVFLCBzb21lIGVuYWJsZWQgV2F0Y2ggRG9nIGV2ZW50IG9jY3VycmVkLgoqICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBldmVudHMgYXJlIHBvc3NpYmxlOgoqICAgICAgICAgICAgICAgIFFDIFdhdGNoRG9nIEV2ZW50IChHVF9XRF9RQykKKiAgICAgICAgICAgICAgICBFZ3Jlc3MgV2F0Y2hEb2cgRXZlbnQgKEdUX1dEX0VHUkVTUykKKiAgICAgICAgICAgICAgICBGb3JjZWQgV2F0Y2hEb2cgRXZlbnQgKEdUX1dEX0ZPUkNFKQoqICAgICAgICBlZ3Jlc3NFdmVudCAtCiogICAgICAgICAgICBJZiBhbnkgcG9ydCdzIGVncmVzcyBsb2dpYyBkZXRlY3RzIGFuIGVncmVzcyB3YXRjaCBkb2cgaXNzdWUsCiogICAgICAgICAgICB0aGlzIGZpZWxkIGlzIHNldCB0byBHVF9UUlVFLCByZWdhcmRsZXNzIG9mIHRoZSBlbmFibGluZyBHVF9XRF9FR1JFU1MKKiAgICAgICAgICAgIGV2ZW50LgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgaGlzdG9yeSAtIEdUX1dEX0VWRU5UX0hJU1RPUlkgc3RydWN0dXJlCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnd2RHZXRIaXN0b3J5CigKICAgIElOICBHVF9RRF9ERVYgICAgICAgICAgICAqZGV2LAogICAgT1VUIEdUX1dEX0VWRU5UX0hJU1RPUlkgICAgKmhpc3RvcnkKKTsKCgovKiBndFBJUkwyLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BpcmwyV3JpdGVSZXNvdXJjZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHdyaXRlcyByZXNvdXJjZSBidWNrZXQgcGFyYW1ldGVycyB0byB0aGUgZ2l2ZW4gcmVzb3VyY2UKKiAgICAgICAgb2YgdGhlIHBvcnQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBpcmxSZXMgICAtIGJ1Y2tldCB0byBiZSB1c2VkICgwIH4gNCkuCiogICAgICAgIHBpcmxEYXRhIC0gUElSTCByZXNvdXJjZSBwYXJhbWV0ZXJzLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BpcmwyV3JpdGVSZXNvdXJjZQooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgR1RfVTMyICAgICAgICBpcmxSZXMsCiAgICBJTiAgR1RfUElSTDJfREFUQSAgICAqcGlybERhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BpcmwyUmVhZFJlc291cmNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmV0cmlldmVzIElSTCBQYXJhbWV0ZXIuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBpcmxSZXMgICAtIGJ1Y2tldCB0byBiZSB1c2VkICgwIH4gNCkuCioKKiBPVVRQVVRTOgoqICAgICAgICBwaXJsRGF0YSAtIFBJUkwgcmVzb3VyY2UgcGFyYW1ldGVycy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwaXJsMlJlYWRSZXNvdXJjZQooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgR1RfVTMyICAgICAgICBpcmxSZXMsCiAgICBPVVQgR1RfUElSTDJfREFUQSAgICAqcGlybERhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BpcmwyRGlzYWJsZVJlc291cmNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZGlzYWJsZXMgSW5ncmVzcyBSYXRlIExpbWl0aW5nIGZvciB0aGUgZ2l2ZW4gYnVja2V0LgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgIC0gbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgaXJsUmVzICAgLSBidWNrZXQgdG8gYmUgdXNlZCAoMCB+IDQpLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BpcmwyRGlzYWJsZVJlc291cmNlCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIElOICBHVF9VMzIgICAgICAgIGlybFJlcwopOwoKCi8qIGd0UG9saWN5LmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFBvbGljeQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIFBvbGljeSBmb3IgcG9ydHMuCiogICAgICAgIFN1cHBvcnRlZCBQb2xpY2llcyBhcmUgZGVmaW5lZCBhcyBHVF9GUkFNRV9QT0xJQ1kgYXMgZm9sbG93czoKKiAgICAgICAgICAgIEZSQU1FX1BPTElDWV9OT05FICAgIC0gbm9ybWFsIGZyYW1lIHN3aXRjaGluZwoqICAgICAgICAgICAgRlJBTUVfUE9MSUNZX01JUlJPUiAgLSBtaXJyb3IgKGNvcHkpIGZyYW1lIHRvIE1pcnJvckRlc3QgcG9ydAoqICAgICAgICAgICAgRlJBTUVfUE9MSUNZX1RSQVAgICAgLSB0cmFwKHJlLWRpcmVjdCkgZnJhbWUgdG8gdGhlIENQVURlc3QgcG9ydAoqICAgICAgICAgICAgRlJBTUVfUE9MSUNZX0RJU0NBUkQgLSBkaXNjYXJkKGZpbHRlcikgdGhlIGZyYW1lCiogICAgICAgIFN1cHBvcnRlZCBQb2xpY3kgdHlwZXMgYXJlIGRlZmluZWQgYXMgR1RfUE9MSUNZX1RZUEU6CiogICAgICAgICAgICBQT0xJQ1lfVFlQRV9EQSAtIERBIFBvbGljeSBNYXBwaW5nCiogICAgICAgICAgICAgICAgREEgUG9saWN5IE1hcHBpbmcgb2NjdXJzIHdoZW4gdGhlIERBIG9mIGEgZnJhbWUgaXMgY29udGFpbmVkIGluIAoqICAgICAgICAgICAgICAgIHRoZSBBVFUgYWRkcmVzcyBkYXRhYmFzZSB3aXRoIGFuIEVudHJ5IFN0YXRlIHRoYXQgaW5kaWNhdGVzIFBvbGljeS4KKiAgICAgICAgICAgIFBPTElDWV9UWVBFX1NBIC0gU0EgUG9saWN5IE1hcHBpbmcKKiAgICAgICAgICAgICAgICBTQSBQb2xpY3kgTWFwcGluZyBvY2N1cnMgd2hlbiB0aGUgU0Egb2YgYSBmcmFtZSBpcyBjb250YWluZWQgaW4gCiogICAgICAgICAgICAgICAgdGhlIEFUVSBhZGRyZXNzIGRhdGFiYXNlIHdpdGggYW4gRW50cnkgU3RhdGUgdGhhdCBpbmRpY2F0ZXMgUG9saWN5LgoqICAgICAgICAgICAgUE9MSUNZX1RZUEVfVlRVIC0gVlRVIFBvbGljeSBNYXBwaW5nCiogICAgICAgICAgICAgICAgVlRVIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBWSUQgb2YgYSBmcmFtZSBpcyBjb250YWluZWQgaW4KKiAgICAgICAgICAgICAgICB0aGUgVlRVIGRhdGFiYXNlIHdpdGggdGhlIFZpZFBvbGljeSBpcyBlbmFibGVkLgoqICAgICAgICAgICAgUE9MSUNZX1RZUEVfRVRZUEUgLSBFdGhlclR5cGUgUG9saWN5IE1hcHBpbmcKKiAgICAgICAgICAgICAgICBFVHlwZSBQb2xpY3kgTWFwcGluZyBvY2N1cnMgd2hlbiB0aGUgRXRoZXJUeXBlIG9mIGEgZnJhbWUgbWF0Y2hlcwoqICAgICAgICAgICAgICAgIHRoZSBQb3J0RVR5cGUgKHNlZSBncHJ0U2V0UG9ydEVUeXBlIEFQSSkKKiAgICAgICAgICAgIFBPTElDWV9UWVBFX1BQUG9FIC0gUFBQb0UgUG9saWN5IE1hcHBpbmcKKiAgICAgICAgICAgICAgICBQUFBvRSBQb2xpY3kgTWFwcGluZyBvY2N1cnMgd2hlbiB0aGUgRXRoZXJUeXBlIG9mIGEgZnJhbWUgbWF0Y2hlcyAweDg4NjMKKiAgICAgICAgICAgIFBPTElDWV9UWVBFX1ZCQVMgLSBWQkFTIFBvbGljeSBNYXBwaW5nCiogICAgICAgICAgICAgICAgVkJBUyBQb2xpY3kgTWFwcGluZyBvY2N1cnMgd2hlbiB0aGUgRXRoZXJUeXBlIG9mIGEgZnJhbWUgbWF0Y2hlcyAweDgyMDAKKiAgICAgICAgICAgIFBPTElDWV9UWVBFX09QVDgyIC0gREhDUCBPcHRpb24gODIgUG9saWN5IE1hcHBpbmcKKiAgICAgICAgICAgICAgICBESENQIE9wdGlvbiA4MiBQb2xpY3kgTWFwcGluZyBvY2N1cnMgd2hlbiB0aGUgaW5ncmVzc2luZyBmcmFtZSBpcyBhbgoqICAgICAgICAgICAgICAgIElQdjQgVURQIHdpdGggYSBVRFAgRGVzdGluYXRpb24gcG9ydCA9IDB4MDA0MyBvciAweDAwNDQsIG9yIGFuCiogICAgICAgICAgICAgICAgSVB2NiBVRFAgd2l0aCBhIFVEUCBEZXN0aW5hdGlvbiBwb3J0ID0gMHgwMjIzIG9yIDB4MDIyMgoqICAgICAgICAgICAgUE9MSUNZX1RZUEVfVURQIC0gVURQIFBvbGljeSBNYXBwaW5nCiogICAgICAgICAgICAgICAgVURQIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBpbmdyZXNzaW5nIGZyYW1lIGlzCiogICAgICAgICAgICAgICAgYSBCcm9hZGNhc3QgSVB2NCBVRFAgb3IgYSBNdWx0aWNhc3QgSVB2NiBVRFAuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgdHlwZSAgICAgLSBwb2xpY3kgdHlwZSAoR1RfUE9MSUNZX1RZUEUpCiogICAgICAgcG9saWN5ICAgICAtIHBvbGljeSAoR1RfRlJBTUVfUE9MSUNZKQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRQb2xpY3kKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOICBHVF9QT0xJQ1lfVFlQRSAgICB0eXBlLAogICAgSU4gICAgR1RfRlJBTUVfUE9MSUNZICAgIHBvbGljeQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UG9saWN5CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgUG9saWN5IG9mIHRoZSBnaXZlbiBwb2xpY3kgdHlwZS4KKiAgICAgICAgU3VwcG9ydGVkIFBvbGljaWVzIGFyZSBkZWZpbmVkIGFzIEdUX0ZSQU1FX1BPTElDWSBhcyBmb2xsb3dzOgoqICAgICAgICAgICAgRlJBTUVfUE9MSUNZX05PTkUgICAgLSBub3JtYWwgZnJhbWUgc3dpdGNoaW5nCiogICAgICAgICAgICBGUkFNRV9QT0xJQ1lfTUlSUk9SICAtIG1pcnJvciAoY29weSkgZnJhbWUgdG8gTWlycm9yRGVzdCBwb3J0CiogICAgICAgICAgICBGUkFNRV9QT0xJQ1lfVFJBUCAgICAtIHRyYXAocmUtZGlyZWN0KSBmcmFtZSB0byB0aGUgQ1BVRGVzdCBwb3J0CiogICAgICAgICAgICBGUkFNRV9QT0xJQ1lfRElTQ0FSRCAtIGRpc2NhcmQoZmlsdGVyKSB0aGUgZnJhbWUKKiAgICAgICAgU3VwcG9ydGVkIFBvbGljeSB0eXBlcyBhcmUgZGVmaW5lZCBhcyBHVF9QT0xJQ1lfVFlQRToKKiAgICAgICAgICAgIFBPTElDWV9UWVBFX0RBIC0gREEgUG9saWN5IE1hcHBpbmcKKiAgICAgICAgICAgICAgICBEQSBQb2xpY3kgTWFwcGluZyBvY2N1cnMgd2hlbiB0aGUgREEgb2YgYSBmcmFtZSBpcyBjb250YWluZWQgaW4gCiogICAgICAgICAgICAgICAgdGhlIEFUVSBhZGRyZXNzIGRhdGFiYXNlIHdpdGggYW4gRW50cnkgU3RhdGUgdGhhdCBpbmRpY2F0ZXMgUG9saWN5LgoqICAgICAgICAgICAgUE9MSUNZX1RZUEVfU0EgLSBTQSBQb2xpY3kgTWFwcGluZwoqICAgICAgICAgICAgICAgIFNBIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBTQSBvZiBhIGZyYW1lIGlzIGNvbnRhaW5lZCBpbiAKKiAgICAgICAgICAgICAgICB0aGUgQVRVIGFkZHJlc3MgZGF0YWJhc2Ugd2l0aCBhbiBFbnRyeSBTdGF0ZSB0aGF0IGluZGljYXRlcyBQb2xpY3kuCiogICAgICAgICAgICBQT0xJQ1lfVFlQRV9WVFUgLSBWVFUgUG9saWN5IE1hcHBpbmcKKiAgICAgICAgICAgICAgICBWVFUgUG9saWN5IE1hcHBpbmcgb2NjdXJzIHdoZW4gdGhlIFZJRCBvZiBhIGZyYW1lIGlzIGNvbnRhaW5lZCBpbgoqICAgICAgICAgICAgICAgIHRoZSBWVFUgZGF0YWJhc2Ugd2l0aCB0aGUgVmlkUG9saWN5IGlzIGVuYWJsZWQuCiogICAgICAgICAgICBQT0xJQ1lfVFlQRV9FVFlQRSAtIEV0aGVyVHlwZSBQb2xpY3kgTWFwcGluZwoqICAgICAgICAgICAgICAgIEVUeXBlIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBFdGhlclR5cGUgb2YgYSBmcmFtZSBtYXRjaGVzCiogICAgICAgICAgICAgICAgdGhlIFBvcnRFVHlwZSAoc2VlIGdwcnRTZXRQb3J0RVR5cGUgQVBJKQoqICAgICAgICAgICAgUE9MSUNZX1RZUEVfUFBQb0UgLSBQUFBvRSBQb2xpY3kgTWFwcGluZwoqICAgICAgICAgICAgICAgIFBQUG9FIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBFdGhlclR5cGUgb2YgYSBmcmFtZSBtYXRjaGVzIDB4ODg2MwoqICAgICAgICAgICAgUE9MSUNZX1RZUEVfVkJBUyAtIFZCQVMgUG9saWN5IE1hcHBpbmcKKiAgICAgICAgICAgICAgICBWQkFTIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBFdGhlclR5cGUgb2YgYSBmcmFtZSBtYXRjaGVzIDB4ODIwMAoqICAgICAgICAgICAgUE9MSUNZX1RZUEVfT1BUODIgLSBESENQIE9wdGlvbiA4MiBQb2xpY3kgTWFwcGluZwoqICAgICAgICAgICAgICAgIERIQ1AgT3B0aW9uIDgyIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBpbmdyZXNzaW5nIGZyYW1lIGlzIGFuCiogICAgICAgICAgICAgICAgSVB2NCBVRFAgd2l0aCBhIFVEUCBEZXN0aW5hdGlvbiBwb3J0ID0gMHgwMDQzIG9yIDB4MDA0NCwgb3IgYW4KKiAgICAgICAgICAgICAgICBJUHY2IFVEUCB3aXRoIGEgVURQIERlc3RpbmF0aW9uIHBvcnQgPSAweDAyMjMgb3IgMHgwMjIyCiogICAgICAgICAgICBQT0xJQ1lfVFlQRV9VRFAgLSBVRFAgUG9saWN5IE1hcHBpbmcKKiAgICAgICAgICAgICAgICBVRFAgUG9saWN5IE1hcHBpbmcgb2NjdXJzIHdoZW4gdGhlIGluZ3Jlc3NpbmcgZnJhbWUgaXMKKiAgICAgICAgICAgICAgICBhIEJyb2FkY2FzdCBJUHY0IFVEUCBvciBhIE11bHRpY2FzdCBJUHY2IFVEUC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICB0eXBlICAgICAtIHBvbGljeSB0eXBlIChHVF9QT0xJQ1lfVFlQRSkKKgoqIE9VVFBVVFM6CiogICAgICAgcG9saWN5ICAgICAtIHBvbGljeSAoR1RfRlJBTUVfUE9MSUNZKQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQb2xpY3kKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOICBHVF9QT0xJQ1lfVFlQRSAgICB0eXBlLAogICAgT1VUIEdUX0ZSQU1FX1BPTElDWSAgICAqcG9saWN5Cik7CgoKLyogZ3RQb3J0Q3RybC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQYXVzZUxpbWl0T3V0CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgTGltaXQgdGhlIG51bWJlciBvZiBjb250aW51b3VzIFBhdXNlIHJlZnJlc2ggZnJhbWVzIHRoYXQgY2FuIGJlIHRyYW5zbWl0dGVkCiogICAgICAgIGZyb20gdGhpcyBwb3J0LiBXaGVuIGZ1bGwgZHVwbGV4IEZsb3cgQ29udHJvbCBpcyBlbmFibGVkIG9uIHRoaXMgcG9ydCwKKiAgICAgICAgdGhlc2UgYml0cyBhcmUgdXNlZCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIFBhdXNlIHJlZnJlc2ggZnJhbWVzIHRoYXQgY2FuIAoqICAgICAgICBiZSBnZW5lcmF0ZWQgZnJvbSB0aGlzIHBvcnQgdG8ga2VlcCB0aGlzIHBvcnQncyBsaW5rIHBhcnRuZXIgZnJvbSBzZW5kaW5nCiogICAgICAgIGFueSBkYXRhLgoqICAgICAgICBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gMCB3aWxsIGFsbG93IGNvbnRpbnVvdXMgUGF1c2UgZnJhbWUgcmVmcmVzaGVzIHRvIAoqICAgICAgICBlZ3Jlc3MgdGhpcyBwb3J0IGFzIGxvbmcgYXMgdGhpcyBwb3J0IHJlbWFpbnMgY29uZ2VzdGVkLgoqICAgICAgICBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gMSB3aWxsIGFsbG93IDEgUGF1c2UgZnJhbWUgdG8gZWdyZXNzIGZyb20gdGhpcyBwb3J0CiogICAgICAgIGZvciBlYWNoIGNvbmdlc3Rpb24gc2l0dWF0aW9uLgoqICAgICAgICBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gMiB3aWxsIGFsbG93IDIgUGF1c2UgZnJhbWVzIHRvIGVncmVzcyBmcm9tIHRoaXMgcG9ydAoqICAgICAgICBmb3IgZWFjaCBjb25nZXN0aW9uIHNpdHVhdGlvbiwgZXRjLgoqICAgICAgICAKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgICBsaW1pdCAtIHRoZSBtYXggbnVtYmVyIG9mIFBhdXNlIHJlZnJlc2ggZnJhbWVzIGZvciBlYWNoIGNvbmdlc3Rpb24gc2l0dWF0aW9uCiogICAgICAgICAgICAgICAgKCAwIH4gMHhGRikKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgbGltaXQgPiAweEZGCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFBhdXNlTGltaXRPdXQKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgR1RfVTE2ICAgICAgICBsaW1pdAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UGF1c2VMaW1pdE91dAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIExpbWl0IHRoZSBudW1iZXIgb2YgY29udGludW91cyBQYXVzZSByZWZyZXNoIGZyYW1lcyB0aGF0IGNhbiBiZSB0cmFuc21pdHRlZAoqICAgICAgICBmcm9tIHRoaXMgcG9ydC4gV2hlbiBmdWxsIGR1cGxleCBGbG93IENvbnRyb2wgaXMgZW5hYmxlZCBvbiB0aGlzIHBvcnQsCiogICAgICAgIHRoZXNlIGJpdHMgYXJlIHVzZWQgdG8gbGltaXQgdGhlIG51bWJlciBvZiBQYXVzZSByZWZyZXNoIGZyYW1lcyB0aGF0IGNhbiAKKiAgICAgICAgYmUgZ2VuZXJhdGVkIGZyb20gdGhpcyBwb3J0IHRvIGtlZXAgdGhpcyBwb3J0J3MgbGluayBwYXJ0bmVyIGZyb20gc2VuZGluZwoqICAgICAgICBhbnkgZGF0YS4KKiAgICAgICAgU2V0dGluZyB0aGlzIHZhbHVlIHRvIDAgd2lsbCBhbGxvdyBjb250aW51b3VzIFBhdXNlIGZyYW1lIHJlZnJlc2hlcyB0byAKKiAgICAgICAgZWdyZXNzIHRoaXMgcG9ydCBhcyBsb25nIGFzIHRoaXMgcG9ydCByZW1haW5zIGNvbmdlc3RlZC4KKiAgICAgICAgU2V0dGluZyB0aGlzIHZhbHVlIHRvIDEgd2lsbCBhbGxvdyAxIFBhdXNlIGZyYW1lIHRvIGVncmVzcyBmcm9tIHRoaXMgcG9ydAoqICAgICAgICBmb3IgZWFjaCBjb25nZXN0aW9uIHNpdHVhdGlvbi4KKiAgICAgICAgU2V0dGluZyB0aGlzIHZhbHVlIHRvIDIgd2lsbCBhbGxvdyAyIFBhdXNlIGZyYW1lcyB0byBlZ3Jlc3MgZnJvbSB0aGlzIHBvcnQKKiAgICAgICAgZm9yIGVhY2ggY29uZ2VzdGlvbiBzaXR1YXRpb24sIGV0Yy4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqICAgICAgICBsaW1pdCAtIHRoZSBtYXggbnVtYmVyIG9mIFBhdXNlIHJlZnJlc2ggZnJhbWVzIGZvciBlYWNoIGNvbmdlc3Rpb24gc2l0dWF0aW9uCiogICAgICAgICAgICAgICAgKCAwIH4gMHhGRikKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQYXVzZUxpbWl0T3V0CigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX1UxNiAgICAgICAgKmxpbWl0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQYXVzZUxpbWl0SW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBMaW1pdCB0aGUgbnVtYmVyIG9mIGNvbnRpbnVvdXMgUGF1c2UgcmVmcmVzaCBmcmFtZXMgdGhhdCBjYW4gYmUgcmVjZWl2ZWQKKiAgICAgICAgb24gdGhpcyBwb3J0LiBXaGVuIGEgcG9ydCBoYXMgZmxvdyBDb250cm9sIGVuYWJsZWQsIHRoaXMgdmFsdWUgY2FuIGJlIAoqICAgICAgICB1c2VkIHRvIGxpbWl0IGhvdyBsb25nIHRoaXMgcG9ydCBjYW4gYmUgUGF1c2VkIG9mZiB0byBwcmV2ZW50IGEgcG9ydCBzdGFsbAoqICAgICAgICB0aHJvdWdoIGphbW1pbmcuCiogICAgICAgIFdoZW4gdGhpcyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2Ugb2YgMHgwMSB0byAweEZGLCBhbmQgYSBmcmFtZSBpcyByZWFkeSB0bwoqICAgICAgICBiZSB0cmFuc21pdHRlZCBvdXQgdGhpcyBwb3J0LCBidXQgaXQgY2Fubm90IGJlIHRyYW5zbWl0dGVkIGR1ZSB0byB0aGUgcG9ydAoqICAgICAgICBiZWluZyBqYW1tZWQsIHRoaXMgbGltaXQgbWVjaGFuaXNtIHN0YXJ0cy4gVGhlIGxpbWl0IG1lY2hhbmlzbSBzdGFydHMgCiogICAgICAgIGNvdW50aW5nIG5ldyBQYXVzZSByZWZyZXNoIGZyYW1lcyBvciBjb3VudHMgb2YgMTYgY29uc2VjdXRpdmUgY29sbGlzaW9ucy4KKiAgICAgICAgSWYgdGhlIGNvdW50ZXIgcmVhY2hlcyB0aGUgdmFsdWUgc2V0IHRocm91Z2ggdGhpcyBBUEksIHRoZSBmb2xsb3dpbmcgZXZlbnQKKiAgICAgICAgd2lsbCBvY2N1cjoKKiAgICAgICAgICAgIDEpIFBvcnQncyBGb3JjZUZDIGlzIGVuYWJsZWQsCiogICAgICAgICAgICAyKSBQb3J0J3MgRkNWYWx1ZSBpcyBjbGVhcmVkIHRvIGEgemVybywgYW5kCiogICAgICAgICAgICAzKSBKYW0gTGltaXQgSW50ZXJydXB0IGlzIGFzc2VydGVkLgoqICAgICAgICBUaGlzIGVmZmVjdGl2ZWx5IGRpc2FibGVzIEZsb3cgQ29udHJvbCBvbiB0aGUgcG9ydCBvbmNlIHRoZSBQYXVzZSB0aW1lciAKKiAgICAgICAgZXhwaXJlcy4gSWYgYSBmcmFtZSBnZXRzIHRyYW5zbWl0dGVkIG91dCB0aGlzIHBvcnQgYmVmb3JlIHRoZSBjb3VudGVyCiogICAgICAgIHJlYWNoZXMgdGhpcyBsaW1pdCwgdGhlbiB0aGlzIGxpbWl0IG1lY2hhbmlzbSBjb3VudGVyIHJlc2V0cyBiYWNrIHRvIHplcm8uCioKKiAgICAgICAgU2V0dGluZyB0aGlzIHZhbHVlIHRvIDAgd2lsbCBhbGxvdyBjb250aW51b3VzIGphbW1pbmcgdG8gYmUgcmVjZWl2ZWQgb24gCiogICAgICAgIHRoaXMgcG9ydCB3aXRob3V0IHRoZSBQb3J0J3MgRm9yY2VGQyBhbmQgRkNWYWx1ZSBnZXR0aW5nIG1vZGlmaWVkLgoqCiogICAgICAgIFRoZSBtb2RpZmljYXRpb24gb2YgUG9ydCdzIEZvcmNlRkMgYW5kIEZDVmFsdWUgaXMgdGhlIG9ubHkgaW5kaWNhdGlvbiB0aGF0IAoqICAgICAgICB0aGUgbGltaXQgd2FzIHJlYWNoZWQgb24gdGhpcyBwb3J0LgoqICAgICAgICAKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgICBsaW1pdCAtIHRoZSBtYXggbnVtYmVyIG9mIGNvbnRpbnVvdXMgUGF1c2UgcmVmcmVzaCBmcmFtZXMgZm9yIGVhY2ggdHJhc21pdGlvbgoqICAgICAgICAgICAgICAgICggMCB+IDB4RkYpCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGxpbWl0ID4gMHhGRgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRQYXVzZUxpbWl0SW4KKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgR1RfVTE2ICAgICAgICBsaW1pdAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UGF1c2VMaW1pdEluCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgTGltaXQgdGhlIG51bWJlciBvZiBjb250aW51b3VzIFBhdXNlIHJlZnJlc2ggZnJhbWVzIHRoYXQgY2FuIGJlIHJlY2VpdmVkCiogICAgICAgIG9uIHRoaXMgcG9ydC4gV2hlbiBhIHBvcnQgaGFzIGZsb3cgQ29udHJvbCBlbmFibGVkLCB0aGlzIHZhbHVlIGNhbiBiZSAKKiAgICAgICAgdXNlZCB0byBsaW1pdCBob3cgbG9uZyB0aGlzIHBvcnQgY2FuIGJlIFBhdXNlZCBvZmYgdG8gcHJldmVudCBhIHBvcnQgc3RhbGwKKiAgICAgICAgdGhyb3VnaCBqYW1taW5nLgoqICAgICAgICBXaGVuIHRoaXMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIG9mIDB4MDEgdG8gMHhGRiwgYW5kIGEgZnJhbWUgaXMgcmVhZHkgdG8KKiAgICAgICAgYmUgdHJhbnNtaXR0ZWQgb3V0IHRoaXMgcG9ydCwgYnV0IGl0IGNhbm5vdCBiZSB0cmFuc21pdHRlZCBkdWUgdG8gdGhlIHBvcnQKKiAgICAgICAgYmVpbmcgamFtbWVkLCB0aGlzIGxpbWl0IG1lY2hhbmlzbSBzdGFydHMuIFRoZSBsaW1pdCBtZWNoYW5pc20gc3RhcnRzIAoqICAgICAgICBjb3VudGluZyBuZXcgUGF1c2UgcmVmcmVzaCBmcmFtZXMgb3IgY291bnRzIG9mIDE2IGNvbnNlY3V0aXZlIGNvbGxpc2lvbnMuCiogICAgICAgIElmIHRoZSBjb3VudGVyIHJlYWNoZXMgdGhlIHZhbHVlIHNldCB0aHJvdWdoIHRoaXMgQVBJLCB0aGUgZm9sbG93aW5nIGV2ZW50CiogICAgICAgIHdpbGwgb2NjdXI6CiogICAgICAgICAgICAxKSBQb3J0J3MgRm9yY2VGQyBpcyBlbmFibGVkLAoqICAgICAgICAgICAgMikgUG9ydCdzIEZDVmFsdWUgaXMgY2xlYXJlZCB0byBhIHplcm8sIGFuZAoqICAgICAgICAgICAgMykgSmFtIExpbWl0IEludGVycnVwdCBpcyBhc3NlcnRlZC4KKiAgICAgICAgVGhpcyBlZmZlY3RpdmVseSBkaXNhYmxlcyBGbG93IENvbnRyb2wgb24gdGhlIHBvcnQgb25jZSB0aGUgUGF1c2UgdGltZXIgCiogICAgICAgIGV4cGlyZXMuIElmIGEgZnJhbWUgZ2V0cyB0cmFuc21pdHRlZCBvdXQgdGhpcyBwb3J0IGJlZm9yZSB0aGUgY291bnRlcgoqICAgICAgICByZWFjaGVzIHRoaXMgbGltaXQsIHRoZW4gdGhpcyBsaW1pdCBtZWNoYW5pc20gY291bnRlciByZXNldHMgYmFjayB0byB6ZXJvLgoqCiogICAgICAgIFNldHRpbmcgdGhpcyB2YWx1ZSB0byAwIHdpbGwgYWxsb3cgY29udGludW91cyBqYW1taW5nIHRvIGJlIHJlY2VpdmVkIG9uIAoqICAgICAgICB0aGlzIHBvcnQgd2l0aG91dCB0aGUgUG9ydCdzIEZvcmNlRkMgYW5kIEZDVmFsdWUgZ2V0dGluZyBtb2RpZmllZC4KKgoqICAgICAgICBUaGUgbW9kaWZpY2F0aW9uIG9mIFBvcnQncyBGb3JjZUZDIGFuZCBGQ1ZhbHVlIGlzIHRoZSBvbmx5IGluZGljYXRpb24gdGhhdCAKKiAgICAgICAgdGhlIGxpbWl0IHdhcyByZWFjaGVkIG9uIHRoaXMgcG9ydC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqICAgICAgICBsaW1pdCAtIHRoZSBtYXggbnVtYmVyIG9mIGNvbnRpbnVvdXMgUGF1c2UgcmVmcmVzaCBmcmFtZXMgZm9yIGVhY2ggdHJhc21pdGlvbgoqICAgICAgICAgICAgICAgICggMCB+IDB4RkYpCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UGF1c2VMaW1pdEluCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX1UxNiAgICAgICAgKmxpbWl0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRGcmFtZU1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBGcm1hZSBNb2RlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBleHBlY3RlZCBJbmdyZXNzIGFuZCB0aGUgZ2VuZXJhdGVkIEVncmVzcwoqICAgICAgICB0YWdnaW5nIGZyYW1lIGZvcm1hdCBmb3IgdGhpcyBwb3J0IGFzIGZvbGxvd3M6CiogICAgICAgICAgICBHVF9GUkFNRV9NT0RFX05PUk1BTCAtCiogICAgICAgICAgICAgICAgTm9ybWFsIE5ldHdvcmsgbW9kZSB1c2VzIGluZHVzdHJ5IHN0YW5kYXJkIElFRUUgODAyLjNhYyBUYWdnZWQgb3IgCiogICAgICAgICAgICAgICAgVW50YWdnZWQgZnJhbWVzLiBUYWdnZWQgZnJhbWVzIHVzZSBhbiBFdGhlciBUeXBlIG9mIDB4ODEwMC4KKiAgICAgICAgICAgIEdUX0ZSQU1FX01PREVfRFNBIC0KKiAgICAgICAgICAgICAgICBEU0EgbW9kZSB1c2VzIGEgTWFydmVsbCBkZWZpbmVkIHRhZ2dlZCBmcmFtZSBmb3JtYXQgZm9yIAoqICAgICAgICAgICAgICAgIENoaXAtdG8tQ2hpcCBhbmQgQ2hpcC10by1DUFUgY29ubmVjdGlvbnMuCiogICAgICAgICAgICBHVF9GUkFNRV9NT0RFX1BST1ZJREVSIC0KKiAgICAgICAgICAgICAgICBQcm92aWRlciBtb2RlIHVzZXMgdXNlciBkZWZpbmFibGUgRXRoZXIgVHlwZXMgcGVyIHBvcnQgCiogICAgICAgICAgICAgICAgKHNlZSBncHJ0U2V0UG9ydEVUeXBlL2dwcnRHZXRQb3J0RVR5cGUgQVBJKS4KKiAgICAgICAgICAgIEdUX0ZSQU1FX01PREVfRVRIRVJfVFlQRV9EU0EgLQoqICAgICAgICAgICAgICAgIEV0aGVyIFR5cGUgRFNBIG1vZGUgdXNlcyBzdGFuZGFyZCBNYXJ2ZWxsIERTQSBUYWdnZWQgZnJhbWUgaW5mbyAKKiAgICAgICAgICAgICAgICBmbG93aW5nIGEgdXNlciBkZWZpbmFibGUgRXRoZXIgVHlwZS4gVGhpcyBtb2RlIGFsbG93cyB0aGUgbWl4dHVyZQoqICAgICAgICAgICAgICAgIG9mIE5vcm1hbCBOZXR3b3JrIGZyYW1lcyB3aXRoIERTQSBUYWdnZWQgZnJhbWVzIGFuZCBpcyB1c2VmdWwgdG8gCiogICAgICAgICAgICAgICAgYmUgdXNlZCBvbiBwb3J0cyB0aGF0IGNvbm5lY3QgdG8gYSBDUFUuCiogICAgICAgIAoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgIG1vZGUgLSBHVF9GUkFNRV9NT0RFIHR5cGUKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgbW9kZSBpcyB1bmtub3duCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldEZyYW1lTW9kZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIElOICBHVF9GUkFNRV9NT0RFICAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEZyYW1lTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIEZybWFlIE1vZGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIGV4cGVjdGVkIEluZ3Jlc3MgYW5kIHRoZSBnZW5lcmF0ZWQgRWdyZXNzCiogICAgICAgIHRhZ2dpbmcgZnJhbWUgZm9ybWF0IGZvciB0aGlzIHBvcnQgYXMgZm9sbG93czoKKiAgICAgICAgICAgIEdUX0ZSQU1FX01PREVfTk9STUFMIC0KKiAgICAgICAgICAgICAgICBOb3JtYWwgTmV0d29yayBtb2RlIHVzZXMgaW5kdXN0cnkgc3RhbmRhcmQgSUVFRSA4MDIuM2FjIFRhZ2dlZCBvciAKKiAgICAgICAgICAgICAgICBVbnRhZ2dlZCBmcmFtZXMuIFRhZ2dlZCBmcmFtZXMgdXNlIGFuIEV0aGVyIFR5cGUgb2YgMHg4MTAwLgoqICAgICAgICAgICAgR1RfRlJBTUVfTU9ERV9EU0EgLQoqICAgICAgICAgICAgICAgIERTQSBtb2RlIHVzZXMgYSBNYXJ2ZWxsIGRlZmluZWQgdGFnZ2VkIGZyYW1lIGZvcm1hdCBmb3IgCiogICAgICAgICAgICAgICAgQ2hpcC10by1DaGlwIGFuZCBDaGlwLXRvLUNQVSBjb25uZWN0aW9ucy4KKiAgICAgICAgICAgIEdUX0ZSQU1FX01PREVfUFJPVklERVIgLQoqICAgICAgICAgICAgICAgIFByb3ZpZGVyIG1vZGUgdXNlcyB1c2VyIGRlZmluYWJsZSBFdGhlciBUeXBlcyBwZXIgcG9ydCAKKiAgICAgICAgICAgICAgICAoc2VlIGdwcnRTZXRQb3J0RVR5cGUvZ3BydEdldFBvcnRFVHlwZSBBUEkpLgoqICAgICAgICAgICAgR1RfRlJBTUVfTU9ERV9FVEhFUl9UWVBFX0RTQSAtCiogICAgICAgICAgICAgICAgRXRoZXIgVHlwZSBEU0EgbW9kZSB1c2VzIHN0YW5kYXJkIE1hcnZlbGwgRFNBIFRhZ2dlZCBmcmFtZSBpbmZvIAoqICAgICAgICAgICAgICAgIGZsb3dpbmcgYSB1c2VyIGRlZmluYWJsZSBFdGhlciBUeXBlLiBUaGlzIG1vZGUgYWxsb3dzIHRoZSBtaXh0dXJlCiogICAgICAgICAgICAgICAgb2YgTm9ybWFsIE5ldHdvcmsgZnJhbWVzIHdpdGggRFNBIFRhZ2dlZCBmcmFtZXMgYW5kIGlzIHVzZWZ1bCB0byAKKiAgICAgICAgICAgICAgICBiZSB1c2VkIG9uIHBvcnRzIHRoYXQgY29ubmVjdCB0byBhIENQVS4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqICAgICAgICBtb2RlIC0gR1RfRlJBTUVfTU9ERSB0eXBlCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0RnJhbWVNb2RlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX0ZSQU1FX01PREUgICAgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldEhvbGRBdDEKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBIb2xkIEFnaW5nIEFUVSBFbnRyaWVzIGF0IGFuIEVudHJ5IFN0YXRlIHZhbHVlIG9mIDEuIFdoZW4gdGhpcyBmZWF0dXJlCiogICAgICAgIGlzIHNldCB0byBHVF9UUlVFLCBBVFUgZW50cmllcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwb3J0IHdpbGwgYWdlIGRvd24gCiogICAgICAgIHRvIGFuIEVudHJ5IFN0YXRlIG9mIDB4MSwgYnV0IHdpbGwgbm90IGdvIHRvIDB4MCAoMHgwIHdvdWxkIHB1cmdlIHRoZQoqICAgICAgICBlbnRyeSkKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBtb2RlIC0gR1RfVFJVRSB0byBob2xkIGFnaW5nIEFUVSBlbnRyeSB3aXRoIEVudHJ5IFN0YXRlIG9mIDEsIAoqICAgICAgICAgICAgICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldEhvbGRBdDEKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOIEdUX0JPT0wgICAgICAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEhvbGRBdDEKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBIb2xkIEFnaW5nIEFUVSBFbnRyaWVzIGF0IGFuIEVudHJ5IFN0YXRlIHZhbHVlIG9mIDEuIFdoZW4gdGhpcyBmZWF0dXJlCiogICAgICAgIGlzIHNldCB0byBHVF9UUlVFLCBBVFUgZW50cmllcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwb3J0IHdpbGwgYWdlIGRvd24gCiogICAgICAgIHRvIGFuIEVudHJ5IFN0YXRlIG9mIDB4MSwgYnV0IHdpbGwgbm90IGdvIHRvIDB4MCAoMHgwIHdvdWxkIHB1cmdlIHRoZQoqICAgICAgICBlbnRyeSkKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgLSBHVF9UUlVFIHRvIGhvbGQgYWdpbmcgQVRVIGVudHJ5IHdpdGggRW50cnkgU3RhdGUgb2YgMSwgCiogICAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEhvbGRBdDEKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRSZWZyZXNoTG9ja2VkCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgQXV0byBSZWZyZXNoIGtub3duIGFkZHJlc3NlcyB3aGVuIHBvcnQgaXMgTG9ja2VkLiBBbHJlYWR5IGtub3duIGFkZHJlc3NlcyAKKiAgICAgICAgd2lsbCBiZSBhdXRvIHJlZnJlc2hlZCB3aGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLiBXaGVuIHRoaXMgZmVhdHVyZQoqICAgICAgICBpcyBkaXNhYmxlZCwgYXV0byByZWZyZXNoaW5nIHdpbGwgbm90IG9jY3VyIG9uIExvY2tlZCBwb3J0cy4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBtb2RlIC0gR1RfVFJVRSB0byBlbmFibGUgQXV0byBSZWZyZXNoIGtub3duIGFkZHJlc3NlcyBvbiBsb2NrZWQgcG9ydAoqICAgICAgICAgICAgICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFJlZnJlc2hMb2NrZWQKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOIEdUX0JPT0wgICAgICAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFJlZnJlc2hMb2NrZWQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBBdXRvIFJlZnJlc2gga25vd24gYWRkcmVzc2VzIHdoZW4gcG9ydCBpcyBMb2NrZWQuIEFscmVhZHkga25vd24gYWRkcmVzc2VzIAoqICAgICAgICB3aWxsIGJlIGF1dG8gcmVmcmVzaGVkIHdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQuIFdoZW4gdGhpcyBmZWF0dXJlCiogICAgICAgIGlzIGRpc2FibGVkLCBhdXRvIHJlZnJlc2hpbmcgd2lsbCBub3Qgb2NjdXIgb24gTG9ja2VkIHBvcnRzLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIEF1dG8gUmVmcmVzaCBrbm93biBhZGRyZXNzZXMgb24gbG9ja2VkIHBvcnQKKiAgICAgICAgICAgICAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UmVmcmVzaExvY2tlZAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFBvcnRFVHlwZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBwb3J0J3Mgc3BlY2lhbCBFdGhlciBUeXBlLiBUaGlzIEV0aGVyIFR5cGUgaXMgdXNlZAoqICAgICAgICBmb3IgUG9saWN5IChzZWUgZ3BydFNldFBvbGljeSBBUEkpIGFuZCBGcmFtZU1vZGUgKHNlZSBncHJ0U2V0RnJhbWVNb2RlIEFQSSkuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICAgZXR5cGUgLSBwb3J0J3Mgc3BlY2lhbCBldGhlciB0eXBlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFBvcnRFVHlwZQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgSU4gR1RfRVRZUEUgICAgICAgIGV0eXBlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQb3J0RVR5cGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgcmV0cmlldmVzIHRoZSBwb3J0J3Mgc3BlY2lhbCBFdGhlciBUeXBlLiBUaGlzIEV0aGVyIFR5cGUgaXMgdXNlZAoqICAgICAgICBmb3IgUG9saWN5IChzZWUgZ3BydFNldFBvbGljeSBBUEkpIGFuZCBGcmFtZU1vZGUgKHNlZSBncHJ0U2V0RnJhbWVNb2RlIEFQSSkuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CiogICAgICAgIGV0eXBlIC0gcG9ydCdzIHNwZWNpYWwgZXRoZXIgdHlwZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFBvcnRFVHlwZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9FVFlQRSAgICAqZXR5cGUKKTsKCgovKiBndFBvcnRSYXRlQ3RyLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjU2V0RnJhbWVPdmVyaGVhZAoqCiogREVTQ1JJUFRJT046CiogICAgICAgRWdyZXNzIHJhdGUgZnJhbWUgb3ZlcmhlYWQgYWRqdXN0bWVudC4KKiAgICAgICAgVGhpcyBmaWVsZCBpcyB1c2VkIHRvIGFkanVzdCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgbmVlZCB0byBiZSBhZGRlZCB0byBhCiogICAgICAgIGZyYW1lJ3MgSUZHIG9uIGEgcGVyIGZyYW1lIGJhc2lzLgoqCiogICAgICAgIFRoZSBlZ3Jlc3MgcmF0ZSBsaW1pdGVyIG11bHRpcGxpZXMgdGhlIHZhbHVlIHByb2dyYW1tZWQgaW4gdGhpcyBmaWVsZCBieSBmb3VyCiogICAgICAgIGZvciBjb21wdXRpbmcgdGhlIGZyYW1lIGJ5dGUgb2Zmc2V0IGFkanVzdG1lbnQgdmFsdWUgKGkuZS4sIHRoZSBhbW91bnQgdGhlCiogICAgICAgIElQRyBpcyBpbmNyZWFzZWQgZm9yIGV2ZXJ5IGZyYW1lKS4gVGhpcyBhZGp1c3RtZW50LCBpZiBlbmFibGVkLCBpcyBtYWRlIHRvCiogICAgICAgIGV2ZXJ5IGVncmVzc2luZyBmcmFtZSdzIElQRyBhbmQgaXQgaXMgbWFkZSBpbiBhZGRpdGlvbiB0byBhbnkgb3RoZXIgSVBHCiogICAgICAgIGFkanVzdG1lbnRzIGR1ZSB0byBvdGhlciBFZ3Jlc3MgUmF0ZSBDb250cm9sIHNldHRpbmdzLgoqCiogICAgICAgIFRoZSBlZ3Jlc3Mgb3ZlcmhlYWQgYWRqdXN0bWVudCBjYW4gYWRkIHRoZSBmb2xsb3dpbmcgbnVtYmVyIG9mIGJ5dGUgdGltZXMKKiAgICAgICAgdG8gZWFjaCBmcmFtZSdzIElQRzogMCwgNCwgOCwgMTIsIDE2LCAyMCwgMjQsIDI4LCAzMiwgMzYsIDQwLCA0NCwgNDgsIDUyLAoqICAgICAgICA1NiBhbmQgNjAuCioKKiAgICAgICAgRXhhbXBsZToKKiAgICAgICAgSWYgRnJhbWVPdmVyaGVhZCA9IDExLCB0aGUgZWdyZXNzIHJhdGUgbGltaXRlciB3b3VsZCBpbmNyZWFzZSB0aGUgSVBHCiogICAgICAgIGJldHdlZW4gZXZlcnkgZnJhbWUgYnkgYW4gYWRkaXRpb25hbCA0NCBieXRlcy4KKgoqICAgICAgICBOb3RlOiBXaGVuIHRoZSBDb3VudCBNb2RlIChwb3J0IG9mZnNldCAweDBBKSBpcyBpbiBGcmFtZSBiYXNlZCBlZ3Jlc3MgcmF0ZQoqICAgICAgICBzaGFwaW5nIG1vZGUsIHRoZXNlIEZyYW1lIE92ZXJoZWFkIGJpdHMgbXVzdCBiZSAweDAuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG92ZXJoZWFkIC0gRnJhbWUgb3ZlcmhlYWQgKDAgfiAxNSkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNTZXRGcmFtZU92ZXJoZWFkCigKICAgIElOIEdUX1FEX0RFViAgICAgICAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICAgICAgcG9ydCwKICAgIElOIEdUXzMyICAgICAgICAgICAgb3ZlcmhlYWQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjR2V0RnJhbWVPdmVyaGVhZAoqCiogREVTQ1JJUFRJT046CiogICAgICAgRWdyZXNzIHJhdGUgZnJhbWUgb3ZlcmhlYWQgYWRqdXN0bWVudC4KKiAgICAgICAgVGhpcyBmaWVsZCBpcyB1c2VkIHRvIGFkanVzdCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgbmVlZCB0byBiZSBhZGRlZCB0byBhCiogICAgICAgIGZyYW1lJ3MgSUZHIG9uIGEgcGVyIGZyYW1lIGJhc2lzLgoqCiogICAgICAgIFRoZSBlZ3Jlc3MgcmF0ZSBsaW1pdGVyIG11bHRpcGxpZXMgdGhlIHZhbHVlIHByb2dyYW1tZWQgaW4gdGhpcyBmaWVsZCBieSBmb3VyCiogICAgICAgIGZvciBjb21wdXRpbmcgdGhlIGZyYW1lIGJ5dGUgb2Zmc2V0IGFkanVzdG1lbnQgdmFsdWUgKGkuZS4sIHRoZSBhbW91bnQgdGhlCiogICAgICAgIElQRyBpcyBpbmNyZWFzZWQgZm9yIGV2ZXJ5IGZyYW1lKS4gVGhpcyBhZGp1c3RtZW50LCBpZiBlbmFibGVkLCBpcyBtYWRlIHRvCiogICAgICAgIGV2ZXJ5IGVncmVzc2luZyBmcmFtZSdzIElQRyBhbmQgaXQgaXMgbWFkZSBpbiBhZGRpdGlvbiB0byBhbnkgb3RoZXIgSVBHCiogICAgICAgIGFkanVzdG1lbnRzIGR1ZSB0byBvdGhlciBFZ3Jlc3MgUmF0ZSBDb250cm9sIHNldHRpbmdzLgoqCiogICAgICAgIFRoZSBlZ3Jlc3Mgb3ZlcmhlYWQgYWRqdXN0bWVudCBjYW4gYWRkIHRoZSBmb2xsb3dpbmcgbnVtYmVyIG9mIGJ5dGUgdGltZXMKKiAgICAgICAgdG8gZWFjaCBmcmFtZSdzIElQRzogMCwgNCwgOCwgMTIsIDE2LCAyMCwgMjQsIDI4LCAzMiwgMzYsIDQwLCA0NCwgNDgsIDUyLAoqICAgICAgICA1NiBhbmQgNjAuCioKKiAgICAgICAgRXhhbXBsZToKKiAgICAgICAgSWYgRnJhbWVPdmVyaGVhZCA9IDExLCB0aGUgZWdyZXNzIHJhdGUgbGltaXRlciB3b3VsZCBpbmNyZWFzZSB0aGUgSVBHCiogICAgICAgIGJldHdlZW4gZXZlcnkgZnJhbWUgYnkgYW4gYWRkaXRpb25hbCA0NCBieXRlcy4KKgoqICAgICAgICBOb3RlOiBXaGVuIHRoZSBDb3VudCBNb2RlIChwb3J0IG9mZnNldCAweDBBKSBpcyBpbiBGcmFtZSBiYXNlZCBlZ3Jlc3MgcmF0ZQoqICAgICAgICBzaGFwaW5nIG1vZGUsIHRoZXNlIEZyYW1lIE92ZXJoZWFkIGJpdHMgbXVzdCBiZSAweDAuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIG92ZXJoZWFkIC0gRnJhbWUgb3ZlcmhlYWQgKDAgfiAxNSkKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNHZXRGcmFtZU92ZXJoZWFkCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfMzIgICAgKm92ZXJoZWFkCik7CgoKLyogZ3RQb3J0U3RhdHVzLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEJ1ZkhpZ2gKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBPdXRwdXQgZnJvbSBRQyB0ZWxsaW5nIHRoZSBNQUMgdGhhdCBpdCBzaG91bGQgcGVyZm9ybSBGbG93IENvbnRyb2wuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKiAgICAgICAgYnVmSGlnaCAtIEdUX1RSVUUsIGlmIEZsb3cgY29udHJvbCByZXF1aXJlZAoqICAgICAgICAgICAgICAgICAgR1RfRkFMU0UsIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEJ1ZkhpZ2gKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICAgKmJ1ZkhpZ2gKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEZjRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBJbnB1dCBpbnRvIHRoZSBRQyB0ZWxsaW5nIGl0IHRoYXQgRmxvdyBDb250cm9sIGlzIGVuYWJsZWQgb24gdGhpcyBwb3J0LgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CiogICAgICAgIGZjRW4gLSBHVF9UUlVFLCBpZiBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZAoqICAgICAgICAgICAgICAgR1RfRkFMU0UsIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEZjRW4KKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICAgKmZjRW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFJzdlNpemUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBJbmdyZXNzIHJlc2VydmVkIHF1ZXVlIHNpemUgY291bnRlci4KKiAgICAgICAgVGhpcyBjb3VudGVyIHJlZmxlY3RzIHRoZSBjdXJyZW50IG51bWJlciBvZiByZXNlcnZlZCBpbmdyZXNzIGJ1ZmZlcnMgCiogICAgICAgIGFzc2lnbmVkIHRvIHRoaXMgcG9ydC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqICAgICAgICBjb3VudCAtIHJlc2VydmVkIGluZ3Jlc3MgcXVldWUgc2l6ZSBjb3VudGVyIHZhbHVlCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UnN2U2l6ZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9VMTYgICAgICAgICpjb3VudAopOwoKCi8qIGd0UHJpVGFibGUuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UVByaU92ZXJyaWRlVGFibGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlLgoqICAgICAgICBXaGVuIGEgZnJhbWUgZW50ZXJzIGEgcG9ydCwgaXRzIHR5cGUgaXMgZGV0ZXJtaW5lZCBhbmQgdGhlIHR5cGUgaXMgdXNlZCAKKiAgICAgICAgdG8gYWNjZXNzIHRoZSBRdWV1ZSBQcmlvcml0eSBUYWJsZS4gSWYgdGhlIHR5cGUncyBxUHJpRW4gKGluIEdUX1FQUklfVEJMX0VOVFJZCiogICAgICAgIHN0cnVjdHVyZSkgaXMgZW5hYmxlZCwgdGhlbiB0aGUgZnJhbWUncyBRdWV1ZSBQcmlvcml0eSB3aWxsIGJlIG92ZXJyaWRkZW4KKiAgICAgICAgd2l0aCB0aGUgdmFsdWUgd3JpdHRlbiBpbiBxUHJpb3JpdHkgKGluIEdUX1FQUklfVEJMX0VOVFJZIHN0cnVjdHVyZSkuCiogICAgICAgIEZyYW1lIFR5cGVzIHN1cHBvcnRlZCBhcmU6CiogICAgICAgICAgICBGVFlQRV9EU0FfVE9fQ1BVX0JQRFUgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gbXVsdGljYXN0IERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MCAoQlBEVS9NR01UKS4KKiAgICAgICAgICAgICAgICBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqICAgICAgICAgICAgRlRZUEVfRFNBX1RPX0NQVV9GMlIgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgxIChGcmFtZSB0byBSZWdpc3RlcgoqICAgICAgICAgICAgICAgIFJlcGx5KS4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX0RTQV9UT19DUFVfSUdNUCAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDIgKElHTVAvTUxEIFRyYXApCiogICAgICAgICAgICAgICAgYW5kIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgSUdNUCBvciBNTEQgdHJhcHBlZAoqICAgICAgICAgICAgRlRZUEVfRFNBX1RPX0NQVV9UUkFQIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MyAoUG9saWN5IFRyYXApIGFuZAoqICAgICAgICAgICAgICAgIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgUG9saWN5IFRyYXBwZWQKKiAgICAgICAgICAgIEZUWVBFX0RTQV9UT19DUFVfQVJQIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4NCAoQVJQIE1pcnJvcikgYW5kCiogICAgICAgICAgICAgICAgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBBUlAgTWlycm9yZWQgKHNlZSBncHJ0U2V0QVJQdG9DUFUgQVBJKS4KKiAgICAgICAgICAgIEZUWVBFX0RTQV9UT19DUFVfTUlSUk9SIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4NSAoUG9saWN5IE1pcnJvcikgYW5kCiogICAgICAgICAgICAgICAgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBQb2xpY3kgTWlycm9yZWQgKHNlZSBncHJ0U2V0UG9saWN5IEFQSSkuCiogICAgICAgICAgICBGVFlQRV9EU0FfVE9fQ1BVX1JFU0VSVkVEIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4NiAoUmVzZXJ2ZWQpLiBOb3QKKiAgICAgICAgICAgICAgICB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9EU0FfVE9fQ1BVX1VDQVNUX01HTVQgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gdW5pY2FzdCBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDAgKHVuaWNhc3QKKiAgICAgICAgICAgICAgICBNR01UKS4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX0RTQV9GUk9NX0NQVSAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgRnJvbV9DUFUgZnJhbWVzLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWUKKiAgICAgICAgICAgIEZUWVBFX0RTQV9DUk9TU19DSElQX0ZDIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEZsb3cgQ29udHJvbCBmcmFtZXMgKFRvX1NuaWZmZXIgRmxvdwoqICAgICAgICAgICAgICAgIENvbnRyb2wpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqICAgICAgICAgICAgRlRZUEVfRFNBX0NST1NTX0NISVBfRUdSRVNTX01PTiAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgQ3Jvc3MgQ2hpcCBFZ3Jlc3MgTW9uaXRvciBmcmFtZXMgKFRvX1NuaWZmZXIgVHgpLgoqICAgICAgICAgICAgICAgIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9EU0FfQ1JPU1NfQ0hJUF9JTkdSRVNTX01PTiAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgQ3Jvc3MgQ2hpcCBJbmdyZXNzIE1vbml0b3IgZnJhbWVzIChUb19TbmlmZmVyIFJ4KS4KKiAgICAgICAgICAgICAgICBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqICAgICAgICAgICAgRlRZUEVfUE9SVF9FVFlQRV9NQVRDSCAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBub3JtYWwgbmV0d29yayBwb3J0cyAoc2VlIGdwcnRTZXRGcmFtZU1vZGUgQVBJKQoqICAgICAgICAgICAgICAgIG9uIGZyYW1lcyB3aG9zZSBFdGhlcnR5cGUgbWF0Y2hlcyB0aGUgcG9ydCdzIFBvcnRFVHlwZSByZWdpc3Rlci4KKiAgICAgICAgICAgICAgICBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqICAgICAgICAgICAgRlRZUEVfQkNBU1RfTk9OX0RTQV9DT05UUk9MIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIE5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBjb250YWluIGEgQnJvYWRjYXN0CiogICAgICAgICAgICAgICAgZGVzdGluYXRpb24gYWRkcmVzcy4gTm90IHVzZWQgb24gRFNBIENvbnRyb2wgZnJhbWVzLgoqCiogSU5QVVRTOgoqICAgICAgIGZUeXBlIC0gZnJhbWUgdHlwZSAoR1RfUFJJX09WRVJSSURFX0ZUWVBFKQoqICAgICAgIGVudHJ5IC0gUSBQcmlvcml0eSBPdmVycmlkZSBUYWJsZSBlbnRyeSAoR1RfUVBSSV9UQkxfRU5UUlkpCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAgICAgLSBvbiB1bmtub3duIGZyYW1lIHR5cGUKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0UVByaU92ZXJyaWRlVGFibGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9QUklfT1ZFUlJJREVfRlRZUEUgICAgZlR5cGUsCiAgICBJTiAgR1RfUVBSSV9UQkxfRU5UUlkgICAgKmVudHJ5Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRRUHJpT3ZlcnJpZGVUYWJsZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUuCiogICAgICAgIFdoZW4gYSBmcmFtZSBlbnRlcnMgYSBwb3J0LCBpdHMgdHlwZSBpcyBkZXRlcm1pbmVkIGFuZCB0aGUgdHlwZSBpcyB1c2VkIAoqICAgICAgICB0byBhY2Nlc3MgdGhlIFF1ZXVlIFByaW9yaXR5IFRhYmxlLiBJZiB0aGUgdHlwZSdzIHFQcmlFbiAoaW4gR1RfUVBSSV9UQkxfRU5UUlkKKiAgICAgICAgc3RydWN0dXJlKSBpcyBlbmFibGVkLCB0aGVuIHRoZSBmcmFtZSdzIFF1ZXVlIFByaW9yaXR5IHdpbGwgYmUgb3ZlcnJpZGRlbgoqICAgICAgICB3aXRoIHRoZSB2YWx1ZSB3cml0dGVuIGluIHFQcmlvcml0eSAoaW4gR1RfUVBSSV9UQkxfRU5UUlkgc3RydWN0dXJlKS4KKiAgICAgICAgRnJhbWUgVHlwZXMgc3VwcG9ydGVkIGFyZToKKiAgICAgICAgICAgIEZUWVBFX0RTQV9UT19DUFVfQlBEVSAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBtdWx0aWNhc3QgRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgwIChCUERVL01HTVQpLgoqICAgICAgICAgICAgICAgIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9EU0FfVE9fQ1BVX0YyUiAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDEgKEZyYW1lIHRvIFJlZ2lzdGVyCiogICAgICAgICAgICAgICAgUmVwbHkpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqICAgICAgICAgICAgRlRZUEVfRFNBX1RPX0NQVV9JR01QIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MiAoSUdNUC9NTEQgVHJhcCkKKiAgICAgICAgICAgICAgICBhbmQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBJR01QIG9yIE1MRCB0cmFwcGVkCiogICAgICAgICAgICBGVFlQRV9EU0FfVE9fQ1BVX1RSQVAgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgzIChQb2xpY3kgVHJhcCkgYW5kCiogICAgICAgICAgICAgICAgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBQb2xpY3kgVHJhcHBlZAoqICAgICAgICAgICAgRlRZUEVfRFNBX1RPX0NQVV9BUlAgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg0IChBUlAgTWlycm9yKSBhbmQKKiAgICAgICAgICAgICAgICBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIEFSUCBNaXJyb3JlZCAoc2VlIGdwcnRTZXRBUlB0b0NQVSBBUEkpLgoqICAgICAgICAgICAgRlRZUEVfRFNBX1RPX0NQVV9NSVJST1IgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg1IChQb2xpY3kgTWlycm9yKSBhbmQKKiAgICAgICAgICAgICAgICBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIFBvbGljeSBNaXJyb3JlZCAoc2VlIGdwcnRTZXRQb2xpY3kgQVBJKS4KKiAgICAgICAgICAgIEZUWVBFX0RTQV9UT19DUFVfUkVTRVJWRUQgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg2IChSZXNlcnZlZCkuIE5vdAoqICAgICAgICAgICAgICAgIHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX0RTQV9UT19DUFVfVUNBU1RfTUdNVCAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiB1bmljYXN0IERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MCAodW5pY2FzdAoqICAgICAgICAgICAgICAgIE1HTVQpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqICAgICAgICAgICAgRlRZUEVfRFNBX0ZST01fQ1BVIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBGcm9tX0NQVSBmcmFtZXMuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZQoqICAgICAgICAgICAgRlRZUEVfRFNBX0NST1NTX0NISVBfRkMgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIENyb3NzIENoaXAgRmxvdyBDb250cm9sIGZyYW1lcyAoVG9fU25pZmZlciBGbG93CiogICAgICAgICAgICAgICAgQ29udHJvbCkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9EU0FfQ1JPU1NfQ0hJUF9FR1JFU1NfTU9OIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEVncmVzcyBNb25pdG9yIGZyYW1lcyAoVG9fU25pZmZlciBUeCkuCiogICAgICAgICAgICAgICAgTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX0RTQV9DUk9TU19DSElQX0lOR1JFU1NfTU9OIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEluZ3Jlc3MgTW9uaXRvciBmcmFtZXMgKFRvX1NuaWZmZXIgUngpLgoqICAgICAgICAgICAgICAgIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9QT1JUX0VUWVBFX01BVENIIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIG5vcm1hbCBuZXR3b3JrIHBvcnRzIChzZWUgZ3BydFNldEZyYW1lTW9kZSBBUEkpCiogICAgICAgICAgICAgICAgb24gZnJhbWVzIHdob3NlIEV0aGVydHlwZSBtYXRjaGVzIHRoZSBwb3J0J3MgUG9ydEVUeXBlIHJlZ2lzdGVyLgoqICAgICAgICAgICAgICAgIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9CQ0FTVF9OT05fRFNBX0NPTlRST0wgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gTm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGNvbnRhaW4gYSBCcm9hZGNhc3QKKiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiBhZGRyZXNzLiBOb3QgdXNlZCBvbiBEU0EgQ29udHJvbCBmcmFtZXMuCioKKiBJTlBVVFM6CiogICAgICAgZlR5cGUgLSBmcmFtZSB0eXBlIChHVF9QUklfT1ZFUlJJREVfRlRZUEUpCioKKiBPVVRQVVRTOgoqICAgICAgIGVudHJ5IC0gUSBQcmlvcml0eSBPdmVycmlkZSBUYWJsZSBlbnRyeSAoR1RfUVBSSV9UQkxfRU5UUlkpCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAgICAgLSBvbiB1bmtub3duIGZyYW1lIHR5cGUKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UVByaU92ZXJyaWRlVGFibGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9QUklfT1ZFUlJJREVfRlRZUEUgICAgZlR5cGUsCiAgICBPVVQgR1RfUVBSSV9UQkxfRU5UUlkgICAgKmVudHJ5Cik7CgoKLyogZ3RTeXNDdHJsLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldENQVURlc3QKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBDUFUgRGVzdGluYXRpb24gUG9ydC4gQ1BVIERlc3RpbmF0aW9uIHBvcnQgaW5kaWNhdGVzIHRoZQoqICAgICAgICBwb3J0IG51bWJlciBvbiB0aGlzIGRldmljZSB3aGVyZSB0aGUgQ1BVIGlzIGNvbm5lY3RlZCAoZWl0aGVyIGRpcmVjdGx5IG9yCiogICAgICAgIGluZGlyZWN0bHkgdGhyb3VnaCBhbm90aGVyIE1hcnZlbGwgc3dpdGNoIGRldmljZSkuCioKKiAgICAgICAgTWFueSBtb2RlcyBvZiBmcmFtZSBwcm9jZXNzaW5nIG5lZWQgdG8ga25vdyB3aGVyZSB0aGUgQ1BVIGlzIGxvY2F0ZWQuCiogICAgICAgIFRoZXNlIG1vZGVzIGFyZToKKiAgICAgICAgMS4gV2hlbiBJR01QL01MRCBmcmFtZSBpcyByZWNlaXZlZCBhbmQgU25vb3BpbmcgaXMgZW5hYmxlZAoqICAgICAgICAyLiBXaGVuIHRoZSBwb3J0IGlzIGNvbmZpZ3VyZWQgYXMgYSBEU0EgcG9ydCBhbmQgaXQgcmVjZWl2ZXMgYSBUb19DUFUgZnJhbWUKKiAgICAgICAgMy4gV2hlbiBhIFJzdmQyQ1BVIGZyYW1lIGVudGVycyB0aGUgcG9ydAoqICAgICAgICA0LiBXaGVuIHRoZSBwb3J0J3MgU0EgRmlsdGVyaW5nIG1vZGUgaXMgRHJvcCB0byBDUFUKKiAgICAgICAgNS4gV2hlbiBhbnkgb2YgdGhlIHBvcnQncyBQb2xpY3kgT3B0aW9ucyB0cmFwIHRoZSBmcmFtZSB0byB0aGUgQ1BVCiogICAgICAgIDYuIFdoZW4gdGhlIGluZ3Jlc3NpbmcgZnJhbWUgaXMgYW4gQVJQIGFuZCBBUlAgbWlycm9yaW5nIGlzIGVuYWJsZWQgaW4gdGhlCiogICAgICAgICAgIGRldmljZQoqCiogICAgICAgIEluIGFsbCBjYXNlcywgZXhjZXB0IGZvciBBUlAsIHRoZSBmcmFtZXMgdGhhdCBtZWV0IHRoZSBlbmFibGVkIGNyaXRlcmlhIAoqICAgICAgICBhcmUgbWFwcGVkIHRvIHRoZSBDUFUgRGVzdGluYXRpb24gcG9ydCwgb3ZlcnJpZGluZyB3aGVyZSB0aGUgZnJhbWUgd291bGQgCiogICAgICAgIG5vcm1hbGx5IGdvLiBJbiB0aGUgY2FzZSBvZiBBUlAsIHRoZSBmcmFtZSB3aWxsIGJlIG1hcHBlZCBub3JtYWxseSBhbmQgaXQgCiogICAgICAgIHdpbGwgYWxzbyBnZXQgY29waWVkIHRvIHRoaXMgcG9ydC4KKiAgICAgICAgRnJhbWVzIHRoYXQgZmlsdGVyZWQgb3IgZGlzY2FyZGVkIHdpbGwgbm90IGJlIG1hcHBlZCB0byB0aGUgQ1BVIERlc3RpbmF0aW9uIAoqICAgICAgICBwb3J0IHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgUnN2ZDJDUFUgYW5kIERTQSBUYWcgY2FzZXMuCioKKiAgICAgICAgSWYgQ1BVRGVzdCA9IDB4RiwgdGhlIHJlbWFwcGVkIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZCwgbm8gQVJQIG1pcnJvcmluZyAKKiAgICAgICAgd2lsbCBvY2N1ciBhbmQgaW5ncmVzc2luZyBUb19DUFUgZnJhbWVzIHdpbGwgYmUgZGlzY2FyZGVkLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldENQVURlc3QKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0Q1BVRGVzdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXRzIENQVSBEZXN0aW5hdGlvbiBQb3J0LiBDUFUgRGVzdGluYXRpb24gcG9ydCBpbmRpY2F0ZXMgdGhlCiogICAgICAgIHBvcnQgbnVtYmVyIG9uIHRoaXMgZGV2aWNlIHdoZXJlIHRoZSBDUFUgaXMgY29ubmVjdGVkIChlaXRoZXIgZGlyZWN0bHkgb3IKKiAgICAgICAgaW5kaXJlY3RseSB0aHJvdWdoIGFub3RoZXIgTWFydmVsbCBzd2l0Y2ggZGV2aWNlKS4KKgoqICAgICAgICBNYW55IG1vZGVzIG9mIGZyYW1lIHByb2Nlc3NpbmcgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBDUFUgaXMgbG9jYXRlZC4KKiAgICAgICAgVGhlc2UgbW9kZXMgYXJlOgoqICAgICAgICAxLiBXaGVuIElHTVAvTUxEIGZyYW1lIGlzIHJlY2VpdmVkIGFuZCBTbm9vcGluZyBpcyBlbmFibGVkCiogICAgICAgIDIuIFdoZW4gdGhlIHBvcnQgaXMgY29uZmlndXJlZCBhcyBhIERTQSBwb3J0IGFuZCBpdCByZWNlaXZlcyBhIFRvX0NQVSBmcmFtZQoqICAgICAgICAzLiBXaGVuIGEgUnN2ZDJDUFUgZnJhbWUgZW50ZXJzIHRoZSBwb3J0CiogICAgICAgIDQuIFdoZW4gdGhlIHBvcnQncyBTQSBGaWx0ZXJpbmcgbW9kZSBpcyBEcm9wIHRvIENQVQoqICAgICAgICA1LiBXaGVuIGFueSBvZiB0aGUgcG9ydCdzIFBvbGljeSBPcHRpb25zIHRyYXAgdGhlIGZyYW1lIHRvIHRoZSBDUFUKKiAgICAgICAgNi4gV2hlbiB0aGUgaW5ncmVzc2luZyBmcmFtZSBpcyBhbiBBUlAgYW5kIEFSUCBtaXJyb3JpbmcgaXMgZW5hYmxlZCBpbiB0aGUKKiAgICAgICAgICAgZGV2aWNlCioKKiAgICAgICAgSW4gYWxsIGNhc2VzLCBleGNlcHQgZm9yIEFSUCwgdGhlIGZyYW1lcyB0aGF0IG1lZXQgdGhlIGVuYWJsZWQgY3JpdGVyaWEgCiogICAgICAgIGFyZSBtYXBwZWQgdG8gdGhlIENQVSBEZXN0aW5hdGlvbiBwb3J0LCBvdmVycmlkaW5nIHdoZXJlIHRoZSBmcmFtZSB3b3VsZCAKKiAgICAgICAgbm9ybWFsbHkgZ28uIEluIHRoZSBjYXNlIG9mIEFSUCwgdGhlIGZyYW1lIHdpbGwgYmUgbWFwcGVkIG5vcm1hbGx5IGFuZCBpdCAKKiAgICAgICAgd2lsbCBhbHNvIGdldCBjb3BpZWQgdG8gdGhpcyBwb3J0LgoqICAgICAgICBGcmFtZXMgdGhhdCBmaWx0ZXJlZCBvciBkaXNjYXJkZWQgd2lsbCBub3QgYmUgbWFwcGVkIHRvIHRoZSBDUFUgRGVzdGluYXRpb24gCiogICAgICAgIHBvcnQgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBSc3ZkMkNQVSBhbmQgRFNBIFRhZyBjYXNlcy4KKgoqICAgICAgICBJZiBDUFVEZXN0ID0gMHhGLCB0aGUgcmVtYXBwZWQgZnJhbWVzIHdpbGwgYmUgZGlzY2FyZGVkLCBubyBBUlAgbWlycm9yaW5nIAoqICAgICAgICB3aWxsIG9jY3VyIGFuZCBpbmdyZXNzaW5nIFRvX0NQVSBmcmFtZXMgd2lsbCBiZSBkaXNjYXJkZWQuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0Q1BVRGVzdAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfTFBPUlQgICAgICAqcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0TWlycm9yRGVzdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBzZXRzIE1pcnJvciBEZXN0aW5hdGlvbiBQb3J0LiBGcmFtZXMgdGhhdCBpbmdyZXNzIGEgcG9ydCAKKiAgICAgICAgdGhhdCB0cmlnZ2VyIGEgcG9saWN5IG1pcnJvciBhcmUgbWFwcGVkIChjb3BpZWQpIHRvIHRoaXMgcG9ydCBhcyBsb25nIGFzIAoqICAgICAgICB0aGUgZnJhbWUgaXMgbm90IGZpbHRlcmVkIG9yIGRpc2NhcmRlZC4gCiogICAgICAgIFRoZSBNaXJyb3IgRGVzdGluYXRpb24gcG9ydCBzaG91bGQgcG9pbnQgdG8gdGhlIHBvcnQgdGhhdCBkaXJlY3RzIHRoZXNlIAoqICAgICAgICBmcmFtZXMgdG8gdGhlIENQVSB0aGF0IHdpbGwgcHJvY2VzcyB0aGVzZSBmcmFtZXMuIFRoaXMgdGFyZ2V0IHBvcnQgc2hvdWxkIAoqICAgICAgICBiZSBhIERTQSBUYWcgcG9ydCBzbyB0aGUgZnJhbWVzIHdpbGwgZWdyZXNzIHdpdGggYSBUb19DUFUgRFNBIFRhZyB3aXRoIGEgCiogICAgICAgIENQVSBDb2RlIG9mIFBvbGljeSBNaXJyb3IuCiogICAgICAgIFRvX0NQVSBEU0EgVGFnIGZyYW1lcyB3aXRoIGEgQ1BVIENvZGUgb2YgUG9saWN5IE1pcnJvciB0aGF0IGluZ3Jlc3MgYSBEU0EgCiogICAgICAgIFRhZyBwb3J0IHdpbGwgYmUgc2VudCB0byB0aGUgcG9ydCBudW1iZXIgZGVmaW5lZCBpbiBNaXJyb3JEZXN0LgoqCiogICAgICAgIElmIE1pcnJvckRlc3QgPSAweEYsIFBvbGljeSBNaXJyb3JpbmcgaXMgZGlzYWJsZWQgYW5kIGluZ3Jlc3NpbmcgVG9fQ1BVIAoqICAgICAgICBQb2xpY3kgTWlycm9yIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRNaXJyb3JEZXN0CigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgICAgIHBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldE1pcnJvckRlc3QKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBNaXJyb3IgRGVzdGluYXRpb24gUG9ydC4gRnJhbWVzIHRoYXQgaW5ncmVzcyBhIHBvcnQgCiogICAgICAgIHRoYXQgdHJpZ2dlciBhIHBvbGljeSBtaXJyb3IgYXJlIG1hcHBlZCAoY29waWVkKSB0byB0aGlzIHBvcnQgYXMgbG9uZyBhcyAKKiAgICAgICAgdGhlIGZyYW1lIGlzIG5vdCBmaWx0ZXJlZCBvciBkaXNjYXJkZWQuIAoqICAgICAgICBUaGUgTWlycm9yIERlc3RpbmF0aW9uIHBvcnQgc2hvdWxkIHBvaW50IHRvIHRoZSBwb3J0IHRoYXQgZGlyZWN0cyB0aGVzZSAKKiAgICAgICAgZnJhbWVzIHRvIHRoZSBDUFUgdGhhdCB3aWxsIHByb2Nlc3MgdGhlc2UgZnJhbWVzLiBUaGlzIHRhcmdldCBwb3J0IHNob3VsZCAKKiAgICAgICAgYmUgYSBEU0EgVGFnIHBvcnQgc28gdGhlIGZyYW1lcyB3aWxsIGVncmVzcyB3aXRoIGEgVG9fQ1BVIERTQSBUYWcgd2l0aCBhIAoqICAgICAgICBDUFUgQ29kZSBvZiBQb2xpY3kgTWlycm9yLgoqICAgICAgICBUb19DUFUgRFNBIFRhZyBmcmFtZXMgd2l0aCBhIENQVSBDb2RlIG9mIFBvbGljeSBNaXJyb3IgdGhhdCBpbmdyZXNzIGEgRFNBIAoqICAgICAgICBUYWcgcG9ydCB3aWxsIGJlIHNlbnQgdG8gdGhlIHBvcnQgbnVtYmVyIGRlZmluZWQgaW4gTWlycm9yRGVzdC4KKgoqICAgICAgICBJZiBNaXJyb3JEZXN0ID0gMHhGLCBQb2xpY3kgTWlycm9yaW5nIGlzIGRpc2FibGVkIGFuZCBpbmdyZXNzaW5nIFRvX0NQVSAKKiAgICAgICAgUG9saWN5IE1pcnJvciBmcmFtZXMgd2lsbCBiZSBkaXNjYXJkZWQuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0TWlycm9yRGVzdAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfTFBPUlQgICAgICAqcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0Uk1Qb3J0CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgUmVtb3RlIE1hbmFnZW1lbnQgZmVhdHVyZSBpcyBlbmFibGVkIG9ubHkgb24gb25lIHBvcnQuIFNpbmNlIG5vdCBhbGwgcG9ydHMKKiAgICAgICAgY2FuIGJlIGVuYWJsZWQgZm9yIFJlbW90ZSBNYW5hZ2VtZW50IGZlYXR1cmUsIHBsZWFzZSByZWZlciB0byB0aGUgZGV2aWNlCiogICAgICAgIGRhdGFzaGVldCBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24uCiogICAgICAgIEZvciBleGFtcGxlLCA4OEU2MDk3IGRldmljZSBhbGxvd3MgbG9naWNhbCBwb3J0IDkgb3IgMTAsIGFuZCA4OEU2MDQ3IAoqICAgICAgICBkZXZpY2UgYWxsb3dzIGxvZ2ljYWwgcG9ydCA0IGFuZCA1LgoqICAgICAgICAKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSBSZW1vdGUgTWFuYWdlbWVudCBQb3J0CioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAgICAgLSBvbiB1bmFsbG93YWJsZSBwb3J0CiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBPYnNvbGV0ZS4gUGxlYXNlIHVzZXMgZ3N5c1NldFJNVU1vZGUgQVBJLCBpbnN0ZWFkLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Uk1Qb3J0CigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgIHBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFJNUG9ydAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFJlbW90ZSBNYW5hZ2VtZW50IGZlYXR1cmUgaXMgZW5hYmxlZCBvbmx5IG9uIG9uZSBwb3J0LiBTaW5jZSBub3QgYWxsIHBvcnRzCiogICAgICAgIGNhbiBiZSBlbmFibGVkIGZvciBSZW1vdGUgTWFuYWdlbWVudCBmZWF0dXJlLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGRldmljZQoqICAgICAgICBkYXRhc2hlZXQgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uLgoqICAgICAgICBGb3IgZXhhbXBsZSwgODhFNjA5NyBkZXZpY2UgYWxsb3dzIGxvZ2ljYWwgcG9ydCA5IG9yIDEwLCBhbmQgODhFNjA0NyAKKiAgICAgICAgZGV2aWNlIGFsbG93cyBsb2dpY2FsIHBvcnQgNCBhbmQgNS4KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIHBvcnQgLSBSZW1vdGUgTWFuYWdlbWVudCBQb3J0CioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE9ic29sZXRlLiBQbGVhc2UgdXNlcyBnc3lzR2V0Uk1VTW9kZSBBUEksIGluc3RlYWQuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRSTVBvcnQKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX0xQT1JUICAgICAqcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0Uk1EQUNoZWNrCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgQ2hlY2sgdGhlIERBIG9uIFJlbW90ZSBNYW5hZ2VtZW50IGZyYW1lcy4gCiogICAgICAgIFdoZW4gREEgQ2hlY2sgaXMgZW5hYmxlZCwgdGhlIERBIG9mIFJlbW90ZSBNYW5hZ2VtZW50IGZyYW1lcyBtdXN0IGJlIAoqICAgICAgICBjb250YWluZWQgaW4gdGhpcyBkZXZpY2UncyBhZGRyZXNzIGRhdGFiYXNlIChBVFUpIGFzIGEgU3RhdGljIGVudHJ5IAoqICAgICAgICAoZWl0aGVyIHVuaWNhc3Qgb3IgbXVsdGljYXN0KS4gSWYgdGhlIERBIG9mIHRoZSBmcmFtZSBpcyBub3QgY29udGFpbmVkIAoqICAgICAgICBpbiB0aGlzIGRldmljZSdzIGFkZHJlc3MgZGF0YWJhc2UsIHRoZSBmcmFtZSB3aWxsIGJlIG5vdCBiZSBwcm9jZXNzZWQgYXMgCiogICAgICAgIGEgRnJhbWUtdG8tUmVndGVyIGZyYW1lLgoqICAgICAgICBXaGVuIERBIENoZWNrIGlzIGRpc2FibGVkLCB0aGUgREEgb2YgUmVtb3RlIE1hbmFnZW1lbnQgZnJhbWVzIGlzIG5vdCAKKiAgICAgICAgdmFsaWRhdGVkIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBmcmFtZS4KKiAgICAgICAgCiogSU5QVVRTOgoqICAgICAgICBlbiAtIEdUX1RSVUUgdG8gZW5hYmxlIERBIENoZWNrLCAKKiAgICAgICAgICAgICBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Uk1EQUNoZWNrCigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfQk9PTCAgICAgICAgIGVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRSTURBQ2hlY2sKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBDaGVjayB0aGUgREEgb24gUmVtb3RlIE1hbmFnZW1lbnQgZnJhbWVzLiAKKiAgICAgICAgV2hlbiBEQSBDaGVjayBpcyBlbmFibGVkLCB0aGUgREEgb2YgUmVtb3RlIE1hbmFnZW1lbnQgZnJhbWVzIG11c3QgYmUgCiogICAgICAgIGNvbnRhaW5lZCBpbiB0aGlzIGRldmljZSdzIGFkZHJlc3MgZGF0YWJhc2UgKEFUVSkgYXMgYSBTdGF0aWMgZW50cnkgCiogICAgICAgIChlaXRoZXIgdW5pY2FzdCBvciBtdWx0aWNhc3QpLiBJZiB0aGUgREEgb2YgdGhlIGZyYW1lIGlzIG5vdCBjb250YWluZWQgCiogICAgICAgIGluIHRoaXMgZGV2aWNlJ3MgYWRkcmVzcyBkYXRhYmFzZSwgdGhlIGZyYW1lIHdpbGwgYmUgbm90IGJlIHByb2Nlc3NlZCBhcyAKKiAgICAgICAgYSBGcmFtZS10by1SZWd0ZXIgZnJhbWUuCiogICAgICAgIFdoZW4gREEgQ2hlY2sgaXMgZGlzYWJsZWQsIHRoZSBEQSBvZiBSZW1vdGUgTWFuYWdlbWVudCBmcmFtZXMgaXMgbm90IAoqICAgICAgICB2YWxpZGF0ZWQgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIGZyYW1lLgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFIGlmIERBIENoZWNrIGlzIGVuYWJsZWQsIAoqICAgICAgICAgICAgIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFJNREFDaGVjawooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfQk9PTCAgICAgKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRIZWFkZXJUeXBlCioKKiBERVNDUklQVElPTjoKKiAgIFRvIHNldCBIZWFkZXIgVHlwZS4gVGhlc2UgYml0cyBhcmUgdXNlZCB0byBjb25maWd1cmUgdGhlIGJpdHMgdGhhdCBhcmUgcGxhY2VkIAoqICAgaW50byB0aGUgRWdyZXNzIEhlYWRlciB3aGVuIGl0IGlzIGVuYWJsZWQgb24gYSBwb3J0IChQb3J0IG9mZnNldCAweDA0KSAKKiAgIGFzIGZvbGxvd3M6CiogICAgIDAwID0gT3JpZ2luYWwgSGVhZGVyIJYgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHRvIFVuaU1BQ5JzIHRoYXQgbG9vayBhdAoqICAgICAgICAgIEhlYWRlciBieXRlIDEgYml0c1s0OjJdIGFuZCBieXRlIDIgYml0cyBbMzowXQoqICAgICAwMSA9IFNpbmdsZSBjaGlwIE1HTVQgSGVhZGVyIJYgZm9yIGNvbXBhdGliaWxpdHkgdG8gTWFydmVsbCBGYXN0IEV0aGVybmV0CiogICAgICAgICAgc3dpdGNoZXMgdGhhdCBzdXBwb3J0IFNwYW5uaW5nIFRyZWUgd2l0aG91dCBEU0EgVGFncwoqICAgICAxMCA9IFRydW5rIEhlYWRlciCWIHVzZWQgdG9nZXRoZXIgd2l0aCB0aGUgRFNBIFRhZ3MgdG8gcGVyZm9ybSBSZW1vdGUgU3dpdGNoaW5nCiogICAgIDExID0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCiogICAgICAgIAoqIElOUFVUUzoKKiAgICAgICAgaGRUeXBlIAoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEhlYWRlclR5cGUKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9VMTYgICAgICAgaGRUeXBlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRIZWFkZXJUeXBlCioKKiBERVNDUklQVElPTjoKKiAgIFRvIGdldCBIZWFkZXIgVHlwZS4gVGhlc2UgYml0cyBhcmUgdXNlZCB0byBjb25maWd1cmUgdGhlIGJpdHMgdGhhdCBhcmUgcGxhY2VkIAoqICAgaW50byB0aGUgRWdyZXNzIEhlYWRlciB3aGVuIGl0IGlzIGVuYWJsZWQgb24gYSBwb3J0IChQb3J0IG9mZnNldCAweDA0KSAKKiAgIGFzIGZvbGxvd3M6CiogICAgIDAwID0gT3JpZ2luYWwgSGVhZGVyIJYgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHRvIFVuaU1BQ5JzIHRoYXQgbG9vayBhdAoqICAgICAgICAgIEhlYWRlciBieXRlIDEgYml0c1s0OjJdIGFuZCBieXRlIDIgYml0cyBbMzowXQoqICAgICAwMSA9IFNpbmdsZSBjaGlwIE1HTVQgSGVhZGVyIJYgZm9yIGNvbXBhdGliaWxpdHkgdG8gTWFydmVsbCBGYXN0IEV0aGVybmV0CiogICAgICAgICAgc3dpdGNoZXMgdGhhdCBzdXBwb3J0IFNwYW5uaW5nIFRyZWUgd2l0aG91dCBEU0EgVGFncwoqICAgICAxMCA9IFRydW5rIEhlYWRlciCWIHVzZWQgdG9nZXRoZXIgd2l0aCB0aGUgRFNBIFRhZ3MgdG8gcGVyZm9ybSBSZW1vdGUgU3dpdGNoaW5nCiogICAgIDExID0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCiogICAgICAgIAoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGhkVHlwZSAKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEhlYWRlclR5cGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX1UxNiAgICAgKmhkVHlwZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0Uk1FbmFibGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBFbmFibGUgb3IgZGlzYWJsZSBSZW1vdGUgTWFuYWdlbWVudCBmZWF0dXJlLiBUaGlzIGZlYXR1cmUgY2FuIGJlIGVuYWJsZWQKKiAgICAgICAgb25seSBvbiBvbmUgcG9ydCAoc2VlIGdzeXNTZXRSTVBvcnQgQVBJKS4KKiAgICAgICAgCiogSU5QVVRTOgoqICAgICAgICBlbiAtIEdUX1RSVUUgdG8gZW5hYmxlIFJlbW90ZSBNYW5hZ2VtZW50IGZlYXR1cmUsIAoqICAgICAgICAgICAgIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE9ic29sZXRlLiBQbGVhc2UgdXNlcyBnc3lzU2V0Uk1VTW9kZSBBUEksIGluc3RlYWQuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRSTUVuYWJsZQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0JPT0wgICAgICAgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0Uk1FbmFibGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBFbmFibGUgb3IgZGlzYWJsZSBSZW1vdGUgTWFuYWdlbWVudCBmZWF0dXJlLiBUaGlzIGZlYXR1cmUgY2FuIGJlIGVuYWJsZWQKKiAgICAgICAgb25seSBvbiBvbmUgcG9ydCAoc2VlIGdzeXNTZXRSTVBvcnQgQVBJKS4KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGVuIC0gR1RfVFJVRSBpZiBSZW1vdGUgTWFuYWdlbWVudCBmZWF0dXJlIGlzIGVuYWJsZWQsIAoqICAgICAgICAgICAgIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgT2Jzb2xldGUuIFBsZWFzZSB1c2VzIGdzeXNHZXRSTVVNb2RlIEFQSSwgaW5zdGVhZC4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFJNRW5hYmxlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIE9VVCBHVF9CT09MICAgICAqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEN0ck1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBTZXQgQ291bnRlciBNb2Rlcy4gVGhlc2UgYml0cyBjb250cm9sIHRoZSBvcGVyYXRpbmcgbW9kZXMgb2YgdGhlIHR3byBvZiAKKiAgICAgICAgdGhlIFBvcnSScyBNSUIgY291bnRlcnMuCiogICAgICAgIAoqIElOUFVUUzoKKiAgICAgICAgY3RyTW9kZSAtIENvdW50ZXIgbW9kZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEN0ck1vZGUKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9VMTYgICAgICAgY3RyTW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0Q3RyTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIEdldCBDb3VudGVyIE1vZGVzLiBUaGVzZSBiaXRzIGNvbnRyb2wgdGhlIG9wZXJhdGluZyBtb2RlcyBvZiB0aGUgdHdvIG9mIAoqICAgICAgICB0aGUgUG9ydJJzIE1JQiBjb3VudGVycy4KKiAgICAgICAgCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgY3RyTW9kZSAtIENvdW50ZXIgbW9kZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0Q3RyTW9kZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfVTE2ICAgICAgICpjdHJNb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRSc3ZkMkNwdUVuYWJsZXMyWAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFJlc2VydmVkIERBIEVuYWJsZXMgZm9yIHRoZSBmb3JtIG9mIDAxOjgwOkMyOjAwOjAwOjJ4LgoqICAgICAgICBXaGVuIHRoZSBSc3ZkMkNwdShnc3lzU2V0UnN2ZDJDcHUpIGlzIHNldCB0byBhIG9uZSwgdGhlIDE2IHJlc2VydmVkIAoqICAgICAgICBtdWx0aWNhc3QgREEgYWRkcmVzc2VzLCB3aG9zZSBiaXQgaW4gdGhpcyByZWdpc3RlciBhcmUgYWxzbyBzZXQgdG8gYSBvbmUsIAoqICAgICAgICBhcmUgdHJlYWR0ZWQgYXMgTUdNVCBmcmFtZXMuIEFsbCB0aGUgcmVzZXJ2ZWQgREEncyB0YWtlIHRoZSBmb3JtIAoqICAgICAgICAwMTo4MDpDMjowMDowMDoyeC4gV2hlbiB4ID0gMHgwLCBiaXQgMCBvZiB0aGlzIHJlZ2lzdGVyIGlzIHRlc3RlZC4gCiogICAgICAgIFdoZW4geCA9IDB4MiwgYml0IDIgb2YgdGhpcyBmaWVsZCBpcyB0ZXN0ZWQgYW5kIHNvIG9uLgoqICAgICAgICBJZiB0aGUgdGVzdGVkIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gYSB6ZXJvLCB0aGUgZnJhbWUgd2lsbCAKKiAgICAgICAgYmUgdHJlYXRlZCBhcyBhIG5vcm1hbCAobm9uLU1HTVQpIGZyYW1lLgoqCiogSU5QVVRTOgoqICAgICAgICBlbkJpdHMgLSBiaXQgdmVjdG9yIG9mIGVuYWJsZWQgUmVzZXJ2ZWQgTXVsdGljYXN0LgoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFJzdmQyQ3B1RW5hYmxlczJYCigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfVTE2ICAgICAgICBlbkJpdHMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFJzdmQyQ3B1RW5hYmxlczJYCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgUmVzZXJ2ZWQgREEgRW5hYmxlcyBmb3IgdGhlIGZvcm0gb2YgMDE6ODA6QzI6MDA6MDA6MnguCiogICAgICAgIFdoZW4gdGhlIFJzdmQyQ3B1KGdzeXNTZXRSc3ZkMkNwdSkgaXMgc2V0IHRvIGEgb25lLCB0aGUgMTYgcmVzZXJ2ZWQgCiogICAgICAgIG11bHRpY2FzdCBEQSBhZGRyZXNzZXMsIHdob3NlIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIGFyZSBhbHNvIHNldCB0byBhIG9uZSwgCiogICAgICAgIGFyZSB0cmVhZHRlZCBhcyBNR01UIGZyYW1lcy4gQWxsIHRoZSByZXNlcnZlZCBEQSdzIHRha2UgdGhlIGZvcm0gCiogICAgICAgIDAxOjgwOkMyOjAwOjAwOjJ4LiBXaGVuIHggPSAweDAsIGJpdCAwIG9mIHRoaXMgcmVnaXN0ZXIgaXMgdGVzdGVkLiAKKiAgICAgICAgV2hlbiB4ID0gMHgyLCBiaXQgMiBvZiB0aGlzIGZpZWxkIGlzIHRlc3RlZCBhbmQgc28gb24uCiogICAgICAgIElmIHRoZSB0ZXN0ZWQgYml0IGluIHRoaXMgcmVnaXN0ZXIgaXMgY2xlYXJlZCB0byBhIHplcm8sIHRoZSBmcmFtZSB3aWxsIAoqICAgICAgICBiZSB0cmVhdGVkIGFzIGEgbm9ybWFsIChub24tTUdNVCkgZnJhbWUuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBlbkJpdHMgLSBiaXQgdmVjdG9yIG9mIGVuYWJsZWQgUmVzZXJ2ZWQgTXVsdGljYXN0LgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UnN2ZDJDcHVFbmFibGVzMlgKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX1UxNiAgICAgICplbkJpdHMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEZsb29kQkMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBGbG9vZCBCcm9hZGNhc3QuCiogICAgICAgIFdoZW4gRmxvb2QgQnJvYWRjYXN0IGlzIGVuYWJsZWQsIGZyYW1lcyB3aXRoIHRoZSBCcm9hZGNhc3QgZGVzdGluYXRpb24gCiogICAgICAgIGFkZHJlc3Mgd2lsbCBmbG9vZCBvdXQgYWxsIHRoZSBwb3J0cyByZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5nIG9mIHRoZQoqICAgICAgICBwb3J0J3MgRWdyZXNzIEZsb29kcyBtb2RlIChzZWUgZ3BydFNldEVncmVzc0Zsb29kIEFQSSkuIFZMQU4gcnVsZXMgYW5kIAoqICAgICAgICBvdGhlciBzd2l0Y2ggcG9saWN5IHN0aWxsIGFwcGxpZXMgdG8gdGhlc2UgQnJvYWRjYXN0IGZyYW1lcy4gCiogICAgICAgIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkLCBmcmFtZXMgd2l0aCB0aGUgQnJvYWRjYXN0IGRlc3RpbmF0aW9uCiogICAgICAgIGFkZHJlc3MgYXJlIGNvbnNpZGVyZWQgTXVsdGljYXN0IGZyYW1lcyBhbmQgd2lsbCBiZSBhZmZlY3RlZCBieSBwb3J0J3MgCiogICAgICAgIEVncmVzcyBGbG9vZHMgbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFIHRvIGVuYWJsZSBGbG9vZCBCcm9hZGNhc3QsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRGbG9vZEJDCigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfQk9PTCAgICAgICAgZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEZsb29kQkMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBGbG9vZCBCcm9hZGNhc3QuCiogICAgICAgIFdoZW4gRmxvb2QgQnJvYWRjYXN0IGlzIGVuYWJsZWQsIGZyYW1lcyB3aXRoIHRoZSBCcm9hZGNhc3QgZGVzdGluYXRpb24gCiogICAgICAgIGFkZHJlc3Mgd2lsbCBmbG9vZCBvdXQgYWxsIHRoZSBwb3J0cyByZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5nIG9mIHRoZQoqICAgICAgICBwb3J0J3MgRWdyZXNzIEZsb29kcyBtb2RlIChzZWUgZ3BydFNldEVncmVzc0Zsb29kIEFQSSkuIFZMQU4gcnVsZXMgYW5kIAoqICAgICAgICBvdGhlciBzd2l0Y2ggcG9saWN5IHN0aWxsIGFwcGxpZXMgdG8gdGhlc2UgQnJvYWRjYXN0IGZyYW1lcy4gCiogICAgICAgIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkLCBmcmFtZXMgd2l0aCB0aGUgQnJvYWRjYXN0IGRlc3RpbmF0aW9uCiogICAgICAgIGFkZHJlc3MgYXJlIGNvbnNpZGVyZWQgTXVsdGljYXN0IGZyYW1lcyBhbmQgd2lsbCBiZSBhZmZlY3RlZCBieSBwb3J0J3MgCiogICAgICAgIEVncmVzcyBGbG9vZHMgbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGVuIC0gR1RfVFJVRSBpZiBGbG9vZCBCcm9hZGNhc3QgaXMgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0Rmxvb2RCQwooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfQk9PTCAgICAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UmVtb3ZlMVBUYWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBSZW1vdmUgT25lIFByb3ZpZGVyIFRhZy4KKiAgICAgICAgV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgYSBwb3J0IGlzIGNvbmZpZ3VyZWQgYXMgYSBQcm92aWRlciBQb3J0CiogICAgICAgIChzZWUgZ3BydFNldEZyYW1lTW9kZSBBUEkpLCByZWN1cnNpdmUgUHJvdmlkZXIgVGFnIHN0cmlwcGluZyB3aWxsIE5PVCBiZSAKKiAgICAgICAgcGVyZm9ybWVkLiBPbmx5IHRoZSBmaXJzdCBQcm92aWRlciBUYWcgZm91bmQgb24gdGhlIGZyYW1lIHdpbGwgYmUgCiogICAgICAgIGV4dHJhY3RlZCBhbmQgcmVtb3ZlZC4gSXRzIGV4dHJhY3RlZCBkYXRhIHdpbGwgYmUgdXNlZCBmb3Igc3dpdGNoaW5nLgoqICAgICAgICBXaGVuIGl0J3MgZGlzYWJsZWQgYW5kIGEgcG9ydCBpcyBjb25maWd1cmVkIGFzIGEgUHJvdmlkZXIgUG9ydCwgcmVjdXJzaXZlIAoqICAgICAgICBQcm92aWRlciBUYWcgc3RyaXBwaW5nIHdpbGwgYmUgcGVyZm9ybWVkLiBUaGUgZmlyc3QgUHJvdmlkZXIgVGFnJ3MgZGF0YSAKKiAgICAgICAgd2lsbCBiZSBleHRyYWN0ZWQgYW5kIHVzZWQgZm9yIHN3aXRjaGluZywgYW5kIHRoZW4gYWxsIHN1YnNlcXVlbnQgUHJvdmlkZXIgCiogICAgICAgIFRhZ3MgZm91bmQgaW4gdGhlIGZyYW1lIHdpbGwgYWxzbyBiZSByZW1vdmVkLiBUaGlzIHdpbGwgb25seSBvY2N1ciBpZiB0aGUgCiogICAgICAgIHBvcnQncyBQb3J0RVR5cGUgKHNlZSBncHJ0U2V0UG9ydEVUeXBlIEFQSSkgaXMgbm90IDB4ODEwMC4KKgoqIElOUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFIHRvIGVuYWJsZSBSZW1vdmUgT25lIFByb3ZpZGVyIFRhZywgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFJlbW92ZTFQVGFnCigKICAgIElOIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gR1RfQk9PTCAgICAgICAgZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFJlbW92ZTFQVGFnCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgUmVtb3ZlIE9uZSBQcm92aWRlciBUYWcuCiogICAgICAgIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQgYW5kIGEgcG9ydCBpcyBjb25maWd1cmVkIGFzIGEgUHJvdmlkZXIgUG9ydAoqICAgICAgICAoc2VlIGdwcnRTZXRGcmFtZU1vZGUgQVBJKSwgcmVjdXJzaXZlIFByb3ZpZGVyIFRhZyBzdHJpcHBpbmcgd2lsbCBOT1QgYmUgCiogICAgICAgIHBlcmZvcm1lZC4gT25seSB0aGUgZmlyc3QgUHJvdmlkZXIgVGFnIGZvdW5kIG9uIHRoZSBmcmFtZSB3aWxsIGJlIAoqICAgICAgICBleHRyYWN0ZWQgYW5kIHJlbW92ZWQuIEl0cyBleHRyYWN0ZWQgZGF0YSB3aWxsIGJlIHVzZWQgZm9yIHN3aXRjaGluZy4KKiAgICAgICAgV2hlbiBpdCdzIGRpc2FibGVkIGFuZCBhIHBvcnQgaXMgY29uZmlndXJlZCBhcyBhIFByb3ZpZGVyIFBvcnQsIHJlY3Vyc2l2ZSAKKiAgICAgICAgUHJvdmlkZXIgVGFnIHN0cmlwcGluZyB3aWxsIGJlIHBlcmZvcm1lZC4gVGhlIGZpcnN0IFByb3ZpZGVyIFRhZydzIGRhdGEgCiogICAgICAgIHdpbGwgYmUgZXh0cmFjdGVkIGFuZCB1c2VkIGZvciBzd2l0Y2hpbmcsIGFuZCB0aGVuIGFsbCBzdWJzZXF1ZW50IFByb3ZpZGVyIAoqICAgICAgICBUYWdzIGZvdW5kIGluIHRoZSBmcmFtZSB3aWxsIGFsc28gYmUgcmVtb3ZlZC4gVGhpcyB3aWxsIG9ubHkgb2NjdXIgaWYgdGhlIAoqICAgICAgICBwb3J0J3MgUG9ydEVUeXBlIChzZWUgZ3BydFNldFBvcnRFVHlwZSBBUEkpIGlzIG5vdCAweDgxMDAuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBlbiAtIEdUX1RSVUUgaWYgUmVtb3ZlIE9uZSBQcm92aWRlciBUYWcgaXMgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UmVtb3ZlMVBUYWcKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX0JPT0wgICAgICAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0VGFnRmxvd0NvbnRyb2wKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBVc2UgYW5kIGdlbmVyYXRlIHNvdXJjZSBwb3J0IEZsb3cgQ29udHJvbCBzdGF0dXMgZm9yIENyb3NzLUNoaXAgRmxvdyAKKiAgICAgICAgQ29udHJvbC4KKiAgICAgICAgV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgYml0IDE3IG9mIHRoZSBEU0EgVGFnIEZvcndhcmQgZnJhbWVzIGlzIAoqICAgICAgICBkZWZpbmVkIHRvIGJlIFNyY19GQyBhbmQgaXQgaXMgYWRkZWQgdG8gdGhlc2UgZnJhbWVzIHdoZW4gZ2VuZXJhdGVkIGFuZCAKKiAgICAgICAgaXQgaXMgaW5zcGVjdGVkIG9uIHRoZXNlIGZyYW1lcyB3aGVuIHJlY2VpdmVkLiBUaGUgUUMgd2lsbCB1c2UgdGhlIFNyY19GQyAKKiAgICAgICAgYml0IG9uIERTQSBwb3J0cyBpbnN0ZWFkIG9mIHRoZSBEU0EgcG9ydCdzIEZsb3cgQ29udHJvbCBtb2RlIGJpdCBmb3IgdGhlIAoqICAgICAgICBRQyBGbG93IENvbnRyb2wgYWxnb3JpdGhtLgoqICAgICAgICBXaGVuIGl0IGlzIGRpc2FibGVkLCBiaXQgMTcgb2YgdGhlIERTQSBUYWcgRm9yd2FyZCBmcmFtZXMgaXMgZGVmaW5lZCB0byAKKiAgICAgICAgYmUgUmVzZXJ2ZWQgYW5kIGl0IHdpbGwgYmUgemVybyBvbiB0aGVzZSBmcmFtZXMgd2hlbiBnZW5lcmF0ZWQgYW5kIGl0IAoqICAgICAgICB3aWxsIG5vdCBiZSB1c2VkIG9uIHRoZXNlIGZyYW1lcyB3aGVuIHJlY2VpdmVkICh0aGlzIGlzIGEgYmFja3dhcmRzIAoqICAgICAgICBjb21wYXRpYmlsaXR5IG1vZGUpLgoqCiogSU5QVVRTOgoqICAgICAgICBlbiAtIEdUX1RSVUUgdG8gZW5hYmxlIFRhZyBGbG93IENvbnRyb2wsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRUYWdGbG93Q29udHJvbAooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0JPT0wgICAgICAgIGVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRUYWdGbG93Q29udHJvbAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFVzZSBhbmQgZ2VuZXJhdGUgc291cmNlIHBvcnQgRmxvdyBDb250cm9sIHN0YXR1cyBmb3IgQ3Jvc3MtQ2hpcCBGbG93IAoqICAgICAgICBDb250cm9sLgoqICAgICAgICBXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBiaXQgMTcgb2YgdGhlIERTQSBUYWcgRm9yd2FyZCBmcmFtZXMgaXMgCiogICAgICAgIGRlZmluZWQgdG8gYmUgU3JjX0ZDIGFuZCBpdCBpcyBhZGRlZCB0byB0aGVzZSBmcmFtZXMgd2hlbiBnZW5lcmF0ZWQgYW5kIAoqICAgICAgICBpdCBpcyBpbnNwZWN0ZWQgb24gdGhlc2UgZnJhbWVzIHdoZW4gcmVjZWl2ZWQuIFRoZSBRQyB3aWxsIHVzZSB0aGUgU3JjX0ZDIAoqICAgICAgICBiaXQgb24gRFNBIHBvcnRzIGluc3RlYWQgb2YgdGhlIERTQSBwb3J0J3MgRmxvdyBDb250cm9sIG1vZGUgYml0IGZvciB0aGUgCiogICAgICAgIFFDIEZsb3cgQ29udHJvbCBhbGdvcml0aG0uCiogICAgICAgIFdoZW4gaXQgaXMgZGlzYWJsZWQsIGJpdCAxNyBvZiB0aGUgRFNBIFRhZyBGb3J3YXJkIGZyYW1lcyBpcyBkZWZpbmVkIHRvIAoqICAgICAgICBiZSBSZXNlcnZlZCBhbmQgaXQgd2lsbCBiZSB6ZXJvIG9uIHRoZXNlIGZyYW1lcyB3aGVuIGdlbmVyYXRlZCBhbmQgaXQgCiogICAgICAgIHdpbGwgbm90IGJlIHVzZWQgb24gdGhlc2UgZnJhbWVzIHdoZW4gcmVjZWl2ZWQgKHRoaXMgaXMgYSBiYWNrd2FyZHMgCiogICAgICAgIGNvbXBhdGliaWxpdHkgbW9kZSkuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBlbiAtIEdUX1RSVUUgaWYgVGFnIEZsb3cgQ29udHJvbCBpcyBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRUYWdGbG93Q29udHJvbAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfQk9PTCAgICAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0QWx3YXlzVXNlVlRVCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgQWx3YXlzIHVzZSBWVFUuIAoqICAgICAgICBXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBWVFUgaGl0IGRhdGEgd2lsbCBiZSB1c2VkIHRvIG1hcCBmcmFtZXMgCiogICAgICAgIGV2ZW4gaWYgODAyLjFRIGlzIERpc2FibGVkIG9uIHRoZSBwb3J0LiAKKiAgICAgICAgV2hlbiBpdCdzIGRpc2FibGVkLCBkYXRhIHdpbGwgYmUgaWdub3JlZCB3aGVuIG1hcHBpbmcgZnJhbWVzIG9uIHBvcnRzIAoqICAgICAgICB3aGVyZSA4MDIuMVEgaXMgRGlzYWJsZWQuCioKKiBJTlBVVFM6CiogICAgICAgIGVuIC0gR1RfVFJVRSB0byB1c2UgVlRVIGFsd2F5cywgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEFsd2F5c1VzZVZUVQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0JPT0wgICAgICAgIGVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRBbHdheXNVc2VWVFUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBBbHdheXMgdXNlIFZUVS4gCiogICAgICAgIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIFZUVSBoaXQgZGF0YSB3aWxsIGJlIHVzZWQgdG8gbWFwIGZyYW1lcyAKKiAgICAgICAgZXZlbiBpZiA4MDIuMVEgaXMgRGlzYWJsZWQgb24gdGhlIHBvcnQuIAoqICAgICAgICBXaGVuIGl0J3MgZGlzYWJsZWQsIGRhdGEgd2lsbCBiZSBpZ25vcmVkIHdoZW4gbWFwcGluZyBmcmFtZXMgb24gcG9ydHMgCiogICAgICAgIHdoZXJlIDgwMi4xUSBpcyBEaXNhYmxlZC4KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGVuIC0gR1RfVFJVRSBpZiBWVFUgaXMgYWx3YXlzIHVzZWQsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEFsd2F5c1VzZVZUVQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfQk9PTCAgICAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UVZsYW5zT25seQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIDgwMi4xUSBWTEFOcyBPbmx5LgoqICAgICAgICBXaGVuIHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCwgdGhlIGVncmVzcyBtYXBwaW5nIG9mIHRoZSBmcmFtZSBpcyAKKiAgICAgICAgbGltaXRlZCBieSB0aGUgZnJhbWUncyBWSUQgKHVzaW5nIHRoZSBNZW1iZXJUYWcgZGF0YSBmb3VuZCBpbiB0aGUgVlRVKSAKKiAgICAgICAgdG9nZXRoZXIgd2l0aCB0aGUgcG9ydCBiYXNlZCBWTEFOcyAodXNpbmcgdGhlIHNvdXJjZSBwb3J0J3MgUG9ydFZMQU5UYWJsZSwgCiogICAgICAgIGd2bG5TZXRQb3J0VmxhblBvcnRzIEFQSSkuIFRoZSB0d28gbWV0aG9kcyBhcmUgYWx3YXlzIHVzZWQgdG9nZXRoZXIgaW4gCiogICAgICAgIHRoaXMgbW9kZS4KKiAgICAgICAgV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgdGhlIGVncmVzcyBtYXBwaW5nIG9mIHRoZSBmcmFtZSBpcyBsaW1pdGllZAoqICAgICAgICBieSB0aGUgZnJhbWUncyBWSUQgb25seSwgaWYgdGhlIFZJRCB3YXMgZm91bmQgaW4gdGhlIFZUVS4gSWYgdGhlIGZyYW1lJ3MKKiAgICAgICAgVklEIHdhcyBub3QgZm91bmQgaW4gdGhlIFZUVSB0aGUgZWdyZXNzIG1hcHBpbmcgb2YgdGhlIGZyYW1lIGlzIGxpbWl0ZWQKKiAgICAgICAgYnkgdGhlIHNvdXJjZSBwb3J0J3MgUG9ydFZMQU5UYWJsZSBvbmx5LiBUaGUgdHdvIG1ldGhvZHMgYXJlIG5ldmVyCiogICAgICAgIHVzZWQgdG9nZXRoZXIgaW4gdGhpcyBtb2RlLgoqCiogSU5QVVRTOgoqICAgICAgICBlbiAtIEdUX1RSVUUgdG8gdXNlIDgwMi4xUSBWbGFuIE9ubHkgZmVhdHVyZSwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFFWbGFuc09ubHkKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9CT09MICAgICAgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0UVZsYW5zT25seQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIDgwMi4xUSBWTEFOcyBPbmx5LgoqICAgICAgICBXaGVuIHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCwgdGhlIGVncmVzcyBtYXBwaW5nIG9mIHRoZSBmcmFtZSBpcyAKKiAgICAgICAgbGltaXRlZCBieSB0aGUgZnJhbWUncyBWSUQgKHVzaW5nIHRoZSBNZW1iZXJUYWcgZGF0YSBmb3VuZCBpbiB0aGUgVlRVKSAKKiAgICAgICAgdG9nZXRoZXIgd2l0aCB0aGUgcG9ydCBiYXNlZCBWTEFOcyAodXNpbmcgdGhlIHNvdXJjZSBwb3J0J3MgUG9ydFZMQU5UYWJsZSwgCiogICAgICAgIGd2bG5TZXRQb3J0VmxhblBvcnRzIEFQSSkuIFRoZSB0d28gbWV0aG9kcyBhcmUgYWx3YXlzIHVzZWQgdG9nZXRoZXIgaW4gCiogICAgICAgIHRoaXMgbW9kZS4KKiAgICAgICAgV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgdGhlIGVncmVzcyBtYXBwaW5nIG9mIHRoZSBmcmFtZSBpcyBsaW1pdGllZAoqICAgICAgICBieSB0aGUgZnJhbWUncyBWSUQgb25seSwgaWYgdGhlIFZJRCB3YXMgZm91bmQgaW4gdGhlIFZUVS4gSWYgdGhlIGZyYW1lJ3MKKiAgICAgICAgVklEIHdhcyBub3QgZm91bmQgaW4gdGhlIFZUVSB0aGUgZWdyZXNzIG1hcHBpbmcgb2YgdGhlIGZyYW1lIGlzIGxpbWl0ZWQKKiAgICAgICAgYnkgdGhlIHNvdXJjZSBwb3J0J3MgUG9ydFZMQU5UYWJsZSBvbmx5LiBUaGUgdHdvIG1ldGhvZHMgYXJlIG5ldmVyCiogICAgICAgIHVzZWQgdG9nZXRoZXIgaW4gdGhpcyBtb2RlLgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFIGlmIDgwMi4xUSBWbGFuIE9ubHkgZmVhdHVyZSBpcyBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRRVmxhbnNPbmx5CigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIE9VVCBHVF9CT09MICAgICAgKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXQ1Qml0UG9ydAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFVzZSA1IGJpdHMgZm9yIFBvcnQgZGF0YSBpbiB0aGUgUG9ydCBWTEFOIFRhYmxlIChQVlQpLiAKKiAgICAgICAgV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgdGhlIDkgYml0cyB1c2VkIHRvIGFjY2VzcyB0aGUgUFZUIG1lbW9yeSBpczoKKiAgICAgICAgICAgIEFkZHJbODo1XSA9IFNvdXJjZSBEZXZpY2VbMzowXSBvciBEZXZpY2UgTnVtYmVyWzM6MF0KKiAgICAgICAgICAgIEFkZHJbNDowXSA9IFNvdXJjZSBQb3J0L1RydW5rWzQ6MF0KKiAgICAgICAgV2hlbiBpdCdzIGRpc2FibGVkLCB0aGUgOSBiaXRzIHVzZWQgdG8gYWNjZXNzIHRoZSBQVlQgbWVtb3J5IGlzOgoqICAgICAgICAgICAgQWRkcls4OjRdID0gU291cmNlIERldmljZVs0OjBdIG9yIERldmljZSBOdW1iZXJbNDowXQoqICAgICAgICAgICAgQWRkclszOjBdID0gU291cmNlIFBvcnQvVHJ1bmtbMzowXQoqCiogSU5QVVRTOgoqICAgICAgICBlbiAtIEdUX1RSVUUgdG8gdXNlIDUgYml0IGFzIGEgU291cmNlIHBvcnQgaW4gUFZULCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0NUJpdFBvcnQKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9CT09MICAgICAgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0NUJpdFBvcnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBVc2UgNSBiaXRzIGZvciBQb3J0IGRhdGEgaW4gdGhlIFBvcnQgVkxBTiBUYWJsZSAoUFZUKS4gCiogICAgICAgIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIHRoZSA5IGJpdHMgdXNlZCB0byBhY2Nlc3MgdGhlIFBWVCBtZW1vcnkgaXM6CiogICAgICAgICAgICBBZGRyWzg6NV0gPSBTb3VyY2UgRGV2aWNlWzM6MF0gb3IgRGV2aWNlIE51bWJlclszOjBdCiogICAgICAgICAgICBBZGRyWzQ6MF0gPSBTb3VyY2UgUG9ydC9UcnVua1s0OjBdCiogICAgICAgIFdoZW4gaXQncyBkaXNhYmxlZCwgdGhlIDkgYml0cyB1c2VkIHRvIGFjY2VzcyB0aGUgUFZUIG1lbW9yeSBpczoKKiAgICAgICAgICAgIEFkZHJbODo0XSA9IFNvdXJjZSBEZXZpY2VbNDowXSBvciBEZXZpY2UgTnVtYmVyWzQ6MF0KKiAgICAgICAgICAgIEFkZHJbMzowXSA9IFNvdXJjZSBQb3J0L1RydW5rWzM6MF0KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGVuIC0gR1RfVFJVRSBpZiA1IGJpdCBpcyB1c2VkIGFzIGEgU291cmNlIFBvcnQgaW4gUFZULCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXQ1Qml0UG9ydAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfQk9PTCAgICAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0U0RFVFBvbGFyaXR5CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgU0RFVCAoU2lnbmFsIERldGVjdCkgUG9sYXJpdHkgc2VsZWN0IGJpdHMgZm9yIGVhY2ggcG9ydC4gCiogICAgICAgIEJpdCAxMCBpcyBmb3IgUG9ydCAxMCwgYml0IDkgaXMgZm9yIFBvcnQgOSwgZXRjLiBTREVUIGlzIHVzZWQgdG8gaGVscCAKKiAgICAgICAgZGV0ZXJtaW5lIGxpbmsgb24gZmliZXIgcG9ydHMuIFRoaXMgYml0IGFmZmVjdHMgdGhlIGFjdGl2ZSBsZXZlbCBvZiBhIAoqICAgICAgICBwb3J0J3MgU0RFVCBwaW5zIGFzIGZvbGxvd3M6CiogICAgICAgICAgICAwID0gU0RFVCBpcyBhY3RpdmUgbG93LiBBIGxvdyBsZXZlbCBvbiB0aGUgcG9ydCdzIFNERVQgcGluIGlzIAoqICAgICAgICAgICAgICAgIHJlcXVpcmVkIGZvciBsaW5rIHRvIG9jY3VyLgoqICAgICAgICAgICAgMSA9IFNERVQgaXMgYWN0aXZlIGhpZ2guIEEgaGlnaCBsZXZlbCBvbiB0aGUgcG9ydJJzIFNERVQgcGluIGlzIAoqICAgICAgICAgICAgICAgIHJlcXVpcmVkIGZvciBsaW5rIHRvIG9jY3VyLgoqICAgICAgICBTREVUIGlzIHVzZWQgd2hlbiB0aGUgcG9ydCBpcyBjb25maWd1cmVkIGFzIGEgZmliZXIgcG9ydC4gSW4gYWxsIG90aGVyIAoqICAgICAgICBwb3J0IG1vZGVzIHRoZSBTREVUIHBpbnMgYXJlIGlnbm9yZWQgYW5kIHRoZXNlIGJpdHMgaGF2ZSBubyBlZmZlY3QuCioKKiBJTlBVVFM6CiogICAgICAgIHNkZXRWZWMgLSBTREVUIFBvbGFyaXR5IGZvciBlYWNoIHBvcnQgaW4gVmVjdG9yIGZvcm1hdAoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBzZGV0VmVjIGlzIGludmFsaWQKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRTREVUUG9sYXJpdHkKKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9VMzIgICAgICAgICAgc2RldFZlYwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0U0RFVFBvbGFyaXR5CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgU0RFVCAoU2lnbmFsIERldGVjdCkgUG9sYXJpdHkgc2VsZWN0IGJpdHMgZm9yIGVhY2ggcG9ydC4gCiogICAgICAgIEJpdCAxMCBpcyBmb3IgUG9ydCAxMCwgYml0IDkgaXMgZm9yIFBvcnQgOSwgZXRjLiBTREVUIGlzIHVzZWQgdG8gaGVscCAKKiAgICAgICAgZGV0ZXJtaW5lIGxpbmsgb24gZmliZXIgcG9ydHMuIFRoaXMgYml0IGFmZmVjdHMgdGhlIGFjdGl2ZSBsZXZlbCBvZiBhIAoqICAgICAgICBwb3J0J3MgU0RFVCBwaW5zIGFzIGZvbGxvd3M6CiogICAgICAgICAgICAwID0gU0RFVCBpcyBhY3RpdmUgbG93LiBBIGxvdyBsZXZlbCBvbiB0aGUgcG9ydCdzIFNERVQgcGluIGlzIAoqICAgICAgICAgICAgICAgIHJlcXVpcmVkIGZvciBsaW5rIHRvIG9jY3VyLgoqICAgICAgICAgICAgMSA9IFNERVQgaXMgYWN0aXZlIGhpZ2guIEEgaGlnaCBsZXZlbCBvbiB0aGUgcG9ydJJzIFNERVQgcGluIGlzIAoqICAgICAgICAgICAgICAgIHJlcXVpcmVkIGZvciBsaW5rIHRvIG9jY3VyLgoqICAgICAgICBTREVUIGlzIHVzZWQgd2hlbiB0aGUgcG9ydCBpcyBjb25maWd1cmVkIGFzIGEgZmliZXIgcG9ydC4gSW4gYWxsIG90aGVyIAoqICAgICAgICBwb3J0IG1vZGVzIHRoZSBTREVUIHBpbnMgYXJlIGlnbm9yZWQgYW5kIHRoZXNlIGJpdHMgaGF2ZSBubyBlZmZlY3QuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBzZGV0VmVjIC0gU0RFVCBQb2xhcml0eSBmb3IgZWFjaCBwb3J0IGluIFZlY3RvciBmb3JtYXQKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFNERVRQb2xhcml0eQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfVTMyICAgICAgKnNkZXRWZWMKKTsKCgovKiBndEJyZ1ZsYW4uYyBmb3IgMi42IHJlbGVhc2UgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3ZsblNldE5vRWdyUG9saWN5CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgTm8gRWdyZXNzIFBvbGljeS4gV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gYSBvbmUgRWdyZXNzIDgwMi4xUSBTZWN1cmUgYW5kCiogICAgICAgIENoZWNrIGRpc2NhcmRzIGFyZSBub3QgcGVyZm9ybWVkLiBUaGlzIG1vZGUgYWxsb3dzYSBub24tODAyLjFRIGVuYWJsZWQgCiogICAgICAgIHBvcnQgdG8gc2VuZCBhIGZyYW1lIHRvIGFuIDgwMi4xUSBlbmFibGVkIHBvcnQgdGhhdCBpcyBjb25maWd1cmVkIGluIHRoZQoqICAgICAgICBTZWN1cmUgb3IgQ2hlY2sgODAyLjFRIG1vZGUuIEluIHRoaXMgc2l0dWF0aW9uIHRoZSBmcmFtZXMgd2lsbCBlZ3Jlc3MgCiogICAgICAgIGV2ZW4gaWYgdGhlIFZJRCBhc3NpZ25lZCB0byB0aGUgZnJhbWUgaXMgbm90IGZvdW5kIGluIHRoZSBWVFUuCioKKiBJTlBVVFM6CiogICAgICAgIG1vZGUgLSBubyBlZ3Jlc3MgcG9saWN5IG1vZGUKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2bG5TZXROb0VnclBvbGljeQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0JPT0wgICAgICAgIG1vZGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5HZXROb0VnclBvbGljeQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIE5vIEVncmVzcyBQb2xpY3kuIFdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lIEVncmVzcyA4MDIuMVEgU2VjdXJlIGFuZAoqICAgICAgICBDaGVjayBkaXNjYXJkcyBhcmUgbm90IHBlcmZvcm1lZC4gVGhpcyBtb2RlIGFsbG93c2Egbm9uLTgwMi4xUSBlbmFibGVkIAoqICAgICAgICBwb3J0IHRvIHNlbmQgYSBmcmFtZSB0byBhbiA4MDIuMVEgZW5hYmxlZCBwb3J0IHRoYXQgaXMgY29uZmlndXJlZCBpbiB0aGUKKiAgICAgICAgU2VjdXJlIG9yIENoZWNrIDgwMi4xUSBtb2RlLiBJbiB0aGlzIHNpdHVhdGlvbiB0aGUgZnJhbWVzIHdpbGwgZWdyZXNzIAoqICAgICAgICBldmVuIGlmIHRoZSBWSUQgYXNzaWduZWQgdG8gdGhlIGZyYW1lIGlzIG5vdCBmb3VuZCBpbiB0aGUgVlRVLgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAtIG5vIGVncmVzcyBwb2xpY3kgbW9kZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmxuR2V0Tm9FZ3JQb2xpY3kKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX0JPT0wgICAgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd3ZFNldFJNVVRpbWVPdXQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBSZW1vdGUgTWFuYWdlbWVudCBUaW1lb3V0LiBXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSB0aGUgUmVtb3RlCiogICAgICAgIE1hbmFnZW1lbnQgVW5pdChSTVUpIHdpbGwgdGltZW91dCBvbiBXYWl0IG9uIEJpdCBjb21tYW5kcy4gSWYgdGhlIGJpdCB0aGF0CiogICAgICAgIGlzIGJlaW5nIHRlc3RlZCBoYXMgbm90IGdvbmUgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBhZnRlciAxIHNlYy4gaGFzIGVsYXBzZWQKKiAgICAgICAgdGhlIFdhaXQgb24gQml0IGNvbW1hbmQgd2lsbCBiZSB0ZXJtaW5hdGVkIGFuZCB0aGUgUmVzcG9uc2UgZnJhbWUgd2lsbCBiZQoqICAgICAgICBzZW50IHdpdGhvdXQgYW55IGZ1cnRoZXIgcHJvY2Vzc2luZy4KKgoqICAgICAgICBXaGVuIHRoaXMgYml0IGlzIGNsZWFyZWQgdG8gYSB6ZXJvIHRoZSBXYWl0IG9uIEJpdCBjb21tYW5kIHdpbGwgd2FpdCAKKiAgICAgICAgdW50aWwgdGhlIGJpdCB0aGF0IGlzIGJlaW5nIHRlc3RlZCBoYXMgY2hhbmdlZCB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLgoqCiogSU5QVVRTOgoqICAgICAgICBlbiAgIC0gR1RfVFJVRSB0byBlbmFibGUgUk1VIFRpbWVvdXQKKiAgICAgICAgICAgICAgIEdUX0ZBTFVTRSB0byBkaXNhYmxlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3dkU2V0Uk1VVGltZU91dAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfQk9PTCAgICAgICAgZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3dkR2V0Uk1VVGltZU91dAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFJlbW90ZSBNYW5hZ2VtZW50IFRpbWVvdXQuIFdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lIHRoZSBSZW1vdGUKKiAgICAgICAgTWFuYWdlbWVudCBVbml0KFJNVSkgd2lsbCB0aW1lb3V0IG9uIFdhaXQgb24gQml0IGNvbW1hbmRzLiBJZiB0aGUgYml0IHRoYXQKKiAgICAgICAgaXMgYmVpbmcgdGVzdGVkIGhhcyBub3QgZ29uZSB0byB0aGUgc3BlY2lmaWVkIHZhbHVlIGFmdGVyIDEgc2VjLiBoYXMgZWxhcHNlZAoqICAgICAgICB0aGUgV2FpdCBvbiBCaXQgY29tbWFuZCB3aWxsIGJlIHRlcm1pbmF0ZWQgYW5kIHRoZSBSZXNwb25zZSBmcmFtZSB3aWxsIGJlCiogICAgICAgIHNlbnQgd2l0aG91dCBhbnkgZnVydGhlciBwcm9jZXNzaW5nLgoqCiogICAgICAgIFdoZW4gdGhpcyBiaXQgaXMgY2xlYXJlZCB0byBhIHplcm8gdGhlIFdhaXQgb24gQml0IGNvbW1hbmQgd2lsbCB3YWl0IAoqICAgICAgICB1bnRpbCB0aGUgYml0IHRoYXQgaXMgYmVpbmcgdGVzdGVkIGhhcyBjaGFuZ2VkIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBlbiAgIC0gR1RfVFJVRSB0byBlbmFibGUgUk1VIFRpbWVvdXQKKiAgICAgICAgICAgICAgIEdUX0ZBTFVTRSwgb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnd2RHZXRSTVVUaW1lT3V0CigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIE9VVCBHVF9CT09MICAgICAgICAqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3dkR2V0RWdyZXNzV0RFdmVudAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIElmIGFueSBwb3J0J3MgZWdyZXNzIGxvZ2ljIGRldGVjdHMgYW4gZWdyZXNzIHdhdGNoIGRvZyBpc3N1ZSwgdGhpcyBiaXQKKiAgICAgICAgd2lsbCBiZSBzZXQgdG8gYSBvbmUsIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHRpbmcgb2YgdGhlIEdUX1dEX0VHUkVTUyBpbgoqICAgICAgICBnd2RTZXRFdmVudCBmdW5jdGlvbi4KKiAgICAgICAgCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgZXZlbnQgLSBHVF9UUlVFLCBpZiBlZ3Jlc3MgbG9naWMgaGFzIGRldGVjdGVkIGFueSBlZ3Jlc3Mgd2F0Y2ggZG9nIGlzc3VlCiogICAgICAgICAgICAgICAgR1RfRkFMVVNFLCBvdGhlcndpc2UKKgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3dkR2V0RWdyZXNzV0RFdmVudAooCiAgICBJTiAgR1RfUURfREVWICAgICAgICAqZGV2LAogICAgT1VUIEdUX0JPT0wgICAgICAgICAgICAqZXZlbnQKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRRb1NXZWlnaHQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFByb2dyYW1tYWJsZSBSb3VuZCBSb2JpbiBXZWlnaHRzLgoqICAgICAgICBFYWNoIHBvcnQgaGFzIDQgb3V0cHV0IFF1ZXVlcy4gUXVldWUgMyBoYXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgYW5kIAoqICAgICAgICBRdWV1ZSAwIGhhcyB0aGUgbG93ZXN0IHByaW9yaXR5LiBXaGVuIGEgc2NoZWR1bGluZyBtb2RlIG9mIHBvcnQgaXMgCiogICAgICAgIGNvbmZpZ3VyZWQgYXMgV2VpZ2h0ZWQgUm91bmQgUm9iaW4gcXVldWluZyBtb2RlLCB0aGUgYWNjZXNzIHNlcXVlY2Ugb2YgdGhlIAoqICAgICAgICBRdWV1ZSBpcyAzLDIsMywxLDMsMiwzLDAsMywyLDMsMSwzLDIsMyBieSBkZWZhdWx0LgoqICAgICAgICBUaGlzIHNlcXVlbmNlIGNhbiBiZSBjb25maWd1cmVkIHdpdGggdGhpcyBBUEkuCioKKiBJTlBVVFM6CiogICAgICAgd2VpZ2h0IC0gYWNjZXNzIHNlcXVlbmNlIG9mIHRoZSBxdWV1ZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRRb1NXZWlnaHQKKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAgICpkZXYsCiAgICBJTiAgR1RfUW9TX1dFSUdIVCAgICAqd2VpZ2h0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRRb1NXZWlnaHQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFByb2dyYW1tYWJsZSBSb3VuZCBSb2JpbiBXZWlnaHRzLgoqICAgICAgICBFYWNoIHBvcnQgaGFzIDQgb3V0cHV0IFF1ZXVlcy4gUXVldWUgMyBoYXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgYW5kIAoqICAgICAgICBRdWV1ZSAwIGhhcyB0aGUgbG93ZXN0IHByaW9yaXR5LiBXaGVuIGEgc2NoZWR1bGluZyBtb2RlIG9mIHBvcnQgaXMgCiogICAgICAgIGNvbmZpZ3VyZWQgYXMgV2VpZ2h0ZWQgUm91bmQgUm9iaW4gcXVldWluZyBtb2RlLCB0aGUgYWNjZXNzIHNlcXVlY2Ugb2YgdGhlIAoqICAgICAgICBRdWV1ZSBpcyAzLDIsMywxLDMsMiwzLDAsMywyLDMsMSwzLDIsMyBieSBkZWZhdWx0LgoqICAgICAgICBUaGlzIHJvdXRpbmUgcmV0cmlldmVzIHRoZSBhY2Nlc3Mgc2VxdWVuY2Ugb2YgdGhlIFF1ZXVlLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIHdlaWdodCAtIGFjY2VzcyBzZXF1ZW5jZSBvZiB0aGUgcXVldWUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UW9TV2VpZ2h0CigKICAgIElOICBHVF9RRF9ERVYgICAgICAgICAqZGV2LAogICAgT1VUIEdUX1FvU19XRUlHSFQgICAgKndlaWdodAopOwoKCi8qCiAqICAgIGd0UG9ydEN0cmwuYwoqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0SnVtYm9Nb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgU2V0IHRoZSBtYXggZnJhbWUgc2l6ZSBhbGxvd2VkIHRvIGJlIHJlY2VpdmVkIGFuZCB0cmFuc21pdHRlZAoqICAgICAgICBmcm9tIG9yIHRvIGEgZ2l2ZW4gcG9ydC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgbW9kZSAtIEdUX0pVTUJPX01PREUgKDE1MjIsIDIwNDgsIG9yIDEwMjQwKQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEp1bWJvTW9kZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIElOICBHVF9KVU1CT19NT0RFICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0SnVtYm9Nb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgbWF4IGZyYW1lIHNpemUgYWxsb3dlZCB0byBiZSByZWNlaXZlZCBhbmQgdHJhbnNtaXR0ZWQKKiAgICAgICAgZnJvbSBvciB0byBhIGdpdmVuIHBvcnQuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgLSBHVF9KVU1CT19NT0RFICgxNTIyLCAyMDQ4LCBvciAxMDI0MCkKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEp1bWJvTW9kZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9KVU1CT19NT0RFICAgKm1vZGUKKTsKCi8qCiAqICBndFBoeUN0cmwuYwoqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRFbmVyZ3lEZXRlY3QKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEVuZXJneSBEZXRlY3QgcG93ZXIgZG93biBtb2RlIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFBIWSB0byB3YWtlIHVwIG9uCiogICAgICAgIGl0cyBvd24gYnkgZGV0ZWN0aW5nIGFjdGl2aXR5IG9uIHRoZSBDQVQgNSBjYWJsZS4gCioKKiBJTlBVVFM6CiogICAgICAgICBwb3J0IC0gVGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIEdUX0VERVRFQ1RfTU9ERSB0eXBlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRFbmVyZ3lEZXRlY3QKKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUICBwb3J0LAogICAgT1VUIEdUX0VERVRFQ1RfTU9ERSAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRFbmVyZ3lEZXRlY3QKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEVuZXJneSBEZXRlY3QgcG93ZXIgZG93biBtb2RlIGVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFBIWSB0byB3YWtlIHVwIG9uCiogICAgICAgIGl0cyBvd24gYnkgZGV0ZWN0aW5nIGFjdGl2aXR5IG9uIHRoZSBDQVQgNSBjYWJsZS4gCioKKiBJTlBVVFM6CiogICAgICAgICBwb3J0IC0gVGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICBtb2RlIC0gR1RfRURFVEVDVF9NT0RFIHR5cGUKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkdUX1NUQVRVUyBncHJ0U2V0RW5lcmd5RGV0ZWN0CigKICAgIElOICBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCAgcG9ydCwKICAgIElOICBHVF9FREVURUNUX01PREUgICBtb2RlCik7CgoKLyoKICogICAgZ3RTeXNDdHJsLmMKKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFJNVU1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBTZXQgUm1vdGUgTWFuYWdlbWVudCBVbml0IE1vZGU6IGRpc2FibGUsIGVuYWJsZSBvbiBwb3J0IDQsIDUgb3IgNiwgb3IgZW5hYmxlCiogICAgICAgIG9uIHBvcnQgOSBvciAxMC4gRGV2aWNlcywgc3VjaCBhcyA4OEU2MDk3LCBzdXBwb3J0IFJNVSBvbiBwb3J0IDkgYW5kIDEwLCAKKiAgICAgICAgd2hpbGUgb3RoZXIgZGV2aWNlcywgc3VjaCBhcyA4OEU2MTY1LCBzdXBwb3J0IFJNVSBvbiBwb3J0IDQsIDUgYW5kIDYuIFNvLAoqICAgICAgICBwbGVhc2UgcmVmZXIgdG8gdGhlIGRldmljZSBkYXRhc2hlZXQgZm9yIGRldGFpbC4KKiAgICAgICAgV2hlbiBSTVUgaXMgZW5hYmxlZCBhbmQgdGhpcyBkZXZpY2UgcmVjZWl2ZXMgYSBSZW1vdGUgTWFuYWdlbWVudCBSZXF1ZXN0CiogICAgICAgIGZyYW1lIGRpcmVjdGVkIHRvIHRoaXMgZGV2aWNlLCB0aGUgZnJhbWUgd2lsbCBiZSBwcm9jZXNzZWQgYW5kIGEgUmVtb3RlIAoqICAgICAgICBNYW5hZ2VtZW50IFJlc3BvbnNlIGZyYW1lIHdpbGwgYmUgZ2VuZXJhdGVkIGFuZCBzZW50IG91dC4KKiAgICAgICAgCiogICAgICAgIE5vdGU6IGVuYWJsaW5nIFJNVSBoYXMgbm8gZWZmZWN0IGlmIHRoZSBSZW1vdGUgTWFuYWdlbWVudCBwb3J0IGlzIGluIGhhbGYKKiAgICAgICAgZHVwbGV4IG1vZGUuIFRoZSBwb3J0J3MgRnJhbWVNb2RlIG11c3QgYmUgRFNBIG9yIEV0aGVyVHlwZSBEU0EgYXMgd2VsbC4KKiAgICAgICAgCiogSU5QVVRTOgoqICAgICAgICBybXUgLSBHVF9STVUgc3RydWN0dXJlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAgICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Uk1VTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX1JNVSAgICAgICAgKnJtdQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0Uk1VTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIEdldCBSbW90ZSBNYW5hZ2VtZW50IFVuaXQgTW9kZTogZGlzYWJsZSwgZW5hYmxlIG9uIHBvcnQgNCwgNSBvciA2LCBvciBlbmFibGUKKiAgICAgICAgb24gcG9ydCA5IG9yIDEwLiBEZXZpY2VzLCBzdWNoIGFzIDg4RTYwOTcsIHN1cHBvcnQgUk1VIG9uIHBvcnQgOSBhbmQgMTAsIAoqICAgICAgICB3aGlsZSBvdGhlciBkZXZpY2VzLCBzdWNoIGFzIDg4RTYxNjUsIHN1cHBvcnQgUk1VIG9uIHBvcnQgNCwgNSBhbmQgNi4gU28sCiogICAgICAgIHBsZWFzZSByZWZlciB0byB0aGUgZGV2aWNlIGRhdGFzaGVldCBmb3IgZGV0YWlsLgoqICAgICAgICBXaGVuIFJNVSBpcyBlbmFibGVkIGFuZCB0aGlzIGRldmljZSByZWNlaXZlcyBhIFJlbW90ZSBNYW5hZ2VtZW50IFJlcXVlc3QKKiAgICAgICAgZnJhbWUgZGlyZWN0ZWQgdG8gdGhpcyBkZXZpY2UsIHRoZSBmcmFtZSB3aWxsIGJlIHByb2Nlc3NlZCBhbmQgYSBSZW1vdGUgCiogICAgICAgIE1hbmFnZW1lbnQgUmVzcG9uc2UgZnJhbWUgd2lsbCBiZSBnZW5lcmF0ZWQgYW5kIHNlbnQgb3V0LgoqICAgICAgICAKKiAgICAgICAgTm90ZTogZW5hYmxpbmcgUk1VIGhhcyBubyBlZmZlY3QgaWYgdGhlIFJlbW90ZSBNYW5hZ2VtZW50IHBvcnQgaXMgaW4gaGFsZgoqICAgICAgICBkdXBsZXggbW9kZS4gVGhlIHBvcnQncyBGcmFtZU1vZGUgbXVzdCBiZSBEU0Egb3IgRXRoZXJUeXBlIERTQSBhcyB3ZWxsLgoqICAgICAgICAKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBybXUgLSBHVF9STVUgc3RydWN0dXJlCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRSTVVNb2RlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIE9VVCBHVF9STVUgICAgICAgICpybXUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1BvcnQyTHBvcnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgY29udmVydHMgcGh5c2ljYWwgcG9ydCBudW1iZXIgdG8gbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHBoeXNpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqICAgICAgICBscG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNQb3J0Mkxwb3J0CigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9VMzIgICAgICAgICBwb3J0LAogICAgT1VUIEdUX0xQT1JUICAgICpscG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzTHBvcnQyUG9ydAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBjb252ZXJ0cyBsb2dpY2FsIHBvcnQgbnVtYmVyIHRvIHBoeXNpY2FsIHBvcnQgbnVtYmVyLgoqCiogSU5QVVRTOgoqICAgICAgICBscG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CiogICAgICAgIHBvcnQgLSBwaHlzaWNhbCBwb3J0IG51bWJlcgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0xwb3J0MlBvcnQKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIGxwb3J0LAogICAgT1VUIEdUX1UzMiAgICAgICAgICpwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNQb3J0dmVjMkxwb3J0dmVjCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGNvbnZlcnRzIHBoeXNpY2FsIHBvcnQgdmVjdG9yIHRvIGxvZ2ljYWwgcG9ydCB2ZWN0b3IuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnR2ZWMgLSBwaHlzaWNhbCBwb3J0IHZlY3RvcgoqCiogT1VUUFVUUzoKKiAgICAgICAgbHBvcnR2ZWMgLSBsb2dpY2FsIHBvcnQgdmVjdG9yCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzUG9ydHZlYzJMcG9ydHZlYwooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfVTMyICAgICAgICBwb3J0dmVjLAogICAgT1VUIEdUX1UzMiAgICAgICAgICpscG9ydHZlYwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzTHBvcnR2ZWMyUG9ydHZlYwoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBjb252ZXJ0cyBsb2dpY2FsIHBvcnQgdmVjdG9yIHRvIHBoeXNpY2FsIHBvcnQgdmVjdG9yLgoqCiogSU5QVVRTOgoqICAgICAgICBscG9ydHZlYyAtIGxvZ2ljYWwgcG9ydCB2ZWN0b3IKKgoqIE9VVFBVVFM6CiogICAgICAgIHBvcnR2ZWMgLSBwaHlzaWNhbCBwb3J0IHZlY3RvcgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0xwb3J0dmVjMlBvcnR2ZWMKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX1UzMiAgICAgICAgbHBvcnR2ZWMsCiAgICBPVVQgR1RfVTMyICAgICAgICAgKnBvcnR2ZWMKKTsKCgovKgogKiBndFBJUkwuYwogKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BpcmxTZXRDdXJUaW1lVXBJbnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgY3VycmVudCB0aW1lIHVwZGF0ZSBpbnRlcnZhbC4KKiAgICAgICAgUGxlYXNlIGNvbnRhY3QgRkFFIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbi4KKgoqIElOUFVUUzoKKiAgICAgICB1cEludCAtIHVwZGF0YSBpbnRlcnZhbCAoMCB+IDcpCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwaXJsU2V0Q3VyVGltZVVwSW50CigKICAgIElOICBHVF9RRF9ERVYgICAgICAgICAgICAgICpkZXYsCiAgICBJTiAgICBHVF9VMzIgICAgICAgICAgICAgICAgdXBJbnQKKTsKCgovKgogKiBndFBJUkwyLmMKICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwaXJsMlNldEN1clRpbWVVcEludAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBjdXJyZW50IHRpbWUgdXBkYXRlIGludGVydmFsLgoqICAgICAgICBQbGVhc2UgY29udGFjdCBGQUUgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uLgoqCiogSU5QVVRTOgoqICAgICAgIHVwSW50IC0gdXBkYXRhIGludGVydmFsICgwIH4gNykKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BpcmwyU2V0Q3VyVGltZVVwSW50CigKICAgIElOICBHVF9RRF9ERVYgICAgICAgICAgICAgICpkZXYsCiAgICBJTiAgICBHVF9VMzIgICAgICAgICAgICAgICAgdXBJbnQKKTsKCgovKgogKiBndFBUUC5jCiAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0Q29uZmlnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgd3JpdGVzIFBUUCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCioKKiBJTlBVVFM6CiogICAgICAgIHB0cERhdGEgIC0gUFRQIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRDb25maWcKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9QVFBfQ09ORklHICAgICpwdHBEYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRDb25maWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZWFkcyBQVFAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBwdHBEYXRhICAtIFBUUCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwR2V0Q29uZmlnCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBPVVQgR1RfUFRQX0NPTkZJRyAgICAqcHRwRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0R2xvYmFsQ29uZmlnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgd3JpdGVzIFBUUCBnbG9iYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgICBwdHBEYXRhICAtIFBUUCBnbG9iYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cFNldEdsb2JhbENvbmZpZwooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX1BUUF9HTE9CQUxfQ09ORklHICAgICpwdHBEYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRHbG9iYWxDb25maWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZWFkcyBQVFAgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgcHRwRGF0YSAgLSBQVFAgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRHbG9iYWxDb25maWcKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIE9VVCBHVF9QVFBfR0xPQkFMX0NPTkZJRyAgICAqcHRwRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0UG9ydENvbmZpZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHdyaXRlcyBQVFAgcG9ydCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCioKKiBJTlBVVFM6CiogICAgICAgIHB0cERhdGEgIC0gUFRQIHBvcnQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cFNldFBvcnRDb25maWcKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICAgIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgR1RfUFRQX1BPUlRfQ09ORklHICAgICpwdHBEYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRQb3J0Q29uZmlnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmVhZHMgUFRQIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgYSBwb3J0LgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBwdHBEYXRhICAtIFBUUCBwb3J0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRQb3J0Q29uZmlnCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX1BUUF9QT1JUX0NPTkZJRyAgICAqcHRwRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0UFRQRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzIG9yIGRpc2FibGVzIFBUUC4KKgoqIElOUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFIHRvIGVuYWJsZSBQVFAsIEdUX0ZBTFNFIHRvIGRpc2FibGUgUFRQCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwU2V0UFRQRW4KKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9CT09MICAgICAgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwR2V0UFRQRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBjaGVja3MgaWYgUFRQIGlzIGVuYWJsZWQuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGVuIC0gR1RfVFJVRSBpZiBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRQVFBFbgooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgT1VUIEdUX0JPT0wgICAgICAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0UG9ydFBUUEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZW5hYmxlcyBvciBkaXNhYmxlcyBQVFAgb24gYSBwb3J0LgoqCiogSU5QVVRTOgoqICAgICAgICBlbiAtIEdUX1RSVUUgdG8gZW5hYmxlIFBUUCwgR1RfRkFMU0UgdG8gZGlzYWJsZSBQVFAKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRQb3J0UFRQRW4KKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICAgIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgR1RfQk9PTCAgICAgICAgZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cEdldFBvcnRQVFBFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGNoZWNrcyBpZiBQVFAgaXMgZW5hYmxlZCBvbiBhIHBvcnQuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGVuIC0gR1RfVFJVRSBpZiBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRQb3J0UFRQRW4KKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICAgIEdUX0xQT1JUICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICAgKmVuCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwR2V0UFRQSW50CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBQVFAgaW50ZXJydXB0IHN0YXR1cyBmb3IgZWFjaCBwb3J0LgoqICAgICAgICBUaGUgUFRQIEludGVycnVwdCBiaXQgZ2V0cyBzZXQgZm9yIGEgZ2l2ZW4gcG9ydCB3aGVuIGFuIGluY29taW5nIFBUUCAKKiAgICAgICAgZnJhbWUgaXMgdGltZSBzdGFtcGVkIGFuZCBQVFBBcnJJbnRFbiBmb3IgdGhhdCBwb3J0IGlzIHNldCB0byAweDEuCiogICAgICAgIFNpbWlsYXJ5IFBUUCBJbnRlcnJ1cHQgYml0IGdldHMgc2V0IGZvciBhIGdpdmVuIHBvcnQgd2hlbiBhbiBvdXRnb2luZwoqICAgICAgICBQVFAgZnJhbWUgaXMgdGltZSBzdGFtcGVkIGFuZCBQVFBEZXBJbnRFbiBmb3IgdGhhdCBwb3J0IGlzIHNldCB0byAweDEuCiogICAgICAgIFRoaXMgYml0IGdldHMgY2xlYXJlZCB1cG9uIHNvZnR3YXJlIHJlYWRpbmcgYW5kIGNsZWFyaW5nIHRoZSBjb3JyZXNwb25kaW5nCiogICAgICAgIHRpbWUgY291bnRlciB2YWxpZCBiaXRzIHRoYXQgYXJlIHZhbGlkIGZvciB0aGF0IHBvcnQuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIHB0cEludCAgICAgLSBpbnRlcnJ1cHQgc3RhdHVzIGZvciBlYWNoIHBvcnQgKGJpdCAwIGZvciBwb3J0IDAsIGJpdCAxIGZvciBwb3J0IDEsIGV0Yy4pCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwR2V0UFRQSW50CigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBPVVQgR1RfVTMyICAgICAgICAqcHRwSW50Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRQVFBHbG9iYWxUaW1lCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgZ2xvYmFsIHRpbWVyIHZhbHVlIHRoYXQgaXMgcnVubmluZyBvZmYgb2YgdGhlIGZyZWUKKiAgICAgICAgcnVubmluZyBzd2l0Y2ggY29yZSBjbG9jay4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgcHRwVGltZSAgICAtIFBUUCBnbG9iYWwgdGltZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cEdldFBUUEdsb2JhbFRpbWUKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIE9VVCBHVF9VMzIgICAgICAgICpwdHBUaW1lCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRUaW1lU3RhbXBlZAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgdGhlIFBUUCBwb3J0IHN0YXR1cyB0aGF0IGluY2x1ZGVzIHRpbWUgc3RhbXAgdmFsdWUgCiogICAgICAgIGFuZCBzZXF1Y2UgSWQgdGhhdCBhcmUgY2FwdHVyZWQgYnkgUFRQIGxvZ2ljIGZvciBhIFBUUCBmcmFtZSB0aGF0IG5lZWRzIAoqICAgICAgICB0byBiZSB0aW1lIHN0YW1wZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAgICAgIC0gbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICB0aW1lVG9SZWFkICAgIC0gQXJyMCwgQXJyMSwgb3IgRGVwIHRpbWUgKEdUX1BUUF9USU1FIGVudW0gdHlwZSkKKgoqIE9VVFBVVFM6CiogICAgICAgIHB0cFN0YXR1cyAgICAtIFBUUCBwb3J0IHN0YXR1cwoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRUaW1lU3RhbXBlZAooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgICBHVF9QVFBfVElNRSAgICB0aW1lVG9SZWFkLAogICAgT1VUIEdUX1BUUF9UU19TVEFUVVMgICAgKnB0cFN0YXR1cwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwUmVzZXRUaW1lU3RhbXAKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgcmVzZXRzIFBUUCBUaW1lIHZhbGlkIGJpdCBzbyB0aGF0IFBUUCBsb2dpYyBjYW4gdGltZSBzdGFtcAoqICAgICAgICBhIG5leHQgUFRQIGZyYW1lIHRoYXQgbmVlZHMgdG8gYmUgdGltZSBzdGFtcGVkLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgICAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgdGltZVRvUmVzZXQgICAgLSBBcnIwLCBBcnIxLCBvciBEZXAgdGltZSAoR1RfUFRQX1RJTUUgZW51bSB0eXBlKQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwUmVzZXRUaW1lU3RhbXAKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgSU4gICAgR1RfUFRQX1RJTUUgICAgdGltZVRvUmVzZXQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cEdldFJlZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJlYWRzIFBUUCByZWdpc3Rlci4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgICAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIHJlZ09mZnNldCAgICAtIHJlZ2lzdGVyIHRvIHJlYWQKKgoqIE9VVFBVVFM6CiogICAgICAgIGRhdGEgICAgICAgIC0gcmVnaXN0ZXIgZGF0YQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cEdldFJlZwooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgR1RfVTMyICAgICAgICByZWdPZmZzZXQsCiAgICBPVVQgR1RfVTMyICAgICAgICAqZGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0UmVnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgd3JpdGVzIGRhdGEgdG8gUFRQIHJlZ2lzdGVyLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgICAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICByZWdPZmZzZXQgICAgLSByZWdpc3RlciB0byBiZSB3cml0dGVuCiogICAgICAgIGRhdGEgICAgICAgIC0gZGF0YSB0byBiZSB3cml0dGVuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cFNldFJlZwooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgR1RfVTMyICAgICAgICByZWdPZmZzZXQsCiAgICBJTiAgR1RfVTMyICAgICAgICBkYXRhCik7CgoKI2lmZGVmIENPTkZJR19BVkJfRlBHQQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0RlBHQUludFN0YXR1cwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgaW50ZXJydXB0IHN0YXR1cyBvZiBQVFAgbG9naWMuCioKKiBJTlBVVFM6CiogICAgICAgIGludFN0YXR1cyAgICAtIFBUUCBJbnQgU3RhdHVzCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwU2V0RlBHQUludFN0YXR1cwooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX1UzMiAgICBpbnRTdGF0dXMKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRGUEdBSW50U3RhdHVzCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBpbnRlcnJ1cHQgc3RhdHVzIG9mIFBUUCBsb2dpYy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgaW50U3RhdHVzICAgIC0gUFRQIEludCBTdGF0dXMKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRGUEdBSW50U3RhdHVzCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfVTMyICAgICppbnRTdGF0dXMKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBTZXRGUEdBSW50RW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzIFBUUCBpbnRlcnJ1cHQuCioKKiBJTlBVVFM6CiogICAgICAgIGludEVuICAgIC0gZW5hYmxlL2Rpc2FibGUgUFRQIGludGVycnVwdCAoMSB0byBlbmFibGUsIDAgdG8gZGlzYWJsZSkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRGUEdBSW50RW4KKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9VMzIgICAgaW50RW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cEdldENsb2NrU291cmNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBQVFAgQ2xvY2sgc291cmNlIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGNsa1NyYyAgICAtIFBUUCBjbG9jayBzb3VyY2UgKEEvRCBEZXZpY2Ugb3IgRlBHQSkKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRDbG9ja1NvdXJjZQooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgT1VUIEdUX1BUUF9DTE9DS19TUkMgICAgICpjbGtTcmMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFNldENsb2NrU291cmNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBQVFAgQ2xvY2sgc291cmNlIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgIGNsa1NyYyAgICAtIFBUUCBjbG9jayBzb3VyY2UgKEEvRCBEZXZpY2Ugb3IgRlBHQSkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRDbG9ja1NvdXJjZQooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX1BUUF9DTE9DS19TUkMgICAgIGNsa1NyYwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwR2V0UDlNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBQb3J0IDkgTW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAtIFBvcnQgOSBtb2RlIChHVF9QVFBfUDlfTU9ERSBlbnVtIHR5cGUpCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwR2V0UDlNb2RlCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBPVVQgR1RfUFRQX1A5X01PREUgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBTZXRQOU1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIFBvcnQgOSBNb2RlLgoqCiogSU5QVVRTOgoqICAgICAgICBtb2RlIC0gUG9ydCA5IG1vZGUgKEdUX1BUUF9QOV9NT0RFIGVudW0gdHlwZSkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRQOU1vZGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9QVFBfUDlfTU9ERSAgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwUmVzZXQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBwZXJmb3JtcyBzb2Z0d2FyZSByZXNldCBmb3IgUFRQIGxvZ2ljLgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cFJlc2V0CigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRDeWNsZUFkanVzdEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgY2hlY2tzIGlmIFBUUCBEdXR5IEN5Y2xlIEFkanVzdG1lbnQgaXMgZW5hYmxlZC4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgYWRqRW4gICAgLSBHVF9UUlVFIGlmIGVuYWJsZWQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cEdldEN5Y2xlQWRqdXN0RW4KKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIE9VVCBHVF9CT09MICAgICAgICAqYWRqRW4KKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBTZXRDeWNsZUFkanVzdEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZW5hYmxlcy9kaXNhYmxlcyBQVFAgRHV0eSBDeWNsZSBBZGp1c3RtZW50LgoqCiogSU5QVVRTOgoqICAgICAgICBhZGpFbiAgICAtIEdUX1RSVUUgdG8gZW5hYmxlLCBHVF9GQUxTRSB0byBkaXNhYmxlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwU2V0Q3ljbGVBZGp1c3RFbgooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX0JPT0wgICAgICAgIGFkakVuCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwR2V0Q3ljbGVBZGp1c3QKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIGNsb2NrIGR1dHkgY3ljbGUgYWRqdXN0bWVudCB2YWx1ZS4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgYWRqICAgIC0gYWRqdXN0bWVudCB2YWx1ZSAoR1RfUFRQX0NMT0NLX0FESlVTVE1FTlQgc3RydWN0dXJlKQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cEdldEN5Y2xlQWRqdXN0CigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBPVVQgR1RfUFRQX0NMT0NLX0FESlVTVE1FTlQgICAgICAgICphZGoKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFNldEN5Y2xlQWRqdXN0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBjbG9jayBkdXR5IGN5Y2xlIGFkanVzdG1lbnQgdmFsdWUuCioKKiBJTlBVVFM6CiogICAgICAgIGFkaiAgICAtIGFkanVzdG1lbnQgdmFsdWUgKEdUX1BUUF9DTE9DS19BREpVU1RNRU5UIHN0cnVjdHVyZSkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRDeWNsZUFkanVzdAooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX1BUUF9DTE9DS19BREpVU1RNRU5UICAgICAgICAqYWRqCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRQTExFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGNoZWNrcyBpZiBQTEwgaXMgZW5hYmxlZC4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgZW4gICAgICAgIC0gR1RfVFJVRSBpZiBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UKKiAgICAgICAgZnJlcVNlbCAgICAtIFBMTCBGcmVxdWVuY3kgU2VsZWN0aW9uIChkZWZhdWx0IDB4MyAtIDIyLjM2OE1IeikKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBQTEwgRnJlcXVlbmNlIHNlbGVjdGlvbiBpcyBiYXNlZCBvbiB0aGUgQ2xvY2sgUmVjb3ZlcnkgUExMIGRldmljZS4KKiAgICAgICAgSURUIE1LMTU3NS0wMSBpcyB0aGUgZGVmYXVsdCBQTEwgZGV2aWNlLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwR2V0UExMRW4KKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIE9VVCBHVF9CT09MICAgICAgICAqZW4sCiAgICBPVVQgR1RfVTMyICAgICAgICAqZnJlcVNlbAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0UExMRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzL2Rpc2FibGVzIFBMTCBkZXZpY2UuCioKKiBJTlBVVFM6CiogICAgICAgIGVuICAgICAgICAtIEdUX1RSVUUgdG8gZW5hYmxlLCBHVF9GQUxTRSB0byBkaXNhYmxlCiogICAgICAgIGZyZXFTZWwgICAgLSBQTEwgRnJlcXVlbmN5IFNlbGVjdGlvbiAoZGVmYXVsdCAweDMgLSAyMi4zNjhNSHopCiogICAgICAgICAgICAgICAgICBNZWFuaW5nZnVsIG9ubHkgd2hlbiBlbmFibGluZyBQTEwgZGV2aWNlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgUExMIEZyZXF1ZW5jZSBzZWxlY3Rpb24gaXMgYmFzZWQgb24gdGhlIENsb2NrIFJlY292ZXJ5IFBMTCBkZXZpY2UuCiogICAgICAgIElEVCBNSzE1NzUtMDEgaXMgdGhlIGRlZmF1bHQgUExMIGRldmljZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cFNldFBMTEVuCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfQk9PTCAgICAgICAgZW4sCiAgICBJTiAgR1RfVTMyICAgICAgICBmcmVxU2VsCik7CiNlbmRpZgoKLyogQW1iZXIgQVBJcyAqLwoKLyogZ3RCcmdGZGIuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0TWFjQXZiCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgQVRVIE1BQyBlbnRyeSBpbiBBVkIgbW9kZS4KKiAgICAgICAgV2hlbiBlbmFibGVkLCBBVFUgZW50cmllcyBvcGVyYXRlIGluIEFWQiBtb2RlOgoqCiogICAgICAgIEdUX0FUVV9VQ19TVEFURSAtIHN1cHBvcnQKKiAgICAgICAgICAgIEdUX1VDX05PX1BSSV9TVEFUSUNfQVZCX0VOVFJZLCBhbmQgCiogICAgICAgICAgICBHVF9VQ19TVEFUSUNfQVZCX0VOVFJZCioKKiAgICAgICAgR1RfQVRVX01DX1NUQVRFIC0gc3VwcG9ydAoqICAgICAgICAgICAgR1RfTUNfU1RBVElDX0FWQl9FTlRSWSwgYW5kCiogICAgICAgICAgICBHVF9NQ19QUklPX1NUQVRJQ19BVkJfRU5UUlkKKgoqICAgICAgICBXaGVuIGRpc2FibGVkLCBBVFUgZW50cmllcyBvcGVyYXRlIGluIG5vbi1BVkIgbW9kZToKKgoqICAgICAgICBHVF9BVFVfVUNfU1RBVEUgLSBzdXBwb3J0CiogICAgICAgICAgICBHVF9VQ19OT19QUklfU1RBVElDX05STCwgYW5kIAoqICAgICAgICAgICAgR1RfVUNfU1RBVElDX05STAoqCiogICAgICAgIEdUX0FUVV9NQ19TVEFURSAtIHN1cHBvcnQKKiAgICAgICAgICAgIEdUX01DX1NUQVRJQ19VTkxJTUlURURfUkFURSwgYW5kCiogICAgICAgICAgICBHVF9NQ19QUklPX1NUQVRJQ19VTkxJTUlURURfUkFURQoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAgLSBHVF9UUlVFIGlmIE1hY0F2YiBpcyBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkdldE1hY0F2YgooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfQk9PTCAgICAgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2ZkYlNldE1hY0F2YgoqCiogREVTQ1JJUFRJT046CiogICAgICAgIEFUVSBNQUMgZW50cnkgaW4gQVZCIG1vZGUuCiogICAgICAgIFdoZW4gZW5hYmxlZCwgQVRVIGVudHJpZXMgb3BlcmF0ZSBpbiBBVkIgbW9kZToKKgoqICAgICAgICBHVF9BVFVfVUNfU1RBVEUgLSBzdXBwb3J0CiogICAgICAgICAgICBHVF9VQ19OT19QUklfU1RBVElDX0FWQl9FTlRSWSwgYW5kIAoqICAgICAgICAgICAgR1RfVUNfU1RBVElDX0FWQl9FTlRSWQoqCiogICAgICAgIEdUX0FUVV9NQ19TVEFURSAtIHN1cHBvcnQKKiAgICAgICAgICAgIEdUX01DX1NUQVRJQ19BVkJfRU5UUlksIGFuZAoqICAgICAgICAgICAgR1RfTUNfUFJJT19TVEFUSUNfQVZCX0VOVFJZCioKKiAgICAgICAgV2hlbiBkaXNhYmxlZCwgQVRVIGVudHJpZXMgb3BlcmF0ZSBpbiBub24tQVZCIG1vZGU6CioKKiAgICAgICAgR1RfQVRVX1VDX1NUQVRFIC0gc3VwcG9ydAoqICAgICAgICAgICAgR1RfVUNfTk9fUFJJX1NUQVRJQ19OUkwsIGFuZCAKKiAgICAgICAgICAgIEdUX1VDX1NUQVRJQ19OUkwKKgoqICAgICAgICBHVF9BVFVfTUNfU1RBVEUgLSBzdXBwb3J0CiogICAgICAgICAgICBHVF9NQ19TVEFUSUNfVU5MSU1JVEVEX1JBVEUsIGFuZAoqICAgICAgICAgICAgR1RfTUNfUFJJT19TVEFUSUNfVU5MSU1JVEVEX1JBVEUKKgoqIElOUFVUUzoKKiAgICAgICAgbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIE1hY0F2YiwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYlNldE1hY0F2YgooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX0JPT0wgICAgICAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2ZkYkdldFBvcnRBdHVMZWFybkxpbWl0CioKKiBERVNDUklQVElPTjoKKiAgICAgIFBvcnQncyBhdXRvIGxlYXJuaW5nIGxpbWl0LiBXaGVuIHRoZSBsaW1pdCBpcyBub24temVybyB2YWx1ZSwgdGhlIG51bWJlcgoqICAgICAgICBvZiBNQUMgYWRkcmVzc2VzIHRoYXQgY2FuIGJlIGxlYXJuZWQgb24gdGhpcyBwb3J0IGFyZSBsaW1pdGVkIHRvIHRoZSB2YWx1ZQoqICAgICAgICBzcGVjaWZpZWQgaW4gdGhpcyBBUEkuIFdoZW4gdGhlIGxlYXJuIGxpbWl0IGhhcyBiZWVuIHJlYWNoZWQgYW55IGZyYW1lIAoqICAgICAgICB0aGF0IGluZ3Jlc3NlcyB0aGlzIHBvcnQgd2l0aCBhIHNvdXJjZSBNQUMgYWRkcmVzcyBub3QgYWxyZWFkeSBpbiB0aGUgCiogICAgICAgIGFkZHJlc3MgZGF0YWJhc2UgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwb3J0IHdpbGwgYmUgZGlzY2FyZGVkLiAKKiAgICAgICAgTm9ybWFsIGF1dG8tbGVhcm5pbmcgd2lsbCByZXN1bWUgb24gdGhlIHBvcnQgYXMgc29vbiBhcyB0aGUgbnVtYmVyIG9mIAoqICAgICAgICBhY3RpdmUgdW5pY2FzdCBNQUMgYWRkcmVzc2VzIGFzc29jaWF0ZWQgdG8gdGhpcyBwb3J0IGlzIGxlc3MgdGhhbiB0aGUgCiogICAgICAgIGxlYXJuIGxpbWl0LgoqICAgICAgICBDUFUgZGlyZWN0ZWQgQVRVIExvYWQsIFB1cmdlLCBvciBNb3ZlIHdpbGwgbm90IGhhdmUgYW55IGVmZmVjdCBvbiB0aGUgCiogICAgICAgIGxlYXJuIGxpbWl0LgoqICAgICAgICBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgd2hlbiB0aGUgbGltaXQgaXMgemVyby4KKiAgICAgICAgVGhlIGZvbGxvd2luZyBjYXJlIGlzIG5lZWRlZCB3aGVuIGVuYWJsaW5nIHRoaXMgZmVhdHVyZToKKiAgICAgICAgICAgIDEpIGRzYWJsZSBsZWFybmluZyBvbiB0aGUgcG9ydHMKKiAgICAgICAgICAgIDIpIGZsdXNoIGFsbCBub24tc3RhdGljIGFkZHJlc3NlcyBpbiB0aGUgQVRVCiogICAgICAgICAgICAzKSBkZWZpbmUgdGhlIGRlc2lyZWQgbGltaXQgZm9yIHRoZSBwb3J0cwoqICAgICAgICAgICAgNCkgcmUtZW5hYmxlIGxlYXJpbmcgb24gdGhlIHBvcnRzCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgIC0gbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoqIE9VVFBVVFM6CiogICAgICAgIGxpbWl0IC0gYXV0byBsZWFybmluZyBsaW1pdCAoIDAgfiAyNTUgKQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGxpbWl0ID4gMHhGRgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiR2V0UG9ydEF0dUxlYXJuTGltaXQKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgIHBvcnQsCiAgICBPVVQgR1RfVTMyICAgICAgICpsaW1pdAopOwoKLyogZ3RQQ1NDdHJsLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc0dldFJHTUlJVGltaW5nRGVsYXkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBSR01JSSByZWNlaXZlL3RyYW5zbWl0IFRpbWluZyBDb250cm9sLiBUaGlzIGFwaSBhZGRzIGRlbGF5IHRvIFJYQ0xLIGZvcgoqICAgICAgICBJTkQgaW5wdXRzIGFuZCBHVFhDTEsgZm9yIE9VVEQgb3V0cHV0cyB3aGVuIHBvcnQgaXMgaW4gUkdNSUkgbW9kZS4KKiAgICAgICAgQ2hhbmdlIHRvIHRoaXMgYml0IGFyZSBkaXNydXB0aXZlIHRvIG5vcm1hbCBvcGVyYXRpb24uIEhlbmNlIGFueSBjaGFuZ2VzCiogICAgICAgIHRvIHRoaXMgcmVnaXN0ZXIgbXVzdCBiZSBkb25lIG9ubHkgd2hpbGUgdGhlIHBvcnQncyBsaW5rIGlzIGRvd24uCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIHJ4bW9kZSAtIEdUX0ZBTFNFIGZvciBkZWZhdWx0IHNldHVwLCBHVF9UUlVFIGZvciBhZGRpbmcgZGVsYXkgdG8gcnhjbGsKKiAgICAgICAgdHhtb2RlIC0gR1RfRkFMU0UgZm9yIGRlZmF1bHQgc2V0dXAsIEdUX1RSVUUgZm9yIGFkZGluZyBkZWxheSB0byB0eGNsawoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzR2V0UkdNSUlUaW1pbmdEZWxheQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICpyeG1vZGUsCiAgICBPVVQgR1RfQk9PTCAgICAgICp0eG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc1NldFJHTUlJVGltaW5nRGVsYXkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBSR01JSSByZWNlaXZlL3RyYW5zbWl0IFRpbWluZyBDb250cm9sLiBUaGlzIGFwaSBhZGRzIGRlbGF5IHRvIFJYQ0xLIGZvcgoqICAgICAgICBJTkQgaW5wdXRzIGFuZCBHVFhDTEsgZm9yIE9VVEQgb3V0cHV0cyB3aGVuIHBvcnQgaXMgaW4gUkdNSUkgbW9kZS4KKiAgICAgICAgQ2hhbmdlIHRvIHRoaXMgYml0IGFyZSBkaXNydXB0aXZlIHRvIG5vcm1hbCBvcGVyYXRpb24uIEhlbmNlIGFueSBjaGFuZ2VzCiogICAgICAgIHRvIHRoaXMgcmVnaXN0ZXIgbXVzdCBiZSBkb25lIG9ubHkgd2hpbGUgdGhlIHBvcnQncyBsaW5rIGlzIGRvd24uCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgcnhtb2RlIC0gR1RfRkFMU0UgZm9yIGRlZmF1bHQgc2V0dXAsIEdUX1RSVUUgZm9yIGFkZGluZyBkZWxheSB0byByeGNsawoqICAgICAgICB0eG1vZGUgLSBHVF9GQUxTRSBmb3IgZGVmYXVsdCBzZXR1cCwgR1RfVFJVRSBmb3IgYWRkaW5nIGRlbGF5IHRvIHR4Y2xrCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NTZXRSR01JSVRpbWluZ0RlbGF5CigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOICBHVF9CT09MICAgICAgcnhtb2RlLAogICAgSU4gIEdUX0JPT0wgICAgICB0eG1vZGUKKTsKCgovKiBndFBvcnRMZWQuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0TEVECioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyBBUEkgYWxsb3dzIHRvIGNvbmZpZ3VyZSA0IExFRCBzZWN0aW9ucywgUHVsc2Ugc3RyZXRjaCwgQmxpbmsgcmF0ZSwKKiAgICAgICAgYW5kIHNwZWNpYWwgY29udHJvbHMuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgICAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgICBjZmcgICAgIC0gR1RfTEVEX0NGRyB2YWx1ZQoqICAgICAgICB2YWx1ZSAgICAgLSB2YWx1ZSB0byBiZSBjb25maWd1cmVkCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRMRUQKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgSU4gIEdUX0xFRF9DRkcgICAgY2ZnLAogICAgSU4gIEdUX1UzMiAgICAgICAgdmFsdWUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRMRUQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIEFQSSBhbGxvd3MgdG8gcmV0cmlldmUgNCBMRUQgc2VjdGlvbnMsIFB1bHNlIHN0cmV0Y2gsIEJsaW5rIHJhdGUsCiogICAgICAgIGFuZCBzcGVjaWFsIGNvbnRyb2xzLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0ICAgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICAgY2ZnICAgICAtIEdUX0xFRF9DRkcgdmFsdWUKKgoqIE9VVFBVVFM6CiogICAgICAgIHZhbHVlICAgICAtIGNvbmZpZ3VyZWQgdmFsdWUKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0TEVECigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgcG9ydCwKICAgIElOICBHVF9MRURfQ0ZHICAgIGNmZywKICAgIE9VVCBHVF9VMzIgICAgICAgICp2YWx1ZQopOwoKCgoKCi8qIGd0UG9ydFN0YXR1cy5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRRU2l6ZVBlclFQcmkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBlZ3Jlc3MgcXVldWUgc2l6ZSBmb3IgcG9ydCdzIGVhY2ggUVByaSAoMCB+IDMpLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CiogICAgICAgIGNvdW50cyAtIGVncmVzcyBxdWV1ZSBzaXplIHBlciBRUHJpIChzaG91bGQgYmUgNCAqIDE2Ynl0ZXMpCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UVNpemVQZXJRUHJpCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX1UxNiAgICAgICAgKmNvdW50cwopOwoKCi8qIGd0U3lzQ3RybC5jICovCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0QVJQd29CQwoqCiogREVTQ1JJUFRJT046CiogICAgICAgQVJQIGRldGVjdGlvbiB3aXRob3V0IEJyb2FkY2FzdCBjaGVja2luZy4gV2hlbiBlbmFibGVkIHRoZSBzd2l0Y2ggY29yZQoqICAgICAgIGRvZXMgbm90IGNoZWNrIGZvciBhIEJ0b2FkY2FzdCBNQUMgYWRkcmVzcyBhcyBwYXJ0IG9mIHRoZSBBUlAgZnJhbWUKKiAgICAgICBkZXRlY3Rpb24uIEl0IG9ubHkgY2hlY2tlcyB0aGUgRXRoZXIgVHlwZSAoMHgwODA2KS4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgaWYgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0QVJQd29CQwooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX0JPT0wgICAgICAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0QVJQd29CQwoqCiogREVTQ1JJUFRJT046CiogICAgICAgQVJQIGRldGVjdGlvbiB3aXRob3V0IEJyb2FkY2FzdCBjaGVja2luZy4gV2hlbiBlbmFibGVkIHRoZSBzd2l0Y2ggY29yZQoqICAgICAgIGRvZXMgbm90IGNoZWNrIGZvciBhIEJ0b2FkY2FzdCBNQUMgYWRkcmVzcyBhcyBwYXJ0IG9mIHRoZSBBUlAgZnJhbWUKKiAgICAgICBkZXRlY3Rpb24uIEl0IG9ubHkgY2hlY2tlcyB0aGUgRXRoZXIgVHlwZSAoMHgwODA2KS4KKgoqIElOUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgdG8gZW5hYmxlLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0QVJQd29CQwooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfQk9PTCAgICAgZW4KKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRDTEsxMjVFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgIENsb2NrIDEyNU1IeiBFbmFibGUuCiogICAgICAgIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIHRoZSBDTEsxMjUgcGluIGhhcyBhIGZyZWUgcnVubmluZyAxMjUgTUh6CiogICAgICAgIGNsb2NrIG91dHB1dC4KKiAgICAgICAgV2hlbiBpdCdzIGRpc2FibGVkLCB0aGUgQ0xLMTI1IHBpbiB3aWxsIGJlIGluIHRyaS1zdGF0ZS4KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGVuIC0gR1RfVFJVRSBpZiAxMjVNSHogY2xvY2sgaXMgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0Q0xLMTI1RW4KKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgT1VUIEdUX0JPT0wgICAgICAqZW4KKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRDTEsxMjVFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgIENsb2NrIDEyNU1IeiBFbmFibGUuCiogICAgICAgIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIHRoZSBDTEsxMjUgcGluIGhhcyBhIGZyZWUgcnVubmluZyAxMjUgTUh6CiogICAgICAgIGNsb2NrIG91dHB1dC4KKiAgICAgICAgV2hlbiBpdCdzIGRpc2FibGVkLCB0aGUgQ0xLMTI1IHBpbiB3aWxsIGJlIGluIHRyaS1zdGF0ZS4KKgoqIElOUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFIHRvIGVuYWJsZSAxMjUgTUh6IGNsb2NrLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Q0xLMTI1RW4KKAogICAgSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9CT09MICAgICAgICBlbgopOwoKCi8qIGd0UHJpVGFibGUuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0RlByaU92ZXJyaWRlVGFibGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICAgRnJhbWUgUHJpb3JpdHkgT3ZlcnJpZGUuCiogICAgICAgIFdoZW4gYSBmcmFtZSBlbnRlcnMgYSBwb3J0LCBpdHMgdHlwZSBpcyBkZXRlcm1pbmVkIGFuZCB0aGUgdHlwZSBpcyB1c2VkIAoqICAgICAgICB0byBhY2Nlc3MgdGhlIEZyYW1lIFByaW9yaXR5IFRhYmxlLiBJZiB0aGUgdHlwZSdzIGZQcmlFbiAoaW4gR1RfRlBSSV9UQkxfRU5UUlkKKiAgICAgICAgc3RydWN0dXJlKSBpcyBlbmFibGVkLCB0aGVuIHRoZSBmcmFtZSdzIEZyYW1lIFByaW9yaXR5IHdpbGwgYmUgb3ZlcnJpZGRlbgoqICAgICAgICB3aXRoIHRoZSB2YWx1ZSB3cml0dGVuIGluIGZQcmlvcml0eSAoaW4gR1RfRlBSSV9UQkxfRU5UUlkgc3RydWN0dXJlKS4KKiAgICAgICAgRnJhbWUgVHlwZXMgc3VwcG9ydGVkIGFyZToKKiAgICAgICAgICAgIEZUWVBFX0RTQV9UT19DUFVfQlBEVSAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBtdWx0aWNhc3QgRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgwIChCUERVL01HTVQpLgoqICAgICAgICAgICAgICAgIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9EU0FfVE9fQ1BVX0YyUiAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDEgKEZyYW1lIHRvIFJlZ2lzdGVyCiogICAgICAgICAgICAgICAgUmVwbHkpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqICAgICAgICAgICAgRlRZUEVfRFNBX1RPX0NQVV9JR01QIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MiAoSUdNUC9NTEQgVHJhcCkKKiAgICAgICAgICAgICAgICBhbmQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBJR01QIG9yIE1MRCB0cmFwcGVkCiogICAgICAgICAgICBGVFlQRV9EU0FfVE9fQ1BVX1RSQVAgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgzIChQb2xpY3kgVHJhcCkgYW5kCiogICAgICAgICAgICAgICAgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBQb2xpY3kgVHJhcHBlZAoqICAgICAgICAgICAgRlRZUEVfRFNBX1RPX0NQVV9BUlAgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg0IChBUlAgTWlycm9yKSBhbmQKKiAgICAgICAgICAgICAgICBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIEFSUCBNaXJyb3JlZCAoc2VlIGdwcnRTZXRBUlB0b0NQVSBBUEkpLgoqICAgICAgICAgICAgRlRZUEVfRFNBX1RPX0NQVV9NSVJST1IgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg1IChQb2xpY3kgTWlycm9yKSBhbmQKKiAgICAgICAgICAgICAgICBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIFBvbGljeSBNaXJyb3JlZCAoc2VlIGdwcnRTZXRQb2xpY3kgQVBJKS4KKiAgICAgICAgICAgIEZUWVBFX0RTQV9UT19DUFVfUkVTRVJWRUQgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg2IChSZXNlcnZlZCkuIE5vdAoqICAgICAgICAgICAgICAgIHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX0RTQV9UT19DUFVfVUNBU1RfTUdNVCAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiB1bmljYXN0IERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MCAodW5pY2FzdAoqICAgICAgICAgICAgICAgIE1HTVQpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqICAgICAgICAgICAgRlRZUEVfRFNBX0ZST01fQ1BVIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBGcm9tX0NQVSBmcmFtZXMuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZQoqICAgICAgICAgICAgRlRZUEVfRFNBX0NST1NTX0NISVBfRkMgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIENyb3NzIENoaXAgRmxvdyBDb250cm9sIGZyYW1lcyAoVG9fU25pZmZlciBGbG93CiogICAgICAgICAgICAgICAgQ29udHJvbCkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9EU0FfQ1JPU1NfQ0hJUF9FR1JFU1NfTU9OIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEVncmVzcyBNb25pdG9yIGZyYW1lcyAoVG9fU25pZmZlciBUeCkuCiogICAgICAgICAgICAgICAgTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX0RTQV9DUk9TU19DSElQX0lOR1JFU1NfTU9OIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEluZ3Jlc3MgTW9uaXRvciBmcmFtZXMgKFRvX1NuaWZmZXIgUngpLgoqICAgICAgICAgICAgICAgIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9QT1JUX0VUWVBFX01BVENIIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIG5vcm1hbCBuZXR3b3JrIHBvcnRzIChzZWUgZ3BydFNldEZyYW1lTW9kZSBBUEkpCiogICAgICAgICAgICAgICAgb24gZnJhbWVzIHdob3NlIEV0aGVydHlwZSBtYXRjaGVzIHRoZSBwb3J0J3MgUG9ydEVUeXBlIHJlZ2lzdGVyLgoqICAgICAgICAgICAgICAgIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9CQ0FTVF9OT05fRFNBX0NPTlRST0wgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gTm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGNvbnRhaW4gYSBCcm9hZGNhc3QKKiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiBhZGRyZXNzLiBOb3QgdXNlZCBvbiBEU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9QUFBvRV9OT05fRFNBX0NPTlRST0wgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gTm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGNvbnRhaW4gYW4gRXRoZXIgVHlwZSAweDg4NjMKKiAgICAgICAgICAgICAgICAoaS5lLiwgUFBQb0UgZnJhbWVzKS4gTm90IHVzZWQgb24gRFNBIENvbnRyb2wgZnJhbWVzLgoqICAgICAgICAgICAgRlRZUEVfSVBfTk9OX0RTQV9DT05UUk9MIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIE5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBjb250YWluIGFuIElQdjQgb3IgSVB2NiBFdGhlcgoqICAgICAgICAgICAgICAgIFR5cGUuIE5vdCB1c2VkIG9uIERTQSBDb250cm9sIGZyYW1lcy4KKgoqIElOUFVUUzoKKiAgICAgICBmVHlwZSAtIGZyYW1lIHR5cGUgKEdUX1BSSV9PVkVSUklERV9GVFlQRSkKKiAgICAgICBlbnRyeSAtIEZyYW1lIFByaW9yaXR5IE92ZXJyaWRlIFRhYmxlIGVudHJ5IChHVF9GUFJJX1RCTF9FTlRSWSkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNICAgICAtIG9uIHVua25vd24gZnJhbWUgdHlwZQoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRGUHJpT3ZlcnJpZGVUYWJsZQooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX1BSSV9PVkVSUklERV9GVFlQRSAgICBmVHlwZSwKICAgIElOICBHVF9GUFJJX1RCTF9FTlRSWSAgICAqZW50cnkKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRGUHJpT3ZlcnJpZGVUYWJsZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgICBGcmFtZSBQcmlvcml0eSBPdmVycmlkZS4KKiAgICAgICAgV2hlbiBhIGZyYW1lIGVudGVycyBhIHBvcnQsIGl0cyB0eXBlIGlzIGRldGVybWluZWQgYW5kIHRoZSB0eXBlIGlzIHVzZWQgCiogICAgICAgIHRvIGFjY2VzcyB0aGUgRnJhbWUgUHJpb3JpdHkgVGFibGUuIElmIHRoZSB0eXBlJ3MgZlByaUVuIChpbiBHVF9GUFJJX1RCTF9FTlRSWQoqICAgICAgICBzdHJ1Y3R1cmUpIGlzIGVuYWJsZWQsIHRoZW4gdGhlIGZyYW1lJ3MgRnJhbWUgUHJpb3JpdHkgd2lsbCBiZSBvdmVycmlkZGVuCiogICAgICAgIHdpdGggdGhlIHZhbHVlIHdyaXR0ZW4gaW4gZlByaW9yaXR5IChpbiBHVF9GUFJJX1RCTF9FTlRSWSBzdHJ1Y3R1cmUpLgoqICAgICAgICBGcmFtZSBUeXBlcyBzdXBwb3J0ZWQgYXJlOgoqICAgICAgICAgICAgRlRZUEVfRFNBX1RPX0NQVV9CUERVIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIG11bHRpY2FzdCBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDAgKEJQRFUvTUdNVCkuCiogICAgICAgICAgICAgICAgTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX0RTQV9UT19DUFVfRjJSIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MSAoRnJhbWUgdG8gUmVnaXN0ZXIKKiAgICAgICAgICAgICAgICBSZXBseSkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9EU0FfVE9fQ1BVX0lHTVAgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgyIChJR01QL01MRCBUcmFwKQoqICAgICAgICAgICAgICAgIGFuZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIElHTVAgb3IgTUxEIHRyYXBwZWQKKiAgICAgICAgICAgIEZUWVBFX0RTQV9UT19DUFVfVFJBUCAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDMgKFBvbGljeSBUcmFwKSBhbmQKKiAgICAgICAgICAgICAgICBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIFBvbGljeSBUcmFwcGVkCiogICAgICAgICAgICBGVFlQRV9EU0FfVE9fQ1BVX0FSUCAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDQgKEFSUCBNaXJyb3IpIGFuZAoqICAgICAgICAgICAgICAgIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgQVJQIE1pcnJvcmVkIChzZWUgZ3BydFNldEFSUHRvQ1BVIEFQSSkuCiogICAgICAgICAgICBGVFlQRV9EU0FfVE9fQ1BVX01JUlJPUiAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDUgKFBvbGljeSBNaXJyb3IpIGFuZAoqICAgICAgICAgICAgICAgIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgUG9saWN5IE1pcnJvcmVkIChzZWUgZ3BydFNldFBvbGljeSBBUEkpLgoqICAgICAgICAgICAgRlRZUEVfRFNBX1RPX0NQVV9SRVNFUlZFRCAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDYgKFJlc2VydmVkKS4gTm90CiogICAgICAgICAgICAgICAgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqICAgICAgICAgICAgRlRZUEVfRFNBX1RPX0NQVV9VQ0FTVF9NR01UIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIHVuaWNhc3QgRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgwICh1bmljYXN0CiogICAgICAgICAgICAgICAgTUdNVCkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9EU0FfRlJPTV9DUFUgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIEZyb21fQ1BVIGZyYW1lcy4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lCiogICAgICAgICAgICBGVFlQRV9EU0FfQ1JPU1NfQ0hJUF9GQyAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgQ3Jvc3MgQ2hpcCBGbG93IENvbnRyb2wgZnJhbWVzIChUb19TbmlmZmVyIEZsb3cKKiAgICAgICAgICAgICAgICBDb250cm9sKS4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX0RTQV9DUk9TU19DSElQX0VHUkVTU19NT04gLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIENyb3NzIENoaXAgRWdyZXNzIE1vbml0b3IgZnJhbWVzIChUb19TbmlmZmVyIFR4KS4KKiAgICAgICAgICAgICAgICBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqICAgICAgICAgICAgRlRZUEVfRFNBX0NST1NTX0NISVBfSU5HUkVTU19NT04gLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIENyb3NzIENoaXAgSW5ncmVzcyBNb25pdG9yIGZyYW1lcyAoVG9fU25pZmZlciBSeCkuCiogICAgICAgICAgICAgICAgTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX1BPUlRfRVRZUEVfTUFUQ0ggLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gbm9ybWFsIG5ldHdvcmsgcG9ydHMgKHNlZSBncHJ0U2V0RnJhbWVNb2RlIEFQSSkKKiAgICAgICAgICAgICAgICBvbiBmcmFtZXMgd2hvc2UgRXRoZXJ0eXBlIG1hdGNoZXMgdGhlIHBvcnQncyBQb3J0RVR5cGUgcmVnaXN0ZXIuCiogICAgICAgICAgICAgICAgTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX0JDQVNUX05PTl9EU0FfQ09OVFJPTCAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBOb24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgY29udGFpbiBhIEJyb2FkY2FzdAoqICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uIGFkZHJlc3MuIE5vdCB1c2VkIG9uIERTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX1BQUG9FX05PTl9EU0FfQ09OVFJPTCAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBOb24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgY29udGFpbiBhbiBFdGhlciBUeXBlIDB4ODg2MwoqICAgICAgICAgICAgICAgIChpLmUuLCBQUFBvRSBmcmFtZXMpLiBOb3QgdXNlZCBvbiBEU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9JUF9OT05fRFNBX0NPTlRST0wgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gTm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGNvbnRhaW4gYW4gSVB2NCBvciBJUHY2IEV0aGVyCiogICAgICAgICAgICAgICAgVHlwZS4gTm90IHVzZWQgb24gRFNBIENvbnRyb2wgZnJhbWVzLgoqCiogSU5QVVRTOgoqICAgICAgIGZUeXBlIC0gZnJhbWUgdHlwZSAoR1RfUFJJX09WRVJSSURFX0ZUWVBFKQoqCiogT1VUUFVUUzoKKiAgICAgICBlbnRyeSAtIEZyYW1lIFByaW9yaXR5IE92ZXJyaWRlIFRhYmxlIGVudHJ5IChHVF9GUFJJX1RCTF9FTlRSWSkKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgIC0gb24gdW5rbm93biBmcmFtZSB0eXBlCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0RlByaU92ZXJyaWRlVGFibGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9QUklfT1ZFUlJJREVfRlRZUEUgICAgZlR5cGUsCiAgICBPVVQgR1RfRlBSSV9UQkxfRU5UUlkgICAgKmVudHJ5Cik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UVByaUF2Yk92ZXJyaWRlVGFibGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICAgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUgZm9yIEFWQiBlbmFibGVkIHBvcnRzIG9yIEF2Yk92ZXJyaWRlIGVuYWJsZWQgcG9ydHMuCiogICAgICAgIFdoZW4gYSBmcmFtZSBlbnRlcnMgYSBBVkIgcG9ydCwgaXRzIHR5cGUgaXMgZGV0ZXJtaW5lZCBhbmQgdGhlIHR5cGUgaXMgdXNlZCAKKiAgICAgICAgdG8gYWNjZXNzIHRoZSBRdWV1ZSBQcmlvcml0eSBUYWJsZS4gSWYgdGhlIHR5cGUncyBxUHJpRW4gKGluIEdUX1FQUklfVEJMX0VOVFJZCiogICAgICAgIHN0cnVjdHVyZSkgaXMgZW5hYmxlZCwgdGhlbiB0aGUgZnJhbWUncyBRdWV1ZSBQcmlvcml0eSB3aWxsIGJlIG92ZXJyaWRkZW4KKiAgICAgICAgd2l0aCB0aGUgdmFsdWUgd3JpdHRlbiBpbiBxUHJpb3JpdHkgKGluIEdUX1FQUklfVEJMX0VOVFJZIHN0cnVjdHVyZSkuCiogICAgICAgIEZyYW1lIFR5cGVzIHN1cHBvcnRlZCBhcmU6CiogICAgICAgICAgICBGVFlQRV9EU0FfVE9fQ1BVX0JQRFUgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gbXVsdGljYXN0IERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MCAoQlBEVS9NR01UKS4KKiAgICAgICAgICAgICAgICBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqICAgICAgICAgICAgRlRZUEVfRFNBX1RPX0NQVV9GMlIgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgxIChGcmFtZSB0byBSZWdpc3RlcgoqICAgICAgICAgICAgICAgIFJlcGx5KS4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX0RTQV9UT19DUFVfSUdNUCAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDIgKElHTVAvTUxEIFRyYXApCiogICAgICAgICAgICAgICAgYW5kIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgSUdNUCBvciBNTEQgdHJhcHBlZAoqICAgICAgICAgICAgRlRZUEVfRFNBX1RPX0NQVV9UUkFQIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MyAoUG9saWN5IFRyYXApIGFuZAoqICAgICAgICAgICAgICAgIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgUG9saWN5IFRyYXBwZWQKKiAgICAgICAgICAgIEZUWVBFX0RTQV9UT19DUFVfQVJQIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4NCAoQVJQIE1pcnJvcikgYW5kCiogICAgICAgICAgICAgICAgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBBUlAgTWlycm9yZWQgKHNlZSBncHJ0U2V0QVJQdG9DUFUgQVBJKS4KKiAgICAgICAgICAgIEZUWVBFX0RTQV9UT19DUFVfTUlSUk9SIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4NSAoUG9saWN5IE1pcnJvcikgYW5kCiogICAgICAgICAgICAgICAgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBQb2xpY3kgTWlycm9yZWQgKHNlZSBncHJ0U2V0UG9saWN5IEFQSSkuCiogICAgICAgICAgICBGVFlQRV9EU0FfVE9fQ1BVX1JFU0VSVkVEIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4NiAoUmVzZXJ2ZWQpLiBOb3QKKiAgICAgICAgICAgICAgICB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9EU0FfVE9fQ1BVX1VDQVNUX01HTVQgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gdW5pY2FzdCBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDAgKHVuaWNhc3QKKiAgICAgICAgICAgICAgICBNR01UKS4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX0RTQV9GUk9NX0NQVSAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgRnJvbV9DUFUgZnJhbWVzLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWUKKiAgICAgICAgICAgIEZUWVBFX0RTQV9DUk9TU19DSElQX0ZDIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEZsb3cgQ29udHJvbCBmcmFtZXMgKFRvX1NuaWZmZXIgRmxvdwoqICAgICAgICAgICAgICAgIENvbnRyb2wpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqICAgICAgICAgICAgRlRZUEVfRFNBX0NST1NTX0NISVBfRUdSRVNTX01PTiAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgQ3Jvc3MgQ2hpcCBFZ3Jlc3MgTW9uaXRvciBmcmFtZXMgKFRvX1NuaWZmZXIgVHgpLgoqICAgICAgICAgICAgICAgIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9EU0FfQ1JPU1NfQ0hJUF9JTkdSRVNTX01PTiAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgQ3Jvc3MgQ2hpcCBJbmdyZXNzIE1vbml0b3IgZnJhbWVzIChUb19TbmlmZmVyIFJ4KS4KKiAgICAgICAgICAgICAgICBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqICAgICAgICAgICAgRlRZUEVfUE9SVF9FVFlQRV9NQVRDSCAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBub3JtYWwgbmV0d29yayBwb3J0cyAoc2VlIGdwcnRTZXRGcmFtZU1vZGUgQVBJKQoqICAgICAgICAgICAgICAgIG9uIGZyYW1lcyB3aG9zZSBFdGhlcnR5cGUgbWF0Y2hlcyB0aGUgcG9ydCdzIFBvcnRFVHlwZSByZWdpc3Rlci4KKiAgICAgICAgICAgICAgICBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqICAgICAgICAgICAgRlRZUEVfQkNBU1RfTk9OX0RTQV9DT05UUk9MIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIE5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBjb250YWluIGEgQnJvYWRjYXN0CiogICAgICAgICAgICAgICAgZGVzdGluYXRpb24gYWRkcmVzcy4gTm90IHVzZWQgb24gRFNBIENvbnRyb2wgZnJhbWVzLgoqICAgICAgICAgICAgRlRZUEVfUFBQb0VfTk9OX0RTQV9DT05UUk9MIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIE5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBjb250YWluIGFuIEV0aGVyIFR5cGUgMHg4ODYzCiogICAgICAgICAgICAgICAgKGkuZS4sIFBQUG9FIGZyYW1lcykuIE5vdCB1c2VkIG9uIERTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX0lQX05PTl9EU0FfQ09OVFJPTCAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBOb24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgY29udGFpbiBhbiBJUHY0IG9yIElQdjYgRXRoZXIKKiAgICAgICAgICAgICAgICBUeXBlLiBOb3QgdXNlZCBvbiBEU0EgQ29udHJvbCBmcmFtZXMuCioKKiBJTlBVVFM6CiogICAgICAgZlR5cGUgLSBmcmFtZSB0eXBlIChHVF9QUklfT1ZFUlJJREVfRlRZUEUpCiogICAgICAgZW50cnkgLSBRIFByaW9yaXR5IE92ZXJyaWRlIFRhYmxlIGVudHJ5IChHVF9RUFJJX1RCTF9FTlRSWSkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gICAgIC0gb24gdW5rbm93biBmcmFtZSB0eXBlCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFFQcmlBdmJPdmVycmlkZVRhYmxlCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfUFJJX09WRVJSSURFX0ZUWVBFICAgIGZUeXBlLAogICAgSU4gIEdUX1FQUklfVEJMX0VOVFJZICAgICplbnRyeQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFFQcmlBdmJPdmVycmlkZVRhYmxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgIFF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlIGZvciBBVkIgZW5hYmxlZCBwb3J0cyBvciBBdmJPdmVycmlkZSBlbmFibGVkIHBvcnRzLgoqICAgICAgICBXaGVuIGEgZnJhbWUgZW50ZXJzIGEgQVZCIHBvcnQsIGl0cyB0eXBlIGlzIGRldGVybWluZWQgYW5kIHRoZSB0eXBlIGlzIHVzZWQgCiogICAgICAgIHRvIGFjY2VzcyB0aGUgUXVldWUgUHJpb3JpdHkgVGFibGUuIElmIHRoZSB0eXBlJ3MgcVByaUVuIChpbiBHVF9RUFJJX1RCTF9FTlRSWQoqICAgICAgICBzdHJ1Y3R1cmUpIGlzIGVuYWJsZWQsIHRoZW4gdGhlIGZyYW1lJ3MgUXVldWUgUHJpb3JpdHkgd2lsbCBiZSBvdmVycmlkZGVuCiogICAgICAgIHdpdGggdGhlIHZhbHVlIHdyaXR0ZW4gaW4gcVByaW9yaXR5IChpbiBHVF9RUFJJX1RCTF9FTlRSWSBzdHJ1Y3R1cmUpLgoqICAgICAgICBGcmFtZSBUeXBlcyBzdXBwb3J0ZWQgYXJlOgoqICAgICAgICAgICAgRlRZUEVfRFNBX1RPX0NQVV9CUERVIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIG11bHRpY2FzdCBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDAgKEJQRFUvTUdNVCkuCiogICAgICAgICAgICAgICAgTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX0RTQV9UT19DUFVfRjJSIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MSAoRnJhbWUgdG8gUmVnaXN0ZXIKKiAgICAgICAgICAgICAgICBSZXBseSkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9EU0FfVE9fQ1BVX0lHTVAgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgyIChJR01QL01MRCBUcmFwKQoqICAgICAgICAgICAgICAgIGFuZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIElHTVAgb3IgTUxEIHRyYXBwZWQKKiAgICAgICAgICAgIEZUWVBFX0RTQV9UT19DUFVfVFJBUCAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDMgKFBvbGljeSBUcmFwKSBhbmQKKiAgICAgICAgICAgICAgICBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIFBvbGljeSBUcmFwcGVkCiogICAgICAgICAgICBGVFlQRV9EU0FfVE9fQ1BVX0FSUCAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDQgKEFSUCBNaXJyb3IpIGFuZAoqICAgICAgICAgICAgICAgIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgQVJQIE1pcnJvcmVkIChzZWUgZ3BydFNldEFSUHRvQ1BVIEFQSSkuCiogICAgICAgICAgICBGVFlQRV9EU0FfVE9fQ1BVX01JUlJPUiAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDUgKFBvbGljeSBNaXJyb3IpIGFuZAoqICAgICAgICAgICAgICAgIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgUG9saWN5IE1pcnJvcmVkIChzZWUgZ3BydFNldFBvbGljeSBBUEkpLgoqICAgICAgICAgICAgRlRZUEVfRFNBX1RPX0NQVV9SRVNFUlZFRCAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDYgKFJlc2VydmVkKS4gTm90CiogICAgICAgICAgICAgICAgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqICAgICAgICAgICAgRlRZUEVfRFNBX1RPX0NQVV9VQ0FTVF9NR01UIC0KKiAgICAgICAgICAgICAgICBVc2VkIG9uIHVuaWNhc3QgRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgwICh1bmljYXN0CiogICAgICAgICAgICAgICAgTUdNVCkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9EU0FfRlJPTV9DUFUgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIEZyb21fQ1BVIGZyYW1lcy4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lCiogICAgICAgICAgICBGVFlQRV9EU0FfQ1JPU1NfQ0hJUF9GQyAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBEU0EgQ3Jvc3MgQ2hpcCBGbG93IENvbnRyb2wgZnJhbWVzIChUb19TbmlmZmVyIEZsb3cKKiAgICAgICAgICAgICAgICBDb250cm9sKS4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX0RTQV9DUk9TU19DSElQX0VHUkVTU19NT04gLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIENyb3NzIENoaXAgRWdyZXNzIE1vbml0b3IgZnJhbWVzIChUb19TbmlmZmVyIFR4KS4KKiAgICAgICAgICAgICAgICBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqICAgICAgICAgICAgRlRZUEVfRFNBX0NST1NTX0NISVBfSU5HUkVTU19NT04gLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gRFNBIENyb3NzIENoaXAgSW5ncmVzcyBNb25pdG9yIGZyYW1lcyAoVG9fU25pZmZlciBSeCkuCiogICAgICAgICAgICAgICAgTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX1BPUlRfRVRZUEVfTUFUQ0ggLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gbm9ybWFsIG5ldHdvcmsgcG9ydHMgKHNlZSBncHJ0U2V0RnJhbWVNb2RlIEFQSSkKKiAgICAgICAgICAgICAgICBvbiBmcmFtZXMgd2hvc2UgRXRoZXJ0eXBlIG1hdGNoZXMgdGhlIHBvcnQncyBQb3J0RVR5cGUgcmVnaXN0ZXIuCiogICAgICAgICAgICAgICAgTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX0JDQVNUX05PTl9EU0FfQ09OVFJPTCAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBOb24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgY29udGFpbiBhIEJyb2FkY2FzdAoqICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uIGFkZHJlc3MuIE5vdCB1c2VkIG9uIERTQSBDb250cm9sIGZyYW1lcy4KKiAgICAgICAgICAgIEZUWVBFX1BQUG9FX05PTl9EU0FfQ09OVFJPTCAtCiogICAgICAgICAgICAgICAgVXNlZCBvbiBOb24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgY29udGFpbiBhbiBFdGhlciBUeXBlIDB4ODg2MwoqICAgICAgICAgICAgICAgIChpLmUuLCBQUFBvRSBmcmFtZXMpLiBOb3QgdXNlZCBvbiBEU0EgQ29udHJvbCBmcmFtZXMuCiogICAgICAgICAgICBGVFlQRV9JUF9OT05fRFNBX0NPTlRST0wgLQoqICAgICAgICAgICAgICAgIFVzZWQgb24gTm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGNvbnRhaW4gYW4gSVB2NCBvciBJUHY2IEV0aGVyCiogICAgICAgICAgICAgICAgVHlwZS4gTm90IHVzZWQgb24gRFNBIENvbnRyb2wgZnJhbWVzLgoqCiogSU5QVVRTOgoqICAgICAgIGZUeXBlIC0gZnJhbWUgdHlwZSAoR1RfUFJJX09WRVJSSURFX0ZUWVBFKQoqCiogT1VUUFVUUzoKKiAgICAgICBlbnRyeSAtIFEgUHJpb3JpdHkgT3ZlcnJpZGUgVGFibGUgZW50cnkgKEdUX1FQUklfVEJMX0VOVFJZKQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAgICAgLSBvbiB1bmtub3duIGZyYW1lIHR5cGUKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UVByaUF2Yk92ZXJyaWRlVGFibGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9QUklfT1ZFUlJJREVfRlRZUEUgICAgZlR5cGUsCiAgICBPVVQgR1RfUVBSSV9UQkxfRU5UUlkgICAgKmVudHJ5Cik7CgoKLyogZ3RQb3J0Q3RybC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXQyMDBCYXNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgMjAwIEJhc2UgbW9kZS4gVGhpcyBiaXQgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBwb3J0J3MgUHhfR1RYQ0xLCiogICAgICAgIGZyZXF1ZW5jeSB0byA1ME1IeiB0byBzdXBwb3J0IDIwMCBCQVNFIG1vZGUgYXMgZm9sbG93czoKKiAgICAgICAgMCA9IDI1TUh6IFB4X0dUWENMSwoqICAgICAgICAxID0gNTBNSHogUHhfR1RYQ0xLCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgLSAwIGZvciAxMDBNYnBzLCAxIGZvciAyMDBNYnBzCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIENfTW9kZSBzaG91bGQgYmUgc2V0IHRvIDB4MiBpbiBvcmRlciBmb3IgdGhpcyBBUEkgdG8gd29yawoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0MjAwQmFzZQooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBPVVQgR1RfVTMyICAgICAgKm1vZGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXQyMDBCYXNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgMjAwIEJhc2UgbW9kZS4gVGhpcyBiaXQgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBwb3J0J3MgUHhfR1RYQ0xLCiogICAgICAgIGZyZXF1ZW5jeSB0byA1ME1IeiB0byBzdXBwb3J0IDIwMCBCQVNFIG1vZGUgYXMgZm9sbG93czoKKiAgICAgICAgICAgIDAgPSAyNU1IeiBQeF9HVFhDTEsKKiAgICAgICAgICAgIDEgPSA1ME1IeiBQeF9HVFhDTEsKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBtb2RlIC0gMCBmb3IgMTAwTWJwcywgMSBmb3IgMjAwTWJwcwoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBDX01vZGUgc2hvdWxkIGJlIHNldCB0byAweDIgaW4gb3JkZXIgZm9yIHRoaXMgQVBJIHRvIHdvcmsKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldDIwMEJhc2UKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gIEdUX1UzMiAgICAgIG1vZGUKKTsKCgovKiBndFBJUkwyLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BpcmwyV3JpdGVUU01SZXNvdXJjZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSB3cml0ZXMgcmF0ZSByZXNvdXJjZSBidWNrZXQgcGFyYW1ldGVycyBpbiBUaW1lIFNsb3QgTWV0ZXJpbmcKKiAgICAgICAgbW9kZSB0byB0aGUgZ2l2ZW4gcmVzb3VyY2Ugb2YgdGhlIHBvcnQuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgICAgIC0gbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAgaXJsUmVzICAgLSBidWNrZXQgdG8gYmUgdXNlZCAoMCB+IDEpLgoqICAgICAgICBwaXJsRGF0YSAtIFBJUkwgVFNNIHJlc291cmNlIHBhcmFtZXRlcnMuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBPbmx5IFJlc291cmNlIDAgYW5kIDEgY2FuIGJlIHN1cHBvcnRlZCBmb3IgVFNNIE1vZGUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwaXJsMldyaXRlVFNNUmVzb3VyY2UKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgSU4gIEdUX1UzMiAgICAgICAgaXJsUmVzLAogICAgSU4gIEdUX1BJUkwyX1RTTV9EQVRBICAgICpwaXJsRGF0YQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BpcmwyUmVhZFRTTVJlc291cmNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHJldHJpZXZlcyBJUkwgUGFyYW1ldGVyLgoqICAgICAgICBSZXR1cm5lZCBpbmdyZXNzUmF0ZSB3b3VsZCBiZSByb3VnaCBudW1iZXIuIEluc3RlYWQsIGN1c3RvbVNldHVwIHdpbGwKKiAgICAgICAgaGF2ZSB0aGUgZXhhY3QgY29uZmlndXJlZCB2YWx1ZS4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgICBpcmxSZXMgICAtIGJ1Y2tldCB0byBiZSB1c2VkICgwIH4gMSkuCioKKiBPVVRQVVRTOgoqICAgICAgICBwaXJsRGF0YSAtIFBJUkwgcmVzb3VyY2UgcGFyYW1ldGVycy4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgT25seSBSZXNvdXJjZSAwIGFuZCAxIGNhbiBiZSBzdXBwb3J0ZWQgZm9yIFRTTSBNb2RlLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGlybDJSZWFkVFNNUmVzb3VyY2UKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgSU4gIEdUX1UzMiAgICAgICAgaXJsUmVzLAogICAgT1VUIEdUX1BJUkwyX1RTTV9EQVRBICAgICpwaXJsRGF0YQopOwoKCi8qIGd0UFRQLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RhaVNldEV2ZW50Q29uZmlnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBUQUkgRXZlbnQgQ2FwdHVyZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCioKKiBJTlBVVFM6CiogICAgICAgIGV2ZW50RGF0YSAgLSBUQUkgRXZlbnQgQ2FwdHVyZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndGFpU2V0RXZlbnRDb25maWcKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9UQUlfRVZFTlRfQ09ORklHICAgICpldmVudERhdGEKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0YWlHZXRFdmVudENvbmZpZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgVEFJIEV2ZW50IENhcHR1cmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBldmVudERhdGEgIC0gVEFJIEV2ZW50IENhcHR1cmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RhaUdldEV2ZW50Q29uZmlnCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBPVVQgR1RfVEFJX0VWRU5UX0NPTkZJRyAgICAqZXZlbnREYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0YWlHZXRFdmVudFN0YXR1cwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgVEFJIEV2ZW50IENhcHR1cmUgc3RhdHVzLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBldmVudERhdGEgIC0gVEFJIEV2ZW50IENhcHR1cmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RhaUdldEV2ZW50U3RhdHVzCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBPVVQgR1RfVEFJX0VWRU5UX1NUQVRVUyAgICAqc3RhdHVzCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0YWlHZXRFdmVudEludAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgVEFJIEV2ZW50IENhcHR1cmUgSW50ZXJydXB0IHN0YXR1cy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgaW50U3RhdHVzICAgICAtIGludGVycnVwdCBzdGF0dXMgZm9yIFRBSSBFdmVudCBjYXB0dXJlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndGFpR2V0RXZlbnRJbnQKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIE9VVCBHVF9CT09MICAgICAgICAqaW50U3RhdHVzCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0YWlTZXRDbG9ja1NlbGVjdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgc2V2ZXJhbCBjbG9jayBzZWxlY3QgaW4gVEFJLgoqCiogSU5QVVRTOgoqICAgICAgICBjbGtTZWxlY3QgIC0gVEFJIGNsb2NrIHNlbGVjdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndGFpU2V0Q2xvY2tTZWxlY3QKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9UQUlfQ0xPQ0tfU0VMRUNUICAgICpjbGtTZWxlY3QKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RhaUdldENsb2NrU2VsZWN0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBzZXZlcmFsIGNsb2NrIHNlbGVjdCBpbiBUQUkuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgY2xrU2VsZWN0ICAtIFRBSSBjbG9jayBzZWxlY3QgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RhaUdldENsb2NrU2VsZWN0CigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBPVVQgIEdUX1RBSV9DTE9DS19TRUxFQ1QgICAgKmNsa1NlbGVjdAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndGFpR2V0VHJpZ0ludAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgVEFJIFRyaWdnZXIgSW50ZXJydXB0IHN0YXR1cy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgaW50U3RhdHVzICAgICAtIGludGVycnVwdCBzdGF0dXMgZm9yIFRBSSBUcmlnZ2VyCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndGFpR2V0VHJpZ0ludAooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgT1VUIEdUX0JPT0wgICAgICAgICppbnRTdGF0dXMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RhaUNsZWFyVHJpZ0ludAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGNsZWFyIFRBSSBUcmlnZ2VyIEludGVycnVwdCBzdGF0dXMuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd0YWlDbGVhclRyaWdJbnQKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndGFpU2V0VHJpZ0NvbmZpZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgVEFJIFRyaWdnZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgICB0cmlnRW4gICAgLSBlbmFibGUvZGlzYWJsZSBUQUkgVHJpZ2dlci4KKiAgICAgICAgdHJpZ0RhdGEgIC0gVEFJIFRyaWdnZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICh2YWxpZCBvbmx5IGlmIHRyaWdFbiBpcyBHVF9UUlVFKS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd0YWlTZXRUcmlnQ29uZmlnCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfQk9PTCAgICAgdHJpZ0VuLAogICAgSU4gIEdUX1RBSV9UUklHR0VSX0NPTkZJRyAgICAqdHJpZ0RhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RhaUdldFRyaWdDb25maWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIFRBSSBUcmlnZ2VyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgdHJpZ0VuICAgIC0gZW5hYmxlL2Rpc2FibGUgVEFJIFRyaWdnZXIuCiogICAgICAgIHRyaWdEYXRhICAtIFRBSSBUcmlnZ2VyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAodmFsaWQgb25seSBpZiB0cmlnRW4gaXMgR1RfVFJVRSkuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndGFpR2V0VHJpZ0NvbmZpZwooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgT1VUIEdUX0JPT0wgICAgICp0cmlnRW4sCiAgICBPVVQgR1RfVEFJX1RSSUdHRVJfQ09ORklHICAgICp0cmlnRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndGFpR2V0VFNDbGtQZXIKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICAgVGltZSBTdGFtcGluZyBDbG9jayBQZXJpb2QgaW4gcGljbyBzZWNvbmRzLgoqICAgICAgICBUaGlzIHJvdXRpbmUgc3BlY2lmaWVzIHRoZSBjbG9jayBwZXJpb2QgZm9yIHRoZSB0aW1lIHN0YW1waW5nIGNsb2NrIHN1cHBsaWVkIAoqICAgICAgICB0byB0aGUgUFRQIGhhcmR3YXJlIGxvZ2ljLgoqICAgICAgICBUaGlzIGlzIHRoZSBjbG9jayB0aGF0IGlzIHVzZWQgYnkgdGhlIGhhcmR3YXJlIGxvZ2ljIHRvIHVwZGF0ZSB0aGUgUFRQIAoqICAgICAgICBHbG9iYWwgVGltZSBDb3VudGVyLgoqCiogSU5QVVRTOgoqICAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGNsayAgICAgICAgLSB0aW1lIHN0YW1waW5nIGNsb2NrIHBlcmlvZAoqCiogUkVUVVJOUzoKKiAgICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndGFpR2V0VFNDbGtQZXIKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIE9VVCBHVF9VMzIgICAgICAgICpjbGsKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0YWlTZXRUU0Nsa1BlcgoqCiogREVTQ1JJUFRJT046CiogICAgICAgICBUaW1lIFN0YW1waW5nIENsb2NrIFBlcmlvZCBpbiBwaWNvIHNlY29uZHMuCiogICAgICAgIFRoaXMgcm91dGluZSBzcGVjaWZpZXMgdGhlIGNsb2NrIHBlcmlvZCBmb3IgdGhlIHRpbWUgc3RhbXBpbmcgY2xvY2sgc3VwcGxpZWQgCiogICAgICAgIHRvIHRoZSBQVFAgaGFyZHdhcmUgbG9naWMuCiogICAgICAgIFRoaXMgaXMgdGhlIGNsb2NrIHRoYXQgaXMgdXNlZCBieSB0aGUgaGFyZHdhcmUgbG9naWMgdG8gdXBkYXRlIHRoZSBQVFAgCiogICAgICAgIEdsb2JhbCBUaW1lIENvdW50ZXIuCioKKiBJTlBVVFM6CiogICAgICAgIGNsayAgICAgICAgLSB0aW1lIHN0YW1waW5nIGNsb2NrIHBlcmlvZAoqCiogT1VUUFVUUzoKKiAgICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd0YWlTZXRUU0Nsa1BlcgooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX1UzMiAgICAgICAgY2xrCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0YWlTZXRNdWx0aVBUUFN5bmMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICAgVGhpcyByb3V0aW5lIHNldHMgTXVsdGlwbGUgUFRQIGRldmljZSBzeW5jIG1vZGUgYW5kIHN5bmMgdGltZSAoVHJpZ0dlbkFtdCkuCiogICAgICAgIFdoZW4gZW5hYmxlZCwgdGhlIGhhcmR3YXJlIGxvZ2ljIGRldGVjdHMgYSBsb3cgdG8gaGlnaCB0cmFuc2l0aW9uIG9uIHRoZSAKKiAgICAgICAgRXZlbnRSZXF1ZXN0KEdQSU8pIGFuZCB0cmFuc2ZlcnMgdGhlIHN5bmMgdGltZSBpbnRvIHRoZSBQVFAgR2xvYmFsIFRpbWUKKiAgICAgICAgcmVnaXN0ZXIuIFRoZSBFdmVudENhcFRpbWUgaXMgYWxzbyB1cGRhdGVkIGF0IHRoYXQgaW5zdGFudC4KKgoqIElOUFVUUzoKKiAgICAgICAgbXVsdGlFbiAgICAgICAgLSBlbmFibGUvZGlzYWJsZSBNdWx0aXBsZSBQVFAgZGV2aWNlIHN5bmMgbW9kZQoqICAgICAgICBzeW5jVGltZSAgICAtIHN5bmMgdGltZSAodmFsaWQgb25seSBpZiBtdWx0aUVuIGlzIEdUX1RSVUUpCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICAgV2hlbiBlbmFibGVkLCBndGFpU2V0VHJpZ0NvbmZpZywgZ3RhaVNldEV2ZW50Q29uZmlnLCBndGFpU2V0VGltZUluYywKKiAgICAgICAgYW5kIGd0YWlTZXRUaW1lRGVjIEFQSXMgYXJlIG5vdCBvcGVyYXRpb25hbC4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RhaVNldE11bHRpUFRQU3luYwooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX0JPT0wgICAgIG11bHRpRW4sCiAgICBJTiAgR1RfMzIgICAgICAgIHN5bmNUaW1lCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0YWlHZXRNdWx0aVBUUFN5bmMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICAgVGhpcyByb3V0aW5lIGdldHMgTXVsdGlwbGUgUFRQIGRldmljZSBzeW5jIG1vZGUgYW5kIHN5bmMgdGltZSAoVHJpZ0dlbkFtdCkuCiogICAgICAgIFdoZW4gZW5hYmxlZCwgdGhlIGhhcmR3YXJlIGxvZ2ljIGRldGVjdHMgYSBsb3cgdG8gaGlnaCB0cmFuc2l0aW9uIG9uIHRoZSAKKiAgICAgICAgRXZlbnRSZXF1ZXN0KEdQSU8pIGFuZCB0cmFuc2ZlcnMgdGhlIHN5bmMgdGltZSBpbnRvIHRoZSBQVFAgR2xvYmFsIFRpbWUKKiAgICAgICAgcmVnaXN0ZXIuIFRoZSBFdmVudENhcFRpbWUgaXMgYWxzbyB1cGRhdGVkIGF0IHRoYXQgaW5zdGFudC4KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIG11bHRpRW4gICAgICAgIC0gZW5hYmxlL2Rpc2FibGUgTXVsdGlwbGUgUFRQIGRldmljZSBzeW5jIG1vZGUKKiAgICAgICAgc3luY1RpbWUgICAgLSBzeW5jIHRpbWUgKHZhbGlkIG9ubHkgaWYgbXVsdGlFbiBpcyBHVF9UUlVFKQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICAgV2hlbiBlbmFibGVkLCBndGFpU2V0VHJpZ0NvbmZpZywgZ3RhaVNldEV2ZW50Q29uZmlnLCBndGFpU2V0VGltZUluYywKKiAgICAgICAgYW5kIGd0YWlTZXRUaW1lRGVjIEFQSXMgYXJlIG5vdCBvcGVyYXRpb25hbC4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RhaUdldE11bHRpUFRQU3luYwooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgT1VUIEdUX0JPT0wgICAgICptdWx0aUVuLAogICAgT1VUIEdUXzMyICAgICAgICAqc3luY1RpbWUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RhaUdldFRpbWVJbmNEZWMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICAgVGhpcyByb3V0aW5lIHJldHJpZXZlcyBUaW1lIGluY3JlbWVudC9kZWNyZW1lbnQgc2V0dXAuCiogICAgICAgIFRoaXMgYW1vdW50IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHVuaXRzIG9mIFBUUCBHbG9iYWwgVGltZSB0aGF0IG5lZWQgdG8gYmUgCiogICAgICAgIGluY3JlbWVudGVkIG9yIGRlY3JlbWVudGVkLiBUaGlzIGlzIHVzZWQgZm9yIGFkanVzdGluZyB0aGUgUFRQIEdsb2JhbCBUaW1lIAoqICAgICAgICBjb3VudGVyIHZhbHVlIGJ5IGEgY2VydGFpbiBhbW91bnQuCioKKiBJTlBVVFM6CiogICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgZW4gICAgICAgIC0gR1RfVFJVRSBpZiBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UKKiAgICAgICAgaW5jICAgICAgICAtIEdUX1RSVUUgaWYgaW5jcmVtZW50LCBHVF9GQUxTRSBpZiBkZWNyZW1lbnQKKiAgICAgICAgYW1vdW50ICAgIC0gaW5jcmVtZW50L2RlY3JlbWVudCBhbW91bnQKKgoqIFJFVFVSTlM6CiogICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RhaUdldFRpbWVJbmNEZWMKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIE9VVCBHVF9CT09MICAgICAgICAqZW4sCiAgICBPVVQgR1RfQk9PTCAgICAgICAgKmluYywKICAgIE9VVCBHVF9VMzIgICAgICAgICphbW91bnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RhaVNldFRpbWVJbmMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICAgVGhpcyByb3V0aW5lIGVuYWJsZXMgdGltZSBpbmNyZW1lbnQgYnkgdGhlIHNwZWNpZmVkIHRpbWUgaW5jcmVtZW50IGFtb3VudC4KKiAgICAgICAgVGhlIGFtb3VudCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB1bml0cyBvZiBQVFAgR2xvYmFsIFRpbWUgdGhhdCBuZWVkIHRvIGJlIAoqICAgICAgICBpbmNyZW1lbnRlZC4gVGhpcyBpcyB1c2VkIGZvciBhZGp1c3RpbmcgdGhlIFBUUCBHbG9iYWwgVGltZSBjb3VudGVyIHZhbHVlIGJ5CiogICAgICAgIGEgY2VydGFpbiBhbW91bnQuCiogICAgICAgIEluY3JlbWVudCBvY2N1cnMganVzdCBvbmNlLgoqCiogSU5QVVRTOgoqICAgICAgICBhbW91bnQgICAgLSB0aW1lIGluY3JlbWVudCBhbW91bnQgKDAgfiAweEZGKQoqCiogT1VUUFVUUzoKKiAgICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd0YWlTZXRUaW1lSW5jCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfVTMyICAgICAgICBhbW91bnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RhaVNldFRpbWVEZWMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICAgVGhpcyByb3V0aW5lIGVuYWJsZXMgdGltZSBkZWNyZW1lbnQgYnkgdGhlIHNwZWNpZmVkIHRpbWUgZGVjcmVtZW50IGFtb3VudC4KKiAgICAgICAgVGhlIGFtb3VudCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiB1bml0cyBvZiBQVFAgR2xvYmFsIFRpbWUgdGhhdCBuZWVkIHRvIGJlIAoqICAgICAgICBkZWNyZW1lbnRlZC4gVGhpcyBpcyB1c2VkIGZvciBhZGp1c3RpbmcgdGhlIFBUUCBHbG9iYWwgVGltZSBjb3VudGVyIHZhbHVlIGJ5CiogICAgICAgIGEgY2VydGFpbiBhbW91bnQuCiogICAgICAgIERlY3JlbWVudCBvY2N1cnMganVzdCBvbmNlLgoqCiogSU5QVVRTOgoqICAgICAgICBhbW91bnQgICAgLSB0aW1lIGRlY3JlbWVudCBhbW91bnQgKDAgfiAweDdGRikKKgoqIE9VVFBVVFM6CiogICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndGFpU2V0VGltZURlYwooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX1UzMiAgICAgICAgYW1vdW50Cik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiR2V0UHJpb3JpdHkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBQcmlvcml0eSBvdmVyd3JpdGUuCiogICAgICAgIFN1cHBvcnRlZCBwcmlvcml0eSB0eXBlIGlzIGRlZmluZWQgYXMgR1RfQVZCX1BSSV9UWVBFLgoqICAgICAgICBQcmlvcml0eSBpcyBlaXRoZXIgMyBiaXRzIG9yIDIgYml0cyBkZXBlbmRpbmcgb24gcHJpb3JpdHkgdHlwZS4KKiAgICAgICAgICAgIEdUX0FWQl9ISV9GUFJJICAgICAgICAtIHByaW9yaXR5IGlzIDAgfiA3CiogICAgICAgICAgICBHVF9BVkJfSElfUVBSSSAgICAgICAgLSBwcmlvcml0eSBpcyAwIH4gMwoqICAgICAgICAgICAgR1RfQVZCX0xPX0ZQUkkgICAgICAgIC0gcHJpb3JpdHkgaXMgMCB+IDcKKiAgICAgICAgICAgIEdUX0FWQl9MT19RUFJJICAgICAgICAtIHByaW9yaXR5IGlzIDAgfiAzCiogICAgICAgICAgICBHVF9MRUdBQ1lfSElfRlBSSSAgICAtIHByaW9yaXR5IGlzIDAgfiA3CiogICAgICAgICAgICBHVF9MRUdBQ1lfSElfUVBSSSAgICAtIHByaW9yaXR5IGlzIDAgfiAzCiogICAgICAgICAgICBHVF9MRUdBQ1lfTE9fRlBSSSAgICAtIHByaW9yaXR5IGlzIDAgfiA3CiogICAgICAgICAgICBHVF9MRUdBQ1lfTE9fUVBSSSAgICAtIHByaW9yaXR5IGlzIDAgfiAzCioKKiBJTlBVVFM6CiogICAgICAgICBwcmlUeXBlICAgIC0gR1RfQVZCX1BSSV9UWVBFCioKKiBPVVRQVVRTOgoqICAgICAgICBwcmkgICAgLSBwcmlvcml0eQoqCiogUkVUVVJOUzoKKiAgICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiR2V0UHJpb3JpdHkKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9BVkJfUFJJX1RZUEUgICAgICAgIHByaVR5cGUsCiAgICBPVVQgR1RfVTMyICAgICAgICAqcHJpCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJTZXRQcmlvcml0eQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFByaW9yaXR5IG92ZXJ3cml0ZS4KKiAgICAgICAgU3VwcG9ydGVkIHByaW9yaXR5IHR5cGUgaXMgZGVmaW5lZCBhcyBHVF9BVkJfUFJJX1RZUEUuCiogICAgICAgIFByaW9yaXR5IGlzIGVpdGhlciAzIGJpdHMgb3IgMiBiaXRzIGRlcGVuZGluZyBvbiBwcmlvcml0eSB0eXBlLgoqICAgICAgICAgICAgR1RfQVZCX0hJX0ZQUkkgICAgICAgIC0gcHJpb3JpdHkgaXMgMCB+IDcKKiAgICAgICAgICAgIEdUX0FWQl9ISV9RUFJJICAgICAgICAtIHByaW9yaXR5IGlzIDAgfiAzCiogICAgICAgICAgICBHVF9BVkJfTE9fRlBSSSAgICAgICAgLSBwcmlvcml0eSBpcyAwIH4gNwoqICAgICAgICAgICAgR1RfQVZCX0xPX1FQUkkgICAgICAgIC0gcHJpb3JpdHkgaXMgMCB+IDMKKiAgICAgICAgICAgIEdUX0xFR0FDWV9ISV9GUFJJICAgIC0gcHJpb3JpdHkgaXMgMCB+IDcKKiAgICAgICAgICAgIEdUX0xFR0FDWV9ISV9RUFJJICAgIC0gcHJpb3JpdHkgaXMgMCB+IDMKKiAgICAgICAgICAgIEdUX0xFR0FDWV9MT19GUFJJICAgIC0gcHJpb3JpdHkgaXMgMCB+IDcKKiAgICAgICAgICAgIEdUX0xFR0FDWV9MT19RUFJJICAgIC0gcHJpb3JpdHkgaXMgMCB+IDMKKgoqIElOUFVUUzoKKiAgICAgICAgIHByaVR5cGUgICAgLSBHVF9BVkJfUFJJX1RZUEUKKiAgICAgICAgcHJpICAgIC0gcHJpb3JpdHkKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJTZXRQcmlvcml0eQooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX0FWQl9QUklfVFlQRSAgICAgICAgcHJpVHlwZSwKICAgIElOICBHVF9VMzIgICAgICAgIHByaQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiR2V0QVZCSGlMaW1pdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIEFWQiBIaSBGcmFtZSBMaW1pdC4KKiAgICAgICAgV2hlbiB0aGVzZSBiaXRzIGFyZSB6ZXJvLCBub3JtYWwgZnJhbWUgcHJvY2Vzc2luZyBvY2N1cnMuIAoqICAgICAgICBXaGVuIGl0J3Mgbm9uLXplcm8sIHRoZXkgYXJlIHVzZWQgdG8gZGVmaW5lIHRoZSBtYXhpbXVtIGZyYW1lIHNpemUgYWxsb3dlZAoqICAgICAgICBmb3IgQVZCIGZyYW1lcyB0aGF0IGNhbiBiZSBwbGFjZWQgaW50byB0aGUgR1RfQVZCX0hJX1FQUkkgcXVldWUuIEZyYW1lcwoqICAgICAgICB0aGF0IGFyZSBvdmVyIHRoaXMgc2l6ZSBsaW1pdCBhcmUgZmlsdGVyZWQuIFRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzIAoqICAgICAgICBpcyBub24tQVZCIGZyYW1lcyB0aGF0IGdldCB0aGVpciBRUHJpQXZiIGFzc2lnbmVkIGJ5IHRoZSBQcmlvcml0eSBPdmVycmlkZSAKKiAgICAgICAgVGFibGUKKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGxpbWl0ICAgIC0gSGkgRnJhbWUgTGltaXQKKgoqIFJFVFVSTlM6CiogICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YkdldEFWQkhpTGltaXQKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIE9VVCBHVF9VMzIgICAgICAgICpsaW1pdAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiU2V0QVZCSGlMaW1pdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIEFWQiBIaSBGcmFtZSBMaW1pdC4KKiAgICAgICAgV2hlbiB0aGVzZSBiaXRzIGFyZSB6ZXJvLCBub3JtYWwgZnJhbWUgcHJvY2Vzc2luZyBvY2N1cnMuIAoqICAgICAgICBXaGVuIGl0J3Mgbm9uLXplcm8sIHRoZXkgYXJlIHVzZWQgdG8gZGVmaW5lIHRoZSBtYXhpbXVtIGZyYW1lIHNpemUgYWxsb3dlZAoqICAgICAgICBmb3IgQVZCIGZyYW1lcyB0aGF0IGNhbiBiZSBwbGFjZWQgaW50byB0aGUgR1RfQVZCX0hJX1FQUkkgcXVldWUuIEZyYW1lcwoqICAgICAgICB0aGF0IGFyZSBvdmVyIHRoaXMgc2l6ZSBsaW1pdCBhcmUgZmlsdGVyZWQuIFRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzIAoqICAgICAgICBpcyBub24tQVZCIGZyYW1lcyB0aGF0IGdldCB0aGVpciBRUHJpQXZiIGFzc2lnbmVkIGJ5IHRoZSBQcmlvcml0eSBPdmVycmlkZSAKKiAgICAgICAgVGFibGUKKgoqIElOUFVUUzoKKiAgICAgICAgbGltaXQgICAgLSBIaSBGcmFtZSBMaW1pdAoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YlNldEFWQkhpTGltaXQKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9VMzIgICAgICAgIGxpbWl0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJHZXRQdHBFeHRDbGsKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBQVFAgZXh0ZXJuYWwgY2xvY2sgc2VsZWN0LgoqICAgICAgICBXaGVuIHRoaXMgYml0IGlzIGNsZWFyZWQgdG8gYSB6ZXJvLCB0aGUgUFRQIGNvcmUgZ2V0cyBpdHMgY2xvY2sgZnJvbSAKKiAgICAgICAgYW4gaW50ZXJuYWwgMTI1TUh6IGNsb2NrIGJhc2VkIG9uIHRoZSBkZXZpY2UncyBYVEFMX0lOIGlucHV0LiAKKiAgICAgICAgV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gYSBvbmUsIHRoZSBQVFAgY29yZSBnZXRzIGl0cyBjbG9jayBmcm9tIHRoZSBkZXZpY2UncwoqICAgICAgICBQVFBfRVhUQ0xLIHBpbi4KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGV4dENsayAgICAtIEdUX1RSVUUgaWYgZXh0ZXJuYWwgY2xvY2sgaXMgc2VsZWN0ZWQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiR2V0UHRwRXh0Q2xrCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBPVVQgR1RfQk9PTCAgICAgICAgKmV4dENsawopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiU2V0UHRwRXh0Q2xrCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgUFRQIGV4dGVybmFsIGNsb2NrIHNlbGVjdC4KKiAgICAgICAgV2hlbiB0aGlzIGJpdCBpcyBjbGVhcmVkIHRvIGEgemVybywgdGhlIFBUUCBjb3JlIGdldHMgaXRzIGNsb2NrIGZyb20gCiogICAgICAgIGFuIGludGVybmFsIDEyNU1IeiBjbG9jayBiYXNlZCBvbiB0aGUgZGV2aWNlJ3MgWFRBTF9JTiBpbnB1dC4gCiogICAgICAgIFdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lLCB0aGUgUFRQIGNvcmUgZ2V0cyBpdHMgY2xvY2sgZnJvbSB0aGUgZGV2aWNlJ3MKKiAgICAgICAgUFRQX0VYVENMSyBwaW4uCioKKiBJTlBVVFM6CiogICAgICAgIGV4dENsayAgICAtIEdUX1RSVUUgaWYgZXh0ZXJuYWwgY2xvY2sgaXMgc2VsZWN0ZWQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YlNldFB0cEV4dENsawooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX0JPT0wgICAgICAgIGV4dENsawopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiR2V0UmVjQ2xrU2VsCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgU3luY2hyb25vdXMgRXRoZXJuZXQgUmVjb3ZlcmVkIENsb2NrIFNlbGVjdC4KKiAgICAgICAgVGhpcyBmaWVsZCBpbmRpY2F0ZSB0aGUgaW50ZXJuYWwgUEhZIG51bWJlciB3aG9zZSByZWNvdmVyZWQgY2xvY2sgd2lsbAoqICAgICAgICBiZSBwcmVzZW50ZWQgb24gdGhlIFNFX1JDTEswIG9yIFNFX1JDTEsxIHBpbiBkZXBlbmRpbmcgb24gdGhlIHJlY0NsayBzZWxlY3Rpb24uCioKKiBJTlBVVFM6CiogICAgICAgIHJlY0NsayAgICAtIEdUX0FWQl9SRUNPVkVSRURfQ0xPQ0sgdHlwZQoqCiogT1VUUFVUUzoKKiAgICAgICAgY2xrU2VsICAgIC0gcmVjb3ZlcmVkIGNsb2NrIHNlbGVjdGlvbgoqCiogUkVUVVJOUzoKKiAgICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiR2V0UmVjQ2xrU2VsCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfQVZCX1JFQ09WRVJFRF9DTE9DSyAgICByZWNDbGssCiAgICBPVVQgR1RfVTMyICAgICAgICAqY2xrU2VsCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiU2V0UmVjQ2xrU2VsCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgU3luY2hyb25vdXMgRXRoZXJuZXQgUmVjb3ZlcmVkIENsb2NrIFNlbGVjdC4KKiAgICAgICAgVGhpcyBmaWVsZCBpbmRpY2F0ZSB0aGUgaW50ZXJuYWwgUEhZIG51bWJlciB3aG9zZSByZWNvdmVyZWQgY2xvY2sgd2lsbAoqICAgICAgICBiZSBwcmVzZW50ZWQgb24gdGhlIFNFX1JDTEswIG9yIFNFX1JDTEsxIHBpbiBkZXBlbmRpbmcgb24gdGhlIHJlY0NsayBzZWxlY3Rpb24uCioKKiBJTlBVVFM6CiogICAgICAgIHJlY0NsayAgICAtIEdUX0FWQl9SRUNPVkVSRURfQ0xPQ0sgdHlwZQoqICAgICAgICBjbGtTZWwgICAgLSByZWNvdmVyZWQgY2xvY2sgc2VsZWN0aW9uIChzaG91bGQgYmUgbGVzcyB0aGFuIDgpCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiU2V0UmVjQ2xrU2VsCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfQVZCX1JFQ09WRVJFRF9DTE9DSyAgICByZWNDbGssCiAgICBJTiAgR1RfVTMyICAgICAgICBjbGtTZWwKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YkdldEF2Yk91aUJ5dGVzCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgQVZCIE9VSSBMaW1pdCBGaWx0ZXIgYnl0ZXMoMCB+IDIpLgoqICAgICAgICBXaGVuIGFsbCB0aHJlZSBvZiB0aGUgQXZiT3VpIEJ5dGVzIGFyZSB6ZXJvLCBub3JtYWwgZnJhbWUgcHJvY2Vzc2luZyBvY2N1cnMuCiogICAgICAgIFdoZW4gYW55IG9mIHRoZSB0aHJlZSBBdmJPdWkgQnl0ZXMgYXJlIG5vbi16ZXJvLCBhbGwgQVZCIGZyYW1lcyBtdXN0IGhhdmUgYQoqICAgICAgICBkZXN0aW5hdGlvbiBhZGRyZXNzIHdob3NlIDFzdCB0aHJlZSBieXRlcyBvZiB0aGUgREEgbWF0Y2ggdGhlc2UgdGhyZWUgCiogICAgICAgIEF2Yk91aSBCeXRlcyBvciB0aGUgZnJhbWUgd2lsbCBiZSBmaWx0ZXJlZC4KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIG91aUJ5dGVzICAgIC0gMyBieXRlcyBvZiBPVUkgZmllbGQgaW4gRXRoZXJuZXQgYWRkcmVzcyBmb3JtYXQKKgoqIFJFVFVSTlM6CiogICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YkdldEF2Yk91aUJ5dGVzCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBPVVQgR1RfVTggICAgICAgICpvYmlCeXRlcwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiU2V0QXZiT3VpQnl0ZXMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBBVkIgT1VJIExpbWl0IEZpbHRlciBieXRlcygwIH4gMikuCiogICAgICAgIFdoZW4gYWxsIHRocmVlIG9mIHRoZSBBdmJPdWkgQnl0ZXMgYXJlIHplcm8sIG5vcm1hbCBmcmFtZSBwcm9jZXNzaW5nIG9jY3Vycy4KKiAgICAgICAgV2hlbiBhbnkgb2YgdGhlIHRocmVlIEF2Yk91aSBCeXRlcyBhcmUgbm9uLXplcm8sIGFsbCBBVkIgZnJhbWVzIG11c3QgaGF2ZSBhCiogICAgICAgIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2hvc2UgMXN0IHRocmVlIGJ5dGVzIG9mIHRoZSBEQSBtYXRjaCB0aGVzZSB0aHJlZSAKKiAgICAgICAgQXZiT3VpIEJ5dGVzIG9yIHRoZSBmcmFtZSB3aWxsIGJlIGZpbHRlcmVkLgoqCiogSU5QVVRTOgoqICAgICAgICBvdWlCeXRlcyAgICAtIDMgYnl0ZXMgb2YgT1VJIGZpZWxkIGluIEV0aGVybmV0IGFkZHJlc3MgZm9ybWF0CioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiU2V0QXZiT3VpQnl0ZXMKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9VOCAgICAgICAgKm9iaUJ5dGVzCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJHZXRBdmJNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgUG9ydCdzIEFWQiBNb2RlLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0ICAgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgICAgLSBHVF9BVkJfTU9ERSB0eXBlCioKKiBSRVRVUk5TOgoqICAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJHZXRBdmJNb2RlCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX0FWQl9NT0RFICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJTZXRBdmJNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgUG9ydCdzIEFWQiBNb2RlLgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0ICAgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICAgbW9kZSAgICAtIEdUX0FWQl9NT0RFIHR5cGUKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJTZXRBdmJNb2RlCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgICBHVF9MUE9SVCAgICBwb3J0LAogICAgSU4gIEdUX0FWQl9NT0RFICAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YkdldEF2Yk92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgQVZCIE92ZXJyaWRlLgoqICAgICAgICBXaGVuIGRpc2FibGVkLCBub3JtYWwgZnJhbWUgcHJvY2Vzc2luZyBvY2N1cnMuCiogICAgICAgIFdoZW4gZW5hYmxlZCwgdGhlIGVncmVzcyBwb3J0aW9uIG9mIHRoaXMgcG9ydCBpcyBjb25zaWRlcmVkIEFWQiBldmVuIGlmIAoqICAgICAgICB0aGUgaW5ncmVzcyBwb3J0aW9uIGlzIG5vdC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqICAgICAgICBlbiAgICAgICAgLSBHVF9UUlVFIGlmIGVuYWJsZWQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiR2V0QXZiT3ZlcnJpZGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICAgIEdUX0xQT1JUICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgICAgKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJTZXRBdmJPdmVycmlkZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIEFWQiBPdmVycmlkZS4KKiAgICAgICAgV2hlbiBkaXNhYmxlZCwgbm9ybWFsIGZyYW1lIHByb2Nlc3Npbmcgb2NjdXJzLgoqICAgICAgICBXaGVuIGVuYWJsZWQsIHRoZSBlZ3Jlc3MgcG9ydGlvbiBvZiB0aGlzIHBvcnQgaXMgY29uc2lkZXJlZCBBVkIgZXZlbiBpZiAKKiAgICAgICAgdGhlIGluZ3Jlc3MgcG9ydGlvbiBpcyBub3QuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgICAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgICBlbiAgICAgICAgLSBHVF9UUlVFIHRvIGVuYWJsZSwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiU2V0QXZiT3ZlcnJpZGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICAgIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgR1RfQk9PTCAgICAgICAgZW4KKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJHZXRGaWx0ZXJCYWRBdmIKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBGaWx0ZXIgQmFkIEFWQiBmcmFtZXMuCiogICAgICAgIFdoZW4gZGlzYWJsZWQsIG5vcm1hbCBmcmFtZSBwcm9jZXNzaW5nIG9jY3Vycy4KKiAgICAgICAgV2hlbiBlbmFibGVkLCBmcmFtZXMgdGhhdCBhcmUgY29uc2lkZXJlZCBCYWQgQVZCIGZyYW1lcyBhcmUgZmlsdGVyZWQuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgICAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKiAgICAgICAgZW4gICAgICAgIC0gR1RfVFJVRSBpZiBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YkdldEZpbHRlckJhZEF2YgooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gICAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgICAqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YlNldEZpbHRlckJhZEF2YgoqCiogREVTQ1JJUFRJT046CiogICAgICAgIEZpbHRlciBCYWQgQVZCIGZyYW1lcy4KKiAgICAgICAgV2hlbiBkaXNhYmxlZCwgbm9ybWFsIGZyYW1lIHByb2Nlc3Npbmcgb2NjdXJzLgoqICAgICAgICBXaGVuIGVuYWJsZWQsIGZyYW1lcyB0aGF0IGFyZSBjb25zaWRlcmVkIEJhZCBBVkIgZnJhbWVzIGFyZSBmaWx0ZXJlZC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgIGVuICAgICAgICAtIEdUX1RSVUUgdG8gZW5hYmxlLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJTZXRGaWx0ZXJCYWRBdmIKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICAgIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgR1RfQk9PTCAgICAgICAgZW4KKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJHZXRBdmJUdW5uZWwKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBBVkIgVHVubmVsLgoqICAgICAgICBXaGVuIGRpc2FibGVkLCBub3JtYWwgZnJhbWUgcHJvY2Vzc2luZyBvY2N1cnMuCiogICAgICAgIFdoZW4gZW5hYmxlZCwgdGhlIHBvcnQgYmFzZWQgVkxBTiBUYWJsZSBtYXNraW5nLCA4MDIuMVEgVkxBTiBtZW1iZXJzaGlwIAoqICAgICAgICBtYXNraW5nIGFuZCB0aGUgVHJ1bmsgTWFza2luZyBpcyBieXBhc3NlZCBmb3IgYW55IGZyYW1lIGVudGVyaW5nIHRoaXMgcG9ydAoqICAgICAgICB0aGF0IGlzIGNvbnNpZGVyZWQgQVZCIGJ5IERBLiBUaGlzIGluY2x1ZGVzIHVuaWNhc3QgYXMgd2VsbCBhcyBtdWx0aWNhc3QKKiAgICAgICAgZnJhbWUKKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqICAgICAgICBlbiAgICAgICAgLSBHVF9UUlVFIGlmIGVuYWJsZWQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiR2V0QXZiVHVubmVsCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgICAgICplbgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YlNldEF2YlR1bm5lbAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIEFWQiBUdW5uZWwuCiogICAgICAgIFdoZW4gZGlzYWJsZWQsIG5vcm1hbCBmcmFtZSBwcm9jZXNzaW5nIG9jY3Vycy4KKiAgICAgICAgV2hlbiBlbmFibGVkLCB0aGUgcG9ydCBiYXNlZCBWTEFOIFRhYmxlIG1hc2tpbmcsIDgwMi4xUSBWTEFOIG1lbWJlcnNoaXAgCiogICAgICAgIG1hc2tpbmcgYW5kIHRoZSBUcnVuayBNYXNraW5nIGlzIGJ5cGFzc2VkIGZvciBhbnkgZnJhbWUgZW50ZXJpbmcgdGhpcyBwb3J0CiogICAgICAgIHRoYXQgaXMgY29uc2lkZXJlZCBBVkIgYnkgREEuIFRoaXMgaW5jbHVkZXMgdW5pY2FzdCBhcyB3ZWxsIGFzIG11bHRpY2FzdAoqICAgICAgICBmcmFtZQoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0ICAgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICAgZW4gICAgICAgIC0gR1RfVFJVRSB0byBlbmFibGUsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YlNldEF2YlR1bm5lbAooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gICAgR1RfTFBPUlQgICAgcG9ydCwKICAgIElOICBHVF9CT09MICAgICAgICBlbgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YkdldEF2YkZyYW1lUG9saWN5CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgQVZCIEhpIG9yIExvIGZyYW1lIHBvbGljeSBtYXBwaW5nLgoqICAgICAgICBTdXBwb3J0ZWQgcG9saWNpZXMgYXJlIGRlZmluZWQgaW4gR1RfQVZCX0ZSQU1FX1BPTElDWS4KKiAgICAgICAgICAgIAoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgIGZUeXBlICAgIC0gR1RfQVZCX0ZSQU1FX1RZUEUgCioKKiBPVVRQVVRTOgoqICAgICAgICBwb2xpY3kgICAgLSBHVF9BVkJfRlJBTUVfUE9MSUNZCioKKiBSRVRVUk5TOgoqICAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJHZXRBdmJGcmFtZVBvbGljeQooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gICAgR1RfTFBPUlQgICAgcG9ydCwKICAgIElOICAgIEdUX0FWQl9GUkFNRV9UWVBFICAgIGZUeXBlLAogICAgT1VUIEdUX0FWQl9GUkFNRV9QT0xJQ1kgICAgICAgICpwb2xpY3kKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJTZXRBdmJGcmFtZVBvbGljeQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIEFWQiBIaSBvciBMbyBmcmFtZSBwb2xpY3kgbWFwcGluZy4KKiAgICAgICAgU3VwcG9ydGVkIHBvbGljaWVzIGFyZSBkZWZpbmVkIGluIEdUX0FWQl9GUkFNRV9QT0xJQ1kuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgICAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgICBmVHlwZSAgICAtIEdUX0FWQl9GUkFNRV9UWVBFIAoqICAgICAgICBwb2xpY3kgICAgLSBHVF9BVkJfRlJBTUVfUE9MSUNZCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiU2V0QXZiRnJhbWVQb2xpY3kKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICAgIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgICBHVF9BVkJfRlJBTUVfVFlQRSAgICBmVHlwZSwKICAgIElOICBHVF9BVkJfRlJBTUVfUE9MSUNZICAgICAgICBwb2xpY3kKKTsKCi8qIEFtYmVyIFFBViBBUEkgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qIEFtYmVyIFFBViBBUEkgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2U2V0UG9ydFFwcmlYUVRTVG9rZW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0IFByaW9yaXR5IFF1ZXVlIDAtMyB0aW1lIHNsb3QgdG9rZW5zIG9uIGEgcG9ydC4KKiAgICAgICAgVGhlIHNldHRpbmcgdmFsdWUgaXMgbnVtYmVyIG9mIHRva2VucyB0aGF0IG5lZWQgdG8gYmUgc3VidHJhY3RlZCBhdCBlYWNoIAoqICAgICAgICBRVFMgaW50ZXJ2YWwgYm91bmRhcnkuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgICAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgICBxdWV1ZSAgICAgLSAwIC0gMwoqICAgICAgICBxdHNUb2tlbiAtIG51bWJlciBvZiB0b2tlbnMuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZTZXRQb3J0UXByaVhRVFNUb2tlbgooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gICAgR1RfTFBPUlQgICAgcG9ydCwKICAgIElOICBHVF9VOCAgICAgICAgcXVldWUsCiAgICBJTiAgR1RfVTE2ICAgICAgICBxdHNUb2tlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2R2V0UG9ydFFwcmlYUVRTVG9rZW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IFByaW9yaXR5IFF1ZXVlIDAtMyB0aW1lIHNsb3QgdG9rZW5zIG9uIGEgcG9ydC4KKiAgICAgICAgVGhlIHNldHRpbmcgdmFsdWUgaXMgbnVtYmVyIG9mIHRva2VucyB0aGF0IG5lZWQgdG8gYmUgc3VidHJhY3RlZCBhdCBlYWNoIAoqICAgICAgICBRVFMgaW50ZXJ2YWwgYm91bmRhcnkuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgICAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgICBxdWV1ZSAtIDAgLSAzCioKKiBPVVRQVVRTOgoqICAgICAgICBxdHNUb2tlbiAtIG51bWJlciBvZiB0b2tlbnMKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2R2V0UG9ydFFwcmlYUVRTVG9rZW4KKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICAgIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgR1RfVTggICAgICAgIHF1ZXVlLAogICAgT1VUIEdUX1UxNiAgICAgICAgKnF0c1Rva2VuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZTZXRQb3J0UXByaVhCdXJzdEJ5dGVzCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldCBQcmlvcml0eSBRdWV1ZSAwLTMgQnVyc3QgQnl0ZXMgb24gYSBwb3J0LgoqICAgICAgICBUaGlzIHZhbHVlIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNyZWRpdHMgaW4gYnl0ZXMgdGhhdCBjYW4gYmUgCiogICAgICAgIGFjY3VtdWxhdGVkIHdoZW4gdGhlIHF1ZXVlIGlzIGJsb2NrZWQgZnJvbSBzZW5kaW5nIG91dCBhIGZyYW1lIGR1ZSB0byAKKiAgICAgICAgaGlnaGVyIHByaW9yaXR5IHF1ZXVlIGZyYW1lcyBiZWluZyBzZW50IG91dC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgIHF1ZXVlIC0gMCAtIDMKKiAgICAgICAgYnVyc3QgLSBudW1iZXIgb2YgY3JlZGl0cyBpbiBieXRlcyAuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdlNldFBvcnRRcHJpWEJ1cnN0Qnl0ZXMKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICAgIEdUX0xQT1JUICAgIHBvcnQsCiAgICBJTiAgR1RfVTggICAgICAgIHF1ZXVlLAogICAgSU4gIEdUX1UxNiAgICAgICAgYnVyc3QKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdkdldFBvcnRRcHJpWEJ1cnN0Qnl0ZXMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IFByaW9yaXR5IFF1ZXVlIDAtMyBCdXJzdCBCeXRlcyBvbiBhIHBvcnQuCiogICAgICAgIFRoaXMgdmFsdWUgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgY3JlZGl0cyBpbiBieXRlcyB0aGF0IGNhbiBiZSAKKiAgICAgICAgYWNjdW11bGF0ZWQgd2hlbiB0aGUgcXVldWUgaXMgYmxvY2tlZCBmcm9tIHNlbmRpbmcgb3V0IGEgZnJhbWUgZHVlIHRvIAoqICAgICAgICBoaWdoZXIgcHJpb3JpdHkgcXVldWUgZnJhbWVzIGJlaW5nIHNlbnQgb3V0LgoqCiogSU5QVVRTOgoqICAgICAgICBwb3J0ICAgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICAgcXVldWUgICAgLSAwIC0gMwoqCiogT1VUUFVUUzoKKiAgICAgICAgYnVyc3QgLSBudW1iZXIgb2YgY3JlZGl0cyBpbiBieXRlcyAuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2R2V0UG9ydFFwcmlYQnVyc3RCeXRlcwooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gICAgR1RfTFBPUlQgICAgcG9ydCwKICAgIElOICBHVF9VOCAgICAgICAgcXVldWUsCiAgICBPVVQgR1RfVTE2ICAgICAgICAqYnVyc3QKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdlNldFBvcnRRYXZFbmFibGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0IFFBViBlbmFibGUgc3RhdHVzIG9uIGEgcG9ydC4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAgICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgIGVuICAgICAgICAtIEdUX1RSVUU6IFFBViBlbmFibGUsIEdUX0ZBTFNFOiBRQVYgZGlzYWJsZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZTZXRQb3J0UWF2RW5hYmxlCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgICBHVF9MUE9SVCAgICBwb3J0LAogICAgSU4gIEdUX0JPT0wgICAgICAgIGVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZHZXRQb3J0UWF2RW5hYmxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGdldCBRQVYgZW5hYmxlIHN0YXR1cyBvbiBhIHBvcnQuCioKKiBJTlBVVFM6CiogICAgICAgIHBvcnQgICAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKiAgICAgICAgZW4gICAgICAgIC0gR1RfVFJVRTogUUFWIGVuYWJsZSwgR1RfRkFMU0U6IFFBViBkaXNhYmxlCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2R2V0UG9ydFFhdkVuYWJsZQooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gICAgR1RfTFBPUlQgICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICAgICAqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiBRQVYgR2xvYmFsIHJlZ2lzdGVycyBwcm9jZXNzaW5nICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdlNldEdsb2JhbEFkbWluTUdNVAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBzZXQgdG8gYWNjZXB0IEFkbWl0IE1hbmFnZW1lbnQgRnJhbWVzIGFsd2F5cy4KKgoqIElOUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFIHRvIHNldCBNR01UIGZyYW1lIGFjY2VwdGVkIGFsd2F5cywgCiogICAgICAgICAgICAgR1RfRkFMU0UgZG8gbm90IHNldCBNR01UIGZyYW1lIGFjY2VwdGVkIGFsd2F5cwoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZTZXRHbG9iYWxBZG1pbk1HTVQKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9CT09MICAgICAgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2R2V0R2xvYmFsQWRtaW5NR01UCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIGdldCBzZXR0aW5nIG9mIEFkbWl0IE1hbmFnZW1lbnQgRnJhbWVzIGFsd2F5cy4KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGVuIC0gR1RfVFJVRSB0byBzZXQgTUdNVCBmcmFtZSBhY2NlcHRlZCBhbHdheXMsIAoqICAgICAgICAgICAgIEdUX0ZBTFNFIGRvIG5vdCBzZXQgTUdNVCBmcmFtZSBhY2NlcHRlZCBhbHdheXMKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZHZXRHbG9iYWxBZG1pbk1HTVQKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIE9VVCBHVF9CT09MICAgICAgICAqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdlNldEdsb2JhbElzb1B0clRocmVzaG9sZAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBzZXQgR2xvYmFsIElzb2Nocm9ub3VzIFF1ZXVlIFBvaW50ZXIgVGhyZXNob2xkLgoqICAgICAgICBUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgdG90YWwgbnVtYmVyIG9mIGlzb2Nocm9ub3VzIHBvaW50ZXJzIAoqICAgICAgICB0aGF0IGFyZSByZXNlcnZlZCBmb3IgaXNvY2hyb25vdXMgc3RyZWFtcy4gVGhlIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIAoqICAgICAgICBjb21wdXRlZCBpbiBTUlAgc29mdHdhcmUgYW5kIHByb2dyYW1tZWQgaW50byBoYXJkd2FyZSBiYXNlZCBvbiB0aGUgdG90YWwgCiogICAgICAgIGFnZ3JlZ2F0ZSBpc29jaHJvbm91cyBzdHJlYW1zIGNvbmZpZ3VyZWQgdG8gZ28gdGhyb3VnaCB0aGlzIGRldmljZS4uCioKKiBJTlBVVFM6CiogICAgICAgIGlzb1B0cnMgLSAgdG90YWwgbnVtYmVyIG9mIGlzb2Nocm9ub3VzIHBvaW50ZXJzIAoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZTZXRHbG9iYWxJc29QdHJUaHJlc2hvbGQKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9VMTYgICAgICAgIGlzb1B0cnMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdkdldEdsb2JhbElzb1B0clRocmVzaG9sZAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXQgR2xvYmFsIElzb2Nocm9ub3VzIFF1ZXVlIFBvaW50ZXIgVGhyZXNob2xkLgoqICAgICAgICBUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgdG90YWwgbnVtYmVyIG9mIGlzb2Nocm9ub3VzIHBvaW50ZXJzIAoqICAgICAgICB0aGF0IGFyZSByZXNlcnZlZCBmb3IgaXNvY2hyb25vdXMgc3RyZWFtcy4gVGhlIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIAoqICAgICAgICBjb21wdXRlZCBpbiBTUlAgc29mdHdhcmUgYW5kIHByb2dyYW1tZWQgaW50byBoYXJkd2FyZSBiYXNlZCBvbiB0aGUgdG90YWwgCiogICAgICAgIGFnZ3JlZ2F0ZSBpc29jaHJvbm91cyBzdHJlYW1zIGNvbmZpZ3VyZWQgdG8gZ28gdGhyb3VnaCB0aGlzIGRldmljZS4uCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBpc29QdHJzIC0gIHRvdGFsIG51bWJlciBvZiBpc29jaHJvbm91cyBwb2ludGVycyAKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZHZXRHbG9iYWxJc29QdHJUaHJlc2hvbGQKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIE9VVCBHVF9VMTYgICAgICAgICppc29QdHJzCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZTZXRHbG9iYWxEaXNRU0Q0TUdNVAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBzZXQgRGlzYWJsZSBRdWV1ZSBTY2hlZHVsZXIgRGVsYXlzIGZvciBNYW5hZ2VtZW50IGZyYW1lcy4uCioKKiBJTlBVVFM6CiogICAgICAgIGVuIC0gR1RfVFJVRSwgaXQgaW5kaWNhdGVzIHRvIHRoZSBRdWV1ZSBDb250cm9sbGVyIHRvIGRpc2FibGUgYXBwbHlpbmcgUXVldWUKKiAgICAgICAgICAgIFNjaGVkdWxlciBEZWxheXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHJhdGUgcmVndWxhdG9yIGRvZXMgbm90IGFjY291bnQKKiAgICAgICAgICAgIGZvciBNR01UIGZyYW1lcyB0aHJvdWdoIHRoaXMgcXVldWUuCiogICAgICAgICAgICBHVF9GQUxTRSwgdGhlIE1HTVQgZnJhbWVzIGZvbGxvdyBzaW1pbGFyIHJhdGUgcmVndWxhdGlvbiBhbmQgZGVsYXkKKiAgICAgICAgICAgIHJlZ3VsYXRpb24gZW52ZWxvcGUgYXMgc3BlY2lmaWVkIGZvciB0aGUgaXNvY2hyb25vdXMgcXVldWUgdGhhdCB0aGUKKiAgICAgICAgICAgIE1HTVQgZnJhbWVzIGFyZSBzaGFyaW5nIHdpdGguCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZTZXRHbG9iYWxEaXNRU0Q0TUdNVAooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX0JPT0wgICAgICAgIGVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZHZXRHbG9iYWxEaXNRU0Q0TUdNVAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBHZXQgRGlzYWJsZSBRdWV1ZSBTY2hlZHVsZXIgRGVsYXlzIGZvciBNYW5hZ2VtZW50IGZyYW1lcy4uCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBlbiAtIEdUX1RSVUUsIGl0IGluZGljYXRlcyB0byB0aGUgUXVldWUgQ29udHJvbGxlciB0byBkaXNhYmxlIGFwcGx5aW5nIFF1ZXVlCiogICAgICAgICAgICBTY2hlZHVsZXIgRGVsYXlzIGFuZCB0aGUgY29ycmVzcG9uZGluZyByYXRlIHJlZ3VsYXRvciBkb2VzIG5vdCBhY2NvdW50CiogICAgICAgICAgICBmb3IgTUdNVCBmcmFtZXMgdGhyb3VnaCB0aGlzIHF1ZXVlLgoqICAgICAgICAgICAgR1RfRkFMU0UsIHRoZSBNR01UIGZyYW1lcyBmb2xsb3cgc2ltaWxhciByYXRlIHJlZ3VsYXRpb24gYW5kIGRlbGF5CiogICAgICAgICAgICByZWd1bGF0aW9uIGVudmVsb3BlIGFzIHNwZWNpZmllZCBmb3IgdGhlIGlzb2Nocm9ub3VzIHF1ZXVlIHRoYXQgdGhlCiogICAgICAgICAgICBNR01UIGZyYW1lcyBhcmUgc2hhcmluZyB3aXRoLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZHZXRHbG9iYWxEaXNRU0Q0TUdNVAooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgT1VUIEdUX0JPT0wgICAgICAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2U2V0R2xvYmFsSW50ZXJydXB0CioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldCBRQVYgaW50ZXJydXB0IGVuYWJsZSwgCiogICAgICAgIFRoZSBRQVYgaW50ZXJyeXB0cyBpbmNsdWRlOgoqICAgICAgICBbR1RfUUFWX0lOVF9FTkFCTEVfRU5RX0xNVF9CSVRdICAgICAgIyBFblEgTGltaXQgSW50ZXJydXB0IEVuYWJsZSAKKiAgICAgICAgW0dUX1FBVl9JTlRfRU5BQkxFX0lTT19ERUxfQklUXSAgICAgICMgSXNvIERlbGF5IEludGVycnVwdCBFbmFibGUgICAKKiAgICAgICAgW0dUX1FBVl9JTlRfRU5BQkxFX0lTT19ESVNfQklUXSAgICAgICMgSXNvIERpc2NhcmQgSW50ZXJydXB0IEVuYWJsZSAKKiAgICAgICAgW0dUX1FBVl9JTlRfRU5BQkxFX0lTT19MSU1JVF9FWF9CSVRdICMgSXNvIFBhY2tldCBNZW1vcnkgRXhjZWVkZWQgCiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IEVuYWJsZSAKKgoqIElOUFVUUzoKKiAgICAgICAgaW50RW4gLSBbR1RfUUFWX0lOVF9FTkFCTEVfRU5RX0xNVF9CSVRdIE9SICAKKiAgICAgICAgICAgICAgICBbR1RfUUFWX0lOVF9FTkFCTEVfSVNPX0RFTF9CSVRdIE9SICAgIAoqICAgICAgICAgICAgICAgIFtHVF9RQVZfSU5UX0VOQUJMRV9JU09fRElTX0JJVF0gT1IgIAoqICAgICAgICAgICAgICAgIFtHVF9RQVZfSU5UX0VOQUJMRV9JU09fTElNSVRfRVhfQklUXSAgIAoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZTZXRHbG9iYWxJbnRlcnJ1cHQKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9VMTYgICAgICAgIGludEVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZHZXRHbG9iYWxJbnRlcnJ1cHQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXQgUUFWIGludGVycnVwdCBzdGF0dXMgYW5kIGVuYWJsZSBzdGF0dXMsIAoqICAgICAgICBUaGUgUUFWIGludGVycnlwdCBzdGF0dXMgaW5jbHVkZToKKiAgICAgICAgIFtHVF9RQVZfSU5UX1NUQVRVU19FTlFfTE1UX0JJVF0gICAgICAjIEVucXVldWUgRGVsYXkgTGltaXQgZXhjZWVkZWQgIAoqICAgICAgICAgW0dUX1FBVl9JTlRfU1RBVFVTX0lTT19ERUxfQklUXSAgICAgICMgSXNvIERlbGF5IEludGVycnVwdCBTdGF0dXMgICAKKiAgICAgICAgIFtHVF9RQVZfSU5UX1NUQVRVU19JU09fRElTX0JJVF0gICAgICAjIElzbyBEaXNjYXJkIEludGVycnVwdCBTdGF0dXMgCiogICAgICAgICBbR1RfUUFWX0lOVF9TVEFUVVNfSVNPX0xJTUlUX0VYX0JJVF0gIyBJc28gUGFja2V0IE1lbW9yeSBFeGNlZWRlZCAKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdCBTdGF0dXMgCiogICAgICAgIFRoZSBRQVYgaW50ZXJyeXB0IGVuYWJsZSBzdGF0dXMgaW5jbHVkZToKKiAgICAgICAgIFtHVF9RQVZfSU5UX0VOQUJMRV9FTlFfTE1UX0JJVF0gICAgICAjIEVuUSBMaW1pdCBJbnRlcnJ1cHQgRW5hYmxlIAoqICAgICAgICAgW0dUX1FBVl9JTlRfRU5BQkxFX0lTT19ERUxfQklUXSAgICAgICMgSXNvIERlbGF5IEludGVycnVwdCBFbmFibGUgICAKKiAgICAgICAgIFtHVF9RQVZfSU5UX0VOQUJMRV9JU09fRElTX0JJVF0gICAgICAjIElzbyBEaXNjYXJkIEludGVycnVwdCBFbmFibGUgCiogICAgICAgICBbR1RfUUFWX0lOVF9FTkFCTEVfSVNPX0xJTUlUX0VYX0JJVF0gIyBJc28gUGFja2V0IE1lbW9yeSBFeGNlZWRlZCAKKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IEVuYWJsZSAKKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGludEVuU3QgLSBbR1RfUUFWX0lOVF9TVEFUVVNfRU5RX0xNVF9CSVRdIE9SICAgICAKKiAgICAgICAgICAgICAgICBbR1RfUUFWX0lOVF9TVEFUVVNfSVNPX0RFTF9CSVRdIE9SICAgCiogICAgICAgICAgICAgICAgW0dUX1FBVl9JTlRfU1RBVFVTX0lTT19ESVNfQklUXSBPUiAgIAoqICAgICAgICAgICAgICAgIFtHVF9RQVZfSU5UX1NUQVRVU19JU09fTElNSVRfRVhfQklUXSBPUgoqICAgICAgICAgICAgICAgIFtHVF9RQVZfSU5UX0VOQUJMRV9FTlFfTE1UX0JJVF0gT1IgIAoqICAgICAgICAgICAgICAgIFtHVF9RQVZfSU5UX0VOQUJMRV9JU09fREVMX0JJVF0gT1IgICAgCiogICAgICAgICAgICAgICAgW0dUX1FBVl9JTlRfRU5BQkxFX0lTT19ESVNfQklUXSBPUiAgCiogICAgICAgICAgICAgICAgW0dUX1FBVl9JTlRfRU5BQkxFX0lTT19MSU1JVF9FWF9CSVRdICAgCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2R2V0R2xvYmFsSW50ZXJydXB0CigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBPVVQgR1RfVTE2ICAgICAgICAqaW50RW5TdAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2R2V0R2xvYmFsSXNvSW50ZXJydXB0UG9ydAoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXQgSXNvY2hyb25vdXMgaW50ZXJydXB0IHBvcnQuCiogICAgICAgIFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBwb3J0IG51bWJlciBmb3IgSXNvRGlzSW50IG9yIElzb0xpbWl0RXhJbnQgCiogICAgICAgIGJpdHMuIE9ubHkgb25lIHN1Y2ggaW50ZXJydXB0IGNvbmRpdGlvbiBjYW4gYmUgZGV0ZWN0ZWQgYnkgaGFyZHdhcmUgYXQgb25lIAoqICAgICAgICB0aW1lLiBPbmNlIGFuIGludGVycnVwdCBiaXQgaGFzIGJlZW4gc2V0IGFsb25nIHdpdGggdGhlIElzb0ludFBvcnQsIHRoZSAKKiAgICAgICAgc29mdHdhcmUgd291bGQgaGF2ZSB0byBjb21lIGFuZCBjbGVhciB0aGUgYml0cyBiZWZvcmUgaGFyZHdhcmUgcmVjb3JkcyAKKiAgICAgICAgYW5vdGhlciBpbnRlcnJ1cHQgZXZlbnQuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBwb3J0IC0gcG9ydCBudW1iZXIgZm9yIElzb0Rpc0ludCBvciBJc29MaW1pdEV4SW50IGJpdHMuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2R2V0R2xvYmFsSXNvSW50ZXJydXB0UG9ydAooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgT1VUIEdUX1U4ICAgICAgICAqcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2U2V0R2xvYmFsSXNvRGVsYXlMbXQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0IElzb2Nocm9ub3VzIHF1ZXVlIGRlbGF5IExpbWl0CiogICAgICAgIFRoaXMgZmllbGQgcmVwcmVzZW50cyBhIHBlci1wb3J0IGlzb2Nocm9ub3VzIGRlbGF5IGxpbWl0IHRoYXQgCiogICAgICAgIHdpbGwgYmUgY2hlY2tlZCBieSB0aGUgcXVldWUgY29udHJvbGxlciBsb2dpYyB0byBlbnN1cmUgbm8gaXNvY2hyb25vdXMgCiogICAgICAgIHBhY2tldHMgc3VmZmVyIG1vcmUgdGhhbiB0aGlzIGRlbGF5IHcuci50IHRvIHRoZWlyIGVsaWdpYmlsaXR5IHRpbWUgc2xvdC4KKiAgICAgICAgVGhpcyByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgUXVldWUgVGltZSBTbG90cy4gVGhlIGludGVydmFsIGZvciB0aGUgUVRTIAoqICAgICAgICBjYW4gYmUgY29uZmlndXJlZCB1c2luZyB0aGUgcmVnaXN0ZXIgaW4gUWF2IEdsb2JhbCBDb25maWd1cmF0aW9uLCBPZmZzZXQgMHgyLgoqCiogSU5QVVRTOgoqICAgICAgICBsaW1pdCAtIHBlci1wb3J0IGlzb2Nocm9ub3VzIGRlbGF5IGxpbWl0LgoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZTZXRHbG9iYWxJc29EZWxheUxtdAooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX1U4ICAgICAgICBsaW1pdAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2R2V0R2xvYmFsSXNvRGVsYXlMbXQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IElzb2Nocm9ub3VzIHF1ZXVlIGRlbGF5IExpbWl0CiogICAgICAgIFRoaXMgZmllbGQgcmVwcmVzZW50cyBhIHBlci1wb3J0IGlzb2Nocm9ub3VzIGRlbGF5IGxpbWl0IHRoYXQgCiogICAgICAgIHdpbGwgYmUgY2hlY2tlZCBieSB0aGUgcXVldWUgY29udHJvbGxlciBsb2dpYyB0byBlbnN1cmUgbm8gaXNvY2hyb25vdXMgCiogICAgICAgIHBhY2tldHMgc3VmZmVyIG1vcmUgdGhhbiB0aGlzIGRlbGF5IHcuci50IHRvIHRoZWlyIGVsaWdpYmlsaXR5IHRpbWUgc2xvdC4KKiAgICAgICAgVGhpcyByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgUXVldWUgVGltZSBTbG90cy4gVGhlIGludGVydmFsIGZvciB0aGUgUVRTIAoqICAgICAgICBjYW4gYmUgY29uZmlndXJlZCB1c2luZyB0aGUgcmVnaXN0ZXIgaW4gUWF2IEdsb2JhbCBDb25maWd1cmF0aW9uLCBPZmZzZXQgMHgyLgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbGltaXQgLSBwZXItcG9ydCBpc29jaHJvbm91cyBkZWxheSBsaW1pdC4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZHZXRHbG9iYWxJc29EZWxheUxtdAooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgT1VUIEdUX1U4ICAgICAgICAqbGltaXQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdlNldEdsb2JhbElzb01vbkVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0IElzb2Nocm9ub3VzIG1vbml0b3IgZW5hYmxlCiogICAgICAgIFNldCBHVF9UUlVFOiB0aGlzIGJpdCBlbmFibGVzIHRoZSBzdGF0aXN0aWNzIGdhdGhlcmluZyBjYXBhYmlsaXRpZXMgc3RhdGVkCiogICAgICAgIGluIFBUUCBHbG9iYWwgU3RhdHVzIFJlZ2lzdGVycyBPZmZzZXQgMHhELCAweEUgYW5kIDB4Ri4gT25jZSBlbmFibGVkLCB0aGUKKiAgICAgICAgc29mdHdhcmUgaXMgZXhwZWN0ZWQgdG8gcHJvZ3JhbSB0aGUgSXNvTW9uUG9ydCAoUFRQIEdsb2JhbCBTdGF0dXMgT2Zmc2V0CiogICAgICAgIDB4RCkgaW5kaWNhdGluZyB3aGljaCBwb3J0IG9mIHRoZSBkZXZpY2UgZG9lcyB0aGUgc29mdHdhcmUgd2FudHMgdG8gbW9uaXRvci4KKiAgICAgICAgVXBvbiBzZXR0aW5nIHRoaXMgYml0LCB0aGUgaGFyZHdhcmUgY29sbGVjdHMgSXNvSGlEaXNDdHIsIElzb0xvRGlzQ3RyIGFuZAoqICAgICAgICBJc29TY2hNaXNzQ3RyIHZhbHVlcyBmb3IgdGhlIHBvcnQgaW5kaWNhdGVkIGJ5IElzb01vblBvcnQgdGlsbCB0aGlzIGJpdCBpcyAKKiAgICAgICAgc2V0IHRvIGEgemVyby4KKiAgICAgICAgU2V0IEdUX0ZBTFNFOiB0aGlzIGJpdCBkaXNhYmxlcyB0aGUgc3RhdGlzdGljcyBnYXRoZXJpbmcgY2FwYWJpbGl0aWVzLgoqCiogSU5QVVRTOgoqICAgICAgICBlbiAtIEdUX1RSVUUgLyBHVF9GQUxTRS4KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2U2V0R2xvYmFsSXNvTW9uRW4KKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9CT09MICAgICAgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2R2V0R2xvYmFsSXNvTW9uRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IElzb2Nocm9ub3VzIG1vbml0b3IgZW5hYmxlCiogICAgICAgIFNldCBHVF9UUlVFOiB0aGlzIGJpdCBlbmFibGVzIHRoZSBzdGF0aXN0aWNzIGdhdGhlcmluZyBjYXBhYmlsaXRpZXMgc3RhdGVkCiogICAgICAgIGluIFBUUCBHbG9iYWwgU3RhdHVzIFJlZ2lzdGVycyBPZmZzZXQgMHhELCAweEUgYW5kIDB4Ri4gT25jZSBlbmFibGVkLCB0aGUKKiAgICAgICAgc29mdHdhcmUgaXMgZXhwZWN0ZWQgdG8gcHJvZ3JhbSB0aGUgSXNvTW9uUG9ydCAoUFRQIEdsb2JhbCBTdGF0dXMgT2Zmc2V0CiogICAgICAgIDB4RCkgaW5kaWNhdGluZyB3aGljaCBwb3J0IG9mIHRoZSBkZXZpY2UgZG9lcyB0aGUgc29mdHdhcmUgd2FudHMgdG8gbW9uaXRvci4KKiAgICAgICAgVXBvbiBzZXR0aW5nIHRoaXMgYml0LCB0aGUgaGFyZHdhcmUgY29sbGVjdHMgSXNvSGlEaXNDdHIsIElzb0xvRGlzQ3RyIGFuZAoqICAgICAgICBJc29TY2hNaXNzQ3RyIHZhbHVlcyBmb3IgdGhlIHBvcnQgaW5kaWNhdGVkIGJ5IElzb01vblBvcnQgdGlsbCB0aGlzIGJpdCBpcyAKKiAgICAgICAgc2V0IHRvIGEgemVyby4KKiAgICAgICAgU2V0IEdUX0ZBTFNFOiB0aGlzIGJpdCBkaXNhYmxlcyB0aGUgc3RhdGlzdGljcyBnYXRoZXJpbmcgY2FwYWJpbGl0aWVzLgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgZW4gLSBHVF9UUlVFIC8gR1RfRkFMU0UuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2R2V0R2xvYmFsSXNvTW9uRW4KKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIE9VVCBHVF9CT09MICAgICAgICAqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdlNldEdsb2JhbElzb01vblBvcnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgc2V0IElzb2Nocm9ub3VzIG1vbml0b3JpbmcgcG9ydC4KKiAgICAgICAgVGhpcyBmaWVsZCBpcyB1cGRhdGVkIGJ5IHNvZnR3YXJlIGFsb25nIHdpdGggSXNvIE1vbiBFbiBiaXQgCiogICAgICAgIChRYXYgR2xvYmFsIFN0YXR1cywgb2Zmc2V0IDB4RCkgYW5kIGl0IGluZGljYXRlcyB0aGUgcG9ydCBudW1iZXIgdGhhdCAKKiAgICAgICAgdGhlIHNvZnR3YXJlIHdhbnRzIHRoZSBoYXJkd2FyZSB0byBzdGFydCBtb25pdG9yaW5nIGkuZS4sIHN0YXJ0IHVwZGF0aW5nIAoqICAgICAgICBJc29IaURpc0N0ciwgSXNvTG9EaXNDdHIgYW5kIElzb1NjaE1pc3NDdHIuIFRoZSBxdWV1ZSBjb250cm9sbGVyIGNsZWFycyAKKiAgICAgICAgdGhlIGFib3ZlIHN0YXRzIHdoZW4gSXNvTW9uUG9ydCBpcyBjaGFuZ2VkLi4KKgoqIElOUFVUUzoKKiAgICAgICAgcG9ydCAtICBwb3J0IG51bWJlciAuCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdlNldEdsb2JhbElzb01vblBvcnQKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9VMTYgICAgICAgIHBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdkdldEdsb2JhbElzb01vblBvcnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IElzb2Nocm9ub3VzIG1vbml0b3JpbmcgcG9ydC4KKiAgICAgICAgVGhpcyBmaWVsZCBpcyB1cGRhdGVkIGJ5IHNvZnR3YXJlIGFsb25nIHdpdGggSXNvIE1vbiBFbiBiaXQgCiogICAgICAgIChRYXYgR2xvYmFsIFN0YXR1cywgb2Zmc2V0IDB4RCkgYW5kIGl0IGluZGljYXRlcyB0aGUgcG9ydCBudW1iZXIgdGhhdCAKKiAgICAgICAgdGhlIHNvZnR3YXJlIHdhbnRzIHRoZSBoYXJkd2FyZSB0byBzdGFydCBtb25pdG9yaW5nIGkuZS4sIHN0YXJ0IHVwZGF0aW5nIAoqICAgICAgICBJc29IaURpc0N0ciwgSXNvTG9EaXNDdHIgYW5kIElzb1NjaE1pc3NDdHIuIFRoZSBxdWV1ZSBjb250cm9sbGVyIGNsZWFycyAKKiAgICAgICAgdGhlIGFib3ZlIHN0YXRzIHdoZW4gSXNvTW9uUG9ydCBpcyBjaGFuZ2VkLi4KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIHBvcnQgLSAgcG9ydCBudW1iZXIuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2R2V0R2xvYmFsSXNvTW9uUG9ydAooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgT1VUIEdUX1UxNiAgICAgICAgKnBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdlNldEdsb2JhbElzb0hpRGlzQ3RyCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldCBJc29jaHJvbm91cyBoaSBxdWV1ZSBkaXNjYXJkIGNvdW50ZXIuCiogICAgICAgIFRoaXMgZmllbGQgaXMgdXBkYXRlZCBieSBoYXJkd2FyZSB3aGVuIGluc3RydWN0ZWQgdG8gZG8gc28gYnkgCiogICAgICAgIGVuYWJsaW5nIHRoZSBJc29Nb25FbiBiaXQgaW4gUWF2IEdsb2JhbCBTdGF0dXMgUmVnaXN0ZXIgT2Zmc2V0IDB4RC4gCiogICAgICAgIFRoaXMgaXMgYW4gdXBjb3VudGVyIG9mIG51bWJlciBvZiBpc29jaHJvbm91cyBoaSBwYWNrZXRzIGRpc2NhcmRlZCAKKiAgICAgICAgYnkgUXVldWUgQ29udHJvbGxlci4KKgoqIElOUFVUUzoKKiAgICAgICAgZGlzQ3RyIC0gdXBjb3VudGVyIG9mIG51bWJlciBvZiBpc29jaHJvbm91cyBoaSBwYWNrZXRzIGRpc2NhcmRlZCAKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2U2V0R2xvYmFsSXNvSGlEaXNDdHIKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9VOCAgICAgICAgZGlzQ3RyCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZHZXRHbG9iYWxJc29IaURpc0N0cgoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBnZXQgSXNvY2hyb25vdXMgaGkgcXVldWUgZGlzY2FyZCBjb3VudGVyLgoqICAgICAgICBUaGlzIGZpZWxkIGlzIHVwZGF0ZWQgYnkgaGFyZHdhcmUgd2hlbiBpbnN0cnVjdGVkIHRvIGRvIHNvIGJ5IAoqICAgICAgICBlbmFibGluZyB0aGUgSXNvTW9uRW4gYml0IGluIFFhdiBHbG9iYWwgU3RhdHVzIFJlZ2lzdGVyIE9mZnNldCAweEQuIAoqICAgICAgICBUaGlzIGlzIGFuIHVwY291bnRlciBvZiBudW1iZXIgb2YgaXNvY2hyb25vdXMgaGkgcGFja2V0cyBkaXNjYXJkZWQgCiogICAgICAgIGJ5IFF1ZXVlIENvbnRyb2xsZXIuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBkaXNDdHIgLSB1cGNvdW50ZXIgb2YgbnVtYmVyIG9mIGlzb2Nocm9ub3VzIGhpIHBhY2tldHMgZGlzY2FyZGVkIAoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdkdldEdsb2JhbElzb0hpRGlzQ3RyCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBPVVQgR1RfVTggICAgICAgICpkaXNDdHIKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdlNldEdsb2JhbElzb0xvRGlzQ3RyCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyByb3V0aW5lIHNldCBJc29jaHJvbm91cyBMbyBxdWV1ZSBkaXNjYXJkIGNvdW50ZXIuCiogICAgICAgIFRoaXMgZmllbGQgaXMgdXBkYXRlZCBieSBoYXJkd2FyZSB3aGVuIGluc3RydWN0ZWQgdG8gZG8gc28gYnkgCiogICAgICAgIGVuYWJsaW5nIHRoZSBJc29Nb25FbiBiaXQgaW4gUWF2IEdsb2JhbCBTdGF0dXMgUmVnaXN0ZXIgT2Zmc2V0IDB4RC4gCiogICAgICAgIFRoaXMgaXMgYW4gdXBjb3VudGVyIG9mIG51bWJlciBvZiBpc29jaHJvbm91cyBsbyBwYWNrZXRzIGRpc2NhcmRlZCAKKiAgICAgICAgYnkgUXVldWUgQ29udHJvbGxlci4KKgoqIElOUFVUUzoKKiAgICAgICAgZGlzQ3RyIC0gdXBjb3VudGVyIG9mIG51bWJlciBvZiBpc29jaHJvbm91cyBsbyBwYWNrZXRzIGRpc2NhcmRlZCAKKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2U2V0R2xvYmFsSXNvTG9EaXNDdHIKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9VOCAgICAgICAgZGlzQ3RyCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZHZXRHbG9iYWxJc29Mb0Rpc0N0cgoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgcm91dGluZSBzZXQgSXNvY2hyb25vdXMgTG8gcXVldWUgZGlzY2FyZCBjb3VudGVyLgoqICAgICAgICBUaGlzIGZpZWxkIGlzIHVwZGF0ZWQgYnkgaGFyZHdhcmUgd2hlbiBpbnN0cnVjdGVkIHRvIGRvIHNvIGJ5IAoqICAgICAgICBlbmFibGluZyB0aGUgSXNvTW9uRW4gYml0IGluIFFhdiBHbG9iYWwgU3RhdHVzIFJlZ2lzdGVyIE9mZnNldCAweEQuIAoqICAgICAgICBUaGlzIGlzIGFuIHVwY291bnRlciBvZiBudW1iZXIgb2YgaXNvY2hyb25vdXMgbG8gcGFja2V0cyBkaXNjYXJkZWQgCiogICAgICAgIGJ5IFF1ZXVlIENvbnRyb2xsZXIuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBkaXNDdHIgLSB1cGNvdW50ZXIgb2YgbnVtYmVyIG9mIGlzb2Nocm9ub3VzIGxvIHBhY2tldHMgZGlzY2FyZGVkIAoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdkdldEdsb2JhbElzb0xvRGlzQ3RyCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBPVVQgR1RfVTggICAgICAgICpkaXNDdHIKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFVzZUlwTWFwcGluZ1RhYmxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgVGhpcyBBUEkgc2V0IHRvIHVzZSBJUCBGcmFtZSBQcmlvcml0aWVzIGZyb20gdGhpcyB0YWJsZS4gCiogICAgICAgIFNldCBHVF9UUlVFOiAgVGhlIElQX0ZQUkkgZGF0YSBpbiB0aGlzIHRhYmxlIGlzIHVzZWQgYXMgdGhlIGZyYW1lknMgCiogICAgICAgICAgICBpbml0aWFsIElQX0ZQUkkuCiogICAgICAgIFNldCBHVF9GQUxTRTogVGhlIElQX0ZQUkkgZGF0YSBpbiB0aGlzIHRhYmxlIGlzIGlnbm9yZWQuIEluc3RlYWQgdGhlIAoqICAgICAgICAgICAgZnJhbWWScyBpbml0aWFsIElQX0ZQUkkgaXMgZ2VuZXJhdGVkIGJ5IHVzaW5nIHRoZSBmcmFtZZJzIElQX1FQUkkKKiAgICAgICAgICAgIGFzIHRoZSBJUF9GUFJJknMgdXBwZXIgdHdvIGJpdHMsIGFuZCB0aGUgSVBfRlBSSZJzIGxvd2VzdCBiaXQgY29tZXMgCiogICAgICAgICAgICBmcm9tIGJpdCAwIG9mIHRoZSBmcmFtZZJzIHNvdXJjZSBwb3J0knMgRGVmYXVsdCBQUkkgKFBvcnQgb2Zmc2V0IDB4MDcpLgoqCiogSU5QVVRTOgoqICAgICAgICBlbiAgICAtIFtHVF9UUlVFXSAvIFtHVF9GQUxTRV0KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0VXNlSXBNYXBwaW5nVGFibGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAgICpkZXYsCiAgICBJTiAgR1RfQk9PTCAgICAgICAgICAgIGVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRVc2VJcE1hcHBpbmdUYWJsZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIFRoaXMgQVBJIGdldCB0byB1c2UgSVAgRnJhbWUgUHJpb3JpdGllcyBmcm9tIHRoaXMgdGFibGUuIAoqICAgICAgICBTZXQgR1RfVFJVRTogIFRoZSBJUF9GUFJJIGRhdGEgaW4gdGhpcyB0YWJsZSBpcyB1c2VkIGFzIHRoZSBmcmFtZZJzIAoqICAgICAgICAgICAgaW5pdGlhbCBJUF9GUFJJLgoqICAgICAgICBTZXQgR1RfRkFMU0U6IFRoZSBJUF9GUFJJIGRhdGEgaW4gdGhpcyB0YWJsZSBpcyBpZ25vcmVkLiBJbnN0ZWFkIHRoZSAKKiAgICAgICAgICAgIGZyYW1lknMgaW5pdGlhbCBJUF9GUFJJIGlzIGdlbmVyYXRlZCBieSB1c2luZyB0aGUgZnJhbWWScyBJUF9RUFJJCiogICAgICAgICAgICBhcyB0aGUgSVBfRlBSSZJzIHVwcGVyIHR3byBiaXRzLCBhbmQgdGhlIElQX0ZQUkmScyBsb3dlc3QgYml0IGNvbWVzIAoqICAgICAgICAgICAgZnJvbSBiaXQgMCBvZiB0aGUgZnJhbWWScyBzb3VyY2UgcG9ydJJzIERlZmF1bHQgUFJJIChQb3J0IG9mZnNldCAweDA3KS4KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGVuICAgIC0gW0dUX1RSVUVdIC8gW0dUX0ZBTFNFXQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFVzZUlwTWFwcGluZ1RhYmxlCigKICAgIElOICBHVF9RRF9ERVYgICAgICAgICAqZGV2LAogICAgSU4gIEdUX0JPT0wgICAgICAgICAgICAqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldElwTWFwcGluZ1ByaW8KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBTZXQgSVB2NCBhbmQgSVB2NiBGcmFtZSBQcmlvcml0eSBNYXBwaW5nLCBhbmQgCiogICAgICAgIElQdjQgYW5kIElQdjYgUXVldWUgUHJpb3JpdHkgTWFwcGluZy4KKiAgICAgICBUaGUgaXBGcHJpIHZhbHVlIGlzIHVzZWQgYXMgdGhlIGZyYW1lcyBpbml0aWFsIEZQUkkgd2hlbiB0aGUgZnJhbWUgaXMgCiogICAgICAgIGFuIElQdjQgb3IgYW4gSVB2NiBmcmFtZSwgYW5kIHRoZSBwb3J0knMgSW5pdGlhbFByaSAoUG9ydCBvZmZzZXQgMHgwNCkgCiogICAgICAgIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIElQIEZQcmmScy4KKiAgICAgICBUaGUgaXBRcHJpIHZhbHVlIGlzIHVzZWQgYXMgdGhlIGZyYW1lknMgaW5pdGlhbCBRUFJJIHdoZW4gdGhlIGZyYW1lIGlzIAoqICAgICAgICBhbiBJUHY0IG9yIGFuIElQdjYgZnJhbWUsIGFuZCB0aGUgcG9ydJJzIEluaXRpYWxQcmkgYW5kIFRhZ0lmQm90aCAKKiAgICAgICAgcmVnaXN0ZXJzIChQb3J0IG9mZnNldCAweDA0KSBhcmUgY29uZmlndXJlZCB0byB1c2UgSVAgUVByaZJzLgoqCiogSU5QVVRTOgoqICAgICAgICBwb2ludCAtIFBvaW50ZXIgdG8gdGhlIElwIE1hcHBpbmcgVGFibGUuCiogICAgICAgICAgICAgICAgMCAtIDB4M2Y7CiogICAgICAgIGlwRnByaSAtICBUaGUgdmFsdWUgaXMgMCAtIDcKKiAgICAgICAgaXBRcHJpIC0gIFRoZSB2YWx1ZSBpcyAwIC0gMy4KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0SXBNYXBwaW5nUHJpbwooCiAgICBJTiAgR1RfUURfREVWICAgICAgICAgKmRldiwKICAgIElOICBHVF9VMzIgICAgICAgICAgICBwb2ludCwKICAgIElOICBHVF9VOCAgICAgICAgICAgIGlwRnByaSwKICAgIElOICBHVF9VOCAgICAgICAgICAgIGlwUXByaQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0SXBNYXBwaW5nUHJpbwoqCiogREVTQ1JJUFRJT046CiogICAgICAgIEdldCBJUHY0IGFuZCBJUHY2IEZyYW1lIFByaW9yaXR5IE1hcHBpbmcsIGFuZCAKKiAgICAgICAgSVB2NCBhbmQgSVB2NiBRdWV1ZSBQcmlvcml0eSBNYXBwaW5nLgoqICAgICAgIFRoZSBpcEZwcmkgdmFsdWUgaXMgdXNlZCBhcyB0aGUgZnJhbWVzIGluaXRpYWwgRlBSSSB3aGVuIHRoZSBmcmFtZSBpcyAKKiAgICAgICAgYW4gSVB2NCBvciBhbiBJUHY2IGZyYW1lLCBhbmQgdGhlIHBvcnSScyBJbml0aWFsUHJpIChQb3J0IG9mZnNldCAweDA0KSAKKiAgICAgICAgaXMgY29uZmlndXJlZCB0byB1c2UgSVAgRlByaZJzLgoqICAgICAgICBUaGUgaXBRcHJpIHZhbHVlIGlzIHVzZWQgYXMgdGhlIGZyYW1lknMgaW5pdGlhbCBRUFJJIHdoZW4gdGhlIGZyYW1lIGlzIAoqICAgICAgICBhbiBJUHY0IG9yIGFuIElQdjYgZnJhbWUsIGFuZCB0aGUgcG9ydJJzIEluaXRpYWxQcmkgYW5kIFRhZ0lmQm90aCAKKiAgICAgICAgcmVnaXN0ZXJzIChQb3J0IG9mZnNldCAweDA0KSBhcmUgY29uZmlndXJlZCB0byB1c2UgSVAgUVByaZJzLgoqCiogSU5QVVRTOgoqICAgICAgICBwb2ludCAtIFBvaW50ZXIgdG8gdGhlIElwIE1hcHBpbmcgVGFibGUuCiogICAgICAgICAgICAgICAgMCAtIDB4M2Y7CioKKiBPVVRQVVRTOgoqICAgICAgICBpcEZwcmkgLSAgVGhlIHZhbHVlIGlzIDAgLSA3CiogICAgICAgIGlwUXByaSAtICBUaGUgdmFsdWUgaXMgMCAtIDMuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldElwTWFwcGluZ1ByaW8KKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAgICpkZXYsCiAgICBJTiAgR1RfVTMyICAgICAgICAgICAgcG9pbnQsCiAgICBPVVQgIEdUX1U4ICAgICAgICAgICAgKmlwRnByaSwKICAgIE9VVCAgR1RfVTggICAgICAgICAgICAqaXBRcHJpCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNSZWFkRWVwcm9tCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgUmVhZCBFRVBST00gZnJvbSBFRVBST02ScyBhZGRyZXNzIHdoZXJlIHRoZSBFRU9wIGlzIHBlcmZvcm1lZC4KKgoqIElOUFVUUzoKKiAgICAgICAgYWRkciAtIEVFUFJPTSBBZGRyZXNzLiAKKgoqIE9VVFBVVFM6CiogICAgICAgIGRhdGEgLSAgRGF0YSB0aGF0IHdhcyByZWFkIGJhY2sgZnJvbSB0aGUgRUVQUk9NLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1JlYWRFZXByb20KKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAgICpkZXYsCiAgICBJTiAgR1RfVTMyICAgICAgICAgICAgYWRkciwKICAgIE9VVCAgR1RfVTggICAgICAgICAgICAqZGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzV3JpdGVFZXByb20KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBXcml0ZSBFRVBST00gYXQgdGhlIEVFUFJPTZJzIGFkZHJlc3Mgd2hlcmUgdGhlIEVFT3AgaXMgcGVyZm9ybWVkLgoqCiogSU5QVVRTOgoqICAgICAgICBhZGRyIC0gRUVQUk9NIEFkZHJlc3MuIAoqICAgICAgICBkYXRhIC0gRGF0YSB0byBiZSB3cml0dGVuIHRvIHRoZSBFRVBST00KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzV3JpdGVFZXByb20KKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAgICpkZXYsCiAgICBJTiAgR1RfVTMyICAgICAgICAgICAgYWRkciwKICAgIElOICBHVF9VOCAgICAgICAgICAgIGRhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1Jlc3RhcnRFZXByb20KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBSZXN0YXJ0IFJlZ2lzdGVyIExvYWRlciBleGVjdXRpb24gYXQgdGhlIEVFUFJPTZJzIGFkZHJlc3Mgd2hlcmUgdGhlIEVFT3AgCiogICAgICAgIGlzIHBlcmZvcm1lZAoqCiogSU5QVVRTOgoqICAgICAgICBhZGRyIC0gRUVQUk9NIEFkZHJlc3MuIC4KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzUmVzdGFydEVlcHJvbQooCiAgICBJTiAgR1RfUURfREVWICAgICAgICAgKmRldiwKICAgIElOICBHVF9VMzIgICAgICAgICAgICBhZGRyCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNIYWx0RWVwcm9tCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgSGFsdCAoc3RvcCBleGVjdXRpbmcgdGhlIEVFUFJPTSBpZiBpdHMgbm90IGFscmVhZHkgc3RvcHBlZCkKKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzSGFsdEVlcHJvbQooCiAgICBJTiAgR1RfUURfREVWICAgICAgICAgKmRldgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0U3RFZXByb20KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBHZXQgRUVQUk9NIHN0YXR1cy4gVGhleSBhcmUgUmVnaXN0ZXIgTG9hZGVyIFJ1bm5pbmcgc3RhdHVzIGFuZCBFRVBST00gCiogICAgICAgIFdyaXRlIEVuYWJsZSBzdGF0dXMKKiAgICAgICAgcnVuU3QgaXMgR1RfVFJVRTogUmVnaXN0ZXIgTG9hZGVyIFJ1bm5pbmcsIHdoZW5ldmVyIHRoZSByZWdpc3RlciBsb2FkZXIgCiogICAgICAgICAgICBpcyBidXN5IGV4ZWN1dGluZyB0aGUgaW5zdHJ1Y3Rpb25zIGNvbnRhaW5lZCBpbiB0aGUgRUVQUk9NLgoqICAgICAgICB3cml0ZUVuIGlzIEdUX1RSVUU6IEVFUFJPTSBXcml0ZSBFbmFibGUsIHRoYXQgaW5kaWNhdGVzIHRoYXQgd3JpdGluZyB0byAKKiAgICAgICAgICAgIHRoZSBFRVBST00gaXMgcG9zc2libGUuIAoqICAgICAgICB3cml0ZUVuIGlzIEdUX0ZBTFNFOiB0aGUgV3JpdGUgRUVQUk9NIEVFT3AgYWJvdmUgd2lsbCBub3QgZG8gYW55dGhpbmcuCiogICAgICAgICAgICBUaGlzIHJlZmxlY3RzIHRoZSB2YWx1ZSBvZiB0aGUgRUVfV0UgY29uZmlndXJhdGlvbiBwaW4gYWZ0ZXIgUmVzZXQuCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBydW5TdCAgIC0gICBbR1RfVFJVRV0gLyBbR1RfRkFMU0UpCiogICAgICAgIHdyaXRlRW4gLSAgIFtHVF9UUlVFXSAvIFtHVF9GQUxTRSkKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRTdEVlcHJvbQooCiAgICBJTiAgR1RfUURfREVWICAgICAgICAgKmRldiwKICAgIE9VVCBHVF9CT09MICAgICAgICAgICAgKndyaXRlRW4sCiAgICBPVVQgR1RfQk9PTCAgICAgICAgICAgICpydW5TdAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0U2NyYXRjaE1pc2NDdHJsCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgU2V0IFNjcmF0Y2ggYW5kIE1pc2MgY29udHJvbCBkYXRhIHRvIHRoZSBTY3JhdGNoIGFuZCBNaXNjIENvbnRyb2wgcmVnaXN0ZXIuIAoqICAgICAgICBUaGUgcmVnaXN0ZXIgb2YgU2NyYXRjaCBhbmQgTWlzYyBjb250cm9sIGFyZS4KKiAgICAgICAgICAgICAgICBTY3JhdGNoIEJ5dGUgMAoqICAgICAgICAgICAgICAgIFNjcmF0Y2ggQnl0ZSAxCiogICAgICAgICAgICAgICAgR1BJTyBDb25maWd1cmF0aW9uCiogICAgICAgICAgICAgICAgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKKiAgICAgICAgICAgICAgICBHUElPIERpcmVjdGlvbgoqICAgICAgICAgICAgICAgIEdQSU8gRGF0YQoqICAgICAgICAgICAgICAgIENPTkZJRyBEYXRhIDAKKiAgICAgICAgICAgICAgICBDT05GSUcgRGF0YSAxCiogICAgICAgICAgICAgICAgQ09ORklHIERhdGEgMgoqICAgICAgICAgICAgICAgIENPTkZJRyBEYXRhIDMKKiAgICAgICAgICAgICAgICBTeW5jRSAmIFRBSUNMSzEyNZJzIERyaXZlCiogICAgICAgICAgICAgICAgUDWScyAmIENMSzEyNZJzIENsb2NrIERyaXZlCiogICAgICAgICAgICAgICAgUDaScyBDbG9jayBEcml2ZQoqICAgICAgICAgICAgICAgIEVFUFJPTSBQYWQgZHJpdmUKKgoqIElOUFVUUzoKKiAgICAgICAgcG9pbnQgLSBQb2ludGVyIHRvIHRoZSBTY3JhdGNoIGFuZCBNaXNjLiBDb250cm9sIHJlZ2lzdGVyLgoqICAgICAgICBkYXRhICAtIFNjcmF0Y2ggYW5kIE1pc2MuIENvbnRyb2wgZGF0YSB3cml0dGVuIHRvIHRoZSByZWdpc3RlciAKKiAgICAgICAgICAgICAgICBwb2ludGVkIHRvIGJ5IHRoZSBwb2ludCBhYm92ZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0U2NyYXRjaE1pc2NDdHJsCigKICAgIElOICBHVF9RRF9ERVYgICAgICAgICAqZGV2LAogICAgSU4gIEdUX1UzMiAgICAgICAgICAgIHBvaW50LAogICAgSU4gIEdUX1U4ICAgICAgICAgICAgZGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0U2NyYXRjaE1pc2NDdHJsCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgR2V0IFNjcmF0Y2ggYW5kIE1pc2MgY29udHJvbCBkYXRhIGZyb20gdGhlIFNjcmF0Y2ggYW5kIE1pc2MgQ29udHJvbCByZWdpc3Rlci4gCiogICAgICAgIFRoZSByZWdpc3RlciBvZiBTY3JhdGNoIGFuZCBNaXNjIGNvbnRyb2wgYXJlLgoqICAgICAgICAgICAgICAgIFNjcmF0Y2ggQnl0ZSAwCiogICAgICAgICAgICAgICAgU2NyYXRjaCBCeXRlIDEKKiAgICAgICAgICAgICAgICBHUElPIENvbmZpZ3VyYXRpb24KKiAgICAgICAgICAgICAgICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQoqICAgICAgICAgICAgICAgIEdQSU8gRGlyZWN0aW9uCiogICAgICAgICAgICAgICAgR1BJTyBEYXRhCiogICAgICAgICAgICAgICAgQ09ORklHIERhdGEgMAoqICAgICAgICAgICAgICAgIENPTkZJRyBEYXRhIDEKKiAgICAgICAgICAgICAgICBDT05GSUcgRGF0YSAyCiogICAgICAgICAgICAgICAgQ09ORklHIERhdGEgMwoqICAgICAgICAgICAgICAgIFN5bmNFICYgVEFJQ0xLMTI1knMgRHJpdmUKKiAgICAgICAgICAgICAgICBQNZJzICYgQ0xLMTI1knMgQ2xvY2sgRHJpdmUKKiAgICAgICAgICAgICAgICBQNpJzIENsb2NrIERyaXZlCiogICAgICAgICAgICAgICAgRUVQUk9NIFBhZCBkcml2ZQoKKgoqIElOUFVUUzoKKiAgICAgICAgcG9pbnQgLSBQb2ludGVyIHRvIHRoZSBTY3JhdGNoIGFuZCBNaXNjLiBDb250cm9sIHJlZ2lzdGVyLgoqCiogT1VUUFVUUzoKKiAgICAgICAgZGF0YSAtIFNjcmF0Y2ggYW5kIE1pc2MuIENvbnRyb2wgZGF0YSByZWFkIGZyb20gdGhlIHJlZ2lzdGVyIAoqICAgICAgICAgICAgICAgIHBvaW50ZWQgdG8gYnkgdGhlIHBvaW50IGFib3ZlLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFNjcmF0Y2hNaXNjQ3RybAooCiAgICBJTiAgR1RfUURfREVWICAgICAgICAgKmRldiwKICAgIElOICBHVF9VMzIgICAgICAgICAgICBwb2ludCwKICAgIE9VVCAgR1RfVTggICAgICAgICAgICAqZGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0U2NyYXRjaEJpdHMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBTZXQgYml0cyB0byB0aGUgU2NyYXRjaCBhbmQgTWlzYyBDb250cm9sIHJlZ2lzdGVyIDxzY3JhdGNoIGJ5dGUgMCBhbmQgMT4uCiogICAgICAgIFRoZXNlIGJpdHMgYXJlIDEwMCUgYXZhaWxhYmxlIHRvIHNvZnR3YXJlIGZvciB3aGF0ZXZlciBwdXJwb3NlIGRlc2lyZWQuIAoqICAgICAgICBUaGVzZSBiaXRzIGRvIG5vdCBjb25uZWN0IHRvIGFueSBoYXJkd2FyZSBmdW5jdGlvbi4KKgoqIElOUFVUUzoKKiAgICAgICAgc2NyaXRjaCAtIHdyaXR0ZW4gYml0cy4KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0U2NyYXRjaEJpdHMKKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAgICpkZXYsCiAgICBJTiAgR1RfVTE2ICAgICAgICAgICAgc2NyYXRjaAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0U2NyYXRjaEJpdHMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBHZXQgYml0cyBmcm9tIHRoZSBTY3JhdGNoIGFuZCBNaXNjIENvbnRyb2wgcmVnaXN0ZXIgPHNjcmF0Y2ggYnl0ZSAwIGFuZCAxPi4KKiAgICAgICAgVGhlc2UgYml0cyBhcmUgMTAwJSBhdmFpbGFibGUgdG8gc29mdHdhcmUgZm9yIHdoYXRldmVyIHB1cnBvc2UgZGVzaXJlZC4gCiogICAgICAgIFRoZXNlIGJpdHMgZG8gbm90IGNvbm5lY3QgdG8gYW55IGhhcmR3YXJlIGZ1bmN0aW9uLgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgc2NyaXRjaCAtIHJlYWQgYml0cy4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRTY3JhdGNoQml0cwooCiAgICBJTiAgR1RfUURfREVWICAgICAgICAgKmRldiwKICAgIE9VVCAgR1RfVTE2ICAgICAgICAgICAgKnNjcmF0Y2gKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEdwaW9Db25maWdNb2QKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBTZXQgYml0cyB0byB0aGUgU2NyYXRjaCBhbmQgTWlzYyBDb250cm9sIHJlZ2lzdGVyIDxHUElPIENvbmZpZ3VyYXRpb24+CiogICAgICAgIHRvIGNvbmZpZ3VyZSBHUElPIG1vZGUuCiogICAgICAgIFRoZSBiaXRzIGFyZSBzaGFyZWQgR2VuZXJhbCBQdXJwb3NlIElucHV0IE91dHB1dCBtb2RlIEJpdHM6CiogICAgICAgIEJpdCA2IC0gR1RfR1BJT19CSVRfNjogICAgMTpHUElPWzZdICAgIDA6U0VfUkNMSzEKKiAgICAgICAgQml0IDUgLSBHVF9HUElPX0JJVF81OiAgICAxOkdQSU9bNV0gICAgMDpTRV9SQ0xLMAoqICAgICAgICBOb3csIGZvbGxvaW5nIGJpdHMgYXJlIHJlYWQgb25seS4gCiogICAgICAgIEJpdCA0IC0gR1RfR1BJT19CSVRfNDogICAgMTpHUElPWzRdICAgIDA6CiogICAgICAgIEJpdCAzIC0gR1RfR1BJT19CSVRfMzogICAgMTpHUElPWzNdICAgIDA6CiogICAgICAgIEJpdCAyIC0gR1RfR1BJT19CSVRfMjogICAgMTpHUElPWzJdICAgIDA6CiogICAgICAgIEJpdCAxIC0gR1RfR1BJT19CSVRfMTogICAgMTpHUElPWzFdICAgIDA6UDZfQ09MCiogICAgICAgIEJpdCAwIC0gR1RfR1BJT19CSVRfMDogICAgMTpHUElPWzBdICAgIDA6UDZfQ1JTCioKKiBJTlBVVFM6CiogICAgICAgIG1vZGUgLSBPUiBbR1RfR1BJT19CSVRfeF0KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0R3Bpb0NvbmZpZ01vZAooCiAgICBJTiAgR1RfUURfREVWICAgICAgICAgKmRldiwKICAgIElOICBHVF9VMzIgICAgICAgICAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRHcGlvQ29uZmlnTW9kCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgR2V0IG1vZGUgZnJvbSB0aGUgU2NyYXRjaCBhbmQgTWlzYyBDb250cm9sIHJlZ2lzdGVyIDxHUElPIENvbmZpZ3VyYXRpb24+LgoqICAgICAgICBUaGUgYml0cyBhcmUgc2hhcmVkIEdlbmVyYWwgUHVycG9zZSBJbnB1dCBPdXRwdXQgbW9kZSBCaXRzOgoqICAgICAgICBCaXQgNiAtIEdUX0dQSU9fQklUXzY6ICAgIDE6R1BJT1s2XSAgICAwOlNFX1JDTEsxCiogICAgICAgIEJpdCA1IC0gR1RfR1BJT19CSVRfNTogICAgMTpHUElPWzVdICAgIDA6U0VfUkNMSzAKKiAgICAgICAgTm93LCBmb2xsb2luZyBiaXRzIGFyZSByZWFkIG9ubHkuIAoqICAgICAgICBCaXQgNCAtIEdUX0dQSU9fQklUXzQ6ICAgIDE6R1BJT1s0XSAgICAwOgoqICAgICAgICBCaXQgMyAtIEdUX0dQSU9fQklUXzM6ICAgIDE6R1BJT1szXSAgICAwOgoqICAgICAgICBCaXQgMiAtIEdUX0dQSU9fQklUXzI6ICAgIDE6R1BJT1syXSAgICAwOgoqICAgICAgICBCaXQgMSAtIEdUX0dQSU9fQklUXzE6ICAgIDE6R1BJT1sxXSAgICAwOlA2X0NPTAoqICAgICAgICBCaXQgMCAtIEdUX0dQSU9fQklUXzA6ICAgIDE6R1BJT1swXSAgICAwOlA2X0NSUwoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgbW9kZSAtIE9SIFtHVF9HUElPX0JJVF94XQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEdwaW9Db25maWdNb2QKKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAgICpkZXYsCiAgICBJTiAgR1RfVTMyICAgICAgICAgICAgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEdwaW9EaXJlY3Rpb24KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBTZXQgR3BpbyBkaXJlY3Rpb24gdG8gdGhlIFNjcmF0Y2ggYW5kIE1pc2MgQ29udHJvbCByZWdpc3RlciA8R1BJTyBEaXJlY3Rpb24+LgoqICAgICAgICBUaGUgYml0cyBhcmUgdXNlZCB0byBjb250cm9sIHRoZSBkaXJlY3Rpb24gb2YgR1BJT1s2OjBdLiAKKiAgICAgICAgV2hlbiBhIEdQSU+ScyBiaXQgaXMgc2V0IHRvIGEgb25lIHRoYXQgR1BJTyB3aWxsIGJlY29tZSBhbiBpbnB1dC4gV2hlbiBhCiogICAgICAgIEdQSU+ScyBiaXQgaXMgY2xlYXJlZCB0byBhIHplcm8gdGhhdCBHUElPIHdpbGwgYmVjb21lIGFuIG91dHB1dAoqICAgICAgICBHZW5lcmFsIFB1cnBvc2UgSW5wdXQgT3V0cHV0IGRpcmVjdGlvbiBiaXRzIGFyZToKKiAgICAgICAgQml0IDYgLSBHVF9HUElPX0JJVF82CiogICAgICAgIEJpdCA1IC0gR1RfR1BJT19CSVRfNQoqICAgICAgICBCaXQgNCAtIEdUX0dQSU9fQklUXzQKKiAgICAgICAgQml0IDMgLSBHVF9HUElPX0JJVF8zCiogICAgICAgIEJpdCAyIC0gR1RfR1BJT19CSVRfMgoqICAgICAgICBCaXQgMSAtIEdUX0dQSU9fQklUXzEKKiAgICAgICAgQml0IDAgLSBHVF9HUElPX0JJVF8wCioKKiBJTlBVVFM6CiogICAgICAgIGRpciAtIE9SIFtHVF9HUElPX0JJVF94XQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRHcGlvRGlyZWN0aW9uCigKICAgIElOICBHVF9RRF9ERVYgICAgICAgICAqZGV2LAogICAgSU4gIEdUX1UzMiAgICAgICAgICAgIGRpcgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0R3Bpb0RpcmVjdGlvbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgIGdldCBHcGlvIGRpcmVjdGlvbiBmcm9tIHRoZSBTY3JhdGNoIGFuZCBNaXNjIENvbnRyb2wgcmVnaXN0ZXIgPEdQSU8gRGlyZWN0aW9uPi4KKiAgICAgICAgVGhlIGJpdHMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgZGlyZWN0aW9uIG9mIEdQSU9bNjowXS4gCiogICAgICAgIFdoZW4gYSBHUElPknMgYml0IGlzIHNldCB0byBhIG9uZSB0aGF0IEdQSU8gd2lsbCBiZWNvbWUgYW4gaW5wdXQuIFdoZW4gYQoqICAgICAgICBHUElPknMgYml0IGlzIGNsZWFyZWQgdG8gYSB6ZXJvIHRoYXQgR1BJTyB3aWxsIGJlY29tZSBhbiBvdXRwdXQKKiAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElucHV0IE91dHB1dCBkaXJlY3Rpb24gYml0cyBhcmU6CiogICAgICAgIEJpdCA2IC0gR1RfR1BJT19CSVRfNgoqICAgICAgICBCaXQgNSAtIEdUX0dQSU9fQklUXzUKKiAgICAgICAgQml0IDQgLSBHVF9HUElPX0JJVF80CiogICAgICAgIEJpdCAzIC0gR1RfR1BJT19CSVRfMwoqICAgICAgICBCaXQgMiAtIEdUX0dQSU9fQklUXzIKKiAgICAgICAgQml0IDEgLSBHVF9HUElPX0JJVF8xCiogICAgICAgIEJpdCAwIC0gR1RfR1BJT19CSVRfMAoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgZGlyIC0gT1IgW0dUX0dQSU9fQklUX3hdCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0R3Bpb0RpcmVjdGlvbgooCiAgICBJTiAgR1RfUURfREVWICAgICAgICAgKmRldiwKICAgIE9VVCAgR1RfVTMyICAgICAgICAgICAgKmRpcgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0R3Bpb0RhdGEKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBTZXQgR3BpbyBkYXRhIHRvIHRoZSBTY3JhdGNoIGFuZCBNaXNjIENvbnRyb2wgcmVnaXN0ZXIgPEdQSU8gZGF0YT4uCiogICAgICAgIFdoZW4gYSBHUElPknMgYml0IGlzIHNldCB0byBiZSBhbiBpbnB1dCwgZGF0YSB3cml0dGVuIHRvIHRoaXMgYml0IHdpbGwgZ28gCiogICAgICAgIHRvIGEgaG9sZGluZyByZWdpc3RlciBidXQgd2lsbCBub3QgYXBwZWFyIG9uIHRoZSBwaW4gbm9yIGluIHRoaXMgcmVnaXN0ZXIuIAoqICAgICAgICBSZWFkcyBvZiB0aGlzIHJlZ2lzdGVyIHdpbGwgcmV0dXJuIHRoZSBhY3R1YWwsIHJlYWwtdGltZSwgZGF0YSB0aGF0IGlzIAoqICAgICAgICBhcHBlYXJpbmcgb24gdGhlIEdQSU+ScyBwaW4uCiogICAgICAgIFdoZW4gYSBHUElPknMgYml0IGlzIHNldCB0byBiZSBhbiBvdXRwdXQsIGRhdGEgd3JpdHRlbiB0byB0aGlzIGJpdCB3aWxsIGdvIAoqICAgICAgICB0byBhIGhvbGRpbmcgcmVnaXN0ZXIgYW5kIHdpbGwgYXBwZWFyIG9uIHRoZSBHUElPknMgcGluLiBSZWFkcyBvZiB0aGlzIHJlZ2lzdGVyIAoqICAgICAgICB3aWxsIHJldHVybiB0aGUgYWN0dWFsLCByZWFsLXRpbWUsIGRhdGEgdGhhdCBpcyBhcHBlYXJpbmcgb24gdGhlIEdQSU+ScyBwaW4gCiogICAgICAgICh3aGljaCBpbiB0aGlzIGNhc2Ugc2hvdWxkIGJlIHRoZSBkYXRhIHdyaXR0ZW4sIGJ1dCBpZiBpdHMgaXNuknQgdGhhdCB3b3VsZCAKKiAgICAgICAgYmUgYW4gaW5kaWNhdGlvbiBvZiBhIGNvbmZsaWN0KS4KKiAgICAgICAgV2hlbiBhIHBpbpJzIGRpcmVjdGlvbiBjaGFuZ2VzIGZyb20gaW5wdXQgdG8gb3V0cHV0LCB0aGUgZGF0YSBsYXN0IHdyaXR0ZW4gCiogICAgICAgIHRvIHRoZSBob2xkaW5nIHJlZ2lzdGVyIGFwcGVhcnMgb24gdGhlIEdQSU+ScyBwaW4KKiAgICAgICAgR2VuZXJhbCBQdXJwb3NlIElucHV0IE91dHB1dCBkYXRhIGJpdHMgYXJlOgoqICAgICAgICBCaXQgNiAtIEdUX0dQSU9fQklUXzYKKiAgICAgICAgQml0IDUgLSBHVF9HUElPX0JJVF81CiogICAgICAgIEJpdCA0IC0gR1RfR1BJT19CSVRfNAoqICAgICAgICBCaXQgMyAtIEdUX0dQSU9fQklUXzMKKiAgICAgICAgQml0IDIgLSBHVF9HUElPX0JJVF8yCiogICAgICAgIEJpdCAxIC0gR1RfR1BJT19CSVRfMQoqICAgICAgICBCaXQgMCAtIEdUX0dQSU9fQklUXzAKKgoqIElOUFVUUzoKKiAgICAgICAgZGF0YSAtIE9SIFtHVF9HUElPX0JJVF94XQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRHcGlvRGF0YQooCiAgICBJTiAgR1RfUURfREVWICAgICAgICAgKmRldiwKICAgIElOICBHVF9VMzIgICAgICAgICAgICBkYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRHcGlvRGF0YQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIGdldCBHcGlvIGRhdGEgdG8gdGhlIFNjcmF0Y2ggYW5kIE1pc2MgQ29udHJvbCByZWdpc3RlciA8R1BJTyBkYXRhPi4KKiAgICAgICAgV2hlbiBhIEdQSU+ScyBiaXQgaXMgc2V0IHRvIGJlIGFuIGlucHV0LCBkYXRhIHdyaXR0ZW4gdG8gdGhpcyBiaXQgd2lsbCBnbyAKKiAgICAgICAgdG8gYSBob2xkaW5nIHJlZ2lzdGVyIGJ1dCB3aWxsIG5vdCBhcHBlYXIgb24gdGhlIHBpbiBub3IgaW4gdGhpcyByZWdpc3Rlci4gCiogICAgICAgIFJlYWRzIG9mIHRoaXMgcmVnaXN0ZXIgd2lsbCByZXR1cm4gdGhlIGFjdHVhbCwgcmVhbC10aW1lLCBkYXRhIHRoYXQgaXMgCiogICAgICAgIGFwcGVhcmluZyBvbiB0aGUgR1BJT5JzIHBpbi4KKiAgICAgICAgV2hlbiBhIEdQSU+ScyBiaXQgaXMgc2V0IHRvIGJlIGFuIG91dHB1dCwgZGF0YSB3cml0dGVuIHRvIHRoaXMgYml0IHdpbGwgZ28gCiogICAgICAgIHRvIGEgaG9sZGluZyByZWdpc3RlciBhbmQgd2lsbCBhcHBlYXIgb24gdGhlIEdQSU+ScyBwaW4uIFJlYWRzIG9mIHRoaXMgcmVnaXN0ZXIgCiogICAgICAgIHdpbGwgcmV0dXJuIHRoZSBhY3R1YWwsIHJlYWwtdGltZSwgZGF0YSB0aGF0IGlzIGFwcGVhcmluZyBvbiB0aGUgR1BJT5JzIHBpbiAKKiAgICAgICAgKHdoaWNoIGluIHRoaXMgY2FzZSBzaG91bGQgYmUgdGhlIGRhdGEgd3JpdHRlbiwgYnV0IGlmIGl0cyBpc26SdCB0aGF0IHdvdWxkIAoqICAgICAgICBiZSBhbiBpbmRpY2F0aW9uIG9mIGEgY29uZmxpY3QpLgoqICAgICAgICBXaGVuIGEgcGluknMgZGlyZWN0aW9uIGNoYW5nZXMgZnJvbSBpbnB1dCB0byBvdXRwdXQsIHRoZSBkYXRhIGxhc3Qgd3JpdHRlbiAKKiAgICAgICAgdG8gdGhlIGhvbGRpbmcgcmVnaXN0ZXIgYXBwZWFycyBvbiB0aGUgR1BJT5JzIHBpbgoqICAgICAgICBHZW5lcmFsIFB1cnBvc2UgSW5wdXQgT3V0cHV0IGRhdGEgYml0cyBhcmU6CiogICAgICAgIEJpdCA2IC0gR1RfR1BJT19CSVRfNgoqICAgICAgICBCaXQgNSAtIEdUX0dQSU9fQklUXzUKKiAgICAgICAgQml0IDQgLSBHVF9HUElPX0JJVF80CiogICAgICAgIEJpdCAzIC0gR1RfR1BJT19CSVRfMwoqICAgICAgICBCaXQgMiAtIEdUX0dQSU9fQklUXzIKKiAgICAgICAgQml0IDEgLSBHVF9HUElPX0JJVF8xCiogICAgICAgIEJpdCAwIC0gR1RfR1BJT19CSVRfMAoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgZGF0YSAtIE9SIFtHVF9HUElPX0JJVF94XQoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEdwaW9EYXRhCigKICAgIElOICBHVF9RRF9ERVYgICAgICAgICAqZGV2LAogICAgSU4gIEdUX1UzMiAgICAgICAgICAgICpkYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRDb25maWdEYXRhCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgR2V0IFJlc2V0IENvbmZpZ3VyYXRpb24gUGluIERhdGEgMC0zLiAKKiAgICAgICAgVGhlc2UgcmVnaXN0ZXJzIHJldHVybiB0aGUgdmFsdWVzIG9ic2VydmVkIGFmdGVyIGEgaGFyZHdhcmUgUmVzZXQgb24gdGhlIAoqICAgICAgICBsaXN0ZWQgQ09ORklHIGRhdGEgbGlzdGVkIGJlbG93LgoqICAgICAgICAgICAgQ29uZmlnIGRhdGEgMDoKKiAgICAgICAgICAgICAgQml0ICAgIENvbmZpZyAgICBQaW4ncyBQcmltYXJ5IE5hbWUKKiAgICAgICAgICAgICAgICAwICAgIFVTRVJbMF0gICAgICAgIFA2X09VVERbNV0KKiAgICAgICAgICAgICAgICAxICAgIFVTRVJbMV0gICAgICAgIFA2X09VVERbNl0KKiAgICAgICAgICAgICAgICAyICAgIFVTRVJbMl0gICAgICAgIFA2X09VVERbN10KKiAgICAgICAgICAgICAgICAzICAgIEFERFJbMF0gICAgICAgIFA1X09VVERbMF0KKiAgICAgICAgICAgICAgICA0ICAgIEFERFJbMV0gICAgICAgIFA1X09VVERbNV0KKiAgICAgICAgICAgICAgICA1ICAgIEFERFJbMl0gICAgICAgIFA1X09VVERbNl0KKiAgICAgICAgICAgICAgICA2ICAgIEFERFJdM10gICAgICAgIFA1X09VVERbN10KKiAgICAgICAgICAgICAgICA3ICAgIEFERFJbNF0gICAgICAgIFA1X09VVERbMV0KKiAgICAgICAgICAgIENvbmZpZyBkYXRhIDE6CiogICAgICAgICAgICAgICAgMCAgICBMRURfU0VMWzBdICAgIFAxX0xFRAoqICAgICAgICAgICAgICAgIDEgICAgTEVEX1NFTFsxXSAgICBQMl9MRUQKKiAgICAgICAgICAgICAgICAyICAgIDRDT0wgUDNfTEVECiogICAgICAgICAgICAgICAgMyAgICBOb3JtQ3ggICAgICAgIFA0X0xFRAoqICAgICAgICAgICAgICAgIDQgICAgSnVtYm8gICAgICAgIFAwX0xFRAoqICAgICAgICAgICAgICAgIDUgICAgRUVfV0UgICAgICAgIEVFX0NTL0MyX0xFRAoqICAgICAgICAgICAgICAgIDYgICAgRkRfRkxPVyAgICAgICAgRUVfQ0xLL0MxX0xFRAoqICAgICAgICAgICAgICAgIDcgICAgSERfRkxPVyAgICAgICAgRUVfRElOL0MwX0xFRAoqICAgICAgICAgICAgQ29uZmlnIGRhdGEgMjoKKiAgICAgICAgICAgICAgICAwICAgIFA1X01PREVbMF0gICAgUDVfT1VURFsyXQoqICAgICAgICAgICAgICAgIDEgICAgUDVfTU9ERVsxXSAgICBQNV9PVVREWzNdCiogICAgICAgICAgICAgICAgMiAgICBQNV9NT0RFWzJdICAgIFA1X09VVERbNF0KKiAgICAgICAgICAgICAgICAzICAgIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlCiogICAgICAgICAgICAgICAgNCAgICBQNl9NT0RFWzBdICAgIFA2X09VVERbMl0KKiAgICAgICAgICAgICAgICA1ICAgIFA2X01PREVbMV0gICAgUDZfT1VURFszXQoqICAgICAgICAgICAgICAgIDYgICAgUDZfTU9ERVsyXSAgICBQNl9PVVREWzRdCiogICAgICAgICAgICAgICAgNyAgICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQoqICAgICAgICAgICAgQ29uZmlnIGRhdGEgMzoKKiAgICAgICAgICAgICAgICAwICAgIFJNVV9NT0RFWzBdIFA2X09VVERbMF0KKiAgICAgICAgICAgICAgICAxICAgIFJNVV9NT0RFWzFdIFA2X09VVERbMV0KKiAgICAgICAgICAgICAgICAyICAgIFNfVkRET1NbMF0gICAgUFRQX1RSSUcgCiogICAgICAgICAgICAgICAgMyAgICBDTEsxMjVFTiAgICBDTEsxMjUKKiAgICAgICAgICAgICAgICA0ICAgIFA1X1ZERE9TWzBdIFA1X0dUWENMSwoqICAgICAgICAgICAgICAgIDUgICAgUDVfVkRET1NbMV0gUDVfT1VURU4KKiAgICAgICAgICAgICAgICA2ICAgIFA2X1ZERE9TWzBdIFA1X0dUWENMSwoqICAgICAgICAgICAgICAgIDcgICAgUDZfVkRET1NbMV0gUDZfT1VURU4KKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIGNmZ0RhdCAtIEdUX0NPTkZJR19EVFRBCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0Q29uZmlnRGF0YQooCiAgICBJTiAgR1RfUURfREVWICAgICAgICAgICAgICpkZXYsCiAgICBPVVQgIEdUX0NPTkZJR19EQVRBICAgICAgICAqY2ZnRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0U3luY0VUYWkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBTZXQgU3luY0UgYW5kIFRhaSB0byB0aGUgU2NyYXRjaCBhbmQgTWlzYy4gQ29udHJvbCByZWdpc3RlciA8U3luY0UgYW5kIFRBSSBwYWQ+LgoqCiogSU5QVVRTOgoqICAgICAgICB6cHIgLSBaUFIgZm9yIFN5bmNFIGFuZCBUQUkKKiAgICAgICAgem5yIC0gWk5SIGZvciBTeW5jRSBhbmQgVEFJCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFN5bmNFVGFpCigKICAgIElOICBHVF9RRF9ERVYgICAgICAgICAqZGV2LAogICAgSU4gIEdUX1U4ICAgICAgICAgICAgenByLAogICAgSU4gIEdUX1U4ICAgICAgICAgICAgem5yCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRTeW5jRVRhaQoqCiogREVTQ1JJUFRJT046CiogICAgICAgIEdldCBTeW5jRSBhbmQgVGFpIGZyb20gdGhlIFNjcmF0Y2ggYW5kIE1pc2MgQ29udHJvbCByZWdpc3RlciA8U3luY0UgYW5kIFRBSSBwYWQ+LgoqCiogSU5QVVRTOgoqICAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgenByIC0gWlBSIGZvciBTeW5jRSBhbmQgVEFJCiogICAgICAgIHpuciAtIFpOUiBmb3IgU3luY0UgYW5kIFRBSSoKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRTeW5jRVRhaQooCiAgICBJTiAgR1RfUURfREVWICAgICAgICAgKmRldiwKICAgIE9VVCAgR1RfVTggICAgICAgICAgICAqenByLAogICAgT1VUICBHVF9VOCAgICAgICAgICAgICp6bnIKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFA2X0Nsb2NrCioKKiBERVNDUklQVElPTjoKKiAgICAgICAgU2V0IFA2X2Nsb2NrIHRvIHRoZSBTY3JhdGNoIGFuZCBNaXNjIENvbnRyb2wgcmVnaXN0ZXIgPFA2X0Nsb2NrIHBhZD4uCioKKiBJTlBVVFM6CiogICAgICAgIHpwciAtIFpQUiBmb3IgUDZfQ2xvY2sKKiAgICAgICAgem5yIC0gWk5SIGZvciBQNl9DbG9jawoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRQNl9DbG9jawooCiAgICBJTiAgR1RfUURfREVWICAgICAgICAgKmRldiwKICAgIElOICBHVF9VOCAgICAgICAgICAgIHpwciwKICAgIElOICBHVF9VOCAgICAgICAgICAgIHpucgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0UDZfQ2xvY2sKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldCBQNl9jbG9jayBmcm9tIHRoZSBTY3JhdGNoIGFuZCBNaXNjIENvbnRyb2wgcmVnaXN0ZXIgPFA2X0Nsb2NrIHBhZD4uCioKKiBJTlBVVFM6CiogICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICB6cHIgLSBaUFIgZm9yIFA2X0Nsb2NrCiogICAgICAgIHpuciAtIFpOUiBmb3IgUDZfQ2xvY2sKKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRQNl9DbG9jawooCiAgICBJTiAgR1RfUURfREVWICAgICAgICAgKmRldiwKICAgIE9VVCAgR1RfVTggICAgICAgICAgICAqenByLAogICAgT1VUICBHVF9VOCAgICAgICAgICAgICp6bnIKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFA1X0Nsb2NrCioKKiBERVNDUklQVElPTjoKKiAgICAgICBTZXQgUDVfY2xvY2sgdG8gdGhlIFNjcmF0Y2ggYW5kIE1pc2MgQ29udHJvbCByZWdpc3RlciA8UDVfQ2xvY2sgcGFkPi4KKgoqIElOUFVUUzoKKiAgICAgICAgenByIC0gWlBSIGZvciBQNV9DbG9jawoqICAgICAgICB6bnIgLSBaTlIgZm9yIFA1X0Nsb2NrCioKKiBPVVRQVVRTOgoqICAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFA1X0Nsb2NrCigKICAgIElOICBHVF9RRF9ERVYgICAgICAgICAqZGV2LAogICAgSU4gIEdUX1U4ICAgICAgICAgICAgenByLAogICAgSU4gIEdUX1U4ICAgICAgICAgICAgem5yCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRQNV9DbG9jawoqCiogREVTQ1JJUFRJT046CiogICAgICAgR2V0IFA1X2Nsb2NrIGZyb20gdGhlIFNjcmF0Y2ggYW5kIE1pc2MgQ29udHJvbCByZWdpc3RlciA8UDVfQ2xvY2sgcGFkPi4KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIHpwciAtIFpQUiBmb3IgUDVfQ2xvY2sKKiAgICAgICAgem5yIC0gWk5SIGZvciBQNV9DbG9jawoqCiogUkVUVVJOUzoKKiAgICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKiAgICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFA1X0Nsb2NrCigKICAgIElOICBHVF9RRF9ERVYgICAgICAgICAqZGV2LAogICAgT1VUICBHVF9VOCAgICAgICAgICAgICp6cHIsCiAgICBPVVQgIEdUX1U4ICAgICAgICAgICAgKnpucgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0RUVQUk9NCioKKiBERVNDUklQVElPTjoKKiAgICAgICBTZXQgRUVQUk9NIGN5Y2xlIHRvIHRoZSBTY3JhdGNoIGFuZCBNaXNjIENvbnRyb2wgcmVnaXN0ZXIgPEVFUFJPTSBwYWQ+LgoqCiogSU5QVVRTOgoqICAgICAgICBkc20gLSBEU00gZm9yIEVFUFJPTSBjeWNsZQoqICAgICAgICB6cHIgLSBaUFIgZm9yIEVFUFJPTSBjeWNsZQoqICAgICAgICB6bnIgLSBaTlIgZm9yIEVFUFJPTSBjeWNsZQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgICBHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCiogICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRFRVBST00KKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAgICpkZXYsCiAgICBJTiAgR1RfVTggICAgICAgICAgICBkc20sCiAgICBJTiAgR1RfVTggICAgICAgICAgICB6cHIsCiAgICBJTiAgR1RfVTggICAgICAgICAgICB6bnIKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEVFUFJPTQoqCiogREVTQ1JJUFRJT046CiogICAgICAgR2V0IEVFUFJPTSBjeWNsZSB0byB0aGUgU2NyYXRjaCBhbmQgTWlzYyBDb250cm9sIHJlZ2lzdGVyIDxFRVBST00gcGFkPi4KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGRzbSAtIERTTSBmb3IgRUVQUk9NIGN5Y2xlCiogICAgICAgIHpwciAtIFpQUiBmb3IgRUVQUk9NIGN5Y2xlCiogICAgICAgIHpuciAtIFpOUiBmb3IgRUVQUk9NIGN5Y2xlCioKKiBSRVRVUk5TOgoqICAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqICAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0RUVQUk9NCigKICAgIElOICBHVF9RRF9ERVYgICAgICAgICAqZGV2LAogICAgT1VUICBHVF9VOCAgICAgICAgICAgICpkc20sCiAgICBPVVQgIEdUX1U4ICAgICAgICAgICAgKnpwciwKICAgIE9VVCAgR1RfVTggICAgICAgICAgICAqem5yCik7CgoKLyogZ3RBZHZWY3QuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmN0R2V0QWR2Q2FibGVEaWFnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcGVyZm9ybSB0aGUgYWR2YW5jZWQgdmlydHVhbCBjYWJsZSB0ZXN0IGZvciB0aGUgcmVxdWVzdGVkCiogICAgICAgcG9ydCBhbmQgcmV0dXJucyB0aGUgdGhlIHN0YXR1cyBwZXIgTURJIHBhaXIuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgbW9kZSAtIGFkdmFuY2UgVkNUIG1vZGUgKGVpdGhlciBGaXJzdCBQZWFrIG9yIE1heGltdW0gUGVhaykKKgoqIE9VVFBVVFM6CiogICAgICAgY2FibGVTdGF0dXMgLSB0aGUgcG9ydCBjb3BwZXIgY2FibGUgc3RhdHVzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgSW50ZXJuYWwgR2lnYWJpdCBQaHlzIGluIDg4RTYxNjUgZmFtaWx5IGFuZCA4OEU2MzUxIGZhbWlseSBkZXZpY2VzCiogICAgICAgIGFyZSBzdXBwb3J0aW5nIHRoaXMgQVBJLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmN0R2V0QWR2Q2FibGVEaWFnCigKICAgIElOICBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIElOICBHVF9BRFZfVkNUX01PREUgbW9kZSwKICAgIE9VVCBHVF9BRFZfQ0FCTEVfU1RBVFVTICpjYWJsZVN0YXR1cwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmN0R2V0QWR2RXh0ZW5kZWRTdGF0dXMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgICBUaGlzIHJvdXRpbmUgcmV0cmlldmVzIGV4dGVuZGVkIGNhYmxlIHN0YXR1cywgc3VjaCBhcyBQYWlyIFBvbG9hcml0eSwKKiAgICAgICAgUGFpciBTd2FwLCBhbmQgUGFpciBTa2V3LiBOb3RlIHRoYXQgdGhpcyByb3V0aW5lIHdpbGwgYmUgc3VjY2VzcyBvbmx5CiogICAgICAgIGlmIDEwMDBCYXNlLVQgTGluayBpcyB1cC4KKiAgICAgICAgRFNQIGJhc2VkIGNhYmxlIGxlbmd0aCBpcyBhbHNvIHByb3ZpZGVkLgoqCiogSU5QVVRTOgoqICAgICAgIGRldiAgLSBwb2ludGVyIHRvIEdUIGRyaXZlciBzdHJ1Y3R1cmUgcmV0dXJuZWQgZnJvbSBtZExvYWREcml2ZXIKKiAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgZXh0ZW5kZWRTdGF0dXMgLSB0aGUgZXh0ZW5kZWQgY2FibGUgc3RhdHVzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgIFN1cHBvcnRpbmcgRGV2aWNlIGxpc3Q6CiogICAgICAgICAgIDg4RTExMTEsIDg4RTExMTIsIDg4RTExNDF+NiwgODhFMTE0OSwgYW5kIEludGVybmFsIEdpZ2FiaXQgUGh5cyAKKiAgICAgICAgICAgIGluIDg4RTYxNjUgZmFtaWx5IGFuZCA4OEU2MzUxIGZhbWlseSBkZXZpY2VzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2Y3RHZXRBZHZFeHRlbmRlZFN0YXR1cwooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgcG9ydCwKICAgIE9VVCBHVF9BRFZfRVhURU5ERURfU1RBVFVTICpleHRlbmRlZFN0YXR1cwopOwoKI2lmZGVmIENPTkZJR19BVkJfRlBHQQoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwR2V0RlBHQUludFN0YXR1cwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgaW50ZXJydXB0IHN0YXR1cyBvZiBQVFAgbG9naWMuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIHB0cEludCAgICAtIFBUUCBJbnQgU3RhdHVzCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwR2V0RlBHQUludFN0YXR1cwooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgT1VUIEdUX1UzMiAgICAgICAgKnB0cEludAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0RlBHQUludFN0YXR1cwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgaW50ZXJydXB0IHN0YXR1cyBvZiBQVFAgbG9naWMuCioKKiBJTlBVVFM6CiogICAgcHRwSW50ICAgIC0gUFRQIEludCBTdGF0dXMKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRGUEdBSW50U3RhdHVzCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBPVVQgR1RfVTMyICAgIHB0cEludAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0RlBHQUludEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZW5hYmxlcyBQVFAgaW50ZXJydXB0LgoqCiogSU5QVVRTOgoqICAgICAgICBwdHBJbnQgICAgLSBQVFAgSW50IFN0YXR1cyAoMSB0byBlbmFibGUsIDAgdG8gZGlzYWJsZSkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRGUEdBSW50RW4KKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9VMzIgICAgICAgIHB0cEludAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwR2V0Q2xvY2tTb3VyY2UKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIFBUUCBDbG9jayBzb3VyY2Ugc2V0dXAuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGNsa1NyYyAgICAtIFBUUCBjbG9jayBzb3VyY2UgKEEvRCBEZXZpY2Ugb3IgRlBHQSkKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRDbG9ja1NvdXJjZQooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgT1VUIEdUX1BUUF9DTE9DS19TUkMgICAgICpjbGtTcmMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFNldENsb2NrU291cmNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBQVFAgQ2xvY2sgc291cmNlIHNldHVwLgoqCiogSU5QVVRTOgoqICAgICAgICBjbGtTcmMgICAgLSBQVFAgY2xvY2sgc291cmNlIChBL0QgRGV2aWNlIG9yIEZQR0EpCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwU2V0Q2xvY2tTb3VyY2UKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9QVFBfQ0xPQ0tfU1JDICAgICBjbGtTcmMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cEdldFA5TW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgUG9ydCA5IE1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIG1vZGUgLSBQb3J0IDkgbW9kZSAoR1RfUFRQX1A5X01PREUgZW51bSB0eXBlKQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cEdldFA5TW9kZQooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgT1VUIEdUX1BUUF9QOV9NT0RFICAgICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0UDlNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBQb3J0IDkgTW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICAgbW9kZSAtIFBvcnQgOSBtb2RlIChHVF9QVFBfUDlfTU9ERSBlbnVtIHR5cGUpCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwU2V0UDlNb2RlCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfUFRQX1A5X01PREUgICAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFJlc2V0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcGVyZm9ybXMgc29mdHdhcmUgcmVzZXQgZm9yIFBUUCBsb2dpYy4KKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBSZXNldAooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRDeWNsZUFkanVzdEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgY2hlY2tzIGlmIFBUUCBEdXR5IEN5Y2xlIEFkanVzdG1lbnQgaXMgZW5hYmxlZC4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICAgYWRqRW4gICAgLSBHVF9UUlVFIGlmIGVuYWJsZWQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cEdldEN5Y2xlQWRqdXN0RW4KKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIE9VVCBHVF9CT09MICAgICAgICAqYWRqRW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFNldEN5Y2xlQWRqdXN0RW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzL2Rpc2FibGVzIFBUUCBEdXR5IEN5Y2xlIEFkanVzdG1lbnQuCioKKiBJTlBVVFM6CiogICAgICAgIGFkakVuICAgIC0gR1RfVFJVRSB0byBlbmFibGUsIEdUX0ZBTFNFIHRvIGRpc2FibGUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRDeWNsZUFkanVzdEVuCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfQk9PTCAgICAgICAgYWRqRW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cEdldEN5Y2xlQWRqdXN0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBjbG9jayBkdXR5IGN5Y2xlIGFkanVzdG1lbnQgdmFsdWUuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIGFkaiAgICAtIGFkanVzdG1lbnQgdmFsdWUgKEdUX1BUUF9DTE9DS19BREpVU1RNRU5UIHN0cnVjdHVyZSkKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRDeWNsZUFkanVzdAooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgT1VUIEdUX1BUUF9DTE9DS19BREpVU1RNRU5UICAgICphZGoKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFNldEN5Y2xlQWRqdXN0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBjbG9jayBkdXR5IGN5Y2xlIGFkanVzdG1lbnQgdmFsdWUuCioKKiBJTlBVVFM6CiogICAgICAgIGFkaiAgICAtIGFkanVzdG1lbnQgdmFsdWUgKEdUX1BUUF9DTE9DS19BREpVU1RNRU5UIHN0cnVjdHVyZSkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRDeWNsZUFkanVzdAooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX1BUUF9DTE9DS19BREpVU1RNRU5UICAgICphZGoKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cEdldFBMTEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgY2hlY2tzIGlmIFBMTCBpcyBlbmFibGVkLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgICBlbiAgICAgICAgLSBHVF9UUlVFIGlmIGVuYWJsZWQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqICAgICAgICBmcmVxU2VsICAgIC0gUExMIEZyZXF1ZW5jeSBTZWxlY3Rpb24gKGRlZmF1bHQgMHgzIC0gMjIuMzY4TUh6KQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIFBMTCBGcmVxdWVuY2Ugc2VsZWN0aW9uIGlzIGJhc2VkIG9uIHRoZSBDbG9jayBSZWNvdmVyeSBQTEwgZGV2aWNlLgoqICAgICAgICBJRFQgTUsxNTc1LTAxIGlzIHRoZSBkZWZhdWx0IFBMTCBkZXZpY2UuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRQTExFbgooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgT1VUIEdUX0JPT0wgICAgICAgICplbiwKICAgIE9VVCBHVF9VMzIgICAgICAgICpmcmVxU2VsCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBTZXRQTExFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGVuYWJsZXMvZGlzYWJsZXMgUExMIGRldmljZS4KKgoqIElOUFVUUzoKKiAgICAgICAgZW4gICAgICAgIC0gR1RfVFJVRSB0byBlbmFibGUsIEdUX0ZBTFNFIHRvIGRpc2FibGUKKiAgICAgICAgZnJlcVNlbCAgICAtIFBMTCBGcmVxdWVuY3kgU2VsZWN0aW9uIChkZWZhdWx0IDB4MyAtIDIyLjM2OE1IeikKKiAgICAgICAgICAgICAgICAgIE1lYW5pbmdmdWwgb25seSB3aGVuIGVuYWJsaW5nIFBMTCBkZXZpY2UKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBQTEwgRnJlcXVlbmNlIHNlbGVjdGlvbiBpcyBiYXNlZCBvbiB0aGUgQ2xvY2sgUmVjb3ZlcnkgUExMIGRldmljZS4KKiAgICAgICAgSURUIE1LMTU3NS0wMSBpcyB0aGUgZGVmYXVsdCBQTEwgZGV2aWNlLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwU2V0UExMRW4KKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9CT09MICAgICAgICBlbiwKICAgIElOICBHVF9VMzIgICAgICAgIGZyZXFTZWwKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cEdldEREU1JlZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgRERTIHJlZ2lzdGVyIGRhdGEuCioKKiBJTlBVVFM6CiogICAgZGRzUmVnICAgIC0gRERTIFJlZ2lzdGVyCioKKiBPVVRQVVRTOgoqICAgIGRkc0RhdGEgICAgLSByZWdpc3RlciBkYXRhCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwR2V0RERTUmVnCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfVTMyICAgIGRkc1JlZywKICAgIE9VVCBHVF9VMzIgICAgKmRkc0RhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFNldEREU1JlZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgRERTIHJlZ2lzdGVyIGRhdGEuCiogICAgRERTIHJlZ2lzdGVyIGRhdGEgd3JpdHRlbiBieSB0aGlzIEFQSSBhcmUgbm90IGFmZmVjdGVkIHVudGlsIGdwdHBVcGRhdGVERFNSZWcgQVBJIGlzIGNhbGxlZC4KKgoqIElOUFVUUzoKKiAgICBkZHNSZWcgICAgLSBERFMgUmVnaXN0ZXIKKiAgICBkZHNEYXRhICAgIC0gcmVnaXN0ZXIgZGF0YQoqCiogT1VUUFVUUzoKKiAgICBub25lCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwU2V0RERTUmVnCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfVTMyICAgIGRkc1JlZywKICAgIElOICBHVF9VMzIgICAgZGRzRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwVXBkYXRlRERTUmVnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgdXBkYXRlcyBERFMgcmVnaXN0ZXIgZGF0YS4KKiAgICBERFMgcmVnaXN0ZXIgZGF0YSB3cml0dGVuIGJ5IGdwdHBTZXRERFNSZWcgYXJlIG5vdCBhZmZlY3RlZCB1bnRpbCB0aGlzIEFQSSBpcyBjYWxsZWQuCioKKiBJTlBVVFM6CiogICAgbm9uZQoqCiogT1VUUFVUUzoKKiAgICBub25lCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwVXBkYXRlRERTUmVnCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFNldEFERlJlZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgQURGNDE1NiByZWdpc3RlciBkYXRhLgoqCiogSU5QVVRTOgoqICAgIGFkZkRhdGEgICAgLSByZWdpc3RlciBkYXRhCioKKiBPVVRQVVRTOgoqICAgIG5vbmUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRBREZSZWcKKAogICAgSU4gIEdUX1FEX0RFViAgICAgKmRldiwKICAgIElOICBHVF9VMzIgICAgYWRmRGF0YQopOwojZW5kaWYgIC8qICBDT05GSUdfQVZCX0ZQR0EgKi8KCi8qIGd0VENBTS5jICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RjYW1GbHVzaEFsbAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGlzIHRvIGZsdXNoIGFsbCBlbnRyaWVzLiBBIEZsdXNoIEFsbCBjb21tYW5kIHdpbGwgaW5pdGlhbGl6ZSAKKiAgICAgICBUQ0FNIFBhZ2VzIDAgYW5kIDEsIG9mZnNldHMgMHgwMiB0byAweDFCIHRvIDB4MDAwMCwgYW5kIFRDQU0gUGFnZSAyIG9mZnNldAoqICAgICAgIDB4MDIgdG8gMHgwNSB0byAweDAwMDAgZm9yIGFsbCBUQ0FNIGVudHJpZXMgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgVENBTSAKKiAgICAgICBQYWdlIDAgb2Zmc2V0IDB4MDIgd2lsbCBiZSBpbml0aWFsaXplZCB0byAweDAwRkYuCioKKgoqIElOUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndGNhbUZsdXNoQWxsCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RjYW1GbHVzaEVudHJ5CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgaXMgdG8gZmx1c2ggYSBzaW5nbGUgZW50cnkuIEEgRmx1c2ggYSBzaW5nbGUgVENBTSBlbnRyeSBjb21tYW5kIAoqICAgICAgIHdpbGwgd3JpdGUgdGhlIHNhbWUgdmFsdWVzIHRvIGEgVENBTSBlbnRyeSBhcyBhIEZsdXNoIEFsbCBjb21tYW5kLCBidXQgaXQgaXMKKiAgICAgICBkb25lIHRvIHRoZSBzZWxlY3RlZCBzaW5nbGUgVENBTSBlbnRyeSBvbmx5LgoqCioKKiBJTlBVVFM6CiogICAgICAgIHRjYW1Qb2ludGVyIC0gcG9pbnRlciB0byB0aGUgZGVzaXJlZCBlbnRyeSBvZiBUQ0FNICgwIH4gMjU0KQoqCiogT1VUUFVUUzoKKiAgICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd0Y2FtRmx1c2hFbnRyeQooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX1UzMiAgICAgICAgdGNhbVBvaW50ZXIKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RjYW1Mb2FkRW50cnkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBsb2FkcyBhIFRDQU0gZW50cnkuCiogICAgCVRoZSBsb2FkIHNlcXVlbmNlIG9mIFRDQU0gZW50cnkgaXMgY3JpdGljYWwuIEVhY2ggVENBTSBlbnRyeSBpcyBtYWRlIHVwIG9mCiogICAgICAgMyBwYWdlcyBvZiBkYXRhLiBBbGwgMyBwYWdlcyBuZWVkIHRvIGxvYWRlZCBpbiBhIHBhcnRpY3VsYXIgb3JkZXIgZm9yIHRoZSBUQ0FNIAoqICAgICAgIHRvIG9wZXJhdGUgY29ycmVjdGx5IHdoaWxlIGZyYW1lcyBhcmUgZmxvd2luZyB0aHJvdWdoIHRoZSBzd2l0Y2guIAoqICAgICAgIElmIHRoZSBlbnRyeSBpcyBjdXJyZW50bHkgdmFsaWQsIGl0IG11c3QgZmlyc3QgYmUgZmx1c2hlZC4gVGhlbiBwYWdlIDIgbmVlZHMgCiogICAgICAgdG8gYmUgbG9hZGVkIGZpcnN0LCBmb2xsb3dlZCBieSBwYWdlIDEgYW5kIHRoZW4gZmluYWxseSBwYWdlIDAuIAoqICAgICAgIEVhY2ggcGFnZSBsb2FkIHJlcXVpcmVzIGl0cyBvd24gd3JpdGUgVENBTU9wIHdpdGggdGhlc2UgVENBTSBwYWdlIGJpdHMgc2V0IAoqICAgICAgIGFjY29yZGluZ2x5LiAKKgoqIElOUFVUUzoKKiAgICAgICAgdGNhbVBvaW50ZXIgLSBwb2ludGVyIHRvIHRoZSBkZXNpcmVkIGVudHJ5IG9mIFRDQU0gKDAgfiAyNTQpCiogICAgICAgIHRjYW1EYXRhICAgIC0gVGNhbSBlbnRyeSBEYXRhCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgIEdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndGNhbUxvYWRFbnRyeQooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX1UzMiAgICAgICAgdGNhbVBvaW50ZXIsCiAgICBJTiAgR1RfVENBTV9EQVRBICAgICAgICAqdGNhbURhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RjYW1QdXJneUVudHJ5CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgUHVyZ3kgYSBUQ0FNIGVudHJ5LgoqCiogSU5QVVRTOgoqICAgICAgICB0Y2FtUG9pbnRlciAtIHBvaW50ZXIgdG8gdGhlIGRlc2lyZWQgZW50cnkgb2YgVENBTSAoMCB+IDI1NCkKKiAgICAgICAgdGNhbURhdGEgICAgLSBUY2FtIGVudHJ5IERhdGEKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd0Y2FtUHVyZ3lFbnRyeQooCiAgICBJTiAgR1RfUURfREVWICAgICAqZGV2LAogICAgSU4gIEdUX1UzMiAgICAgICAgdGNhbVBvaW50ZXIsCiAgICBJTiAgR1RfVENBTV9EQVRBICAgICAgICAqdGNhbURhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RjYW1SZWFkVENBTURhdGEKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBsb2FkcyB0aGUgZ2xvYmFsIDMgb2Zmc2V0cyAweDAyIHRvIDB4MUIgcmVnaXN0ZXJzIHdpdGggCiogICAgICAgdGhlIGRhdGEgZm91bmQgaW4gdGhlIFRDQU0gZW50cnkgYW5kIGl0cyBUQ0FNIHBhZ2UgcG9pbnRlZCB0byBieSB0aGUgVENBTQoqICAgICAgIGVudHJ5IGFuZCBUQ0FNIHBhZ2UgYml0cyBvZiB0aGlzIHJlZ2lzdGVyIChiaXRzIDc6MCBhbmQgMTE6MTAgcmVzcGVjdGl2ZWx5LgoqCioKKiBJTlBVVFM6CiogICAgICAgIHRjYW1Qb2ludGVyIC0gcG9pbnRlciB0byB0aGUgZGVzaXJlZCBlbnRyeSBvZiBUQ0FNICgwIH4gMjU0KQoqCiogT1VUUFVUUzoKKiAgICAgICAgdGNhbURhdGEgICAgLSBUY2FtIGVudHJ5IERhdGEKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd0Y2FtUmVhZFRDQU1EYXRhCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfVTMyICAgICAgICB0Y2FtUG9pbnRlciwKICAgIE9VVCBHVF9UQ0FNX0RBVEEgICAgICAgICp0Y2FtRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndGNhbUdldE5leHRUQ0FNRGF0YQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lICBmaW5kcyB0aGUgbmV4dCBoaWdoZXIgVENBTSBFbnRyeSBudW1iZXIgdGhhdCBpcyB2YWxpZCAoaS5lLiwKKiAgICAgICBhbnkgZW50cnkgd2hvc2UgUGFnZSAwIG9mZnNldCAweDAyIGlzIG5vdCBlcXVhbCB0byAweDAwRkYpLiBUaGUgVENBTSBFbnRyeSAKKiAgICAgICByZWdpc3RlciAoYml0cyA3OjApIGlzIHVzZWQgYXMgdGhlIFRDQU0gZW50cnkgdG8gc3RhcnQgZnJvbS4gVG8gZmluZCAKKiAgICAgICB0aGUgbG93ZXN0IG51bWJlciBUQ0FNIEVudHJ5IHRoYXQgaXMgdmFsaWQsIHN0YXJ0IHRoZSBHZXQgTmV4dCBvcGVyYXRpb24gCiogICAgICAgd2l0aCBUQ0FNIEVudHJ5IHNldCB0byAweEZGLgoqCioKKiBJTlBVVFM6CiogICAgICAgIHRjYW1Qb2ludGVyIC0gcG9pbnRlciB0byB0aGUgZGVzaXJlZCBlbnRyeSBvZiBUQ0FNICgwIH4gMjU1KQoqCiogT1VUUFVUUzoKKiAgICAgICAgdGNhbURhdGEgICAgLSBUY2FtIGVudHJ5IERhdGEKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICAgR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd0Y2FtR2V0TmV4dFRDQU1EYXRhCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfVTMyICAgICAgICB0Y2FtUG9pbnRlciwKICAgIE9VVCBHVF9UQ0FNX0RBVEEgICAgICAgICp0Y2FtRGF0YQopOwoKCiNpZmRlZiBfX2NwbHVzcGx1cwp9CiNlbmRpZgoKI2VuZGlmIC8qIF9fbXNBcGlfaCAqLwo=