I2luY2x1ZGUgPENvcHlyaWdodC5oPgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogbXNBcGlQcm90b3R5cGUuaAoqCiogREVTQ1JJUFRJT046CiogICAgICAgQVBJIFByb3RvdHlwZXMgZm9yIFF1YXJ0ZXJEZWNrIERldmljZQoqCiogREVQRU5ERU5DSUVTOgoqCiogRklMRSBSRVZJU0lPTiBOVU1CRVI6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiNpZm5kZWYgX19tc0FwaVByb3RvdHlwZV9oCiNkZWZpbmUgX19tc0FwaVByb3RvdHlwZV9oCgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIiB7CiNlbmRpZgoKCi8qIGd0QnJnRmRiLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2ZkYlNldEF0dVNpemUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFNldHMgdGhlIE1hYyBhZGRyZXNzIHRhYmxlIHNpemUuCioKKiBJTlBVVFM6CiogICAgICAgc2l6ZSAgICAtIE1hYyBhZGRyZXNzIHRhYmxlIHNpemUuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYlNldEF0dVNpemUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBBVFVfU0laRSBzaXplCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0QWdpbmdUaW1lUmFuZ2UKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgdGhlIG1heGltYWwgYW5kIG1pbmltdW0gYWdlIHRpbWVzIHRoYXQgdGhlIGhhcmR3YXJlIGNhbiBzdXBwb3J0LgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIG1heFRpbWVvdXQgLSBtYXggYWdpbmcgdGltZSBpbiBzZWNvdW5kcy4KKiAgICAgICBtaW5UaW1lb3V0IC0gbWluIGFnaW5nIHRpbWUgaW4gc2Vjb3VuZHMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJHZXRBZ2luZ1RpbWVSYW5nZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIE9VVCBHVF9VMzIgKm1heFRpbWVvdXQsCiAgICBPVVQgR1RfVTMyICptaW5UaW1lb3V0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJHZXRBZ2luZ1RpbWVvdXQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgdGhlIHRpbWVvdXQgcGVyaW9kIGluIHNlY29uZHMgZm9yIGFnaW5nIG91dCBkeW5hbWljYWxseSBsZWFybmVkCiogICAgICAgZm9yd2FyZGluZyBpbmZvcm1hdGlvbi4gVGhlIHJldHVybmVkIHZhbHVlIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgdGhlIHZhbHVlCioJCXByb2dyYW1tZWQgd2l0aCA8Z2ZkYlNldEFnaW5nVGltZW91dD4uIFBsZWFzZSByZWZlciB0byB0aGUgZGVzY3JpcHRpb24gb2YKKgkJPGdmZGJTZXRBZ2luZ1RpbWVvdXQ+LgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIHRpbWVvdXQgLSBhZ2luZyB0aW1lIGluIHNlY29uZHMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkdldEFnaW5nVGltZW91dAooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBPVVQgR1RfVTMyICAgICAgICp0aW1lb3V0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJTZXRBZ2luZ1RpbWVvdXQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFNldHMgdGhlIHRpbWVvdXQgcGVyaW9kIGluIHNlY29uZHMgZm9yIGFnaW5nIG91dCBkeW5hbWljYWxseSBsZWFybmVkCiogICAgICAgZm9yd2FyZGluZyBpbmZvcm1hdGlvbi4gVGhlIHN0YW5kYXJkIHJlY29tbWVuZHMgMzAwIHNlYy4KKgkJU3VwcG9ydGVkIGFnaW5nIHRpbWVvdXQgdmFsdWVzIGFyZSBtdWx0aXBsZSBvZiB0aW1lLWJhc2UsIHdoZXJlIHRpbWUtYmFzZQoqCQlpcyBlaXRoZXIgMTUgb3IgMTYgc2Vjb25kcywgZGVwZW5kaW5nIG9uIHRoZSBTd2l0Y2ggZGV2aWNlLiBGb3IgZXhhbXBsZSwKKgkJODhFNjA2MyB1c2VzIHRpbWUtYmFzZSAxNiwgYW5kIHNvIHN1cHBvcnRlZCBhZ2luZyB0aW1lb3V0cyBhcmUgMCwxNiwzMiwKKgkJNDgsLi4uLCBhbmQgNDA4MC4gSWYgdW5zdXBwb3J0ZWQgdGltZW91dCB2YWx1ZSAoYmlnZ2VyIHRoYW4gMTYpIGlzIHVzZWQsIAoqCQl0aGUgdmFsdWUgd2lsbCBiZSByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IHN1cHBvcnRlZCB2YWx1ZSBzbWFsbGVyIHRoYW4gdGhlIAoqCQlnaXZlbiB0aW1lb3V0LiBJZiB0aGUgZ2l2ZW4gdGltZW91dCBpcyBsZXNzIHRoYW4gMTYsIG1pbmltdW0gdGltZW91dCB2YWx1ZQoqCQkxNiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4gRS5nLikgMzUgYmVjb21lcyAzMiBhbmQgNSBiZWNvbWVzIDE2LgoqCQk8Z2ZkYkdldEFnaW5nVGltZVJhbmdlPiBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSB0aW1lLWJhc2UuCioKKiBJTlBVVFM6CiogICAgICAgdGltZW91dCAtIGFnaW5nIHRpbWUgaW4gc2Vjb25kcy4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiU2V0QWdpbmdUaW1lb3V0CigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfVTMyIHRpbWVvdXQKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0QXR1RHluYW1pY0NvdW50CioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXRzIHRoZSBjdXJyZW50IG51bWJlciBvZiBkeW5hbWljIHVuaWNhc3QgZW50cmllcyBpbiB0aGlzCiogICAgICAgRmlsdGVyaW5nIERhdGFiYXNlLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIG51bUR5bkVudHJpZXMgLSBudW1iZXIgb2YgZHluYW1pYyBlbnRyaWVzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PX1NVQ0ggLSB2bGFuIGRvZXMgbm90IGV4aXN0LgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiR2V0QXR1RHluYW1pY0NvdW50CigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgT1VUIEdUX1UzMiAqbnVtRHluRW50cmllcwopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJHZXRBdHVFbnRyeUZpcnN0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXRzIGZpcnN0IGxleGljb2dyYXBoaWMgTUFDIGFkZHJlc3MgZW50cnkgZnJvbSB0aGUgQVRVLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIGF0dUVudHJ5IC0gbWF0Y2ggQWRkcmVzcyB0cmFuc2xhdGUgdW5pdCBlbnRyeS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT19TVUNIIC0gdGFibGUgaXMgZW1wdHkuCioKKiBDT01NRU5UUzoKKiAgICAgICBTZWFyY2ggc3RhcnRzIGZyb20gTWFjWzAwOjAwOjAwOjAwOjAwOjAwXQoqCioJCURCTnVtIGluIGF0dUVudHJ5IC0gCioJCQlBVFUgTUFDIEFkZHJlc3MgRGF0YWJhc2UgbnVtYmVyLiBJZiBtdWx0aXBsZSBhZGRyZXNzIAoqCQkJZGF0YWJhc2VzIGFyZSBub3QgYmVpbmcgdXNlZCwgREJOdW0gc2hvdWxkIGJlIHplcm8uCioJCQlJZiBtdWx0aXBsZSBhZGRyZXNzIGRhdGFiYXNlcyBhcmUgYmVpbmcgdXNlZCwgdGhpcyB2YWx1ZQoqCQkJc2hvdWxkIGJlIHNldCB0byB0aGUgZGVzaXJlZCBhZGRyZXNzIGRhdGFiYXNlIG51bWJlci4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkdldEF0dUVudHJ5Rmlyc3QKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBPVVQgR1RfQVRVX0VOVFJZICAgICphdHVFbnRyeQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJHZXRBdHVFbnRyeU5leHQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgbmV4dCBsZXhpY29ncmFwaGljIE1BQyBhZGRyZXNzIGZyb20gdGhlIHNwZWNpZmllZCBNYWMgQWRkci4KKgoqIElOUFVUUzoKKiAgICAgICBhdHVFbnRyeSAtIHRoZSBNYWMgQWRkcmVzcyB0byBzdGFydCB0aGUgc2VhcmNoLgoqCiogT1VUUFVUUzoKKiAgICAgICBhdHVFbnRyeSAtIG1hdGNoIEFkZHJlc3MgdHJhbnNsYXRlIHVuaXQgZW50cnkuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzLgoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvciBvciBlbnRyeSBkb2VzIG5vdCBleGlzdC4KKiAgICAgICBHVF9OT19TVUNIIC0gbm8gbW9yZSBlbnRyaWVzLgoqCiogQ09NTUVOVFM6CiogICAgICAgU2VhcmNoIHN0YXJ0cyBmcm9tIGF0dS5tYWNBZGRyW3h4Onh4Onh4Onh4Onh4Onh4XSBzcGVjaWZpZWQgYnkgdGhlCiogICAgICAgdXNlci4KKgoqCQlEQk51bSBpbiBhdHVFbnRyeSAtIAoqCQkJQVRVIE1BQyBBZGRyZXNzIERhdGFiYXNlIG51bWJlci4gSWYgbXVsdGlwbGUgYWRkcmVzcyAKKgkJCWRhdGFiYXNlcyBhcmUgbm90IGJlaW5nIHVzZWQsIERCTnVtIHNob3VsZCBiZSB6ZXJvLgoqCQkJSWYgbXVsdGlwbGUgYWRkcmVzcyBkYXRhYmFzZXMgYXJlIGJlaW5nIHVzZWQsIHRoaXMgdmFsdWUKKgkJCXNob3VsZCBiZSBzZXQgdG8gdGhlIGRlc2lyZWQgYWRkcmVzcyBkYXRhYmFzZSBudW1iZXIuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJHZXRBdHVFbnRyeU5leHQKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTk9VVCBHVF9BVFVfRU5UUlkgICphdHVFbnRyeQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJGaW5kQXR1TWFjRW50cnkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEZpbmQgRkRCIGVudHJ5IGZvciBzcGVjaWZpYyBNQUMgYWRkcmVzcyBmcm9tIHRoZSBBVFUuCioKKiBJTlBVVFM6CiogICAgICAgYXR1RW50cnkgLSB0aGUgTWFjIGFkZHJlc3MgdG8gc2VhcmNoLgoqCiogT1VUUFVUUzoKKiAgICAgICBmb3VuZCAgICAtIEdUX1RSVUUsIGlmIHRoZSBhcHByb3ByaWF0ZSBlbnRyeSBleGlzdHMuCiogICAgICAgYXR1RW50cnkgLSB0aGUgZW50cnkgcGFyYW1ldGVycy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MuCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yIG9yIGVudHJ5IGRvZXMgbm90IGV4aXN0LgoqICAgICAgIEdUX05PX1NVQ0ggLSBubyBtb3JlIGVudHJpZXMuCioKKiBDT01NRU5UUzoKKgkJREJOdW0gaW4gYXR1RW50cnkgLSAKKgkJCUFUVSBNQUMgQWRkcmVzcyBEYXRhYmFzZSBudW1iZXIuIElmIG11bHRpcGxlIGFkZHJlc3MgCioJCQlkYXRhYmFzZXMgYXJlIG5vdCBiZWluZyB1c2VkLCBEQk51bSBzaG91bGQgYmUgemVyby4KKgkJCUlmIG11bHRpcGxlIGFkZHJlc3MgZGF0YWJhc2VzIGFyZSBiZWluZyB1c2VkLCB0aGlzIHZhbHVlCioJCQlzaG91bGQgYmUgc2V0IHRvIHRoZSBkZXNpcmVkIGFkZHJlc3MgZGF0YWJhc2UgbnVtYmVyLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiRmluZEF0dU1hY0VudHJ5CigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU5PVVQgR1RfQVRVX0VOVFJZICAqYXR1RW50cnksCiAgICBPVVQgR1RfQk9PTCAgICAgICAgICpmb3VuZAopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJGbHVzaAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGZsdXNoIGFsbCBvciB1bmJsb2NrZWQgYWRkcmVzc2VzIGZyb20gdGhlIE1BQyBBZGRyZXNzCiogICAgICAgVGFibGUuCioKKiBJTlBVVFM6CiogICAgICAgZmx1c2hDbWQgLSB0aGUgZmx1c2ggb3BlcmF0aW9uIHR5cGUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9fUkVTT1VSQ0UgIC0gZmFpbGVkIHRvIGFsbG9jYXRlIGEgdDJjIHN0cnVjdAoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJGbHVzaAooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0ZMVVNIX0NNRCBmbHVzaENtZAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiRmx1c2hJbkRCCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZmx1c2ggYWxsIG9yIHVuYmxvY2tlZCBhZGRyZXNzZXMgZnJvbSB0aGUgcGFydGljdWxhcgoqICAgICAgIEFUVSBEYXRhYmFzZSAoREJOdW0pLiBJZiBtdWx0aXBsZSBhZGRyZXNzIGRhdGFiYXNlcyBhcmUgYmVpbmcgdXNlZCwgdGhpcwoqCQlBUEkgY2FuIGJlIHVzZWQgdG8gZmx1c2ggZW50cmllcyBpbiBhIHBhcnRpY3VsYXIgREJOdW0gZGF0YWJhc2UuCioKKiBJTlBVVFM6CiogICAgICAgZmx1c2hDbWQgLSB0aGUgZmx1c2ggb3BlcmF0aW9uIHR5cGUuCioJCURCTnVtCSAtIEFUVSBNQUMgQWRkcmVzcyBEYXRhYmFzZSBOdW1iZXIuIAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJGbHVzaEluREIKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9GTFVTSF9DTUQgZmx1c2hDbWQsCglJTiBHVF9VMzIgREJOdW0KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2ZkYkFkZE1hY0VudHJ5CioKKiBERVNDUklQVElPTjoKKiAgICAgICBDcmVhdGVzIHRoZSBuZXcgZW50cnkgaW4gTUFDIGFkZHJlc3MgdGFibGUuCioKKiBJTlBVVFM6CiogICAgICAgbWFjRW50cnkgICAgLSBtYWMgYWRkcmVzcyBlbnRyeSB0byBpbnNlcnQgdG8gdGhlIEFUVS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9fUkVTT1VSQ0UgICAgLSBmYWlsZWQgdG8gYWxsb2NhdGUgYSB0MmMgc3RydWN0CiogICAgICAgR1RfT1VUX09GX0NQVV9NRU0gLSBvYU1hbGxvYyBmYWlsZWQKKgoqIENPTU1FTlRTOgoqCQlEQk51bSBpbiBhdHVFbnRyeSAtIAoqCQkJQVRVIE1BQyBBZGRyZXNzIERhdGFiYXNlIG51bWJlci4gSWYgbXVsdGlwbGUgYWRkcmVzcyAKKgkJCWRhdGFiYXNlcyBhcmUgbm90IGJlaW5nIHVzZWQsIERCTnVtIHNob3VsZCBiZSB6ZXJvLgoqCQkJSWYgbXVsdGlwbGUgYWRkcmVzcyBkYXRhYmFzZXMgYXJlIGJlaW5nIHVzZWQsIHRoaXMgdmFsdWUKKgkJCXNob3VsZCBiZSBzZXQgdG8gdGhlIGRlc2lyZWQgYWRkcmVzcyBkYXRhYmFzZSBudW1iZXIuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJBZGRNYWNFbnRyeQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0FUVV9FTlRSWSAqbWFjRW50cnkKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiRGVsTWFjRW50cnkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIERlbGV0ZXMgTUFDIGFkZHJlc3MgZW50cnkuCioKKiBJTlBVVFM6CiogICAgICAgbWFjQWRkcmVzcyAtIG1hYyBhZGRyZXNzLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT19SRVNPVVJDRSAgLSBmYWlsZWQgdG8gYWxsb2NhdGUgYSB0MmMgc3RydWN0CiogICAgICAgR1RfTk9fU1VDSCAgICAgIC0gaWYgc3BlY2lmaWVkIGFkZHJlc3MgZW50cnkgZG9lcyBub3QgZXhpc3QKKgoqIENPTU1FTlRTOgoqICAgICAgIEZvciBTVkwgbW9kZSB2bGFuIElkIGlzIGlnbm9yZWQuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJEZWxNYWNFbnRyeQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0VUSEVSQUREUiAgKm1hY0FkZHJlc3MKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2ZkYkRlbEF0dUVudHJ5CioKKiBERVNDUklQVElPTjoKKiAgICAgICBEZWxldGVzIEFUVSBlbnRyeS4KKgoqIElOUFVUUzoKKiAgICAgICBhdHVFbnRyeSAtIHRoZSBBVFUgZW50cnkgdG8gYmUgZGVsZXRlZC4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9fUkVTT1VSQ0UgIC0gZmFpbGVkIHRvIGFsbG9jYXRlIGEgdDJjIHN0cnVjdAoqICAgICAgIEdUX05PX1NVQ0ggICAgICAtIGlmIHNwZWNpZmllZCBhZGRyZXNzIGVudHJ5IGRvZXMgbm90IGV4aXN0CioKKiBDT01NRU5UUzoKKgkJREJOdW0gaW4gYXR1RW50cnkgLSAKKgkJCUFUVSBNQUMgQWRkcmVzcyBEYXRhYmFzZSBudW1iZXIuIElmIG11bHRpcGxlIGFkZHJlc3MgCioJCQlkYXRhYmFzZXMgYXJlIG5vdCBiZWluZyB1c2VkLCBEQk51bSBzaG91bGQgYmUgemVyby4KKgkJCUlmIG11bHRpcGxlIGFkZHJlc3MgZGF0YWJhc2VzIGFyZSBiZWluZyB1c2VkLCB0aGlzIHZhbHVlCioJCQlzaG91bGQgYmUgc2V0IHRvIHRoZSBkZXNpcmVkIGFkZHJlc3MgZGF0YWJhc2UgbnVtYmVyLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiRGVsQXR1RW50cnkKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9BVFVfRU5UUlkgICphdHVFbnRyeQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiTGVhcm5FbmFibGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEVuYWJsZS9kaXNhYmxlIGF1dG9tYXRpYyBsZWFybmluZyBvZiBuZXcgc291cmNlIE1BQyBhZGRyZXNzZXMgb24gcG9ydAoqICAgICAgIGluZ3Jlc3MuCioKKiBJTlBVVFM6CiogICAgICAgZW4gLSBHVF9UUlVFIGZvciBlbmFibGUgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkxlYXJuRW5hYmxlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfQk9PTCAgZW4KKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJHZXRMZWFybkVuYWJsZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgR2V0IGF1dG9tYXRpYyBsZWFybmluZyBzdGF0dXMgb2YgbmV3IHNvdXJjZSBNQUMgYWRkcmVzc2VzIG9uIHBvcnQgaW5ncmVzcy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lCioKKiBPVVRQVVRTOgoqICAgICAgIGVuIC0gR1RfVFJVRSBpZiBlbmFibGVkICBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJHZXRMZWFybkVuYWJsZQooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIE9VVCBHVF9CT09MICAqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N0cFNldE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBFbmFibGUgdGhlIFNwYW5uaW5nIHRyZWUuCioKKiBJTlBVVFM6CiogICAgICAgZW4gLSBHVF9UUlVFIGZvciBlbmFibGUsIEdUX0ZBTFNFIGZvciBkaXNhYmxlLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgd2hlbiBlbmFibGVkLCB0aGlzIGZ1bmN0aW9uIHNldHMgYWxsIHBvcnQgdG8gYmxvY2tpbmcgc3RhdGUsIGFuZCBpbnNlcnRzCiogICAgICAgdGhlIEJQRFUgTUFDIGludG8gdGhlIEFUVSB0byBiZSBjYXB0dXJlZCB0byBDUFUsIG9uIGRpc2FibGUgYWxsIHBvcnQgYXJlCiogICAgICAgYmVpbmcgbW9kaWZpZWQgdG8gYmUgaW4gZm9yd2FyZGluZyBzdGF0ZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0cFNldE1vZGUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9CT09MICBlbgopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdHBTZXRQb3J0U3RhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXQgdGhlIHBvcnQgc3RhdGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBzdGF0ZSAtIHRoZSBwb3J0IHN0YXRlIHRvIHNldC4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdHBTZXRQb3J0U3RhdGUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgICAgcG9ydCwKICAgIElOIEdUX1BPUlRfU1RQX1NUQVRFICBzdGF0ZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdHBHZXRQb3J0U3RhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBwb3J0IHN0YXRlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIHN0YXRlIC0gdGhlIGN1cnJlbnQgcG9ydCBzdGF0ZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdHBHZXRQb3J0U3RhdGUKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgICAgICAgIHBvcnQsCiAgICBPVVQgR1RfUE9SVF9TVFBfU1RBVEUgICpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0RWdyZXNzTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldCB0aGUgZWdyZXNzIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgLSB0aGUgZWdyZXNzIG1vZGUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0RWdyZXNzTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgSU4gR1RfRUdSRVNTX01PREUgIG1vZGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0RWdyZXNzTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldCB0aGUgZWdyZXNzIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIHRoZSBlZ3Jlc3MgbW9kZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRFZ3Jlc3NNb2RlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgT1VUIEdUX0VHUkVTU19NT0RFICAqbW9kZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRWbGFuVHVubmVsCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgdmxhbiB0dW5uZWwgbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgbW9kZSAtIHRoZSB2bGFuIHR1bm5lbCBtb2RlLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFZsYW5UdW5uZWwKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9MUE9SVCBwb3J0LAogICAgSU4gR1RfQk9PTCAgbW9kZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRWbGFuVHVubmVsCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IHRoZSB2bGFuIHR1bm5lbCBtb2RlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgLSB0aGUgdmxhbiB0dW5uZWwgbW9kZS4uCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0VmxhblR1bm5lbAooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICptb2RlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0SUdNUFNub29wCioKKiBERVNDUklQVElPTjoKKiAJCVRoaXMgcm91dGluZSBzZXQgdGhlIElHTVAgU25vb3AuIFdoZW4gc2V0IHRvIG9uZSBhbmQgdGhpcyBwb3J0IHJlY2VpdmVzCioJCUlHTVAgZnJhbWUsIHRoZSBmcmFtZSBpcyBzd2l0Y2hlZCB0byB0aGUgQ1BVIHBvcnQsIG92ZXJyaWRpbmcgYWxsIG90aGVyIAoqCQlzd2l0Y2hpbmcgZGVjaXNpb25zLCB3aXRoIGV4Y2VwdGlvbiBmb3IgQ1BVJ3MgVHJhaWxlci4KKgkJQ1BVIHBvcnQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgSW5ncmVzcyBNb2RlIGJpdHMuIEEgcG9ydCBpcyBjb25zaWRlcmVkIAoqCQl0aGUgQ1BVIHBvcnQgaWYgaXRzIEluZ3Jlc3MgTW9kZSBhcmUgZWl0aGVyIEdUX1RSQUlMRVJfSU5HUkVTUyBvciAKKgkJR1RfQ1BVUE9SVF9JTkdSRVNTLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIGZvciBJR01QIFNub29wIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0SUdNUFNub29wCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgcG9ydCwKICAgIElOIEdUX0JPT0wgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldElHTVBTbm9vcAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXQgdGhlIElHTVAgU25vb3AgbW9kZS4KKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9UUlVFOiBJR01QIFNub29wIGVuYWJsZWQKKiAgCQkJR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0SUdNUFNub29wCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKm1vZGUKKTsKCi8qIHRoZSBmb2xsb3dpbmcgdHdvIEFQSXMgYXJlIGFkZGVkIHRvIHN1cHBvcnQgY2xpcHBlcnNoaXAgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldEhlYWRlck1vZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0IGluZ3Jlc3MgYW5kIGVncmVzcyBoZWFkZXIgbW9kZSBvZiBhIHN3aXRjaCBwb3J0LiAKKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSBmb3IgaGVhZGVyIG1vZGUgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0SGVhZGVyTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUIHBvcnQsCiAgICBJTiBHVF9CT09MICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRIZWFkZXJNb2RlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgaW5ncmVzcyBhbmQgZWdyZXNzIGhlYWRlciBtb2RlIG9mIGEgc3dpdGNoIHBvcnQuIAoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUU6IGhlYWRlciBtb2RlIGVuYWJsZWQKKiAgCQkJR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0SGVhZGVyTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICptb2RlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0UHJvdGVjdGVkTW9kZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXQgcHJvdGVjdGVkIG1vZGUgb2YgYSBzd2l0Y2ggcG9ydC4gCioJCVdoZW4gdGhpcyBtb2RlIGlzIHNldCB0byBHVF9UUlVFLCBmcmFtZXMgYXJlIGFsbG93ZWQgdG8gZWdyZXNzIHBvcnQKKgkJZGVmaW5lZCBieSB0aGUgODAyLjFRIFZMQU4gbWVtYmVyc2hpcCBmb3IgdGhlIGZyYW1lJ3MgVklEICdBTkQnCioJCWJ5IHRoZSBwb3J0J3MgVkxBTlRhYmxlIGlmIDgwMi4xUSBpcyBlbmFibGVkIG9uIHRoZSBwb3J0LiBCb3RoIG11c3QKKgkJYWxsb3cgdGhlIGZyYW1lIHRvIEVncmVzcy4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSBmb3IgcHJvdGVjdGVkIG1vZGUgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRQcm90ZWN0ZWRNb2RlCigKICAgIElOICBHVF9RRF9ERVYgICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgIHBvcnQsCiAgICBJTiBHVF9CT09MICAgICAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UHJvdGVjdGVkTW9kZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIHByb3RlY3RlZCBtb2RlIG9mIGEgc3dpdGNoIHBvcnQuIAoqCQlXaGVuIHRoaXMgbW9kZSBpcyBzZXQgdG8gR1RfVFJVRSwgZnJhbWVzIGFyZSBhbGxvd2VkIHRvIGVncmVzcyBwb3J0CioJCWRlZmluZWQgYnkgdGhlIDgwMi4xUSBWTEFOIG1lbWJlcnNoaXAgZm9yIHRoZSBmcmFtZSdzIFZJRCAnQU5EJwoqCQlieSB0aGUgcG9ydCdzIFZMQU5UYWJsZSBpZiA4MDIuMVEgaXMgZW5hYmxlZCBvbiB0aGUgcG9ydC4gQm90aCBtdXN0CioJCWFsbG93IHRoZSBmcmFtZSB0byBFZ3Jlc3MuCioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfVFJVRTogaGVhZGVyIG1vZGUgZW5hYmxlZAoqICAJCQlHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQcm90ZWN0ZWRNb2RlCigKICAgIElOICBHVF9RRF9ERVYJCSpkZXYsCiAgICBJTiAgR1RfTFBPUlQJCXBvcnQsCiAgICBPVVQgR1RfQk9PTAkJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldEZvcndhcmRVbmtub3duCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldCBGb3J3YXJkIFVua25vd24gbW9kZSBvZiBhIHN3aXRjaCBwb3J0LiAKKgkJV2hlbiB0aGlzIG1vZGUgaXMgc2V0IHRvIEdUX1RSVUUsIG5vcm1hbCBzd2l0Y2ggb3BlcmF0aW9uIG9jY3Vycy4KKgkJV2hlbiB0aGlzIG1vZGUgaXMgc2V0IHRvIEdUX0ZBTFNFLCB1bmljYXN0IGZyYW1lIHdpdGggdW5rbm93biBEQSBhZGRyZXNzZXMKKgkJd2lsbCBub3QgZWdyZXNzIG91dCB0aGlzIHBvcnQuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgZm9yIHByb3RlY3RlZCBtb2RlIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0Rm9yd2FyZFVua25vd24KKAogICAgSU4gR1RfUURfREVWCSpkZXYsCiAgICBJTiBHVF9MUE9SVAlwb3J0LAogICAgSU4gR1RfQk9PTAkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0Rm9yd2FyZFVua25vd24KKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBGb3J3YXJkIFVua25vd24gbW9kZSBvZiBhIHN3aXRjaCBwb3J0LiAKKgkJV2hlbiB0aGlzIG1vZGUgaXMgc2V0IHRvIEdUX1RSVUUsIG5vcm1hbCBzd2l0Y2ggb3BlcmF0aW9uIG9jY3Vycy4KKgkJV2hlbiB0aGlzIG1vZGUgaXMgc2V0IHRvIEdUX0ZBTFNFLCB1bmljYXN0IGZyYW1lIHdpdGggdW5rbm93biBEQSBhZGRyZXNzZXMKKgkJd2lsbCBub3QgZWdyZXNzIG91dCB0aGlzIHBvcnQuCioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfVFJVRTogaGVhZGVyIG1vZGUgZW5hYmxlZAoqCQkJCUdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEZvcndhcmRVbmtub3duCigKICAgIElOICBHVF9RRF9ERVYJCSpkZXYsCiAgICBJTiAgR1RfTFBPUlQJCXBvcnQsCiAgICBPVVQgR1RfQk9PTAkJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFN3aXRjaFJlZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJlYWRzIFN3aXRjaCBQb3J0IFJlZ2lzdGVycy4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgIHJlZ0FkZHIgLSBUaGUgcmVnaXN0ZXIncyBhZGRyZXNzLgoqCiogT1VUUFVUUzoKKiAgICAgICBkYXRhICAgIC0gVGhlIHJlYWQgcmVnaXN0ZXIncyBkYXRhLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRTd2l0Y2hSZWcKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gIEdUX1UzMgkgICAgIHJlZ0FkZHIsCiAgICBPVVQgR1RfVTE2CSAgICAgKmRhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFN3aXRjaFJlZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHdyaXRlcyBTd2l0Y2ggUG9ydCBSZWdpc3RlcnMuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICByZWdBZGRyIC0gVGhlIHJlZ2lzdGVyJ3MgYWRkcmVzcy4KKgoqIE9VVFBVVFM6CiogICAgICAgZGF0YSAgICAtIFRoZSByZWFkIHJlZ2lzdGVyJ3MgZGF0YS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0U3dpdGNoUmVnCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOICBHVF9VMzIJICAgICByZWdBZGRyLAogICAgSU4gIEdUX1UxNgkgICAgIGRhdGEKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRHbG9iYWxSZWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZWFkcyBTd2l0Y2ggR2xvYmFsIFJlZ2lzdGVycy4KKgoqIElOUFVUUzoKKiAgICAgICByZWdBZGRyIC0gVGhlIHJlZ2lzdGVyJ3MgYWRkcmVzcy4KKgoqIE9VVFBVVFM6CiogICAgICAgZGF0YSAgICAtIFRoZSByZWFkIHJlZ2lzdGVyJ3MgZGF0YS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0R2xvYmFsUmVnCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9VMzIJICAgICByZWdBZGRyLAogICAgT1VUIEdUX1UxNgkgICAgICpkYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRHbG9iYWxSZWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSB3cml0ZXMgU3dpdGNoIEdsb2JhbCBSZWdpc3RlcnMuCioKKiBJTlBVVFM6CiogICAgICAgcmVnQWRkciAtIFRoZSByZWdpc3RlcidzIGFkZHJlc3MuCioKKiBPVVRQVVRTOgoqICAgICAgIGRhdGEgICAgLSBUaGUgcmVhZCByZWdpc3RlcidzIGRhdGEuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldEdsb2JhbFJlZwooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfVTMyCSAgICAgcmVnQWRkciwKICAgIElOICBHVF9VMTYJICAgICBkYXRhCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3ZsblNldFBvcnRWbGFuUG9ydHMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBwb3J0IFZMQU4gZ3JvdXAgcG9ydCBtZW1iZXJzaGlwIGxpc3QuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyIHRvIHNldC4KKiAgICAgICBtZW1Qb3J0cyAgICAtIGFycmF5IG9mIGxvZ2ljYWwgcG9ydHMuCiogICAgICAgbWVtUG9ydHNMZW4gLSBudW1iZXIgb2YgbWVtYmVycyBpbiBtZW1Qb3J0cyBhcnJheQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2bG5TZXRQb3J0VmxhblBvcnRzCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgcG9ydCwKICAgIElOIEdUX0xQT1JUIG1lbVBvcnRzW10sCiAgICBJTiBHVF9VOCAgICBtZW1Qb3J0c0xlbgopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5HZXRQb3J0VmxhblBvcnRzCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgcG9ydCBWTEFOIGdyb3VwIHBvcnQgbWVtYmVyc2hpcCBsaXN0LgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgICAgIC0gbG9naWNhbCBwb3J0IG51bWJlciB0byBzZXQuCioKKiBPVVRQVVRTOgoqICAgICAgIG1lbVBvcnRzICAgIC0gYXJyYXkgb2YgbG9naWNhbCBwb3J0cy4KKiAgICAgICBtZW1Qb3J0c0xlbiAtIG51bWJlciBvZiBtZW1iZXJzIGluIG1lbVBvcnRzIGFycmF5CioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3ZsbkdldFBvcnRWbGFuUG9ydHMKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9MUE9SVCBtZW1Qb3J0c1tdLAogICAgT1VUIEdUX1U4ICAgICptZW1Qb3J0c0xlbgopOwoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmxuU2V0UG9ydFVzZXJQcmlMc2IKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBTZXQgdGhlIHVzZXIgcHJpb3JpdHkgKFZQVCkgTFNCIGJpdCwgdG8gYmUgYWRkZWQgdG8gdGhlCiogICAgICAgdXNlciBwcmlvcml0eSBvbiB0aGUgZWdyZXNzLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyIHRvIHNldC4KKiAgICAgICB1c2VyUHJpTHNiIC0gR1RfVFJVRSBmb3IgMSwgR1RfRkFMU0UgZm9yIDAuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3ZsblNldFBvcnRVc2VyUHJpTHNiCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgcG9ydCwKICAgIElOIEdUX0JPT0wgIHVzZXJQcmlMc2IKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmxuR2V0UG9ydFVzZXJQcmlMc2IKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSB1c2VyIHByaW9yaXR5IChWUFQpIExTQiBiaXQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIgdG8gc2V0LgoqCiogT1VUUFVUUzoKKiAgICAgICB1c2VyUHJpTHNiIC0gR1RfVFJVRSBmb3IgMSwgR1RfRkFMU0UgZm9yIDAuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3ZsbkdldFBvcnRVc2VyUHJpTHNiCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAgKnVzZXJQcmlMc2IKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5TZXRQb3J0VmlkCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgU2V0IHRoZSBwb3J0IGRlZmF1bHQgdmxhbiBpZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlciB0byBzZXQuCiogICAgICAgdmlkICAtIHRoZSBwb3J0IHZsYW4gaWQuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3ZsblNldFBvcnRWaWQKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9MUE9SVCBwb3J0LAogICAgSU4gR1RfVTE2ICAgdmlkCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmxuR2V0UG9ydFZpZAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIEdldCB0aGUgcG9ydCBkZWZhdWx0IHZsYW4gaWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIgdG8gc2V0LgoqCiogT1VUUFVUUzoKKiAgICAgICB2aWQgIC0gdGhlIHBvcnQgdmxhbiBpZC4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmxuR2V0UG9ydFZpZAooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX1UxNiAgICp2aWQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3ZsblNldFBvcnRWbGFuREJOdW0KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBwb3J0IFZMQU4gZGF0YWJhc2UgbnVtYmVyIChEQk51bSkuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydAktIGxvZ2ljYWwgcG9ydCBudW1iZXIgdG8gc2V0LgoqICAgICAgIERCTnVtIAktIGRhdGFiYXNlIG51bWJlciBmb3IgdGhpcyBwb3J0IAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzpJTiBHVF9JTkdSRVNTX01PREUgbW9kZQoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2bG5TZXRQb3J0VmxhbkRCTnVtCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgcG9ydCwKICAgIElOIEdUX1UzMiAgIERCTnVtCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmxuR2V0UG9ydFZsYW5EQk51bQoqCiogREVTQ1JJUFRJT046SU4gR1RfSU5HUkVTU19NT0RFIG1vZGUKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgcG9ydCBWTEFOIGRhdGFiYXNlIG51bWJlciAoREJOdW0pLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgCS0gbG9naWNhbCBwb3J0IG51bWJlciB0byBnZXQuCioKKiBPVVRQVVRTOgoqICAgICAgIERCTnVtIAktIGRhdGFiYXNlIG51bWJlciBmb3IgdGhpcyBwb3J0IAoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmxuR2V0UG9ydFZsYW5EQk51bQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX1UzMiAgICAqREJOdW0KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5TZXRQb3J0VmxhbkRvdDFxTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIHBvcnQgODAyLjFxIG1vZGUgKDExOjEwKSAKKgoqIElOUFVUUzoKKiAgICAgICBwb3J0CS0gbG9naWNhbCBwb3J0IG51bWJlciB0byBzZXQuCiogICAgICAgbW9kZSAJLSA4MDIuMXEgbW9kZSBmb3IgdGhpcyBwb3J0IAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzpJTiBHVF9JTkdSRVNTX01PREUgbW9kZQoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2bG5TZXRQb3J0VmxhbkRvdDFxTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUIAlwb3J0LAogICAgSU4gR1RfRE9UMVFfTU9ERQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5HZXRQb3J0VmxhbkRvdDFxTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgdGhlIHBvcnQgODAyLjFxIG1vZGUgKGJpdCAxMToxMCkuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAJLSBsb2dpY2FsIHBvcnQgbnVtYmVyIHRvIGdldC4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAJLSA4MDIuMXEgbW9kZSBmb3IgdGhpcyBwb3J0IAoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2bG5HZXRQb3J0VmxhbkRvdDFxTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0RPVDFRX01PREUgICAgKm1vZGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmxuU2V0UG9ydFZsYW5Gb3JjZURlZmF1bHRWSUQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBwb3J0IDgwMi4xcSBtb2RlICgxMToxMCkgCioKKiBJTlBVVFM6CiogICAgICAgcG9ydAktIGxvZ2ljYWwgcG9ydCBudW1iZXIgdG8gc2V0LgoqICAgICAgIG1vZGUgICAgLSBHVF9UUlVFLCBmb3JjZSB0byB1c2UgZGVmYXVsdCBWSUQKKiAgICAgICAgICAgICAgICAgR1RfRkFVTFNFLCBvdGhlcndpc2UgCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2bG5TZXRQb3J0VmxhbkZvcmNlRGVmYXVsdFZJRAooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUIAlwb3J0LAogICAgSU4gR1RfQk9PTCAgCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3ZsbkdldFBvcnRWbGFuRm9yY2VEZWZhdWx0VklECioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgcG9ydCBtb2RlIGZvciBGb3JjZURlZmF1bHRWSUQgKGJpdCAxMikuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAJLSBsb2dpY2FsIHBvcnQgbnVtYmVyIHRvIGdldC4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAJLSBGb3JjZURlZmF1bHRWSUQgbW9kZSBmb3IgdGhpcyBwb3J0IAoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmxuR2V0UG9ydFZsYW5Gb3JjZURlZmF1bHRWSUQKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgCSBwb3J0LAogICAgT1VUIEdUX0JPT0wgICAgCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGV2ZW50U2V0QWN0aXZlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZW5hYmxlcy9kaXNhYmxlcyB0aGUgcmVjZWl2ZSBvZiBhbiBoYXJkd2FyZSBkcml2ZW4gZXZlbnQuCioKKiBJTlBVVFM6CiogICAgICAgZXZlbnRUeXBlIC0gdGhlIGV2ZW50IHR5cGUuIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgZm9sb3dpbmc6IAoqICAgICAgIAlHVF9TVEFUU19ET05FLCBHVF9WVFVfUFJPQiwgR1RfVlRVX0RPTkUsIEdUX0FUVV9GVUxMLCAgCiogICAgICAgCUdUX0FUVV9ET05FLCBHVF9QSFlfSU5URVJSVVBULCBHVF9FRV9JTlRFUlJVUFQsIGFuZCBHVF9ERVZJQ0VfSU5UCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBFYWNoIHN3aXRjaCBkZXZpY2UgaGFzIGl0cyBvd24gc2V0IG9mIGV2ZW50IFR5cGVzLiBQbGVhc2UgcmVmZXIgdG8gdGhlCioJCWRldmljZSBkYXRhc2hlZXQgZm9yIHRoZSBsaXN0IG9mIGV2ZW50IHR5cGVzIHRoYXQgdGhlIGRldmljZSBzdXBwb3J0cy4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZXZlbnRTZXRBY3RpdmUKKAogICAgSU4gR1RfUURfREVWIAkqZGV2LAogICAgSU4gR1RfVTMyIAkJZXZlbnRUeXBlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGV2ZW50R2V0SW50U3RhdHVzCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmVhZHMgYW4gaGFyZHdhcmUgZHJpdmVuIGV2ZW50IHN0YXR1cy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBpbnRDYXVzZSAtICBJdCBwcm92aWRlcyB0aGUgc291cmNlIG9mIGludGVycnVwdCBvZiB0aGUgZm9sbG93aW5nOgoqCQkJCUdUX1NUQVRTX0RPTkUsIEdUX1ZUVV9QUk9CLCBHVF9WVFVfRE9ORSwgR1RfQVRVX0ZVTEwsICAKKgkJCQlHVF9BVFVfRE9ORSwgR1RfUEhZX0lOVEVSUlVQVCwgYW5kIEdUX0VFX0lOVEVSUlVQVC4KKgkJCQlGb3IgR2lnYWJpdCBTd2l0Y2gsIEdUX0FUVV9GVUxMIGlzIHJlcGxhY2VkIHdpdGggR1RfQVRVX0ZVTEwgYW5kIAoqCQkJCUdUX1BIWV9JTlRFUlJVUFQgaXMgbm90IHN1cHBvcnRlZC4KKgkJCQlHVF9ERVZJQ0VfSU5UIG1heSBub3QgYmUgYXZhaWxhYmxlIG9uIHRoZSBkZXZpY2VzLCBzbyBwbGVhc2UgcmVmZXIKKgkJCQl0byB0aGUgZGF0YXNoZWV0IGZvciBkZXRhaWxzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZXZlbnRHZXRJbnRTdGF0dXMKKAogICAgSU4gIEdUX1FEX0RFViAJKmRldiwKICAgIE9VVCBHVF9VMTYJCSppbnRDYXVzZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndnR1R2V0SW50U3RhdHVzCioKKiBERVNDUklQVElPTjoKKiAJCUNoZWNrIHRvIHNlZSBpZiBhIHNwZWNpZmljIHR5cGUgb2YgVlRVIGludGVycnVwdCBvY2N1cmVkCioKKiBJTlBVVFM6CiogICAgICAgaW50VHlwZSAtIHRoZSB0eXBlIG9mIGludGVycnVwdCB3aGljaCBjYXVzZXMgYW4gaW50ZXJydXB0LgoqCQkJYW55IGNvbWJpbmF0aW9uIG9mIAoqCQkJR1RfTUVNRUJFUl9WSU9MQVRJT04sCioJCQlHVF9NSVNTX1ZJT0xBVElPTiwKKgkJCUdUX0ZVTExfVklPTEFUSU9OCioKKiBPVVRQVVRTOgoqIAkJTm9uZS4KKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAJCUZVTExfVklPTEFUSU9OIGlzIG9ubHkgZm9yIEZhc3QgRXRoZXJuZXQgU3dpdGNoIChub3QgZm9yIEdpZ2FiaXQgU3dpdGNoKS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKR1RfU1RBVFVTIGd2dHVHZXRJbnRTdGF0dXMKKAogICAgSU4gIEdUX1FEX0RFViAJCQkqZGV2LAogICAgT1VUIEdUX1ZUVV9JTlRfU1RBVFVTIAkqdnR1SW50U3RhdHVzCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2dHVHZXRFbnRyeUNvdW50CioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXRzIHRoZSBjdXJyZW50IG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBWVFUgdGFibGUKKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBudW1FbnRyaWVzIC0gbnVtYmVyIG9mIFZUVSBlbnRyaWVzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PX1NVQ0ggLSB2bGFuIGRvZXMgbm90IGV4aXN0LgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndnR1R2V0RW50cnlDb3VudAooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfVTMyIAkJKm51bUVudHJpZXMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Z0dUdldEVudHJ5Rmlyc3QKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgZmlyc3QgbGV4aWNvZ3JhcGhpYyBlbnRyeSBmcm9tIHRoZSBWVFUuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgdnR1RW50cnkgLSBtYXRjaCBWVFUgZW50cnkuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9fU1VDSCAtIHRhYmxlIGlzIGVtcHR5LgoqCiogQ09NTUVOVFM6CiogICAgICAgU2VhcmNoIHN0YXJ0cyBmcm9tIHZpZCBvZiBhbGwgb25lJ3MKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Z0dUdldEVudHJ5Rmlyc3QKKAoJSU4gIEdUX1FEX0RFViAJCSpkZXYsCglPVVQgR1RfVlRVX0VOVFJZCSp2dHVFbnRyeQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndnR1R2V0RW50cnlOZXh0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXRzIG5leHQgbGV4aWNvZ3JhcGhpYyBWVFUgZW50cnkgZnJvbSB0aGUgc3BlY2lmaWVkIFZJRC4KKgoqIElOUFVUUzoKKiAgICAgICB2dHVFbnRyeSAtIHRoZSBWSUQgdG8gc3RhcnQgdGhlIHNlYXJjaC4KKgoqIE9VVFBVVFM6CiogICAgICAgdnR1RW50cnkgLSBtYXRjaCBWVFUgIGVudHJ5LgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2Vzcy4KKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3Igb3IgZW50cnkgZG9lcyBub3QgZXhpc3QuCiogICAgICAgR1RfTk9fU1VDSCAtIG5vIG1vcmUgZW50cmllcy4KKgoqIENPTU1FTlRTOgoqICAgICAgIFNlYXJjaCBzdGFydHMgZnJvbSB0aGUgVklEIHNwZWNpZmllZCBieSB0aGUgdXNlci4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Z0dUdldEVudHJ5TmV4dAooCglJTiAgR1RfUURfREVWIAkJKmRldiwKCUlOT1VUIEdUX1ZUVV9FTlRSWSAgKnZ0dUVudHJ5Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2dHVGaW5kVmlkRW50cnkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEZpbmQgVlRVIGVudHJ5IGZvciBhIHNwZWNpZmljIFZJRCwgaXQgd2lsbCByZXR1cm4gdGhlIGVudHJ5LCBpZiBmb3VuZCwgCiogICAgICAgYWxvbmcgd2l0aCBpdHMgYXNzb2NpYXRlZCBkYXRhIAoqCiogSU5QVVRTOgoqICAgICAgIHZ0dUVudHJ5IC0gY29udGFpbnMgdGhlIFZJRCB0byBzZWFyY2ggZm9yLgoqCiogT1VUUFVUUzoKKiAgICAgICBmb3VuZCAgICAtIEdUX1RSVUUsIGlmIHRoZSBhcHByb3ByaWF0ZSBlbnRyeSBleGlzdHMuCiogICAgICAgdnR1RW50cnkgLSB0aGUgZW50cnkgcGFyYW1ldGVycy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MuCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yIG9yIGVudHJ5IGRvZXMgbm90IGV4aXN0LgoqICAgICAgIEdUX05PX1NVQ0ggLSBubyBtb3JlIGVudHJpZXMuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Z0dUZpbmRWaWRFbnRyeQooCglJTiBHVF9RRF9ERVYgCQkqZGV2LAoJSU5PVVQgR1RfVlRVX0VOVFJZICAqdnR1RW50cnksCglPVVQgR1RfQk9PTCAgICAgICAgICpmb3VuZAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndnR1Rmx1c2gKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZW1vdmVzIGFsbCBlbnRyaWVzIGZyb20gVlRVIFRhYmxlLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndnR1Rmx1c2gKKAogICAgSU4gR1RfUURfREVWICpkZXYKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Z0dUFkZEVudHJ5CioKKiBERVNDUklQVElPTjoKKiAgICAgICBDcmVhdGVzIHRoZSBuZXcgZW50cnkgaW4gVlRVIHRhYmxlIGJhc2VkIG9uIHVzZXIgaW5wdXQuCioKKiBJTlBVVFM6CiogICAgICAgdnR1RW50cnkgICAgLSB2dHUgZW50cnkgdG8gaW5zZXJ0IHRvIHRoZSBWVFUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0ZVTEwJCQkgIC0gdnR1IHRhYmxlIGlzIGZ1bGwKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2dHVBZGRFbnRyeQooCiAgICBJTiBHVF9RRF9ERVYgCSpkZXYsCiAgICBJTiBHVF9WVFVfRU5UUlkgKnZ0dUVudHJ5Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2dHVEZWxFbnRyeQoqCiogREVTQ1JJUFRJT046CiogICAgICAgRGVsZXRlcyBWVFUgZW50cnkgc3BlY2lmaWVkIGJ5IHVzZXIuCioKKiBJTlBVVFM6CiogICAgICAgdnR1RW50cnkgLSB0aGUgVlRVIGVudHJ5IHRvIGJlIGRlbGV0ZWQgCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PX1NVQ0ggICAgICAtIGlmIHNwZWNpZmllZCBhZGRyZXNzIGVudHJ5IGRvZXMgbm90IGV4aXN0CioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Z0dURlbEVudHJ5CigKICAgIElOIEdUX1FEX0RFViAJKmRldiwKICAgIElOIEdUX1ZUVV9FTlRSWSAqdnR1RW50cnkKKTsKCi8qIGd0UGh5Q3RybC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRQaHlSZXNldAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBwcmVmb3JtcyBQSFkgcmVzZXQuCioJCUFmdGVyIHJlc2V0LCBwaHkgd2lsbCBiZSBpbiBBdXRvbmVnb3RpYXRpb24gbW9kZS4KKgoqIElOUFVUUzoKKiAJCXBvcnQgLSBUaGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKiAJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKiBDT01NRU5UUzoKKiAJCWRhdGEgc2hlZXQgcmVnaXN0ZXIgMC4xNSAtIFJlc2V0CiogCQlkYXRhIHNoZWV0IHJlZ2lzdGVyIDAuMTMgLSBTcGVlZAoqIAkJZGF0YSBzaGVldCByZWdpc3RlciAwLjEyIC0gQXV0b25lZ290aWF0aW9uCiogCQlkYXRhIHNoZWV0IHJlZ2lzdGVyIDAuOCAgLSBEdXBsZXggTW9kZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpHVF9TVEFUVVMgZ3BydFBoeVJlc2V0CigKICAgIElOIEdUX1FEX0RFViAJKmRldiwKICAgIElOIEdUX0xQT1JUIAlwb3J0Cik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0UG9ydExvb3BiYWNrCioKKiBERVNDUklQVElPTjoKKiBFbmFibGUvRGlzYWJsZSBJbnRlcm5hbCBQb3J0IExvb3BiYWNrLiAKKiBGb3IgMTAvMTAwIEZhc3QgRXRoZXJuZXQgUEhZLCBzcGVlZCBvZiBMb29wYmFjayBpcyBkZXRlcm1pbmVkIGFzIGZvbGxvd3M6CiogICBJZiBBdXRvLU5lZ290aWF0aW9uIGlzIGVuYWJsZWQsIHRoaXMgcm91dGluZSBkaXNhYmxlcyBBdXRvLU5lZ290aWF0aW9uIGFuZCAKKiAgIGZvcmNlcyBzcGVlZCB0byBiZSAxME1icHMuCiogICBJZiBBdXRvLU5lZ290aWF0aW9uIGlzIGRpc2FibGVkLCB0aGUgZm9yY2VkIHNwZWVkIGlzIHVzZWQuCiogICBEaXNhYmxpbmcgTG9vcGJhY2sgc2ltcGx5IGNsZWFycyBiaXQgMTQgb2YgY29udHJvbCByZWdpc3RlcigwLjE0KS4gVGhlcmVmb3JlLAoqICAgaXQgaXMgcmVjb21tZW5kZWQgdG8gY2FsbCBncHJ0U2V0UG9ydEF1dG9Nb2RlIGZvciBQSFkgY29uZmlndXJhdGlvbiBhZnRlciAKKiAgIExvb3BiYWNrIHRlc3QuCiogRm9yIDEwLzEwMC8xMDAwIEdpZ2FnYml0IEV0aGVybmV0IFBIWSwgc3BlZWQgb2YgTG9vcGJhY2sgaXMgZGV0ZXJtaW5lZCBhcyBmb2xsb3dzOgoqICAgSWYgQXV0by1OZWdvdGlhdGlvbiBpcyBlbmFibGVkIGFuZCBMaW5rIGlzIGFjdGl2ZSwgdGhlIGN1cnJlbnQgc3BlZWQgaXMgdXNlZC4KKiAgIElmIEF1dG8tTmVnb3RpYXRpb24gaXMgZGlzYWJsZWQsIHRoZSBmb3JjZWQgc3BlZWQgaXMgdXNlZC4KKiAgIEFsbCBvdGhlciBjYXNlcywgZGVmYXVsdCBNQUMgSW50ZXJmYWNlIHNwZWVkIGlzIHVzZWQuIFBsZWFzZSByZWZlciB0byB0aGUgZGF0YQoqICAgc2hlZXQgZm9yIHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgZGVmYXVsdCBNQUMgSW50ZXJmYWNlIHNwZWVkLgoqCiogSU5QVVRTOgoqIAkJcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAJCWVuYWJsZSAtIElmIEdUX1RSVUUsIGVuYWJsZSBsb29wYmFjayBtb2RlCiogCQkJCQlJZiBHVF9GQUxTRSwgZGlzYWJsZSBsb29wYmFjayBtb2RlCioKKiBPVVRQVVRTOgoqIAkJTm9uZS4KKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAJLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMIAktIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAJCWRhdGEgc2hlZXQgcmVnaXN0ZXIgMC4xNCAtIExvb3BfYmFjawoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpHVF9TVEFUVVMgZ3BydFNldFBvcnRMb29wYmFjawooCglJTiBHVF9RRF9ERVYgCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX0JPT0wgCQllbmFibGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQb3J0U3BlZWQKKgoqIERFU0NSSVBUSU9OOgoqIAkJU2V0cyBzcGVlZCBmb3IgYSBzcGVjaWZpYyBsb2dpY2FsIHBvcnQuIFRoaXMgZnVuY3Rpb24gd2lsbCBrZWVwIHRoZSBkdXBsZXggCioJCW1vZGUgYW5kIGxvb3BiYWNrIG1vZGUgdG8gdGhlIHByZXZpb3VzIHZhbHVlLCBidXQgZGlzYWJsZSBvdGhlcnMsIHN1Y2ggYXMgCioJCUF1dG9uZWdvdGlhdGlvbi4KKgoqIElOUFVUUzoKKiAJCXBvcnQgIC0gbG9naWNhbCBwb3J0IG51bWJlcgoqIAkJc3BlZWQgLSBwb3J0IHNwZWVkLgoqCQkJCVBIWV9TUEVFRF8xMF9NQlBTIGZvciAxME1icHMKKgkJCQlQSFlfU1BFRURfMTAwX01CUFMgZm9yIDEwME1icHMKKgkJCQlQSFlfU1BFRURfMTAwMF9NQlBTIGZvciAxMDAwTWJwcwoqCiogT1VUUFVUUzoKKiBOb25lLgoqCiogUkVUVVJOUzoKKiBHVF9PSyAtIG9uIHN1Y2Nlc3MKKiBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIGRhdGEgc2hlZXQgcmVnaXN0ZXIgMC4xMyAtIFNwZWVkIFNlbGVjdGlvbiAoTFNCKQoqIGRhdGEgc2hlZXQgcmVnaXN0ZXIgMC42ICAtIFNwZWVkIFNlbGVjdGlvbiAoTVNCKQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpHVF9TVEFUVVMgZ3BydFNldFBvcnRTcGVlZAooCglJTiBHVF9RRF9ERVYgCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX1BIWV9TUEVFRAlzcGVlZAopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFBvcnRBdXRvTmVnRW5hYmxlCioKKiBERVNDUklQVElPTjoKKiAJCUVuYWJsZS9kaXNhYmxlIGFuIEF1dG8tTmVnb3RpYXRpb24gZm9yIGR1cGxleCBtb2RlIG9uIHNwZWNpZmljCiogCQlsb2dpY2FsIHBvcnQuIFdoZW4gQXV0b25lZ290aWF0aW9uIGlzIGRpc2FibGVkLCBwaHkgd2lsbCBiZSBpbiAxME1icHMgSGFsZiAKKgkJRHVwbGV4IG1vZGUuIEVuYWJsaW5nIEF1dG9uZWdvdGlhdGlvbiB3aWxsIHNldCAxMDBCQVNFLVRYIEZ1bGwgRHVwbGV4LCAKKgkJMTAwQkFTRS1UWCBGdWxsIER1cGxleCwgMTAwQkFTRS1UWCBGdWxsIER1cGxleCwgYW5kIDEwMEJBU0UtVFggRnVsbCBEdXBsZXgKKgkJaW4gQXV0b05lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgcmVnaXN0ZXIuCioKKiBJTlBVVFM6CiogCQlwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlcgoqIAkJc3RhdGUgLSBHVF9UUlVFIGZvciBlbmFibGUgQXV0by1OZWdvdGlhdGlvbiBmb3IgZHVwbGV4IG1vZGUsCiogCQkJCQlHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogCQlOb25lLgoqCiogUkVUVVJOUzoKKiAJCUdUX09LIAktIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgCS0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIAkJZGF0YSBzaGVldCByZWdpc3RlciAwLjEyIC0gQXV0by1OZWdvdGlhdGlvbiBFbmFibGUKKiAJCWRhdGEgc2hlZXQgcmVnaXN0ZXIgNC44LCA0LjcsIDQuNiwgNC41IC0gQXV0by1OZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkdUX1NUQVRVUyBncHJ0UG9ydEF1dG9OZWdFbmFibGUKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX0JPT0wgCQlzdGF0ZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFBvcnRQb3dlckRvd24KKgoqIERFU0NSSVBUSU9OOgoqIAkJRW5hYmxlL2Rpc2FibGUgKHBvd2VyIGRvd24pIG9uIHNwZWNpZmljIGxvZ2ljYWwgcG9ydC4gV2hlbiB0aGlzIGZ1bmN0aW9uIAoqCQlpcyBjYWxsZWQgd2l0aCBub3JtYWwgb3BlcmF0aW9uIHJlcXVlc3QsIHBoeSB3aWxsIHNldCB0byBBdXRvbmVnb3RpYXRpb24gCioJCW1vZGUuCioKKiBJTlBVVFM6CiogCQlwb3J0CS0gbG9naWNhbCBwb3J0IG51bWJlcgoqIAkJc3RhdGUJLSAgR1RfVFJVRTogcG93ZXIgZG93bgoqIAkJCQkJR1RfRkFMU0U6IG5vcm1hbCBvcGVyYXRpb24KKgoqIE9VVFBVVFM6CiogCQlOb25lLgoqCiogUkVUVVJOUzoKKiAJCUdUX09LIAktIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgCS0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIAkJZGF0YSBzaGVldCByZWdpc3RlciAwLjExIC0gUG93ZXIgRG93bgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpHVF9TVEFUVVMgZ3BydFBvcnRQb3dlckRvd24KKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVAkJcG9ydCwKCUlOIEdUX0JPT0wJCXN0YXRlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0UG9ydFJlc3RhcnRBdXRvTmVnCioKKiBERVNDUklQVElPTjoKKiAJCVJlc3RhcnQgQXV0b05lZ290aWF0aW9uLiBJZiBBdXRvTmVnb3RpYXRpb24gaXMgbm90IGVuYWJsZWQsIGl0J2xsIGVuYWJsZSAKKgkJaXQuIExvb3BiYWNrIGFuZCBQb3dlciBEb3duIHdpbGwgYmUgZGlzYWJsZWQgYnkgdGhpcyByb3V0aW5lLgoqCiogSU5QVVRTOgoqIAkJcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CiogCQlOb25lLgoqCiogUkVUVVJOUzoKKiAJCUdUX09LIAktIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgCS0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIAkJZGF0YSBzaGVldCByZWdpc3RlciAwLjkgLSBSZXN0YXJ0IEF1dG8tTmVnb3RpYXRpb24KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKR1RfU1RBVFVTIGdwcnRQb3J0UmVzdGFydEF1dG9OZWcKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVAkJcG9ydAopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFBvcnREdXBsZXhNb2RlCioKKiBERVNDUklQVElPTjoKKiAJCVNldHMgZHVwbGV4IG1vZGUgZm9yIGEgc3BlY2lmaWMgbG9naWNhbCBwb3J0LiBUaGlzIGZ1bmN0aW9uIHdpbGwga2VlcCAKKgkJdGhlIHNwZWVkIGFuZCBsb29wYmFjayBtb2RlIHRvIHRoZSBwcmV2aW91cyB2YWx1ZSwgYnV0IGRpc2FibGUgb3RoZXJzLAoqCQlzdWNoIGFzIEF1dG9uZWdvdGlhdGlvbi4KKgoqIElOUFVUUzoKKiAJCXBvcnQgCS0gbG9naWNhbCBwb3J0IG51bWJlcgoqIAkJZE1vZGUJLSBkdWxwZXggbW9kZQoqCiogT1VUUFVUUzoKKiAJCU5vbmUuCioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgCS0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAJLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogCQlkYXRhIHNoZWV0IHJlZ2lzdGVyIDAuOCAtIER1cGxleCBNb2RlCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkdUX1NUQVRVUyBncHJ0U2V0UG9ydER1cGxleE1vZGUKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVAkJcG9ydCwKCUlOIEdUX0JPT0wJCWRNb2RlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0UG9ydEF1dG9Nb2RlCioKKiBERVNDUklQVElPTjoKKiAJCVRoaXMgcm91dGluZSBzZXRzIHVwIHRoZSBwb3J0IHdpdGggZ2l2ZW4gQXV0byBNb2RlLgoqCQlTdXBwb3J0ZWQgbW9kZSBpcyBhcyBmb2xsb3dzOgoqCQktIEF1dG8gZm9yIGJvdGggc3BlZWQgYW5kIGR1cGxleC4KKgkJLSBBdXRvIGZvciBzcGVlZCBvbmx5IGFuZCBGdWxsIGR1cGxleC4KKgkJLSBBdXRvIGZvciBzcGVlZCBvbmx5IGFuZCBIYWxmIGR1cGxleC4KKgkJLSBBdXRvIGZvciBkdXBsZXggb25seSBhbmQgc3BlZWQgMTAwME1icHMuCioJCS0gQXV0byBmb3IgZHVwbGV4IG9ubHkgYW5kIHNwZWVkIDEwME1icHMuCioJCS0gQXV0byBmb3IgZHVwbGV4IG9ubHkgYW5kIHNwZWVkIDEwTWJwcy4KKgkJLSBTcGVlZCAxMDAwTWJwcyBhbmQgRnVsbCBkdXBsZXguCioJCS0gU3BlZWQgMTAwME1icHMgYW5kIEhhbGYgZHVwbGV4LgoqCQktIFNwZWVkIDEwME1icHMgYW5kIEZ1bGwgZHVwbGV4LgoqCQktIFNwZWVkIDEwME1icHMgYW5kIEhhbGYgZHVwbGV4LgoqCQktIFNwZWVkIDEwTWJwcyBhbmQgRnVsbCBkdXBsZXguCioJCS0gU3BlZWQgMTBNYnBzIGFuZCBIYWxmIGR1cGxleC4KKgkJCioKKiBJTlBVVFM6CiogCQlwb3J0IC0gVGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAJCW1vZGUgLSBBdXRvIE1vZGUgdG8gYmUgd3JpdHRlbgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqIENPTU1FTlRTOgoqIAkJZGF0YSBzaGVldCByZWdpc3RlciA0LjgsIDQuNywgNC42LCBhbmQgNC41IEF1dG9uZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50CiogCQlkYXRhIHNoZWV0IHJlZ2lzdGVyIDQuNiwgNC41IEF1dG9uZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50IGZvciAxMDAwQlgKKiAJCWRhdGEgc2hlZXQgcmVnaXN0ZXIgOS45LCA5LjggQXV0b25lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgZm9yIDEwMDBCVAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKR1RfU1RBVFVTIGdwcnRTZXRQb3J0QXV0b01vZGUKKAoJSU4gR1RfUURfREVWIAkqZGV2LAoJSU4gR1RfTFBPUlQgCXBvcnQsCglJTiBHVF9QSFlfQVVUT19NT0RFIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFBhdXNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgd2lsbCBzZXQgdGhlIHBhdXNlIGJpdCBpbiBBdXRvbmVnb3RpYXRpb24gQWR2ZXJ0aXNlbWVudAoqCQlSZWdpc3Rlci4gQW5kIHJlc3RhcnQgdGhlIGF1dG9uZWdvdGlhdGlvbi4KKgoqIElOUFVUUzoKKiBwb3J0IC0gVGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiBzdGF0ZSAtIEdUX1BIWV9QQVVTRV9NT0RFIGVudW0gdmFsdWUuCioJCQlHVF9QSFlfTk9fUEFVU0UJCS0gZGlzYWJsZSBwYXVzZQoqIAkJCUdUX1BIWV9QQVVTRQkJLSBzdXBwb3J0IHBhdXNlCioJCQlHVF9QSFlfQVNZTU1FVFJJQ19QQVVTRQktIHN1cHBvcnQgYXN5bW1ldHJpYyBwYXVzZQoqCQkJR1RfUEhZX0JPVEhfUEFVU0UJLSBzdXBwb3J0IGJvdGggcGF1c2UgYW5kIGFzeW1tZXRyaWMgcGF1c2UKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiBDT01NRU5UUzoKKiBkYXRhIHNoZWV0IHJlZ2lzdGVyIDQuMTAgQXV0b25lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCkdUX1NUQVRVUyBncHJ0U2V0UGF1c2UKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX1BIWV9QQVVTRV9NT0RFIHN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQaHlSZWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZWFkcyBQaHkgUmVnaXN0ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgcmVnQWRkciAtIFRoZSByZWdpc3RlcidzIGFkZHJlc3MuCioKKiBPVVRQVVRTOgoqICAgICAgIGRhdGEgICAgLSBUaGUgcmVhZCByZWdpc3RlcidzIGRhdGEuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFBoeVJlZwooCiAgICBJTiAgR1RfUURfREVWICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgIHBvcnQsCiAgICBJTiAgR1RfVTMyCSAgICAgcmVnQWRkciwKICAgIE9VVCBHVF9VMTYJICAgICAqZGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0UGh5UmVnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgd3JpdGVzIFBoeSBSZWdpc3RlcnMuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICByZWdBZGRyIC0gVGhlIHJlZ2lzdGVyJ3MgYWRkcmVzcy4KKgoqIE9VVFBVVFM6CiogICAgICAgZGF0YSAgICAtIFRoZSByZWFkIHJlZ2lzdGVyJ3MgZGF0YS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0UGh5UmVnCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKICAgIElOICBHVF9VMzIJICAgICByZWdBZGRyLAogICAgSU4gIEdUX1UxNgkgICAgIGRhdGEKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRQaHlJbnRFbmFibGUKKgoqIERFU0NSSVBUSU9OOgoqIEVuYWJsZS9EaXNhYmxlIG9uZSBQSFkgSW50ZXJydXB0CiogVGhpcyByZWdpc3RlciBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIElOVCMgcGluIGlzIGFzc2VydGVkIHdoZW4gYW4gaW50ZXJydXB0IAoqIGV2ZW50IG9jY3Vycy4gV2hlbiBhbiBpbnRlcnJ1cHQgb2NjdXJzLCB0aGUgY29ycmVzcG9uZGluZyBiaXQgaXMgc2V0IGFuZAoqIHJlbWFpbnMgc2V0IHVudGlsIHJlZ2lzdGVyIDE5IGlzIHJlYWQgdmlhIHRoZSBTTUkuIFdoZW4gaW50ZXJydXB0IGVuYWJsZQoqIGJpdHMgYXJlIG5vdCBzZXQgaW4gcmVnaXN0ZXIgMTgsIGludGVycnVwdCBzdGF0dXMgYml0cyBpbiByZWdpc3RlciAxOSBhcmUgCiogc3RpbGwgc2V0IHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IGV2ZW50cyBvY2N1ci4gSG93ZXZlciwgdGhlIElOVCMgCiogaXMgbm90IGFzc2VydGVkLgoqCiogSU5QVVRTOgoqIHBvcnQgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogaW50VHlwZSAtIHRoZSB0eXBlIG9mIGludGVycnVwdCB0byBlbmFibGUvZGlzYWJsZS4gYW55IGNvbWJpbmF0aW9uIG9mIAoqCQkJR1RfU1BFRURfQ0hBTkdFRCwKKgkJCUdUX0RVUExFWF9DSEFOR0VELAoqCQkJR1RfUEFHRV9SRUNFSVZFRCwKKgkJCUdUX0FVVE9fTkVHX0NPTVBMRVRFRCwKKgkJCUdUX0xJTktfU1RBVFVTX0NIQU5HRUQsCioJCQlHVF9TWU1CT0xfRVJST1IsCioJCQlHVF9GQUxTRV9DQVJSSUVSLAoqCQkJR1RfRklGT19GTE9XLAoqCQkJR1RfQ1JPU1NPVkVSX0NIQU5HRUQsCioJCQlHVF9QT0xBUklUWV9DSEFOR0VELCBhbmQKKgkJCUdUX0pBQkJFUgoqCiogT1VUUFVUUzoKKiBOb25lLgoqCiogUkVUVVJOUzoKKiBHVF9PSyAtIG9uIHN1Y2Nlc3MKKiBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIDg4RTMwODEgZGF0YSBzaGVldCByZWdpc3RlciAxOAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpHVF9TVEFUVVMgZ3BydFBoeUludEVuYWJsZQooCklOIEdUX1FEX0RFViAqZGV2LApJTiBHVF9MUE9SVCAgIHBvcnQsCklOIEdUX1UxNglpbnRUeXBlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UGh5SW50U3RhdHVzCioKKiBERVNDUklQVElPTjoKKiBDaGVjayB0byBzZWUgaWYgYSBzcGVjaWZpYyB0eXBlIG9mICBpbnRlcnJ1cHQgb2NjdXJlZAoqCiogSU5QVVRTOgoqIHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogaW50VHlwZSAtIHRoZSB0eXBlIG9mIGludGVycnVwdCB3aGljaCBjYXVzZXMgYW4gaW50ZXJydXB0LgoqCQkJYW55IGNvbWJpbmF0aW9uIG9mIAoqCQkJR1RfU1BFRURfQ0hBTkdFRCwKKgkJCUdUX0RVUExFWF9DSEFOR0VELAoqCQkJR1RfUEFHRV9SRUNFSVZFRCwKKgkJCUdUX0FVVE9fTkVHX0NPTVBMRVRFRCwKKgkJCUdUX0xJTktfU1RBVFVTX0NIQU5HRUQsCioJCQlHVF9TWU1CT0xfRVJST1IsCioJCQlHVF9GQUxTRV9DQVJSSUVSLAoqCQkJR1RfRklGT19GTE9XLAoqCQkJR1RfQ1JPU1NPVkVSX0NIQU5HRUQsCioJCQlHVF9QT0xBUklUWV9DSEFOR0VELCBhbmQKKgkJCUdUX0pBQkJFUgoqCiogT1VUUFVUUzoKKiBOb25lLgoqCiogUkVUVVJOUzoKKiBHVF9PSyAtIG9uIHN1Y2Nlc3MKKiBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqIDg4RTMwODEgZGF0YSBzaGVldCByZWdpc3RlciAxOQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpHVF9TVEFUVVMgZ3BydEdldFBoeUludFN0YXR1cwooCklOIEdUX1FEX0RFViAqZGV2LApJTiAgR1RfTFBPUlQgcG9ydCwKT1VUICBHVF9VMTYqIGludFR5cGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFBoeUludFBvcnRTdW1tYXJ5CioKKiBERVNDUklQVElPTjoKKiBMaXN0cyB0aGUgcG9ydHMgdGhhdCBoYXZlIGFjdGl2ZSBpbnRlcnJ1cHRzLiBJdCBwcm92aWRlcyBhIHF1aWNrIHdheSB0byAKKiBpc29sYXRlIHRoZSBpbnRlcnJ1cHQgc28gdGhhdCB0aGUgTUFDIG9yIHN3aXRjaCBkb2VzIG5vdCBoYXZlIHRvIHBvbGwgdGhlCiogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAoMTkpIGZvciBhbGwgcG9ydHMuIFJlYWRpbmcgdGhpcyByZWdpc3RlciBkb2VzIG5vdAoqIGRlLWFzc2VydCB0aGUgSU5UIyBwaW4KKgoqIElOUFVUUzoKKiBub25lCioKKiBPVVRQVVRTOgoqIEdUX1U4ICppbnRQb3J0TWFzayAtIGJpdCBNYXNrIHdpdGggdGhlIGJpdHMgc2V0IGZvciB0aGUgY29ycmVzcG9uZGluZyAKKiBwaHlzIHdpdGggYWN0aXZlIGludGVycnVwdC4gRS5nLiwgdGhlIGJpdCBudW1iZXIgMCBhbmQgMiBhcmUgc2V0IHdoZW4gCiogcG9ydCBudW1iZXIgMCBhbmQgMiBoYXZlIGFjdGl2ZSBpbnRlcnJ1cHQKKgoqIFJFVFVSTlM6CiogR1RfT0sgLSBvbiBzdWNjZXNzCiogR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiA4OEUzMDgxIGRhdGEgc2hlZXQgcmVnaXN0ZXIgMjAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKR1RfU1RBVFVTIGdwcnRHZXRQaHlJbnRQb3J0U3VtbWFyeQooCklOIEdUX1FEX0RFViAqZGV2LApPVVQgR1RfVTE2ICppbnRQb3J0TWFzawopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRGb3JjZUZjCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0IHRoZSBmb3JjZSBmbG93IGNvbnRyb2wgc3RhdGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBmb3JjZSAtIEdUX1RSVUUgZm9yIGZvcmNlIGZsb3cgY29udHJvbCAgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0Rm9yY2VGYwooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUIHBvcnQsCiAgICBJTiBHVF9CT09MICBmb3JjZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRGb3JjZUZjCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IHRoZSBmb3JjZSBmbG93IGNvbnRyb2wgc3RhdGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgZm9yY2UgLSBHVF9UUlVFIGZvciBmb3JjZSBmbG93IGNvbnRyb2wgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEZvcmNlRmMKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgcG9ydCwKICAgIE9VVCBHVF9CT09MICAqZm9yY2UKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0VHJhaWxlck1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXQgdGhlIGVncmVzcyB0cmFpbGVyIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgLSBHVF9UUlVFIGZvciBhZGQgdHJhaWxlciBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRUcmFpbGVyTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUIHBvcnQsCiAgICBJTiBHVF9CT09MICBtb2RlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFRyYWlsZXJNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IHRoZSBlZ3Jlc3MgdHJhaWxlciBtb2RlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgLSBHVF9UUlVFIGZvciBhZGQgdHJhaWxlciBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRUcmFpbGVyTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICptb2RlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldEluZ3Jlc3NNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0IHRoZSBpbmdyZXNzIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgLSB0aGUgaW5ncmVzcyBtb2RlLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRJbmdyZXNzTW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgSU4gR1RfSU5HUkVTU19NT0RFIG1vZGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0SW5ncmVzc01vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXQgdGhlIGluZ3Jlc3MgbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gdGhlIGluZ3Jlc3MgbW9kZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0SW5ncmVzc01vZGUKKAogICAgSU4gR1RfUURfREVWICAgICAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgT1VUIEdUX0lOR1JFU1NfTU9ERSAqbW9kZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRNY1JhdGVMaW1pdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldCB0aGUgcG9ydCBtdWx0aWNhc3QgcmF0ZSBsaW1pdC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgcmF0ZSAtIEdUX1RSVUUgdG8gRW5hYmxlLCBHVF9GQUxTRSBmb3Igb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldE1jUmF0ZUxpbWl0CigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgIHBvcnQsCiAgICBJTiBHVF9NQ19SQVRFICAgcmF0ZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRNY1JhdGVMaW1pdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIEdldCB0aGUgcG9ydCBtdWx0aWNhc3QgcmF0ZSBsaW1pdC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIHJhdGUgLSBHVF9UUlVFIHRvIEVuYWJsZSwgR1RfRkFMU0UgZm9yIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRNY1JhdGVMaW1pdAooCiAgICBJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICBwb3J0LAogICAgT1VUIEdUX01DX1JBVEUgICpyYXRlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldEN0ck1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBwb3J0IGNvdW50ZXJzIG1vZGUgb2Ygb3BlcmF0aW9uLgoqCiogSU5QVVRTOgoqICAgICAgIG1vZGUgIC0gdGhlIGNvdW50ZXIgbW9kZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRDdHJNb2RlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfQ1RSX01PREUgIG1vZGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0Q2xlYXJBbGxDdHIKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBjbGVhcnMgYWxsIHBvcnQgY291bnRlcnMuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRDbGVhckFsbEN0cgooCiAgICBJTiBHVF9RRF9ERVYgKmRldgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFBvcnRDdHIKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSBwb3J0IGNvdW50ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIGN0ciAtIHRoZSBjb3VudGVycyB2YWx1ZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQb3J0Q3RyCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgT1VUIEdUX1BPUlRfU1RBVCAgICAqY3RyCik7CgoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQYXJ0bmVyTGlua1BhdXNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmV0cml2ZXMgdGhlIGxpbmsgcGFydG5lciBwYXVzZSBzdGF0ZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIHN0YXRlIC0gR1RfVFJVRSBmb3IgZW5hYmxlICBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQYXJ0bmVyTGlua1BhdXNlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKnN0YXRlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFNlbGZMaW5rUGF1c2UKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXRyaXZlcyB0aGUgbGluayBwYXVzZSBzdGF0ZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIHN0YXRlIC0gR1RfVFJVRSBmb3IgZW5hYmxlICBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRTZWxmTGlua1BhdXNlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKnN0YXRlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFJlc29sdmUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXRyaXZlcyB0aGUgcmVzb2x2ZSBzdGF0ZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIHN0YXRlIC0gR1RfVFJVRSBmb3IgRG9uZSAgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UmVzb2x2ZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICpzdGF0ZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRMaW5rU3RhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXRyaXZlcyB0aGUgbGluayBzdGF0ZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIHN0YXRlIC0gR1RfVFJVRSBmb3IgVXAgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldExpbmtTdGF0ZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICpzdGF0ZQopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQb3J0TW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJldHJpdmVzIHRoZSBwb3J0IG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gR1RfVFJVRSBmb3IgTUlJICBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQb3J0TW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICptb2RlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFBoeU1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXRyaXZlcyB0aGUgUEhZIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gR1RfVFJVRSBmb3IgTUlJIFBIWSAgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UGh5TW9kZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICptb2RlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldER1cGxleAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJldHJpdmVzIHRoZSBwb3J0IGR1cGxleCBtb2RlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIEdUX1RSVUUgZm9yIEZ1bGwgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldER1cGxleAooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICptb2RlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFNwZWVkCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmV0cml2ZXMgdGhlIHBvcnQgc3BlZWQuCioKKiBJTlBVVFM6CiogICAgICAgc3BlZWQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIEdUX1RSVUUgZm9yIDEwME1iL3MgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFNwZWVkCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKnNwZWVkCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXREdXBsZXgKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBkdXBsZXggbW9kZSBvZiBNSUkvU05JL1JNSUkgcG9ydHMuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIAl0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJCQkoZm9yIEZ1bGxTYWlsLCBpdCB3aWxsIGJlIHBvcnQgMiwgYW5kIGZvciBDbGlwcGVyU2hpcCwgCioJCQkJaXQgY291bGQgYmUgZWl0aGVyIHBvcnQgNSBvciBwb3J0IDYuKQoqICAgICAgIG1vZGUgLSAgR1RfVFJVRSBmb3IgRnVsbCBEdXBsZXgsCioJCQkJR1RfRkFMU0UgZm9yIEhhbGYgRHVwbGV4LgoqCiogT1VUUFVUUzogTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldER1cGxleAooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgSU4gIEdUX0JPT0wgIG1vZGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NTZXRQb3J0RGVmYXVsdFRjCioKKiBERVNDUklQVElPTjoKKiAgICAgICBTZXRzIHRoZSBkZWZhdWx0IHRyYWZmaWMgY2xhc3MgZm9yIGEgc3BlY2lmaWMgcG9ydC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgdHJhZkNsYXNzIC0gZGVmYXVsdCB0cmFmZmljIGNsYXNzIG9mIGEgcG9ydC4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdjb3NTZXRQb3J0RGVmYXVsdFRjCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfTFBPUlQgcG9ydCwKICAgIElOIEdUX1U4ICAgIHRyYWZDbGFzcwopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2Nvc0dldFBvcnREZWZhdWx0VGMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgdGhlIGRlZmF1bHQgdHJhZmZpYyBjbGFzcyBmb3IgYSBzcGVjaWZpYyBwb3J0LgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CiogICAgICAgdHJhZkNsYXNzIC0gZGVmYXVsdCB0cmFmZmljIGNsYXNzIG9mIGEgcG9ydC4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdjb3NHZXRQb3J0RGVmYXVsdFRjCigKICAgIElOICBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUICAgcG9ydCwKICAgIE9VVCBHVF9VOCAgICAgKnRyYWZDbGFzcwopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc1NldFByaW9NYXBSdWxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBwcmlvcml0eSBtYXBwaW5nIHJ1bGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgLSBHVF9UUlVFIGZvciB1c2VyIHByaW8gcnVsZSwgR1RfRkFMU0UgZm9yIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NTZXRQcmlvTWFwUnVsZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUIHBvcnQsCiAgICBJTiBHVF9CT09MICBtb2RlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc0dldFByaW9NYXBSdWxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IHRoZSBwcmlvcml0eSBtYXBwaW5nIHJ1bGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIEdUX1RSVUUgZm9yIHVzZXIgcHJpbyBydWxlLCBHVF9GQUxTRSBmb3Igb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldFByaW9NYXBSdWxlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKm1vZGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zSXBQcmlvTWFwRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzIHRoZSBJUCBwcmlvcml0eSBtYXBwaW5nLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBlbiAgIC0gR1RfVFJVRSB0byBFbmFibGUsIEdUX0ZBTFNFIGZvciBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zSXBQcmlvTWFwRW4KKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9MUE9SVCBwb3J0LAogICAgSU4gR1RfQk9PTCAgZW4KKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zR2V0SXBQcmlvTWFwRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXR1cm4gdGhlIElQIHByaW9yaXR5IG1hcHBpbmcgc3RhdGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgZW4gICAgLSBHVF9UUlVFIGZvciB1c2VyIHByaW8gcnVsZSwgR1RfRkFMU0UgZm9yIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NHZXRJcFByaW9NYXBFbgooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0JPT0wgICplbgopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NVc2VyUHJpb01hcEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZW5hYmxlcyB0aGUgdXNlciBwcmlvcml0eSBtYXBwaW5nLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBlbiAgIC0gR1RfVFJVRSB0byBFbmFibGUsIEdUX0ZBTFNFIGZvciBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zVXNlclByaW9NYXBFbgooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOIEdUX0xQT1JUIHBvcnQsCiAgICBJTiBHVF9CT09MICBlbgopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NHZXRVc2VyUHJpb01hcEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmV0dXJuIHRoZSB1c2VyIHByaW9yaXR5IG1hcHBpbmcgc3RhdGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgZW4gICAgLSBHVF9UUlVFIGZvciB1c2VyIHByaW8gcnVsZSwgR1RfRkFMU0UgZm9yIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NHZXRVc2VyUHJpb01hcEVuCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKmVuCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2Nvc0dldFVzZXJQcmlvMlRjCioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXRzIHRoZSB0cmFmZmljIGNsYXNzIG51bWJlciBmb3IgYSBzcGVjaWZpYyA4MDIuMXAgdXNlciBwcmlvcml0eS4KKgoqIElOUFVUUzoKKiAgICAgICB1c2VyUHJpb3IgLSB1c2VyIHByaW9yaXR5CioKKiBPVVRQVVRTOgoqICAgICAgIHRyQ2xhc3MgLSBUaGUgVHJhZmZpYyBDbGFzcyB0aGUgcmVjZWl2ZWQgZnJhbWUgaXMgYXNzaWduZWQuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqICAgICAgIFRhYmxlIC0gVXNlclByaW8yVGMKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2Nvc0dldFVzZXJQcmlvMlRjCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX1U4ICAgIHVzZXJQcmlvciwKICAgIE9VVCBHVF9VOCAgICp0ckNsYXNzCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnY29zU2V0VXNlclByaW8yVGMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFNldHMgdGhlIHRyYWZmaWMgY2xhc3MgbnVtYmVyIGZvciBhIHNwZWNpZmljIDgwMi4xcCB1c2VyIHByaW9yaXR5LgoqCiogSU5QVVRTOgoqICAgICAgIHVzZXJQcmlvciAtIHVzZXIgcHJpb3JpdHkgb2YgYSBwb3J0LgoqICAgICAgIHRyQ2xhc3MgICAtIHRoZSBUcmFmZmljIENsYXNzIHRoZSByZWNlaXZlZCBmcmFtZSBpcyBhc3NpZ25lZC4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CiogICAgICAgVGFibGUgLSBVc2VyUHJpbzJUYwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnY29zU2V0VXNlclByaW8yVGMKKAogICAgSU4gR1RfUURfREVWICpkZXYsCiAgICBJTiBHVF9VOCAgICB1c2VyUHJpb3IsCiAgICBJTiBHVF9VOCAgICB0ckNsYXNzCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnY29zR2V0RHNjcDJUYwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJldHJpZXZlcyB0aGUgdHJhZmZpYyBjbGFzcyBhc3NpZ25lZCBmb3IgYSBzcGVjaWZpYwoqICAgICAgIElQdjQgRHNjcC4KKgoqIElOUFVUUzoKKiAgICAgICBkc2NwICAgIC0gdGhlIElQdjQgZnJhbWUgZHNjcCB0byBxdWVyeS4KKgoqIE9VVFBVVFM6CiogICAgICAgdHJDbGFzcyAtIFRoZSBUcmFmZmljIENsYXNzIHRoZSByZWNlaXZlZCBmcmFtZSBpcyBhc3NpZ25lZC4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CiogICAgICAgVGFibGUgLSBVc2VyUHJpbzJUYwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnY29zR2V0RHNjcDJUYwooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9VOCAgIGRzY3AsCiAgICBPVVQgR1RfVTggICAqdHJDbGFzcwopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2Nvc1NldERzY3AyVGMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSB0cmFmZmljIGNsYXNzIGFzc2lnbmVkIGZvciBhIHNwZWNpZmljCiogICAgICAgSVB2NCBEc2NwLgoqCiogSU5QVVRTOgoqICAgICAgIGRzY3AgICAgLSB0aGUgSVB2NCBmcmFtZSBkc2NwIHRvIG1hcC4KKiAgICAgICB0ckNsYXNzIC0gdGhlIFRyYWZmaWMgQ2xhc3MgdGhlIHJlY2VpdmVkIGZyYW1lIGlzIGFzc2lnbmVkLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKiAgICAgICBUYWJsZSAtIFVzZXJQcmlvMlRjCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdjb3NTZXREc2NwMlRjCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gR1RfVTggICAgZHNjcCwKICAgIElOIEdUX1U4ICAgIHRyQ2xhc3MKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIHFkTG9hZERyaXZlcgoqCiogREVTQ1JJUFRJT046CiogICAgICAgUXVhcnRlckRlY2sgRHJpdmVyIEluaXRpYWxpemF0aW9uIFJvdXRpbmUuIAoqICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHJvdXRpbmUgdGhhdCBuZWVkcyBiZSBjYWxsZWQgYnkgc3lzdGVtIHNvZnR3YXJlLiAKKiAgICAgICBJdCB0YWtlcyBzeXNDZmcgZnJvbSBzeXN0ZW0gc29mdHdhcmUsIGFuZCByZXR1cmVzIGEgcG9pbnRlciAoKmRldikgCiogICAgICAgdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCBpbmNsdWRlcyBpbmZvbWF0aW9uIHJlbGF0ZWQgdG8gdGhpcyBRdWFydGVyRGVjawoqICAgICAgIGRldmljZS4gVGhpcyBwb2ludGVyICgqZGV2KSBpcyB0aGVuIHVzZWQgZm9yIGFsbCB0aGUgQVBJIGZ1bmN0aW9ucy4gCioKKiBJTlBVVFM6CiogICAgICAgc3lzQ2ZnICAgICAgLSBIb2xkcyBzeXN0ZW0gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogT1VUUFVUUzoKKiAgICAgICBkZXYgICAgICAgICAtIEhvbGRzIGdlbmVyYWwgc3lzdGVtIGluZm9ybWF0aW9uLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0FMUkVBRFlfRVhJU1QgICAgLSBpZiBkZXZpY2UgYWxyZWFkeSBzdGFydGVkCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzoKKiAJcWRVbmxvYWREcml2ZXIgaXMgcHJvdmlkZWQgd2hlbiB0aGUgZHJpdmVyIGlzIG5vdCB0byBiZSB1c2VkIGFueW1vcmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIHFkTG9hZERyaXZlcgooCiAgICBJTiAgR1RfU1lTX0NPTkZJRyAgICpzeXNDZmcsCiAgICBPVVQgR1RfUURfREVWCSpkZXYKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIHFkVW5sb2FkRHJpdmVyCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIGZ1bmN0aW9uIHVubG9hZHMgdGhlIFF1YXRlckRlY2sgRHJpdmVyLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgMS4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG9mCiogICAgICAgICAgIHFkTG9hZERyaXZlcigpLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBxZFVubG9hZERyaXZlcgooCiAgICBJTiBHVF9RRF9ERVYqIGRldgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogc3lzRW5hYmxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIHN5c3RlbSBmb3IgZnVsbCBvcGVyYXRpb24uCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgc3lzRW5hYmxlCigKICAgIElOIEdUX1FEX0RFViogZGV2Cik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU3dSZXNldAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHByZWZvcm1zIHN3aXRjaCBzb2Z0d2FyZSByZXNldC4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1N3UmVzZXQKKAogICAgSU4gR1RfUURfREVWKiBkZXYKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXREaXNjYXJkRXhjZXNzaXZlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0IHRoZSBEaXNjYXJkIEV4Y2Vzc2l2ZSBzdGF0ZS4KKgoqIElOUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgRGlzY2FyZCBpcyBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0RGlzY2FyZEV4Y2Vzc2l2ZQooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIElOIEdUX0JPT0wgZW4KKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0RGlzY2FyZEV4Y2Vzc2l2ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldCB0aGUgRGlzY2FyZCBFeGNlc3NpdmUgc3RhdGUuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgZW4gLSBHVF9UUlVFIERpc2NhcmQgaXMgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0RGlzY2FyZEV4Y2Vzc2l2ZQooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIElOIEdUX0JPT0wgKmVuCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFNjaGVkdWxpbmdNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0IHRoZSBTY2hlZHVsaW5nIE1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgbW9kZSAtIEdUX1RSVUUgd3JyLCBHVF9GQUxTRSBzdHJpY3QuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0U2NoZWR1bGluZ01vZGUKKAogICAgSU4gR1RfUURfREVWKiBkZXYsCiAgICBJTiBHVF9CT09MIG1vZGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0U2NoZWR1bGluZ01vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXQgdGhlIFNjaGVkdWxpbmcgTW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gR1RfVFJVRSB3cnIsIEdUX0ZBTFNFIHN0cmljdC4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAtIG9uIGJhZCBwYXJhbWV0ZXIKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFNjaGVkdWxpbmdNb2RlCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgT1VUIEdUX0JPT0wgKm1vZGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0TWF4RnJhbWVTaXplCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgU2V0IHRoZSBtYXggZnJhbWUgc2l6ZSBhbGxvd2VkLgoqCiogSU5QVVRTOgoqICAgICAgIG1vZGUgLSBHVF9UUlVFIG1heCBzaXplIDE1MjIsIEdUX0ZBTFNFIG1heCBzaXplIDE1MzUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0TWF4RnJhbWVTaXplCigKICAgIElOIEdUX1FEX0RFViogZGV2LAogICAgSU4gR1RfQk9PTCBtb2RlCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldE1heEZyYW1lU2l6ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIEdldCB0aGUgbWF4IGZyYW1lIHNpemUgYWxsb3dlZC4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gR1RfVFJVRSBtYXggc2l6ZSAxNTIyLCBHVF9GQUxTRSBtYXggc2l6ZSAxNTM1LgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0TWF4RnJhbWVTaXplCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgT1VUIEdUX0JPT0wgKm1vZGUKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzUmVMb2FkCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgY2F1c2UgdG8gdGhlIHN3aXRjaCB0byByZWxvYWQgdGhlIEVFUFJPTS4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1JlTG9hZAooCiAgICBJTiBHVF9RRF9ERVYqIGRldgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFdhdGNoRG9nCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgU2V0IHRoZSB0aGUgd2F0Y2ggZG9nIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgZW4gLSBHVF9UUlVFIGVuYWJsZXMsIEdUX0ZBTFNFIGRpc2FibGUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0V2F0Y2hEb2cKKAogICAgSU4gR1RfUURfREVWKiBkZXYsCiAgICBJTiBHVF9CT09MIGVuCik7CgoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFdhdGNoRG9nCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgR2V0IHRoZSB0aGUgd2F0Y2ggZG9nIG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgZW4gLSBHVF9UUlVFIGVuYWJsZXMsIEdUX0ZBTFNFIGRpc2FibGUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRXYXRjaERvZwooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIE9VVCBHVF9CT09MICplbgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldER1cGxleFBhdXNlTWFjCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgZnVsbCBkdXBsZXggcGF1c2Ugc3JjIE1hYyBBZGRyZXNzLgoqCiogSU5QVVRTOgoqICAgICAgIG1hYyAtIFRoZSBNYWMgYWRkcmVzcyB0byBiZSBzZXQuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXREdXBsZXhQYXVzZU1hYwooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIElOIEdUX0VUSEVSQUREUiAqbWFjCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0RHVwbGV4UGF1c2VNYWMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBHZXRzIHRoZSBmdWxsIGR1cGxleCBwYXVzZSBzcmMgTWFjIEFkZHJlc3MuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgbWFjIC0gdGhlIE1hYyBhZGRyZXNzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0RHVwbGV4UGF1c2VNYWMKKAogICAgSU4gR1RfUURfREVWKiBkZXYsCiAgICBPVVQgR1RfRVRIRVJBRERSICptYWMKKTsKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UGVyUG9ydER1cGxleFBhdXNlTWFjCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB3aGV0aGVyIHRoZSBmdWxsIGR1cGxleCBwYXVzZSBzcmMgTWFjIEFkZHJlc3MgaXMgcGVyCiogICAgICAgcG9ydCBvciBwZXIgZGV2aWNlLgoqCiogSU5QVVRTOgoqICAgICAgIGVuIC0gR1RfVFVSRSBwZXIgcG9ydCBtYWMsIEdUX0ZBTFNFIGdsb2JhbCBtYWMuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0UGVyUG9ydER1cGxleFBhdXNlTWFjCigKICAgIElOIEdUX1FEX0RFViogZGV2LAogICAgSU4gR1RfQk9PTCBlbgopOwoKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRQZXJQb3J0RHVwbGV4UGF1c2VNYWMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBHZXRzIHdoZXRoZXIgdGhlIGZ1bGwgZHVwbGV4IHBhdXNlIHNyYyBNYWMgQWRkcmVzcyBpcyBwZXIKKiAgICAgICBwb3J0IG9yIHBlciBkZXZpY2UuCioKKiBJTlBVVFM6CiogICAgICAgZW4gLSBHVF9UVVJFIHBlciBwb3J0IG1hYywgR1RfRkFMU0UgZ2xvYmFsIG1hYy4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAtIG9uIGJhZCBwYXJhbWV0ZXIKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFBlclBvcnREdXBsZXhQYXVzZU1hYwooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIElOIEdUX0JPT0wgKmVuCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzUmVhZE1paVJlZ2lzdGVyCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmVhZHMgUXVhcnRlckRlY2sgUmVnaXN0ZXJzLiBTaW5jZSB0aGlzIHJvdXRpbmUgaXMgb25seSBmb3IKKgkJRGlhZ25vc3RpYyBQdXJwb3NlLCBubyBlcnJvciBjaGVja2luZyB3aWxsIGJlIHBlcmZvcm1lZC4KKgkJVXNlciBoYXMgdG8ga25vdyBleGFjdGx5IHdoaWNoIHBoeSBhZGRyZXNzKDAgfiAweDFGKSB3aWxsIGJlIHJlYWQuCioKKiBJTlBVVFM6CiogICAgICAgcGh5QWRkciAtIFBoeSBBZGRyZXNzIHRvIHJlYWQgdGhlIHJlZ2lzdGVyIGZvci4oIDAgfiAweDFGICkKKiAgICAgICByZWdBZGRyIC0gVGhlIHJlZ2lzdGVyJ3MgYWRkcmVzcy4KKgoqIE9VVFBVVFM6CiogICAgICAgZGF0YSAgICAtIFRoZSByZWFkIHJlZ2lzdGVyJ3MgZGF0YS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzUmVhZE1paVJlZwooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIElOICBHVF9VMzIJcGh5QWRkciwKICAgIElOICBHVF9VMzIJcmVnQWRkciwKICAgIE9VVCBHVF9VMzIJKmRhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1dyaXRlTWlpUmVnaXN0ZXIKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSB3cml0ZXMgUXVhcnRlckRlY2sgUmVnaXN0ZXJzLiBTaW5jZSB0aGlzIHJvdXRpbmUgaXMgb25seSBmb3IKKgkJRGlhZ25vc3RpYyBQdXJwb3NlLCBubyBlcnJvciBjaGVja2luZyB3aWxsIGJlIHBlcmZvcm1lZC4KKgkJVXNlciBoYXMgdG8ga25vdyBleGFjdGx5IHdoaWNoIHBoeSBhZGRyZXNzKDAgfiAweDFGKSB3aWxsIGJlIHJlYWQuCioKKiBJTlBVVFM6CiogICAgICAgcGh5QWRkciAtIFBoeSBBZGRyZXNzIHRvIHJlYWQgdGhlIHJlZ2lzdGVyIGZvci4oIDAgfiAweDFGICkKKiAgICAgICByZWdBZGRyIC0gVGhlIHJlZ2lzdGVyJ3MgYWRkcmVzcy4KKiAgICAgICBkYXRhICAgIC0gZGF0YSB0byBiZSB3cml0dGVuLgoqCiogT1VUUFVUUzoKKgkJTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNXcml0ZU1paVJlZwooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIElOICBHVF9VMzIJcGh5QWRkciwKICAgIElOICBHVF9VMzIJcmVnQWRkciwKICAgIElOICBHVF9VMTYJZGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0U1dfTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldCB0aGUgU3dpdGNoIG1vZGUuIFRoZXNlIHR3byBiaXRzIHJldHVyZW4gCiogICAgICAgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFNXX01PREVbMTowXSBwaW5zLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgLSBHVF9UUlVFIERpc2NhcmQgaXMgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAJCVRoaXMgZmVhdHVyZSBpcyBmb3IgYm90aCBjbGlwcGVyc2hpcCBhbmQgZnVsbHNhaWwKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFNXX01vZGUKKAogICAgSU4gR1RfUURfREVWKiBkZXYsCiAgICBJTiBHVF9TV19NT0RFICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRJbml0UmVhZHkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXQgdGhlIEluaXRSZWFkeSBiaXQuIFRoaXMgYml0IGlzIHNldCB0byBhIG9uZSB3aGVuIHRoZSBBVFUsCiogICAgICAgdGhlIFF1ZXVlIENvbnRyb2xsZXIgYW5kIHRoZSBTdGF0aXN0aWNzIENvbnRyb2xsZXIgYXJlIGRvbmUgd2l0aCB0aGVpciAKKiAgICAgICBpbml0aWFsaXphdGlvbiBhbmQgYXJlIHJlYWR5IHRvIGFjY2VwdCBmcmFtZXMuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIEdUX1RSVUU6IHN3aXRjaCBpcyByZWFkeSwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAJCVRoaXMgZmVhdHVyZSBpcyBmb3IgYm90aCBjbGlwcGVyc2hpcCBhbmQgZnVsbHNhaWwKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEluaXRSZWFkeQooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIElOIEdUX0JPT0wgKm1vZGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdGF0c0ZsdXNoQWxsCioKKiBERVNDUklQVElPTjoKKiAgICAgICBGbHVzaCBBbGwgUk1PTiBjb3VudGVycyBmb3IgYWxsIHBvcnRzLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdGF0c0ZsdXNoQWxsCigKICAgIElOIEdUX1FEX0RFViogZGV2Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdGF0c0ZsdXNoUG9ydAoqCiogREVTQ1JJUFRJT046CiogICAgICAgRmx1c2ggQWxsIFJNT04gY291bnRlcnMgZm9yIGEgZ2l2ZW4gcG9ydC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqICAgICAgIE5vbmUKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0YXRzRmx1c2hQb3J0CigKICAgIElOIEdUX1FEX0RFViogZGV2LAogICAgSU4gR1RfTFBPUlQJcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3RhdHNHZXRQb3J0Q291bnRlcgoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIGEgc3BlY2lmaWMgY291bnRlciBvZiB0aGUgZ2l2ZW4gcG9ydAoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCWNvdW50ZXIgLSB0aGUgY291bnRlciB3aGljaCB3aWxsIGJlIHJlYWQKKgoqIE9VVFBVVFM6CioJCXN0YXRzRGF0YSAtIHBvaW50cyB0byAzMmJpdCBkYXRhIHN0b3JhZ2UgZm9yIHRoZSBNSUIgY291bnRlcgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3RhdHNHZXRQb3J0Q291bnRlcgooCglJTiAgR1RfUURfREVWCQkqZGV2LAoJSU4gIEdUX0xQT1JUCQlwb3J0LAoJSU4gIEdUX1NUQVRTX0NPVU5URVJTCWNvdW50ZXIsCglPVVQgR1RfVTMyCQkJKnN0YXRzRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3RhdHNHZXRQb3J0QWxsQ291bnRlcnMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIGFsbCBSTU9OIGNvdW50ZXJzIG9mIHRoZSBnaXZlbiBwb3J0CioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBzdGF0c0NvdW50ZXJTZXQgLSBwb2ludHMgdG8gR1RfU1RBVFNfQ09VTlRFUl9TRVQgZm9yIHRoZSBNSUIgY291bnRlcnMKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0YXRzR2V0UG9ydEFsbENvdW50ZXJzCigKCUlOICBHVF9RRF9ERVYqIGRldiwKCUlOICBHVF9MUE9SVAkJcG9ydCwKCU9VVCBHVF9TVEFUU19DT1VOVEVSX1NFVAkqc3RhdHNDb3VudGVyU2V0Cik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNTZXRMaW1pdE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBwb3J0J3MgcmF0ZSBjb250cm9sIGluZ3Jlc3MgbGltaXQgbW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0CS0gbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBtb2RlIAktIHJhdGUgY29udHJvbCBpbmdyZXNzIGxpbWl0IG1vZGUuIAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjU2V0TGltaXRNb2RlCigKICAgIElOIEdUX1FEX0RFViogICAgICAgICAgICBkZXYsCiAgICBJTiBHVF9MUE9SVCAJICAgICBwb3J0LAogICAgSU4gR1RfUkFURV9MSU1JVF9NT0RFICAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjR2V0TGltaXRNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgcG9ydCdzIHJhdGUgY29udHJvbCBpbmdyZXNzIGxpbWl0IG1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydAktIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgCS0gcmF0ZSBjb250cm9sIGluZ3Jlc3MgbGltaXQgbW9kZS4gCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY0dldExpbWl0TW9kZQooCiAgICBJTiBHVF9RRF9ERVYqIGRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX1JBVEVfTElNSVRfTU9ERSAgICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNTZXRQcmkzUmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIGluZ3Jlc3MgZGF0YSByYXRlIGxpbWl0IGZvciBwcmlvcml0eSAzIGZyYW1lcy4KKiAgICAgICBQcmlvcml0eSAzIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZCBhZnRlciB0aGUgaW5ncmVzcyByYXRlIHNlbGVjdGlvbgoqICAgICAgIGlzIHJlYWNoZWQgb3IgZXhjZWVkZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG1vZGUgLSB0aGUgcHJpb3JpdHkgMyBmcmFtZSByYXRlIGxpbWl0IG1vZGUKKiAgICAgICAgICAgICAgR1RfRkFMU0U6IHVzZSB0aGUgc2FtZSByYXRlIGFzIFByaTJSYXRlCiogICAgICAgICAgICAgIEdUX1RSVUU6ICB1c2UgdHdpY2UgdGhlIHJhdGUgYXMgUHJpMlJhdGUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjU2V0UHJpM1JhdGUKKAogICAgSU4gR1RfUURfREVWKiAgICAgICAgICAgIGRldiwKICAgIElOIEdUX0xQT1JUIHBvcnQsCiAgICBJTiBHVF9CT09MICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY0dldFByaTNSYXRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgaW5ncmVzcyBkYXRhIHJhdGUgbGltaXQgZm9yIHByaW9yaXR5IDMgZnJhbWVzLgoqICAgICAgIFByaW9yaXR5IDMgZnJhbWVzIHdpbGwgYmUgZGlzY2FyZGVkIGFmdGVyIHRoZSBpbmdyZXNzIHJhdGUgc2VsZWN0aW9uCiogICAgICAgaXMgcmVhY2hlZCBvciBleGNlZWRlZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gdGhlIHByaW9yaXR5IDMgZnJhbWUgcmF0ZSBsaW1pdCBtb2RlCiogICAgICAgICAgICAgIEdUX0ZBTFNFOiB1c2UgdGhlIHNhbWUgcmF0ZSBhcyBQcmkyUmF0ZQoqICAgICAgICAgICAgICBHVF9UUlVFOiAgdXNlIHR3aWNlIHRoZSByYXRlIGFzIFByaTJSYXRlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY0dldFByaTNSYXRlCigKICAgIElOIEdUX1FEX0RFViogZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjU2V0UHJpMlJhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBpbmdyZXNzIGRhdGEgcmF0ZSBsaW1pdCBmb3IgcHJpb3JpdHkgMiBmcmFtZXMuCiogICAgICAgUHJpb3JpdHkgMiBmcmFtZXMgd2lsbCBiZSBkaXNjYXJkZWQgYWZ0ZXIgdGhlIGluZ3Jlc3MgcmF0ZSBzZWxlY3Rpb24KKiAgICAgICBpcyByZWFjaGVkIG9yIGV4Y2VlZGVkLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBtb2RlIC0gdGhlIHByaW9yaXR5IDIgZnJhbWUgcmF0ZSBsaW1pdCBtb2RlCiogICAgICAgICAgICAgIEdUX0ZBTFNFOiB1c2UgdGhlIHNhbWUgcmF0ZSBhcyBQcmkxUmF0ZQoqICAgICAgICAgICAgICBHVF9UUlVFOiAgdXNlIHR3aWNlIHRoZSByYXRlIGFzIFByaTFSYXRlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY1NldFByaTJSYXRlCigKICAgIElOIEdUX1FEX0RFViogICAgICAgICAgICBkZXYsCiAgICBJTiBHVF9MUE9SVCBwb3J0LAogICAgSU4gR1RfQk9PTCAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNHZXRQcmkyUmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgdGhlIGluZ3Jlc3MgZGF0YSByYXRlIGxpbWl0IGZvciBwcmlvcml0eSAyIGZyYW1lcy4KKiAgICAgICBQcmlvcml0eSAyIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZCBhZnRlciB0aGUgaW5ncmVzcyByYXRlIHNlbGVjdGlvbgoqICAgICAgIGlzIHJlYWNoZWQgb3IgZXhjZWVkZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIAoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIHRoZSBwcmlvcml0eSAyIGZyYW1lIHJhdGUgbGltaXQgbW9kZQoqICAgICAgICAgICAgICBHVF9GQUxTRTogdXNlIHRoZSBzYW1lIHJhdGUgYXMgUHJpMVJhdGUKKiAgICAgICAgICAgICAgR1RfVFJVRTogIHVzZSB0d2ljZSB0aGUgcmF0ZSBhcyBQcmkxUmF0ZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNHZXRQcmkyUmF0ZQooCiAgICBJTiBHVF9RRF9ERVYqICAgICAgICAgICAgZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjU2V0UHJpMVJhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBpbmdyZXNzIGRhdGEgcmF0ZSBsaW1pdCBmb3IgcHJpb3JpdHkgMSBmcmFtZXMuCiogICAgICAgUHJpb3JpdHkgMSBmcmFtZXMgd2lsbCBiZSBkaXNjYXJkZWQgYWZ0ZXIgdGhlIGluZ3Jlc3MgcmF0ZSBzZWxlY3Rpb24KKiAgICAgICBpcyByZWFjaGVkIG9yIGV4Y2VlZGVkLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBtb2RlIC0gdGhlIHByaW9yaXR5IDEgZnJhbWUgcmF0ZSBsaW1pdCBtb2RlCiogICAgICAgICAgICAgIEdUX0ZBTFNFOiB1c2UgdGhlIHNhbWUgcmF0ZSBhcyBQcmkwUmF0ZQoqICAgICAgICAgICAgICBHVF9UUlVFOiAgdXNlIHR3aWNlIHRoZSByYXRlIGFzIFByaTBSYXRlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY1NldFByaTFSYXRlCigKICAgIElOIEdUX1FEX0RFViogICAgICAgICAgICBkZXYsCiAgICBJTiBHVF9MUE9SVCBwb3J0LAogICAgSU4gR1RfQk9PTCAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNHZXRQcmkxUmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgdGhlIGluZ3Jlc3MgZGF0YSByYXRlIGxpbWl0IGZvciBwcmlvcml0eSAxIGZyYW1lcy4KKiAgICAgICBQcmlvcml0eSAxIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZCBhZnRlciB0aGUgaW5ncmVzcyByYXRlIHNlbGVjdGlvbgoqICAgICAgIGlzIHJlYWNoZWQgb3IgZXhjZWVkZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIAoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIHRoZSBwcmlvcml0eSAxIGZyYW1lIHJhdGUgbGltaXQgbW9kZQoqICAgICAgICAgICAgICBHVF9GQUxTRTogdXNlIHRoZSBzYW1lIHJhdGUgYXMgUHJpMFJhdGUKKiAgICAgICAgICAgICAgR1RfVFJVRTogIHVzZSB0d2ljZSB0aGUgcmF0ZSBhcyBQcmkwUmF0ZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNHZXRQcmkxUmF0ZQooCiAgICBJTiBHVF9RRF9ERVYqICAgICAgICAgICAgZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjU2V0UHJpMFJhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBwb3J0J3MgaW5ncmVzcyBkYXRhIGxpbWl0IGZvciBwcmlvcml0eSAwIGZyYW1lcy4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0CS0gbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICByYXRlICAgIC0gaW5ncmVzcyBkYXRhIHJhdGUgbGltaXQgZm9yIHByaW9yaXR5IDAgZnJhbWVzLiBUaGVzZSBmcmFtZXMKKiAgICAgICAJICB3aWxsIGJlIGRpc2NhcmRlZCBhZnRlciB0aGUgaW5ncmVzcyByYXRlIHNlbGVjdGVkIGlzIHJlYWNoZWQgCiogICAgICAgCSAgb3IgZXhjZWVkZWQuIAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNTZXRQcmkwUmF0ZQooCiAgICBJTiBHVF9RRF9ERVYqICAgICAgICAgICAgZGV2LAogICAgSU4gR1RfTFBPUlQgICAgICAgIHBvcnQsCiAgICBJTiBHVF9QUkkwX1JBVEUgICAgcmF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNHZXRQcmkwUmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgdGhlIHBvcnQncyBpbmdyZXNzIGRhdGEgbGltaXQgZm9yIHByaW9yaXR5IDAgZnJhbWVzLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQJLSBsb2dpY2FsIHBvcnQgbnVtYmVyIHRvIHNldC4KKgoqIE9VVFBVVFM6CiogICAgICAgcmF0ZSAgICAtIGluZ3Jlc3MgZGF0YSByYXRlIGxpbWl0IGZvciBwcmlvcml0eSAwIGZyYW1lcy4gVGhlc2UgZnJhbWVzCiogICAgICAgCSAgd2lsbCBiZSBkaXNjYXJkZWQgYWZ0ZXIgdGhlIGluZ3Jlc3MgcmF0ZSBzZWxlY3RlZCBpcyByZWFjaGVkIAoqICAgICAgIAkgIG9yIGV4Y2VlZGVkLiAKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjR2V0UHJpMFJhdGUKKAogICAgSU4gR1RfUURfREVWKiAgICAgICAgICAgIGRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX1BSSTBfUkFURSAgICAqcmF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNTZXRCeXRlc0NvdW50CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgYnlldHMgdG8gY291bnQgZm9yIGxpbWl0aW5nIG5lZWRzIHRvIGJlIGRldGVybWluZWQKKgoqIElOUFVUUzoKKiAgICAgICBwb3J0CSAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyIHRvIHNldC4KKiAgICAJbGltaXRNR01UIC0gR1RfVFJVRTogVG8gbGltaXQgYW5kIGNvdW50IE1HTVQgZnJhbWUgYnl0ZXMKKiAgICAJCSAgICBHVF9GQUxTRTogb3RoZXJ3aXNlCiogICAgCWNvdW50SUZHICAtIEdUX1RSVUU6IFRvIGNvdW50IElGRyBieXRlcwoqICAgIAkJICAgIEdUX0ZBTFNFOiBvdGhlcndpc2UKKiAgICAJY291bnRQcmUgIC0gR1RfVFJVRTogVG8gY291bnQgUHJlYW1ibGUgYnl0ZXMKKiAgICAJCSAgICBHVF9GQUxTRTogb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY1NldEJ5dGVzQ291bnQKKAogICAgSU4gR1RfUURfREVWKiAgICAgICBkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgCXBvcnQsCiAgICBJTiBHVF9CT09MIAkJbGltaXRNR01ULAogICAgSU4gR1RfQk9PTCAJCWNvdW50SUZHLAogICAgSU4gR1RfQk9PTCAJCWNvdW50UHJlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY0dldEJ5dGVzQ291bnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSBieWV0cyB0byBjb3VudCBmb3IgbGltaXRpbmcgbmVlZHMgdG8gYmUgZGV0ZXJtaW5lZAoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQJLSBsb2dpY2FsIHBvcnQgbnVtYmVyIAoqCiogT1VUUFVUUzoKKiAgICAJbGltaXRNR01UIC0gR1RfVFJVRTogVG8gbGltaXQgYW5kIGNvdW50IE1HTVQgZnJhbWUgYnl0ZXMKKiAgICAJCSAgICBHVF9GQUxTRTogb3RoZXJ3aXNlCiogICAgCWNvdW50SUZHICAtIEdUX1RSVUU6IFRvIGNvdW50IElGRyBieXRlcwoqICAgIAkJICAgIEdUX0ZBTFNFOiBvdGhlcndpc2UKKiAgICAJY291bnRQcmUgIC0gR1RfVFJVRTogVG8gY291bnQgUHJlYW1ibGUgYnl0ZXMKKiAgICAJCSAgICBHVF9GQUxTRTogb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY0dldEJ5dGVzQ291bnQKKAogICAgSU4gR1RfUURfREVWKiAgICAgICBkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgCXBvcnQsCiAgICBJTiBHVF9CT09MIAkJKmxpbWl0TUdNVCwKICAgIElOIEdUX0JPT0wgCQkqY291bnRJRkcsCiAgICBJTiBHVF9CT09MIAkJKmNvdW50UHJlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY1NldEVncmVzc1JhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBwb3J0J3MgZWdyZXNzIGRhdGEgbGltaXQuCioJCQoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgcmF0ZVR5cGUgIC0gZWdyZXNzIGRhdGEgcmF0ZSBsaW1pdCAoR1RfRVJBVEVfVFlQRSB1bmlvbiB0eXBlKS4gCioJCQkJCXVuaW9uIHR5cGUgaXMgdXNlZCB0byBzdXBwb3J0IG11bHRpcGxlIGRldmljZXMgd2l0aCB0aGUKKgkJCQkJZGlmZmVyZW50IGZvcm1hdHMgb2YgZWdyZXNzIHJhdGUuCioJCQkJCUdUX0VSQVRFX1RZUEUgaGFzIHRoZSBmb2xsb3dpbmcgZmllbGRzOgoqCQkJCQkJZGVmaW5lZFJhdGUgLSBHVF9FR1JFU1NfUkFURSBlbnVtIHR5cGUgc2hvdWxkIHVzZWQgZm9yIHRoZSAKKgkJCQkJCQlmb2xsb3dpbmcgZGV2aWNlczoKKgkJCQkJCQk4OEU2MjE4LCA4OEU2MzE4LCA4OEU2MDYzLCA4OEU2MDgzLCA4OEU2MTgxLCA4OEU2MTgzLAoqCQkJCQkJCTg4RTYwOTMsIDg4RTYwOTUsIDg4RTYxODUsIDg4RTYxMDgsIDg4RTYwNjUsIDg4RTYwNjEsIAoqCQkJCQkJCWFuZCB0aGVpciB2YXJpYXRpb25zCioJCQkJCQlrYlJhdGUgLSByYXRlIGluIGticHMgdGhhdCBzaG91bGQgdXNlZCBmb3IgdGhlIGZvbGxvd2luZyAKKgkJCQkJCQlkZXZpY2VzOgoqCQkJCQkJCTg4RTYwOTcsIDg4RTYwOTYgd2l0aCB0aGUgR1RfUElSTF9FTElNSVRfTU9ERSBvZiAKKgkJCQkJCQkJR1RfUElSTF9FTElNSVRfTEFZRVIxLAoqCQkJCQkJCQlHVF9QSVJMX0VMSU1JVF9MQVlFUjIsIG9yIAoqCQkJCQkJCQlHVF9QSVJMX0VMSU1JVF9MQVlFUjMgKHNlZSBncmNTZXRFTGltaXRNb2RlKQoqCQkJCQkJCTY0a2JwcyB+IDFNYnBzICAgIDogaW5jcmVtZW50cyBvZiA2NGticHMsCioJCQkJCQkJMU1icHMgfiAxMDBNYnBzICAgOiBpbmNyZW1lbnRzIG9mIDFNYnBzLCBhbmQKKgkJCQkJCQkxMDBNYnBzIH4gMTAwME1icHM6IGluY3JlbWVudHMgb2YgMTBNYnBzCioJCQkJCQkJVGhlcmVmb3JlLCB0aGUgdmFsaWQgdmFsdWVzIGFyZToKKgkJCQkJCQkJNjQsIDEyOCwgMTkyLCAyNTYsIDMyMCwgMzg0LC4uLiwgOTYwLAoqCQkJCQkJCQkxMDAwLCAyMDAwLCAzMDAwLCA0MDAwLCAuLi4sIDEwMDAwMCwKKgkJCQkJCQkJMTEwMDAwLCAxMjAwMDAsIDEzMDAwMCwgLi4uLCAxMDAwMDAwLgoqCQkJCQkJZlJhdGUgLSBmcmFtZSBwZXIgc2Vjb25kIHRoYXQgc2hvdWxkIHVzZWQgZm9yIHRoZSBmb2xsb3dpbmcKKgkJCQkJCQlkZXZpY2VzOgoqCQkJCQkJCTg4RTYwOTcsIDg4RTYwOTYgd2l0aCBHVF9QSVJMX0VMSU1JVF9NT0RFIG9mIAoqCQkJCQkJCQlHVF9QSVJMX0VMSU1JVF9GUkFNRQoqCQkJCQkJCVZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiA3NjAwIGFuZCAxNDg4MDAwCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzogCioJCQlHVF8xNk0sIEdUXzMyTSwgR1RfNjRNLCBHVF8xMjhNLCBhbmQgR1RfMjU2TSBpbiBHVF9FR1JFU1NfUkFURSBlbnVtCioJCQlhcmUgc3VwcG9ydGVkIG9ubHkgYnkgR2lnYWJpdCBFdGhlcm5ldCBTd2l0Y2guCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY1NldEVncmVzc1JhdGUKKAogICAgSU4gR1RfUURfREVWICAgICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIElOIEdUX0VSQVRFX1RZUEUgICAqcmF0ZVR5cGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjR2V0RWdyZXNzUmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgdGhlIHBvcnQncyBlZ3Jlc3MgZGF0YSBsaW1pdC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0CS0gbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgcmF0ZVR5cGUgIC0gZWdyZXNzIGRhdGEgcmF0ZSBsaW1pdCAoR1RfRVJBVEVfVFlQRSB1bmlvbiB0eXBlKS4gCioJCQkJCXVuaW9uIHR5cGUgaXMgdXNlZCB0byBzdXBwb3J0IG11bHRpcGxlIGRldmljZXMgd2l0aCB0aGUKKgkJCQkJZGlmZmVyZW50IGZvcm1hdHMgb2YgZWdyZXNzIHJhdGUuCioJCQkJCUdUX0VSQVRFX1RZUEUgaGFzIHRoZSBmb2xsb3dpbmcgZmllbGRzOgoqCQkJCQkJZGVmaW5lZFJhdGUgLSBHVF9FR1JFU1NfUkFURSBlbnVtIHR5cGUgc2hvdWxkIHVzZWQgZm9yIHRoZSAKKgkJCQkJCQlmb2xsb3dpbmcgZGV2aWNlczoKKgkJCQkJCQk4OEU2MjE4LCA4OEU2MzE4LCA4OEU2MDYzLCA4OEU2MDgzLCA4OEU2MTgxLCA4OEU2MTgzLAoqCQkJCQkJCTg4RTYwOTMsIDg4RTYwOTUsIDg4RTYxODUsIDg4RTYxMDgsIDg4RTYwNjUsIDg4RTYwNjEsIAoqCQkJCQkJCWFuZCB0aGVpciB2YXJpYXRpb25zCioJCQkJCQlrYlJhdGUgLSByYXRlIGluIGticHMgdGhhdCBzaG91bGQgdXNlZCBmb3IgdGhlIGZvbGxvd2luZyAKKgkJCQkJCQlkZXZpY2VzOgoqCQkJCQkJCTg4RTYwOTcsIDg4RTYwOTYgd2l0aCB0aGUgR1RfUElSTF9FTElNSVRfTU9ERSBvZiAKKgkJCQkJCQkJR1RfUElSTF9FTElNSVRfTEFZRVIxLAoqCQkJCQkJCQlHVF9QSVJMX0VMSU1JVF9MQVlFUjIsIG9yIAoqCQkJCQkJCQlHVF9QSVJMX0VMSU1JVF9MQVlFUjMgKHNlZSBncmNTZXRFTGltaXRNb2RlKQoqCQkJCQkJCTY0a2JwcyB+IDFNYnBzICAgIDogaW5jcmVtZW50cyBvZiA2NGticHMsCioJCQkJCQkJMU1icHMgfiAxMDBNYnBzICAgOiBpbmNyZW1lbnRzIG9mIDFNYnBzLCBhbmQKKgkJCQkJCQkxMDBNYnBzIH4gMTAwME1icHM6IGluY3JlbWVudHMgb2YgMTBNYnBzCioJCQkJCQkJVGhlcmVmb3JlLCB0aGUgdmFsaWQgdmFsdWVzIGFyZToKKgkJCQkJCQkJNjQsIDEyOCwgMTkyLCAyNTYsIDMyMCwgMzg0LC4uLiwgOTYwLAoqCQkJCQkJCQkxMDAwLCAyMDAwLCAzMDAwLCA0MDAwLCAuLi4sIDEwMDAwMCwKKgkJCQkJCQkJMTEwMDAwLCAxMjAwMDAsIDEzMDAwMCwgLi4uLCAxMDAwMDAwLgoqCQkJCQkJZlJhdGUgLSBmcmFtZSBwZXIgc2Vjb25kIHRoYXQgc2hvdWxkIHVzZWQgZm9yIHRoZSBmb2xsb3dpbmcKKgkJCQkJCQlkZXZpY2VzOgoqCQkJCQkJCTg4RTYwOTcsIDg4RTYwOTYgd2l0aCBHVF9QSVJMX0VMSU1JVF9NT0RFIG9mIAoqCQkJCQkJCQlHVF9QSVJMX0VMSU1JVF9GUkFNRQoqCQkJCQkJCVZhbGlkIHZhbHVlcyBhcmUgYmV0d2VlbiA3NjAwIGFuZCAxNDg4MDAwCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAgICAtIG9uIGJhZCBwYXJhbWV0ZXJzCioKKiBDT01NRU5UUzoKKgkJCUdUXzE2TSwgR1RfMzJNLCBHVF82NE0sIEdUXzEyOE0sIGFuZCBHVF8yNTZNIGluIEdUX0VHUkVTU19SQVRFIGVudW0KKgkJCWFyZSBzdXBwb3J0ZWQgb25seSBieSBHaWdhYml0IEV0aGVybmV0IFN3aXRjaC4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjR2V0RWdyZXNzUmF0ZQooCiAgICBJTiBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCBwb3J0LAogICAgT1VUIEdUX0VSQVRFX1RZUEUgICpyYXRlVHlwZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BhdlNldFBBVgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIFBvcnQgQXNzb2NpYXRpb24gVmVjdG9yIAoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQJLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIHBhdiAJLSBQb3J0IEFzc29jaWF0aW9uIFZlY3RvciAKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BhdlNldFBBVgooCiAgICBJTiBHVF9RRF9ERVYqICAgICAgIGRldiwKICAgIElOIEdUX0xQT1JUCXBvcnQsCiAgICBJTiBHVF9VMTYJcGF2Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwYXZHZXRQQVYKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSBQb3J0IEFzc29jaWF0aW9uIFZlY3RvciAKKgoqIElOUFVUUzoKKiAgICAgICBwb3J0CS0gbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgcGF2IAktIFBvcnQgQXNzb2NpYXRpb24gVmVjdG9yIAoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGF2R2V0UEFWCigKICAgIElOIEdUX1FEX0RFViogICAgICAgZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfVTE2ICAgICpwYXYKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BhdlNldEluZ3Jlc3NNb25pdG9yCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgSW5ncmVzcyBNb25pdG9yIGJpdCBpbiB0aGUgUEFWLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBtb2RlIC0gdGhlIGluZ3Jlc3MgbW9uaXRvciBiaXQgaW4gdGhlIFBBVgoqICAgICAgICAgICAgICBHVF9GQUxTRTogSW5ncmVzcyBNb25pdG9yIGVuYWJsZWQgCiogICAgICAgICAgICAgIEdUX1RSVUU6ICBJbmdyZXNzIE1vbml0b3IgZGlzYWJsZWQgCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BhdlNldEluZ3Jlc3NNb25pdG9yCigKICAgIElOIEdUX1FEX0RFViogICAgICAgZGV2LAogICAgSU4gR1RfTFBPUlQgcG9ydCwKICAgIElOIEdUX0JPT0wgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BhdkdldEluZ3Jlc3NNb25pdG9yCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgSW5ncmVzcyBNb25pdG9yIGJpdCBpbiB0aGUgUEFWLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICAKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgLSB0aGUgaW5ncmVzcyBtb25pdG9yIGJpdCBpbiB0aGUgUEFWCiogICAgICAgICAgICAgIEdUX0ZBTFNFOiBJbmdyZXNzIE1vbml0b3IgZW5hYmxlZCAKKiAgICAgICAgICAgICAgR1RfVFJVRTogIEluZ3Jlc3MgTW9uaXRvciBkaXNhYmxlZCAKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BhdkdldEluZ3Jlc3NNb25pdG9yCigKICAgIElOIEdUX1FEX0RFViogICAgICAgZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3ZjdEdldENhYmxlU3RhdHVzCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcGVyZm9ybSB0aGUgdmlydHVhbCBjYWJsZSB0ZXN0IGZvciB0aGUgcmVxdWVzdGVkIHBvcnQsCiogICAgICAgYW5kIHJldHVybnMgdGhlIHRoZSBzdGF0dXMgcGVyIE1ESSBwYWlyLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBjYWJsZVN0YXR1cyAtIHRoZSBwb3J0IGNvcHBlciBjYWJsZSBzdGF0dXMuCiogICAgICAgY2FibGVMZW4gICAgLSB0aGUgcG9ydCBjb3BwZXIgY2FibGUgbGVuZ3RoLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgSW50ZXJuYWwgR2lnYWJpdCBQaHlzIGluIDg4RTYxNjUgZmFtaWx5IGFuZCA4OEU2MzUxIGZhbWlseSBkZXZpY2VzCioJCWFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgQVBJLiBGb3IgdGhvc2UgZGV2aWNlcywgZ3ZjdEdldEFkdkNhYmxlRGlhZyAKKgkJQVBJIGNhbiBiZSB1c2VkLCBpbnN0ZWFkLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmN0R2V0Q2FibGVEaWFnCigKICAgIElOIEdUX1FEX0RFViogICAgICAgZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgT1VUIEdUX0NBQkxFX1NUQVRVUyAqY2FibGVTdGF0dXMKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2Y3RHZXQxMDAwQlRFeHRlbmRlZFN0YXR1cwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJldHJpZXZlcyBleHRlbmRlZCBjYWJsZSBzdGF0dXMsIHN1Y2ggYXMgUGFpciBQb2xvYXJpdHksCioJCVBhaXIgU3dhcCwgYW5kIFBhaXIgU2tldy4gTm90ZSB0aGF0IHRoaXMgcm91dGluZSB3aWxsIGJlIHN1Y2Nlc3Mgb25seQoqCQlpZiAxMDAwQmFzZS1UIExpbmsgaXMgdXAuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIGV4dGVuZGVkU3RhdHVzIC0gdGhlIGV4dGVuZGVkIGNhYmxlIHN0YXR1cy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVELSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIEludGVybmFsIEdpZ2FiaXQgUGh5cyBpbiA4OEU2MTY1IGZhbWlseSBhbmQgODhFNjM1MSBmYW1pbHkgZGV2aWNlcwoqCQlhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIEFQSS4gRm9yIHRob3NlIGRldmljZXMsIGd2Y3RHZXRBZHZFeHRlbmRlZFN0YXR1cyAKKgkJQVBJIGNhbiBiZSB1c2VkLCBpbnN0ZWFkLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmN0R2V0MTAwMEJURXh0ZW5kZWRTdGF0dXMKKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgICAgIHBvcnQsCiAgICBPVVQgR1RfMTAwMEJUX0VYVEVOREVEX1NUQVRVUyAqZXh0ZW5kZWRTdGF0dXMKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0TWVtU2V0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBTZXQgYSBibG9jayBvZiBtZW1vcnkKKgoqIElOUFVUUzoKKiAgICAgICBzdGFydCAgLSBzdGFydCBhZGRyZXNzIG9mIG1lbW9yeSBibG9jayBmb3Igc2V0dGluZwoqICAgICAgIHNpbWJvbCAtIGNoYXJhY3RlciB0byBzdG9yZSwgY29udmVydGVkIHRvIGFuIHVuc2lnbmVkIGNoYXIKKiAgICAgICBzaXplICAgLSBzaXplIG9mIGJsb2NrIHRvIGJlIHNldAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIFBvaW50ZXIgdG8gc2V0IG1lbW9yeSBibG9jawoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQgKiBndE1lbVNldAooCiAgICBJTiB2b2lkICogc3RhcnQsCiAgICBJTiBpbnQgICAgc3ltYm9sLAogICAgSU4gR1RfVTMyIHNpemUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RNZW1DcHkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIENvcGllcyAnc2l6ZScgY2hhcmFjdGVycyBmcm9tIHRoZSBvYmplY3QgcG9pbnRlZCB0byBieSAnc291cmNlJyBpbnRvCiogICAgICAgdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5ICdkZXN0aW5hdGlvbicuIElmIGNvcHlpbmcgdGFrZXMgcGxhY2UgYmV0d2VlbgoqICAgICAgIG9iamVjdHMgdGhhdCBvdmVybGFwLCB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLgoqCiogSU5QVVRTOgoqICAgICAgIGRlc3RpbmF0aW9uIC0gZGVzdGluYXRpb24gb2YgY29weQoqICAgICAgIHNvdXJjZSAgICAgIC0gc291cmNlIG9mIGNvcHkKKiAgICAgICBzaXplICAgICAgICAtIHNpemUgb2YgbWVtb3J5IHRvIGNvcHkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBQb2ludGVyIHRvIGRlc3RpbmF0aW9uCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCAqIGd0TWVtQ3B5CigKICAgIElOIHZvaWQgKiAgICAgICBkZXN0aW5hdGlvbiwKICAgIElOIGNvbnN0IHZvaWQgKiBzb3VyY2UsCiAgICBJTiBHVF9VMzIgICAgICAgc2l6ZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RNZW1DbXAKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIENvbXBhcmVzIGdpdmVuIG1lbW9yaWVzLgoqCiogSU5QVVRTOgoqICAgICAgIHNyYzEgLSBzb3VyY2UgMQoqICAgICAgIHNyYzIgLSBzb3VyY2UgMgoqICAgICAgIHNpemUgLSBzaXplIG9mIG1lbW9yeSB0byBjb3B5CioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUKKgoqIFJFVFVSTlM6CiogICAgICAgMCwgaWYgZXF1YWwuCioJCW5lZ2F0aXZlIG51bWJlciwgaWYgc3JjMSA8IHNyYzIuCioJCXBvc2l0aXZlIG51bWJlciwgaWYgc3JjMSA+IHNyYzIuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KaW50IGd0TWVtQ21wCigKICAgIElOIGNoYXIgc3JjMVtdLAogICAgSU4gY2hhciBzcmMyW10sCiAgICBJTiBHVF9VMzIgc2l6ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndFN0cmxlbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgRGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgYSBzdHJpbmcKKiBJTlBVVFM6CiogICAgICAgc291cmNlICAtIHN0cmluZwoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIHNpemUgICAgLSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBzdHJpbmcsIG5vdCBpbmNsdWRpbmcgRU9TLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1UzMiBndFN0cmxlbgooCiAgICBJTiBjb25zdCB2b2lkICogc291cmNlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0RGVsYXkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFdhaXQgZm9yIHRoZSBnaXZlbiB1U2VjIGFuZCByZXR1cm4uCioJCUN1cnJlbnQgU3dpdGNoIGRldmljZXMgd2l0aCBHaWdhYml0IEV0aGVybmV0IFN1cHBvcnQgcmVxdWlyZSAyNTAgdVNlYwoqCQlvZiBkZWxheSB0aW1lIGZvciBQUFUgdG8gYmUgZGlzYWJsZWQuCioJCVNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgU3lzdGVtIGFuZC9vciBPUyBkZXBlbmRlbnQsIGl0IHNob3VsZCBiZSBwcm92aWRlZAoqCQlieSBlYWNoIERTRFQgdXNlci4KKgoqIElOUFVUUzoKKiAgICAgICBkZWxheVRpbWUgLSBkZWxheSBpbiB1U2VjLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIE5vbmUKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIGd0RGVsYXkKKAogICAgSU4gY29uc3QgdW5zaWduZWQgaW50IGRlbGF5VGltZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RWZXJzaW9uCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZlcnNpb24gb2YgdGhlIFF1YXJ0ZXJEZWNrIFNXIHN1aXRlLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIHZlcnNpb24gICAgIC0gUXVhcnRlckRlY2sgc29mdHdhcmUgdmVyc2lvbi4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgb24gc3VjY2VzcywKKiAgICAgICBHVF9CQURfUEFSQU0gb24gYmFkIHBhcmFtZXRlcnMsCiogICAgICAgR1RfRkFJTCBvdGhlcndpc2UuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RWZXJzaW9uCigKICAgIE9VVCBHVF9WRVJTSU9OICAgKnZlcnNpb24KKTsKCgovKiBQcm90b3R5cGVzIGFkZGVkIGZvciBHaWdhYml0IEV0aGVybmV0IFN3aXRjaCBTdXBwb3J0ICovCgoKLyogZ3RCcmdGZGIuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiTW92ZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBtb3ZlcyBhbGwgb3IgdW5ibG9ja2VkIGFkZHJlc3NlcyBmcm9tIGEgcG9ydCB0byBhbm90aGVyLgoqCiogSU5QVVRTOgoqCQltb3ZlQ21kICAtIHRoZSBtb3ZlIG9wZXJhdGlvbiB0eXBlLgoqCQltb3ZlRnJvbSAtIHBvcnQgd2hlcmUgbW92aW5nIGZyb20KKgkJbW92ZVRvICAgLSBwb3J0IHdoZXJlIG1vdmluZyB0bwoqCiogT1VUUFVUUzoKKgkJTm9uZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYk1vdmUKKAoJSU4gR1RfUURfREVWIAkqZGV2LAoJSU4gR1RfTU9WRV9DTUQJbW92ZUNtZCwKCUlOIEdUX1UzMgkJbW92ZUZyb20sCglJTiBHVF9VMzIJCW1vdmVUbwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiTW92ZUluREIKKgoqIERFU0NSSVBUSU9OOgoqIAkJVGhpcyByb3V0aW5lIG1vdmUgYWxsIG9yIHVuYmxvY2tlZCBhZGRyZXNzZXMgd2hpY2ggYXJlIGluIHRoZSBwYXJ0aWN1bGFyCiogCQlBVFUgRGF0YWJhc2UgKERCTnVtKSBmcm9tIGEgcG9ydCB0byBhbm90aGVyLgoqCiogSU5QVVRTOgoqIAkJbW92ZUNtZCAgLSB0aGUgbW92ZSBvcGVyYXRpb24gdHlwZS4KKgkJREJOdW0JIAktIEFUVSBNQUMgQWRkcmVzcyBEYXRhYmFzZSBOdW1iZXIuCioJCW1vdmVGcm9tIC0gcG9ydCB3aGVyZSBtb3ZpbmcgZnJvbQoqCQltb3ZlVG8gICAtIHBvcnQgd2hlcmUgbW92aW5nIHRvCioKKiBPVVRQVVRTOgoqICAgICBOb25lCioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKiAJCUdUX05PVF9TVVBQT1JURUQtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJNb3ZlSW5EQgooCglJTiBHVF9RRF9ERVYgICAqZGV2LAoJSU4gR1RfTU9WRV9DTUQgbW92ZUNtZCwKCUlOIEdUX1UzMiAJCURCTnVtLAoJSU4gR1RfVTMyCQltb3ZlRnJvbSwKCUlOIEdUX1UzMgkJbW92ZVRvCik7CgovKiBndEJyZ1N0cC5jICovCgovKiBndEJyZ1ZsYW4uYyAqLwoKLyogZ3RCcmdWdHUuYyAqLwoKLyogZ3RFdmVudHMuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXR1R2V0SW50U3RhdHVzCioKKiBERVNDUklQVElPTjoKKgkJQ2hlY2sgdG8gc2VlIGlmIGEgc3BlY2lmaWMgdHlwZSBvZiBBVFUgaW50ZXJydXB0IG9jY3VyZWQKKgoqIElOUFVUUzoKKiAgICAgaW50VHlwZSAtIHRoZSB0eXBlIG9mIGludGVycnVwdCB3aGljaCBjYXVzZXMgYW4gaW50ZXJydXB0LgoqCQkJCQlHVF9NRU1FQkVSX1ZJT0xBVElPTiwgR1RfTUlTU19WSU9MQVRJT04sIG9yIEdUX0ZVTExfVklPTEFUSU9OIAoqCiogT1VUUFVUUzoKKiAJCU5vbmUuCioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgCS0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAJLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdHVHZXRJbnRTdGF0dXMKKAoJSU4gIEdUX1FEX0RFVgkJCQkqZGV2LAoJT1VUIEdUX0FUVV9JTlRfU1RBVFVTCSphdHVJbnRTdGF0dXMKKTsKCgovKiBndFBoeUN0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0MTAwMFRNYXN0ZXJNb2RlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldCB0aGUgcG9ydCBtdWx0aWNhc3QgcmF0ZSBsaW1pdC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfMTAwMFRfTUFTVEVSX1NMQVZFIHN0cnVjdHVyZQoqCQkJCWF1dG9Db25maWcgICAtIEdUX1RSVUUgZm9yIGF1dG8sIEdUX0ZBTFNFIGZvciBtYW51YWwgc2V0dXAuCioJCQkJbWFzdGVyUHJlZmVyIC0gR1RfVFJVRSBpZiBNYXN0ZXIgY29uZmlndXJhdGlvbiBpcyBwcmVmZXJyZWQuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldDEwMDBUTWFzdGVyTW9kZQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4gR1RfMTAwMFRfTUFTVEVSX1NMQVZFCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXQxMDAwVE1hc3Rlck1vZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0IHRoZSBwb3J0IG11bHRpY2FzdCByYXRlIGxpbWl0LgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfMTAwMFRfTUFTVEVSX1NMQVZFIHN0cnVjdHVyZQoqCQkJCWF1dG9Db25maWcgICAtIEdUX1RSVUUgZm9yIGF1dG8sIEdUX0ZBTFNFIGZvciBtYW51YWwgc2V0dXAuCioJCQkJbWFzdGVyUHJlZmVyIC0gR1RfVFJVRSBpZiBNYXN0ZXIgY29uZmlndXJhdGlvbiBpcyBwcmVmZXJyZWQuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0MTAwMFRNYXN0ZXJNb2RlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUXzEwMDBUX01BU1RFUl9TTEFWRQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UGh5UmVnCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJlYWRzIFBoeSBSZWdpc3RlcnMuCioKKiBJTlBVVFM6CioJCXBvcnQgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCXJlZ0FkZHIgLSBUaGUgcmVnaXN0ZXIncyBhZGRyZXNzLgoqCiogT1VUUFVUUzoKKgkJZGF0YSAgICAtIFRoZSByZWFkIHJlZ2lzdGVyJ3MgZGF0YS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UGh5UmVnCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCUlOICBHVF9VMzIJIAlyZWdBZGRyLAoJT1VUIEdUX1UxNgkgCSpkYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQaHlSZWcKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgd3JpdGVzIFBoeSBSZWdpc3RlcnMuCioJCQoqIElOUFVUUzoKKgkJcG9ydCAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJcmVnQWRkciAtIFRoZSByZWdpc3RlcidzIGFkZHJlc3MuCioKKiBPVVRQVVRTOgoqCQlkYXRhICAgIC0gVGhlIHJlYWQgcmVnaXN0ZXIncyBkYXRhLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRQaHlSZWcKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJSU4gIEdUX1UzMgkgCXJlZ0FkZHIsCglJTiAgR1RfVTE2CSAJZGF0YQopOwoKCi8qIGd0UG9ydEN0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0RHJvcE9uTG9jawoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXQgdGhlIERyb3Agb24gTG9jay4gV2hlbiBzZXQgdG8gb25lLCBJbmdyZXNzIGZyYW1lcyB3aWxsCioJCWJlIGRpc2NhcmRlZCBpZiB0aGVpciBTQSBmaWVsZCBpcyBub3QgaW4gdGhlIEFUVSdzIGFkZHJlc3MgZGF0YWJhc2UuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgZm9yIFVua25vd24gU0EgZHJvcCBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0RHJvcE9uTG9jawooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUCQlwb3J0LAoJSU4gR1RfQk9PTAkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0RHJvcE9uTG9jawoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIERyb3BPbkxvY2sgbW9kZS4KKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9UUlVFOiBEcm9wT25Mb2NrIGVuYWJsZWQsCioJCQkJIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0RHJvcE9uTG9jawooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MCQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0RG91YmxlVGFnCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldCB0aGUgSW5ncmVzcyBEb3VibGUgVGFnIE1vZGUuIFdoZW4gc2V0IHRvIG9uZSwgCioJCWluZ3Jlc3NpbmcgZnJhbWVzIGFyZSBleGFtaW5lZCB0byBzZWUgaWYgdGhleSBjb250YWluIGFuIDgwMi4zYWMgdGFnLgoqCQlJZiB0aGV5IGRvLCB0aGUgdGFnIGlzIHJlbW92ZWQgYW5kIHRoZW4gdGhlIGZyYW1lIGlzIHByb2Nlc3NlZCBmcm9tCioJCXRoZXJlIChpLmUuLCByZW1vdmVkIHRhZyBpcyBpZ25vcmVkKS4gRXNzZW50aWFsbHksIHVudGFnZ2VkIGZyYW1lcwoqCQlyZW1haW4gdW50YWdnZWQsIHNpbmdsZSB0YWdnZWQgZnJhbWVzIGJlY29tZSB1bnRhZ2dlZCBhbmQgZG91YmxlIHRhZ2dlZAoqCQlmcmFtZXMgYmVjb21lIHNpbmdsZSB0YWdnZWQuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgZm9yIERvdWxiZVRhZyBtb2RlIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXREb3VibGVUYWcKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVAkJcG9ydCwKCUlOIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldERvdWJsZVRhZwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIERvdWJsZVRhZyBtb2RlLgoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUU6IERvdWJsZVRhZyBlbmFibGVkLAoqCQkJCSBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldERvdWJsZVRhZwooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MCQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0SW50ZXJzd2l0Y2hQb3J0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldCBJbnRlcnN3aXRjaCBQb3J0LiBXaGVuIHNldCB0byBvbmUsIAoqCQlpdCBpbmRpY2F0ZXMgdGhpcyBwb3J0IGlzIGEgaW50ZXJzd2l0Y2ggcG9ydCB1c2VkIHRvIGNvbW11bmljYXRlZCB3aXRoCioJCUNQVSBvciB0byBjYXNjYWRlIHdpdGggYW5vdGhlciBzd2l0Y2ggZGV2aWNlLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIGZvciBJbnRlcnN3aXRjaCBwb3J0IG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRJbnRlcnN3aXRjaFBvcnQKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVAkJcG9ydCwKCUlOIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEludGVyc3dpdGhQb3J0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgSW50ZXJzd2l0Y2hQb3J0LgoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUU6IFRoaXMgcG9ydCBpcyBpbnRlcnN3aXRjaCBwb3J0LAoqCQkJCSBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEludGVyc3dpdGNoUG9ydAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MCQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0TGVhcm5EaXNhYmxlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGVuYWJsZXMvZGlzYWJsZXMgYXV0b21hdGljIGxlYXJuaW5nIG9mIG5ldyBzb3VyY2UgTUFDCioJCWFkZHJlc3NlcyBvbiB0aGUgZ2l2ZW4gcG9ydCBpbmdyZXNzCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgZm9yIGRpc2FibGUgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldExlYXJuRGlzYWJsZQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUCQlwb3J0LAoJSU4gR1RfQk9PTAkJbW9kZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldExlYXJuRGlzYWJsZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIExlYXJuRGlzYWJsZSBzZXR1cAoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUU6IExlYXJuaW5nIGRpc2FibGVkIG9uIHRoZSBnaXZlbiBwb3J0IGluZ3Jlc3MgZnJhbWVzLAoqCQkJCSBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldExlYXJuRGlzYWJsZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MCQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0SWdub3JlRkNTCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldHMgRkNTIElnbm9yZSBtb2RlLiBXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSwKKgkJdGhlIGxhc3QgZm91ciBieXRlcyBvZiBmcmFtZXMgcmVjZWl2ZWQgb24gdGhpcyBwb3J0IGFyZSBvdmVyd3JpdHRlbiB3aXRoCioJCWEgZ29vZCBDUkMgYW5kIHRoZSBmcmFtZXMgd2lsbCBiZSBhY2NlcHRlZCBieSB0aGUgc3dpdGNoLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIGZvciBpZ25vcmUgRkNTIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRJZ25vcmVGQ1MKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVAkJcG9ydCwKCUlOIEdUX0JPT0wgCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRJZ25vcmVGQ1MKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBJZ25vcmUgRkNTIHNldHVwCioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfVFJVRTogSWdub3JlIEZDUyBvbiB0aGUgZ2l2ZW4gcG9ydCdzIGluZ3Jlc3MgZnJhbWVzLAoqCQkJCSBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldElnbm9yZUZDUwooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MCQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0VlRVUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlWVFUgUHJpb3JpdHkgT3ZlcnJpZGUuIFRoZSBmb2xsb3dpbmcgbW9kZXMgYXJlIHN1cHBvcnRlZDoKKgkJCVBSSV9PVkVSUklERV9OT05FIC0KKgkJCQlOb3JtYWwgZnJhbWUgcHJpb3JpdHkgcHJvY2Vzc2luZyBvY2N1cnMuCioJCQlQUklfT1ZFUlJJREVfRlJBTUVfUVVFVUUgLQoqCQkJCUJvdGggZnJhbWUgYW5kIHF1ZXVlIG92ZXJyaWRlcyB0YWtlIHBsYWNlIG9uIHRoZSBmcmFtZS4KKgkJCVBSSV9PVkVSUklERV9GUkFNRSAtCioJCQkJUHJpb3JpdHkgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgVklEIChpbiB0aGUgVlRVIHRhYmxlKSBpcyB1c2VkCioJCQkJdG8gb3ZlcndpdGUgdGhlIGZyYW1lJ3MgRlByaSAoZnJhbWUgcHJpb3JpdHkpLgoqCQkJCUlmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQsIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBiZQoqCQkJCXRoaXMgbmV3IHByaW9yaXR5IHZhbHVlLgoqCQkJUFJJX09WRVJSSURFX1FVRVVFIC0KKgkJCQlQcmlvcml0eSBhc3NpZ25lZCB0byB0aGUgZnJhbWUncyBWSUQgKGluIHRoZSBWVFUgdGFibGUpIGlzIHVzZWQKKgkJCQl0byBvdmVyd2l0ZSB0aGUgZnJhbWUncyBRUHJpIChxdWV1ZSBwcmlvcml0eSkuCioJCQkJUVByaSBpcyB1c2VkIGludGVybmFsbHkgdG8gbWFwIHRoZSBmcmFtZSB0byBvbmUgb2YgdGhlIGVncmVzcwoqCQkJCXF1ZXVlcyBpbnNpZGUgdGhlIHN3aXRjaC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfUFJJX09WRVJSSURFIHR5cGUKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgbW9kZSBpcyBpbnZhbGlkCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgkJUFJJX09WRVJSSURFX0ZSQU1FIGFuZCBQUklfT1ZFUlJJREVfUVVFVUUgbW9kZXMgYXJlIHN1cHBvcnRlZCBvbmx5IG9uCioJCWNlcnRhaW4gc3dpdGNoIGRldmljZS4gUGxlYXNlIHJlZmVyIHRvIHRoZSBkZXZpY2UgZGF0YXNoZWV0LgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0VlRVUHJpT3ZlcnJpZGUKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVAkJcG9ydCwKCUlOIEdUX1BSSV9PVkVSUklERQkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0VlRVUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlWVFUgUHJpb3JpdHkgT3ZlcnJpZGUuIFRoZSBmb2xsb3dpbmcgbW9kZXMgYXJlIHN1cHBvcnRlZDoKKgkJCVBSSV9PVkVSUklERV9OT05FIC0KKgkJCQlOb3JtYWwgZnJhbWUgcHJpb3JpdHkgcHJvY2Vzc2luZyBvY2N1cnMuCioJCQlQUklfT1ZFUlJJREVfRlJBTUVfUVVFVUUgLQoqCQkJCUJvdGggZnJhbWUgYW5kIHF1ZXVlIG92ZXJyaWRlcyB0YWtlIHBsYWNlIG9uIHRoZSBmcmFtZS4KKgkJCVBSSV9PVkVSUklERV9GUkFNRSAtCioJCQkJUHJpb3JpdHkgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgVklEIChpbiB0aGUgVlRVIHRhYmxlKSBpcyB1c2VkCioJCQkJdG8gb3ZlcndpdGUgdGhlIGZyYW1lJ3MgRlByaSAoZnJhbWUgcHJpb3JpdHkpLgoqCQkJCUlmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQsIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBiZQoqCQkJCXRoaXMgbmV3IHByaW9yaXR5IHZhbHVlLgoqCQkJUFJJX09WRVJSSURFX1FVRVVFIC0KKgkJCQlQcmlvcml0eSBhc3NpZ25lZCB0byB0aGUgZnJhbWUncyBWSUQgKGluIHRoZSBWVFUgdGFibGUpIGlzIHVzZWQKKgkJCQl0byBvdmVyd2l0ZSB0aGUgZnJhbWUncyBRUHJpIChxdWV1ZSBwcmlvcml0eSkuCioJCQkJUVByaSBpcyB1c2VkIGludGVybmFsbHkgdG8gbWFwIHRoZSBmcmFtZSB0byBvbmUgb2YgdGhlIGVncmVzcwoqCQkJCXF1ZXVlcyBpbnNpZGUgdGhlIHN3aXRjaC4KKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9QUklfT1ZFUlJJREUgdHlwZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlQUklfT1ZFUlJJREVfRlJBTUUgYW5kIFBSSV9PVkVSUklERV9RVUVVRSBtb2RlcyBhcmUgc3VwcG9ydGVkIG9ubHkgb24KKgkJY2VydGFpbiBzd2l0Y2ggZGV2aWNlLiBQbGVhc2UgcmVmZXIgdG8gdGhlIGRldmljZSBkYXRhc2hlZXQuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRWVFVQcmlPdmVycmlkZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9QUklfT1ZFUlJJREUJCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRTQVByaU92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKgkJU0EgUHJpb3JpdHkgT3ZlcnJpZGUuIFRoZSBmb2xsb3dpbmcgbW9kZSBpcyBzdXBwb3J0ZWQ6CioJCQlQUklfT1ZFUlJJREVfTk9ORSAtCioJCQkJTm9ybWFsIGZyYW1lIHByaW9yaXR5IHByb2Nlc3Npbmcgb2NjdXJzLgoqCQkJUFJJX09WRVJSSURFX0ZSQU1FX1FVRVVFIC0KKgkJCQlCb3RoIGZyYW1lIGFuZCBxdWV1ZSBvdmVycmlkZXMgdGFrZSBwbGFjZSBvbiB0aGUgZnJhbWUuCioJCQlQUklfT1ZFUlJJREVfRlJBTUUgLQoqCQkJCVByaW9yaXR5IGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIFNBIChpbiB0aGUgQVRVIHRhYmxlKSBpcyB1c2VkCioJCQkJdG8gb3ZlcndpdGUgdGhlIGZyYW1lJ3MgRlByaSAoZnJhbWUgcHJpb3JpdHkpLgoqCQkJCUlmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQsIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBiZQoqCQkJCXRoaXMgbmV3IHByaW9yaXR5IHZhbHVlLgoqCQkJUFJJX09WRVJSSURFX1FVRVVFIC0KKgkJCQlQcmlvcml0eSBhc3NpZ25lZCB0byB0aGUgZnJhbWUncyBTQSAoaW4gdGhlIEFUVSB0YWJsZSkgaXMgdXNlZAoqCQkJCXRvIG92ZXJ3aXRlIHRoZSBmcmFtZSdzIFFQcmkgKHF1ZXVlIHByaW9yaXR5KS4KKgkJCQlRUHJpIGlzIHVzZWQgaW50ZXJuYWxseSB0byBtYXAgdGhlIGZyYW1lIHRvIG9uZSBvZiB0aGUgZWdyZXNzCioJCQkJcXVldWVzIGluc2lkZSB0aGUgc3dpdGNoLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9QUklfT1ZFUlJJREUgdHlwZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBtb2RlIGlzIGludmFsaWQKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCQlQUklfT1ZFUlJJREVfRlJBTUUgYW5kIFBSSV9PVkVSUklERV9RVUVVRSBtb2RlcyBhcmUgc3VwcG9ydGVkIG9ubHkgb24KKgkJY2VydGFpbiBzd2l0Y2ggZGV2aWNlLiBQbGVhc2UgcmVmZXIgdG8gdGhlIGRldmljZSBkYXRhc2hlZXQuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRTQVByaU92ZXJyaWRlCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQJCXBvcnQsCglJTiBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRTQVByaU92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKgkJU0EgUHJpb3JpdHkgT3ZlcnJpZGUuIFRoZSBmb2xsb3dpbmcgbW9kZSBpcyBzdXBwb3J0ZWQ6CioJCQlQUklfT1ZFUlJJREVfTk9ORSAtCioJCQkJTm9ybWFsIGZyYW1lIHByaW9yaXR5IHByb2Nlc3Npbmcgb2NjdXJzLgoqCQkJUFJJX09WRVJSSURFX0ZSQU1FX1FVRVVFIC0KKgkJCQlCb3RoIGZyYW1lIGFuZCBxdWV1ZSBvdmVycmlkZXMgdGFrZSBwbGFjZSBvbiB0aGUgZnJhbWUuCioJCQlQUklfT1ZFUlJJREVfRlJBTUUgLQoqCQkJCVByaW9yaXR5IGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIFNBIChpbiB0aGUgQVRVIHRhYmxlKSBpcyB1c2VkCioJCQkJdG8gb3ZlcndpdGUgdGhlIGZyYW1lJ3MgRlByaSAoZnJhbWUgcHJpb3JpdHkpLgoqCQkJCUlmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQsIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBiZQoqCQkJCXRoaXMgbmV3IHByaW9yaXR5IHZhbHVlLgoqCQkJUFJJX09WRVJSSURFX1FVRVVFIC0KKgkJCQlQcmlvcml0eSBhc3NpZ25lZCB0byB0aGUgZnJhbWUncyBTQSAoaW4gdGhlIEFUVSB0YWJsZSkgaXMgdXNlZAoqCQkJCXRvIG92ZXJ3aXRlIHRoZSBmcmFtZSdzIFFQcmkgKHF1ZXVlIHByaW9yaXR5KS4KKgkJCQlRUHJpIGlzIHVzZWQgaW50ZXJuYWxseSB0byBtYXAgdGhlIGZyYW1lIHRvIG9uZSBvZiB0aGUgZWdyZXNzCioJCQkJcXVldWVzIGluc2lkZSB0aGUgc3dpdGNoLgoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1BSSV9PVkVSUklERSB0eXBlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCVBSSV9PVkVSUklERV9GUkFNRSBhbmQgUFJJX09WRVJSSURFX1FVRVVFIG1vZGVzIGFyZSBzdXBwb3J0ZWQgb25seSBvbgoqCQljZXJ0YWluIHN3aXRjaCBkZXZpY2UuIFBsZWFzZSByZWZlciB0byB0aGUgZGV2aWNlIGRhdGFzaGVldC4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFNBUHJpT3ZlcnJpZGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX1BSSV9PVkVSUklERQkJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldERBUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlEQSBQcmlvcml0eSBPdmVycmlkZS4gVGhlIGZvbGxvd2luZyBtb2RlIGlzIHN1cHBvcnRlZDoKKgkJCVBSSV9PVkVSUklERV9OT05FIC0KKgkJCQlOb3JtYWwgZnJhbWUgcHJpb3JpdHkgcHJvY2Vzc2luZyBvY2N1cnMuCioJCQlQUklfT1ZFUlJJREVfRlJBTUUgLQoqCQkJCVByaW9yaXR5IGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIERBIChpbiB0aGUgQVRVIHRhYmxlKSBpcyB1c2VkCioJCQkJdG8gb3ZlcndpdGUgdGhlIGZyYW1lJ3MgRlByaSAoZnJhbWUgcHJpb3JpdHkpLgoqCQkJCUlmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQsIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBiZQoqCQkJCXRoaXMgbmV3IHByaW9yaXR5IHZhbHVlLgoqCQkJUFJJX09WRVJSSURFX1FVRVVFIC0KKgkJCQlQcmlvcml0eSBhc3NpZ25lZCB0byB0aGUgZnJhbWUncyBEQSAoaW4gdGhlIEFUVSB0YWJsZSkgaXMgdXNlZAoqCQkJCXRvIG92ZXJ3aXRlIHRoZSBmcmFtZSdzIFFQcmkgKHF1ZXVlIHByaW9yaXR5KS4KKgkJCQlRUHJpIGlzIHVzZWQgaW50ZXJuYWxseSB0byBtYXAgdGhlIGZyYW1lIHRvIG9uZSBvZiB0aGUgZWdyZXNzCioJCQkJcXVldWVzIGluc2lkZSB0aGUgc3dpdGNoLgoqCQkJUFJJX09WRVJSSURFX0ZSQU1FX1FVRVVFIC0KKgkJCQlCb3RoIGZyYW1lIGFuZCBxdWV1ZSBvdmVycmlkZXMgdGFrZSBwbGFjZSBvbiB0aGUgZnJhbWUuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1BSSV9PVkVSUklERSB0eXBlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIG1vZGUgaXMgaW52YWxpZAoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioJCVBSSV9PVkVSUklERV9GUkFNRSBhbmQgUFJJX09WRVJSSURFX1FVRVVFIG1vZGVzIGFyZSBzdXBwb3J0ZWQgb25seSBvbgoqCQljZXJ0YWluIHN3aXRjaCBkZXZpY2UuIFBsZWFzZSByZWZlciB0byB0aGUgZGV2aWNlIGRhdGFzaGVldC4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldERBUHJpT3ZlcnJpZGUKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX1BSSV9PVkVSUklERQkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0REFQcmlPdmVycmlkZQoqCiogREVTQ1JJUFRJT046CioJCURBIFByaW9yaXR5IE92ZXJyaWRlLiBUaGUgZm9sbG93aW5nIG1vZGUgaXMgc3VwcG9ydGVkOgoqCQkJUFJJX09WRVJSSURFX05PTkUgLQoqCQkJCU5vcm1hbCBmcmFtZSBwcmlvcml0eSBwcm9jZXNzaW5nIG9jY3Vycy4KKgkJCVBSSV9PVkVSUklERV9GUkFNRSAtCioJCQkJUHJpb3JpdHkgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgREEgKGluIHRoZSBBVFUgdGFibGUpIGlzIHVzZWQKKgkJCQl0byBvdmVyd2l0ZSB0aGUgZnJhbWUncyBGUHJpIChmcmFtZSBwcmlvcml0eSkuCioJCQkJSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCwgdGhlIHByaW9yaXR5IGluIHRoZSBmcmFtZSB3aWxsIGJlCioJCQkJdGhpcyBuZXcgcHJpb3JpdHkgdmFsdWUuCioJCQlQUklfT1ZFUlJJREVfUVVFVUUgLQoqCQkJCVByaW9yaXR5IGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIERBIChpbiB0aGUgQVRVIHRhYmxlKSBpcyB1c2VkCioJCQkJdG8gb3ZlcndpdGUgdGhlIGZyYW1lJ3MgUVByaSAocXVldWUgcHJpb3JpdHkpLgoqCQkJCVFQcmkgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIG1hcCB0aGUgZnJhbWUgdG8gb25lIG9mIHRoZSBlZ3Jlc3MKKgkJCQlxdWV1ZXMgaW5zaWRlIHRoZSBzd2l0Y2guCioJCQlQUklfT1ZFUlJJREVfRlJBTUVfUVVFVUUgLQoqCQkJCUJvdGggZnJhbWUgYW5kIHF1ZXVlIG92ZXJyaWRlcyB0YWtlIHBsYWNlIG9uIHRoZSBmcmFtZS4KKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9QUklfT1ZFUlJJREUgdHlwZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlQUklfT1ZFUlJJREVfRlJBTUUgYW5kIFBSSV9PVkVSUklERV9RVUVVRSBtb2RlcyBhcmUgc3VwcG9ydGVkIG9ubHkgb24KKgkJY2VydGFpbiBzd2l0Y2ggZGV2aWNlLiBQbGVhc2UgcmVmZXIgdG8gdGhlIGRldmljZSBkYXRhc2hlZXQuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXREQVByaU92ZXJyaWRlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9QUklfT1ZFUlJJREUJCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRDUFVQb3J0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldHMgQ1BVIFBvcnQgbnVtYmVyLiBXaGVuIFNub29waW5nIGlzIGVuYWJsZWQgb24gdGhpcyBwb3J0CioJCW9yIHdoZW4gdGhpcyBwb3J0IGlzIGNvbmZpZ3VyZWQgYXMgYW4gSW50ZXJzd2l0Y2ggUG9ydCBhbmQgaXQgcmVjZWl2ZXMgYSAKKgkJVG9fQ1BVIGZyYW1lLCB0aGUgc3dpdGNoIG5lZWRzIHRvIGtub3cgd2hhdCBwb3J0IG9uIHRoaXMgZGV2aWNlIHRoZSBmcmFtZSAKKgkJc2hvdWxkIGVncmVzcy4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQljcHVQb3J0IC0gQ1BVIFBvcnQgbnVtYmVyIG9yIGludGVyc3dpdGNoIHBvcnQgd2hlcmUgQ1BVIFBvcnQgaXMgY29ubmVjdGVkCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldENQVVBvcnQKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX0xQT1JUIAljcHVQb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRDUFVQb3J0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgQ1BVIExvZ2ljYWwgUG9ydAoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJY3B1UG9ydCAtIENQVSBQb3J0J3MgbG9naWNhbCBudW1iZXIKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldENQVVBvcnQKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX0xQT1JUIAkqY3B1TFBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldExvY2tlZFBvcnQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBMb2NrZWRQb3J0LiBXaGVuIGl0J3Mgc2V0IHRvIG9uZSwgQ1BVIGRpcmVjdGVkIAoqCQlsZWFybmluZyBmb3IgODAyLjF4IE1BQyBhdXRoZW50aWNhdGlvbiBpcyBlbmFibGVkIG9uIHRoaXMgcG9ydC4gSW4gdGhpcwoqCQltb2RlLCBhbiBBVFUgTWlzcyBWaW9sYXRpb24gaW50ZXJydXB0IHdpbGwgb2NjdXIgd2hlbiBhIG5ldyBTQSBhZGRyZXNzCioJCWlzIHJlY2VpdmVkIGluIGEgZnJhbWUgb24gdGhpcyBwb3J0LiBBdXRvbWF0aWNhbGx5IFNBIGxlYXJuaW5nIGFuZCAKKgkJcmVmcmVzaGluZyBpcyBkaXNhYmxlZCBpbiB0aGlzIG1vZGUuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgZm9yIExvY2tlZCBQb3J0LCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0TG9ja2VkUG9ydAooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4gR1RfQk9PTAkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0TG9ja2VkUG9ydAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIExvY2tlZCBQb3J0IG1vZGUgZm9yIHRoZSBnaXZlbiBwb3J0CioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlICAtIEdUX1RSVUUgaWYgTG9ja2VkUG9ydCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRMb2NrZWRQb3J0CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wgIAkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0SWdub3JlV3JvbmdEYXRhCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldHMgSWdub3JlIFdyb25nIERhdGEuIElmIHRoZSBmcmFtZSdzIFNBIGFkZHJlc3MgaXMgZm91bmQgCioJCWluIHRoZSBkYXRhYmFzZSBhbmQgaWYgdGhlIGVudHJ5IGlzICdzdGF0aWMnIG9yIGlmIHRoZSBwb3J0IGlzICdsb2NrZWQnCioJCXRoZSBzb3VyY2UgcG9ydCdzIGJpdCBpcyBjaGVja2VkIHRvIGluc3VyZSB0aGUgU0EgaGFzIGJlZW4gYXNzaWduZWQgdG8gCioJCXRoaXMgcG9ydC4gSWYgdGhlIFNBIGlzIE5PVCBhc3NpZ25lZCB0byB0aGlzIHBvcnQsIGl0IGlzIGNvbnNpZGVyZWQgYW4gCioJCUFUVSBNZW1iZXIgVmlvbGF0aW9uLiBJZiB0aGUgSWdub3JlV3JvbmdEYXRhIGlzIHNldCB0byBHVF9GQUxTRSwgYW4gQVRVCioJCU1lbWJlciBWaW9sYXRpb24gaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkLiBJZiBpdCdzIHNldCB0byBHVF9UUlVFLAoqCQl0aGUgQVRVIE1lbWJlciBWaW9sYXRpb24gZXJyb3Igd2lsbCBiZSBtYXNrZWQgYW5kIGlnbm9yZWQuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgZm9yIElnbm9yZVdyb25nRGF0YSwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldElnbm9yZVdyb25nRGF0YQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUCQlwb3J0LAoJSU4gR1RfQk9PTAkJbW9kZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldElnbm9yZVdyb25nRGF0YQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIElnbm9yZSBXcm9uZyBEYXRhIG1vZGUgZm9yIHRoZSBnaXZlbiBwb3J0CioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlICAtIEdUX1RSVUUgaWYgSWdub3JlV3JvbmdEYXRhLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldElnbm9yZVdyb25nRGF0YQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MIAkqbW9kZQopOwoKCi8qIGd0UG9ydFJhdGVDdHJsLmMgKi8KCi8qIGd0UG9ydFJtb24uYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3RhdHNHZXRQb3J0Q291bnRlcjIKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBhIHNwZWNpZmljIGNvdW50ZXIgb2YgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQljb3VudGVyIC0gdGhlIGNvdW50ZXIgd2hpY2ggd2lsbCBiZSByZWFkCioKKiBPVVRQVVRTOgoqCQlzdGF0c0RhdGEgLSBwb2ludHMgdG8gMzJiaXQgZGF0YSBzdG9yYWdlIGZvciB0aGUgTUlCIGNvdW50ZXIKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioJCVRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgR2lnYWJpdCBTd2l0Y2ggb25seQoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3RhdHNHZXRQb3J0Q291bnRlcjIKKAoJSU4gIEdUX1FEX0RFVgkJKmRldiwKCUlOICBHVF9MUE9SVAkJcG9ydCwKCUlOICBHVF9TVEFUU19DT1VOVEVSUzIJY291bnRlciwKCU9VVCBHVF9VMzIJCQkqc3RhdHNEYXRhCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3RhdHNHZXRQb3J0QWxsQ291bnRlcnMyCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgYWxsIGNvdW50ZXJzIG9mIHRoZSBnaXZlbiBwb3J0CioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCXN0YXRzQ291bnRlclNldCAtIHBvaW50cyB0byBHVF9TVEFUU19DT1VOVEVSX1NFVCBmb3IgdGhlIE1JQiBjb3VudGVycwoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgkJVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyBHaWdhYml0IFN3aXRjaCBvbmx5CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdGF0c0dldFBvcnRBbGxDb3VudGVyczIKKAoJSU4gIEdUX1FEX0RFVgkJKmRldiwKCUlOICBHVF9MUE9SVAkJcG9ydCwKCU9VVCBHVF9TVEFUU19DT1VOVEVSX1NFVDIJKnN0YXRzQ291bnRlclNldAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3RhdHNHZXRIaXN0b2dyYW1Nb2RlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgdGhlIEhpc3RvZ3JhbSBDb3VudGVycyBNb2RlLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEhpc3RvZ3JhbSBNb2RlIChHVF9DT1VOVF9SWF9PTkxZLCBHVF9DT1VOVF9UWF9PTkxZLCAKKgkJCQkJYW5kIEdUX0NPVU5UX1JYX1RYKQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9CQURfUEFSQU0gICAgLSBvbiBiYWQgcGFyYW1ldGVyCioJCUdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIEdpZ2FiaXQgU3dpdGNoIG9ubHkKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0YXRzR2V0SGlzdG9ncmFtTW9kZQooCglJTiAgR1RfUURfREVWCQkJCSpkZXYsCglPVVQgR1RfSElTVE9HUkFNX01PREUJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N0YXRzU2V0SGlzdG9ncmFtTW9kZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIHRoZSBIaXN0b2dyYW0gQ291bnRlcnMgTW9kZS4KKgoqIElOUFVUUzoKKgkJbW9kZSAtIEhpc3RvZ3JhbSBNb2RlIChHVF9DT1VOVF9SWF9PTkxZLCBHVF9DT1VOVF9UWF9PTkxZLCAKKgkJCQkJYW5kIEdUX0NPVU5UX1JYX1RYKQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqCQlHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0YXRzU2V0SGlzdG9ncmFtTW9kZQooCglJTiBHVF9RRF9ERVYgCQkJCSpkZXYsCglJTiBHVF9ISVNUT0dSQU1fTU9ERQkJbW9kZQopOwoKCi8qIGd0UG9ydFN0YXR1cy5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQYXVzZUVuCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpdmVzIHRoZSBsaW5rIHBhdXNlIHN0YXRlLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIEdUX1RSVUUgZm9yIGVuYWJsZSBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJSWYgc2V0IE1BQyBQYXVzZSAoZm9yIEZ1bGwgRHVwbGV4IGZsb3cgY29udHJvbCkgaXMgaW1wbGVtZW50ZWQgaW4gdGhlCioJCWxpbmsgcGFydG5lciBhbmQgaW4gTXlQYXVzZQoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UGF1c2VFbgooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MIAkqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEhkRmxvdwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaXZlcyB0aGUgaGFsZiBkdXBsZXggZmxvdyBjb250cm9sIHZhbHVlLgoqCQlJZiBzZXQsIEhhbGYgRHVwbGV4IGJhY2sgcHJlc3N1cmUgd2lsbCBiZSB1c2VkIG9uIHRoaXMgcG9ydCBpZiB0aGlzIHBvcnQKKgkJaXMgaW4gYSBoYWxmIGR1cGxleCBtb2RlLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIEdUX1RSVUUgZm9yIGVuYWJsZSBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEhkRmxvdwooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfQk9PTCAJKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQSFlEZXRlY3QKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cml2ZXMgdGhlIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBQSFkgZGV0ZWN0aW9uLgoqCQlJZiBzZXQsIEFuIDgwMi4zIFBIWSBpcyBhdHRhY2hlZCB0byB0aGlzIHBvcnQuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCXN0YXRlIC0gR1RfVFJVRSBpZiBjb25uZWN0ZWQgb3IgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCQoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFBIWURldGVjdAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfQk9PTCAJKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQSFlEZXRlY3QKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBQSFlEZXRlY3QgYml0IHdoaWNoIG1ha2UgUFBVIGNoYW5nZSBpdHMgcG9sbGluZy4KKgkJUFBVJ3MgcG9vbCByb3V0aW5lIHVzZXMgdGhlc2UgYml0cyB0byBkZXRlcm1pbmUgd2hpY2ggcG9ydCdzIHRvIHBvbGwKKgkJUEhZcyBvbiBmb3IgTGluaywgRHVwbGV4LCBTcGVlZCwgYW5kIEZsb3cgQ29udHJvbC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQlzdGF0ZSAtIEdUX1RSVUUgb3IgR1RfRkFMU0UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCVRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgaWYgZ3N5c0dldFBQVVN0YXRlIHJldHVybnMgCioJCVBQVV9TVEFURV9BQ1RJVkUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRQSFlEZXRlY3QKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJSU4gIEdUX0JPT0wgIAlzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0U3BlZWRNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmV0cml2ZXMgdGhlIHBvcnQgc3BlZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gR1RfUE9SVF9TUEVFRF9NT0RFIHR5cGUuCioJCQkJCShQT1JUX1NQRUVEXzEwMDBfTUJQUyxQT1JUX1NQRUVEXzEwMF9NQlBTLCBvciBQT1JUX1NQRUVEXzEwX01CUFMpCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0U3BlZWRNb2RlCigKICAgIElOICBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9MUE9SVCAgcG9ydCwKICAgIE9VVCBHVF9QT1JUX1NQRUVEX01PREUgICAqc3BlZWQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEhpZ2hFcnJvclJhdGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cml2ZXMgdGhlIFBDUyBIaWdoIEVycm9yIFJhdGUuCioJCVRoaXMgcm91dGluZSByZXR1cm5zIEdUX1RSVUUgaWYgdGhlIHJhdGUgb2YgaW52YWxpZCBjb2RlIGdyb3VwcyBzZWVuIGJ5CioJCVBDUyBoYXMgZXhjZWVkZWQgMTAgdG8gdGhlIHBvd2VyIG9mIC0xMS4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJc3RhdGUgLSBHVF9UUlVFIG9yIEdUX0ZBTFNFCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRIaWdoRXJyb3JSYXRlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MICAJKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRUeFBhdXNlZAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaXZlcyBUcmFuc21pdCBQYXVzZSBzdGF0ZS4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJc3RhdGUgLSBHVF9UUlVFIGlmIFJ4IE1BQyByZWNlaXZlcyBhIFBBVVNFIGZyYW1lIHdpdGggbm9uZS16ZXJvIFB1YXNlIFRpbWUKKgkJCQkgIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFR4UGF1c2VkCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MICAJKnN0YXRlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0Rmxvd0N0cmwKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cml2ZXMgRmxvdyBjb250cm9sIHN0YXRlLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIEdUX1RSVUUgaWYgUnggTUFDIGRldGVybWluZXMgdGhhdCBubyBtb3JlIGRhdGEgc2hvdWxkIGJlIAoqCQkJCQllbnRlcmluZyB0aGlzIHBvcnQuCioJCQkJICBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRGbG93Q3RybAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfQk9PTCAgCSpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0Q19EdXBsZXgKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cml2ZXMgUG9ydCA5J3MgZHVwbGV4IGNvbmZpZ3VyYXRpb24gbW9kZSBkZXRlcm1pbmVkCioJCWF0IHJlc2V0LgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIEdUX1RSVUUgaWYgY29uZmlndXJlZCBhcyBGdWxsIGR1cGxleCBvcGVyYXRpb24KKgkJCQkgIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJUmV0dXJuIHZhbHVlIGlzIHZhbGlkIG9ubHkgaWYgdGhlIGdpdmVuIHBvcnQgaXMgOS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldENfRHVwbGV4CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MICAJKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRDX01vZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cml2ZXMgcG9ydCdzIGludGVyZmFjZSB0eXBlIGNvbmZpZ3VyYXRpb24gbW9kZSAKKgkJZGV0ZXJtaW5lZCBhdCByZXNldC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJc3RhdGUgLSBvbmUgb2YgdmFsdWUgaW4gR1RfUE9SVF9DT05GSUdfTU9ERSBlbnVtIHR5cGUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJUmV0dXJuIHZhbHVlIGlzIHZhbGlkIG9ubHkgaWYgdGhlIGdpdmVuIHBvcnQgaXMgOS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldENfTW9kZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfUE9SVF9DT05GSUdfTU9ERSAgICpzdGF0ZQopOwoKCi8qIGd0U3lzQ3RybC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRQUFVFbgoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBlbmFibGVzL2Rpc2FibGVzIFBoeSBQb2xsaW5nIFVuaXQuCioKKiBJTlBVVFM6CioJCWVuIC0gR1RfVFJVRSB0byBlbmFibGUgUFBVLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0UFBVRW4KKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9CT09MIAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFBQVUVuCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldCB0aGUgUFBVIHN0YXRlLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW4gLSBHVF9UUlVFIGlmIFBQVSBpcyBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0JBRF9QQVJBTSAgICAtIG9uIGJhZCBwYXJhbWV0ZXIKKgkJR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRQUFVFbgooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfQk9PTCAgCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0Q2FzY2FkZVBvcnQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBDYXNjYWRlIFBvcnQgbnVtYmVyLgoqCQlJbiBtdWx0aWNoaXAgc3lzdGVtcyBmcmFtZXMgY29taW5nIGZyb20gYSBDUFUgbmVlZCB0byBrbm93IHdoZW4gdGhleQoqCQloYXZlIHJlYWNoZWQgdGhlaXIgZGVzdGluYXRpb24gY2hpcC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIENhc2NhZGUgUG9ydAoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldENhc2NhZGVQb3J0CigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQgCXBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldENhc2NhZGVQb3J0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgQ2FzY2FkZSBQb3J0IG51bWJlci4KKgkJSW4gbXVsdGljaGlwIHN5c3RlbXMgZnJhbWVzIGNvbWluZyBmcm9tIGEgQ1BVIG5lZWQgdG8ga25vdyB3aGVuIHRoZXkKKgkJaGF2ZSByZWFjaGVkIHRoZWlyIGRlc3RpbmF0aW9uIGNoaXAuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlwb3J0IC0gQ2FzY2FkZSBQb3J0CioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRDYXNjYWRlUG9ydAooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfTFBPUlQgCSpwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXREZXZpY2VOdW1iZXIKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBEZXZpY2UgTnVtYmVyLgoqCQlJbiBtdWx0aWNoaXAgc3lzdGVtcyBmcmFtZXMgY29taW5nIGZyb20gYSBDUFUgbmVlZCB0byBrbm93IHdoZW4gdGhleQoqCQloYXZlIHJlYWNoZWQgdGhlaXIgZGVzdGluYXRpb24gY2hpcC4gRnJvbSBDUFUgZnJhbWVzIHdob3NlIERldl9OdW0KKgkJZmllbGRtYXRjaGVzIHRoZXNlIGJpdHMgaGF2ZSByZWFjaGVkdGhlaXIgZGVzdGluYXRpb24gY2hpcCBhbmQgYXJlIHNlbnQKKgkJb3V0IHRoaXMgY2hpcCB1c2luZyB0aGUgcG9ydCBudW1iZXIgaW5kaWNhdGVkIGluIHRoZSBmcmFtZSdzIFRyZ19Qb3J0IAoqCQlmaWVsZC4KKgoqIElOUFVUUzoKKgkJZGV2TnVtIC0gRGV2aWNlIE51bWJlciAoMCB+IDMxKQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldERldmljZU51bWJlcgooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX1UzMiAgCQlkZXZOdW0KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldERldmljZU51bWJlcgoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIERldmljZSBOdW1iZXIuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlkZXZOdW0gLSBEZXZpY2UgTnVtYmVyICgwIH4gMzEpCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXREZXZpY2VOdW1iZXIKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX1UzMiAgCSpkZXZOdW0KKTsKCgovKiBndFBDU0N0cmwuYyAqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc0dldENvbW1hRGV0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpZXZlcyBDb21tYSBEZXRlY3Rpb24gc3RhdHVzIGluIFBDUwoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIEdUX1RSVUUgZm9yIENvbW1hIERldGVjdGVkIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXRDb21tYURldAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfQk9PTCAgCSpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzR2V0U3luY09LCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpZXZlcyBTeW5PSyBiaXQuIEl0IGlzIHNldCB0byBhIG9uZSB3aGVuIHRoZSBQQ1MgaGFzCioJCWRldGVjdGVkIGEgZmV3IGNvbW1hIHBhdHRlcm5zIGFuZCBpcyBzeW5jaHJvbml6ZWQgd2l0aCBpdHMgcGVlciBQQ1MgCioJCWxheWVyLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIEdUX1RSVUUgaWYgc3luY2hyb25pemVkIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXRTeW5jT0sKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX0JPT0wgIAkqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc0dldFN5bmNGYWlsCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpZXZlcyBTeW5GYWlsIGJpdC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJc3RhdGUgLSBHVF9UUlVFIGlmIHN5bmNocm9uaXphaW9uIGZhaWxlZCBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioJCQoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzR2V0U3luY0ZhaWwKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX0JPT0wgIAkqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc0dldEFuQnlwYXNzZWQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cmlldmVzIEluYmFuZCBBdXRvLU5lZ290aWF0aW9uIGJ5cGFzcyBzdGF0dXMuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCXN0YXRlIC0gR1RfVFJVRSBpZiBBTiBpcyBieXBhc3NlZCBvciBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioJCQoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzR2V0QW5CeXBhc3NlZAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfQk9PTCAgCSpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzR2V0QW5CeXBhc3NNb2RlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpZXZlcyBFbmFibGUgbW9kZSBvZiBJbmJhbmQgQXV0by1OZWdvdGlhdGlvbiBieXBhc3MuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9UUlVFIGlmIEFOIGJ5cGFzcyBpcyBlbmFibGVkIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXRBbkJ5cGFzc01vZGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX0JPT0wgIAkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzU2V0QW5CeXBhc3NNb2RlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpZXZlcyBFbmFibGUgbW9kZSBvZiBJbmJhbmQgQXV0by1OZWdvdGlhdGlvbiBieXBhc3MuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIEFOIGJ5cGFzcyBtb2RlIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NTZXRBbkJ5cGFzc01vZGUKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX0JPT0wgIAltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NHZXRQQ1NBbkVuCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpZXZlcyBFbmFibGUgbW9kZSBvZiBQQ1MgSW5iYW5kIEF1dG8tTmVnb3RpYXRpb24uCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9UUlVFIGlmIFBDUyBBTiBpcyBlbmFibGVkIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXRQQ1NBbkVuCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MICAJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc1NldFBDU0FuRW4KKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBFbmFibGUgbW9kZSBvZiBQQ1MgSW5iYW5kIEF1dG8tTmVnb3RpYXRpb24uCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIFBDUyBBTiBtb2RlIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NTZXRQQ1NBbkVuCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQgCXBvcnQsCglJTiBHVF9CT09MICAJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzU2V0UmVzdGFydFBDU0FuCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJlc3RhcnRzIFBDUyBJbmJhbmQgQXV0by1OZWdvdGlhdGlvbi4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJTm9uZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NTZXRSZXN0YXJ0UENTQW4KKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzR2V0UENTQW5Eb25lCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpZXZlcyBjb21wbGV0aW9uIGluZm9ybWF0aW9uIG9mIFBDUyBBdXRvLU5lZ290aWF0aW9uLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfVFJVRSBpZiBQQ1MgQU4gaXMgZG9uZSBvciBuZXZlciBkb25lCioJCQkgICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCQkKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Bjc0dldFBDU0FuRG9uZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfQk9PTCAgCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NTZXRMaW5rVmFsdWUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBMaW5rJ3MgZm9yY2UgdmFsdWUKKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQlzdGF0ZSAtIEdUX1RSVUUgdG8gZm9yY2UgbGluayB1cCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCQkKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Bjc1NldExpbmtWYWx1ZQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4JR1RfQk9PTAkJc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc0dldExpbmtWYWx1ZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaWV2ZXMgTGluayBWYWx1ZSB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIEZvcmNpbmcgTGluayAKKgkJdXAgb3IgZG93bi4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJc3RhdGUgLSBHVF9UUlVFIGlmIExpbmsgRm9yY2UgdmFsdWUgaXMgb25lIChsaW5rIHVwKQoqCQkJICAgICBHVF9GQUxTRSBvdGhlcndpc2UgKGxpbmsgZG93bikKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioJCQoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzR2V0TGlua1ZhbHVlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MICAJKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NTZXRGb3JjZWRMaW5rCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGZvcmNlcyBMaW5rLiBJZiBMaW5rVmFsdWUgaXMgc2V0IHRvIG9uZSwgY2FsbGluZyB0aGlzIAoqCQlyb3V0aW5lIHdpdGggR1RfVFJVRSB3aWxsIGZvcmNlIExpbmsgdG8gYmUgdXAuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJc3RhdGUgLSBHVF9UUlVFIHRvIGZvcmNlIGxpbmsgKHVwIG9yIGRvd24pLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioJCQoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzU2V0Rm9yY2VkTGluawooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4JR1RfQk9PTAkJc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc0dldEZvcmNlZExpbmsKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cmlldmVzIEZvcmNlZCBMaW5rIGJpdAoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIEdUX1RSVUUgaWYgRm9yY2VkTGluayBiaXQgaXMgb25lLAoqCQkJICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioJCQoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzR2V0Rm9yY2VkTGluawooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfQk9PTCAgCSpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzU2V0RHB4VmFsdWUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBEdXBsZXgncyBGb3JjZWQgdmFsdWUuIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUKKgkJY2FsbGVkIHByaW9yIHRvIGdwY3NTZXRGb3JjZWREcHguCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJc3RhdGUgLSBHVF9UUlVFIHRvIGZvcmNlIGZ1bGwgZHVwbGV4LCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioJCQoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzU2V0RHB4VmFsdWUKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOCUdUX0JPT0wJCXN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NHZXREcHhWYWx1ZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaWV2ZXMgRHVwbGV4J3MgRm9yY2VkIHZhbHVlCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCXN0YXRlIC0gR1RfVFJVRSBpZiBEdXBsZXgncyBGb3JjZWQgdmFsdWUgaXMgc2V0IHRvIEZ1bGwgZHVwbGV4LAoqCQkJICAgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioJCQoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzR2V0RHB4VmFsdWUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX0JPT0wgIAkqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc1NldEZvcmNlZERweAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBmb3JjZXMgZHVwbGV4IG1vZGUuIElmIERweFZhbHVlIGlzIHNldCB0byBvbmUsIGNhbGxpbmcgdGhpcyAKKgkJcm91dGluZSB3aXRoIEdUX1RSVUUgd2lsbCBmb3JjZSBkdXBsZXggbW9kZSB0byBiZSBmdWxsIGR1cGxleC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQlzdGF0ZSAtIEdUX1RSVUUgdG8gZm9yY2UgZHVwbGV4IG1vZGUsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NTZXRGb3JjZWREcHgKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOCUdUX0JPT0wJCXN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NHZXRGb3JjZWREcHgKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cmlldmVzIEZvcmNlZCBEdXBsZXguCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCXN0YXRlIC0gR1RfVFJVRSBpZiBGb3JjZWREcHggYml0IGlzIG9uZSwKKgkJCSAgICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCQkKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Bjc0dldEZvcmNlZERweAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfQk9PTCAgCSpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzU2V0Rm9yY2VTcGVlZAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBmb3JjZXMgc3BlZWQuIAoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9QT1JUX0ZPUkNFRF9TUEVFRF9NT0RFICgxMCwgMTAwLCAxMDAwLCBvciBObyBTcGVlZCBGb3JjZSkKKgoqIE9VVFBVVFM6CioJCU5vbmUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioJCQoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzU2V0Rm9yY2VTcGVlZAooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4JR1RfUE9SVF9GT1JDRURfU1BFRURfTU9ERSAgbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzR2V0Rm9yY2VTcGVlZAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaWV2ZXMgRm9yY2UgU3BlZWQgdmFsdWUKKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJc3RhdGUgLSBHVF9QT1JUX0ZPUkNFRF9TUEVFRF9NT0RFICgxMCwgMTAwLCAxMDAwLCBvciBubyBmb3JjZSBzcGVlZCkKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioJCQoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzR2V0Rm9yY2VTcGVlZAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfUE9SVF9GT1JDRURfU1BFRURfTU9ERSAgICptb2RlCik7CgoKCi8qIGd0UW9zTWFwLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc0dldFRhZ1JlbWFwCioKKiBERVNDUklQVElPTjoKKgkJR2V0cyB0aGUgcmVtYXBwZWQgcHJpb3JpdHkgdmFsdWUgZm9yIGEgc3BlY2lmaWMgODAyLjFwIHByaW9yaXR5IG9uIGEKKgkJZ2l2ZW4gcG9ydC4KKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJcHJpICAgLSA4MDIuMXAgcHJpb3JpdHkKKgoqIE9VVFBVVFM6CioJCXJlbWFwcGVkUHJpIC0gcmVtYXBwZWQgUHJpb3JpdHkKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NHZXRUYWdSZW1hcAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglJTiAgR1RfVTggICAgCXByaSwKCU9VVCBHVF9VOCAgIAkqcmVtYXBwZWRQcmkKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc1NldFRhZ1JlbWFwCioKKiBERVNDUklQVElPTjoKKgkJU2V0cyB0aGUgcmVtYXBwZWQgcHJpb3JpdHkgdmFsdWUgZm9yIGEgc3BlY2lmaWMgODAyLjFwIHByaW9yaXR5IG9uIGEKKgkJZ2l2ZW4gcG9ydC4KKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJcHJpICAgLSA4MDIuMXAgcHJpb3JpdHkKKgkJcmVtYXBwZWRQcmkgLSByZW1hcHBlZCBQcmlvcml0eQoqCiogT1VUUFVUUzoKKgkJTm9uZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc1NldFRhZ1JlbWFwCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQgCXBvcnQsCglJTiBHVF9VOCAgICAJcHJpLAoJSU4gR1RfVTggICAgCXJlbWFwcGVkUHJpCik7CgoKLyogZ3RTeXNDb25maWcuYyAqLwoKLyogZ3RTeXNTdGF0dXMuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0UFBVU3RhdGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0IHRoZSBQUFUgU3RhdGUuIFRoZXNlIHR3byBiaXRzIHJldHVybiAKKgkJdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFBQVS4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9QUFVfU1RBVEUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfQkFEX1BBUkFNICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqCQlHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFBQVVN0YXRlCigKCUlOICBHVF9RRF9ERVYgICAJKmRldiwKCU9VVCBHVF9QUFVfU1RBVEUJKm1vZGUKKTsKCgovKiBQcm90b3R5cGVzIGFkZGVkIGZvciA4OEU2MDkzICovCgoKLyogZ3RCcmdGZGIuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0TGVhcm4yQWxsCioKKiBERVNDUklQVElPTjoKKgkJV2hlbiBtb3JlIHRoYW4gb25lIE1hcnZlbGwgZGV2aWNlIGlzIHVzZWQgdG8gZm9ybSBhIHNpbmdsZSAnc3dpdGNoJywgaXQKKgkJbWF5IGJlIGRlc2lyYWJsZSBmb3IgYWxsIGRldmljZXMgaW4gdGhlICdzd2l0Y2gnIHRvIGxlYXJuIGFueSBhZGRyZXNzIHRoaXMgCioJCWRldmljZSBsZWFybnMuIFdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lIGFsbCBvdGhlciBkZXZpY2VzIGluIHRoZSAKKgkJJ3N3aXRjaCcgbGVhcm4gdGhlIHNhbWUgYWRkcmVzc2VzIHRoaXMgZGV2aWNlIGxlYXJucy4gV2hlbiB0aGlzIGJpdCBpcyAKKgkJY2xlYXJlZCB0byBhIHplcm8sIG9ubHkgdGhlIGRldmljZXMgdGhhdCBhY3R1YWxseSByZWNlaXZlIGZyYW1lcyB3aWxsIGxlYXJuCioJCWZyb20gdGhvc2UgZnJhbWVzLiBUaGlzIG1vZGUgdHlwaWNhbGx5IHN1cHBvcnRzIG1vcmUgYWN0aXZlIE1BQyBhZGRyZXNzZXMgCioJCWF0IG9uZSB0aW1lIGFzIGVhY2ggZGV2aWNlIGluIHRoZSBzd2l0Y2ggZG9lcyBub3QgbmVlZCB0byBsZWFybiBhZGRyZXNzZXMgCioJCWl0IG1heSBuZXJ2ZXIgdXNlLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAgLSBHVF9UUlVFIGlmIExlYXJuMkFsbCBpcyBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJHZXRMZWFybjJBbGwKKAoJSU4gIEdUX1FEX0RFViAgICAqZGV2LAoJT1VUIEdUX0JPT0wgCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJTZXRMZWFybjJBbGwKKgoqIERFU0NSSVBUSU9OOgoqCQlFbmFibGUgb3IgZGlzYWJsZSBMZWFybjJBbGwgbW9kZS4KKgoqIElOUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUUgdG8gc2V0IExlYXJuMkFsbCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYlNldExlYXJuMkFsbAooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2ZkYlJlbW92ZVBvcnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBkZWFzc29jaWFnZXMgYWxsIG9yIHVuYmxvY2tlZCBhZGRyZXNzZXMgZnJvbSBhIHBvcnQuCioKKiBJTlBVVFM6CiogICAgICAgbW92ZUNtZCAtIHRoZSBtb3ZlIG9wZXJhdGlvbiB0eXBlLgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYlJlbW92ZVBvcnQKKAoJSU4gR1RfUURfREVWICAgICpkZXYsCiAgICBJTiBHVF9NT1ZFX0NNRCAJbW92ZUNtZCwKICAgIElOIEdUX0xQT1JUCQlwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJSZW1vdmVQb3J0SW5EQgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGRlYXNzb2NpYWdlcyBhbGwgb3IgdW5ibG9ja2VkIGFkZHJlc3NlcyBmcm9tIGEgcG9ydCBpbiB0aGUKKiAgICAgICBwYXJ0aWN1bGFyIEFUVSBEYXRhYmFzZSAoREJOdW0pLgoqCiogSU5QVVRTOgoqICAgICAgIG1vdmVDbWQgIC0gdGhlIG1vdmUgb3BlcmF0aW9uIHR5cGUuCiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQlEQk51bQkgLSBBVFUgTUFDIEFkZHJlc3MgRGF0YWJhc2UgTnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJSZW1vdmVQb3J0SW5EQgooCglJTiBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOIEdUX01PVkVfQ01EIAltb3ZlQ21kLAogICAgSU4gR1RfTFBPUlQJCXBvcnQsCglJTiBHVF9VMzIgCQlEQk51bQopOwoKCgovKiBndEJyZ1N0cC5jICovCgovKiBndEJyZ1ZsYW4uYyAqLwoKLyogZ3RCcmdWdHUuYyAqLwoKLyogZ3RFdmVudHMuYyAqLwoKLyogZ3RQQ1NDdHJsLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Bjc0dldFBDU0xpbmsKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cmlldmVzIExpbmsgdXAgc3RhdHVzIGluIFBDUwoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIEdUX1RSVUUgZm9yIENvbW1hIERldGVjdGVkIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXRQQ1NMaW5rCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MICAJKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NTZXRGQ1ZhbHVlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldHMgRmxvdyBDb250cm9sJ3MgZm9yY2UgdmFsdWUKKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQlzdGF0ZSAtIEdUX1RSVUUgdG8gZm9yY2UgZmxvdyBjb250cm9sIGVuYWJsZWQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NTZXRGQ1ZhbHVlCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQgCXBvcnQsCglJTglHVF9CT09MCQlzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzR2V0RkNWYWx1ZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaWV2ZXMgRmxvdyBDb250cm9sIFZhbHVlIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgRm9yY2luZyAKKgkJRmxvdyBDb250cm9sIGVuYWJsZWQgb3IgZGlzYWJsZWQuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCXN0YXRlIC0gR1RfVFJVRSBpZiBGQyBGb3JjZSB2YWx1ZSBpcyBvbmUgKGZsb3cgY29udHJvbCBlbmFibGVkKQoqCQkJICAgICBHVF9GQUxTRSBvdGhlcndpc2UgKGZsb3cgY29udHJvbCBkaXNhYmxlZCkKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioJCQoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzR2V0RkNWYWx1ZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfQk9PTCAgCSpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGNzU2V0Rm9yY2VkRkMKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZm9yY2VzIEZsb3cgQ29udHJvbC4gSWYgRkNWYWx1ZSBpcyBzZXQgdG8gb25lLCBjYWxsaW5nIHRoaXMgCioJCXJvdXRpbmUgd2l0aCBHVF9UUlVFIHdpbGwgZm9yY2UgRmxvdyBDb250cm9sIHRvIGJlIGVuYWJsZWQuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJc3RhdGUgLSBHVF9UUlVFIHRvIGZvcmNlIGZsb3cgY29udHJvbCAoZW5hYmxlIG9yIGRpc2FibGUpLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioJCQoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzU2V0Rm9yY2VkRkMKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOCUdUX0JPT0wJCXN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NHZXRGb3JjZWRGQwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaWV2ZXMgRm9yY2VkIEZsb3cgQ29udHJvbCBiaXQKKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJc3RhdGUgLSBHVF9UUlVFIGlmIEZvcmNlZEZDIGJpdCBpcyBvbmUsCioJCQkgICAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgkJCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwY3NHZXRGb3JjZWRGQwooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfQk9PTCAgCSpzdGF0ZQopOwoKCgovKiBndFBoeUN0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UGFnZWRQaHlSZWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZWFkcyBwaHkgcmVnaXN0ZXIgb2YgdGhlIGdpdmVuIHBhZ2UKKgoqIElOUFVUUzoKKgkJcG9ydCAJLSBwb3J0IHRvIGJlIHJlYWQKKgkJcmVnQWRkcgktIHJlZ2lzdGVyIG9mZnNldCB0byBiZSByZWFkCioJCXBhZ2UJLSBwYWdlIG51bWJlciB0byBiZSByZWFkCioKKiBPVVRQVVRTOgoqCQlkYXRhCS0gdmFsdWUgb2YgdGhlIHJlYWQgcmVnaXN0ZXIKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAJCQktIGlmIHJlYWQgc3VjY2Vzc2VkCiogICAgICAgR1RfRkFJTCAgIAkJCS0gaWYgcmVhZCBmYWlsZWQKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQYWdlZFBoeVJlZwooCiAgICBJTiAgR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfVTMyICBwb3J0LAoJSU4JR1RfVTMyICByZWdBZGRyLAoJSU4JR1RfVTMyICBwYWdlLAogICAgT1VUIEdUX1UxNiogZGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0UGFnZWRQaHlSZWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSB3cml0ZXMgYSB2YWx1ZSB0byBwaHkgcmVnaXN0ZXIgb2YgdGhlIGdpdmVuIHBhZ2UKKgoqIElOUFVUUzoKKgkJcG9ydCAJLSBwb3J0IHRvIGJlIHJlYWQKKgkJcmVnQWRkcgktIHJlZ2lzdGVyIG9mZnNldCB0byBiZSByZWFkCioJCXBhZ2UJLSBwYWdlIG51bWJlciB0byBiZSByZWFkCioJCWRhdGEJLSB2YWx1ZSBvZiB0aGUgcmVhZCByZWdpc3RlcgoqCiogT1VUUFVUUzoKKgkJTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIAkJCS0gaWYgcmVhZCBzdWNjZXNzZWQKKiAgICAgICBHVF9GQUlMICAgCQkJLSBpZiByZWFkIGZhaWxlZAoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFBhZ2VkUGh5UmVnCigKICAgIElOICBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9VMzIgcG9ydCwKCUlOCUdUX1UzMiByZWdBZGRyLAoJSU4JR1RfVTMyIHBhZ2UsCiAgICBJTiAgR1RfVTE2IGRhdGEKKTsKCgovKiBndFBvcnRDdHJsLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFVzZUNvcmVUYWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXQgdGhlIFVzZUNvcmVUYWcgYml0IGluIFBvcnQgQ29udHJvbCBSZWdpc3Rlci4KKgkJCVdoZW4gdGhpcyBiaXQgaXMgY2xlYXJlZCB0byBhIHplcm8sIGluZ3Jlc3NpbmcgZnJhbWVzIGFyZSBjb25zaWRlcmVkCioJCQlUYWdnZWQgaWYgdGhlIDE2LWJpdHMgZm9sbG93aW5nIHRoZSBmcmFtZSdzIFNvdXJjZSBBZGRyZXNzIGlzIDB4ODEwMC4KKgkJCVdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lLCBpbmdyZXNzaW5nIGZyYW1lcyBhcmUgY29uc2lkZXJlZCBUYWdnZWQKKgkJCWlmIHRoZSAxNi1iaXRzIGZvbGxvd2luZyB0aGUgZnJhbWUncyBTb3VyY2UgQWRkcmVzcyBpcyBlcXVhbCB0byB0aGUgCioJCQlDb3JlVGFnIHJlZ2lzdGVyIHZhbHVlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgZm9yY2UgLSBHVF9UUlVFIGZvciBmb3JjZSBmbG93IGNvbnRyb2wgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFVzZUNvcmVUYWcKKAogICAgSU4gR1RfUURfREVWICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICBwb3J0LAogICAgSU4gR1RfQk9PTCAgICBmb3JjZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0VXNlQ29yZVRhZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldCB0aGUgVXNlIENvcmUgVGFnIHN0YXRlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIGZvcmNlIC0gR1RfVFJVRSBmb3IgdXNpbmcgY29yZSB0YWcgcmVnaXN0ZXIgIG9yIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFVzZUNvcmVUYWcKKAogICAgSU4gIEdUX1FEX0RFViAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAqZm9yY2UKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldERpc2NhcmRUYWdnZWQKKgoqIERFU0NSSVBUSU9OOgoqCQlXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSwgYWxsIG5vbi1NR01UIGZyYW1lcyB0aGF0IGFyZSBwcm9jZXNzZWQgYXMgCioJCVRhZ2dlZCB3aWxsIGJlIGRpc2NhcmRlZCBhcyB0aGV5IGVudGVyIHRoaXMgc3dpdGNoIHBvcnQuIFByaW9yaXR5IG9ubHkgCioJCXRhZ2dlZCBmcmFtZXMgKHdpdGggYSBWSUQgb2YgMHgwMDApIGFyZSBjb25zaWRlcmVkIHRhZ2dlZC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSB0byBkaXNjYXJkIHRhZ2dlZCBmcmFtZSwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldERpc2NhcmRUYWdnZWQKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldERpc2NhcmRUYWdnZWQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBEaXNjYXJkVGFnZ2VkIGJpdCBmb3IgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgIC0gR1RfVFJVRSBpZiBEaXNjYXJkVGFnZ2VkIGJpdCBpcyBzZXQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0RGlzY2FyZFRhZ2dlZAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MIAkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0RGlzY2FyZFVudGFnZ2VkCioKKiBERVNDUklQVElPTjoKKgkJV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gYSBvbmUsIGFsbCBub24tTUdNVCBmcmFtZXMgdGhhdCBhcmUgcHJvY2Vzc2VkIGFzIAoqCQlVbnRhZ2dlZCB3aWxsIGJlIGRpc2NhcmRlZCBhcyB0aGV5IGVudGVyIHRoaXMgc3dpdGNoIHBvcnQuIFByaW9yaXR5IG9ubHkgCioJCXRhZ2dlZCBmcmFtZXMgKHdpdGggYSBWSUQgb2YgMHgwMDApIGFyZSBjb25zaWRlcmVkIHRhZ2dlZC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSB0byBkaXNjYXJkIHVudGFnZ2VkIGZyYW1lLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0RGlzY2FyZFVudGFnZ2VkCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQgCXBvcnQsCglJTiBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXREaXNjYXJkVW50YWdnZWQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBEaXNjYXJkVW50YWdnZWQgYml0IGZvciB0aGUgZ2l2ZW4gcG9ydAoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAgLSBHVF9UUlVFIGlmIERpc2NhcmRVbnRhZ2dlZCBiaXQgaXMgc2V0LCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldERpc2NhcmRVbnRhZ2dlZAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MIAkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0TWFwREEKKgoqIERFU0NSSVBUSU9OOgoqCQlXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSwgbm9ybWFsIHN3aXRjaCBvcGVyYXRpb24gd2lsbCBvY2N1ciB3aGVyZSBhIAoqCQlmcmFtZSdzIERBIGFkZHJlc3MgaXMgdXNlZCB0byBkaXJlY3QgdGhlIGZyYW1lIG91dCB0aGUgY29ycmVjdCBwb3J0LgoqCQlXaGVuIHRoaXMgYmUgaXMgY2xlYXJlZCB0byBhIHplcm8sIHRoZSBmcmFtZSB3aWxsIGJlIHNlbnQgb3V0IHRoZSBwb3J0KHMpIAoqCQlkZWZpbmVkIGJ5IEZvcndhcmRVbmtub3duIGJpdHMgb3IgdGhlIERlZmF1bHRGb3J3YXJkIGJpdHMgZXZlbiBpZiB0aGUgREEgCioJCWlzIG91bmQgaW4gdGhlIGFkZHJlc3MgZGF0YWJhc2UuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgdG8gdXNlIE1hcERBLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0TWFwREEKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldE1hcERBCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgTWFwREEgYml0IGZvciB0aGUgZ2l2ZW4gcG9ydAoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAgLSBHVF9UUlVFIGlmIE1hcERBIGJpdCBpcyBzZXQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0TWFwREEKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTCAJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldERlZmF1bHRGb3J3YXJkCioKKiBERVNDUklQVElPTjoKKgkJV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gYSBvbmUsIG5vcm1hbCBzd2l0Y2ggb3BlcmF0aW9uIHdpbGwgb2NjdXJzIGFuZCAKKgkJbXVsdGljYXN0IGZyYW1lcyB3aXRoIHVua25vd24gREEgYWRkcmVzc2VzIGFyZSBhbGxvd2VkIHRvIGVncmVzcyBvdXQgdGhpcyAKKgkJcG9ydCAoYXNzdW1pbmcgdGhlIFZMQU4gc2V0dGluZ3MgYWxsb3cgdGhlIGZyYW1lIHRvIGVncmVzcyB0aGlzIHBvcnQgdG9vKS4KKgkJV2hlbiB0aGlzIGJlIGlzIGNsZWFyZWQgdG8gYSB6ZXJvLCBtdWx0aWNhc3QgZnJhbWVzIHdpdGggdW5rbm93biBEQSAKKgkJYWRkcmVzc2VzIHdpbGwgbm90IGVncmVzcyBvdXQgdGhpcyBwb3J0LgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIHRvIHVzZSBEZWZhdWx0Rm9yd2FyZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldERlZmF1bHRGb3J3YXJkCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQgCXBvcnQsCglJTiBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXREZWZhdWx0Rm9yd2FyZAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIERlZmF1bHRGb3J3YXJkIGJpdCBmb3IgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgIC0gR1RfVFJVRSBpZiBEZWZhdWx0Rm9yd2FyZCBiaXQgaXMgc2V0LCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldERlZmF1bHRGb3J3YXJkCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wgCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRFZ3Jlc3NNb25pdG9yU291cmNlCioKKiBERVNDUklQVElPTjoKKgkJV2hlbiB0aGlzIGJlIGlzIGNsZWFyZWQgdG8gYSB6ZXJvLCBub3JtYWwgbmV0d29yayBzd2l0Y2hpbmcgb2NjdXJzLgoqCQlXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSwgYW55IGZyYW1lIHRoYXQgZWdyZXNzZXMgb3V0IHRoaXMgcG9ydCB3aWxsCioJCWFsc28gYmUgc2VudCB0byB0aGUgRWdyZXNzTW9uaXRvckRlc3QgUG9ydAoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIHRvIHNldCBFZ3Jlc3NNb25pdG9yU291cmNlLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0RWdyZXNzTW9uaXRvclNvdXJjZQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUIAlwb3J0LAoJSU4gR1RfQk9PTAkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0RWdyZXNzTW9uaXRvclNvdXJjZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIEVncmVzc01vbml0b3JTb3VyY2UgYml0IGZvciB0aGUgZ2l2ZW4gcG9ydAoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAgLSBHVF9UUlVFIGlmIEVncmVzc01vbml0b3JTb3VyY2UgYml0IGlzIHNldCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRFZ3Jlc3NNb25pdG9yU291cmNlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wgCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRJbmdyZXNzTW9uaXRvclNvdXJjZQoqCiogREVTQ1JJUFRJT046CioJCVdoZW4gdGhpcyBiZSBpcyBjbGVhcmVkIHRvIGEgemVybywgbm9ybWFsIG5ldHdvcmsgc3dpdGNoaW5nIG9jY3Vycy4KKgkJV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gYSBvbmUsIGFueSBmcmFtZSB0aGF0IGVncmVzc2VzIG91dCB0aGlzIHBvcnQgd2lsbAoqCQlhbHNvIGJlIHNlbnQgdG8gdGhlIEVncmVzc01vbml0b3JEZXN0IFBvcnQKKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSB0byBzZXQgRWdyZXNzTW9uaXRvclNvdXJjZSwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldEluZ3Jlc3NNb25pdG9yU291cmNlCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQgCXBvcnQsCglJTiBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRJbmdyZXNzTW9uaXRvclNvdXJjZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIEluZ3Jlc3NNb25pdG9yU291cmNlIGJpdCBmb3IgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgIC0gR1RfVFJVRSBpZiBJbmdyZXNzTW9uaXRvclNvdXJjZSBiaXQgaXMgc2V0LCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEluZ3Jlc3NNb25pdG9yU291cmNlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wgCSptb2RlCik7CgoKLyogZ3RQb3J0UEFWLmMgKi8KCi8qIGd0UG9ydFJhdGVDdHJsLmMgKi8KCi8qIGd0UG9ydFJtb24uYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3RhdHNHZXRQb3J0Q291bnRlcjMKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBhIHNwZWNpZmljIGNvdW50ZXIgb2YgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQljb3VudGVyIC0gdGhlIGNvdW50ZXIgd2hpY2ggd2lsbCBiZSByZWFkCioKKiBPVVRQVVRTOgoqCQlzdGF0c0RhdGEgLSBwb2ludHMgdG8gMzJiaXQgZGF0YSBzdG9yYWdlIGZvciB0aGUgTUlCIGNvdW50ZXIKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioJCVRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgR2lnYWJpdCBTd2l0Y2ggb25seQoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3RhdHNHZXRQb3J0Q291bnRlcjMKKAoJSU4gIEdUX1FEX0RFVgkJKmRldiwKCUlOICBHVF9MUE9SVAkJcG9ydCwKCUlOICBHVF9TVEFUU19DT1VOVEVSUzMJY291bnRlciwKCU9VVCBHVF9VMzIJCQkqc3RhdHNEYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdGF0c0dldFBvcnRBbGxDb3VudGVyczMKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBhbGwgY291bnRlcnMgb2YgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJc3RhdHNDb3VudGVyU2V0IC0gcG9pbnRzIHRvIEdUX1NUQVRTX0NPVU5URVJfU0VUIGZvciB0aGUgTUlCIGNvdW50ZXJzCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCQlUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIEdpZ2FiaXQgU3dpdGNoIG9ubHkKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0YXRzR2V0UG9ydEFsbENvdW50ZXJzMwooCglJTiAgR1RfUURfREVWCQkqZGV2LAoJSU4gIEdUX0xQT1JUCQlwb3J0LAoJT1VUIEdUX1NUQVRTX0NPVU5URVJfU0VUMwkqc3RhdHNDb3VudGVyU2V0Cik7CgoKLyogZ3RQb3J0U3RhdC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQb3J0Q3RyMgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgdGhlIHBvcnQgSW5EaXNjYXJkcywgSW5GaWx0ZXJlZCwgYW5kIE91dEZpbHRlcmVkIGNvdW50ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIGN0ciAtIHRoZSBjb3VudGVycyB2YWx1ZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQb3J0Q3RyMgooCiAgICBJTiAgR1RfUURfREVWICAgICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICAgICAgIHBvcnQsCiAgICBPVVQgR1RfUE9SVF9TVEFUMiAgICpjdHIKKTsKCi8qIGd0UG9ydFN0YXR1cy5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRNR01JSQoqCiogREVTQ1JJUFRJT046CioJCVNFUkRFUyBJbnRlcmZhY2UgbW9kZS4gV2hlbiB0aGlzIGJpdCBpcyBjbGVhcmVkIHRvIGEgemVybyBhbmQgYSBQSFkgaXMgCioJCWRldGVjdGVkIGNvbm5lY3RlZCB0byB0aGlzIHBvcnQsIHRoZSBTRVJERVMgaW50ZXJmYWNlIGJldHdlZW4gdGhpcyBwb3J0CioJCWFuZCB0aGUgUEhZIHdpbGwgYmUgU0dNSUkuICBXaGVuIHRoaXMgYml0IGlzIHNldCB0b2Egb25lIGFuZCBhIFBIWSBpcwoqCQlkZXRlY3RlZCBjb25uZWN0ZWQgdG8gdGhpcyBwb3J0LCB0aGUgU0VSREVTIGludGVyZmFjZSBiZXR3ZWVuIHRoaXMgcG9ydCAKKgkJYW5kIHRoZSBQSFkgd2lsbCBiZSBNR01JSS4gV2hlbiBubyBQSFkgaXMgZGV0ZWN0ZWQgb24gdGhpcyBwb3J0IGFuZCB0aGUgCioJCVNFUkRFUyBpbnRlcmZhY2UgaXMgYmVpbmcgdXNlZCwgaXQgd2lsbCBiZSBjb25maWd1cmVkIGluIDEwMDBCYXNlLVggbW9kZS4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJc3RhdGUgLSBHVF9UUlVFIG9yIEdUX0ZBTFNFCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRNR01JSQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfQk9PTCAgCSpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0TUdNSUkKKgoqIERFU0NSSVBUSU9OOgoqCQlTRVJERVMgSW50ZXJmYWNlIG1vZGUuIFdoZW4gdGhpcyBiaXQgaXMgY2xlYXJlZCB0byBhIHplcm8gYW5kIGEgUEhZIGlzIAoqCQlkZXRlY3RlZCBjb25uZWN0ZWQgdG8gdGhpcyBwb3J0LCB0aGUgU0VSREVTIGludGVyZmFjZSBiZXR3ZWVuIHRoaXMgcG9ydAoqCQlhbmQgdGhlIFBIWSB3aWxsIGJlIFNHTUlJLiAgV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG9hIG9uZSBhbmQgYSBQSFkgaXMKKgkJZGV0ZWN0ZWQgY29ubmVjdGVkIHRvIHRoaXMgcG9ydCwgdGhlIFNFUkRFUyBpbnRlcmZhY2UgYmV0d2VlbiB0aGlzIHBvcnQgCioJCWFuZCB0aGUgUEhZIHdpbGwgYmUgTUdNSUkuIFdoZW4gbm8gUEhZIGlzIGRldGVjdGVkIG9uIHRoaXMgcG9ydCBhbmQgdGhlIAoqCQlTRVJERVMgaW50ZXJmYWNlIGlzIGJlaW5nIHVzZWQsIGl0IHdpbGwgYmUgY29uZmlndXJlZCBpbiAxMDAwQmFzZS1YIG1vZGUuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJc3RhdGUgLSBHVF9UUlVFIG9yIEdUX0ZBTFNFCioKKiBPVVRQVVRTOgoqCQlOb25lCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRNR01JSQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglJTiAgR1RfQk9PTCAgCXN0YXRlCik7CgoKLyogZ3RRb3NNYXAuYyAqLwoKLyogZ3RTeXNDdHJsLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldENvcmVUYWdUeXBlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldHMgRXRoZXIgQ29yZSBUYWcgVHlwZS4KKgkJVGhpcyBFdGhlciBUeXBlIGlzIGFkZGVkIHRvIGZyYW1lcyB0aGF0IGVncmVzcyB0aGUgc3dpdGNoIGFzIERvdWJsZSBUYWdnZWQgCioJCWZyYW1lcy4gSXQgaXMgYWxzbyB0aGUgRXRoZXIgVHlwZSBleHBlY3RlZCBkdXJpbmcgSW5ncmVzcyB0byBkZXRlcm1pbmUgaWYgCioJCWEgZnJhbWUgaXMgVGFnZ2VkIG9yIG5vdCBvbiBwb3J0cyBjb25maWd1cmVkIGFzIFVzZUNvcmVUYWcgbW9kZS4KKgoqIElOUFVUUzoKKgkJZXRoZXJUeXBlIC0gQ29yZSBUYWcgVHlwZSAoMiBieXRlcykKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRDb3JlVGFnVHlwZQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX1UxNiAgCQlldGhlclR5cGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldENvcmVUYWdUeXBlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgQ29yZVRhZ1R5cGUKKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWV0aGVyVHlwZSAtIENvcmUgVGFnIFR5cGUgKDIgYnl0ZXMpCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRDb3JlVGFnVHlwZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfVTE2ICAJKmV0aGVyVHlwZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0SW5ncmVzc01vbml0b3JEZXN0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldHMgSW5ncmVzcyBNb25pdG9yIERlc3RpbmF0aW9uIFBvcnQuIEZyYW1lcyB0aGF0IGFyZSAKKgkJdGFyZ2V0ZWQgdG93YXJkIGFuIEluZ3Jlc3MgTW9uaXRvciBEZXN0aW5hdGlvbiBnbyBvdXQgdGhlIHBvcnQgbnVtYmVyIAoqCQlpbmRpY2F0ZWQgaW4gdGhlc2UgYml0cy4gVGhpcyBpbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQgb24gYSBNYXJ2ZWxsIFRhZyBwb3J0CioJCXdpdGggdGhlIEluZ3Jlc3MgTW9uaXRvciB0eXBlLCBhbmQgZnJhbWVzIHJlY2VpdmVkIG9uIGEgTmV0d29yayBwb3J0IHRoYXQgCioJCWlzIGVuYWJsZWQgdG8gYmUgdGhlIEluZ3Jlc3MgTW9uaXRvciBTb3VyY2UgUG9ydC4KKgkJSWYgdGhlIEluZ3Jlc3MgTW9uaXRvciBEZXN0aW5hdGlvbiBQb3J0IHJlc2lkZXMgaW4gdGhpcyBkZXZpY2UgdGhlc2UgYml0cyAKKgkJc2hvdWxkIHBvaW50IHRvIHRoZSBOZXR3b3JrIHBvcnQgd2hlcmUgdGhlc2UgZnJhbWVzIGFyZSB0byBlZ3Jlc3MuIElmIHRoZSAKKgkJSW5ncmVzcyBNb25pdG9yIERlc3RpbmF0aW9uIFBvcnQgcmVzaWRlcyBpbiBhbm90aGVyIGRldmljZSB0aGVzZSBiaXRzIAoqCQlzaG91bGQgcG9pbnQgdG8gdGhlIE1hcnZlbGwgVGFnIHBvcnQgaW4gdGhpcyBkZXZpY2UgdGhhdCBpcyB1c2VkIHRvIGdldCAKKgkJdG8gdGhlIGRldmljZSB0aGF0IGNvbnRhaW5zIHRoZSBJbmdyZXNzIE1vbml0b3IgRGVzdGluYXRpb24gUG9ydC4KKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRJbmdyZXNzTW9uaXRvckRlc3QKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVAkJcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0SW5ncmVzc01vbml0b3JEZXN0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgSW5ncmVzcyBNb25pdG9yIERlc3RpbmF0aW9uIFBvcnQuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0SW5ncmVzc01vbml0b3JEZXN0CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9MUE9SVCAgCSpwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRFZ3Jlc3NNb25pdG9yRGVzdAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIEVncmVzcyBNb25pdG9yIERlc3RpbmF0aW9uIFBvcnQuIEZyYW1lcyB0aGF0IGFyZSAKKgkJdGFyZ2V0ZWQgdG93YXJkIGFuIEVncmVzcyBNb25pdG9yIERlc3RpbmF0aW9uIGdvIG91dCB0aGUgcG9ydCBudW1iZXIgCioJCWluZGljYXRlZCBpbiB0aGVzZSBiaXRzLiBUaGlzIGluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCBvbiBhIE1hcnZlbGwgVGFnIHBvcnQKKgkJd2l0aCB0aGUgRWdyZXNzIE1vbml0b3IgdHlwZSwgYW5kIGZyYW1lcyB0cmFuc21pdHRlZCBvbiBhIE5ldHdvcmsgcG9ydCB0aGF0IAoqCQlpcyBlbmFibGVkIHRvIGJlIHRoZSBFZ3Jlc3MgTW9uaXRvciBTb3VyY2UgUG9ydC4KKgkJSWYgdGhlIEVncmVzcyBNb25pdG9yIERlc3RpbmF0aW9uIFBvcnQgcmVzaWRlcyBpbiB0aGlzIGRldmljZSB0aGVzZSBiaXRzIAoqCQlzaG91bGQgcG9pbnQgdG8gdGhlIE5ldHdvcmsgcG9ydCB3aGVyZSB0aGVzZSBmcmFtZXMgYXJlIHRvIGVncmVzcy4gSWYgdGhlIAoqCQlFZ3Jlc3MgTW9uaXRvciBEZXN0aW5hdGlvbiBQb3J0IHJlc2lkZXMgaW4gYW5vdGhlciBkZXZpY2UgdGhlc2UgYml0cyAKKgkJc2hvdWxkIHBvaW50IHRvIHRoZSBNYXJ2ZWxsIFRhZyBwb3J0IGluIHRoaXMgZGV2aWNlIHRoYXQgaXMgdXNlZCB0byBnZXQgCioJCXRvIHRoZSBkZXZpY2UgdGhhdCBjb250YWlucyB0aGUgRWdyZXNzIE1vbml0b3IgRGVzdGluYXRpb24gUG9ydC4KKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRFZ3Jlc3NNb25pdG9yRGVzdAooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUCQlwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRFZ3Jlc3NNb25pdG9yRGVzdAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIEVncmVzcyBNb25pdG9yIERlc3RpbmF0aW9uIFBvcnQuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0RWdyZXNzTW9uaXRvckRlc3QKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0xQT1JUICAJKnBvcnQKKTsKCgovKiBndFN5c0NvbmZpZy5jICovCgovKiBndFN5c1N0YXR1cy5jICovCgoKLyogZnVuY3Rpb25zIGFkZGVkIG9uIHJldiAyLjIgKi8KCi8qIGd0UG9ydEN0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0TWVzc2FnZVBvcnQKKgoqIERFU0NSSVBUSU9OOgoqCQlXaGVuIHRoZSBMZWFybjJBbGwgYml0IGlzIHNldCB0byBvbmUsIGxlYXJuaW5nIG1lc3NhZ2UgZnJhbWVzIGFyZSAKKgkJZ2VuZXJhdGVkLiBUaGVzZSBmcmFtZXMgd2lsbCBiZSBzZW50IG91dCBhbGwgcG9ydHMgd2hvc2UgTWVzc2FnZSBQb3J0IGlzIAoqCQlzZXQgdG8gb25lLgoqIAkJSWYgdGhpcyBmZWF0dXJlIGlzIHVzZWQsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYWxsIE1hcnZlbGwgVGFnIHBvcnRzLCAKKgkJZXhjZXB0IGZvciB0aGUgQ1BVJ3MgcG9ydCwgaGF2ZSB0aGVpciBNZXNzYWdlUG9ydCBiaXQgc2V0IHRvIG9uZS4gCioJCVBvcnRzIHRoYXQgYXJlIG5vdCBNYXJ2ZWxsIFRhZyBwb3J0cyBzaG91bGQgbm90IGhhdmUgdGhlaXIgTWVzc2FnZSBQb3J0CioJCWJpdCBzZXQgdG8gb25lLgoqCQkKKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSB0byBtYWtlIHRoaXMgcG9ydCBhIE1lc3NhZ2UgUG9ydC4gR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0TWVzc2FnZVBvcnQKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldE1lc3NhZ2VQb3J0CioKKiBERVNDUklQVElPTjoKKgkJV2hlbiB0aGUgTGVhcm4yQWxsIGJpdCBpcyBzZXQgdG8gb25lLCBsZWFybmluZyBtZXNzYWdlIGZyYW1lcyBhcmUgCioJCWdlbmVyYXRlZC4gVGhlc2UgZnJhbWVzIHdpbGwgYmUgc2VudCBvdXQgYWxsIHBvcnRzIHdob3NlIE1lc3NhZ2UgUG9ydCBpcyAKKgkJc2V0IHRvIG9uZS4KKiAJCUlmIHRoaXMgZmVhdHVyZSBpcyB1c2VkLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFsbCBNYXJ2ZWxsIFRhZyBwb3J0cywgCioJCWV4Y2VwdCBmb3IgdGhlIENQVSdzIHBvcnQsIGhhdmUgdGhlaXIgTWVzc2FnZVBvcnQgYml0IHNldCB0byBvbmUuIAoqCQlQb3J0cyB0aGF0IGFyZSBub3QgTWFydmVsbCBUYWcgcG9ydHMgc2hvdWxkIG5vdCBoYXZlIHRoZWlyIE1lc3NhZ2UgUG9ydAoqCQliaXQgc2V0IHRvIG9uZS4KKgoqCQkKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9UUlVFIHRvIG1ha2UgdGhpcyBwb3J0IGEgTWVzc2FnZSBQb3J0LiBHVF9GQUxTRSwgb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0TWVzc2FnZVBvcnQKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTCAJKm1vZGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRUcnVua1BvcnQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIGZ1bmN0aW9uIGVuYWJsZXMvZGlzYWJsZXMgYW5kIHNldHMgdGhlIHRydW5rIElELgoqCQkKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJZW4gLSBHVF9UUlVFIHRvIG1ha2UgdGhlIHBvcnQgYmUgYSBtZW1iZXIgb2YgYSB0cnVuayB3aXRoIHRoZSBnaXZlbiB0cnVua0lkLgoqCQkJIEdUX0ZBTFNFLCBvdGhlcndpc2UuCioJCXRydW5rSWQgLSB2YWxpZCBJRCBpcyAwIH4gMTUuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIHRydW5rSWQgaXMgbmVpdGhlciB2YWxpZCBub3IgSU5WQUxJRF9UUlVOS19JRAoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRUcnVua1BvcnQKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX0JPT0wgCQllbiwKCUlOIEdUX1UzMgkJdHJ1bmtJZAopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFRydW5rUG9ydAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVuayBzdGF0ZSBvZiB0aGUgcG9ydC4KKgkJV2hlbiB0cnVuayBpcyBkaXNhYmxlZCwgdHJ1bmtJZCBmaWVsZCB3b24ndCBoYXZlIHZhbGlkIHZhbHVlLgoqCQkKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCWVuIC0gR1RfVFJVRSwgaWYgdGhlIHBvcnQgaXMgYSBtZW1iZXIgb2YgYSB0cnVuaywKKgkJCSBHVF9GQUxTRSwgb3RoZXJ3aXNlLgoqCQl0cnVua0lkIC0gMCB+IDE1LCB2YWxpZCBvbmx5IGlmIGVuIGlzIEdUX1RSVUUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRUcnVua1BvcnQKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MIAkqZW4sCglPVVQgR1RfVTMyCQkqdHJ1bmtJZAopOwoKCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0R2xvYmFsMlJlZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJlYWRzIFN3aXRjaCBHbG9iYWwgMiBSZWdpc3RlcnMuCioKKiBJTlBVVFM6CiogICAgICAgcmVnQWRkciAtIFRoZSByZWdpc3RlcidzIGFkZHJlc3MuCioKKiBPVVRQVVRTOgoqICAgICAgIGRhdGEgICAgLSBUaGUgcmVhZCByZWdpc3RlcidzIGRhdGEuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEdsb2JhbDJSZWcKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX1UzMgkgICAgIHJlZ0FkZHIsCiAgICBPVVQgR1RfVTE2CSAgICAgKmRhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldEdsb2JhbDJSZWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSB3cml0ZXMgU3dpdGNoIEdsb2JhbDIgUmVnaXN0ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgIHJlZ0FkZHIgLSBUaGUgcmVnaXN0ZXIncyBhZGRyZXNzLgoqCiogT1VUUFVUUzoKKiAgICAgICBkYXRhICAgIC0gVGhlIHJlYWQgcmVnaXN0ZXIncyBkYXRhLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRHbG9iYWwyUmVnCigKICAgIElOICBHVF9RRF9ERVYJCSpkZXYsCiAgICBJTiAgR1RfVTMyCQkJcmVnQWRkciwKICAgIElOICBHVF9VMTYJCQlkYXRhCik7CgovKiBndFN5c0N0cmwuYyAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRBUlBEZXN0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldHMgQVJQIE1vbml0b3IgRGVzdGluYXRpb24gUG9ydC4gVGFnZ2VkIG9yIHVudGFnZ2VkIAoqCQlmcmFtZXMgdGhhdCBpbmdyZXNzIE5ldHdvcmsgcG9ydHMgd2l0aCB0aGUgQnJvYWRjYXN0IERlc3RpbmF0aW9uIEFkZHJlc3MgCioJCWFuZCB3aXRoIGFuIEV0aGVydHlwZSBvZiAweDA4MDYgYXJlIG1pcnJvcmVkIHRvIHRoaXMgcG9ydC4gVGhlIEFSUERlc3QgCioJCXNob3VsZCBwb2ludCB0byB0aGUgcG9ydCB0aGF0IGRpcmVjdHMgdGhlc2UgZnJhbWVzIHRvIHRoZSBzd2l0Y2gncyBDUFUgCioJCXRoYXQgd2lsbCBwcm9jZXNzIEFSUHMuIFRoaXMgdGFyZ2V0IHBvcnQgc2hvdWxkIGJlIGEgTWFydmVsbCBUYWcgcG9ydCBzbyAKKgkJdGhhdCBmcmFtZXMgd2lsbCBlZ3Jlc3Mgd2l0aCBhIFRvX0NQVSBNYXJ2ZWxsIFRhZyB3aXRoIGEgQ1BVIENvZGUgb2YgQVJQLgoqCQlUb19DUFUgTWFydmVsbCBUYWcgZnJhbWVzIHdpdGggYSBDUFUgQ29kZSBvZmYgQVJQIHRoYXQgaW5ncmVzcyBhIE1hcnZlbGwgCioJCVRhZyBwb3J0IHdpbGwgYmUgc2VudCB0byB0aGUgcG9ydCBudW1iZXIgZGVmaW5kZWQgaW4gQVJQRGVzdC4KKgoqCQlJZiBBUlBEZXN0ID0gIDB4RiwgQVJQIE1vbml0b3JpbmcgaXMgZGlzYWJsZWQgYW5kIGluZ3Jlc3NpbmcgVG9fQ1BVIEFSUCAKKgkJZnJhbWVzIHdpbGwgYmUgZGlzY2FyZGVkLgoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEFSUERlc3QKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVAkJcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0QVJQRGVzdAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIEFSUCBNb25pdG9yIERlc3RpbmF0aW9uIFBvcnQuIFRhZ2dlZCBvciB1bnRhZ2dlZCAKKgkJZnJhbWVzIHRoYXQgaW5ncmVzcyBOZXR3b3JrIHBvcnRzIHdpdGggdGhlIEJyb2FkY2FzdCBEZXN0aW5hdGlvbiBBZGRyZXNzIAoqCQlhbmQgd2l0aCBhbiBFdGhlcnR5cGUgb2YgMHgwODA2IGFyZSBtaXJyb3JlZCB0byB0aGlzIHBvcnQuIFRoZSBBUlBEZXN0IAoqCQlzaG91bGQgcG9pbnQgdG8gdGhlIHBvcnQgdGhhdCBkaXJlY3RzIHRoZXNlIGZyYW1lcyB0byB0aGUgc3dpdGNoJ3MgQ1BVIAoqCQl0aGF0IHdpbGwgcHJvY2VzcyBBUlBzLiBUaGlzIHRhcmdldCBwb3J0IHNob3VsZCBiZSBhIE1hcnZlbGwgVGFnIHBvcnQgc28gCioJCXRoYXQgZnJhbWVzIHdpbGwgZWdyZXNzIHdpdGggYSBUb19DUFUgTWFydmVsbCBUYWcgd2l0aCBhIENQVSBDb2RlIG9mIEFSUC4KKgkJVG9fQ1BVIE1hcnZlbGwgVGFnIGZyYW1lcyB3aXRoIGEgQ1BVIENvZGUgb2ZmIEFSUCB0aGF0IGluZ3Jlc3MgYSBNYXJ2ZWxsIAoqCQlUYWcgcG9ydCB3aWxsIGJlIHNlbnQgdG8gdGhlIHBvcnQgbnVtYmVyIGRlZmluZGVkIGluIEFSUERlc3QuCioKKgkJSWYgQVJQRGVzdCA9ICAweEYsIEFSUCBNb25pdG9yaW5nIGlzIGRpc2FibGVkIGFuZCBpbmdyZXNzaW5nIFRvX0NQVSBBUlAgCioJCWZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZC4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRBUlBEZXN0CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9MUE9SVCAgCSpwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRSc3ZkMkNwdUVuYWJsZXMKKgoqIERFU0NSSVBUSU9OOgoqCQlSZXNlcnZlZCBEQSBFbmFibGVzLiBXaGVuIHRoZSBmdW5jdGlvbiwgZ3N5c1NldFJzdmQyQ3B1LCBpcyBjYWxsZWQgd2l0aCAKKgkJZW4gPSBHVF9UUlVFLCB0aGUgMTYgcmVzZXJ2ZWQgbXVsdGljYXN0IERBIGFkZHJlc3Nlcywgd2hvc2UgYml0IGluIHRoaXMgCioJCWVuQml0cyhvciByZWdpc3RlcikgYXJlIGFsc28gc2V0IHRvIGEgb25lLCBhcmUgdHJlYXRlZCBhcyBNR01UIGZyYW1lcy4gCioJCUFsbCB0aGUgcmVzZXJ2ZWQgREEncyB0YWtlIHRoZSBmb3JtIDAxOjgwOkMyOjAwOjAwOjB4LiBXaGVuIHggPSAweDAsIAoqCQliaXQgMCBvZiB0aGlzIHJlZ2lzdGVyIGlzIHRlc3RlZC4gV2hlbiB4ID0gMHgyLCBiaXQgMiBvZiB0aGlzIGZpZWxkIGlzIAoqCQl0ZXN0ZWQgYW5kIHNvIG9uLgoqCQlJZiB0aGUgdGVzdGVkIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gYSB6ZXJvLCB0aGUgZnJhbWUgd2lsbCAKKgkJYmUgdHJlYXRlZCBhcyBhIG5vcm1hbCAobm9uLU1HTVQpIGZyYW1lLgoqCiogSU5QVVRTOgoqCQllbkJpdHMgLSBiaXQgdmVjdG9yIG9mIGVuYWJsZWQgUmVzZXJ2ZWQgTXVsdGljYXN0LgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFJzdmQyQ3B1RW5hYmxlcwooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX1UxNgkJZW5CaXRzCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRSc3ZkMkNwdUVuYWJsZXMKKgoqIERFU0NSSVBUSU9OOgoqCQlSZXNlcnZlZCBEQSBFbmFibGVzLiBXaGVuIHRoZSBmdW5jdGlvbiwgZ3N5c1NldFJzdmQyQ3B1LCBpcyBjYWxsZWQgd2l0aCAKKgkJZW4gPSBHVF9UUlVFLCB0aGUgMTYgcmVzZXJ2ZWQgbXVsdGljYXN0IERBIGFkZHJlc3Nlcywgd2hvc2UgYml0IGluIHRoaXMgCioJCWVuQml0cyhvciByZWdpc3RlcikgYXJlIGFsc28gc2V0IHRvIGEgb25lLCBhcmUgdHJlYXRlZCBhcyBNR01UIGZyYW1lcy4gCioJCUFsbCB0aGUgcmVzZXJ2ZWQgREEncyB0YWtlIHRoZSBmb3JtIDAxOjgwOkMyOjAwOjAwOjB4LiBXaGVuIHggPSAweDAsIAoqCQliaXQgMCBvZiB0aGlzIHJlZ2lzdGVyIGlzIHRlc3RlZC4gV2hlbiB4ID0gMHgyLCBiaXQgMiBvZiB0aGlzIGZpZWxkIGlzIAoqCQl0ZXN0ZWQgYW5kIHNvIG9uLgoqCQlJZiB0aGUgdGVzdGVkIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gYSB6ZXJvLCB0aGUgZnJhbWUgd2lsbCAKKgkJYmUgdHJlYXRlZCBhcyBhIG5vcm1hbCAobm9uLU1HTVQpIGZyYW1lLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW5CaXRzIC0gYml0IHZlY3RvciBvZiBlbmFibGVkIFJlc2VydmVkIE11bHRpY2FzdC4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFJzdmQyQ3B1RW5hYmxlcwooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfVTE2ICAJKmVuQml0cwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UnN2ZDJDcHUKKgoqIERFU0NSSVBUSU9OOgoqCQlXaGVuIHRoZSBSc3ZkMkNwdSBpcyBzZXQgdG8gYSBvbmUoR1RfVFJVRSksIGZyYW1lcyB3aXRoIGEgRGVzdGluYXRpb24gCioJCUFkZHJlc3MgaW4gdGhlIHJhbmdlIDAxOjgwOkMyOjAwOjAwOjB4LCByZWdhcmRsZXNzIG9mIHRoZWlyIFZMQU4gCioJCW1lbWJlcnNoaXAsIHdpbGwgYmUgY29uc2lkZXJlZCBNR01UIGZyYW1lcyBhbmQgc2VudCB0byB0aGUgcG9ydCdzIENQVSAKKgkJUG9ydCBhcyBsb25nIGFzIHRoZSBhc3NvY2lhdGVkIFJzdmQyQ3B1RW5hYmxlIGJpdCAoZ3N5c1NldFJzdmQyQ3B1RW5hYmxlIAoqCQlmdW5jdGlvbikgZm9yIHRoZSBmcmFtZXMncyBEQSBpcyBhbHNvIHNldCB0byBhIG9uZS4KKgoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFIGlmIFJzdmQyQ3B1IGlzIHNldC4gR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRSc3ZkMkNwdQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0JPT0wJCWVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRSc3ZkMkNwdQoqCiogREVTQ1JJUFRJT046CioJCVdoZW4gdGhlIFJzdmQyQ3B1IGlzIHNldCB0byBhIG9uZShHVF9UUlVFKSwgZnJhbWVzIHdpdGggYSBEZXN0aW5hdGlvbiAKKgkJQWRkcmVzcyBpbiB0aGUgcmFuZ2UgMDE6ODA6QzI6MDA6MDA6MHgsIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgVkxBTiAKKgkJbWVtYmVyc2hpcCwgd2lsbCBiZSBjb25zaWRlcmVkIE1HTVQgZnJhbWVzIGFuZCBzZW50IHRvIHRoZSBwb3J0J3MgQ1BVIAoqCQlQb3J0IGFzIGxvbmcgYXMgdGhlIGFzc29jaWF0ZWQgUnN2ZDJDcHVFbmFibGUgYml0IChnc3lzU2V0UnN2ZDJDcHVFbmFibGUgCioJCWZ1bmN0aW9uKSBmb3IgdGhlIGZyYW1lcydzIERBIGlzIGFsc28gc2V0IHRvIGEgb25lLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW4gLSBHVF9UUlVFIGlmIFJzdmQyQ3B1IGlzIHNldC4gR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFJzdmQyQ3B1CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9CT09MICAJKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRNR01UUHJpCioKKiBERVNDUklQVElPTjoKKgkJVGhlc2UgYml0cyBhcmUgdXNlZCBhcyB0aGUgUFJJWzI6MF0gYml0cyBvbiBSc3ZkMkNQVSBNR01UIGZyYW1lcy4KKgoqIElOUFVUUzoKKgkJcHJpIC0gUFJJWzI6MF0gYml0cyAoc2hvdWxkIGJlIGxlc3MgdGhhbiA4KQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBJZiBwcmkgaXMgbm90IGxlc3MgdGhhbiA4LgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldE1HTVRQcmkKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9VMTYJCXByaQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0TUdNVFByaQoqCiogREVTQ1JJUFRJT046CioJCVRoZXNlIGJpdHMgYXJlIHVzZWQgYXMgdGhlIFBSSVsyOjBdIGJpdHMgb24gUnN2ZDJDUFUgTUdNVCBmcmFtZXMuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlwcmkgLSBQUklbMjowXSBiaXRzIChzaG91bGQgYmUgbGVzcyB0aGFuIDgpCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRNR01UUHJpCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9VMTYgIAkqcHJpCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRVc2VEb3VibGVUYWdEYXRhCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyBiaXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgRG91YmxlIFRhZyBkYXRhIHRoYXQgaXMgcmVtb3ZlZCBmcm9tIGEgCioJCURvdWJsZSBUYWcgZnJhbWUgaXMgdXNlZCBvciBpZ25vcmVkIHdoZW4gbWFraW5nIHN3aXRjaGluZyBkZWNpc2lvbnMgb24gCioJCXRoZSBmcmFtZS4KKgoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIHVzZSByZW1vdmVkIHRhZyBkYXRhLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0VXNlRG91YmxlVGFnRGF0YQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0JPT0wJCWVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRVc2VEb3VibGVUYWdEYXRhCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyBiaXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgRG91YmxlIFRhZyBkYXRhIHRoYXQgaXMgcmVtb3ZlZCBmcm9tIGEgCioJCURvdWJsZSBUYWcgZnJhbWUgaXMgdXNlZCBvciBpZ25vcmVkIHdoZW4gbWFraW5nIHN3aXRjaGluZyBkZWNpc2lvbnMgb24gCioJCXRoZSBmcmFtZS4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWVuIC0gR1RfVFJVRSBpZiByZW1vdmVkIHRhZyBkYXRhIGlzIHVzZWQsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFVzZURvdWJsZVRhZ0RhdGEKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0JPT0wgIAkqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFByZXZlbnRMb29wcwoqCiogREVTQ1JJUFRJT046CioJCVdoZW4gYSBNYXJ2ZWxsIFRhZyBwb3J0IHJlY2VpdmVzIGEgRm9yd2FyZCBNYXJ2ZWxsIFRhZyB3aG9zZSBTcmNfRGV2IAoqCQlmaWVsZCBlcXVhbHMgdGhpcyBkZXZpY2UncyBEZXZpY2UgTnVtYmVyLCB0aGUgZm9sbG93aW5nIGFjdGlvbiB3aWxsIGJlIAoqCQl0YWtlbiBkZXBlbmRpbmcgdXBvbiB0aGUgdmFsdWUgb2YgdGhpcyBiaXQuCioJCUdUX1RSVUUgKDEpIC0gVGhlIGZyYW1lIHdpbGwgYmUgZGlzY2FyZGVkLgoqCQlHVF9GQUxTRSgwKSAtIFRoZSBmcmFtZSB3aWxsIGJlIHByZXZlbnRlZCBmcm9tIGdvaW5nIG91dCBpdHMgb3JpZ2luYWwgCioJCQkJCQlzb3VyY2UgcG9ydCBhcyBkZWZpbmVkIGJ5IHRoZSBmcmFtZSdzIFNyY19Qb3J0IGZpZWxkLgoqCiogSU5QVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gZGlzY2FyZCB0aGUgZnJhbWUgYXMgZGVzY3JpYmVkIGFib3ZlLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0UHJldmVudExvb3BzCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfQk9PTAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFByZXZlbnRMb29wcwoqCiogREVTQ1JJUFRJT046CioJCVdoZW4gYSBNYXJ2ZWxsIFRhZyBwb3J0IHJlY2VpdmVzIGEgRm9yd2FyZCBNYXJ2ZWxsIFRhZyB3aG9zZSBTcmNfRGV2IAoqCQlmaWVsZCBlcXVhbHMgdGhpcyBkZXZpY2UncyBEZXZpY2UgTnVtYmVyLCB0aGUgZm9sbG93aW5nIGFjdGlvbiB3aWxsIGJlIAoqCQl0YWtlbiBkZXBlbmRpbmcgdXBvbiB0aGUgdmFsdWUgb2YgdGhpcyBiaXQuCioJCUdUX1RSVUUgKDEpIC0gVGhlIGZyYW1lIHdpbGwgYmUgZGlzY2FyZGVkLgoqCQlHVF9GQUxTRSgwKSAtIFRoZSBmcmFtZSB3aWxsIGJlIHByZXZlbnRlZCBmcm9tIGdvaW5nIG91dCBpdHMgb3JpZ2luYWwgCioJCQkJCQlzb3VyY2UgcG9ydCBhcyBkZWZpbmVkIGJ5IHRoZSBmcmFtZSdzIFNyY19Qb3J0IGZpZWxkLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIGRpc2NhcmQgdGhlIGZyYW1lIGFzIGRlc2NyaWJlZCBhYm92ZSwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UHJldmVudExvb3BzCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9CT09MICAJKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRGbG93Q29udHJvbE1lc3NhZ2UKKgoqIERFU0NSSVBUSU9OOgoqCQlXaGVuIHRoaXMgYml0IGlzIHNldCB0byBvbmUsIE1hcnZlbGwgVGFnIEZsb3cgQ29udHJvbCBtZXNzYWdlcyB3aWxsIGJlIAoqCQlnZW5lcmF0ZWQgd2hlbiBhbiBvdXRwdXQgcXVldWUgYmVjb21lcyBjb25nZXN0ZWQgYW5kIHJlY2VpdmVkIE1hcnZlbGwgVGFnIAoqCQlGbG93IENvbnRyb2wgbWVzc2FnZXMgd2lsbCBwYXVzZSBNQUNzIGluc2lkZSB0aGlzIGRldmljZS4gV2hlbiB0aGlzIGJpdCAKKgkJaXMgY2xlYXJlZCB0byBhIHplcm8sIE1hcnZlbGwgVGFnIEZsb3cgQ29udHJvbCBtZXNzYWdlcyB3aWxsIG5vdCBiZSAKKgkJZ2VuZXJhdGVkIGFuZCBhbnkgcmVjZWl2ZWQgd2lsbCBiZSBpZ25vcmVkIGF0IHRoZSB0YXJnZXQgTUFDLgoqCiogSU5QVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gdXNlIE1hcnZlbGwgVGFnIEZsb3cgQ29udHJvbCBtZXNzYWdlLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Rmxvd0NvbnRyb2xNZXNzYWdlCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfQk9PTAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEZsb3dDb250cm9sTWVzc2FnZQoqCiogREVTQ1JJUFRJT046CioJCVdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIG9uZSwgTWFydmVsbCBUYWcgRmxvdyBDb250cm9sIG1lc3NhZ2VzIHdpbGwgYmUgCioJCWdlbmVyYXRlZCB3aGVuIGFuIG91dHB1dCBxdWV1ZSBiZWNvbWVzIGNvbmdlc3RlZCBhbmQgcmVjZWl2ZWQgTWFydmVsbCBUYWcgCioJCUZsb3cgQ29udHJvbCBtZXNzYWdlcyB3aWxsIHBhdXNlIE1BQ3MgaW5zaWRlIHRoaXMgZGV2aWNlLiBXaGVuIHRoaXMgYml0IAoqCQlpcyBjbGVhcmVkIHRvIGEgemVybywgTWFydmVsbCBUYWcgRmxvdyBDb250cm9sIG1lc3NhZ2VzIHdpbGwgbm90IGJlIAoqCQlnZW5lcmF0ZWQgYW5kIGFueSByZWNlaXZlZCB3aWxsIGJlIGlnbm9yZWQgYXQgdGhlIHRhcmdldCBNQUMuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gdXNlIE1hcnZlbGwgVGFnIEZsb3cgQ29udHJvbCBtZXNzYWdlLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRGbG93Q29udHJvbE1lc3NhZ2UKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0JPT0wgIAkqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEZvcmNlRmxvd0NvbnRyb2xQcmkKKgoqIERFU0NSSVBUSU9OOgoqCQlXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSB0aGUgUFJJWzI6MF0gYml0cyBvZiBnZW5lcmF0ZWQgTWFydmVsbCBUYWcgCioJCUZsb3cgQ29udHJvbCBmcmFtZXMgd2lsbCBiZSBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZSBGQyBQcmkgYml0cyAoc2V0IGJ5IAoqCQlnc3lzU2V0RkNQcmkgZnVuY3Rpb24gY2FsbCkuIFdoZW4gdGhpcyBiaXQgaXMgY2xlYXJlZCB0byBhIHplcm8sIGdlbmVyYXRlZCAKKgkJTWFydmVsbCBUYWcgRmxvdyBDb250cm9sIGZyYW1lcyB3aWxsIHJldGFpbiB0aGUgUFJJWzI6MF0gYml0cyBmcm9tIHRoZSAKKgkJZnJhbWVzIHRoYXQgY2F1c2VkIHRoZSBjb25nZXN0aW9uLiBUaGlzIGJpdCB3aWxsIGhhdmUgbm8gZWZmZWN0IGlmIHRoZSAKKgkJRmxvd0NvbnRyb2xNZXNzYWdlIGJpdChnc3lzU2V0Rmxvd0NvbnRyb2xNZXNzYWdlIGZ1bmN0aW9uIGNhbGwpIGlzIAoqCQljbGVhcmVkIHRvIGEgemVyby4KKgoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIHVzZSBkZWZpbmVkIFBSSSBiaXRzLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Rm9yY2VGbG93Q29udHJvbFByaQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0JPT0wJCWVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRGb3JjZUZsb3dDb250cm9sUHJpCioKKiBERVNDUklQVElPTjoKKgkJV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gYSBvbmUgdGhlIFBSSVsyOjBdIGJpdHMgb2YgZ2VuZXJhdGVkIE1hcnZlbGwgVGFnIAoqCQlGbG93IENvbnRyb2wgZnJhbWVzIHdpbGwgYmUgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgRkMgUHJpIGJpdHMgKHNldCBieSAKKgkJZ3N5c1NldEZDUHJpIGZ1bmN0aW9uIGNhbGwpLiBXaGVuIHRoaXMgYml0IGlzIGNsZWFyZWQgdG8gYSB6ZXJvLCBnZW5lcmF0ZWQgCioJCU1hcnZlbGwgVGFnIEZsb3cgQ29udHJvbCBmcmFtZXMgd2lsbCByZXRhaW4gdGhlIFBSSVsyOjBdIGJpdHMgZnJvbSB0aGUgCioJCWZyYW1lcyB0aGF0IGNhdXNlZCB0aGUgY29uZ2VzdGlvbi4gVGhpcyBiaXQgd2lsbCBoYXZlIG5vIGVmZmVjdCBpZiB0aGUgCioJCUZsb3dDb250cm9sTWVzc2FnZSBiaXQoZ3N5c1NldEZsb3dDb250cm9sTWVzc2FnZSBmdW5jdGlvbiBjYWxsKSBpcyAKKgkJY2xlYXJlZCB0byBhIHplcm8uCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gdXNlIGRlZmluZWQgUFJJIGJpdHMsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEZvcmNlRmxvd0NvbnRyb2xQcmkKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0JPT0wgIAkqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEZDUHJpCioKKiBERVNDUklQVElPTjoKKgkJVGhlc2UgYml0cyBhcmUgdXNlZCBhcyB0aGUgUFJJWzI6MF0gYml0cyBvbiBnZW5lcmF0ZWQgTWFydmVsbCBUYWcgRmxvdyAKKgkJQ29udHJvbCBmcmFtZXMgaWYgdGhlIEZvcmNlRmxvd0NvbnRyb2xQcmkgYml0KGdzeXNTZXRGb3JjZUZsb3dDb250cm9sUHJpKQoqCQlpcyBzZXQgdG8gYSBvbmUuCioKKiBJTlBVVFM6CioJCXByaSAtIFBSSVsyOjBdIGJpdHMgKHNob3VsZCBiZSBsZXNzIHRoYW4gOCkKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gSWYgcHJpIGlzIG5vdCBsZXNzIHRoYW4gOC4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRGQ1ByaQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX1UxNgkJcHJpCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRGQ1ByaQoqCiogREVTQ1JJUFRJT046CioJCVRoZXNlIGJpdHMgYXJlIHVzZWQgYXMgdGhlIFBSSVsyOjBdIGJpdHMgb24gZ2VuZXJhdGVkIE1hcnZlbGwgVGFnIEZsb3cgCioJCUNvbnRyb2wgZnJhbWVzIGlmIHRoZSBGb3JjZUZsb3dDb250cm9sUHJpIGJpdChnc3lzU2V0Rm9yY2VGbG93Q29udHJvbFByaSkKKgkJaXMgc2V0IHRvIGEgb25lLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJcHJpIC0gUFJJWzI6MF0gYml0cyAoc2hvdWxkIGJlIGxlc3MgdGhhbiA4KQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0RkNQcmkKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX1UxNiAgCSpwcmkKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEZsb3dDdHJsRGVsYXkKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIGZ1bmN0aW9uIHNldHMgRmxvdyBjb250cm9sIGRlbGF5IHRpbWUgZm9yIDEwTWJwcywgMTAwTWJwcywgYW5kIAoqCQkxMDAwTWJwcy4gCioKKiBJTlBVVFM6CioJCXNwIC0gUE9SVF9TUEVFRF8xMF9NQlBTLCBQT1JUX1NQRUVEXzEwMF9NQlBTLCBvciBQT1JUX1NQRUVEXzEwMDBfTUJQUwoqCQlkZWxheVRpbWUgLSBhY3R1YWwgZGVsYXkgdGltZSB3aWxsIGJlICh0aGlzIHZhbHVlIHggMi4wNDh1UykuCioJCQkJCXRoZSB2YWx1ZSBjYW5ub3QgZXhjZWVkIDB4MUZGRiAob3IgODE5MSBpbiBkZWNpbWFsKS4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgc3AgaXMgbm90IHZhbGlkIG9yIGRlbGF5VGltZSBpcyA+IDB4MUZGRi4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRGbG93Q3RybERlbGF5CigKCUlOIEdUX1FEX0RFVgkJCSpkZXYsCglJTiBHVF9QT1JUX1NQRUVEX01PREUJc3AsCglJTiBHVF9VMzIJCQkJZGVsYXlUaW1lCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRGbG93Q3RybERlbGF5CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgRmxvdyBjb250cm9sIGRlbGF5IHRpbWUgZm9yIDEwTWJwcywgMTAwTWJwcywgYW5kCioJCTEwMDBNYnBzLiAKKgoqIElOUFVUUzoKKgkJc3AgLSBQT1JUX1NQRUVEXzEwX01CUFMsIFBPUlRfU1BFRURfMTAwX01CUFMsIG9yIFBPUlRfU1BFRURfMTAwMF9NQlBTCioKKiBPVVRQVVRTOgoqCQlkZWxheVRpbWUgLSBhY3R1YWwgZGVsYXkgdGltZSB3aWxsIGJlICh0aGlzIHZhbHVlIHggMi4wNDh1UykuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgc3AgaXMgbm90IHZhbGlkIG9yIGRlbGF5VGltZSBpcyA+IDB4MUZGRi4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRGbG93Q3RybERlbGF5CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9QT1JUX1NQRUVEX01PREUJc3AsCglPVVQgR1RfVTMyCQkqZGVsYXlUaW1lCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXREZXZSb3V0aW5nVGFibGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIGZ1bmN0aW9uIHNldHMgRGV2aWNlIHRvIFBvcnQgbWFwcGluZyAod2hpY2ggZGV2aWNlIGlzIGNvbm5lY3RlZCB0byAKKgkJd2hpY2ggcG9ydCBvZiB0aGlzIGRldmljZSkuIAoqCiogSU5QVVRTOgoqCQlkZXZOdW0gLSB0YXJnZXQgZGV2aWNlIG51bWJlci4KKgkJcG9ydE51bSAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBkZXZOdW0gPj0gMzIgb3IgcG9ydCA+PSB0b3RhbCBudW1iZXIgb2YgcG9ydHMuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0RGV2Um91dGluZ1RhYmxlCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfVTMyICAJCWRldk51bSwKCUlOIEdUX0xQT1JUIAlwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXREZXZSb3V0aW5nVGFibGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIGZ1bmN0aW9uIGdldHMgRGV2aWNlIHRvIFBvcnQgbWFwcGluZyAod2hpY2ggZGV2aWNlIGlzIGNvbm5lY3RlZCB0byAKKgkJd2hpY2ggcG9ydCBvZiB0aGlzIGRldmljZSkuIAoqCiogSU5QVVRTOgoqCQlkZXZOdW0gLSB0YXJnZXQgZGV2aWNlIG51bWJlci4KKgoqIE9VVFBVVFM6CioJCXBvcnROdW0gLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBkZXZOdW0gPj0gMzIKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXREZXZSb3V0aW5nVGFibGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX1UzMiAJCWRldk51bSwKCU9VVCBHVF9MUE9SVCAJKnBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFRydW5rTWFza1RhYmxlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyBmdW5jdGlvbiBzZXRzIFRydW5rIG1hc2sgdmVjdG9yIHRhYmxlIGZvciBsb2FkIGJhbGFuY2luZy4KKgkJVGhpcyB2ZWN0b3Igd2lsbCBiZSBBTkQnZWQgd2l0aCB3aGVyZSB0aGUgZnJhbWUgd2FzIG9yaWdpbmFsbHkgZWdyZXNzZWQgdG8uCioJCVRvIGluc3VyZSBhbGwgdHJ1bmtzIGFyZSBsb2FkIGJhbGFuY2VkIGNvcnJlY3RseSwgdGhlIGRhdGEgaW4gdGhpcyB0YWJsZQoqCQluZWVkcyB0byBiZSBjb3JyZWN0bHkgY29uZmlndXJlZC4KKgoqIElOUFVUUzoKKgkJdHJ1bmtOdW0gLSBvbmUgb2YgdGhlIGVpZ2h0IFRydW5rIG1hc2sgdmVjdG9ycy4KKgkJdHJ1bmtNYXNrIC0gVHJ1bmsgTWFzayBiaXRzLiBCaXQgMCBjb250cm9scyB0cnVuayBtYXNraW5nIGZvciBwb3J0IDAsCioJCQkJCWJpdCAxIGZvciBwb3J0IDEgLCBldGMuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIHRydW5rTnVtID4gMHg3IG9yIHRydW5NYXNrID4gMHg3RkYgKG9yIHBvcnQgdmVjdG9yKS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRUcnVua01hc2tUYWJsZQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX1UzMiAgCQl0cnVua051bSwKCUlOIEdUX1UzMgkJdHJ1bmtNYXNrCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRUcnVua01hc2tUYWJsZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgZnVuY3Rpb24gc2V0cyBUcnVuayBtYXNrIHZlY3RvciB0YWJsZSBmb3IgbG9hZCBiYWxhbmNpbmcuCioJCVRoaXMgdmVjdG9yIHdpbGwgYmUgQU5EJ2VkIHdpdGggd2hlcmUgdGhlIGZyYW1lIHdhcyBvcmlnaW5hbGx5IGVncmVzc2VkIHRvLgoqCQlUbyBpbnN1cmUgYWxsIHRydW5rcyBhcmUgbG9hZCBiYWxhbmNlZCBjb3JyZWN0bHksIHRoZSBkYXRhIGluIHRoaXMgdGFibGUKKgkJbmVlZHMgdG8gYmUgY29ycmVjdGx5IGNvbmZpZ3VyZWQuCioKKiBJTlBVVFM6CioJCXRydW5rTnVtIC0gb25lIG9mIHRoZSBlaWdodCBUcnVuayBtYXNrIHZlY3RvcnMuCioKKiBPVVRQVVRTOgoqCQl0cnVua01hc2sgLSBUcnVuayBNYXNrIGJpdHMuIEJpdCAwIGNvbnRyb2xzIHRydW5rIG1hc2tpbmcgZm9yIHBvcnQgMCwKKgkJCQkJYml0IDEgZm9yIHBvcnQgMSAsIGV0Yy4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiB0cnVua051bSA+IDB4Ny4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRUcnVua01hc2tUYWJsZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfVTMyIAkJdHJ1bmtOdW0sCglPVVQgR1RfVTMyCQkqdHJ1bmtNYXNrCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRIYXNoVHJ1bmsKKgoqIERFU0NSSVBUSU9OOgoqCQlIYXNoIERBICYgU0EgZm9yIFRydW5rTWFzayBzZWxlY3Rpb24uIFRydW5rIGxvYWQgYmFsYW5jaW5nIGlzIGFjY29tcGxpc2hlZCAKKgkJYnkgdXNpbmcgdGhlIGZyYW1lJ3MgREEgYW5kIFNBIGZpZWxkcyB0byBhY2Nlc3Mgb25lIG9mIGVpZ2h0IFRydW5rIE1hc2tzLiAKKgkJV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gYSBvbmUsIHRoZSBoYXNoZWQgY29tcHV0ZWQgZm9yIGFkZHJlc3MgdGFibGUgCioJCWxvb2t1cHMgaXMgdXNlZCBmb3IgdGhlIFRydW5rTWFzayBzZWxlY3Rpb24uIFdoZW4gdGhpcyBiaXQgaXMgY2xlYXJlZCB0byAKKgkJYSB6ZXJvIHRoZSBsb3dlciAzIGJpdHMgb2YgdGhlIGZyYW1lJ3MgREEgYW5kIFNBIGFyZSBYT1InZWQgdG9nZXRoZXIgdG8gCioJCXNlbGVjdCB0aGUgVHJ1bmtNYXNrIHRvIHVzZS4KKgoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIHVzZSBsb29rdXAgdGFibGUsIEdUX0ZBTFNFIHRvIHVzZSBYT1IuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0SGFzaFRydW5rCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfQk9PTAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEhhc2hUcnVuawoqCiogREVTQ1JJUFRJT046CioJCUhhc2ggREEgJiBTQSBmb3IgVHJ1bmtNYXNrIHNlbGVjdGlvbi4gVHJ1bmsgbG9hZCBiYWxhbmNpbmcgaXMgYWNjb21wbGlzaGVkIAoqCQlieSB1c2luZyB0aGUgZnJhbWUncyBEQSBhbmQgU0EgZmllbGRzIHRvIGFjY2VzcyBvbmUgb2YgZWlnaHQgVHJ1bmsgTWFza3MuIAoqCQlXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSwgdGhlIGhhc2hlZCBjb21wdXRlZCBmb3IgYWRkcmVzcyB0YWJsZSAKKgkJbG9va3VwcyBpcyB1c2VkIGZvciB0aGUgVHJ1bmtNYXNrIHNlbGVjdGlvbi4gV2hlbiB0aGlzIGJpdCBpcyBjbGVhcmVkIHRvIAoqCQlhIHplcm8gdGhlIGxvd2VyIDMgYml0cyBvZiB0aGUgZnJhbWUncyBEQSBhbmQgU0EgYXJlIFhPUidlZCB0b2dldGhlciB0byAKKgkJc2VsZWN0IHRoZSBUcnVua01hc2sgdG8gdXNlLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIHVzZSBsb29rdXAgdGFibGUsIEdUX0ZBTFNFIHRvIHVzZSBYT1IuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRIYXNoVHJ1bmsKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0JPT0wgIAkqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFRydW5rUm91dGluZwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgZnVuY3Rpb24gc2V0cyByb3V0aW5nIGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gVHJ1bmsgSUQuCioKKiBJTlBVVFM6CioJCXRydW5rSWQgLSBUcnVuayBJRC4KKgkJdHJ1bmtSb3V0ZSAtIFRydW5rIHJvdXRlIGJpdHMuIEJpdCAwIGNvbnRyb2xzIHRydW5rIHJvdXRpbmcgZm9yIHBvcnQgMCwKKgkJCQkJYml0IDEgZm9yIHBvcnQgMSAsIGV0Yy4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgdHJ1bmtJZCA+IDB4RiBvciB0cnVua1JvdXRlID4gMHg3RkYob3IgcG9ydCB2ZWN0b3IpLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFRydW5rUm91dGluZwooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX1UzMiAgCQl0cnVua0lkLAoJSU4gR1RfVTMyCQl0cnVua1JvdXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRUcnVua1JvdXRpbmcKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyByb3V0aW5nIGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gVHJ1bmsgSUQuCioKKiBJTlBVVFM6CioJCXRydW5rSWQgLSBUcnVuayBJRC4KKgoqIE9VVFBVVFM6CioJCXRydW5rUm91dGUgLSBUcnVuayByb3V0ZSBiaXRzLiBCaXQgMCBjb250cm9scyB0cnVuayByb3V0aW5nIGZvciBwb3J0IDAsCioJCQkJCWJpdCAxIGZvciBwb3J0IDEgLCBldGMuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgdHJ1bmtJZCA+IDB4Ri4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRUcnVua1JvdXRpbmcKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX1UzMiAJCXRydW5rSWQsCglPVVQgR1RfVTMyCQkqdHJ1bmtSb3V0ZQopOwoKCgovKiBQcm90b3R5cGUgYWRkZWQgZm9yIDg4RTYwOTUgUmV2IDEgb3IgUmV2IDIgKi8KCi8qIGd0UG9ydEN0cmwuYyAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXREaXNjYXJkQkNhc3RNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgRGlzY2FyZCBCcm9hZGNhc3QgTW9kZS4gSWYgdGhlIG1vZGUgaXMgZW5hYmxlZCwKKgkJYWxsIHRoZSBicm9hZGNhc3QgZnJhbWVzIHRvIHRoZSBnaXZlbiBwb3J0IHdpbGwgYmUgZGlzY2FyZGVkLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUsIGlmIGVuYWJsZWQsCioJCQkgR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXREaXNjYXJkQkNhc3RNb2RlCigKCUlOICBHVF9RRF9ERVYgICAgKmRldiwKCUlOICBHVF9MUE9SVCAgICAgcG9ydCwKCU9VVCBHVF9CT09MIAkgKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXREaXNjYXJkQkNhc3RNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgRGlzY2FyZCBCcm9hZGNhc3QgbW9kZS4KKgkJSWYgdGhlIG1vZGUgaXMgZW5hYmxlZCwgYWxsIHRoZSBicm9hZGNhc3QgZnJhbWVzIHRvIHRoZSBnaXZlbiBwb3J0IHdpbGwgCioJCWJlIGRpc2NhcmRlZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlcgoqCQllbiAtIEdUX1RSVUUsIHRvIGVuYWJsZSB0aGUgbW9kZSwKKgkJCSBHVF9GQUxTRSwgb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKgkJTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldERpc2NhcmRCQ2FzdE1vZGUKKAoJSU4gIEdUX1FEX0RFViAgICAqZGV2LAoJSU4gIEdUX0xQT1JUICAgICBwb3J0LAoJSU4gIEdUX0JPT0wgCSBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0RkNPblJhdGVMaW1pdE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXR1cm5zIG1vZGUgdGhhdCB0ZWxscyBpZiBpbmdyZXNzIHJhdGUgbGltaXRpbmcgdXNlcyBGbG93IAoqCQlDb250cm9sLiBXaGVuIHRoaXMgbW9kZSBpcyBlbmFibGVkIGFuZCB0aGUgcG9ydCByZWNlaXZlcyBmcmFtZXMgb3ZlciB0aGUgCioJCWxpbWl0LCBJbmdyZXNzIFJhdGUgTGltaXRpbmcgd2lsbCBiZSBwZXJmb3JtZWQgYnkgc3RhbGxpbmcgdGhlIAoqCQlsaW5rIHBhcnRuZXIgdXNpbmcgZmxvdyBjb250cm9sLCBpbnN0ZWFkIG9mIGRpc2NhcmRpbmcgZnJhbWVzLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUsIGlmIHRoZSBtb2RlIGlzIGVuYWJsZWQsCioJCQkgR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRGQ09uUmF0ZUxpbWl0TW9kZQooCglJTiAgR1RfUURfREVWICAgICpkZXYsCglJTiAgR1RfTFBPUlQgICAgIHBvcnQsCglPVVQgR1RfQk9PTCAJICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0RkNPblJhdGVMaW1pdE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBtb2RlIHRoYXQgdGVsbHMgaWYgaW5ncmVzcyByYXRlIGxpbWl0aW5nIHVzZXMgRmxvdyAKKgkJQ29udHJvbC4gV2hlbiB0aGlzIG1vZGUgaXMgZW5hYmxlZCBhbmQgdGhlIHBvcnQgcmVjZWl2ZXMgZnJhbWVzIG92ZXIgdGhlIAoqCQlsaW1pdCwgSW5ncmVzcyBSYXRlIExpbWl0aW5nIHdpbGwgYmUgcGVyZm9ybWVkIGJ5IHN0YWxsaW5nIHRoZSAKKgkJbGluayBwYXJ0bmVyIHVzaW5nIGZsb3cgY29udHJvbCwgaW5zdGVhZCBvZiBkaXNjYXJkaW5nIGZyYW1lcy4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlcgoqCQllbiAtIEdUX1RSVUUsIHRvIGVuYWJsZSB0aGUgbW9kZSwKKgkJCSBHVF9GQUxTRSwgb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKgkJTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldEZDT25SYXRlTGltaXRNb2RlCigKCUlOICBHVF9RRF9ERVYgICAgKmRldiwKCUlOICBHVF9MUE9SVCAgICAgcG9ydCwKCUlOICBHVF9CT09MIAkgZW4KKTsKCgovKiBndFBvcnRSYXRlQ3RybC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY1NldEJ1cnN0UmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIHBvcnQncyBpbmdyZXNzIGRhdGEgbGltaXQgYmFzZWQgb24gYnVyc3Qgc2l6ZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0CS0gbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBic2l6ZQktIGJ1cnN0IHNpemUuCiogICAgICAgcmF0ZSAgICAtIGluZ3Jlc3MgZGF0YSByYXRlIGxpbWl0LiBUaGVzZSBmcmFtZXMgd2lsbCBiZSBkaXNjYXJkZWQgYWZ0ZXIgCioJCQkJdGhlIGluZ3Jlc3MgcmF0ZSBzZWxlY3RlZCBpcyByZWFjaGVkIG9yIGV4Y2VlZGVkLiAKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMgCioJCQkJCQkJCU1pbmltdW0gcmF0ZSBmb3IgQnVyc3QgU2l6ZSAyNEsgYnl0ZSBpcyAxMjhLYnBzCioJCQkJCQkJCU1pbmltdW0gcmF0ZSBmb3IgQnVyc3QgU2l6ZSA0OEsgYnl0ZSBpcyAyNTZLYnBzCioJCQkJCQkJCU1pbmltdW0gcmF0ZSBmb3IgQnVyc3QgU2l6ZSA5NksgYnl0ZSBpcyA1MTJLYnBzCioJCUdUX05PVF9TVVBQT1JURUQgICAgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgkJSWYgdGhlIGRldmljZSBzdXBwb3J0cyBib3RoIHByaW9yaXR5IGJhc2VkIFJhdGUgTGltaXRpbmcgYW5kIGJ1cnN0IHNpemUKKgkJYmFzZWQgUmF0ZSBsaW1pdGluZywgdXNlciBoYXMgdG8gbWFudWFsbHkgY2hhbmdlIHRoZSBtb2RlIHRvIGJ1cnN0IHNpemUKKgkJYmFzZWQgUmF0ZSBsaW1pdGluZyBieSBjYWxsaW5nIGdzeXNTZXRSYXRlTGltaXRNb2RlLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNTZXRCdXJzdFJhdGUKKAogICAgSU4gR1RfUURfREVWICAgICAgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIElOIEdUX0JVUlNUX1NJWkUgICBic2l6ZSwKICAgIElOIEdUX0JVUlNUX1JBVEUgICByYXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY0dldEJ1cnN0UmF0ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJldHJpZXZlcyB0aGUgcG9ydCdzIGluZ3Jlc3MgZGF0YSBsaW1pdCBiYXNlZCBvbiBidXJzdCBzaXplLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQJLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBic2l6ZQktIGJ1cnN0IHNpemUuCiogICAgICAgcmF0ZSAgICAtIGluZ3Jlc3MgZGF0YSByYXRlIGxpbWl0LiBUaGVzZSBmcmFtZXMgd2lsbCBiZSBkaXNjYXJkZWQgYWZ0ZXIgCioJCQkJdGhlIGluZ3Jlc3MgcmF0ZSBzZWxlY3RlZCBpcyByZWFjaGVkIG9yIGV4Y2VlZGVkLiAKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNHZXRCdXJzdFJhdGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgT1VUIEdUX0JVUlNUX1NJWkUgICAqYnNpemUsCiAgICBPVVQgR1RfQlVSU1RfUkFURSAgICpyYXRlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNTZXRUQ1BCdXJzdFJhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIHRoZSBwb3J0J3MgVENQL0lQIGluZ3Jlc3MgZGF0YSBsaW1pdCBiYXNlZCBvbiBidXJzdCBzaXplLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQJLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIHJhdGUgICAgLSBpbmdyZXNzIGRhdGEgcmF0ZSBsaW1pdCBmb3IgVENQL0lQIHBhY2tldHMuIFRoZXNlIGZyYW1lcyB3aWxsIAoqCQkJCWJlIGRpc2NhcmRlZCBhZnRlciB0aGUgaW5ncmVzcyByYXRlIHNlbGVjdGVkIGlzIHJlYWNoZWQgb3IgZXhjZWVkZWQuIAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgICAgLSBvbiBiYWQgcGFyYW1ldGVycyAKKgkJCQkJCQkJVmFsaWQgcmF0ZSBpcyBHVF9CVVJTVF9OT19MSU1JVCwgb3IgYmV0d2VlbgoqCQkJCQkJCQk2NEticHMgYW5kIDE1MDBLYnBzLgoqCQlHVF9OT1RfU1VQUE9SVEVEICAgIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioJCUlmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgYm90aCBwcmlvcml0eSBiYXNlZCBSYXRlIExpbWl0aW5nIGFuZCBidXJzdCBzaXplCioJCWJhc2VkIFJhdGUgbGltaXRpbmcsIHVzZXIgaGFzIHRvIG1hbnVhbGx5IGNoYW5nZSB0aGUgbW9kZSB0byBidXJzdCBzaXplCioJCWJhc2VkIFJhdGUgbGltaXRpbmcgYnkgY2FsbGluZyBnc3lzU2V0UmF0ZUxpbWl0TW9kZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjU2V0VENQQnVyc3RSYXRlCigKICAgIElOIEdUX1FEX0RFViAgICAgICAqZGV2LAogICAgSU4gR1RfTFBPUlQgICAgICAgIHBvcnQsCiAgICBJTiBHVF9CVVJTVF9SQVRFICAgcmF0ZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjR2V0VENQQnVyc3RSYXRlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgcG9ydCdzIFRDUC9JUCBpbmdyZXNzIGRhdGEgbGltaXQgYmFzZWQgb24gYnVyc3Qgc2l6ZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0CS0gbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgcmF0ZSAgICAtIGluZ3Jlc3MgZGF0YSByYXRlIGxpbWl0IGZvciBUQ1AvSVAgcGFja2V0cy4gVGhlc2UgZnJhbWVzIHdpbGwgCioJCQkJYmUgZGlzY2FyZGVkIGFmdGVyIHRoZSBpbmdyZXNzIHJhdGUgc2VsZWN0ZWQgaXMgcmVhY2hlZCBvciBleGNlZWRlZC4gCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1ZBTFVFICAgICAgICAtIHJlZ2lzdGVyIHZhbHVlIGlzIG5vdCBrbm93bgoqCQlHVF9OT1RfU1VQUE9SVEVEICAgIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioJCUlmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgYm90aCBwcmlvcml0eSBiYXNlZCBSYXRlIExpbWl0aW5nIGFuZCBidXJzdCBzaXplCioJCWJhc2VkIFJhdGUgbGltaXRpbmcsIHVzZXIgaGFzIHRvIG1hbnVhbGx5IGNoYW5nZSB0aGUgbW9kZSB0byBidXJzdCBzaXplCioJCWJhc2VkIFJhdGUgbGltaXRpbmcgYnkgY2FsbGluZyBnc3lzU2V0UmF0ZUxpbWl0TW9kZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjR2V0VENQQnVyc3RSYXRlCigKICAgIElOICBHVF9RRF9ERVYgICAgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgICAgcG9ydCwKICAgIE9VVCBHVF9CVVJTVF9SQVRFICAgKnJhdGUKKTsKCgovKiBndFN5c0N0cmwuYyAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRSYXRlTGltaXRNb2RlCioKKiBERVNDUklQVElPTjoKKgkJSW5ncmVzcyBSYXRlIExpbWl0aW5nIGNhbiBiZSBlaXRoZXIgUHJpb3JpdHkgYmFzZWQgb3IgQnVyc3QgU2l6ZSBiYXNlZC4KKgkJVGhpcyByb3V0aW5lIHNldHMgd2hpY2ggbW9kZSB0byB1c2UuCioKKiBJTlBVVFM6CioJCW1vZGUgLSBlaXRoZXIgR1RfUkFURV9QUklfQkFTRSBvciBHVF9SQVRFX0JVUlNUX0JBU0UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBtb2RlIGlzIHVzZWQuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0UmF0ZUxpbWl0TW9kZQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0lOR1JFU1NfUkFURV9NT0RFIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFJhdGVMaW1pdE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlJbmdyZXNzIFJhdGUgTGltaXRpbmcgY2FuIGJlIGVpdGhlciBQcmlvcml0eSBiYXNlZCBvciBCdXJzdCBTaXplIGJhc2VkLgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyB3aGljaCBtb2RlIGlzIGJlaW5nIHVzZWQuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gZWl0aGVyIEdUX1JBVEVfUFJJX0JBU0Ugb3IgR1RfUkFURV9CVVJTVF9CQVNFCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRSYXRlTGltaXRNb2RlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9JTkdSRVNTX1JBVEVfTU9ERSAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0QWdlSW50CioKKiBERVNDUklQVElPTjoKKgkJRW5hYmxlL0Rpc2FibGUgQWdlIFJlZnJlc2ggSW50ZXJydXB0LiBJZiBDUFUgRGlyZWN0ZWQgTGVhcm5pbmcgaXMgYmVpbmcKKgkJdXNlZCAoZ3BydFNldExvY2tlZFBvcnQpLCBpdCBtYXkgYmUgZGVzaXJhYmxlIHRvIGtub3cgd2hlbiBhbiBhZGRyZXNzIGlzCioJCXN0aWxsIGJlaW5nIHVzZWQgYmVmb3JlIGl0IHRvdGFsbHkgYWdlcyBvdXQgb2YgdGhlIHN3aXRjaC4gVGhpcyBjYW4gYmUgCioJCWFjY29tcGxpc2hlZCBieSBlbmFibGluZyBBZ2UgUmVmcmVzaCBJbnRlcnJ1cHQgKG9yIEFUVSBBZ2UgVmlvbGF0aW9uIEludCkuCioJCUFuIEFUVSBBZ2UgVmlvbGF0aW9uIGxvb2tzIGlkZW50aWNhbCB0byBhbmQgcmVwb3J0ZWQgdGhlIHNhbWUgYXMgYW4gQVRVIAoqCQlNaXNzIFZpb2xhdGlvbi4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB3aGVuIHRoaXMgcmVwb3J0ZWQuIE5vcm1hbCBBVFUgTWlzcwoqCQlWaW9sYXRpb24gb25seSBvY2N1ciBpZiBhIG5ldyBTQSBhcnJpdmVzIGF0IGEgTG9ja2VkUG9ydC4gVGhlIEFnZSB2ZXJzaW9uIAoqCQlvZiB0aGUgQVRVIE1pc3MgVmlvbGF0aW9uIG9jY3VycyBpZiBhbiBTQSBhcnJpdmVzIGF0IGEgTG9ja2VkUG9ydCwgd2hlcmUKKgkJdGhlIGFkZHJlc3MgaXMgY29udGFpbmVkIGluIHRoZSBBVFUncyBkYXRhYmFzZSwgYnV0IHdoZXJlIGl0cyBFbnRyeVN0YXRlIAoqCQlpcyBsZXNzIHRoYW4gMHg0IChpLmUuLCBpdCBoYXMgYWdlZCBtb3JlIHRoYW4gMS8yIHdheSkuCioJCUdUX0FUVV9QUk9CIEludGVycnVwdCBzaG91bGQgYmUgZW5hYmxlZCBmb3IgdGhpcyBpbnRlcnJ1cHQgdG8gb2NjdXIuCioJCVJlZmVyIHRvIGV2ZW50U2V0QWN0aXZlIHJvdXRpbmUgdG8gZW5hYmxlIEdUX0FUVV9QUk9CLgoqCQkKKgoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFLCB0byBlbmFibGUsCioJCQkgR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRBZ2VJbnQKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9CT09MCQllbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0QWdlSW50CioKKiBERVNDUklQVElPTjoKKgkJR2V0IHN0YXRlIG9mIEFnZSBSZWZyZXNoIEludGVycnVwdCBtb2RlLiBJZiBDUFUgRGlyZWN0ZWQgTGVhcm5pbmcgaXMgYmVpbmcKKgkJdXNlZCAoZ3BydFNldExvY2tlZFBvcnQpLCBpdCBtYXkgYmUgZGVzaXJhYmxlIHRvIGtub3cgd2hlbiBhbiBhZGRyZXNzIGlzCioJCXN0aWxsIGJlaW5nIHVzZWQgYmVmb3JlIGl0IHRvdGFsbHkgYWdlcyBvdXQgb2YgdGhlIHN3aXRjaC4gVGhpcyBjYW4gYmUgCioJCWFjY29tcGxpc2hlZCBieSBlbmFibGluZyBBZ2UgUmVmcmVzaCBJbnRlcnJ1cHQgKG9yIEFUVSBBZ2UgVmlvbGF0aW9uIEludCkuCioJCUFuIEFUVSBBZ2UgVmlvbGF0aW9uIGxvb2tzIGlkZW50aWNhbCB0byBhbmQgcmVwb3J0ZWQgdGhlIHNhbWUgYXMgYW4gQVRVIAoqCQlNaXNzIFZpb2xhdGlvbi4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB3aGVuIHRoaXMgcmVwb3J0ZWQuIE5vcm1hbCBBVFUgTWlzcwoqCQlWaW9sYXRpb24gb25seSBvY2N1ciBpZiBhIG5ldyBTQSBhcnJpdmVzIGF0IGEgTG9ja2VkUG9ydC4gVGhlIEFnZSB2ZXJzaW9uIAoqCQlvZiB0aGUgQVRVIE1pc3MgVmlvbGF0aW9uIG9jY3VycyBpZiBhbiBTQSBhcnJpdmVzIGF0IGEgTG9ja2VkUG9ydCwgd2hlcmUKKgkJdGhlIGFkZHJlc3MgaXMgY29udGFpbmVkIGluIHRoZSBBVFUncyBkYXRhYmFzZSwgYnV0IHdoZXJlIGl0cyBFbnRyeVN0YXRlIAoqCQlpcyBsZXNzIHRoYW4gMHg0IChpLmUuLCBpdCBoYXMgYWdlZCBtb3JlIHRoYW4gMS8yIHdheSkuCioJCUdUX0FUVV9QUk9CIEludGVycnVwdCBzaG91bGQgYmUgZW5hYmxlZCBmb3IgdGhpcyBpbnRlcnJ1cHQgdG8gb2NjdXIuCioJCVJlZmVyIHRvIGV2ZW50U2V0QWN0aXZlIHJvdXRpbmUgdG8gZW5hYmxlIEdUX0FUVV9QUk9CLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW4gLSBHVF9UUlVFLCBpZiBlbmFibGVkLAoqCQkJIEdUX0ZBTFNFLCBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRBZ2VJbnQKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0JPT0wJCSplbgopOwoKCi8qIEZvciBaZXBoeXIgKi8KCi8qIGd0UGh5Q3RybC5jICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFBoeUxpbmtTdGF0dXMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgdGhlIExpbmsgc3RhdHVzLgoqCiogSU5QVVRTOgoqIAkJcG9ydCAJLSBUaGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKiAgICAgICBsaW5rU3RhdHVzIC0gR1RfRkFMU0UgaWYgbGluayBpcyBub3QgZXN0YWJsaXNoZWQsCioJCQkJICAgICBHVF9UUlVFIGlmIGxpbmsgaXMgZXN0YWJsaXNoZWQuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioJCQoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQaHlMaW5rU3RhdHVzCigKCUlOIEdUX1FEX0RFViAqZGV2LAoJSU4gR1RfTFBPUlQgIHBvcnQsCiAgICBJTiBHVF9CT09MIAkgKmxpbmtTdGF0dXMKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQa3RHZW5FbmFibGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzIG9yIGRpc2FibGVzIFBhY2tldCBHZW5lcmF0b3IuCiogICAgICAgTGluayBzaG91bGQgYmUgZXN0YWJsaXNoZWQgZmlyc3QgcHJpb3IgdG8gZW5hYmxpbmcgdGhlIHBhY2tldCBnZW5lcmF0b3IsCiogICAgICAgYW5kIGdlbmVyYXRvciB3aWxsIGdlbmVyYXRlIHBhY2tldHMgYXQgdGhlIHNwZWVkIG9mIHRoZSBlc3RhYmxpc2hlZCBsaW5rLgoqCQlXaGVuIGVuYWJsZXMgcGFja2V0IGdlbmVyYXRvciwgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBzaG91bGQgYmUgCiogICAgICAgcHJvdmlkZWQ6CiogICAgICAgICAgIFBheWxvYWQgVHlwZTogIGVpdGhlciBSYW5kb20gb3IgNUFBNTVBQTUKKiAgICAgICAgICAgUGFja2V0IExlbmd0aDogZWl0aGVyIDY0IG9yIDE1MTQgYnl0ZXMKKiAgICAgICAgICAgRXJyb3IgUGFja2V0OiAgZWl0aGVyIEVycm9yIHBhY2tldCBvciBub3JtYWwgcGFja2V0CioKKiBJTlBVVFM6CiogCQlwb3J0IAktIFRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgZW4gICAgICAtIEdUX1RSVUUgdG8gZW5hYmxlLCBHVF9GQUxTRSB0byBkaXNhYmxlCiogICAgICAgcGt0SW5mbyAtIHBhY2tldCBpbmZvcm1hdGlvbihHVF9QRyBzdHJ1Y3R1cmUgcG9pbnRlciksIGlmIGVuIGlzIEdUX1RSVUUuCiogICAgICAgICAgICAgICAgIGlnbm9yZWQsIGlmIGVuIGlzIEdUX0ZBTFNFCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioJCQoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRQa3RHZW5FbmFibGUKKAoJSU4gR1RfUURfREVWICpkZXYsCglJTiBHVF9MUE9SVCAgcG9ydCwKICAgIElOIEdUX0JPT0wgICBlbiwKICAgIElOIEdUX1BHICAgICAqcGt0SW5mbwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0U2VyZGVzTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJlYWRzIFNlcmRlcyBJbnRlcmZhY2UgTW9kZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlICAgIC0gU2VyZGVzIEludGVyZmFjZSBNb2RlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFNlcmRlc01vZGUKKAogICAgSU4gIEdUX1FEX0RFViAgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAoJSU4gIEdUX1NFUkRFU19NT0RFICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRTZXJkZXNNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBTZXJkZXMgSW50ZXJmYWNlIE1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKiAgICAgICBtb2RlICAgIC0gU2VyZGVzIEludGVyZmFjZSBNb2RlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRTZXJkZXNNb2RlCigKICAgIElOICBHVF9RRF9ERVYgICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgICAgcG9ydCwKCUlOICBHVF9TRVJERVNfTU9ERSBtb2RlCik7CgoKLyogZ3RTeXNDdHJsLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEZvcmNlU25vb3BQcmkKKgoqIERFU0NSSVBUSU9OOgoqCQlGb3JjZSBTbm9vcGluZyBQcmlvcml0eS4gVGhlIHByaW9yaXR5IG9uIElHTVAgb3IgTUxEIFNub29wIGZyYW1lcyBhcmUKKgkJc2V0IHRvIHRoZSBTbm9vcFByaSB2YWx1ZSAoZ3N5c1NldFNub29wUHJpIEFQSSkgd2hlbiBGb3JjZSBTbm9vcGluZwoqICAgICAgIFByaW9yaXR5IGlzIGVuYWJsZWQuIFdoZW4gaXQncyBkaXNhYmxlZCwgdGhlIHByaW9yaXR5IG9uIHRoZXNlIGZyYW1lcwoqCQlpcyBub3QgbW9kaWZpZWQuCioKKiBJTlBVVFM6CioJCWVuIC0gR1RfVFJVRSB0byB1c2UgZGVmaW5lZCBQUkkgYml0cywgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEZvcmNlU25vb3BQcmkKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9CT09MCQllbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0Rm9yY2VTbm9vcFByaQoqCiogREVTQ1JJUFRJT046CioJCUZvcmNlIFNub29waW5nIFByaW9yaXR5LiBUaGUgcHJpb3JpdHkgb24gSUdNUCBvciBNTEQgU25vb3AgZnJhbWVzIGFyZQoqCQlzZXQgdG8gdGhlIFNub29wUHJpIHZhbHVlIChnc3lzU2V0U25vb3BQcmkgQVBJKSB3aGVuIEZvcmNlIFNub29waW5nCiogICAgICAgUHJpb3JpdHkgaXMgZW5hYmxlZC4gV2hlbiBpdCdzIGRpc2FibGVkLCB0aGUgcHJpb3JpdHkgb24gdGhlc2UgZnJhbWVzCioJCWlzIG5vdCBtb2RpZmllZC4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWVuIC0gR1RfVFJVRSB0byB1c2UgZGVmaW5lZCBQUkkgYml0cywgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0Rm9yY2VTbm9vcFByaQooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfQk9PTCAgCSplbgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFNub29wUHJpCioKKiBERVNDUklQVElPTjoKKgkJU25vb3AgUHJpb3JpdHkuIFdoZW4gRm9yY2VTbm9vcFByaSAoZ3N5c1NldEZvcmNlU25vb3BQcmkgQVBJKSBpcyBlbmFibGVkLAoqICAgICAgIHRoaXMgcHJpb3JpdHkgaXMgdXNlZCBhcyB0aGUgZWdyZXNzaW5nIGZyYW1lJ3MgUFJJWzI6MF0gYml0cyBvbiBnZW5lcmF0ZWQKKiAgICAgICBNYXJ2ZWxsIFRhZyBUb19DUFUgU25vb3AgZnJhbWVzIGFuZCBoaWdoZXIgMiBiaXRzIG9mIHRoZSBwcmlvcml0eSBhcmUKKiAgICAgICB1c2VkIGFzIHRoZSBpbnRlcm5hbCBRdWV1ZSBQcmlvcml0eSB0byB1c2Ugb24gSUdNUC9NTEQgc25vb3AgZnJhbWVzLgoqCiogSU5QVVRTOgoqCQlwcmkgLSBQUklbMjowXSBiaXRzIChzaG91bGQgYmUgbGVzcyB0aGFuIDgpCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIElmIHByaSBpcyBub3QgbGVzcyB0aGFuIDguCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0U25vb3BQcmkKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9VMTYJCXByaQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFNub29wUHJpCioKKiBERVNDUklQVElPTjoKKgkJU25vb3AgUHJpb3JpdHkuIFdoZW4gRm9yY2VTbm9vcFByaSAoZ3N5c1NldEZvcmNlU25vb3BQcmkgQVBJKSBpcyBlbmFibGVkLAoqICAgICAgIHRoaXMgcHJpb3JpdHkgaXMgdXNlZCBhcyB0aGUgZWdyZXNzaW5nIGZyYW1lJ3MgUFJJWzI6MF0gYml0cyBvbiBnZW5lcmF0ZWQKKiAgICAgICBNYXJ2ZWxsIFRhZyBUb19DUFUgU25vb3AgZnJhbWVzIGFuZCBoaWdoZXIgMiBiaXRzIG9mIHRoZSBwcmlvcml0eSBhcmUKKiAgICAgICB1c2VkIGFzIHRoZSBpbnRlcm5hbCBRdWV1ZSBQcmlvcml0eSB0byB1c2Ugb24gSUdNUC9NTEQgc25vb3AgZnJhbWVzLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJcHJpIC0gUFJJWzI6MF0gYml0cyAoc2hvdWxkIGJlIGxlc3MgdGhhbiA4KQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0U25vb3BQcmkKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX1UxNiAgCSpwcmkKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRGb3JjZUFSUFByaQoqCiogREVTQ1JJUFRJT046CioJCUZvcmNlIEFSUCBQcmlvcml0eS4gVGhlIHByaW9yaXR5IG9uIEFSUCBmcmFtZXMgYXJlIHNldCB0byB0aGUgQVJQUHJpIAoqICAgICAgIHZhbHVlIChnc3lzU2V0QVJQUHJpIEFQSSkgd2hlbiBGb3JjZSBBUlAgUHJpb3JpdHkgaXMgZW5hYmxlZC4gV2hlbiBpdCdzIAoqICAgICAgIGRpc2FibGVkLCB0aGUgcHJpb3JpdHkgb24gdGhlc2UgZnJhbWVzIGlzIG5vdCBtb2RpZmllZC4KKgoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIHVzZSBkZWZpbmVkIFBSSSBiaXRzLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Rm9yY2VBUlBQcmkKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9CT09MCQllbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0Rm9yY2VBUlBQcmkKKgoqIERFU0NSSVBUSU9OOgoqCQlGb3JjZSBBUlAgUHJpb3JpdHkuIFRoZSBwcmlvcml0eSBvbiBBUlAgZnJhbWVzIGFyZSBzZXQgdG8gdGhlIEFSUFByaSAKKiAgICAgICB2YWx1ZSAoZ3N5c1NldEFSUFByaSBBUEkpIHdoZW4gRm9yY2UgQVJQIFByaW9yaXR5IGlzIGVuYWJsZWQuIFdoZW4gaXQncyAKKiAgICAgICBkaXNhYmxlZCwgdGhlIHByaW9yaXR5IG9uIHRoZXNlIGZyYW1lcyBpcyBub3QgbW9kaWZpZWQuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gdXNlIGRlZmluZWQgUFJJIGJpdHMsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEZvcmNlQVJQUHJpCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9CT09MICAJKmVuCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0QVJQUHJpCioKKiBERVNDUklQVElPTjoKKgkJQVJQIFByaW9yaXR5LiBXaGVuIEZvcmNlQVJQUHJpIChnc3lzU2V0Rm9yY2VBUlBQcmkgQVBJKSBpcyBlbmFibGVkLAoqICAgICAgIHRoaXMgcHJpb3JpdHkgaXMgdXNlZCBhcyB0aGUgZWdyZXNzaW5nIGZyYW1lJ3MgUFJJWzI6MF0gYml0cyBvbiBnZW5lcmF0ZWQKKiAgICAgICBNYXJ2ZWxsIFRhZyBUb19DUFUgQVJQIGZyYW1lcyBhbmQgaGlnaGVyIDIgYml0cyBvZiB0aGUgcHJpb3JpdHkgYXJlCiogICAgICAgdXNlZCBhcyB0aGUgaW50ZXJuYWwgUXVldWUgUHJpb3JpdHkgdG8gdXNlIG9uIEFSUCBmcmFtZXMuCioKKiBJTlBVVFM6CioJCXByaSAtIFBSSVsyOjBdIGJpdHMgKHNob3VsZCBiZSBsZXNzIHRoYW4gOCkKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gSWYgcHJpIGlzIG5vdCBsZXNzIHRoYW4gOC4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRBUlBQcmkKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9VMTYJCXByaQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEFSUFByaQoqCiogREVTQ1JJUFRJT046CioJCUFSUCBQcmlvcml0eS4gV2hlbiBGb3JjZUFSUFByaSAoZ3N5c1NldEZvcmNlQVJQUHJpIEFQSSkgaXMgZW5hYmxlZCwKKiAgICAgICB0aGlzIHByaW9yaXR5IGlzIHVzZWQgYXMgdGhlIGVncmVzc2luZyBmcmFtZSdzIFBSSVsyOjBdIGJpdHMgb24gZ2VuZXJhdGVkCiogICAgICAgTWFydmVsbCBUYWcgVG9fQ1BVIEFSUCBmcmFtZXMgYW5kIGhpZ2hlciAyIGJpdHMgb2YgdGhlIHByaW9yaXR5IGFyZQoqICAgICAgIHVzZWQgYXMgdGhlIGludGVybmFsIFF1ZXVlIFByaW9yaXR5IHRvIHVzZSBvbiBBUlAgZnJhbWVzLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJcHJpIC0gUFJJWzI6MF0gYml0cyAoc2hvdWxkIGJlIGxlc3MgdGhhbiA4KQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0QVJQUHJpCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9VMTYgIAkqcHJpCik7CgoKLyogYWRkZWQgZm9yIDg4RTYwNjUgKi8KCi8qIGd0QnJnVmxhbi5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmxuU2V0Rm9yY2VNYXAKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzL2Rpc2FibGVzIEZvcmNlIE1hcCBmZWF0dXJlLgoqCQlXaGVuIEZvcmNlIE1hcCBmZWF0dXJlIGlzIGVuYWJsZWQsIGFsbCByZWNlaXZlZCBmcmFtZXMgd2lsbCBiZQoqCQljb25zaWRlcmVkIE1HTVQgYW5kIHRoZXkgYXJlIG1hcHBlZCB0byB0aGUgcG9ydCBvciBwb3J0cyBkZWZpbmVkCioJCWluIHRoZSBWTEFOIFRhYmxlIG92ZXJyaWRpbmcgdGhlIG1hcHBpbmcgZnJvbSB0aGUgYWRkcmVzcyBkYXRhYmFzZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlciB0byBzZXQuCiogICAgICAgbW9kZSAgICAtIEdUX1RSVUUsIHRvIGVuYWJsZSBmb3JjZSBtYXAgZmVhdHVyZQoqICAgICAgICAgICAgICAgICBHVF9GQVVMU0UsIG90aGVyd2lzZSAKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2bG5TZXRGb3JjZU1hcAooCiAgICBJTiAgR1RfUURfREVWICAgKmRldiwKICAgIElOICBHVF9MUE9SVCAJcG9ydCwKICAgIElOICBHVF9CT09MICAJbW9kZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5HZXRGb3JjZU1hcAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGNoZWNrcyBpZiBGb3JjZSBNYXAgZmVhdHVyZSBpcyBlbmFibGVkLgoqCQlXaGVuIEZvcmNlIE1hcCBmZWF0dXJlIGlzIGVuYWJsZWQsIGFsbCByZWNlaXZlZCBmcmFtZXMgd2lsbCBiZQoqCQljb25zaWRlcmVkIE1HTVQgYW5kIHRoZXkgYXJlIG1hcHBlZCB0byB0aGUgcG9ydCBvciBwb3J0cyBkZWZpbmVkCioJCWluIHRoZSBWTEFOIFRhYmxlIG92ZXJyaWRpbmcgdGhlIG1hcHBpbmcgZnJvbSB0aGUgYWRkcmVzcyBkYXRhYmFzZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgIC0gbG9naWNhbCBwb3J0IG51bWJlciB0byBzZXQuCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgICAgLSBHVF9UUlVFLCB0byBlbmFibGUgZm9yY2UgbWFwIGZlYXR1cmUKKiAgICAgICAgICAgICAgICAgR1RfRkFVTFNFLCBvdGhlcndpc2UgCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmxuR2V0Rm9yY2VNYXAKKAogICAgSU4gIEdUX1FEX0RFViAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgCXBvcnQsCiAgICBPVVQgR1RfQk9PTCAgCSptb2RlCik7CgovKiBndEV2ZW50cy5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdldmVudFNldEFnZUludEVuCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGVuYWJsZXMvZGlzYWJsZXMgQWdlIEludGVycnVwdCBmb3IgYSBwb3J0LgoqCQlXaGVuIGl0J3MgZW5hYmxlZCwgQVRVIEFnZSBWaW9sYXRpb24gaW50ZXJydXB0cyBmcm9tIHRoaXMgcG9ydCBhcmUgZW5hYmxlZC4KKgkJQW4gQWdlIFZpb2xhdGlvbiB3aWxsIG9jY3VyIGFueXRpbWUgYSBwb3J0IGlzIExvY2tlZChncHJ0U2V0TG9ja2VkUG9ydCkgCioJCWFuZCB0aGUgaW5ncmVzc2luZyBmcmFtZSdzIFNBIGlzIGNvbnRhaW5lZCBpbiB0aGUgQVRVIGFzIGEgbm9uLVN0YXRpYyAKKgkJZW50cnkgd2l0aCBhIEVudHJ5U3RhdGUgbGVzcyB0aGFuIDB4NC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCW1vZGUgLSBHVF9UUlVFIHRvIGVuYWJsZSBBZ2UgSW50ZXJydXB0LAoqCQkJICAgR1RfRkFMVVNFIHRvIGRpc2FibGUKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZXZlbnRTZXRBZ2VJbnRFbgooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdldmVudEdldEFnZUludEVuCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgQWdlIEludGVycnVwdCBFbmFibGUgZm9yIHRoZSBwb3J0LgoqCQlXaGVuIGl0J3MgZW5hYmxlZCwgQVRVIEFnZSBWaW9sYXRpb24gaW50ZXJydXB0cyBmcm9tIHRoaXMgcG9ydCBhcmUgZW5hYmxlZC4KKgkJQW4gQWdlIFZpb2xhdGlvbiB3aWxsIG9jY3VyIGFueXRpbWUgYSBwb3J0IGlzIExvY2tlZChncHJ0U2V0TG9ja2VkUG9ydCkgCioJCWFuZCB0aGUgaW5ncmVzc2luZyBmcmFtZSdzIFNBIGlzIGNvbnRhaW5lZCBpbiB0aGUgQVRVIGFzIGEgbm9uLVN0YXRpYyAKKgkJZW50cnkgd2l0aCBhIEVudHJ5U3RhdGUgbGVzcyB0aGFuIDB4NC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCW1vZGUgLSBHVF9UUlVFIHRvIGVuYWJsZSBBZ2UgSW50ZXJydXB0LAoqCQkJICAgR1RfRkFMVVNFIHRvIGRpc2FibGUKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZXZlbnRHZXRBZ2VJbnRFbgooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MCQkqbW9kZQopOwoKCi8qIGd0UElSTC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwaXJsQWN0aXZhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBhY3RpdmF0ZXMgSW5ncmVzcyBSYXRlIExpbWl0aW5nIGZvciB0aGUgZ2l2ZW4gcG9ydHMgYnkgCioJCWluaXRpYWxpemluZyBhIHJlc291cmNlIGJ1Y2tldCwgYXNzaWduaW5nIHBvcnRzLCBhbmQgY29uZmlndXJpbmcKKgkJQnVja2V0IFBhcmFtZXRlcnMuCioKKiBJTlBVVFM6CioJCWlybFVuaXQgIC0gYnVja2V0IHRvIGJlIHVzZWQgKDAgfiAxMSkuCiogICAgICAgcG9ydFZlYyAgLSB0aGUgbGlzdCBvZiBwb3J0cyB0aGF0IHNoYXJlIHRoZSBidWNrZXQuCioJCXBpcmxEYXRhIC0gUElSTCByZXNvdXJjZSBwYXJhbWV0ZXJzLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BpcmxBY3RpdmF0ZQooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1UzMgkJaXJsVW5pdCwKCUlOICBHVF9VMzIJCXBvcnRWZWMsCglJTiAgR1RfUElSTF9EQVRBCSpwaXJsRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGlybERlYWN0aXZhdGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBkZWFjdGl2YXRlcyBJbmdyZXNzIFJhdGUgTGltaXRpbmcgZm9yIHRoZSBnaXZlbiBidWNrZXQuCioJCUl0IHNpbXBseSByZW1vdmVzIGV2ZXJ5IHBvcnRzIGZyb20gdGhlIEluZ3Jlc3MgUmF0ZSBSZXNvdXJjZS4KKgkJSXQgaXMgYXNzdW1lZCB0aGF0IGdwaXJsQWN0aXZhdGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNhbGxlZCB3aXRoCioJCXRoZSBpcmxVbml0IGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKgoqIElOUFVUUzoKKgkJaXJsVW5pdCAgLSBidWNrZXQgdG8gYmUgZGVhY3RpdmF0ZWQKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwaXJsRGVhY3RpdmF0ZQooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1UzMgkJaXJsVW5pdAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGlybFVwZGF0ZVBhcmFtCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgdXBkYXRlcyBJUkwgUGFyYW1ldGVyLgoqCQlJdCBpcyBhc3N1bWVkIHRoYXQgZ3BpcmxBY3RpdmF0ZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY2FsbGVkIHdpdGgKKgkJdGhlIGdpdmVuIGlybFVuaXQgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgoqCiogSU5QVVRTOgoqCQlpcmxVbml0ICAtIGJ1Y2tldCB0byBiZSB1c2VkICgwIH4gMTEpCioJCXBpcmxEYXRhIC0gUElSTCByZXNvdXJjZSBwYXJhbWV0ZXJzCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGlybFVwZGF0ZVBhcmFtCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVTMyCQlpcmxVbml0LAoJSU4gIEdUX1BJUkxfREFUQQkqcGlybERhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BpcmxSZWFkUGFyYW0KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgSVJMIFBhcmFtZXRlci4KKgkJSXQgaXMgYXNzdW1lZCB0aGF0IGdwaXJsQWN0aXZhdGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNhbGxlZCB3aXRoCioJCXRoZSBnaXZlbiBpcmxVbml0IGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKgoqIElOUFVUUzoKKgkJaXJsVW5pdCAgLSBidWNrZXQgdG8gYmUgdXNlZCAoMCB+IDExKS4KKgoqIE9VVFBVVFM6CioJCXBpcmxEYXRhIC0gUElSTCByZXNvdXJjZSBwYXJhbWV0ZXJzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BpcmxSZWFkUGFyYW0KKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9VMzIJCWlybFVuaXQsCglPVVQgR1RfUElSTF9EQVRBCSpwaXJsRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGlybFVwZGF0ZVBvcnRWZWMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSB1cGRhdGVzIHBvcnQgbGlzdCB0aGF0IHNoYXJlIHRoZSBidWNrZXQuCioJCUl0IGlzIGFzc3VtZWQgdGhhdCBncGlybEFjdGl2YXRlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjYWxsZWQgd2l0aAoqCQl0aGUgZ2l2ZW4gaXJsVW5pdCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCioKKiBJTlBVVFM6CioJCWlybFVuaXQgIC0gYnVja2V0IHRvIGJlIHVzZWQgKDAgfiAxMSkuCiogICAgICAgcG9ydFZlYyAgLSB0aGUgbGlzdCBvZiBwb3J0cyB0aGF0IHNoYXJlIHRoZSBidWNrZXQuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGlybFVwZGF0ZVBvcnRWZWMKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9VMzIJCWlybFVuaXQsCglJTiAgR1RfVTMyCQlwb3J0VmVjCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwaXJsUmVhZFBvcnRWZWMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgcG9ydCBsaXN0IHRoYXQgc2hhcmUgdGhlIGJ1Y2tldC4KKgkJSXQgaXMgYXNzdW1lZCB0aGF0IGdwaXJsQWN0aXZhdGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNhbGxlZCB3aXRoCioJCXRoZSBnaXZlbiBpcmxVbml0IGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKgoqIElOUFVUUzoKKgkJaXJsVW5pdCAgLSBidWNrZXQgdG8gYmUgdXNlZCAoMCB+IDExKS4KKgoqIE9VVFBVVFM6CiogICAgICAgcG9ydFZlYyAgLSB0aGUgbGlzdCBvZiBwb3J0cyB0aGF0IHNoYXJlIHRoZSBidWNrZXQuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGlybFJlYWRQb3J0VmVjCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVTMyCQlpcmxVbml0LAoJT1VUIEdUX1UzMgkJKnBvcnRWZWMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjR2V0UGlybEZjTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgUG9ydCBJbmdyZXNzIFJhdGUgTGltaXQgRmxvdyBDb250cm9sIG1vZGUuCioJCVdoZW4gRUJTTGltaXRBY3Rpb24gaXMgcHJvZ3JhbW1lZCB0byBnZW5lcmF0ZSBhIGZsb3cgY29udHJvbCBtZXNzYWdlLCAKKgkJdGhlIGRlYXNzZXJ0aW9uIG9mIGZsb3cgY29udHJvbCBpcyBjb250cm9sbGVkIGJ5IHRoaXMgbW9kZS4KKgkJCUdUX1BJUkxfRkNfREVBU1NFUlRfRU1QVFk6CioJCQkJRGUtYXNzZXJ0IHdoZW4gdGhlIGluZ3Jlc3MgcmF0ZSByZXNvdXJjZSBoYXMgYmVjb21lIGVtcHR5CioJCQlHVF9QSVJMX0ZDX0RFQVNTRVJUX0NCU19MSU1JVAoqCQkJCURlLWFzc2VydCB3aGVuIHRoZSBpbmdyZXNzIHJhdGUgcmVzb3VyY2UgaGFzIGVub3VnaCByb29tIGFzCioJCQkJc3BlY2lmaWVkIGJ5IHRoZSBDQlNMaW1pdC4KKgkJUGxlYXNlIHJlZmVyIHRvIEdUX1BJUkxfUkVTT1VSQ0Ugc3RydWN0dXJlIGZvciBFQlNMaW1pdEFjdGlvbiBhbmQKKgkJQ0JTTGltaXQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9QSVJMX0ZDX0RFQVNTRVJUIGVudW0gdHlwZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEICAgIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY0dldFBpcmxGY01vZGUKKAogICAgSU4gIEdUX1FEX0RFVgkqZGV2LAogICAgSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfUElSTF9GQ19ERUFTU0VSVAkJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BpcmxHZXRJbmdyZXNzUmF0ZVJlc291cmNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBJbmdyZXNzIFJhdGUgTGltaXRpbmcgUmVzb3VyY2VzIGFzc2lnbmVkIHRvIHRoZSBwb3J0LgoqCQlUaGlzIHZlY3RvciBpcyB1c2VkIHRvIGF0dGFjaCBzcGVjaWZpYyBjb3VudGVyIHJlc291cmNlcyB0byB0aGUgcGh5c2ljYWwKKgkJcG9ydC4gQW5kIHRoZSBzYW1lIGNvdW50ZXIgcmVzb3VyY2UgY2FuIGJlIGF0dGFjaGVkIHRvIG1vcmUgdGhhbiBvbmUgcG9ydC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQlyZXNWZWMgLSByZXNvdXJjZSB2ZWN0b3IgKGJpdCAwIGZvciBpcmwgdW5pdCAwLCBiaXQgMSBmb3IgaXJsIHVuaXQgMSwgZXRjLikKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAgICAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGlybEdldEluZ3Jlc3NSYXRlUmVzb3VyY2UKKAogICAgSU4gIEdUX1FEX0RFVgkqZGV2LAogICAgSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfVTMyCQkqcmVzVmVjCik7CgoKCi8qIGd0UG9ydFN0YXR1cy5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQeE1vZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cml2ZXMgNCBiaXRzIG9mIFB4X01PREUgQ29uZmlndXJhdGlvbiB2YWx1ZS4KKgkJSWYgc3BlZWQgYW5kIGR1cGxleCBtb2RlcyBhcmUgZm9yY2VkLCB0aGUgcmV0dXJuZWQgbW9kZSB2YWx1ZSB3b3VsZCBiZQoqCQlkaWZmZXJlbnQgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBwaW4gdmFsdWVzLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gUHhfTU9ERSBjb25maWd1cmF0aW9uIHZhbHVlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQeE1vZGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX1UzMiAgCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRNaWlJbnRlcmZhY2UKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cml2ZXMgTWlpIEludGVyZmFjZSBNb2RlLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIEdUX1RSVUUgaWYgTWlpIEludGVyZmFjZSBpcyBlbmFibGVkLAoqCQkJCSAgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0TWlpSW50ZXJmYWNlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCU9VVCBHVF9CT09MICAJKnN0YXRlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRGZEZsb3dEaXMKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cml2ZXMgdGhlIHJlYWQgdGltZSB2YWx1ZSBvZiB0aGUgRnVsbCBEdXBsZXggRmxvdyBEaXNhYmxlLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlzdGF0ZSAtIEdUX1RSVUUgaWYgRnVsbCBEdXBsZXggRmxvdyBEaXNhYmxlLgoqCSAgIAkJICAgIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEZkRmxvd0RpcwooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglPVVQgR1RfQk9PTCAgCSpzdGF0ZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0SGRGbG93RGlzCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJldHJpdmVzIHRoZSByZWFkIHRpbWUgdmFsdWUgb2YgdGhlIEhhbGYgRHVwbGV4IEZsb3cgRGlzYWJsZS4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJc3RhdGUgLSBHVF9UUlVFIGlmIEhhbGYgRHVwbGV4IEZsb3cgRGlzYWJsZS4KKgkgICAJCSAgICBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRIZEZsb3dEaXMKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX0JPT0wgIAkqc3RhdGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldE91dFFTaXplCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgZWdyZXNzIHF1ZXVlIHNpemUgY291bnRlciB2YWx1ZS4KKgkJVGhpcyBjb3VudGVyIHJlZmxlY3RzIHRoZSBjdXJyZW50IG51bWJlciBvZiBFZ3Jlc3MgYnVmZmVycyBzd2l0Y2hlZCB0byAKKgkJdGhpcyBwb3J0LiBUaGlzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgYnVmZmVycyBhY3Jvc3MgYWxsIGZvdXIgcHJpb3JpdHkgCioJCXF1ZXVlcy4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQljb3VudCAtIGVncmVzcyBxdWV1ZSBzaXplIGNvdW50ZXIgdmFsdWUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRPdXRRU2l6ZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9VMTYJCSpjb3VudAopOwoKCi8qIGd0UG9ydEN0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0U0FGaWx0ZXJpbmcKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0IHRoZSBTb3VyY2UgQWRkcmVzcyhTQSkgZml0ZXJpbmcgbWV0aG9kLgoqCQkJR1RfU0FfRklMVEVSSU5HX0RJU0FCTEUgOgoqCQkJCW5vIGZyYW1lIHdpbGwgYmUgZmlsdGVyZWQuCioJCQlHVF9TQV9EUk9QX09OX0xPQ0sgOgoqCQkJCWRpc2NhcmQgaWYgU0EgZmllbGQgaXMgbm90IGluIHRoZSBBVFUncyBhZGRyZXNzIGRhdGFiYXNlLgoqCQkJR1RfU0FfRFJPUF9PTl9VTkxPQyA6IAoqCQkJCWRpc2NhcmQgaWYgU0EgZmllbGQgaXMgaW4gdGhlIEFUVSdzIGFkZHJlc3MgZGF0YWJhc2UgYXMgU3RhdGljIAoqCQkJCWVudHJ5IHdpdGggYSBQb3J0VmVjIG9mIGFsbCB6ZXJvcy4KKgkJCUdUX1NBX0RST1BfVE9fQ1BVIDogCioJCQkJSW5ncmVzc2luZyBmcmFtZXMgd2lsbCBiZSBtYXBwZWQgdG8gdGhlIENQVSBQb3J0IGlmIHRoZWlyIFNBIAoqCQkJCWZpZWxkIGlzIGluIHRoZSBBVFUncyBhZGRyZXNzIGRhdGFiYXNlIGFzIFN0YXRpYyBlbnRyeSB3aXRoIGEgCioJCQkJUG9ydFZlYyBvZiBhbGwgemVyb3MuIE90aGVyd2lzZSwgdGhlIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZCAKKgkJCQlpZiB0aGVpciBTQSBmaWVsZCBpcyBub3QgaW4gdGhlIEFUVSdzIGFkZHJlc3MgZGF0YWJhc2Ugb3IgaWYgdGhpcwoqCQkJCXBvcnQncyBiaXQgaXMgbm90IHNldCBpbiB0aGUgUG9ydFZlYyBiaXRzIGZvciB0aGUgZnJhbWUncyBTQS4KKgkJCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBtb2RlIC0gR1RfU0FfRklMVEVSSU5HIHN0cnVjdHVyZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFNBRmlsdGVyaW5nCigKICAgIElOIEdUX1FEX0RFViAgKmRldiwKICAgIElOIEdUX0xQT1JUICAgcG9ydCwKICAgIElOIEdUX1NBX0ZJTFRFUklORyAgICBtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRTQUZpbHRlcmluZwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIHRoZSBTb3VyY2UgQWRkcmVzcyhTQSkgZml0ZXJpbmcgbWV0aG9kLgoqCQkJR1RfU0FfRklMVEVSSU5HX0RJU0FCTEUgOgoqCQkJCW5vIGZyYW1lIHdpbGwgYmUgZmlsdGVyZWQuCioJCQlHVF9TQV9EUk9QX09OX0xPQ0sgOgoqCQkJCWRpc2NhcmQgaWYgU0EgZmllbGQgaXMgbm90IGluIHRoZSBBVFUncyBhZGRyZXNzIGRhdGFiYXNlLgoqCQkJR1RfU0FfRFJPUF9PTl9VTkxPQyA6IAoqCQkJCWRpc2NhcmQgaWYgU0EgZmllbGQgaXMgaW4gdGhlIEFUVSdzIGFkZHJlc3MgZGF0YWJhc2UgYXMgU3RhdGljIAoqCQkJCWVudHJ5IHdpdGggYSBQb3J0VmVjIG9mIGFsbCB6ZXJvcy4KKgkJCUdUX1NBX0RST1BfVE9fQ1BVIDogCioJCQkJSW5ncmVzc2luZyBmcmFtZXMgd2lsbCBiZSBtYXBwZWQgdG8gdGhlIENQVSBQb3J0IGlmIHRoZWlyIFNBIAoqCQkJCWZpZWxkIGlzIGluIHRoZSBBVFUncyBhZGRyZXNzIGRhdGFiYXNlIGFzIFN0YXRpYyBlbnRyeSB3aXRoIGEgCioJCQkJUG9ydFZlYyBvZiBhbGwgemVyb3MuIE90aGVyd2lzZSwgdGhlIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZCAKKgkJCQlpZiB0aGVpciBTQSBmaWVsZCBpcyBub3QgaW4gdGhlIEFUVSdzIGFkZHJlc3MgZGF0YWJhc2Ugb3IgaWYgdGhpcwoqCQkJCXBvcnQncyBiaXQgaXMgbm90IHNldCBpbiB0aGUgUG9ydFZlYyBiaXRzIGZvciB0aGUgZnJhbWUncyBTQS4KKgkJCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIEdUX1NBX0ZJTFRFUklORyBzdHJ1Y3R1cmUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRTQUZpbHRlcmluZwooCiAgICBJTiAgR1RfUURfREVWICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgcG9ydCwKICAgIE9VVCBHVF9TQV9GSUxURVJJTkcgICAgKm1vZGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRBUlB0b0NQVQoqCiogREVTQ1JJUFRJT046CioJCVdoZW4gQVJQdG9DUFUgaXMgc2V0IHRvIEdUX1RSVUUsIEFSUCBmcmFtZXMgYXJlIG1hcHBlZCB0byB0aGUgQ1BVIHBvcnQuCioJCQoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgbW9kZSAtIEdUX1RSVUUsIHRvIG1hcCBBUlAgZnJhbWVzIHRvIENQVSBQb3J0LAoqCQkJICAgR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRBUlB0b0NQVQooCiAgICBJTiBHVF9RRF9ERVYgICpkZXYsCiAgICBJTiBHVF9MUE9SVCAgIHBvcnQsCiAgICBJTiBHVF9CT09MICAgIG1vZGUKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRBUlB0b0NQVQoqCiogREVTQ1JJUFRJT046CioJCVdoZW4gQVJQdG9DUFUgaXMgc2V0IHRvIEdUX1RSVUUsIEFSUCBmcmFtZXMgYXJlIG1hcHBlZCB0byB0aGUgQ1BVIHBvcnQuCioJCQoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgLSBHVF9UUlVFLCB0byBtYXAgQVJQIGZyYW1lcyB0byBDUFUgUG9ydCwKKgkJCSAgIEdUX0ZBTFNFLCBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0QVJQdG9DUFUKKAogICAgSU4gIEdUX1FEX0RFViAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgIHBvcnQsCiAgICBPVVQgR1RfQk9PTCAgICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0RWdyZXNzRmxvb2QKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXQgRWdyZXNzIEZsb29kaW5nIE1vZGUuCioJCUZyYW1lcyB3aXRoIHVua25vd24gREEgKERlc3RpbmF0aW9uIEFkZHJlc3MgdGhhdCBpcyBub3QgaW4gQVRVIGRhdGFiYXNlKQoqCQlnZW5lcmFsbHkgZmxvb2Qgb3V0IGFsbCB0aGUgcG9ydHMuIFRoaXMgbW9kZSBjYW4gYmUgdXNlZCB0byBwcmV2ZW50CioJCXRob3NlIGZyYW1lcyBmcm9tIGVncmVzc2luZyB0aGlzIHBvcnQgYXMgZm9sbG93czoKKgkJCUdUX0JMT0NLX0VHUkVTU19VTktOT1dOCioJCQkJZG8gbm90IGVncmVzcyBmcmFtZSB3aXRoIHVua25vd24gREEgKGJvdGggdW5pY2FzdCBhbmQgbXVsdGljYXN0KQoqCQkJR1RfQkxPQ0tfRUdSRVNTX1VOS05PV05fTVVMVElDQVNUCioJCQkJZG8gbm90IGVncmVzcyBmcmFtZSB3aXRoIHVua25vd24gbXVsdGljYXN0IERBCioJCQlHVF9CTE9DS19FR1JFU1NfVU5LTk9XTl9VTklDQVNUCioJCQkJZG8gbm90IGVncmVzcyBmcmFtZSB3aXRoIHVua25vd24gdW5pY2FzdCBEQQoqCQkJR1RfQkxPQ0tfRUdSRVNTX05PTkUKKgkJCQllZ3Jlc3MgYWxsIGZyYW1lcyB3aXRoIHVua25vd24gREEKKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgbW9kZSAtIEdUX0VHUkVTU19GTE9PRCBzdHJ1Y3R1cmUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldEVncmVzc0Zsb29kCigKICAgIElOICBHVF9RRF9ERVYgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgSU4gIEdUX0VHUkVTU19GTE9PRCAgICAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEVncmVzc0Zsb29kCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBFZ3Jlc3MgRmxvb2RpbmcgTW9kZS4KKgkJRnJhbWVzIHdpdGggdW5rbm93biBEQSAoRGVzdGluYXRpb24gQWRkcmVzcyB0aGF0IGlzIG5vdCBpbiBBVFUgZGF0YWJhc2UpCioJCWdlbmVyYWxseSBmbG9vZCBvdXQgYWxsIHRoZSBwb3J0cy4gVGhpcyBtb2RlIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQKKgkJdGhvc2UgZnJhbWVzIGZyb20gZWdyZXNzaW5nIHRoaXMgcG9ydCBhcyBmb2xsb3dzOgoqCQkJR1RfQkxPQ0tfRUdSRVNTX1VOS05PV04KKgkJCQlkbyBub3QgZWdyZXNzIGZyYW1lIHdpdGggdW5rbm93biBEQSAoYm90aCB1bmljYXN0IGFuZCBtdWx0aWNhc3QpCioJCQlHVF9CTE9DS19FR1JFU1NfVU5LTk9XTl9NVUxUSUNBU1QKKgkJCQlkbyBub3QgZWdyZXNzIGZyYW1lIHdpdGggdW5rbm93biBtdWx0aWNhc3QgREEKKgkJCUdUX0JMT0NLX0VHUkVTU19VTktOT1dOX1VOSUNBU1QKKgkJCQlkbyBub3QgZWdyZXNzIGZyYW1lIHdpdGggdW5rbm93biB1bmljYXN0IERBCioJCQlHVF9CTE9DS19FR1JFU1NfTk9ORQoqCQkJCWVncmVzcyBhbGwgZnJhbWVzIHdpdGggdW5rbm93biBEQQoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgbW9kZSAtIEdUX0VHUkVTU19GTE9PRCBzdHJ1Y3R1cmUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEVncmVzc0Zsb29kCigKICAgIElOICBHVF9RRF9ERVYgICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICBwb3J0LAogICAgT1VUIEdUX0VHUkVTU19GTE9PRCAgICAgICptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQb3J0U2NoZWQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBQb3J0IFNjaGVkdWxpbmcgTW9kZS4KKgkJV2hlbiB1c2VQb3J0U2NoZWQgaXMgZW5hYmxpZWQsIHRoaXMgbW9kZSBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgUXVldWUKKgkJY29udHJvbGxlcidzIHNjaGVkdWxpbmcgb24gdGhlIHBvcnQgYXMgZm9sbG93czoKKgkJCUdUX1BPUlRfU0NIRURfV0VJR0hURURfUlJCIC0gdXNlIDgsNCwyLDEgd2VpZ2h0ZWQgZmFpciBzY2hlZHVsaW5nCioJCQlHVF9QT1JUX1NDSEVEX1NUUklDVF9QUkkgLSB1c2UgYSBzdHJpY3QgcHJpb3JpdHkgc2NoZW1lCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCQltb2RlIC0gR1RfUE9SVF9TQ0hFRF9NT0RFIGVudW0gdHlwZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRQb3J0U2NoZWQKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglJTiAgR1RfUE9SVF9TQ0hFRF9NT0RFCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQb3J0U2NoZWQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBQb3J0IFNjaGVkdWxpbmcgTW9kZS4KKgkJV2hlbiB1c2VQb3J0U2NoZWQgaXMgZW5hYmxpZWQsIHRoaXMgbW9kZSBpcyB1c2VkIHRvIHNlbGVjdCB0aGUgUXVldWUKKgkJY29udHJvbGxlcidzIHNjaGVkdWxpbmcgb24gdGhlIHBvcnQgYXMgZm9sbG93czoKKgkJCUdUX1BPUlRfU0NIRURfV0VJR0hURURfUlJCIC0gdXNlIDgsNCwyLDEgd2VpZ2h0ZWQgZmFpciBzY2hlZHVsaW5nCioJCQlHVF9QT1JUX1NDSEVEX1NUUklDVF9QUkkgLSB1c2UgYSBzdHJpY3QgcHJpb3JpdHkgc2NoZW1lCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1BPUlRfU0NIRURfTU9ERSBlbnVtIHR5cGUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQb3J0U2NoZWQKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfUE9SVF9TQ0hFRF9NT0RFCQkqbW9kZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFByb3ZpZGVyVGFnCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldHMgUHJvdmlkZXIgVGFnIHdoaWNoIGluZGljYXRlcyB0aGUgcHJvdmlkZXIgdGFnIChFdGhlciAKKgkJVHlwZSkgdmFsdWUgdGhhdCBuZWVkcyB0byBiZSBtYXRjaGVkIHRvIGluIGluZ3Jlc3MgdG8gZGV0ZXJtaW5lIGlmIGEKKgkJZnJhbWUgaXMgUHJvdmlkZXIgdGFnZ2VkIG9yIG5vdC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCXRhZyAgLSBQcm92aWRlciBUYWcgKEV0aGVyIFR5cGUpCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFByb3ZpZGVyVGFnCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX1UxNgkJdGFnCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQcm92aWRlclRhZwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIFByb3ZpZGVyIFRhZyB3aGljaCBpbmRpY2F0ZXMgdGhlIHByb3ZpZGVyIHRhZyAoRXRoZXIgCioJCVR5cGUpIHZhbHVlIHRoYXQgbmVlZHMgdG8gYmUgbWF0Y2hlZCB0byBpbiBpbmdyZXNzIHRvIGRldGVybWluZSBpZiBhCioJCWZyYW1lIGlzIFByb3ZpZGVyIHRhZ2dlZCBvciBub3QuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKgkJdGFnICAtIFByb3ZpZGVyIFRhZyAoRXRoZXIgVHlwZSkKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQcm92aWRlclRhZwooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9VMTYJCSp0YWcKKTsKCgoKLyogZ3RQb3J0UmF0ZUN0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNTZXRWaWROcmxFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGVuYWJsZXMvZGlzYWJsZXMgVklEIE5vbmUgUmF0ZSBMaW1pdCAoTlJMKS4KKgkJV2hlbiBWSUQgTlJMIGlzIGVuYWJsZWQgYW5kIHRoZSBkZXRlcm1pbmVkIFZJRCBvZiBhIGZyYW1lIHJlc3VsdHMgaW4gYSBWSUQKKgkJd2hvc2UgVklETm9uUmF0ZUxpbWl0IGluIHRoZSBWVFUgVGFibGUgaXMgc2V0IHRvIEdUX1RVUkUsIHRoZW4gdGhlIGZyYW1lCioJCXdpbGwgbm90IGJlIGluZ3Jlc3Mgbm9yIGVncmVzcyByYXRlIGxpbWl0ZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIHRvIGVuYWJsZSBWSUQgTm9uZSBSYXRlIExpbWl0CioJCQkgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAgICAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNTZXRWaWROcmxFbgooCiAgICBJTiAgR1RfUURfREVWCSpkZXYsCiAgICBJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY0dldFZpZE5ybEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBWSUQgTm9uZSBSYXRlIExpbWl0IChOUkwpIG1vZGUuCioJCVdoZW4gVklEIE5STCBpcyBlbmFibGVkIGFuZCB0aGUgZGV0ZXJtaW5lZCBWSUQgb2YgYSBmcmFtZSByZXN1bHRzIGluIGEgVklECioJCXdob3NlIFZJRE5vblJhdGVMaW1pdCBpbiB0aGUgVlRVIFRhYmxlIGlzIHNldCB0byBHVF9UVVJFLCB0aGVuIHRoZSBmcmFtZQoqCQl3aWxsIG5vdCBiZSBpbmdyZXNzIG5vciBlZ3Jlc3MgcmF0ZSBsaW1pdGVkLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIFZJRCBOb25lIFJhdGUgTGltaXQKKgkJCSAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEICAgIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY0dldFZpZE5ybEVuCigKICAgIElOICBHVF9RRF9ERVYJKmRldiwKICAgIElOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY1NldFNhTnJsRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzL2Rpc2FibGVzIFNBIE5vbmUgUmF0ZSBMaW1pdCAoTlJMKS4KKgkJV2hlbiBTQSBOUkwgaXMgZW5hYmxlZCBhbmQgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIGEgZnJhbWUgcmVzdWx0cyBpbiBhIEFUVQoqCQloaXQgd2hlcmUgdGhlIFNBJ3MgTUFDIGFkZHJlc3MgcmV0dXJucyBhbiBFbnRyeVN0YXRlIHRoYXQgaW5kaWNhdGVzIE5vbgoqCQlSYXRlIExpbWl0ZWQsIHRoZW4gdGhlIGZyYW1lIHdpbGwgbm90IGJlIGluZ3Jlc3Mgbm9yIGVncmVzcyByYXRlIGxpbWl0ZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIHRvIGVuYWJsZSBTQSBOb25lIFJhdGUgTGltaXQKKgkJCSAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEICAgIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY1NldFNhTnJsRW4KKAogICAgSU4gIEdUX1FEX0RFVgkqZGV2LAogICAgSU4gIEdUX0xQT1JUCXBvcnQsCglJTiAgR1RfQk9PTAkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNHZXRTYU5ybEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBTQSBOb25lIFJhdGUgTGltaXQgKE5STCkgbW9kZS4KKgkJV2hlbiBTQSBOUkwgaXMgZW5hYmxlZCBhbmQgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIGEgZnJhbWUgcmVzdWx0cyBpbiBhIEFUVQoqCQloaXQgd2hlcmUgdGhlIFNBJ3MgTUFDIGFkZHJlc3MgcmV0dXJucyBhbiBFbnRyeVN0YXRlIHRoYXQgaW5kaWNhdGVzIE5vbgoqCQlSYXRlIExpbWl0ZWQsIHRoZW4gdGhlIGZyYW1lIHdpbGwgbm90IGJlIGluZ3Jlc3Mgbm9yIGVncmVzcyByYXRlIGxpbWl0ZWQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfVFJVRSB0byBlbmFibGUgU0EgTm9uZSBSYXRlIExpbWl0CioJCQkgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAgICAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNHZXRTYU5ybEVuCigKICAgIElOICBHVF9RRF9ERVYJKmRldiwKICAgIElOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY1NldERhTnJsRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBlbmFibGVzL2Rpc2FibGVzIERBIE5vbmUgUmF0ZSBMaW1pdCAoTlJMKS4KKgkJV2hlbiBEQSBOUkwgaXMgZW5hYmxlZCBhbmQgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgb2YgYSBmcmFtZSByZXN1bHRzIGluIAoqCQlhIEFUVSBoaXQgd2hlcmUgdGhlIERBJ3MgTUFDIGFkZHJlc3MgcmV0dXJucyBhbiBFbnRyeVN0YXRlIHRoYXQgaW5kaWNhdGVzIAoqCQlOb24gUmF0ZSBMaW1pdGVkLCB0aGVuIHRoZSBmcmFtZSB3aWxsIG5vdCBiZSBpbmdyZXNzIG5vciBlZ3Jlc3MgcmF0ZSAKKgkJbGltaXRlZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIERBIE5vbmUgUmF0ZSBMaW1pdAoqCQkJICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgICAgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjU2V0RGFOcmxFbgooCiAgICBJTiAgR1RfUURfREVWCSpkZXYsCiAgICBJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY0dldERhTnJsRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIFNBIE5vbmUgUmF0ZSBMaW1pdCAoTlJMKSBtb2RlLgoqCQlXaGVuIERBIE5STCBpcyBlbmFibGVkIGFuZCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBvZiBhIGZyYW1lIHJlc3VsdHMgaW4gCioJCWEgQVRVIGhpdCB3aGVyZSB0aGUgREEncyBNQUMgYWRkcmVzcyByZXR1cm5zIGFuIEVudHJ5U3RhdGUgdGhhdCBpbmRpY2F0ZXMgCioJCU5vbiBSYXRlIExpbWl0ZWQsIHRoZW4gdGhlIGZyYW1lIHdpbGwgbm90IGJlIGluZ3Jlc3Mgbm9yIGVncmVzcyByYXRlIAoqCQlsaW1pdGVkLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIERBIE5vbmUgUmF0ZSBMaW1pdAoqCQkJICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgICAgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjR2V0RGFOcmxFbgooCiAgICBJTiAgR1RfUURfREVWCSpkZXYsCiAgICBJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MCQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNTZXRFTGltaXRNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBFZ3Jlc3MgUmF0ZSBMaW1pdCBjb3VudGluZyBtb2RlLgoqCQlUaGUgc3VwcG9ydGVkIG1vZGVzIGFyZSBhcyBmb2xsb3dzOgoqCQkJR1RfUElSTF9FTElNSVRfRlJBTUUgLQoqCQkJCUNvdW50IHRoZSBudW1iZXIgb2YgZnJhbWVzCioJCQlHVF9QSVJMX0VMSU1JVF9MQVlFUjEgLQoqCQkJCUNvdW50IGFsbCBMYXllciAxIGJ5dGVzOiAKKgkJCQlQcmVhbWJsZSAoOGJ5dGVzKSArIEZyYW1lJ3MgREEgdG8gQ1JDICsgSUZHICgxMmJ5dGVzKQoqCQkJR1RfUElSTF9FTElNSVRfTEFZRVIyIC0KKgkJCQlDb3VudCBhbGwgTGF5ZXIgMiBieXRlczogRnJhbWUncyBEQSB0byBDUkMKKgkJCUdUX1BJUkxfRUxJTUlUX0xBWUVSMSAtCioJCQkJQ291bnQgYWxsIExheWVyIDEgYnl0ZXM6IAoqCQkJCUZyYW1lJ3MgREEgdG8gQ1JDIC0gMTggLSA0IChpZiBmcmFtZSBpcyB0YWdnZWQpCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJbW9kZSAtIEdUX1BJUkxfRUxJTUlUX01PREUgZW51bSB0eXBlCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgICAgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgkJR1RfUElSTF9FTElNSVRfRlJBTUUgbW9kZSBpcyBzdXBwb3J0ZWQgYnkgb25seSBhIGZldyBkZXZpY2VzLgoqCQlQbGVhc2UgcmVmZXIgdG8gdGhlIGRldmljZSBkYXRhc2hlZXQgZm9yIGRldGFpbHMuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdyY1NldEVMaW1pdE1vZGUKKAogICAgSU4gIEdUX1FEX0RFVgkqZGV2LAogICAgSU4gIEdUX0xQT1JUCXBvcnQsCglJTiAgR1RfUElSTF9FTElNSVRfTU9ERQkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNHZXRFTGltaXRNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBFZ3Jlc3MgUmF0ZSBMaW1pdCBjb3VudGluZyBtb2RlLgoqCQlUaGUgc3VwcG9ydGVkIG1vZGVzIGFyZSBhcyBmb2xsb3dzOgoqCQkJR1RfUElSTF9FTElNSVRfRlJBTUUgLQoqCQkJCUNvdW50IHRoZSBudW1iZXIgb2YgZnJhbWVzCioJCQlHVF9QSVJMX0VMSU1JVF9MQVlFUjEgLQoqCQkJCUNvdW50IGFsbCBMYXllciAxIGJ5dGVzOiAKKgkJCQlQcmVhbWJsZSAoOGJ5dGVzKSArIEZyYW1lJ3MgREEgdG8gQ1JDICsgSUZHICgxMmJ5dGVzKQoqCQkJR1RfUElSTF9FTElNSVRfTEFZRVIyIC0KKgkJCQlDb3VudCBhbGwgTGF5ZXIgMiBieXRlczogRnJhbWUncyBEQSB0byBDUkMKKgkJCUdUX1BJUkxfRUxJTUlUX0xBWUVSMSAtCioJCQkJQ291bnQgYWxsIExheWVyIDEgYnl0ZXM6IAoqCQkJCUZyYW1lJ3MgREEgdG8gQ1JDIC0gMTggLSA0IChpZiBmcmFtZSBpcyB0YWdnZWQpCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9QSVJMX0VMSU1JVF9NT0RFIGVudW0gdHlwZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEICAgIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioJCUdUX1BJUkxfRUxJTUlUX0ZSQU1FIG1vZGUgaXMgc3VwcG9ydGVkIGJ5IG9ubHkgYSBmZXcgZGV2aWNlcy4KKgkJUGxlYXNlIHJlZmVyIHRvIHRoZSBkZXZpY2UgZGF0YXNoZWV0IGZvciBkZXRhaWxzLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNHZXRFTGltaXRNb2RlCigKICAgIElOICBHVF9RRF9ERVYJKmRldiwKICAgIElOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX1BJUkxfRUxJTUlUX01PREUJCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdyY1NldFJzdmROcmxFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgUmVzZXJ2ZWQgTm9uIFJhdGUgTGltaXQuCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIGZyYW1lcyB0aGF0IG1hdGNoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIAoqCQlSc3ZkMkNwdSBiaXQgYmVsb3cgd2lsbCBhbHNvIGJlIGNvbnNpZGVyZWQgdG8gYmUgaW5ncmVzcyBhbmQgZWdyZXNzIG5vbiAKKgkJcmF0ZSBsaW1pdGVkLgoqCiogSU5QVVRTOgoqICAgICAgIGVuIC0gR1RfVFJVRSB0byBlbmFibGUgUmVzZXJ2ZWQgTm9uIFJhdGUgTGltaXQsCioJCQkgR1RfRkFMU0UgdG8gZGlzYWJsZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNTZXRSc3ZkTnJsRW4KKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0JPT0wgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncmNHZXRSc3ZkTnJsRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIFJlc2VydmVkIE5vbiBSYXRlIExpbWl0LgoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBmcmFtZXMgdGhhdCBtYXRjaCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSAKKgkJUnN2ZDJDcHUgYml0IGJlbG93IHdpbGwgYWxzbyBiZSBjb25zaWRlcmVkIHRvIGJlIGluZ3Jlc3MgYW5kIGVncmVzcyBub24gCioJCXJhdGUgbGltaXRlZC4KKgoqIElOUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgdG8gZW5hYmxlIFJlc2VydmVkIE5vbiBSYXRlIExpbWl0LAoqCQkJIEdUX0ZBTFNFIHRvIGRpc2FibGUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3JjR2V0UnN2ZE5ybEVuCigKICAgIElOICBHVF9RRF9ERVYgKmRldiwKICAgIE9VVCBHVF9CT09MICAgKmVuCik7CgoKLyogZ3RQb3J0Um1vbi5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdGF0c0dldFJlYWx0aW1lUG9ydENvdW50ZXIKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBhIHNwZWNpZmljIHJlYWx0aW1lIGNvdW50ZXIgb2YgdGhlIGdpdmVuIHBvcnQKKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQljb3VudGVyIC0gdGhlIGNvdW50ZXIgd2hpY2ggd2lsbCBiZSByZWFkCioKKiBPVVRQVVRTOgoqCQlzdGF0c0RhdGEgLSBwb2ludHMgdG8gMzJiaXQgZGF0YSBzdG9yYWdlIGZvciB0aGUgTUlCIGNvdW50ZXIKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdGF0c0dldFJlYWx0aW1lUG9ydENvdW50ZXIKKAoJSU4gIEdUX1FEX0RFVgkJKmRldiwKCUlOICBHVF9MUE9SVAkJcG9ydCwKCUlOICBHVF9TVEFUU19DT1VOVEVSUzMJY291bnRlciwKCU9VVCBHVF9VMzIJCQkqc3RhdHNEYXRhCik7CgoKLyogZ3RRb3NNYXAuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zU2V0VklERlByaU92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldHMgVklEIEZyYW1lIFByaW9yaXR5IE92ZXJyaWRlLiBXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLAoqCQlWSUQgRnJhbWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiB0aGlzIHBvcnQuCioJCVZJRCBGcmFtZSBwcmlvcml0eSBvdmVycmlkZSBvY2N1cnMgd2hlbiB0aGUgZGV0ZXJtaW5lZCBWSUQgb2YgYSBmcmFtZSAKKgkJcmVzdWx0cyBpbiBhIFZUVSBlbnRyeSB3aG9zZSB1c2VWSURGUHJpIG92ZXJyaWRlIGZpZWxkIGlzIHNldCB0byBHVF9UUlVFLgoqCQlXaGVuIHRoaXMgb2NjdXJzIHRoZSBWSURGUHJpIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIFZJRCAoaW4gdGhlIAoqCQlWVFUgVGFibGUpIGlzIHVzZWQgdG8gb3ZlcndyaXRlIHRoZSBmcmFtZSdzIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBmcmFtZSAKKgkJcHJpb3JpdHkuIElmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQgdGhlIHByaW9yaXR5IGluIHRoZSBmcmFtZSB3aWxsIGJlCioJCXRoaXMgbmV3IFZJREZQcmkgdmFsdWUuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYWZmZWN0IHRoZSBlZ3Jlc3MgcXVldWUKKgkJcHJpb3JpdHkgKFFQcmkpIHRoZSBmcmFtZSBpcyBzd2l0Y2hlZCBpbnRvLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIGZvciBWSUQgRnJhbWUgUHJpb3JpdHkgT3ZlcnJpZGUsCioJCQkgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zU2V0VklERlByaU92ZXJyaWRlCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQJCXBvcnQsCglJTiBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NHZXRWSURGUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBWSUQgRnJhbWUgUHJpb3JpdHkgT3ZlcnJpZGUuIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsCioJCVZJRCBGcmFtZSBwcmlvcml0eSBvdmVycmlkZXMgY2FuIG9jY3VyIG9uIHRoaXMgcG9ydC4KKgkJVklEIEZyYW1lIHByaW9yaXR5IG92ZXJyaWRlIG9jY3VycyB3aGVuIHRoZSBkZXRlcm1pbmVkIFZJRCBvZiBhIGZyYW1lIAoqCQlyZXN1bHRzIGluIGEgVlRVIGVudHJ5IHdob3NlIHVzZVZJREZQcmkgb3ZlcnJpZGUgZmllbGQgaXMgc2V0IHRvIEdUX1RSVUUuCioJCVdoZW4gdGhpcyBvY2N1cnMgdGhlIFZJREZQcmkgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgVklEIChpbiB0aGUgCioJCVZUVSBUYWJsZSkgaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIGZyYW1lIAoqCQlwcmlvcml0eS4gSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgYmUKKgkJdGhpcyBuZXcgVklERlByaSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIGVncmVzcyBxdWV1ZQoqCQlwcmlvcml0eSAoUVByaSkgdGhlIGZyYW1lIGlzIHN3aXRjaGVkIGludG8uCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9UUlVFIGZvciBWSUQgRnJhbWUgUHJpb3JpdHkgT3ZlcnJpZGUsCioJCQkgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NHZXRWSURGUHJpT3ZlcnJpZGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTAkJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc1NldFNBRlByaU92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldHMgU291cmNlIEFkZHJlc3MoU0EpIEZyYW1lIFByaW9yaXR5IE92ZXJyaWRlLiAKKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgU0EgRnJhbWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiAKKgkJdGhpcyBwb3J0LgoqCQlTQSBBVFUgRnJhbWUgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzIHdoZW4gdGhlIGRldGVybWluZWQgc291cmNlIGFkZHJlc3MKKgkJb2YgYSBmcmFtZSByZXN1bHRzIGluIGFuIEFUVSBoaXQgd2hlcmUgdGhlIFNBJ3MgTUFDIGFkZHJlc3MgZW50cnkgY29udGFpbnMgCioJCXRoZSB1c2VBVFVGUHJpIGZpZWxkIHNldCB0byBHVF9UUlVFLgoqCQlXaGVuIHRoaXMgb2NjdXJzIHRoZSBBVFVGUHJpIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIFNBIChpbiB0aGUgCioJCUFUVSBUYWJsZSkgaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIGZyYW1lIAoqCQlwcmlvcml0eS4gSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgYmUKKgkJdGhpcyBuZXcgQVRVRlByaSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIGVncmVzcyBxdWV1ZQoqCQlwcmlvcml0eSAoUVByaSkgdGhlIGZyYW1lIGlzIHN3aXRjaGVkIGludG8uCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIEdUX1RSVUUgZm9yIFNBIEZyYW1lIFByaW9yaXR5IE92ZXJyaWRlLAoqCQkJICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc1NldFNBRlByaU92ZXJyaWRlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc0dldFNBRlByaU92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgU291cmNlIEFkZHJlc3MoU0EpIEZyYW1lIFByaW9yaXR5IE92ZXJyaWRlLiAKKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgU0EgRnJhbWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiAKKgkJdGhpcyBwb3J0LgoqCQlTQSBBVFUgRnJhbWUgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzIHdoZW4gdGhlIGRldGVybWluZWQgc291cmNlIGFkZHJlc3MKKgkJb2YgYSBmcmFtZSByZXN1bHRzIGluIGFuIEFUVSBoaXQgd2hlcmUgdGhlIFNBJ3MgTUFDIGFkZHJlc3MgZW50cnkgY29udGFpbnMgCioJCXRoZSB1c2VBVFVGUHJpIGZpZWxkIHNldCB0byBHVF9UUlVFLgoqCQlXaGVuIHRoaXMgb2NjdXJzIHRoZSBBVFVGUHJpIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIFNBIChpbiB0aGUgCioJCUFUVSBUYWJsZSkgaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIGZyYW1lIAoqCQlwcmlvcml0eS4gSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgYmUKKgkJdGhpcyBuZXcgQVRVRlByaSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIGVncmVzcyBxdWV1ZQoqCQlwcmlvcml0eSAoUVByaSkgdGhlIGZyYW1lIGlzIHN3aXRjaGVkIGludG8uCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9UUlVFIGZvciBTQSBGcmFtZSBQcmlvcml0eSBPdmVycmlkZSwKKgkJCSAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldFNBRlByaU92ZXJyaWRlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NTZXREQUZQcmlPdmVycmlkZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIERlc3RpbmF0aW9uIEFkZHJlc3MoREEpIEZyYW1lIFByaW9yaXR5IE92ZXJyaWRlLiAKKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgREEgRnJhbWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiAKKgkJdGhpcyBwb3J0LgoqCQlEQSBBVFUgRnJhbWUgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzIHdoZW4gdGhlIGRldGVybWluZWQgZGVzdGluYXRpb24gYWRkcmVzcwoqCQlvZiBhIGZyYW1lIHJlc3VsdHMgaW4gYW4gQVRVIGhpdCB3aGVyZSB0aGUgREEncyBNQUMgYWRkcmVzcyBlbnRyeSBjb250YWlucyAKKgkJdGhlIHVzZUFUVUZQcmkgZmllbGQgc2V0IHRvIEdUX1RSVUUuCioJCVdoZW4gdGhpcyBvY2N1cnMgdGhlIEFUVUZQcmkgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgREEgKGluIHRoZSAKKgkJQVRVIFRhYmxlKSBpcyB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgZnJhbWUncyBwcmV2aW91c2x5IGRldGVybWluZWQgZnJhbWUgCioJCXByaW9yaXR5LiBJZiB0aGUgZnJhbWUgZWdyZXNzZXMgdGFnZ2VkIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBiZQoqCQl0aGlzIG5ldyBBVFVGUHJpIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgZWdyZXNzIHF1ZXVlCioJCXByaW9yaXR5IChRUHJpKSB0aGUgZnJhbWUgaXMgc3dpdGNoZWQgaW50by4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSBmb3IgREEgRnJhbWUgUHJpb3JpdHkgT3ZlcnJpZGUsCioJCQkgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zU2V0REFGUHJpT3ZlcnJpZGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglJTiAgR1RfQk9PTAkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zR2V0REFGUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBEZXN0aW5hdGlvbiBBZGRyZXNzKERBKSBGcmFtZSBQcmlvcml0eSBPdmVycmlkZS4gCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIERBIEZyYW1lIHByaW9yaXR5IG92ZXJyaWRlcyBjYW4gb2NjdXIgb24gCioJCXRoaXMgcG9ydC4KKgkJREEgQVRVIEZyYW1lIHByaW9yaXR5IG92ZXJyaWRlIG9jY3VycyB3aGVuIHRoZSBkZXRlcm1pbmVkIGRlc3RpbmF0aW9uIGFkZHJlc3MKKgkJb2YgYSBmcmFtZSByZXN1bHRzIGluIGFuIEFUVSBoaXQgd2hlcmUgdGhlIERBJ3MgTUFDIGFkZHJlc3MgZW50cnkgY29udGFpbnMgCioJCXRoZSB1c2VBVFVGUHJpIGZpZWxkIHNldCB0byBHVF9UUlVFLgoqCQlXaGVuIHRoaXMgb2NjdXJzIHRoZSBBVFVGUHJpIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIERBIChpbiB0aGUgCioJCUFUVSBUYWJsZSkgaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIGZyYW1lIAoqCQlwcmlvcml0eS4gSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgYmUKKgkJdGhpcyBuZXcgQVRVRlByaSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIGVncmVzcyBxdWV1ZQoqCQlwcmlvcml0eSAoUVByaSkgdGhlIGZyYW1lIGlzIHN3aXRjaGVkIGludG8uCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9UUlVFIGZvciBEQSBGcmFtZSBQcmlvcml0eSBPdmVycmlkZSwKKgkJCSAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldERBRlByaU92ZXJyaWRlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NTZXRWSURRUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBWSUQgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUuIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsCioJCVZJRCBRdWV1ZSBwcmlvcml0eSBvdmVycmlkZXMgY2FuIG9jY3VyIG9uIHRoaXMgcG9ydC4KKgkJVklEIFF1ZXVlIHByaW9yaXR5IG92ZXJyaWRlIG9jY3VycyB3aGVuIHRoZSBkZXRlcm1pbmVkIFZJRCBvZiBhIGZyYW1lIAoqCQlyZXN1bHRzIGluIGEgVlRVIGVudHJ5IHdob3NlIHVzZVZJRFFQcmkgb3ZlcnJpZGUgZmllbGQgaXMgc2V0IHRvIEdUX1RSVUUuCioJCVdoZW4gdGhpcyBvY2N1cnMgdGhlIFZJRFFQcmkgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgVklEIChpbiB0aGUgCioJCVZUVSBUYWJsZSkgaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIHF1ZXVlIAoqCQlwcmlvcml0eS4gSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgbm90CioJCWJlIG1vZGlmaWVkIGJ5IHRoaXMgbmV3IFZJRFFQcmkgdmFsdWUuIFRoaXMgZnVuY3Rpb24gYWZmZWN0cyB0aGUgZWdyZXNzCioJCXF1ZXVlIHByaW9yaXR5IChRUHJpKSB0aGUgZnJhbWUgaXMgc3dpdGNoZWQgaW50by4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSBmb3IgVklEIFF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlLAoqCQkJICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc1NldFZJRFFQcmlPdmVycmlkZQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUCQlwb3J0LAoJSU4gR1RfQk9PTAkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zR2V0VklEUVByaU92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgVklEIFF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlLiBXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLAoqCQlWSUQgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiB0aGlzIHBvcnQuCioJCVZJRCBRdWV1ZSBwcmlvcml0eSBvdmVycmlkZSBvY2N1cnMgd2hlbiB0aGUgZGV0ZXJtaW5lZCBWSUQgb2YgYSBmcmFtZSAKKgkJcmVzdWx0cyBpbiBhIFZUVSBlbnRyeSB3aG9zZSB1c2VWSURRUHJpIG92ZXJyaWRlIGZpZWxkIGlzIHNldCB0byBHVF9UUlVFLgoqCQlXaGVuIHRoaXMgb2NjdXJzIHRoZSBWSURRUHJpIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIFZJRCAoaW4gdGhlIAoqCQlWVFUgVGFibGUpIGlzIHVzZWQgdG8gb3ZlcndyaXRlIHRoZSBmcmFtZSdzIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCBxdWV1ZSAKKgkJcHJpb3JpdHkuIElmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQgdGhlIHByaW9yaXR5IGluIHRoZSBmcmFtZSB3aWxsIG5vdAoqCQliZSBtb2RpZmllZCBieSB0aGlzIG5ldyBWSURRUHJpIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIGFmZmVjdHMgdGhlIGVncmVzcwoqCQlxdWV1ZSBwcmlvcml0eSAoUVByaSkgdGhlIGZyYW1lIGlzIHN3aXRjaGVkIGludG8uCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9UUlVFIGZvciBWSUQgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUsCioJCQkgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NHZXRWSURRUHJpT3ZlcnJpZGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTAkJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc1NldFNBUVByaU92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldHMgU291cmNlIEFkZHJlc3MoU0EpIFF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlLiAKKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgU0EgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiAKKgkJdGhpcyBwb3J0LgoqCQlTQSBBVFUgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzIHdoZW4gdGhlIGRldGVybWluZWQgc291cmNlIGFkZHJlc3MKKgkJb2YgYSBmcmFtZSByZXN1bHRzIGluIGFuIEFUVSBoaXQgd2hlcmUgdGhlIFNBJ3MgTUFDIGFkZHJlc3MgZW50cnkgY29udGFpbnMgCioJCXRoZSB1c2VBVFVRUHJpIGZpZWxkIHNldCB0byBHVF9UUlVFLgoqCQlXaGVuIHRoaXMgb2NjdXJzIHRoZSBBVFVRUHJpIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIFNBIChpbiB0aGUgCioJCUFUVSBUYWJsZSkgaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIHF1ZXVlIAoqCQlwcmlvcml0eS4gSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgbm90CioJCWJlIG1vZGlmaWVkIGJ5IHRoaXMgbmV3IEFUVVFQcmkgdmFsdWUuIFRoaXMgZnVuY3Rpb24gYWZmZWN0cyB0aGUgZWdyZXNzCioJCXF1ZXVlIHByaW9yaXR5IChRUHJpKSB0aGUgZnJhbWUgaXMgc3dpdGNoZWQgaW50by4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSBmb3IgU0EgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUsCioJCQkgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zU2V0U0FRUHJpT3ZlcnJpZGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglJTiAgR1RfQk9PTAkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zR2V0U0FRUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBTb3VyY2UgQWRkcmVzcyhTQSkgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUuIAoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBTQSBRdWV1ZSBwcmlvcml0eSBvdmVycmlkZXMgY2FuIG9jY3VyIG9uIAoqCQl0aGlzIHBvcnQuCioJCVNBIEFUVSBRdWV1ZSBwcmlvcml0eSBvdmVycmlkZSBvY2N1cnMgd2hlbiB0aGUgZGV0ZXJtaW5lZCBzb3VyY2UgYWRkcmVzcwoqCQlvZiBhIGZyYW1lIHJlc3VsdHMgaW4gYW4gQVRVIGhpdCB3aGVyZSB0aGUgU0EncyBNQUMgYWRkcmVzcyBlbnRyeSBjb250YWlucyAKKgkJdGhlIHVzZUFUVVFQcmkgZmllbGQgc2V0IHRvIEdUX1RSVUUuCioJCVdoZW4gdGhpcyBvY2N1cnMgdGhlIEFUVVFQcmkgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgU0EgKGluIHRoZSAKKgkJQVRVIFRhYmxlKSBpcyB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgZnJhbWUncyBwcmV2aW91c2x5IGRldGVybWluZWQgcXVldWUgCioJCXByaW9yaXR5LiBJZiB0aGUgZnJhbWUgZWdyZXNzZXMgdGFnZ2VkIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBub3QKKgkJYmUgbW9kaWZpZWQgYnkgdGhpcyBuZXcgQVRVUVByaSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBhZmZlY3RzIHRoZSBlZ3Jlc3MKKgkJcXVldWUgcHJpb3JpdHkgKFFQcmkpIHRoZSBmcmFtZSBpcyBzd2l0Y2hlZCBpbnRvLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfVFJVRSBmb3IgU0EgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUsCioJCQkgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NHZXRTQVFQcmlPdmVycmlkZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MCQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zU2V0REFRUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBEZXN0aW5hdGlvbiBBZGRyZXNzKERBKSBRdWV1ZSBQcmlvcml0eSBPdmVycmlkZS4gCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIERBIFF1ZXVlIHByaW9yaXR5IG92ZXJyaWRlcyBjYW4gb2NjdXIgb24gCioJCXRoaXMgcG9ydC4KKgkJREEgQVRVIFF1ZXVlIHByaW9yaXR5IG92ZXJyaWRlIG9jY3VycyB3aGVuIHRoZSBkZXRlcm1pbmVkIGRlc3RpbmF0aW9uIGFkZHJlc3MKKgkJb2YgYSBmcmFtZSByZXN1bHRzIGluIGFuIEFUVSBoaXQgd2hlcmUgdGhlIERBJ3MgTUFDIGFkZHJlc3MgZW50cnkgY29udGFpbnMgCioJCXRoZSB1c2VBVFVRUHJpIGZpZWxkIHNldCB0byBHVF9UUlVFLgoqCQlXaGVuIHRoaXMgb2NjdXJzIHRoZSBBVFVRUHJpIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBmcmFtZSdzIERBIChpbiB0aGUgCioJCUFUVSBUYWJsZSkgaXMgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIHF1ZXVlCioJCXByaW9yaXR5LiBJZiB0aGUgZnJhbWUgZWdyZXNzZXMgdGFnZ2VkIHRoZSBwcmlvcml0eSBpbiB0aGUgZnJhbWUgd2lsbCBub3QKKgkJYmUgbW9kaWZpZWQgYnkgdGhpcyBuZXcgQVRVUVByaSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBhZmZlY3RzIHRoZSBlZ3Jlc3MKKgkJcXVldWUgcHJpb3JpdHkgKFFQcmkpIHRoZSBmcmFtZSBpcyBzd2l0Y2hlZCBpbnRvLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCW1vZGUgLSBHVF9UUlVFIGZvciBEQSBRdWV1ZSBQcmlvcml0eSBPdmVycmlkZSwKKgkJCSAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NTZXREQVFQcmlPdmVycmlkZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NHZXREQVFQcmlPdmVycmlkZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIERlc3RpbmF0aW9uIEFkZHJlc3MoREEpIFF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlLiAKKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgREEgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiAKKgkJdGhpcyBwb3J0LgoqCQlEQSBBVFUgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzIHdoZW4gdGhlIGRldGVybWluZWQgZGVzdGluYXRpb24gYWRkcmVzcwoqCQlvZiBhIGZyYW1lIHJlc3VsdHMgaW4gYW4gQVRVIGhpdCB3aGVyZSB0aGUgREEncyBNQUMgYWRkcmVzcyBlbnRyeSBjb250YWlucyAKKgkJdGhlIHVzZUFUVVFQcmkgZmllbGQgc2V0IHRvIEdUX1RSVUUuCioJCVdoZW4gdGhpcyBvY2N1cnMgdGhlIEFUVVFQcmkgdmFsdWUgYXNzaWduZWQgdG8gdGhlIGZyYW1lJ3MgREEgKGluIHRoZSAKKgkJQVRVIFRhYmxlKSBpcyB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgZnJhbWUncyBwcmV2aW91c2x5IGRldGVybWluZWQgcXVldWUKKgkJcHJpb3JpdHkuIElmIHRoZSBmcmFtZSBlZ3Jlc3NlcyB0YWdnZWQgdGhlIHByaW9yaXR5IGluIHRoZSBmcmFtZSB3aWxsIG5vdAoqCQliZSBtb2RpZmllZCBieSB0aGlzIG5ldyBBVFVRUHJpIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIGFmZmVjdHMgdGhlIGVncmVzcwoqCQlxdWV1ZSBwcmlvcml0eSAoUVByaSkgdGhlIGZyYW1lIGlzIHN3aXRjaGVkIGludG8uCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9UUlVFIGZvciBEQSBRdWV1ZSBQcmlvcml0eSBPdmVycmlkZSwKKgkJCSAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldERBUVByaU92ZXJyaWRlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NTZXRBUlBRUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBBUlAgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUuIAoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBBUlAgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiAKKgkJdGhpcyBwb3J0LgoqCQlBUlAgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzIGZvciBhbGwgQVJQIGZyYW1lcy4KKgkJV2hlbiB0aGlzIG9jY3VycywgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIGVncmVzcyBxdWV1ZSBwcmlvcml0eQoqCQl3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggQXJwUVByaS4KKgkJSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgbm90CioJCWJlIG1vZGlmaWVkLiBXaGVuIHVzZWQsIHRoZSB0d28gYml0cyBvZiB0aGUgQXJwUVByaSBwcmlvcml0eSBkZXRlcm1pbmUgdGhlCioJCWVncmVzcyBxdWV1ZSB0aGUgZnJhbWUgaXMgc3dpdGNoZWQgaW50by4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSBmb3IgQVJQIFF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlLAoqCQkJICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc1NldEFSUFFQcmlPdmVycmlkZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NHZXRBUlBRUHJpT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBBUlAgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUuIAoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBBUlAgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGVzIGNhbiBvY2N1ciBvbiAKKgkJdGhpcyBwb3J0LgoqCQlBUlAgUXVldWUgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzIGZvciBhbGwgQVJQIGZyYW1lcy4KKgkJV2hlbiB0aGlzIG9jY3VycywgdGhlIGZyYW1lJ3MgcHJldmlvdXNseSBkZXRlcm1pbmVkIGVncmVzcyBxdWV1ZSBwcmlvcml0eQoqCQl3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggQXJwUVByaS4KKgkJSWYgdGhlIGZyYW1lIGVncmVzc2VzIHRhZ2dlZCB0aGUgcHJpb3JpdHkgaW4gdGhlIGZyYW1lIHdpbGwgbm90CioJCWJlIG1vZGlmaWVkLiBXaGVuIHVzZWQsIHRoZSB0d28gYml0cyBvZiB0aGUgQXJwUVByaSBwcmlvcml0eSBkZXRlcm1pbmUgdGhlCioJCWVncmVzcyBxdWV1ZSB0aGUgZnJhbWUgaXMgc3dpdGNoZWQgaW50by4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUUgZm9yIEFSUCBRdWV1ZSBQcmlvcml0eSBPdmVycmlkZSwKKgkJCSAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqIEdhbFRpczoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldEFSUFFQcmlPdmVycmlkZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MCQkqbW9kZQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc1NldFFQcmlWYWx1ZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgUXVldWUgcHJpb3JpdHkgdmFsdWUgdG8gdXNlZCB3aGVuIGZvcmNlZC4KKgkJV2hlbiBGb3JjZVFQcmkgaXMgZW5hYmxlZCAoZ3Fvc1NldEZvcmNlUVByaSksIGFsbCBmcmFtZXMgZW50ZXJpbmcgdGhpcyBwb3J0CioJCWFyZSBtYXBwZWQgdG8gdGhlIHByaW9yaXR5IHF1ZXVlIGRlZmluZWQgaW4gdGhpcyB2YWx1ZSwgdW5sZXNzIGEgVlRVLCBTQSwKKgkJREEgb3IgQVJQIHByaW9yaXR5IG92ZXJyaWRlIG9jY3Vycy4gVGhlIEZyYW1lJ3MgcHJpb3JpdHkgKEZQcmkpIGlzIG5vdAoqCQllZmZlY3RlZCBieSB0aGlzIHZhbHVlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBwcmkgIC0gUXVldWUgcHJpb3JpdHkgdmFsdWUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgcHJpID4gMwoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zU2V0UVByaVZhbHVlCigKICAgIElOICBHVF9RRF9ERVYgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICBwb3J0LAogICAgSU4gIEdUX1U4ICAgICAgcHJpCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NHZXRRUHJpVmFsdWUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIFF1ZXVlIHByaW9yaXR5IHZhbHVlIHRvIHVzZWQgd2hlbiBmb3JjZWQuCioJCVdoZW4gRm9yY2VRUHJpIGlzIGVuYWJsZWQgKGdxb3NTZXRGb3JjZVFQcmkpLCBhbGwgZnJhbWVzIGVudGVyaW5nIHRoaXMgcG9ydAoqCQlhcmUgbWFwcGVkIHRvIHRoZSBwcmlvcml0eSBxdWV1ZSBkZWZpbmVkIGluIHRoaXMgdmFsdWUsIHVubGVzcyBhIFZUVSwgU0EsCioJCURBIG9yIEFSUCBwcmlvcml0eSBvdmVycmlkZSBvY2N1cnMuIFRoZSBGcmFtZSdzIHByaW9yaXR5IChGUHJpKSBpcyBub3QKKgkJZWZmZWN0ZWQgYnkgdGhpcyB2YWx1ZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIHByaSAgLSBRdWV1ZSBwcmlvcml0eSB2YWx1ZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncW9zR2V0UVByaVZhbHVlCigKICAgIElOICBHVF9RRF9ERVYgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICBwb3J0LAogICAgT1VUIEdUX1U4ICAgICAgKnByaQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zU2V0Rm9yY2VRUHJpCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZW5hYmxlcy9kaXNhYmxlcyBmb3JjaW5nIFF1ZXVlIHByaW9yaXR5LgoqCQlXaGVuIEZvcmNlUVByaSBpcyBkaXNhYmxlZCwgbm9ybWFsIHByaW9yaXR5IHF1ZXVlIG1hcHBpbmcgaXMgdXNlZCBvbiBhbGwgCioJCWluZ3Jlc3NpbmcgZnJhbWVzIGVudGVyaW5nIHRoaXMgcG9ydC4gV2hlbiBpdCdzIGVuYWJsZWQsIGFsbCBmcmFtZXMKKgkJZW50ZXJpbmcgdGhpcyBwb3J0IGFyZSBtYXBwZWQgdG8gdGhlIFFQcmlWYWx1ZSAoZ3Fvc1NldFFQcmlWYWx1ZSksIHVubGVzcwoqCQlhIFZUVSwgU0EsIERBIG9yIEFSUCBwcmlvcml0eSBvdmVycmlkZSBvY2N1cnMuIFRoZSBmcmFtZSdzIHByaW9ydHkgKEZQcmkpCioJCWlzIG5vdCBlZmZlY3RlZCBieSB0aGlzIGZlYXR1cmUuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIGVuICAgLSBHVF9UUlVFLCB0byBmb3JjZSBRdWV1ZSBQcmlvcml0eSwKKgkJCSAgIEdUX0ZBTFNFLCBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxb3NTZXRGb3JjZVFQcmkKKAogICAgSU4gIEdUX1FEX0RFViAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgIHBvcnQsCiAgICBJTiAgR1RfQk9PTCAgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zR2V0Rm9yY2VRUHJpCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgY2hlY2tzIGlmIGZvcmNpbmcgUXVldWUgcHJpb3JpdHkgaXMgZW5hYmxlZC4KKgkJV2hlbiBGb3JjZVFQcmkgaXMgZGlzYWJsZWQsIG5vcm1hbCBwcmlvcml0eSBxdWV1ZSBtYXBwaW5nIGlzIHVzZWQgb24gYWxsIAoqCQlpbmdyZXNzaW5nIGZyYW1lcyBlbnRlcmluZyB0aGlzIHBvcnQuIFdoZW4gaXQncyBlbmFibGVkLCBhbGwgZnJhbWVzCioJCWVudGVyaW5nIHRoaXMgcG9ydCBhcmUgbWFwcGVkIHRvIHRoZSBRUHJpVmFsdWUgKGdxb3NTZXRRUHJpVmFsdWUpLCB1bmxlc3MKKgkJYSBWVFUsIFNBLCBEQSBvciBBUlAgcHJpb3JpdHkgb3ZlcnJpZGUgb2NjdXJzLiBUaGUgZnJhbWUncyBwcmlvcnR5IChGUHJpKQoqCQlpcyBub3QgZWZmZWN0ZWQgYnkgdGhpcyBmZWF0dXJlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CiogICAgICAgZW4gICAtIEdUX1RSVUUsIHRvIGZvcmNlIFF1ZXVlIFByaW9yaXR5LAoqCQkJICAgR1RfRkFMU0UsIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldEZvcmNlUVByaQooCiAgICBJTiAgR1RfUURfREVWICAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgcG9ydCwKICAgIE9VVCBHVF9CT09MICAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zU2V0RGVmRlByaQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIGRlZmF1bHQgZnJhbWUgcHJpb3JpdHkgKDAgfiA3KS4KKgkJVGhpcyBwcmlvcml0eSBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0IGZyYW1lIHByaW9yaXR5IChGUHJpKSB0byB1c2Ugd2hlbiAKKgkJbm8gb3RoZXIgcHJpb3JpdHkgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgIHByaSAgLSBkZWZhdWx0IGZyYW1lIHByaW9yaXR5CioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIHByaSA+IDcKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc1NldERlZkZQcmkKKAogICAgSU4gIEdUX1FEX0RFViAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgIHBvcnQsCiAgICBJTiAgR1RfVTggICAgICBwcmkKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3Fvc0dldERlZkZQcmkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIHRoZSBkZWZhdWx0IGZyYW1lIHByaW9yaXR5ICgwIH4gNykuCioJCVRoaXMgcHJpb3JpdHkgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCBmcmFtZSBwcmlvcml0eSAoRlByaSkgdG8gdXNlIHdoZW4gCioJCW5vIG90aGVyIHByaW9yaXR5IGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CiogICAgICAgcHJpICAtIGRlZmF1bHQgZnJhbWUgcHJpb3JpdHkKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldERlZkZQcmkKKAogICAgSU4gIEdUX1FEX0RFViAgKmRldiwKICAgIElOICBHVF9MUE9SVCAgIHBvcnQsCiAgICBPVVQgR1RfVTggICAgICAqcHJpCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncW9zU2V0QXJwUVByaQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgQVJQIHF1ZXVlIFByaW9yaXR5IHRvIHVzZSBmb3IgQVJQIFFQcmkgT3ZlcnJpZGRlbiAKKgkJZnJhbWVzLiBXaGVuIGEgQVJQIGZyYW1lIGlzIHJlY2VpdmVkIG9uIGEgcG9yIHR0aGF0IGhhcyBpdHMgQVJQIAoqCQlRUHJpT1ZlcnJpZGUgaXMgZW5hYmxlZCwgdGhlIFFQcmkgYXNzaWduZWQgdG8gdGhlIGZyYW1lIGNvbWVzIGZyb20KKgkJdGhpcyB2YWx1ZQoqCiogSU5QVVRTOgoqICAgICAgIHByaSAtIEFSUCBRdWV1ZSBQcmlvcml0eSAoMCB+IDMpCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIHByaSA+IDMKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc1NldEFycFFQcmkKKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX1U4ICAgICBwcmkKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxb3NHZXRBcnBRUHJpCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBBUlAgcXVldWUgUHJpb3JpdHkgdG8gdXNlIGZvciBBUlAgUVByaSBPdmVycmlkZGVuIAoqCQlmcmFtZXMuIFdoZW4gYSBBUlAgZnJhbWUgaXMgcmVjZWl2ZWQgb24gYSBwb3IgdHRoYXQgaGFzIGl0cyBBUlAgCioJCVFQcmlPVmVycmlkZSBpcyBlbmFibGVkLCB0aGUgUVByaSBhc3NpZ25lZCB0byB0aGUgZnJhbWUgY29tZXMgZnJvbQoqCQl0aGlzIHZhbHVlCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgcHJpIC0gQVJQIFF1ZXVlIFByaW9yaXR5ICgwIH4gMykKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Fvc0dldEFycFFQcmkKKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgT1VUIEdUX1U4ICAgICAqcHJpCik7CgoKLyogZ3RTeXNDdHJsLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFVzZVBvcnRTY2hlZHVsZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgcGVyIHBvcnQgc2NoZWR1bGluZyBtb2RlCioKKiBJTlBVVFM6CiogICAgICAgZW4gLSBHVF9UUlVFIGVuYWJsZXMgcGVyIHBvcnQgc2NoZWR1bGluZywgCioJCQkgR1RfRkFMU0UgZGlzYWJsZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRVc2VQb3J0U2NoZWR1bGUKKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0JPT0wgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0VXNlUG9ydFNjaGVkdWxlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBwZXIgcG9ydCBzY2hlZHVsaW5nIG1vZGUKKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgZW5hYmxlcyBwZXIgcG9ydCBzY2hlZHVsaW5nLCAKKgkJCSBHVF9GQUxTRSBkaXNhYmxlLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFVzZVBvcnRTY2hlZHVsZQooCiAgICBJTiAgR1RfUURfREVWICpkZXYsCiAgICBPVVQgR1RfQk9PTCAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0T2xkSGFkZXIKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIEVncmVzcyBPbGQgSGVhZGVyLgoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIGFuZCBmcmFtZXMgYXJlIGVncmVzc2VkIHdpdGggYSBNYXJ2ZWxsIEhlYWRlciwgCioJCXRoZSBmb3JtYXQgb2YgdGhlIEhlYWRlciBpcyBzbGlnaHRseSBtb2RpZmllZCB0byBiZSBiYWNrd2FyZHMgY29tcGF0aWJsZSAKKgkJd2l0aCBwcmV2aW91cyBkZXZpY2VzIHRoYXQgdXNlZCB0aGUgb3JpZ2luYWwgSGVhZGVyLiBTcGVjaWZpY2FsbHksIGJpdCAzCioJCW9mIHRoZSBIZWFkZXIncyAybmQgb2N0ZXQgaXMgY2xlYXJlZCB0byBhIHplcm8gc3VjaCB0aGF0IG9ubHkgRlByaVsyOjFdCioJCWlzIGF2YWlsYWJsZSBpbiB0aGUgSGVhZGVyLgoqCiogSU5QVVRTOgoqICAgICAgIGVuIC0gR1RfVFJVRSB0byBlbmFibGUgT2xkIEhlYWRlciBNb2RlLAoqCQkJIEdUX0ZBTFNFIHRvIGRpc2FibGUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldE9sZEhhZGVyCigKICAgIElOICBHVF9RRF9ERVYgKmRldiwKICAgIElOICBHVF9CT09MICAgZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldE9sZEhhZGVyCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBFZ3Jlc3MgT2xkIEhlYWRlci4KKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgZnJhbWVzIGFyZSBlZ3Jlc3NlZCB3aXRoIGEgTWFydmVsbCBIZWFkZXIsIAoqCQl0aGUgZm9ybWF0IG9mIHRoZSBIZWFkZXIgaXMgc2xpZ2h0bHkgbW9kaWZpZWQgdG8gYmUgYmFja3dhcmRzIGNvbXBhdGlibGUgCioJCXdpdGggcHJldmlvdXMgZGV2aWNlcyB0aGF0IHVzZWQgdGhlIG9yaWdpbmFsIEhlYWRlci4gU3BlY2lmaWNhbGx5LCBiaXQgMwoqCQlvZiB0aGUgSGVhZGVyJ3MgMm5kIG9jdGV0IGlzIGNsZWFyZWQgdG8gYSB6ZXJvIHN1Y2ggdGhhdCBvbmx5IEZQcmlbMjoxXQoqCQlpcyBhdmFpbGFibGUgaW4gdGhlIEhlYWRlci4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgdG8gZW5hYmxlIE9sZCBIZWFkZXIgTW9kZSwKKgkJCSBHVF9GQUxTRSB0byBkaXNhYmxlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRPbGRIYWRlcgooCiAgICBJTiAgR1RfUURfREVWICpkZXYsCiAgICBPVVQgR1RfQk9PTCAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UmVjdXJzaXZlU3RyaXBwaW5nRGlzYWJsZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGRldGVybWluZXMgaWYgcmVjdXJzaXZlIHRhZyBzdHJpcHBpbmcgZmVhdHVyZSBuZWVkcyB0byBiZQoqCQlkaXNhYmxlZC4KKgoqIElOUFVUUzoKKiAgICAgICBlbiAtIEdUX1RSVUUgdG8gZGlzYWJsZSBSZWN1cnNpdmUgVGFnIFN0cmlwcGluZywKKgkJCSBHVF9GQUxTRSB0byBlbmFibGUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFJlY3Vyc2l2ZVN0cmlwcGluZ0Rpc2FibGUKKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0JPT0wgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0UmVjdXJzaXZlU3RyaXBwaW5nRGlzYWJsZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGNoZWNrcyBpZiByZWN1cnNpdmUgdGFnIHN0cmlwcGluZyBmZWF0dXJlIGlzIGRpc2FibGVkLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIGVuIC0gR1RfVFJVRSwgaWYgUmVjdXJzaXZlIFRhZyBTdHJpcHBpbmcgaXMgZGlzYWJsZWQsCioJCQkgR1RfRkFMU0UsIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UmVjdXJzaXZlU3RyaXBwaW5nRGlzYWJsZQooCiAgICBJTiAgR1RfUURfREVWICpkZXYsCiAgICBPVVQgR1RfQk9PTCAgICplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0Q1BVUG9ydAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgQ1BVIFBvcnQgd2hlcmUgUnN2ZDJDcHUgZnJhbWVzIGFuZCBJR01QL01MRCBTbm9vcGVkIAoqCQlmcmFtZXMgYXJlIGRlc3RpbmVkLgoqCiogSU5QVVRTOgoqICAgICAgIGNwdVBvcnQgLSBDUFUgUG9ydAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Q1BVUG9ydAooCiAgICBJTiAgR1RfUURfREVWICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgIGNwdVBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldENQVVBvcnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIENQVSBQb3J0IHdoZXJlIFJzdmQyQ3B1IGZyYW1lcyBhbmQgSUdNUC9NTEQgU25vb3BlZCAKKgkJZnJhbWVzIGFyZSBkZXN0aW5lZC4KKgoqIElOUFVUUzoKKiAgICAgICBjcHVQb3J0IC0gQ1BVIFBvcnQKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldENQVVBvcnQKKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgT1VUIEdUX0xQT1JUICAqY3B1UG9ydAopOwoKCgovKiBndFN5c1N0YXR1cy5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRGcmVlUVNpemUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIEZyZWUgUXVldWUgQ291bnRlci4gVGhpcyBjb3VudGVyIHJlZmxlY3RzIHRoZSAKKgkJY3VycmVudCBudW1iZXIgb2YgdW5hbGxsb2NhdGVkIGJ1ZmZlcnMgYXZhaWxhYmxlIGZvciBhbGwgdGhlIHBvcnRzLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIGNvdW50IC0gRnJlZSBRdWV1ZSBDb3VudGVyCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRGcmVlUVNpemUKKAogICAgSU4gIEdUX1FEX0RFVgkqZGV2LAogICAgT1VUIEdUX1UxNiAJCSpjb3VudAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCQkJCU5ldyBBUElzIGluIERTRFQgMi42CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKiBndEJyZ0ZkYi5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJTZXRQb3J0QXR1TGVhcm5MaW1pdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgUG9ydCdzIGF1dG8gbGVhcm5pbmcgbGltaXQuIFdoZW4gdGhlIGxpbWl0IGlzIG5vbi16ZXJvIHZhbHVlLCB0aGUgbnVtYmVyCioJCW9mIE1BQyBhZGRyZXNzZXMgdGhhdCBjYW4gYmUgbGVhcm5lZCBvbiB0aGlzIHBvcnQgYXJlIGxpbWl0ZWQgdG8gdGhlIHZhbHVlCioJCXNwZWNpZmllZCBpbiB0aGlzIEFQSS4gV2hlbiB0aGUgbGVhcm4gbGltaXQgaGFzIGJlZW4gcmVhY2hlZCBhbnkgZnJhbWUgCioJCXRoYXQgaW5ncmVzc2VzIHRoaXMgcG9ydCB3aXRoIGEgc291cmNlIE1BQyBhZGRyZXNzIG5vdCBhbHJlYWR5IGluIHRoZSAKKgkJYWRkcmVzcyBkYXRhYmFzZSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBvcnQgd2lsbCBiZSBkaXNjYXJkZWQuIAoqCQlOb3JtYWwgYXV0by1sZWFybmluZyB3aWxsIHJlc3VtZSBvbiB0aGUgcG9ydCBhcyBzb29uIGFzIHRoZSBudW1iZXIgb2YgCioJCWFjdGl2ZSB1bmljYXN0IE1BQyBhZGRyZXNzZXMgYXNzb2NpYXRlZCB0byB0aGlzIHBvcnQgaXMgbGVzcyB0aGFuIHRoZSAKKgkJbGVhcm4gbGltaXQuCioJCUNQVSBkaXJlY3RlZCBBVFUgTG9hZCwgUHVyZ2UsIG9yIE1vdmUgd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSAKKgkJbGVhcm4gbGltaXQuCioJCVRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCB3aGVuIHRoZSBsaW1pdCBpcyB6ZXJvLgoqCQlUaGUgZm9sbG93aW5nIGNhcmUgaXMgbmVlZGVkIHdoZW4gZW5hYmxpbmcgdGhpcyBmZWF0dXJlOgoqCQkJMSkgZGlzYWJsZSBsZWFybmluZyBvbiB0aGUgcG9ydHMKKgkJCTIpIGZsdXNoIGFsbCBub24tc3RhdGljIGFkZHJlc3NlcyBpbiB0aGUgQVRVCioJCQkzKSBkZWZpbmUgdGhlIGRlc2lyZWQgbGltaXQgZm9yIHRoZSBwb3J0cwoqCQkJNCkgcmUtZW5hYmxlIGxlYXJpbmcgb24gdGhlIHBvcnRzCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgbGltaXQgLSBhdXRvIGxlYXJuaW5nIGxpbWl0ICggMCB+IDI1NSApCioJCQkJCQkJCQkJCSAgCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBsaW1pdCA+IDB4RkYKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCiogR2FsVGlzOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiU2V0UG9ydEF0dUxlYXJuTGltaXQKKAogICAgSU4gIEdUX1FEX0RFViAJKmRldiwKICAgIElOICBHVF9MUE9SVCAgCXBvcnQsCiAgICBJTiAgR1RfVTMyICAgCWxpbWl0Cik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0UG9ydEF0dUxlYXJuQ250CioKKiBERVNDUklQVElPTjoKKiAgICAgICBSZWFkIHRoZSBjdXJyZW50IG51bWJlciBvZiBhY3RpdmUgdW5pY2FzdCBNQUMgYWRkcmVzc2VzIGFzc29jaWF0ZWQgd2l0aCAKKgkJdGhlIGdpdmVuIHBvcnQuIFRoaXMgY291bnRlciAoTGVhcm5DbnQpIGlzIGhlbGQgYXQgemVybyBpZiBsZWFybiBsaW1pdAoqCQkoZ2ZkYlNldFBvcnRBdHVMZWFybkxpbWl0IEFQSSkgaXMgc2V0IHRvIHplcm8uCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCQkJCQkJCQkJCSAgCiogT1VUUFVUUzoKKiAgICAgICBjb3VudCAtIGN1cnJlbnQgYXV0byBsZWFybmluZyBjb3VudAoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJHZXRQb3J0QXR1TGVhcm5DbnQKKAogICAgSU4gIEdUX1FEX0RFViAJKmRldiwKICAgIElOICBHVF9MUE9SVCAgCXBvcnQsCiAgICBJTiAgR1RfVTMyICAgCSpjb3VudAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0QXR1QWxsQ291bnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIENvdW50cyBhbGwgZW50cmllcyBpbiB0aGUgQWRkcmVzcyBUcmFuc2xhdGlvbiBVbml0LgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIGNvdW50IC0gbnVtYmVyIG9mIHZhbGlkIGVudHJpZXMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJHZXRBdHVBbGxDb3VudAooCiAgICBJTiAgR1RfUURfREVWIAkqZGV2LAogICAgT1VUIEdUX1UzMiAJCSpjb3VudAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0QXR1QWxsQ291bnRJbkRCTnVtCioKKiBERVNDUklQVElPTjoKKiAgICAgICBDb3VudHMgYWxsIGVudHJpZXMgaW4gdGhlIGRlZmluZWQgRklEIChvciBEQk51bSkuCioKKiBJTlBVVFM6CiogICAgICAgZGJOdW0gLSBEQk51bSBvZiBGSUQKKgoqIE9VVFBVVFM6CiogICAgICAgY291bnQgLSBudW1iZXIgb2YgdmFsaWQgZW50cmllcyBpbiBGSUQgKG9yIERCTnVtKS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkdldEF0dUFsbENvdW50SW5EQk51bQooCiAgICBJTiAgR1RfUURfREVWIAkqZGV2LAogICAgSU4gIEdUX1UzMiAJCWRiTnVtLAogICAgT1VUIEdUX1UzMiAJCSpjb3VudAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZmRiR2V0QXR1RHluYW1pY0NvdW50SW5EQk51bQoqCiogREVTQ1JJUFRJT046CiogICAgICAgQ291bnRzIGFsbCBub24tc3RhdGljIGVudHJpZXMgaW4gdGhlIGRlZmluZWQgRklEIChvciBEQk51bSkuCioKKiBJTlBVVFM6CiogICAgICAgZGJOdW0gLSBEQk51bSBvciBGSUQKKgoqIE9VVFBVVFM6CiogICAgICAgY291bnQgLSBudW1iZXIgb2YgdmFsaWQgbm9uLXN0YXRpYyBlbnRyaWVzIGluIEZJRCAob3IgREJOdW0pLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZmRiR2V0QXR1RHluYW1pY0NvdW50SW5EQk51bQooCiAgICBJTiAgR1RfUURfREVWIAkqZGV2LAogICAgSU4gIEdUX1UzMiAJCWRiTnVtLAogICAgT1VUIEdUX1UzMiAJCSpjb3VudAopOwoKCi8qIGd0QnJnU3R1LmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N0dUdldEVudHJ5Q291bnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEdldHMgdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHZhbGlkIGVudHJpZXMgaW4gdGhlIFNUVSB0YWJsZQoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqICAgICAgIG51bUVudHJpZXMgLSBudW1iZXIgb2YgU1RVIGVudHJpZXMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N0dUdldEVudHJ5Q291bnQKKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgT1VUIEdUX1UzMiAgICAqbnVtRW50cmllcwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3R1R2V0RW50cnlGaXJzdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgR2V0cyBmaXJzdCBsZXhpY29ncmFwaGljIGVudHJ5IGZyb20gdGhlIFNUVS4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICBzdHVFbnRyeSAtIGZpbmQgdGhlIGZpcnN0IHZhbGlkIFNUVSBlbnRyeS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT19TVUNIIC0gdGFibGUgaXMgZW1wdHkuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3R1R2V0RW50cnlGaXJzdAooCiAgICBJTiAgR1RfUURfREVWICAgICAgICpkZXYsCiAgICBPVVQgR1RfU1RVX0VOVFJZICAgICpzdHVFbnRyeQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3R1R2V0RW50cnlOZXh0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXRzIG5leHQgbGV4aWNvZ3JhcGhpYyBTVFUgZW50cnkgZnJvbSB0aGUgc3BlY2lmaWVkIFNJRC4KKgoqIElOUFVUUzoKKiAgICAgICBzdHVFbnRyeSAtIHRoZSBTSUQgdG8gc3RhcnQgdGhlIHNlYXJjaC4KKgoqIE9VVFBVVFM6CiogICAgICAgc3R1RW50cnkgLSBuZXh0IFNUVSBlbnRyeS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MuCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yIG9yIGVudHJ5IGRvZXMgbm90IGV4aXN0LgoqICAgICAgIEdUX05PX1NVQ0ggLSBubyBtb3JlIGVudHJpZXMuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3R1R2V0RW50cnlOZXh0CigKICAgIElOICBHVF9RRF9ERVYgICAgICAgKmRldiwKICAgIElOT1VUIEdUX1NUVV9FTlRSWSAgKnN0dUVudHJ5Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzdHVGaW5kU2lkRW50cnkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEZpbmQgU1RVIGVudHJ5IGZvciBhIHNwZWNpZmljIFNJRCwgaXQgd2lsbCByZXR1cm4gdGhlIGVudHJ5LCBpZiBmb3VuZCwgCiogICAgICAgYWxvbmcgd2l0aCBpdHMgYXNzb2NpYXRlZCBkYXRhIAoqCiogSU5QVVRTOgoqICAgICAgIHN0dUVudHJ5IC0gY29udGFpbnMgdGhlIFNJRCB0byBzZWFyY2hlIGZvciAKKgoqIE9VVFBVVFM6CiogICAgICAgZm91bmQgICAgLSBHVF9UUlVFLCBpZiB0aGUgYXBwcm9wcmlhdGUgZW50cnkgZXhpc3RzLgoqICAgICAgIHN0dUVudHJ5IC0gdGhlIGVudHJ5IHBhcmFtZXRlcnMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzLgoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvciBvciBlbnRyeSBkb2VzIG5vdCBleGlzdC4KKiAgICAgICBHVF9OT19TVUNIIC0gbm8gc3VjaCBlbnRyeS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdHVGaW5kU2lkRW50cnkKKAogICAgSU4gIEdUX1FEX0RFViAgICAgICAqZGV2LAogICAgSU5PVVQgR1RfU1RVX0VOVFJZICAqc3R1RW50cnksCiAgICBPVVQgR1RfQk9PTCAgICAgICAgICpmb3VuZAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3R1QWRkRW50cnkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIENyZWF0ZXMgb3IgdXBkYXRlIHRoZSBlbnRyeSBpbiBTVFUgdGFibGUgYmFzZWQgb24gdXNlciBpbnB1dC4KKgoqIElOUFVUUzoKKiAgICAgICBzdHVFbnRyeSAgICAtIHN0dSBlbnRyeSB0byBpbnNlcnQgdG8gdGhlIFNUVS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdHVBZGRFbnRyeQooCiAgICBJTiAgR1RfUURfREVWICAgCSpkZXYsCiAgICBJTiAgR1RfU1RVX0VOVFJZCSpzdHVFbnRyeQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3R1RGVsRW50cnkKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIERlbGV0ZXMgU1RVIGVudHJ5IHNwZWNpZmllZCBieSB1c2VyLgoqCiogSU5QVVRTOgoqICAgICAgIHN0dUVudHJ5IC0gdGhlIFNUVSBlbnRyeSB0byBiZSBkZWxldGVkIAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzdHVEZWxFbnRyeQooCiAgICBJTiAgR1RfUURfREVWICAgCSpkZXYsCiAgICBJTiAgR1RfU1RVX0VOVFJZIAkqc3R1RW50cnkKKTsKCgovKiBndENDUFZULmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B2dEluaXRpYWxpemUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBpbml0aWFsaXplcyB0aGUgUFZUIFRhYmxlIHRvIGFsbCBvbmUncyAoaW5pdGlhbCBzdGF0ZSkKKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdnRJbml0aWFsaXplCigKCUlOICBHVF9RRF9ERVYgCSpkZXYKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B2dFdyaXRlUFZURGF0YQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHdyaXRlIENyb3NzIENoaXAgUG9ydCBWbGFuIERhdGEuCioJCUNyb3NzIGNoaXAgUG9ydCBWTEFOIERhdGEgdXNlZCBhcyBhIGJpdCBtYXNrIHRvIGxpbWl0IHdoZXJlIGNyb3NzIGNoaXAKKgkJZnJhbWVzIGNhbiBlZ3Jlc3MgKGluIGNoaXAgUG9ydCBWTEFOcyBhcmUgbWFza2VkIHVzaW5nIGd2bG5TZXRQb3J0VmxhblBvcnRzCioJCUFQSSkuIENyb3NzIGNoaXAgZnJhbWVzIGFyZSBGb3J3YXJkIGZyYW1lcyB0aGF0IGluZ3Jlc3MgYSBEU0Egb3IgRXRoZXIgCioJCVR5cGUgRFNBIHBvcnQgKHNlZSBncHJ0U2V0RnJhbWVNb2RlIEFQSSkuIEJpdCAwIGlzIGEgbWFzayBmb3IgcG9ydCAwLCAKKgkJYml0IDEgZm9yIHBvcnQgMSwgZXRjLiBXaGVuIGEgcG9ydCdzIG1hc2sgYml0IGlzIG9uZSwgZnJhbWVzIGFyZSBhbGxvd2VkIAoqCQl0byBlZ3Jlc3MgdGhhdCBwb3J0IG9uIHRoaXMgZGV2aWNlLiBXaGVuIGEgcG9ydCdzIG1hc2sgYml0IGlzIHplcm8sCioJCWZyYW1lcyBhcmUgbm90IGFsbG93ZWQgdG8gZWdyZXNzIHRoYXQgcG9ydCBvbiB0aGlzIGRldmljZS4KKgoqCQlUaGUgQ3Jvc3MgQ2hpcCBQb3J0IFZMQU4gVGFibGUgaXMgYWNjZXNzZWQgYnkgaW5ncmVzc2luZyBmcmFtZXMgYmFzZWQKKgkJdXBvbiB0aGUgb3JpZ2luYWwgc291cmNlIHBvcnQgb2YgdGhlIGZyYW1lIHVzaW5nIHRoZSBGb3J3YXJkIGZyYW1lJ3MgRFNBIHRhZwoqCQlmaWVsZHMgU3JjX0RldiwgU3JjX1BvcnQvU3JjX1RydW5rIGFuZCBTcmNfSXNfVHJ1bmsuIFRoZSAxIGVudHJ5IG9mIHRoZSA1MTIKKgkJdGhhdCBpcyBhY2Nlc3NlZCBieSB0aGUgZnJhbWUgaXM6CioJCQlJZiA1IEJpdCBQb3J0IChpbiBHbG9iYWwgMiwgb2Zmc2V0IDB4MUQpID0gMDoKKgkJCQlJZiBTcmNfSXNfVHJ1bmsgPSAwICAgU3JjX0Rldls0OjBdLCBTcmNfUG9ydFszOjBdMTE5CioJCQkJSWYgU3JjX0lzX1RydW5rID0gMSAgIERldmljZSBOdW1iZXIgKGdsb2JhbCBvZmZzZXQgMHgxQyksIFNyY19UcnVua1szOjBdCioJCQlJZiA1IEJpdCBQb3J0IChpbiBHbG9iYWwgMiwgb2Zmc2V0IDB4MUQpID0gMToKKgkJCQlJZiBTcmNfSXNfVHJ1bmsgPSAwICAgU3JjX0RldlszOjBdLCBTcmNfUG9ydFs0OjBdMTIwCioJCQkJSWYgU3JjX0lzX1RydW5rID0gMSAgIERldmljZSBOdW1iZXJbMzowXSwgU3JjX1RydW5rWzQ6MF0KKgoqCQlDcm9zcyBjaGlwIHBvcnQgVkxBTnMgd2l0aCBUcnVua3MgYXJlIHN1cHBvcnRlZCBpbiB0aGUgdGFibGUgd2hlcmUgdGhpcwoqCQlkZXZpY2UncyBlbnRyaWVzIHdvdWxkIGJlIHN0b3JlZCAoZGVmaW5lZCBieSB0aGlzIGRldmljZSdzIERldmljZSBOdW1iZXIpLgoqCQlUaGlzIHBvcnRpb24gb2YgdGhlIHRhYmxlIGlzIGF2YWlsYWJsZSBmb3IgVHJ1bmsgZW50cmllcyBiZWNhdXNlIHRoaXMgZGV2aWNlJ3MKKgkJcG9ydCBWTEFOIG1hcHBpbmdzIHRvIHBvcnRzIGluc2lkZSB0aGlzIGRldmljZSBhcmUgbWFza2VkIGJ5IHRoZSBwb3J0J3MKKgkJVkxBTiBUYWJsZSAoc2VlIGd2bG5TZXRQb3J0VmxhblBvcnRzIEFQSSkuCioKKgoqIElOUFVUUzoKKgkJcHZ0UG9pbnRlciAtIHBvaW50ZXIgdG8gdGhlIGRlc2lyZWQgZW50cnkgb2YgUFZUICgwIH4gNTExKQoqCQlwdnREYXRhICAgIC0gQ3Jvc3MgQ2hpcCBQb3J0IFZsYW4gRGF0YQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B2dFdyaXRlUFZURGF0YQooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1UzMgkJcHZ0UG9pbnRlciwKCUlOICBHVF9VMzIJCXB2dERhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B2dFJlYWRQVlREYXRhCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmVhZHMgQ3Jvc3MgQ2hpcCBQb3J0IFZsYW4gRGF0YS4KKgkJQ3Jvc3MgY2hpcCBQb3J0IFZMQU4gRGF0YSB1c2VkIGFzIGEgYml0IG1hc2sgdG8gbGltaXQgd2hlcmUgY3Jvc3MgY2hpcAoqCQlmcmFtZXMgY2FuIGVncmVzcyAoaW4gY2hpcCBQb3J0IFZMQU5zIGFyZSBtYXNrZWQgdXNpbmcgZ3ZsblNldFBvcnRWbGFuUG9ydHMKKgkJQVBJKS4gQ3Jvc3MgY2hpcCBmcmFtZXMgYXJlIEZvcndhcmQgZnJhbWVzIHRoYXQgaW5ncmVzcyBhIERTQSBvciBFdGhlciAKKgkJVHlwZSBEU0EgcG9ydCAoc2VlIGdwcnRTZXRGcmFtZU1vZGUgQVBJKS4gQml0IDAgaXMgYSBtYXNrIGZvciBwb3J0IDAsIAoqCQliaXQgMSBmb3IgcG9ydCAxLCBldGMuIFdoZW4gYSBwb3J0J3MgbWFzayBiaXQgaXMgb25lLCBmcmFtZXMgYXJlIGFsbG93ZWQgCioJCXRvIGVncmVzcyB0aGF0IHBvcnQgb24gdGhpcyBkZXZpY2UuIFdoZW4gYSBwb3J0J3MgbWFzayBiaXQgaXMgemVybywKKgkJZnJhbWVzIGFyZSBub3QgYWxsb3dlZCB0byBlZ3Jlc3MgdGhhdCBwb3J0IG9uIHRoaXMgZGV2aWNlLgoqCioJCVRoZSBDcm9zcyBDaGlwIFBvcnQgVkxBTiBUYWJsZSBpcyBhY2Nlc3NlZCBieSBpbmdyZXNzaW5nIGZyYW1lcyBiYXNlZAoqCQl1cG9uIHRoZSBvcmlnaW5hbCBzb3VyY2UgcG9ydCBvZiB0aGUgZnJhbWUgdXNpbmcgdGhlIEZvcndhcmQgZnJhbWUncyBEU0EgdGFnCioJCWZpZWxkcyBTcmNfRGV2LCBTcmNfUG9ydC9TcmNfVHJ1bmsgYW5kIFNyY19Jc19UcnVuay4gVGhlIDEgZW50cnkgb2YgdGhlIDUxMgoqCQl0aGF0IGlzIGFjY2Vzc2VkIGJ5IHRoZSBmcmFtZSBpczoKKgkJCUlmIDUgQml0IFBvcnQgKGluIEdsb2JhbCAyLCBvZmZzZXQgMHgxRCkgPSAwOgoqCQkJCUlmIFNyY19Jc19UcnVuayA9IDAgICBTcmNfRGV2WzQ6MF0sIFNyY19Qb3J0WzM6MF0xMTkKKgkJCQlJZiBTcmNfSXNfVHJ1bmsgPSAxICAgRGV2aWNlIE51bWJlciAoZ2xvYmFsIG9mZnNldCAweDFDKSwgU3JjX1RydW5rWzM6MF0KKgkJCUlmIDUgQml0IFBvcnQgKGluIEdsb2JhbCAyLCBvZmZzZXQgMHgxRCkgPSAxOgoqCQkJCUlmIFNyY19Jc19UcnVuayA9IDAgICBTcmNfRGV2WzM6MF0sIFNyY19Qb3J0WzQ6MF0xMjAKKgkJCQlJZiBTcmNfSXNfVHJ1bmsgPSAxICAgRGV2aWNlIE51bWJlclszOjBdLCBTcmNfVHJ1bmtbNDowXQoqCioJCUNyb3NzIGNoaXAgcG9ydCBWTEFOcyB3aXRoIFRydW5rcyBhcmUgc3VwcG9ydGVkIGluIHRoZSB0YWJsZSB3aGVyZSB0aGlzCioJCWRldmljZSdzIGVudHJpZXMgd291bGQgYmUgc3RvcmVkIChkZWZpbmVkIGJ5IHRoaXMgZGV2aWNlJ3MgRGV2aWNlIE51bWJlcikuCioJCVRoaXMgcG9ydGlvbiBvZiB0aGUgdGFibGUgaXMgYXZhaWxhYmxlIGZvciBUcnVuayBlbnRyaWVzIGJlY2F1c2UgdGhpcyBkZXZpY2UncwoqCQlwb3J0IFZMQU4gbWFwcGluZ3MgdG8gcG9ydHMgaW5zaWRlIHRoaXMgZGV2aWNlIGFyZSBtYXNrZWQgYnkgdGhlIHBvcnQncwoqCQlWTEFOIFRhYmxlIChzZWUgZ3ZsblNldFBvcnRWbGFuUG9ydHMgQVBJKS4KKgoqCiogSU5QVVRTOgoqCQlwdnRQb2ludGVyIC0gcG9pbnRlciB0byB0aGUgZGVzaXJlZCBlbnRyeSBvZiBQVlQgKDAgfiA1MTEpCioKKiBPVVRQVVRTOgoqCQlwdnREYXRhICAgIC0gQ3Jvc3MgQ2hpcCBQb3J0IFZsYW4gRGF0YQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B2dFJlYWRQVlREYXRhCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVTMyCQlwdnRQb2ludGVyLAoJT1VUIEdUX1UzMgkJKnB2dERhdGEKKTsKCgovKiBndEV2ZW50cy5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdldmVudEdldERldkludFN0YXR1cwoqCiogREVTQ1JJUFRJT046CiogCQlDaGVjayB0byBzZWUgd2hpY2ggZGV2aWNlIGludGVycnVwdHMgKFdhdGNoRG9nLCBKYW1MaW1pdCwgRHVwbGV4IE1pc21hdGNoLCBhbmQKKgkJU0VSREVTIExpbmsgSW50KSBoYXZlIG9jY3VycmVkLgoqCiogSU5QVVRTOgoqICAgICAgIGludFR5cGUgLSB0aGUgdHlwZSBvZiBpbnRlcnJ1cHQgd2hpY2ggY2F1c2VzIGFuIGludGVycnVwdC4KKgkJCQkgIGFueSBjb21iaW5hdGlvbiBvZiAKKgkJCQkJR1RfREVWX0lOVF9XQVRDSERPRywKKgkJCQkJR1RfREVWX0lOVF9KQU1MSU1JVCwKKgkJCQkJR1RfREVWX0lOVF9EVVBMRVhfTUlTTUFUQ0gsCioJCQkJCUdUX0RFVl9JTlRfU0VSREVTX0xJTksKKgkJcG9ydAktIGxvZ2ljYWwgcG9ydCB3aGVyZSBHVF9ERVZfSU5UX0RVUExFWF9NSVNNQVRDSCBvY2N1cnJlZC4KKgkJCQkgIHZhbGlkIG9ubHkgaWYgR1RfREVWX0lOVF9EVVBMRVhfTUlTTUFUQ0ggaXMgc2V0IGluIGludFR5cGUuCioJCWxpbmtJbnQgLSBTRVJERVMgcG9ydCBsaXN0IHdoZXJlIEdUX0RFVl9JTlRfU0VSREVTX0xJTksgaW50ZXJydXB0IGlzCioJCQkJICBhc3NlcnRlZC4gSXQncyBpbiB2ZWN0b3IgZm9ybWF0LCBCaXQgMTAgaXMgZm9yIHBvcnQgMTAsIAoqCQkJCSAgQml0IDkgaXMgZm9yIHBvcnQgOSwgZXRjLgoqCQkJCSAgdmFsaWQgb25seSBpZiBHVF9ERVZfSU5UX1NFUkRFU19MSU5LIGJpdCBpcyBzZXQgaW4gaW50VHlwZS4KKgkJCQkgIFRoZXNlIGJpdHMgYXJlIG9ubHkgdmFsaWQgb2YgdGhlIHBvcnQgdGhhdCBpcyBpbiAxMDAwQmFzZS1YIG1vZGUuCioKKiBPVVRQVVRTOgoqIAkJTm9uZS4KKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdldmVudEdldERldkludFN0YXR1cwooCiAgICBJTiAgR1RfUURfREVWIAkJCSpkZXYsCiAgICBPVVQgR1RfREVWX0lOVF9TVEFUVVMJKmRldkludFN0YXR1cwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZXZlbnRTZXRBZ2VPdXRJbnRFbgoqCiogREVTQ1JJUFRJT046CioJCUludGVycnVwdCBvbiBBZ2UgT3V0LiBXaGVuIGFnaW5nIGlzIGVuYWJsZWQsIGFsbCBub24tc3RhdGljIGFkZHJlc3MgCioJCWVudHJpZXMgaW4gdGhlIEFUVSdzIGFkZHJlc3MgZGF0YWJhc2UgYXJlIHBlcmlvZGljYWxseSBhZ2VkLgoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBzZXQgdG8gR1RfVFJVRSBhbmQgYW4gZW50cnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgCioJCXBvcnQgaXMgYWdlZCBvdXQsIGFuIEFnZU91dFZpb2xhdGlvbiB3aWxsIGJlIGNhcHR1cmVkIGZvciB0aGF0IGVudHJ5LgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIEFnZSBPdXQgSW50ZXJydXB0LAoqCQkJICAgR1RfRkFMVVNFIHRvIGRpc2FibGUKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZXZlbnRTZXRBZ2VPdXRJbnRFbgooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdldmVudEdldEFnZU91dEludEVuCioKKiBERVNDUklQVElPTjoKKgkJSW50ZXJydXB0IG9uIEFnZSBPdXQuIFdoZW4gYWdpbmcgaXMgZW5hYmxlZCwgYWxsIG5vbi1zdGF0aWMgYWRkcmVzcyAKKgkJZW50cmllcyBpbiB0aGUgQVRVJ3MgYWRkcmVzcyBkYXRhYmFzZSBhcmUgcGVyaW9kaWNhbGx5IGFnZWQuCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIHNldCB0byBHVF9UUlVFIGFuZCBhbiBlbnRyeSBhc3NvY2lhdGVkIHdpdGggdGhpcyAKKgkJcG9ydCBpcyBhZ2VkIG91dCwgYW4gQWdlT3V0VmlvbGF0aW9uIHdpbGwgYmUgY2FwdHVyZWQgZm9yIHRoYXQgZW50cnkuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUUsIGlmIEFnZSBPdXQgSW50ZXJydXB0IGlzIGVuYWJsZWQKKgkJCSAgIEdUX0ZBTFVTRSwgb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZXZlbnRHZXRBZ2VPdXRJbnRFbgooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MCQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZXZlbnRTZXRPdmVyTGltaXRJbnQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZW5hYmxlcy9kaXNhYmxlcyBPdmVyIExpbWl0IEludGVycnVwdCBmb3IgYSBwb3J0LgoqCQlJZiBpdCdzIGVuYWJsZWQsIGFuIEFUVSBNaXNzIHZpb2xhdGlvbiB3aWxsIGJlIGdlbmVyYXRlZCB3aGVuIHBvcnQgYXV0bwoqCQlsZWFybiByZWFjaGVkIHRoZSBsaW1pdChyZWZlciB0byBnZmRiR2V0UG9ydEF0dUxpbWl0UmVhY2hlZCBBUEkpLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIE92ZXIgTGltaXQgSW50ZXJydXB0LAoqCQkJICAgR1RfRkFMVVNFIHRvIGRpc2FibGUKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnZXZlbnRTZXRPdmVyTGltaXRJbnQKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglJTiAgR1RfQk9PTAkJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnZXZlbnRHZXRPdmVyTGltaXRJbnQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZW5hYmxlcy9kaXNhYmxlcyBPdmVyIExpbWl0IEludGVycnVwdCBmb3IgYSBwb3J0LgoqCQlJZiBpdCdzIGVuYWJsZWQsIGFuIEFUVSBNaXNzIHZpb2xhdGlvbiB3aWxsIGJlIGdlbmVyYXRlZCB3aGVuIHBvcnQgYXV0bwoqCQlsZWFybiByZWFjaGVkIHRoZSBsaW1pdChyZWZlciB0byBnZmRiU2V0UG9ydEF0dUxlYXJuTGltaXQgQVBJKS4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfVFJVRSB0byBlbmFibGUgT3ZlciBMaW1pdCBJbnRlcnJ1cHQsCioJCQkgICBHVF9GQUxVU0UgdG8gZGlzYWJsZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2V2ZW50R2V0T3ZlckxpbWl0SW50CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdldmVudEdldFBvcnRBdHVMaW1pdFJlYWNoZWQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBjaGVja3MgaWYgbGVhcm4gbGltaXQgaGFzIGJlZW4gcmVhY2hlZC4KKgkJV2hlbiBpdCByZWFjaGVkLCB0aGUgcG9ydCBjYW4gbm8gbG9uZ2VyIGF1dG8gbGVhcm4gYW55IG1vcmUgTUFDIGFkZHJlc3NlcwoqCQliZWNhdXNlIHRoZSBhZGRyZXNzIGxlYXJuIGxpbWl0IHNldCBvbiB0aGlzIHBvcnQgaGFzIGJlZW4gcmVhY2hlZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0ICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJCQkJCQkJCQkJICAKKiBPVVRQVVRTOgoqICAgICAgIGxpbWl0IC0gR1RfVFJVRSwgaWYgbGltaXQgaGFzIGJlZW4gcmVhY2hlZAoqCQkJICAgIEdUX0ZBTFNFLCBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lLgoqCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdldmVudEdldFBvcnRBdHVMaW1pdFJlYWNoZWQKKAogICAgSU4gIEdUX1FEX0RFViAJKmRldiwKICAgIElOICBHVF9MUE9SVCAgCXBvcnQsCiAgICBJTiAgR1RfQk9PTCAgIAkqbGltaXQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZXZlbnRTZXREZXZJbnQKKgoqIERFU0NSSVBUSU9OOgoqCQlEZXZpY2UgSW50ZXJydXB0LgoqCQlUaGUgZm9sbG93aW5nIGRldmljZSBpbnRlcnJ1cHRzIGFyZSBzdXBwb3J0ZWQ6CioJCQlHVF9ERVZfSU5UX1dBVENIRE9HCS0gCioJCQkJV2F0Y2hEb2cgZXZlbnQgaW50ZXJydXB0IChXYXRjaERvZyBldmVudCBjYW4gYmUgY29uZmlndXJlZCB3aXRoIAoqCQkJCWd3ZFNldEV2ZW50IEFQSSkKKgkJCUdUX0RFVl9JTlRfSkFNTElNSVQJLQoqCQkJCWFueSBvZiB0aGUgcG9ydHMgZGV0ZWN0IGFuIEluZ3Jlc3MgSmFtIExpbWl0IHZpb2xhdGlvbgoqCQkJCShzZWUgZ3BydFNldFBhdXNlTGltaXRJbiBBUEkpCioJCQlHVF9ERVZfSU5UX0RVUExFWF9NSVNNQVRDSCAtIAoqCQkJCWFueSBvZiB0aGUgcG9ydHMgZGV0ZWN0IGEgZHVwbGV4IG1pc21hdGNoIChpLmUuLCB0aGUgbG9jYWwgcG9ydCBpcyAKKgkJCQlpbiBoYWxmIGR1cGxleCBtb2RlIHdoaWxlIHRoZSBsaW5rIHBhcnRuZXIgaXMgaW4gZnVsbCBkdXBsZXggbW9kZSkKKgkJCUdUX0RFVl9JTlRfU0VSREVTX0xJTksgLSAKKgkJCQlTRVJERVMgbGluayBjaGFnZSBpbnRlcnJ1cHQuCioJCQkJQW4gaW50ZXJydXB0IG9jY3VycyB3aGVuIGEgU0VSREVTIHBvcnQgY2hhbmdlcyBsaW5rIHN0YXR1cwoqCQkJCShsaW5rIHVwIG9yIGxpbmsgZG93bikKKgkJCQoqCQlJZiBhbnkgb2YgdGhlIGFib3ZlIGV2ZW50cyBpcyBlbmFibGVkLCBHVF9ERVZJQ0VfSU5UIGludGVycnVwdCB3aWxsCioJCWJlIGFzc2VydGVkIGJ5IHRoZSBlbmFibGVkIGV2ZW50IHdoZW4gR1RfREVWX0lOVCBpcyBlbmFibGVkIHdpdGggCioJCWV2ZW50U2V0QWN0aXZlIEFQSS4KKgkJCiogSU5QVVRTOgoqCQlkZXZJbnQgLSBHVF9ERVZfSU5UCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZXZlbnRTZXREZXZJbnQKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0RFVl9FVkVOVCAgICAqZGV2SW50Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd3ZFNldEV2ZW50CioKKiBERVNDUklQVElPTjoKKgkJV2F0Y2ggRG9nIEV2ZW50LgoqCQlUaGUgZm9sbG93aW5nIFdhdGNoIERvZyBldmVudHMgYXJlIHN1cHBvcnRlZDoKKgkJCUdUX1dEX1FDICAtIFF1ZXVlIENvbnRyb2xsZXIgV2F0Y2ggRG9nIGVuYWJsZS4KKgkJCQkJCVdoZW4gZW5hYmxlZCwgdGhlIFFDJ3Mgd2F0Y2ggZG9nIGNpcmN1aXQgY2hlY2tzIGZvciBsaW5rCioJCQkJCQlsaXN0IGVycm9ycyBhbmQgYW55IGVycm9ycyBmb3VuZCBpbiB0aGUgUUMuCioJCQlHVF9XRF9FR1JFU1MgLSBFZ3Jlc3MgV2F0Y2ggRG9nIGVuYWJsZS4KKgkJCQkJCVdoZW4gZW5hYmxlZCwgZWFjaCBwb3J0J3MgZWdyZXNzIGNpcmN1aXQgY2hlY2tzIGZvciBwcm9ibGVtcwoqCQkJCQkJYmV0d2VlbiB0aGUgcG9ydCBhbmQgdGhlIFF1ZXVlIENvbnRyb2xsZXIuCioJCQlHVF9XRF9GT1JDRSAtIEZvcmNlIGEgV2F0Y2ggRG9nIGV2ZW50LgoqCQkJCioJCUlmIGFueSBvZiB0aGUgYWJvdmUgZXZlbnRzIGlzIGVuYWJsZWQsIEdUX0RFVklDRV9JTlQgaW50ZXJydXB0IHdpbGwKKgkJYmUgYXNzZXJ0ZWQgYnkgdGhlIGVuYWJsZWQgV2F0Y2hEb2cgZXZlbnQgd2hlbiBHVF9ERVZfSU5UX1dBVENIRE9HIGlzCioJCWVuYWJsZWQgd2l0aCBldmVudFNldERldkFjdGl2ZSBBUEkgYW5kIEdUX0RFVl9JTlQgaXMgZW5hYmxlZCB3aXRoIAoqCQlldmVudFNldEFjdGl2ZSBBUEkuCioJCQoqIElOUFVUUzoKKgkJd2RFdmVudCAtIFdhdGNoIERvZyBFdmVudHMKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnd2RTZXRFdmVudAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfVTMyCSAgICB3ZEV2ZW50Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd3ZFNldFNXUmVzZXRPbldECioKKiBERVNDUklQVElPTjoKKgkJU1dSZXNldCBvbiBXYXRjaCBEb2cgRXZlbnQuCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIGFueSBlbmFibGVkIHdhdGNoIGRvZyBldmVudCAoZ3dkU2V0RXZlbnQgQVBJKSAKKgkJd2lsbCBhdXRvbWF0aWNhbGx5IHJlc2V0IHRoZSBzd2l0Y2ggY29yZSdzIGRhdGFwYXRoIGp1c3QgYXMgaWYgZ3N5c1N3UmVzZXQKKgkJQVBJIGlzIGNhbGxlZC4KKgoqCQlUaGUgV2F0Y2ggRG9nIEhpc3RvcnkgKGd3ZEdldEhpc3RvcnkgQVBJKSB3b24ndCBiZSBjbGVhcmVkIGJ5IHRoaXMgCioJCWF1dG9tYXRpYyBTV1Jlc2V0LiBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBrbm93IGlmIGFueSB3YXRjaCBkb2cgZXZlbnQgCioJCWV2ZXIgb2NjdXJyZWQgZXZlbiBpZiB0aGUgc3dpY2ggaXMgY29uZmlndXJlZCB0byBhdXRvbWF0aWNhbGx5IHJlY292ZXIgCioJCWZyb20gYSB3YXRjaCBkb2cuCioKKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQsIGVuYWJsZWQgd2F0Y2ggZG9nIGV2ZW50cyB3aWxsIG5vdCBjYXVzZSBhCioJCVNXUmVzZXQuCioKKiBJTlBVVFM6CioJCWVuICAgLSBHVF9UUlVFIHRvIGVuYWJsZSBTV1Jlc2V0IG9uIFdECioJCQkgICBHVF9GQUxVU0UgdG8gZGlzYWJsZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd3ZFNldFNXUmVzZXRPbldECigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9CT09MCSAgICBlbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnd2RHZXRTV1Jlc2V0T25XRAoqCiogREVTQ1JJUFRJT046CioJCVNXUmVzZXQgb24gV2F0Y2ggRG9nIEV2ZW50LgoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBhbnkgZW5hYmxlZCB3YXRjaCBkb2cgZXZlbnQgKGd3ZFNldEV2ZW50IEFQSSkgCioJCXdpbGwgYXV0b21hdGljYWxseSByZXNldCB0aGUgc3dpdGNoIGNvcmUncyBkYXRhcGF0aCBqdXN0IGFzIGlmIGdzeXNTd1Jlc2V0CioJCUFQSSBpcyBjYWxsZWQuCioKKgkJVGhlIFdhdGNoIERvZyBIaXN0b3J5IChnd2RHZXRIaXN0b3J5IEFQSSkgd29uJ3QgYmUgY2xlYXJlZCBieSB0aGlzIAoqCQlhdXRvbWF0aWMgU1dSZXNldC4gVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8ga25vdyBpZiBhbnkgd2F0Y2ggZG9nIGV2ZW50IAoqCQlldmVyIG9jY3VycmVkIGV2ZW4gaWYgdGhlIHN3aWNoIGlzIGNvbmZpZ3VyZWQgdG8gYXV0b21hdGljYWxseSByZWNvdmVyIAoqCQlmcm9tIGEgd2F0Y2ggZG9nLgoqCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkLCBlbmFibGVkIHdhdGNoIGRvZyBldmVudHMgd2lsbCBub3QgY2F1c2UgYQoqCQlTV1Jlc2V0LgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW4gICAtIEdUX1RSVUUsIGlmIFNXUmVzZXQgb24gV0QgaXMgZW5hYmxlZAoqCQkJICAgR1RfRkFMVVNFLCBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd3ZEdldFNXUmVzZXRPbldECigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9CT09MCSAgICAqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3dkR2V0SGlzdG9yeQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaWV2ZXMgV2F0Y2ggRG9nIGhpc3RvcnkuIFRoZXkgYXJlCioKKgkJd2RFdmVudCAtIAoqCQkJV2hlbiBpdCdzIHNldCB0byBHVF9UUlVFLCBzb21lIGVuYWJsZWQgV2F0Y2ggRG9nIGV2ZW50IG9jY3VycmVkLgoqCQkJVGhlIGZvbGxvd2luZyBldmVudHMgYXJlIHBvc3NpYmxlOgoqCQkJCVFDIFdhdGNoRG9nIEV2ZW50IChHVF9XRF9RQykKKgkJCQlFZ3Jlc3MgV2F0Y2hEb2cgRXZlbnQgKEdUX1dEX0VHUkVTUykKKgkJCQlGb3JjZWQgV2F0Y2hEb2cgRXZlbnQgKEdUX1dEX0ZPUkNFKQoqCQllZ3Jlc3NFdmVudCAtCioJCQlJZiBhbnkgcG9ydCdzIGVncmVzcyBsb2dpYyBkZXRlY3RzIGFuIGVncmVzcyB3YXRjaCBkb2cgaXNzdWUsCioJCQl0aGlzIGZpZWxkIGlzIHNldCB0byBHVF9UUlVFLCByZWdhcmRsZXNzIG9mIHRoZSBlbmFibGluZyBHVF9XRF9FR1JFU1MKKgkJCWV2ZW50LgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJaGlzdG9yeSAtIEdUX1dEX0VWRU5UX0hJU1RPUlkgc3RydWN0dXJlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnd2RHZXRIaXN0b3J5CigKCUlOICBHVF9RRF9ERVYJCQkqZGV2LAoJT1VUIEdUX1dEX0VWRU5UX0hJU1RPUlkJKmhpc3RvcnkKKTsKCgovKiBndFBJUkwyLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BpcmwyV3JpdGVSZXNvdXJjZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHdyaXRlcyByZXNvdXJjZSBidWNrZXQgcGFyYW1ldGVycyB0byB0aGUgZ2l2ZW4gcmVzb3VyY2UKKgkJb2YgdGhlIHBvcnQuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQlpcmxSZXMgICAtIGJ1Y2tldCB0byBiZSB1c2VkICgwIH4gNCkuCioJCXBpcmxEYXRhIC0gUElSTCByZXNvdXJjZSBwYXJhbWV0ZXJzLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BpcmwyV3JpdGVSZXNvdXJjZQooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglJTiAgR1RfVTMyCQlpcmxSZXMsCglJTiAgR1RfUElSTDJfREFUQQkqcGlybERhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BpcmwyUmVhZFJlc291cmNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmV0cmlldmVzIElSTCBQYXJhbWV0ZXIuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAgICAgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQlpcmxSZXMgICAtIGJ1Y2tldCB0byBiZSB1c2VkICgwIH4gNCkuCioKKiBPVVRQVVRTOgoqCQlwaXJsRGF0YSAtIFBJUkwgcmVzb3VyY2UgcGFyYW1ldGVycy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwaXJsMlJlYWRSZXNvdXJjZQooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglJTiAgR1RfVTMyCQlpcmxSZXMsCglPVVQgR1RfUElSTDJfREFUQQkqcGlybERhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BpcmwyRGlzYWJsZVJlc291cmNlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZGlzYWJsZXMgSW5ncmVzcyBSYXRlIExpbWl0aW5nIGZvciB0aGUgZ2l2ZW4gYnVja2V0LgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgICAgIC0gbG9naWNhbCBwb3J0IG51bWJlci4KKgkJaXJsUmVzICAgLSBidWNrZXQgdG8gYmUgdXNlZCAoMCB+IDQpLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BpcmwyRGlzYWJsZVJlc291cmNlCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9VMzIJCWlybFJlcwopOwoKCi8qIGd0UG9saWN5LmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFBvbGljeQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgdGhlIFBvbGljeSBmb3IgcG9ydHMuCioJCVN1cHBvcnRlZCBQb2xpY2llcyBhcmUgZGVmaW5lZCBhcyBHVF9GUkFNRV9QT0xJQ1kgYXMgZm9sbG93czoKKgkJCUZSQU1FX1BPTElDWV9OT05FICAgIC0gbm9ybWFsIGZyYW1lIHN3aXRjaGluZwoqCQkJRlJBTUVfUE9MSUNZX01JUlJPUiAgLSBtaXJyb3IgKGNvcHkpIGZyYW1lIHRvIE1pcnJvckRlc3QgcG9ydAoqCQkJRlJBTUVfUE9MSUNZX1RSQVAgICAgLSB0cmFwKHJlLWRpcmVjdCkgZnJhbWUgdG8gdGhlIENQVURlc3QgcG9ydAoqCQkJRlJBTUVfUE9MSUNZX0RJU0NBUkQgLSBkaXNjYXJkKGZpbHRlcikgdGhlIGZyYW1lCioJCVN1cHBvcnRlZCBQb2xpY3kgdHlwZXMgYXJlIGRlZmluZWQgYXMgR1RfUE9MSUNZX1RZUEU6CioJCQlQT0xJQ1lfVFlQRV9EQSAtIERBIFBvbGljeSBNYXBwaW5nCioJCQkJREEgUG9saWN5IE1hcHBpbmcgb2NjdXJzIHdoZW4gdGhlIERBIG9mIGEgZnJhbWUgaXMgY29udGFpbmVkIGluIAoqCQkJCXRoZSBBVFUgYWRkcmVzcyBkYXRhYmFzZSB3aXRoIGFuIEVudHJ5IFN0YXRlIHRoYXQgaW5kaWNhdGVzIFBvbGljeS4KKgkJCVBPTElDWV9UWVBFX1NBIC0gU0EgUG9saWN5IE1hcHBpbmcKKgkJCQlTQSBQb2xpY3kgTWFwcGluZyBvY2N1cnMgd2hlbiB0aGUgU0Egb2YgYSBmcmFtZSBpcyBjb250YWluZWQgaW4gCioJCQkJdGhlIEFUVSBhZGRyZXNzIGRhdGFiYXNlIHdpdGggYW4gRW50cnkgU3RhdGUgdGhhdCBpbmRpY2F0ZXMgUG9saWN5LgoqCQkJUE9MSUNZX1RZUEVfVlRVIC0gVlRVIFBvbGljeSBNYXBwaW5nCioJCQkJVlRVIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBWSUQgb2YgYSBmcmFtZSBpcyBjb250YWluZWQgaW4KKgkJCQl0aGUgVlRVIGRhdGFiYXNlIHdpdGggdGhlIFZpZFBvbGljeSBpcyBlbmFibGVkLgoqCQkJUE9MSUNZX1RZUEVfRVRZUEUgLSBFdGhlclR5cGUgUG9saWN5IE1hcHBpbmcKKgkJCQlFVHlwZSBQb2xpY3kgTWFwcGluZyBvY2N1cnMgd2hlbiB0aGUgRXRoZXJUeXBlIG9mIGEgZnJhbWUgbWF0Y2hlcwoqCQkJCXRoZSBQb3J0RVR5cGUgKHNlZSBncHJ0U2V0UG9ydEVUeXBlIEFQSSkKKgkJCVBPTElDWV9UWVBFX1BQUG9FIC0gUFBQb0UgUG9saWN5IE1hcHBpbmcKKgkJCQlQUFBvRSBQb2xpY3kgTWFwcGluZyBvY2N1cnMgd2hlbiB0aGUgRXRoZXJUeXBlIG9mIGEgZnJhbWUgbWF0Y2hlcyAweDg4NjMKKgkJCVBPTElDWV9UWVBFX1ZCQVMgLSBWQkFTIFBvbGljeSBNYXBwaW5nCioJCQkJVkJBUyBQb2xpY3kgTWFwcGluZyBvY2N1cnMgd2hlbiB0aGUgRXRoZXJUeXBlIG9mIGEgZnJhbWUgbWF0Y2hlcyAweDgyMDAKKgkJCVBPTElDWV9UWVBFX09QVDgyIC0gREhDUCBPcHRpb24gODIgUG9saWN5IE1hcHBpbmcKKgkJCQlESENQIE9wdGlvbiA4MiBQb2xpY3kgTWFwcGluZyBvY2N1cnMgd2hlbiB0aGUgaW5ncmVzc2luZyBmcmFtZSBpcyBhbgoqCQkJCUlQdjQgVURQIHdpdGggYSBVRFAgRGVzdGluYXRpb24gcG9ydCA9IDB4MDA0MyBvciAweDAwNDQsIG9yIGFuCioJCQkJSVB2NiBVRFAgd2l0aCBhIFVEUCBEZXN0aW5hdGlvbiBwb3J0ID0gMHgwMjIzIG9yIDB4MDIyMgoqCQkJUE9MSUNZX1RZUEVfVURQIC0gVURQIFBvbGljeSBNYXBwaW5nCioJCQkJVURQIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBpbmdyZXNzaW5nIGZyYW1lIGlzCioJCQkJYSBCcm9hZGNhc3QgSVB2NCBVRFAgb3IgYSBNdWx0aWNhc3QgSVB2NiBVRFAuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydAktIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgdHlwZSAJLSBwb2xpY3kgdHlwZSAoR1RfUE9MSUNZX1RZUEUpCiogICAgICAgcG9saWN5IAktIHBvbGljeSAoR1RfRlJBTUVfUE9MSUNZKQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRQb2xpY3kKKAogICAgSU4gIEdUX1FEX0RFViAJKmRldiwKICAgIElOICBHVF9MUE9SVCAJcG9ydCwKICAgIElOICBHVF9QT0xJQ1lfVFlQRQl0eXBlLAoJSU4JR1RfRlJBTUVfUE9MSUNZCXBvbGljeQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UG9saWN5CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyB0aGUgUG9saWN5IG9mIHRoZSBnaXZlbiBwb2xpY3kgdHlwZS4KKgkJU3VwcG9ydGVkIFBvbGljaWVzIGFyZSBkZWZpbmVkIGFzIEdUX0ZSQU1FX1BPTElDWSBhcyBmb2xsb3dzOgoqCQkJRlJBTUVfUE9MSUNZX05PTkUgICAgLSBub3JtYWwgZnJhbWUgc3dpdGNoaW5nCioJCQlGUkFNRV9QT0xJQ1lfTUlSUk9SICAtIG1pcnJvciAoY29weSkgZnJhbWUgdG8gTWlycm9yRGVzdCBwb3J0CioJCQlGUkFNRV9QT0xJQ1lfVFJBUCAgICAtIHRyYXAocmUtZGlyZWN0KSBmcmFtZSB0byB0aGUgQ1BVRGVzdCBwb3J0CioJCQlGUkFNRV9QT0xJQ1lfRElTQ0FSRCAtIGRpc2NhcmQoZmlsdGVyKSB0aGUgZnJhbWUKKgkJU3VwcG9ydGVkIFBvbGljeSB0eXBlcyBhcmUgZGVmaW5lZCBhcyBHVF9QT0xJQ1lfVFlQRToKKgkJCVBPTElDWV9UWVBFX0RBIC0gREEgUG9saWN5IE1hcHBpbmcKKgkJCQlEQSBQb2xpY3kgTWFwcGluZyBvY2N1cnMgd2hlbiB0aGUgREEgb2YgYSBmcmFtZSBpcyBjb250YWluZWQgaW4gCioJCQkJdGhlIEFUVSBhZGRyZXNzIGRhdGFiYXNlIHdpdGggYW4gRW50cnkgU3RhdGUgdGhhdCBpbmRpY2F0ZXMgUG9saWN5LgoqCQkJUE9MSUNZX1RZUEVfU0EgLSBTQSBQb2xpY3kgTWFwcGluZwoqCQkJCVNBIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBTQSBvZiBhIGZyYW1lIGlzIGNvbnRhaW5lZCBpbiAKKgkJCQl0aGUgQVRVIGFkZHJlc3MgZGF0YWJhc2Ugd2l0aCBhbiBFbnRyeSBTdGF0ZSB0aGF0IGluZGljYXRlcyBQb2xpY3kuCioJCQlQT0xJQ1lfVFlQRV9WVFUgLSBWVFUgUG9saWN5IE1hcHBpbmcKKgkJCQlWVFUgUG9saWN5IE1hcHBpbmcgb2NjdXJzIHdoZW4gdGhlIFZJRCBvZiBhIGZyYW1lIGlzIGNvbnRhaW5lZCBpbgoqCQkJCXRoZSBWVFUgZGF0YWJhc2Ugd2l0aCB0aGUgVmlkUG9saWN5IGlzIGVuYWJsZWQuCioJCQlQT0xJQ1lfVFlQRV9FVFlQRSAtIEV0aGVyVHlwZSBQb2xpY3kgTWFwcGluZwoqCQkJCUVUeXBlIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBFdGhlclR5cGUgb2YgYSBmcmFtZSBtYXRjaGVzCioJCQkJdGhlIFBvcnRFVHlwZSAoc2VlIGdwcnRTZXRQb3J0RVR5cGUgQVBJKQoqCQkJUE9MSUNZX1RZUEVfUFBQb0UgLSBQUFBvRSBQb2xpY3kgTWFwcGluZwoqCQkJCVBQUG9FIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBFdGhlclR5cGUgb2YgYSBmcmFtZSBtYXRjaGVzIDB4ODg2MwoqCQkJUE9MSUNZX1RZUEVfVkJBUyAtIFZCQVMgUG9saWN5IE1hcHBpbmcKKgkJCQlWQkFTIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBFdGhlclR5cGUgb2YgYSBmcmFtZSBtYXRjaGVzIDB4ODIwMAoqCQkJUE9MSUNZX1RZUEVfT1BUODIgLSBESENQIE9wdGlvbiA4MiBQb2xpY3kgTWFwcGluZwoqCQkJCURIQ1AgT3B0aW9uIDgyIFBvbGljeSBNYXBwaW5nIG9jY3VycyB3aGVuIHRoZSBpbmdyZXNzaW5nIGZyYW1lIGlzIGFuCioJCQkJSVB2NCBVRFAgd2l0aCBhIFVEUCBEZXN0aW5hdGlvbiBwb3J0ID0gMHgwMDQzIG9yIDB4MDA0NCwgb3IgYW4KKgkJCQlJUHY2IFVEUCB3aXRoIGEgVURQIERlc3RpbmF0aW9uIHBvcnQgPSAweDAyMjMgb3IgMHgwMjIyCioJCQlQT0xJQ1lfVFlQRV9VRFAgLSBVRFAgUG9saWN5IE1hcHBpbmcKKgkJCQlVRFAgUG9saWN5IE1hcHBpbmcgb2NjdXJzIHdoZW4gdGhlIGluZ3Jlc3NpbmcgZnJhbWUgaXMKKgkJCQlhIEJyb2FkY2FzdCBJUHY0IFVEUCBvciBhIE11bHRpY2FzdCBJUHY2IFVEUC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0CS0gbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICB0eXBlIAktIHBvbGljeSB0eXBlIChHVF9QT0xJQ1lfVFlQRSkKKgoqIE9VVFBVVFM6CiogICAgICAgcG9saWN5IAktIHBvbGljeSAoR1RfRlJBTUVfUE9MSUNZKQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgICAgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAgLSBvbiBiYWQgcGFyYW1ldGVycwoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKiBHYWxUaXM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQb2xpY3kKKAogICAgSU4gIEdUX1FEX0RFViAJKmRldiwKICAgIElOICBHVF9MUE9SVCAJcG9ydCwKICAgIElOICBHVF9QT0xJQ1lfVFlQRQl0eXBlLAoJT1VUIEdUX0ZSQU1FX1BPTElDWQkqcG9saWN5Cik7CgoKLyogZ3RQb3J0Q3RybC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQYXVzZUxpbWl0T3V0CioKKiBERVNDUklQVElPTjoKKgkJTGltaXQgdGhlIG51bWJlciBvZiBjb250aW51b3VzIFBhdXNlIHJlZnJlc2ggZnJhbWVzIHRoYXQgY2FuIGJlIHRyYW5zbWl0dGVkCioJCWZyb20gdGhpcyBwb3J0LiBXaGVuIGZ1bGwgZHVwbGV4IEZsb3cgQ29udHJvbCBpcyBlbmFibGVkIG9uIHRoaXMgcG9ydCwKKgkJdGhlc2UgYml0cyBhcmUgdXNlZCB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIFBhdXNlIHJlZnJlc2ggZnJhbWVzIHRoYXQgY2FuIAoqCQliZSBnZW5lcmF0ZWQgZnJvbSB0aGlzIHBvcnQgdG8ga2VlcCB0aGlzIHBvcnQncyBsaW5rIHBhcnRuZXIgZnJvbSBzZW5kaW5nCioJCWFueSBkYXRhLgoqCQlTZXR0aW5nIHRoaXMgdmFsdWUgdG8gMCB3aWxsIGFsbG93IGNvbnRpbnVvdXMgUGF1c2UgZnJhbWUgcmVmcmVzaGVzIHRvIAoqCQllZ3Jlc3MgdGhpcyBwb3J0IGFzIGxvbmcgYXMgdGhpcyBwb3J0IHJlbWFpbnMgY29uZ2VzdGVkLgoqCQlTZXR0aW5nIHRoaXMgdmFsdWUgdG8gMSB3aWxsIGFsbG93IDEgUGF1c2UgZnJhbWUgdG8gZWdyZXNzIGZyb20gdGhpcyBwb3J0CioJCWZvciBlYWNoIGNvbmdlc3Rpb24gc2l0dWF0aW9uLgoqCQlTZXR0aW5nIHRoaXMgdmFsdWUgdG8gMiB3aWxsIGFsbG93IDIgUGF1c2UgZnJhbWVzIHRvIGVncmVzcyBmcm9tIHRoaXMgcG9ydAoqCQlmb3IgZWFjaCBjb25nZXN0aW9uIHNpdHVhdGlvbiwgZXRjLgoqCQkKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCQlsaW1pdCAtIHRoZSBtYXggbnVtYmVyIG9mIFBhdXNlIHJlZnJlc2ggZnJhbWVzIGZvciBlYWNoIGNvbmdlc3Rpb24gc2l0dWF0aW9uCioJCQkJKCAwIH4gMHhGRikKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgbGltaXQgPiAweEZGCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFBhdXNlTGltaXRPdXQKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglJTiAgR1RfVTE2CQlsaW1pdAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UGF1c2VMaW1pdE91dAoqCiogREVTQ1JJUFRJT046CioJCUxpbWl0IHRoZSBudW1iZXIgb2YgY29udGludW91cyBQYXVzZSByZWZyZXNoIGZyYW1lcyB0aGF0IGNhbiBiZSB0cmFuc21pdHRlZAoqCQlmcm9tIHRoaXMgcG9ydC4gV2hlbiBmdWxsIGR1cGxleCBGbG93IENvbnRyb2wgaXMgZW5hYmxlZCBvbiB0aGlzIHBvcnQsCioJCXRoZXNlIGJpdHMgYXJlIHVzZWQgdG8gbGltaXQgdGhlIG51bWJlciBvZiBQYXVzZSByZWZyZXNoIGZyYW1lcyB0aGF0IGNhbiAKKgkJYmUgZ2VuZXJhdGVkIGZyb20gdGhpcyBwb3J0IHRvIGtlZXAgdGhpcyBwb3J0J3MgbGluayBwYXJ0bmVyIGZyb20gc2VuZGluZwoqCQlhbnkgZGF0YS4KKgkJU2V0dGluZyB0aGlzIHZhbHVlIHRvIDAgd2lsbCBhbGxvdyBjb250aW51b3VzIFBhdXNlIGZyYW1lIHJlZnJlc2hlcyB0byAKKgkJZWdyZXNzIHRoaXMgcG9ydCBhcyBsb25nIGFzIHRoaXMgcG9ydCByZW1haW5zIGNvbmdlc3RlZC4KKgkJU2V0dGluZyB0aGlzIHZhbHVlIHRvIDEgd2lsbCBhbGxvdyAxIFBhdXNlIGZyYW1lIHRvIGVncmVzcyBmcm9tIHRoaXMgcG9ydAoqCQlmb3IgZWFjaCBjb25nZXN0aW9uIHNpdHVhdGlvbi4KKgkJU2V0dGluZyB0aGlzIHZhbHVlIHRvIDIgd2lsbCBhbGxvdyAyIFBhdXNlIGZyYW1lcyB0byBlZ3Jlc3MgZnJvbSB0aGlzIHBvcnQKKgkJZm9yIGVhY2ggY29uZ2VzdGlvbiBzaXR1YXRpb24sIGV0Yy4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQlsaW1pdCAtIHRoZSBtYXggbnVtYmVyIG9mIFBhdXNlIHJlZnJlc2ggZnJhbWVzIGZvciBlYWNoIGNvbmdlc3Rpb24gc2l0dWF0aW9uCioJCQkJKCAwIH4gMHhGRikKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRHZXRQYXVzZUxpbWl0T3V0CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX1UxNgkJKmxpbWl0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRQYXVzZUxpbWl0SW4KKgoqIERFU0NSSVBUSU9OOgoqCQlMaW1pdCB0aGUgbnVtYmVyIG9mIGNvbnRpbnVvdXMgUGF1c2UgcmVmcmVzaCBmcmFtZXMgdGhhdCBjYW4gYmUgcmVjZWl2ZWQKKgkJb24gdGhpcyBwb3J0LiBXaGVuIGEgcG9ydCBoYXMgZmxvdyBDb250cm9sIGVuYWJsZWQsIHRoaXMgdmFsdWUgY2FuIGJlIAoqCQl1c2VkIHRvIGxpbWl0IGhvdyBsb25nIHRoaXMgcG9ydCBjYW4gYmUgUGF1c2VkIG9mZiB0byBwcmV2ZW50IGEgcG9ydCBzdGFsbAoqCQl0aHJvdWdoIGphbW1pbmcuCioJCVdoZW4gdGhpcyB2YWx1ZSBpcyBpbiB0aGUgcmFuZ2Ugb2YgMHgwMSB0byAweEZGLCBhbmQgYSBmcmFtZSBpcyByZWFkeSB0bwoqCQliZSB0cmFuc21pdHRlZCBvdXQgdGhpcyBwb3J0LCBidXQgaXQgY2Fubm90IGJlIHRyYW5zbWl0dGVkIGR1ZSB0byB0aGUgcG9ydAoqCQliZWluZyBqYW1tZWQsIHRoaXMgbGltaXQgbWVjaGFuaXNtIHN0YXJ0cy4gVGhlIGxpbWl0IG1lY2hhbmlzbSBzdGFydHMgCioJCWNvdW50aW5nIG5ldyBQYXVzZSByZWZyZXNoIGZyYW1lcyBvciBjb3VudHMgb2YgMTYgY29uc2VjdXRpdmUgY29sbGlzaW9ucy4KKgkJSWYgdGhlIGNvdW50ZXIgcmVhY2hlcyB0aGUgdmFsdWUgc2V0IHRocm91Z2ggdGhpcyBBUEksIHRoZSBmb2xsb3dpbmcgZXZlbnQKKgkJd2lsbCBvY2N1cjoKKgkJCTEpIFBvcnQncyBGb3JjZUZDIGlzIGVuYWJsZWQsCioJCQkyKSBQb3J0J3MgRkNWYWx1ZSBpcyBjbGVhcmVkIHRvIGEgemVybywgYW5kCioJCQkzKSBKYW0gTGltaXQgSW50ZXJydXB0IGlzIGFzc2VydGVkLgoqCQlUaGlzIGVmZmVjdGl2ZWx5IGRpc2FibGVzIEZsb3cgQ29udHJvbCBvbiB0aGUgcG9ydCBvbmNlIHRoZSBQYXVzZSB0aW1lciAKKgkJZXhwaXJlcy4gSWYgYSBmcmFtZSBnZXRzIHRyYW5zbWl0dGVkIG91dCB0aGlzIHBvcnQgYmVmb3JlIHRoZSBjb3VudGVyCioJCXJlYWNoZXMgdGhpcyBsaW1pdCwgdGhlbiB0aGlzIGxpbWl0IG1lY2hhbmlzbSBjb3VudGVyIHJlc2V0cyBiYWNrIHRvIHplcm8uCioKKgkJU2V0dGluZyB0aGlzIHZhbHVlIHRvIDAgd2lsbCBhbGxvdyBjb250aW51b3VzIGphbW1pbmcgdG8gYmUgcmVjZWl2ZWQgb24gCioJCXRoaXMgcG9ydCB3aXRob3V0IHRoZSBQb3J0J3MgRm9yY2VGQyBhbmQgRkNWYWx1ZSBnZXR0aW5nIG1vZGlmaWVkLgoqCioJCVRoZSBtb2RpZmljYXRpb24gb2YgUG9ydCdzIEZvcmNlRkMgYW5kIEZDVmFsdWUgaXMgdGhlIG9ubHkgaW5kaWNhdGlvbiB0aGF0IAoqCQl0aGUgbGltaXQgd2FzIHJlYWNoZWQgb24gdGhpcyBwb3J0LgoqCQkKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCQlsaW1pdCAtIHRoZSBtYXggbnVtYmVyIG9mIGNvbnRpbnVvdXMgUGF1c2UgcmVmcmVzaCBmcmFtZXMgZm9yIGVhY2ggdHJhc21pdGlvbgoqCQkJCSggMCB+IDB4RkYpCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGxpbWl0ID4gMHhGRgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXRQYXVzZUxpbWl0SW4KKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglJTiAgR1RfVTE2CQlsaW1pdAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UGF1c2VMaW1pdEluCioKKiBERVNDUklQVElPTjoKKgkJTGltaXQgdGhlIG51bWJlciBvZiBjb250aW51b3VzIFBhdXNlIHJlZnJlc2ggZnJhbWVzIHRoYXQgY2FuIGJlIHJlY2VpdmVkCioJCW9uIHRoaXMgcG9ydC4gV2hlbiBhIHBvcnQgaGFzIGZsb3cgQ29udHJvbCBlbmFibGVkLCB0aGlzIHZhbHVlIGNhbiBiZSAKKgkJdXNlZCB0byBsaW1pdCBob3cgbG9uZyB0aGlzIHBvcnQgY2FuIGJlIFBhdXNlZCBvZmYgdG8gcHJldmVudCBhIHBvcnQgc3RhbGwKKgkJdGhyb3VnaCBqYW1taW5nLgoqCQlXaGVuIHRoaXMgdmFsdWUgaXMgaW4gdGhlIHJhbmdlIG9mIDB4MDEgdG8gMHhGRiwgYW5kIGEgZnJhbWUgaXMgcmVhZHkgdG8KKgkJYmUgdHJhbnNtaXR0ZWQgb3V0IHRoaXMgcG9ydCwgYnV0IGl0IGNhbm5vdCBiZSB0cmFuc21pdHRlZCBkdWUgdG8gdGhlIHBvcnQKKgkJYmVpbmcgamFtbWVkLCB0aGlzIGxpbWl0IG1lY2hhbmlzbSBzdGFydHMuIFRoZSBsaW1pdCBtZWNoYW5pc20gc3RhcnRzIAoqCQljb3VudGluZyBuZXcgUGF1c2UgcmVmcmVzaCBmcmFtZXMgb3IgY291bnRzIG9mIDE2IGNvbnNlY3V0aXZlIGNvbGxpc2lvbnMuCioJCUlmIHRoZSBjb3VudGVyIHJlYWNoZXMgdGhlIHZhbHVlIHNldCB0aHJvdWdoIHRoaXMgQVBJLCB0aGUgZm9sbG93aW5nIGV2ZW50CioJCXdpbGwgb2NjdXI6CioJCQkxKSBQb3J0J3MgRm9yY2VGQyBpcyBlbmFibGVkLAoqCQkJMikgUG9ydCdzIEZDVmFsdWUgaXMgY2xlYXJlZCB0byBhIHplcm8sIGFuZAoqCQkJMykgSmFtIExpbWl0IEludGVycnVwdCBpcyBhc3NlcnRlZC4KKgkJVGhpcyBlZmZlY3RpdmVseSBkaXNhYmxlcyBGbG93IENvbnRyb2wgb24gdGhlIHBvcnQgb25jZSB0aGUgUGF1c2UgdGltZXIgCioJCWV4cGlyZXMuIElmIGEgZnJhbWUgZ2V0cyB0cmFuc21pdHRlZCBvdXQgdGhpcyBwb3J0IGJlZm9yZSB0aGUgY291bnRlcgoqCQlyZWFjaGVzIHRoaXMgbGltaXQsIHRoZW4gdGhpcyBsaW1pdCBtZWNoYW5pc20gY291bnRlciByZXNldHMgYmFjayB0byB6ZXJvLgoqCioJCVNldHRpbmcgdGhpcyB2YWx1ZSB0byAwIHdpbGwgYWxsb3cgY29udGludW91cyBqYW1taW5nIHRvIGJlIHJlY2VpdmVkIG9uIAoqCQl0aGlzIHBvcnQgd2l0aG91dCB0aGUgUG9ydCdzIEZvcmNlRkMgYW5kIEZDVmFsdWUgZ2V0dGluZyBtb2RpZmllZC4KKgoqCQlUaGUgbW9kaWZpY2F0aW9uIG9mIFBvcnQncyBGb3JjZUZDIGFuZCBGQ1ZhbHVlIGlzIHRoZSBvbmx5IGluZGljYXRpb24gdGhhdCAKKgkJdGhlIGxpbWl0IHdhcyByZWFjaGVkIG9uIHRoaXMgcG9ydC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQlsaW1pdCAtIHRoZSBtYXggbnVtYmVyIG9mIGNvbnRpbnVvdXMgUGF1c2UgcmVmcmVzaCBmcmFtZXMgZm9yIGVhY2ggdHJhc21pdGlvbgoqCQkJCSggMCB+IDB4RkYpCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UGF1c2VMaW1pdEluCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX1UxNgkJKmxpbWl0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRGcmFtZU1vZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlGcm1hZSBNb2RlIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBleHBlY3RlZCBJbmdyZXNzIGFuZCB0aGUgZ2VuZXJhdGVkIEVncmVzcwoqCQl0YWdnaW5nIGZyYW1lIGZvcm1hdCBmb3IgdGhpcyBwb3J0IGFzIGZvbGxvd3M6CioJCQlHVF9GUkFNRV9NT0RFX05PUk1BTCAtCioJCQkJTm9ybWFsIE5ldHdvcmsgbW9kZSB1c2VzIGluZHVzdHJ5IHN0YW5kYXJkIElFRUUgODAyLjNhYyBUYWdnZWQgb3IgCioJCQkJVW50YWdnZWQgZnJhbWVzLiBUYWdnZWQgZnJhbWVzIHVzZSBhbiBFdGhlciBUeXBlIG9mIDB4ODEwMC4KKgkJCUdUX0ZSQU1FX01PREVfRFNBIC0KKgkJCQlEU0EgbW9kZSB1c2VzIGEgTWFydmVsbCBkZWZpbmVkIHRhZ2dlZCBmcmFtZSBmb3JtYXQgZm9yIAoqCQkJCUNoaXAtdG8tQ2hpcCBhbmQgQ2hpcC10by1DUFUgY29ubmVjdGlvbnMuCioJCQlHVF9GUkFNRV9NT0RFX1BST1ZJREVSIC0KKgkJCQlQcm92aWRlciBtb2RlIHVzZXMgdXNlciBkZWZpbmFibGUgRXRoZXIgVHlwZXMgcGVyIHBvcnQgCioJCQkJKHNlZSBncHJ0U2V0UG9ydEVUeXBlL2dwcnRHZXRQb3J0RVR5cGUgQVBJKS4KKgkJCUdUX0ZSQU1FX01PREVfRVRIRVJfVFlQRV9EU0EgLQoqCQkJCUV0aGVyIFR5cGUgRFNBIG1vZGUgdXNlcyBzdGFuZGFyZCBNYXJ2ZWxsIERTQSBUYWdnZWQgZnJhbWUgaW5mbyAKKgkJCQlmbG93aW5nIGEgdXNlciBkZWZpbmFibGUgRXRoZXIgVHlwZS4gVGhpcyBtb2RlIGFsbG93cyB0aGUgbWl4dHVyZQoqCQkJCW9mIE5vcm1hbCBOZXR3b3JrIGZyYW1lcyB3aXRoIERTQSBUYWdnZWQgZnJhbWVzIGFuZCBpcyB1c2VmdWwgdG8gCioJCQkJYmUgdXNlZCBvbiBwb3J0cyB0aGF0IGNvbm5lY3QgdG8gYSBDUFUuCioJCQoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCW1vZGUgLSBHVF9GUkFNRV9NT0RFIHR5cGUKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgbW9kZSBpcyB1bmtub3duCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldEZyYW1lTW9kZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9GUkFNRV9NT0RFCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEZyYW1lTW9kZQoqCiogREVTQ1JJUFRJT046CioJCUZybWFlIE1vZGUgaXMgdXNlZCB0byBkZWZpbmUgdGhlIGV4cGVjdGVkIEluZ3Jlc3MgYW5kIHRoZSBnZW5lcmF0ZWQgRWdyZXNzCioJCXRhZ2dpbmcgZnJhbWUgZm9ybWF0IGZvciB0aGlzIHBvcnQgYXMgZm9sbG93czoKKgkJCUdUX0ZSQU1FX01PREVfTk9STUFMIC0KKgkJCQlOb3JtYWwgTmV0d29yayBtb2RlIHVzZXMgaW5kdXN0cnkgc3RhbmRhcmQgSUVFRSA4MDIuM2FjIFRhZ2dlZCBvciAKKgkJCQlVbnRhZ2dlZCBmcmFtZXMuIFRhZ2dlZCBmcmFtZXMgdXNlIGFuIEV0aGVyIFR5cGUgb2YgMHg4MTAwLgoqCQkJR1RfRlJBTUVfTU9ERV9EU0EgLQoqCQkJCURTQSBtb2RlIHVzZXMgYSBNYXJ2ZWxsIGRlZmluZWQgdGFnZ2VkIGZyYW1lIGZvcm1hdCBmb3IgCioJCQkJQ2hpcC10by1DaGlwIGFuZCBDaGlwLXRvLUNQVSBjb25uZWN0aW9ucy4KKgkJCUdUX0ZSQU1FX01PREVfUFJPVklERVIgLQoqCQkJCVByb3ZpZGVyIG1vZGUgdXNlcyB1c2VyIGRlZmluYWJsZSBFdGhlciBUeXBlcyBwZXIgcG9ydCAKKgkJCQkoc2VlIGdwcnRTZXRQb3J0RVR5cGUvZ3BydEdldFBvcnRFVHlwZSBBUEkpLgoqCQkJR1RfRlJBTUVfTU9ERV9FVEhFUl9UWVBFX0RTQSAtCioJCQkJRXRoZXIgVHlwZSBEU0EgbW9kZSB1c2VzIHN0YW5kYXJkIE1hcnZlbGwgRFNBIFRhZ2dlZCBmcmFtZSBpbmZvIAoqCQkJCWZsb3dpbmcgYSB1c2VyIGRlZmluYWJsZSBFdGhlciBUeXBlLiBUaGlzIG1vZGUgYWxsb3dzIHRoZSBtaXh0dXJlCioJCQkJb2YgTm9ybWFsIE5ldHdvcmsgZnJhbWVzIHdpdGggRFNBIFRhZ2dlZCBmcmFtZXMgYW5kIGlzIHVzZWZ1bCB0byAKKgkJCQliZSB1c2VkIG9uIHBvcnRzIHRoYXQgY29ubmVjdCB0byBhIENQVS4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gR1RfRlJBTUVfTU9ERSB0eXBlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0RnJhbWVNb2RlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0ZSQU1FX01PREUJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldEhvbGRBdDEKKgoqIERFU0NSSVBUSU9OOgoqCQlIb2xkIEFnaW5nIEFUVSBFbnRyaWVzIGF0IGFuIEVudHJ5IFN0YXRlIHZhbHVlIG9mIDEuIFdoZW4gdGhpcyBmZWF0dXJlCioJCWlzIHNldCB0byBHVF9UUlVFLCBBVFUgZW50cmllcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwb3J0IHdpbGwgYWdlIGRvd24gCioJCXRvIGFuIEVudHJ5IFN0YXRlIG9mIDB4MSwgYnV0IHdpbGwgbm90IGdvIHRvIDB4MCAoMHgwIHdvdWxkIHB1cmdlIHRoZQoqCQllbnRyeSkKKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSB0byBob2xkIGFnaW5nIEFUVSBlbnRyeSB3aXRoIEVudHJ5IFN0YXRlIG9mIDEsIAoqCQkJICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldEhvbGRBdDEKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEhvbGRBdDEKKgoqIERFU0NSSVBUSU9OOgoqCQlIb2xkIEFnaW5nIEFUVSBFbnRyaWVzIGF0IGFuIEVudHJ5IFN0YXRlIHZhbHVlIG9mIDEuIFdoZW4gdGhpcyBmZWF0dXJlCioJCWlzIHNldCB0byBHVF9UUlVFLCBBVFUgZW50cmllcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwb3J0IHdpbGwgYWdlIGRvd24gCioJCXRvIGFuIEVudHJ5IFN0YXRlIG9mIDB4MSwgYnV0IHdpbGwgbm90IGdvIHRvIDB4MCAoMHgwIHdvdWxkIHB1cmdlIHRoZQoqCQllbnRyeSkKKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBHVF9UUlVFIHRvIGhvbGQgYWdpbmcgQVRVIGVudHJ5IHdpdGggRW50cnkgU3RhdGUgb2YgMSwgCioJCQkgICBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEhvbGRBdDEKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTCAgCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRTZXRSZWZyZXNoTG9ja2VkCioKKiBERVNDUklQVElPTjoKKgkJQXV0byBSZWZyZXNoIGtub3duIGFkZHJlc3NlcyB3aGVuIHBvcnQgaXMgTG9ja2VkLiBBbHJlYWR5IGtub3duIGFkZHJlc3NlcyAKKgkJd2lsbCBiZSBhdXRvIHJlZnJlc2hlZCB3aGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLiBXaGVuIHRoaXMgZmVhdHVyZQoqCQlpcyBkaXNhYmxlZCwgYXV0byByZWZyZXNoaW5nIHdpbGwgbm90IG9jY3VyIG9uIExvY2tlZCBwb3J0cy4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCQltb2RlIC0gR1RfVFJVRSB0byBlbmFibGUgQXV0byBSZWZyZXNoIGtub3duIGFkZHJlc3NlcyBvbiBsb2NrZWQgcG9ydAoqCQkJICAgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFJlZnJlc2hMb2NrZWQKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVCAJcG9ydCwKCUlOIEdUX0JPT0wJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFJlZnJlc2hMb2NrZWQKKgoqIERFU0NSSVBUSU9OOgoqCQlBdXRvIFJlZnJlc2gga25vd24gYWRkcmVzc2VzIHdoZW4gcG9ydCBpcyBMb2NrZWQuIEFscmVhZHkga25vd24gYWRkcmVzc2VzIAoqCQl3aWxsIGJlIGF1dG8gcmVmcmVzaGVkIHdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQuIFdoZW4gdGhpcyBmZWF0dXJlCioJCWlzIGRpc2FibGVkLCBhdXRvIHJlZnJlc2hpbmcgd2lsbCBub3Qgb2NjdXIgb24gTG9ja2VkIHBvcnRzLgoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJbW9kZSAtIEdUX1RSVUUgdG8gZW5hYmxlIEF1dG8gUmVmcmVzaCBrbm93biBhZGRyZXNzZXMgb24gbG9ja2VkIHBvcnQKKgkJCSAgIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UmVmcmVzaExvY2tlZAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MICAJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldFBvcnRFVHlwZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIHRoZSBwb3J0J3Mgc3BlY2lhbCBFdGhlciBUeXBlLiBUaGlzIEV0aGVyIFR5cGUgaXMgdXNlZAoqCQlmb3IgUG9saWN5IChzZWUgZ3BydFNldFBvbGljeSBBUEkpIGFuZCBGcmFtZU1vZGUgKHNlZSBncHJ0U2V0RnJhbWVNb2RlIEFQSSkuCioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJZXR5cGUgLSBwb3J0J3Mgc3BlY2lhbCBldGhlciB0eXBlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydFNldFBvcnRFVHlwZQooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0xQT1JUCQlwb3J0LAoJSU4gR1RfRVRZUEUJCWV0eXBlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwcnRHZXRQb3J0RVR5cGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cmlldmVzIHRoZSBwb3J0J3Mgc3BlY2lhbCBFdGhlciBUeXBlLiBUaGlzIEV0aGVyIFR5cGUgaXMgdXNlZAoqCQlmb3IgUG9saWN5IChzZWUgZ3BydFNldFBvbGljeSBBUEkpIGFuZCBGcmFtZU1vZGUgKHNlZSBncHJ0U2V0RnJhbWVNb2RlIEFQSSkuCioKKiBJTlBVVFM6CioJCXBvcnQgIC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCWV0eXBlIC0gcG9ydCdzIHNwZWNpYWwgZXRoZXIgdHlwZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFBvcnRFVHlwZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9FVFlQRQkqZXR5cGUKKTsKCgovKiBndFBvcnRSYXRlQ3RyLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjU2V0RnJhbWVPdmVyaGVhZAoqCiogREVTQ1JJUFRJT046CiogICAgICAgRWdyZXNzIHJhdGUgZnJhbWUgb3ZlcmhlYWQgYWRqdXN0bWVudC4KKgkJVGhpcyBmaWVsZCBpcyB1c2VkIHRvIGFkanVzdCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgbmVlZCB0byBiZSBhZGRlZCB0byBhCioJCWZyYW1lJ3MgSUZHIG9uIGEgcGVyIGZyYW1lIGJhc2lzLgoqCioJCVRoZSBlZ3Jlc3MgcmF0ZSBsaW1pdGVyIG11bHRpcGxpZXMgdGhlIHZhbHVlIHByb2dyYW1tZWQgaW4gdGhpcyBmaWVsZCBieSBmb3VyCioJCWZvciBjb21wdXRpbmcgdGhlIGZyYW1lIGJ5dGUgb2Zmc2V0IGFkanVzdG1lbnQgdmFsdWUgKGkuZS4sIHRoZSBhbW91bnQgdGhlCioJCUlQRyBpcyBpbmNyZWFzZWQgZm9yIGV2ZXJ5IGZyYW1lKS4gVGhpcyBhZGp1c3RtZW50LCBpZiBlbmFibGVkLCBpcyBtYWRlIHRvCioJCWV2ZXJ5IGVncmVzc2luZyBmcmFtZSdzIElQRyBhbmQgaXQgaXMgbWFkZSBpbiBhZGRpdGlvbiB0byBhbnkgb3RoZXIgSVBHCioJCWFkanVzdG1lbnRzIGR1ZSB0byBvdGhlciBFZ3Jlc3MgUmF0ZSBDb250cm9sIHNldHRpbmdzLgoqCioJCVRoZSBlZ3Jlc3Mgb3ZlcmhlYWQgYWRqdXN0bWVudCBjYW4gYWRkIHRoZSBmb2xsb3dpbmcgbnVtYmVyIG9mIGJ5dGUgdGltZXMKKgkJdG8gZWFjaCBmcmFtZSdzIElQRzogMCwgNCwgOCwgMTIsIDE2LCAyMCwgMjQsIDI4LCAzMiwgMzYsIDQwLCA0NCwgNDgsIDUyLAoqCQk1NiBhbmQgNjAuCioKKgkJRXhhbXBsZToKKgkJSWYgRnJhbWVPdmVyaGVhZCA9IDExLCB0aGUgZWdyZXNzIHJhdGUgbGltaXRlciB3b3VsZCBpbmNyZWFzZSB0aGUgSVBHCioJCWJldHdlZW4gZXZlcnkgZnJhbWUgYnkgYW4gYWRkaXRpb25hbCA0NCBieXRlcy4KKgoqCQlOb3RlOiBXaGVuIHRoZSBDb3VudCBNb2RlIChwb3J0IG9mZnNldCAweDBBKSBpcyBpbiBGcmFtZSBiYXNlZCBlZ3Jlc3MgcmF0ZQoqCQlzaGFwaW5nIG1vZGUsIHRoZXNlIEZyYW1lIE92ZXJoZWFkIGJpdHMgbXVzdCBiZSAweDAuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydAkgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIG92ZXJoZWFkIC0gRnJhbWUgb3ZlcmhlYWQgKDAgfiAxNSkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9CQURfUEFSQU0gICAgICAgIC0gb24gYmFkIHBhcmFtZXRlcnMKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNTZXRGcmFtZU92ZXJoZWFkCigKICAgIElOIEdUX1FEX0RFVgkJKmRldiwKICAgIElOIEdUX0xQT1JUCQkJcG9ydCwKICAgIElOIEdUXzMyCQkJb3ZlcmhlYWQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3JjR2V0RnJhbWVPdmVyaGVhZAoqCiogREVTQ1JJUFRJT046CiogICAgICAgRWdyZXNzIHJhdGUgZnJhbWUgb3ZlcmhlYWQgYWRqdXN0bWVudC4KKgkJVGhpcyBmaWVsZCBpcyB1c2VkIHRvIGFkanVzdCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgbmVlZCB0byBiZSBhZGRlZCB0byBhCioJCWZyYW1lJ3MgSUZHIG9uIGEgcGVyIGZyYW1lIGJhc2lzLgoqCioJCVRoZSBlZ3Jlc3MgcmF0ZSBsaW1pdGVyIG11bHRpcGxpZXMgdGhlIHZhbHVlIHByb2dyYW1tZWQgaW4gdGhpcyBmaWVsZCBieSBmb3VyCioJCWZvciBjb21wdXRpbmcgdGhlIGZyYW1lIGJ5dGUgb2Zmc2V0IGFkanVzdG1lbnQgdmFsdWUgKGkuZS4sIHRoZSBhbW91bnQgdGhlCioJCUlQRyBpcyBpbmNyZWFzZWQgZm9yIGV2ZXJ5IGZyYW1lKS4gVGhpcyBhZGp1c3RtZW50LCBpZiBlbmFibGVkLCBpcyBtYWRlIHRvCioJCWV2ZXJ5IGVncmVzc2luZyBmcmFtZSdzIElQRyBhbmQgaXQgaXMgbWFkZSBpbiBhZGRpdGlvbiB0byBhbnkgb3RoZXIgSVBHCioJCWFkanVzdG1lbnRzIGR1ZSB0byBvdGhlciBFZ3Jlc3MgUmF0ZSBDb250cm9sIHNldHRpbmdzLgoqCioJCVRoZSBlZ3Jlc3Mgb3ZlcmhlYWQgYWRqdXN0bWVudCBjYW4gYWRkIHRoZSBmb2xsb3dpbmcgbnVtYmVyIG9mIGJ5dGUgdGltZXMKKgkJdG8gZWFjaCBmcmFtZSdzIElQRzogMCwgNCwgOCwgMTIsIDE2LCAyMCwgMjQsIDI4LCAzMiwgMzYsIDQwLCA0NCwgNDgsIDUyLAoqCQk1NiBhbmQgNjAuCioKKgkJRXhhbXBsZToKKgkJSWYgRnJhbWVPdmVyaGVhZCA9IDExLCB0aGUgZWdyZXNzIHJhdGUgbGltaXRlciB3b3VsZCBpbmNyZWFzZSB0aGUgSVBHCioJCWJldHdlZW4gZXZlcnkgZnJhbWUgYnkgYW4gYWRkaXRpb25hbCA0NCBieXRlcy4KKgoqCQlOb3RlOiBXaGVuIHRoZSBDb3VudCBNb2RlIChwb3J0IG9mZnNldCAweDBBKSBpcyBpbiBGcmFtZSBiYXNlZCBlZ3Jlc3MgcmF0ZQoqCQlzaGFwaW5nIG1vZGUsIHRoZXNlIEZyYW1lIE92ZXJoZWFkIGJpdHMgbXVzdCBiZSAweDAuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydAktIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqICAgICAgIG92ZXJoZWFkIC0gRnJhbWUgb3ZlcmhlYWQgKDAgfiAxNSkKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgICAgICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncmNHZXRGcmFtZU92ZXJoZWFkCigKICAgIElOIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUIHBvcnQsCiAgICBPVVQgR1RfMzIgICAgKm92ZXJoZWFkCik7CgoKLyogZ3RQb3J0U3RhdHVzLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEJ1ZkhpZ2gKKgoqIERFU0NSSVBUSU9OOgoqCQlPdXRwdXQgZnJvbSBRQyB0ZWxsaW5nIHRoZSBNQUMgdGhhdCBpdCBzaG91bGQgcGVyZm9ybSBGbG93IENvbnRyb2wuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKgkJYnVmSGlnaCAtIEdUX1RSVUUsIGlmIEZsb3cgY29udHJvbCByZXF1aXJlZAoqCQkJCSAgR1RfRkFMU0UsIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEJ1ZkhpZ2gKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTAkJKmJ1ZkhpZ2gKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldEZjRW4KKgoqIERFU0NSSVBUSU9OOgoqCQlJbnB1dCBpbnRvIHRoZSBRQyB0ZWxsaW5nIGl0IHRoYXQgRmxvdyBDb250cm9sIGlzIGVuYWJsZWQgb24gdGhpcyBwb3J0LgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCWZjRW4gLSBHVF9UUlVFLCBpZiBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZAoqCQkJICAgR1RfRkFMU0UsIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldEZjRW4KKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTAkJKmZjRW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydEdldFJzdlNpemUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBJbmdyZXNzIHJlc2VydmVkIHF1ZXVlIHNpemUgY291bnRlci4KKgkJVGhpcyBjb3VudGVyIHJlZmxlY3RzIHRoZSBjdXJyZW50IG51bWJlciBvZiByZXNlcnZlZCBpbmdyZXNzIGJ1ZmZlcnMgCioJCWFzc2lnbmVkIHRvIHRoaXMgcG9ydC4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQljb3VudCAtIHJlc2VydmVkIGluZ3Jlc3MgcXVldWUgc2l6ZSBjb3VudGVyIHZhbHVlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6IAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0UnN2U2l6ZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9VMTYJCSpjb3VudAopOwoKCi8qIGd0UHJpVGFibGUuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UVByaU92ZXJyaWRlVGFibGUKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlLgoqCQlXaGVuIGEgZnJhbWUgZW50ZXJzIGEgcG9ydCwgaXRzIHR5cGUgaXMgZGV0ZXJtaW5lZCBhbmQgdGhlIHR5cGUgaXMgdXNlZCAKKgkJdG8gYWNjZXNzIHRoZSBRdWV1ZSBQcmlvcml0eSBUYWJsZS4gSWYgdGhlIHR5cGUncyBxUHJpRW4gKGluIEdUX1FQUklfVEJMX0VOVFJZCioJCXN0cnVjdHVyZSkgaXMgZW5hYmxlZCwgdGhlbiB0aGUgZnJhbWUncyBRdWV1ZSBQcmlvcml0eSB3aWxsIGJlIG92ZXJyaWRkZW4KKgkJd2l0aCB0aGUgdmFsdWUgd3JpdHRlbiBpbiBxUHJpb3JpdHkgKGluIEdUX1FQUklfVEJMX0VOVFJZIHN0cnVjdHVyZSkuCioJCUZyYW1lIFR5cGVzIHN1cHBvcnRlZCBhcmU6CioJCQlGVFlQRV9EU0FfVE9fQ1BVX0JQRFUgLQoqCQkJCVVzZWQgb24gbXVsdGljYXN0IERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MCAoQlBEVS9NR01UKS4KKgkJCQlOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9GMlIgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgxIChGcmFtZSB0byBSZWdpc3RlcgoqCQkJCVJlcGx5KS4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9UT19DUFVfSUdNUCAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDIgKElHTVAvTUxEIFRyYXApCioJCQkJYW5kIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgSUdNUCBvciBNTEQgdHJhcHBlZAoqCQkJRlRZUEVfRFNBX1RPX0NQVV9UUkFQIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MyAoUG9saWN5IFRyYXApIGFuZAoqCQkJCW9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgUG9saWN5IFRyYXBwZWQKKgkJCUZUWVBFX0RTQV9UT19DUFVfQVJQIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4NCAoQVJQIE1pcnJvcikgYW5kCioJCQkJb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBBUlAgTWlycm9yZWQgKHNlZSBncHJ0U2V0QVJQdG9DUFUgQVBJKS4KKgkJCUZUWVBFX0RTQV9UT19DUFVfTUlSUk9SIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4NSAoUG9saWN5IE1pcnJvcikgYW5kCioJCQkJb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBQb2xpY3kgTWlycm9yZWQgKHNlZSBncHJ0U2V0UG9saWN5IEFQSSkuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX1JFU0VSVkVEIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4NiAoUmVzZXJ2ZWQpLiBOb3QKKgkJCQl1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX1VDQVNUX01HTVQgLQoqCQkJCVVzZWQgb24gdW5pY2FzdCBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDAgKHVuaWNhc3QKKgkJCQlNR01UKS4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9GUk9NX0NQVSAtCioJCQkJVXNlZCBvbiBEU0EgRnJvbV9DUFUgZnJhbWVzLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWUKKgkJCUZUWVBFX0RTQV9DUk9TU19DSElQX0ZDIC0KKgkJCQlVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEZsb3cgQ29udHJvbCBmcmFtZXMgKFRvX1NuaWZmZXIgRmxvdwoqCQkJCUNvbnRyb2wpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX0NST1NTX0NISVBfRUdSRVNTX01PTiAtCioJCQkJVXNlZCBvbiBEU0EgQ3Jvc3MgQ2hpcCBFZ3Jlc3MgTW9uaXRvciBmcmFtZXMgKFRvX1NuaWZmZXIgVHgpLgoqCQkJCU5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfQ1JPU1NfQ0hJUF9JTkdSRVNTX01PTiAtCioJCQkJVXNlZCBvbiBEU0EgQ3Jvc3MgQ2hpcCBJbmdyZXNzIE1vbml0b3IgZnJhbWVzIChUb19TbmlmZmVyIFJ4KS4KKgkJCQlOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfUE9SVF9FVFlQRV9NQVRDSCAtCioJCQkJVXNlZCBvbiBub3JtYWwgbmV0d29yayBwb3J0cyAoc2VlIGdwcnRTZXRGcmFtZU1vZGUgQVBJKQoqCQkJCW9uIGZyYW1lcyB3aG9zZSBFdGhlcnR5cGUgbWF0Y2hlcyB0aGUgcG9ydCdzIFBvcnRFVHlwZSByZWdpc3Rlci4KKgkJCQlOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfQkNBU1RfTk9OX0RTQV9DT05UUk9MIC0KKgkJCQlVc2VkIG9uIE5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBjb250YWluIGEgQnJvYWRjYXN0CioJCQkJZGVzdGluYXRpb24gYWRkcmVzcy4gTm90IHVzZWQgb24gRFNBIENvbnRyb2wgZnJhbWVzLgoqCiogSU5QVVRTOgoqICAgICAgIGZUeXBlIC0gZnJhbWUgdHlwZSAoR1RfUFJJX09WRVJSSURFX0ZUWVBFKQoqICAgICAgIGVudHJ5IC0gUSBQcmlvcml0eSBPdmVycmlkZSBUYWJsZSBlbnRyeSAoR1RfUVBSSV9UQkxfRU5UUlkpCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAgICAgLSBvbiB1bmtub3duIGZyYW1lIHR5cGUKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0UVByaU92ZXJyaWRlVGFibGUKKAogICAgSU4gIEdUX1FEX0RFViAJKmRldiwKICAgIElOICBHVF9QUklfT1ZFUlJJREVfRlRZUEUJZlR5cGUsCiAgICBJTiAgR1RfUVBSSV9UQkxfRU5UUlkJKmVudHJ5Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRRUHJpT3ZlcnJpZGVUYWJsZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgUXVldWUgUHJpb3JpdHkgT3ZlcnJpZGUuCioJCVdoZW4gYSBmcmFtZSBlbnRlcnMgYSBwb3J0LCBpdHMgdHlwZSBpcyBkZXRlcm1pbmVkIGFuZCB0aGUgdHlwZSBpcyB1c2VkIAoqCQl0byBhY2Nlc3MgdGhlIFF1ZXVlIFByaW9yaXR5IFRhYmxlLiBJZiB0aGUgdHlwZSdzIHFQcmlFbiAoaW4gR1RfUVBSSV9UQkxfRU5UUlkKKgkJc3RydWN0dXJlKSBpcyBlbmFibGVkLCB0aGVuIHRoZSBmcmFtZSdzIFF1ZXVlIFByaW9yaXR5IHdpbGwgYmUgb3ZlcnJpZGRlbgoqCQl3aXRoIHRoZSB2YWx1ZSB3cml0dGVuIGluIHFQcmlvcml0eSAoaW4gR1RfUVBSSV9UQkxfRU5UUlkgc3RydWN0dXJlKS4KKgkJRnJhbWUgVHlwZXMgc3VwcG9ydGVkIGFyZToKKgkJCUZUWVBFX0RTQV9UT19DUFVfQlBEVSAtCioJCQkJVXNlZCBvbiBtdWx0aWNhc3QgRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgwIChCUERVL01HTVQpLgoqCQkJCU5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX0YyUiAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDEgKEZyYW1lIHRvIFJlZ2lzdGVyCioJCQkJUmVwbHkpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9JR01QIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MiAoSUdNUC9NTEQgVHJhcCkKKgkJCQlhbmQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBJR01QIG9yIE1MRCB0cmFwcGVkCioJCQlGVFlQRV9EU0FfVE9fQ1BVX1RSQVAgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgzIChQb2xpY3kgVHJhcCkgYW5kCioJCQkJb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBQb2xpY3kgVHJhcHBlZAoqCQkJRlRZUEVfRFNBX1RPX0NQVV9BUlAgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg0IChBUlAgTWlycm9yKSBhbmQKKgkJCQlvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIEFSUCBNaXJyb3JlZCAoc2VlIGdwcnRTZXRBUlB0b0NQVSBBUEkpLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9NSVJST1IgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg1IChQb2xpY3kgTWlycm9yKSBhbmQKKgkJCQlvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIFBvbGljeSBNaXJyb3JlZCAoc2VlIGdwcnRTZXRQb2xpY3kgQVBJKS4KKgkJCUZUWVBFX0RTQV9UT19DUFVfUkVTRVJWRUQgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg2IChSZXNlcnZlZCkuIE5vdAoqCQkJCXVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9UT19DUFVfVUNBU1RfTUdNVCAtCioJCQkJVXNlZCBvbiB1bmljYXN0IERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MCAodW5pY2FzdAoqCQkJCU1HTVQpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX0ZST01fQ1BVIC0KKgkJCQlVc2VkIG9uIERTQSBGcm9tX0NQVSBmcmFtZXMuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZQoqCQkJRlRZUEVfRFNBX0NST1NTX0NISVBfRkMgLQoqCQkJCVVzZWQgb24gRFNBIENyb3NzIENoaXAgRmxvdyBDb250cm9sIGZyYW1lcyAoVG9fU25pZmZlciBGbG93CioJCQkJQ29udHJvbCkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfQ1JPU1NfQ0hJUF9FR1JFU1NfTU9OIC0KKgkJCQlVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEVncmVzcyBNb25pdG9yIGZyYW1lcyAoVG9fU25pZmZlciBUeCkuCioJCQkJTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9DUk9TU19DSElQX0lOR1JFU1NfTU9OIC0KKgkJCQlVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEluZ3Jlc3MgTW9uaXRvciBmcmFtZXMgKFRvX1NuaWZmZXIgUngpLgoqCQkJCU5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9QT1JUX0VUWVBFX01BVENIIC0KKgkJCQlVc2VkIG9uIG5vcm1hbCBuZXR3b3JrIHBvcnRzIChzZWUgZ3BydFNldEZyYW1lTW9kZSBBUEkpCioJCQkJb24gZnJhbWVzIHdob3NlIEV0aGVydHlwZSBtYXRjaGVzIHRoZSBwb3J0J3MgUG9ydEVUeXBlIHJlZ2lzdGVyLgoqCQkJCU5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9CQ0FTVF9OT05fRFNBX0NPTlRST0wgLQoqCQkJCVVzZWQgb24gTm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGNvbnRhaW4gYSBCcm9hZGNhc3QKKgkJCQlkZXN0aW5hdGlvbiBhZGRyZXNzLiBOb3QgdXNlZCBvbiBEU0EgQ29udHJvbCBmcmFtZXMuCioKKiBJTlBVVFM6CiogICAgICAgZlR5cGUgLSBmcmFtZSB0eXBlIChHVF9QUklfT1ZFUlJJREVfRlRZUEUpCioKKiBPVVRQVVRTOgoqICAgICAgIGVudHJ5IC0gUSBQcmlvcml0eSBPdmVycmlkZSBUYWJsZSBlbnRyeSAoR1RfUVBSSV9UQkxfRU5UUlkpCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAgICAgLSBvbiB1bmtub3duIGZyYW1lIHR5cGUKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UVByaU92ZXJyaWRlVGFibGUKKAogICAgSU4gIEdUX1FEX0RFViAJKmRldiwKICAgIElOICBHVF9QUklfT1ZFUlJJREVfRlRZUEUJZlR5cGUsCiAgICBPVVQgR1RfUVBSSV9UQkxfRU5UUlkJKmVudHJ5Cik7CgoKLyogZ3RTeXNDdHJsLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldENQVURlc3QKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0cyBDUFUgRGVzdGluYXRpb24gUG9ydC4gQ1BVIERlc3RpbmF0aW9uIHBvcnQgaW5kaWNhdGVzIHRoZQoqCQlwb3J0IG51bWJlciBvbiB0aGlzIGRldmljZSB3aGVyZSB0aGUgQ1BVIGlzIGNvbm5lY3RlZCAoZWl0aGVyIGRpcmVjdGx5IG9yCioJCWluZGlyZWN0bHkgdGhyb3VnaCBhbm90aGVyIE1hcnZlbGwgc3dpdGNoIGRldmljZSkuCioKKgkJTWFueSBtb2RlcyBvZiBmcmFtZSBwcm9jZXNzaW5nIG5lZWQgdG8ga25vdyB3aGVyZSB0aGUgQ1BVIGlzIGxvY2F0ZWQuCioJCVRoZXNlIG1vZGVzIGFyZToKKgkJMS4gV2hlbiBJR01QL01MRCBmcmFtZSBpcyByZWNlaXZlZCBhbmQgU25vb3BpbmcgaXMgZW5hYmxlZAoqCQkyLiBXaGVuIHRoZSBwb3J0IGlzIGNvbmZpZ3VyZWQgYXMgYSBEU0EgcG9ydCBhbmQgaXQgcmVjZWl2ZXMgYSBUb19DUFUgZnJhbWUKKgkJMy4gV2hlbiBhIFJzdmQyQ1BVIGZyYW1lIGVudGVycyB0aGUgcG9ydAoqCQk0LiBXaGVuIHRoZSBwb3J0J3MgU0EgRmlsdGVyaW5nIG1vZGUgaXMgRHJvcCB0byBDUFUKKgkJNS4gV2hlbiBhbnkgb2YgdGhlIHBvcnQncyBQb2xpY3kgT3B0aW9ucyB0cmFwIHRoZSBmcmFtZSB0byB0aGUgQ1BVCioJCTYuIFdoZW4gdGhlIGluZ3Jlc3NpbmcgZnJhbWUgaXMgYW4gQVJQIGFuZCBBUlAgbWlycm9yaW5nIGlzIGVuYWJsZWQgaW4gdGhlCioJCSAgIGRldmljZQoqCioJCUluIGFsbCBjYXNlcywgZXhjZXB0IGZvciBBUlAsIHRoZSBmcmFtZXMgdGhhdCBtZWV0IHRoZSBlbmFibGVkIGNyaXRlcmlhIAoqCQlhcmUgbWFwcGVkIHRvIHRoZSBDUFUgRGVzdGluYXRpb24gcG9ydCwgb3ZlcnJpZGluZyB3aGVyZSB0aGUgZnJhbWUgd291bGQgCioJCW5vcm1hbGx5IGdvLiBJbiB0aGUgY2FzZSBvZiBBUlAsIHRoZSBmcmFtZSB3aWxsIGJlIG1hcHBlZCBub3JtYWxseSBhbmQgaXQgCioJCXdpbGwgYWxzbyBnZXQgY29waWVkIHRvIHRoaXMgcG9ydC4KKgkJRnJhbWVzIHRoYXQgZmlsdGVyZWQgb3IgZGlzY2FyZGVkIHdpbGwgbm90IGJlIG1hcHBlZCB0byB0aGUgQ1BVIERlc3RpbmF0aW9uIAoqCQlwb3J0IHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgUnN2ZDJDUFUgYW5kIERTQSBUYWcgY2FzZXMuCioKKgkJSWYgQ1BVRGVzdCA9IDB4RiwgdGhlIHJlbWFwcGVkIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZCwgbm8gQVJQIG1pcnJvcmluZyAKKgkJd2lsbCBvY2N1ciBhbmQgaW5ncmVzc2luZyBUb19DUFUgZnJhbWVzIHdpbGwgYmUgZGlzY2FyZGVkLgoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldENQVURlc3QKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9MUE9SVAkJcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0Q1BVRGVzdAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXRzIENQVSBEZXN0aW5hdGlvbiBQb3J0LiBDUFUgRGVzdGluYXRpb24gcG9ydCBpbmRpY2F0ZXMgdGhlCioJCXBvcnQgbnVtYmVyIG9uIHRoaXMgZGV2aWNlIHdoZXJlIHRoZSBDUFUgaXMgY29ubmVjdGVkIChlaXRoZXIgZGlyZWN0bHkgb3IKKgkJaW5kaXJlY3RseSB0aHJvdWdoIGFub3RoZXIgTWFydmVsbCBzd2l0Y2ggZGV2aWNlKS4KKgoqCQlNYW55IG1vZGVzIG9mIGZyYW1lIHByb2Nlc3NpbmcgbmVlZCB0byBrbm93IHdoZXJlIHRoZSBDUFUgaXMgbG9jYXRlZC4KKgkJVGhlc2UgbW9kZXMgYXJlOgoqCQkxLiBXaGVuIElHTVAvTUxEIGZyYW1lIGlzIHJlY2VpdmVkIGFuZCBTbm9vcGluZyBpcyBlbmFibGVkCioJCTIuIFdoZW4gdGhlIHBvcnQgaXMgY29uZmlndXJlZCBhcyBhIERTQSBwb3J0IGFuZCBpdCByZWNlaXZlcyBhIFRvX0NQVSBmcmFtZQoqCQkzLiBXaGVuIGEgUnN2ZDJDUFUgZnJhbWUgZW50ZXJzIHRoZSBwb3J0CioJCTQuIFdoZW4gdGhlIHBvcnQncyBTQSBGaWx0ZXJpbmcgbW9kZSBpcyBEcm9wIHRvIENQVQoqCQk1LiBXaGVuIGFueSBvZiB0aGUgcG9ydCdzIFBvbGljeSBPcHRpb25zIHRyYXAgdGhlIGZyYW1lIHRvIHRoZSBDUFUKKgkJNi4gV2hlbiB0aGUgaW5ncmVzc2luZyBmcmFtZSBpcyBhbiBBUlAgYW5kIEFSUCBtaXJyb3JpbmcgaXMgZW5hYmxlZCBpbiB0aGUKKgkJICAgZGV2aWNlCioKKgkJSW4gYWxsIGNhc2VzLCBleGNlcHQgZm9yIEFSUCwgdGhlIGZyYW1lcyB0aGF0IG1lZXQgdGhlIGVuYWJsZWQgY3JpdGVyaWEgCioJCWFyZSBtYXBwZWQgdG8gdGhlIENQVSBEZXN0aW5hdGlvbiBwb3J0LCBvdmVycmlkaW5nIHdoZXJlIHRoZSBmcmFtZSB3b3VsZCAKKgkJbm9ybWFsbHkgZ28uIEluIHRoZSBjYXNlIG9mIEFSUCwgdGhlIGZyYW1lIHdpbGwgYmUgbWFwcGVkIG5vcm1hbGx5IGFuZCBpdCAKKgkJd2lsbCBhbHNvIGdldCBjb3BpZWQgdG8gdGhpcyBwb3J0LgoqCQlGcmFtZXMgdGhhdCBmaWx0ZXJlZCBvciBkaXNjYXJkZWQgd2lsbCBub3QgYmUgbWFwcGVkIHRvIHRoZSBDUFUgRGVzdGluYXRpb24gCioJCXBvcnQgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBSc3ZkMkNQVSBhbmQgRFNBIFRhZyBjYXNlcy4KKgoqCQlJZiBDUFVEZXN0ID0gMHhGLCB0aGUgcmVtYXBwZWQgZnJhbWVzIHdpbGwgYmUgZGlzY2FyZGVkLCBubyBBUlAgbWlycm9yaW5nIAoqCQl3aWxsIG9jY3VyIGFuZCBpbmdyZXNzaW5nIFRvX0NQVSBmcmFtZXMgd2lsbCBiZSBkaXNjYXJkZWQuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0Q1BVRGVzdAooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfTFBPUlQgIAkqcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0TWlycm9yRGVzdAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXRzIE1pcnJvciBEZXN0aW5hdGlvbiBQb3J0LiBGcmFtZXMgdGhhdCBpbmdyZXNzIGEgcG9ydCAKKgkJdGhhdCB0cmlnZ2VyIGEgcG9saWN5IG1pcnJvciBhcmUgbWFwcGVkIChjb3BpZWQpIHRvIHRoaXMgcG9ydCBhcyBsb25nIGFzIAoqCQl0aGUgZnJhbWUgaXMgbm90IGZpbHRlcmVkIG9yIGRpc2NhcmRlZC4gCioJCVRoZSBNaXJyb3IgRGVzdGluYXRpb24gcG9ydCBzaG91bGQgcG9pbnQgdG8gdGhlIHBvcnQgdGhhdCBkaXJlY3RzIHRoZXNlIAoqCQlmcmFtZXMgdG8gdGhlIENQVSB0aGF0IHdpbGwgcHJvY2VzcyB0aGVzZSBmcmFtZXMuIFRoaXMgdGFyZ2V0IHBvcnQgc2hvdWxkIAoqCQliZSBhIERTQSBUYWcgcG9ydCBzbyB0aGUgZnJhbWVzIHdpbGwgZWdyZXNzIHdpdGggYSBUb19DUFUgRFNBIFRhZyB3aXRoIGEgCioJCUNQVSBDb2RlIG9mIFBvbGljeSBNaXJyb3IuCioJCVRvX0NQVSBEU0EgVGFnIGZyYW1lcyB3aXRoIGEgQ1BVIENvZGUgb2YgUG9saWN5IE1pcnJvciB0aGF0IGluZ3Jlc3MgYSBEU0EgCioJCVRhZyBwb3J0IHdpbGwgYmUgc2VudCB0byB0aGUgcG9ydCBudW1iZXIgZGVmaW5lZCBpbiBNaXJyb3JEZXN0LgoqCioJCUlmIE1pcnJvckRlc3QgPSAweEYsIFBvbGljeSBNaXJyb3JpbmcgaXMgZGlzYWJsZWQgYW5kIGluZ3Jlc3NpbmcgVG9fQ1BVIAoqCQlQb2xpY3kgTWlycm9yIGZyYW1lcyB3aWxsIGJlIGRpc2NhcmRlZC4KKgoqIElOUFVUUzoKKgkJcG9ydCAgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRNaXJyb3JEZXN0CigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQJCXBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldE1pcnJvckRlc3QKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0cyBNaXJyb3IgRGVzdGluYXRpb24gUG9ydC4gRnJhbWVzIHRoYXQgaW5ncmVzcyBhIHBvcnQgCioJCXRoYXQgdHJpZ2dlciBhIHBvbGljeSBtaXJyb3IgYXJlIG1hcHBlZCAoY29waWVkKSB0byB0aGlzIHBvcnQgYXMgbG9uZyBhcyAKKgkJdGhlIGZyYW1lIGlzIG5vdCBmaWx0ZXJlZCBvciBkaXNjYXJkZWQuIAoqCQlUaGUgTWlycm9yIERlc3RpbmF0aW9uIHBvcnQgc2hvdWxkIHBvaW50IHRvIHRoZSBwb3J0IHRoYXQgZGlyZWN0cyB0aGVzZSAKKgkJZnJhbWVzIHRvIHRoZSBDUFUgdGhhdCB3aWxsIHByb2Nlc3MgdGhlc2UgZnJhbWVzLiBUaGlzIHRhcmdldCBwb3J0IHNob3VsZCAKKgkJYmUgYSBEU0EgVGFnIHBvcnQgc28gdGhlIGZyYW1lcyB3aWxsIGVncmVzcyB3aXRoIGEgVG9fQ1BVIERTQSBUYWcgd2l0aCBhIAoqCQlDUFUgQ29kZSBvZiBQb2xpY3kgTWlycm9yLgoqCQlUb19DUFUgRFNBIFRhZyBmcmFtZXMgd2l0aCBhIENQVSBDb2RlIG9mIFBvbGljeSBNaXJyb3IgdGhhdCBpbmdyZXNzIGEgRFNBIAoqCQlUYWcgcG9ydCB3aWxsIGJlIHNlbnQgdG8gdGhlIHBvcnQgbnVtYmVyIGRlZmluZWQgaW4gTWlycm9yRGVzdC4KKgoqCQlJZiBNaXJyb3JEZXN0ID0gMHhGLCBQb2xpY3kgTWlycm9yaW5nIGlzIGRpc2FibGVkIGFuZCBpbmdyZXNzaW5nIFRvX0NQVSAKKgkJUG9saWN5IE1pcnJvciBmcmFtZXMgd2lsbCBiZSBkaXNjYXJkZWQuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0TWlycm9yRGVzdAooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfTFBPUlQgIAkqcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0Uk1Qb3J0CioKKiBERVNDUklQVElPTjoKKgkJUmVtb3RlIE1hbmFnZW1lbnQgZmVhdHVyZSBpcyBlbmFibGVkIG9ubHkgb24gb25lIHBvcnQuIFNpbmNlIG5vdCBhbGwgcG9ydHMKKgkJY2FuIGJlIGVuYWJsZWQgZm9yIFJlbW90ZSBNYW5hZ2VtZW50IGZlYXR1cmUsIHBsZWFzZSByZWZlciB0byB0aGUgZGV2aWNlCioJCWRhdGFzaGVldCBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24uCioJCUZvciBleGFtcGxlLCA4OEU2MDk3IGRldmljZSBhbGxvd3MgbG9naWNhbCBwb3J0IDkgb3IgMTAsIGFuZCA4OEU2MDQ3IAoqCQlkZXZpY2UgYWxsb3dzIGxvZ2ljYWwgcG9ydCA0IGFuZCA1LgoqCQkKKiBJTlBVVFM6CioJCXBvcnQgLSBSZW1vdGUgTWFuYWdlbWVudCBQb3J0CioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAgICAgLSBvbiB1bmFsbG93YWJsZSBwb3J0CioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Uk1Qb3J0CigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfTFBPUlQgCXBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFJNUG9ydAoqCiogREVTQ1JJUFRJT046CioJCVJlbW90ZSBNYW5hZ2VtZW50IGZlYXR1cmUgaXMgZW5hYmxlZCBvbmx5IG9uIG9uZSBwb3J0LiBTaW5jZSBub3QgYWxsIHBvcnRzCioJCWNhbiBiZSBlbmFibGVkIGZvciBSZW1vdGUgTWFuYWdlbWVudCBmZWF0dXJlLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGRldmljZQoqCQlkYXRhc2hlZXQgZm9yIGRldGFpbGVkIGluZm9ybWF0aW9uLgoqCQlGb3IgZXhhbXBsZSwgODhFNjA5NyBkZXZpY2UgYWxsb3dzIGxvZ2ljYWwgcG9ydCA5IG9yIDEwLCBhbmQgODhFNjA0NyAKKgkJZGV2aWNlIGFsbG93cyBsb2dpY2FsIHBvcnQgNCBhbmQgNS4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCXBvcnQgLSBSZW1vdGUgTWFuYWdlbWVudCBQb3J0CioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRSTVBvcnQKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0xQT1JUIAkqcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0Uk1EQUNoZWNrCioKKiBERVNDUklQVElPTjoKKgkJQ2hlY2sgdGhlIERBIG9uIFJlbW90ZSBNYW5hZ2VtZW50IGZyYW1lcy4gCioJCVdoZW4gREEgQ2hlY2sgaXMgZW5hYmxlZCwgdGhlIERBIG9mIFJlbW90ZSBNYW5hZ2VtZW50IGZyYW1lcyBtdXN0IGJlIAoqCQljb250YWluZWQgaW4gdGhpcyBkZXZpY2UncyBhZGRyZXNzIGRhdGFiYXNlIChBVFUpIGFzIGEgU3RhdGljIGVudHJ5IAoqCQkoZWl0aGVyIHVuaWNhc3Qgb3IgbXVsdGljYXN0KS4gSWYgdGhlIERBIG9mIHRoZSBmcmFtZSBpcyBub3QgY29udGFpbmVkIAoqCQlpbiB0aGlzIGRldmljZSdzIGFkZHJlc3MgZGF0YWJhc2UsIHRoZSBmcmFtZSB3aWxsIGJlIG5vdCBiZSBwcm9jZXNzZWQgYXMgCioJCWEgRnJhbWUtdG8tUmVndGVyIGZyYW1lLgoqCQlXaGVuIERBIENoZWNrIGlzIGRpc2FibGVkLCB0aGUgREEgb2YgUmVtb3RlIE1hbmFnZW1lbnQgZnJhbWVzIGlzIG5vdCAKKgkJdmFsaWRhdGVkIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBmcmFtZS4KKgkJCiogSU5QVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gZW5hYmxlIERBIENoZWNrLCAKKgkJCSBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Uk1EQUNoZWNrCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfQk9PTCAJCWVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRSTURBQ2hlY2sKKgoqIERFU0NSSVBUSU9OOgoqCQlDaGVjayB0aGUgREEgb24gUmVtb3RlIE1hbmFnZW1lbnQgZnJhbWVzLiAKKgkJV2hlbiBEQSBDaGVjayBpcyBlbmFibGVkLCB0aGUgREEgb2YgUmVtb3RlIE1hbmFnZW1lbnQgZnJhbWVzIG11c3QgYmUgCioJCWNvbnRhaW5lZCBpbiB0aGlzIGRldmljZSdzIGFkZHJlc3MgZGF0YWJhc2UgKEFUVSkgYXMgYSBTdGF0aWMgZW50cnkgCioJCShlaXRoZXIgdW5pY2FzdCBvciBtdWx0aWNhc3QpLiBJZiB0aGUgREEgb2YgdGhlIGZyYW1lIGlzIG5vdCBjb250YWluZWQgCioJCWluIHRoaXMgZGV2aWNlJ3MgYWRkcmVzcyBkYXRhYmFzZSwgdGhlIGZyYW1lIHdpbGwgYmUgbm90IGJlIHByb2Nlc3NlZCBhcyAKKgkJYSBGcmFtZS10by1SZWd0ZXIgZnJhbWUuCioJCVdoZW4gREEgQ2hlY2sgaXMgZGlzYWJsZWQsIHRoZSBEQSBvZiBSZW1vdGUgTWFuYWdlbWVudCBmcmFtZXMgaXMgbm90IAoqCQl2YWxpZGF0ZWQgYmVmb3JlIHByb2Nlc3NpbmcgdGhlIGZyYW1lLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW4gLSBHVF9UUlVFIGlmIERBIENoZWNrIGlzIGVuYWJsZWQsIAoqCQkJIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFJNREFDaGVjawooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfQk9PTCAJKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRSTUVuYWJsZQoqCiogREVTQ1JJUFRJT046CioJCUVuYWJsZSBvciBkaXNhYmxlIFJlbW90ZSBNYW5hZ2VtZW50IGZlYXR1cmUuIFRoaXMgZmVhdHVyZSBjYW4gYmUgZW5hYmxlZAoqCQlvbmx5IG9uIG9uZSBwb3J0IChzZWUgZ3N5c1NldFJNUG9ydCBBUEkpLgoqCQkKKiBJTlBVVFM6CioJCWVuIC0gR1RfVFJVRSB0byBlbmFibGUgUmVtb3RlIE1hbmFnZW1lbnQgZmVhdHVyZSwgCioJCQkgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFJNRW5hYmxlCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfQk9PTCAJCWVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRSTUVuYWJsZQoqCiogREVTQ1JJUFRJT046CioJCUVuYWJsZSBvciBkaXNhYmxlIFJlbW90ZSBNYW5hZ2VtZW50IGZlYXR1cmUuIFRoaXMgZmVhdHVyZSBjYW4gYmUgZW5hYmxlZAoqCQlvbmx5IG9uIG9uZSBwb3J0IChzZWUgZ3N5c1NldFJNUG9ydCBBUEkpLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW4gLSBHVF9UUlVFIGlmIFJlbW90ZSBNYW5hZ2VtZW50IGZlYXR1cmUgaXMgZW5hYmxlZCwgCioJCQkgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0Uk1FbmFibGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0JPT0wgCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UnN2ZDJDcHVFbmFibGVzMlgKKgoqIERFU0NSSVBUSU9OOgoqCQlSZXNlcnZlZCBEQSBFbmFibGVzIGZvciB0aGUgZm9ybSBvZiAwMTo4MDpDMjowMDowMDoyeC4KKgkJV2hlbiB0aGUgUnN2ZDJDcHUoZ3N5c1NldFJzdmQyQ3B1KSBpcyBzZXQgdG8gYSBvbmUsIHRoZSAxNiByZXNlcnZlZCAKKgkJbXVsdGljYXN0IERBIGFkZHJlc3Nlcywgd2hvc2UgYml0IGluIHRoaXMgcmVnaXN0ZXIgYXJlIGFsc28gc2V0IHRvIGEgb25lLCAKKgkJYXJlIHRyZWFkdGVkIGFzIE1HTVQgZnJhbWVzLiBBbGwgdGhlIHJlc2VydmVkIERBJ3MgdGFrZSB0aGUgZm9ybSAKKgkJMDE6ODA6QzI6MDA6MDA6MnguIFdoZW4geCA9IDB4MCwgYml0IDAgb2YgdGhpcyByZWdpc3RlciBpcyB0ZXN0ZWQuIAoqCQlXaGVuIHggPSAweDIsIGJpdCAyIG9mIHRoaXMgZmllbGQgaXMgdGVzdGVkIGFuZCBzbyBvbi4KKgkJSWYgdGhlIHRlc3RlZCBiaXQgaW4gdGhpcyByZWdpc3RlciBpcyBjbGVhcmVkIHRvIGEgemVybywgdGhlIGZyYW1lIHdpbGwgCioJCWJlIHRyZWF0ZWQgYXMgYSBub3JtYWwgKG5vbi1NR01UKSBmcmFtZS4KKgoqIElOUFVUUzoKKgkJZW5CaXRzIC0gYml0IHZlY3RvciBvZiBlbmFibGVkIFJlc2VydmVkIE11bHRpY2FzdC4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRSc3ZkMkNwdUVuYWJsZXMyWAooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX1UxNgkJZW5CaXRzCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRSc3ZkMkNwdUVuYWJsZXMyWAoqCiogREVTQ1JJUFRJT046CioJCVJlc2VydmVkIERBIEVuYWJsZXMgZm9yIHRoZSBmb3JtIG9mIDAxOjgwOkMyOjAwOjAwOjJ4LgoqCQlXaGVuIHRoZSBSc3ZkMkNwdShnc3lzU2V0UnN2ZDJDcHUpIGlzIHNldCB0byBhIG9uZSwgdGhlIDE2IHJlc2VydmVkIAoqCQltdWx0aWNhc3QgREEgYWRkcmVzc2VzLCB3aG9zZSBiaXQgaW4gdGhpcyByZWdpc3RlciBhcmUgYWxzbyBzZXQgdG8gYSBvbmUsIAoqCQlhcmUgdHJlYWR0ZWQgYXMgTUdNVCBmcmFtZXMuIEFsbCB0aGUgcmVzZXJ2ZWQgREEncyB0YWtlIHRoZSBmb3JtIAoqCQkwMTo4MDpDMjowMDowMDoyeC4gV2hlbiB4ID0gMHgwLCBiaXQgMCBvZiB0aGlzIHJlZ2lzdGVyIGlzIHRlc3RlZC4gCioJCVdoZW4geCA9IDB4MiwgYml0IDIgb2YgdGhpcyBmaWVsZCBpcyB0ZXN0ZWQgYW5kIHNvIG9uLgoqCQlJZiB0aGUgdGVzdGVkIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIGlzIGNsZWFyZWQgdG8gYSB6ZXJvLCB0aGUgZnJhbWUgd2lsbCAKKgkJYmUgdHJlYXRlZCBhcyBhIG5vcm1hbCAobm9uLU1HTVQpIGZyYW1lLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW5CaXRzIC0gYml0IHZlY3RvciBvZiBlbmFibGVkIFJlc2VydmVkIE11bHRpY2FzdC4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFJzdmQyQ3B1RW5hYmxlczJYCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9VMTYgIAkqZW5CaXRzCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRGbG9vZEJDCioKKiBERVNDUklQVElPTjoKKgkJRmxvb2QgQnJvYWRjYXN0LgoqCQlXaGVuIEZsb29kIEJyb2FkY2FzdCBpcyBlbmFibGVkLCBmcmFtZXMgd2l0aCB0aGUgQnJvYWRjYXN0IGRlc3RpbmF0aW9uIAoqCQlhZGRyZXNzIHdpbGwgZmxvb2Qgb3V0IGFsbCB0aGUgcG9ydHMgcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZyBvZiB0aGUKKgkJcG9ydCdzIEVncmVzcyBGbG9vZHMgbW9kZSAoc2VlIGdwcnRTZXRFZ3Jlc3NGbG9vZCBBUEkpLiBWTEFOIHJ1bGVzIGFuZCAKKgkJb3RoZXIgc3dpdGNoIHBvbGljeSBzdGlsbCBhcHBsaWVzIHRvIHRoZXNlIEJyb2FkY2FzdCBmcmFtZXMuIAoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCwgZnJhbWVzIHdpdGggdGhlIEJyb2FkY2FzdCBkZXN0aW5hdGlvbgoqCQlhZGRyZXNzIGFyZSBjb25zaWRlcmVkIE11bHRpY2FzdCBmcmFtZXMgYW5kIHdpbGwgYmUgYWZmZWN0ZWQgYnkgcG9ydCdzIAoqCQlFZ3Jlc3MgRmxvb2RzIG1vZGUuCioKKiBJTlBVVFM6CioJCWVuIC0gR1RfVFJVRSB0byBlbmFibGUgRmxvb2QgQnJvYWRjYXN0LCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0Rmxvb2RCQwooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0JPT0wJCWVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRGbG9vZEJDCioKKiBERVNDUklQVElPTjoKKgkJRmxvb2QgQnJvYWRjYXN0LgoqCQlXaGVuIEZsb29kIEJyb2FkY2FzdCBpcyBlbmFibGVkLCBmcmFtZXMgd2l0aCB0aGUgQnJvYWRjYXN0IGRlc3RpbmF0aW9uIAoqCQlhZGRyZXNzIHdpbGwgZmxvb2Qgb3V0IGFsbCB0aGUgcG9ydHMgcmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZyBvZiB0aGUKKgkJcG9ydCdzIEVncmVzcyBGbG9vZHMgbW9kZSAoc2VlIGdwcnRTZXRFZ3Jlc3NGbG9vZCBBUEkpLiBWTEFOIHJ1bGVzIGFuZCAKKgkJb3RoZXIgc3dpdGNoIHBvbGljeSBzdGlsbCBhcHBsaWVzIHRvIHRoZXNlIEJyb2FkY2FzdCBmcmFtZXMuIAoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBkaXNhYmxlZCwgZnJhbWVzIHdpdGggdGhlIEJyb2FkY2FzdCBkZXN0aW5hdGlvbgoqCQlhZGRyZXNzIGFyZSBjb25zaWRlcmVkIE11bHRpY2FzdCBmcmFtZXMgYW5kIHdpbGwgYmUgYWZmZWN0ZWQgYnkgcG9ydCdzIAoqCQlFZ3Jlc3MgRmxvb2RzIG1vZGUuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgaWYgRmxvb2QgQnJvYWRjYXN0IGlzIGVuYWJsZWQsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEZsb29kQkMKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0JPT0wgIAkqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFJlbW92ZTFQVGFnCioKKiBERVNDUklQVElPTjoKKgkJUmVtb3ZlIE9uZSBQcm92aWRlciBUYWcuCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQgYW5kIGEgcG9ydCBpcyBjb25maWd1cmVkIGFzIGEgUHJvdmlkZXIgUG9ydAoqCQkoc2VlIGdwcnRTZXRGcmFtZU1vZGUgQVBJKSwgcmVjdXJzaXZlIFByb3ZpZGVyIFRhZyBzdHJpcHBpbmcgd2lsbCBOT1QgYmUgCioJCXBlcmZvcm1lZC4gT25seSB0aGUgZmlyc3QgUHJvdmlkZXIgVGFnIGZvdW5kIG9uIHRoZSBmcmFtZSB3aWxsIGJlIAoqCQlleHRyYWN0ZWQgYW5kIHJlbW92ZWQuIEl0cyBleHRyYWN0ZWQgZGF0YSB3aWxsIGJlIHVzZWQgZm9yIHN3aXRjaGluZy4KKgkJV2hlbiBpdCdzIGRpc2FibGVkIGFuZCBhIHBvcnQgaXMgY29uZmlndXJlZCBhcyBhIFByb3ZpZGVyIFBvcnQsIHJlY3Vyc2l2ZSAKKgkJUHJvdmlkZXIgVGFnIHN0cmlwcGluZyB3aWxsIGJlIHBlcmZvcm1lZC4gVGhlIGZpcnN0IFByb3ZpZGVyIFRhZydzIGRhdGEgCioJCXdpbGwgYmUgZXh0cmFjdGVkIGFuZCB1c2VkIGZvciBzd2l0Y2hpbmcsIGFuZCB0aGVuIGFsbCBzdWJzZXF1ZW50IFByb3ZpZGVyIAoqCQlUYWdzIGZvdW5kIGluIHRoZSBmcmFtZSB3aWxsIGFsc28gYmUgcmVtb3ZlZC4gVGhpcyB3aWxsIG9ubHkgb2NjdXIgaWYgdGhlIAoqCQlwb3J0J3MgUG9ydEVUeXBlIChzZWUgZ3BydFNldFBvcnRFVHlwZSBBUEkpIGlzIG5vdCAweDgxMDAuCioKKiBJTlBVVFM6CioJCWVuIC0gR1RfVFJVRSB0byBlbmFibGUgUmVtb3ZlIE9uZSBQcm92aWRlciBUYWcsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRSZW1vdmUxUFRhZwooCglJTiBHVF9RRF9ERVYJKmRldiwKCUlOIEdUX0JPT0wJCWVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRSZW1vdmUxUFRhZwoqCiogREVTQ1JJUFRJT046CioJCVJlbW92ZSBPbmUgUHJvdmlkZXIgVGFnLgoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIGFuZCBhIHBvcnQgaXMgY29uZmlndXJlZCBhcyBhIFByb3ZpZGVyIFBvcnQKKgkJKHNlZSBncHJ0U2V0RnJhbWVNb2RlIEFQSSksIHJlY3Vyc2l2ZSBQcm92aWRlciBUYWcgc3RyaXBwaW5nIHdpbGwgTk9UIGJlIAoqCQlwZXJmb3JtZWQuIE9ubHkgdGhlIGZpcnN0IFByb3ZpZGVyIFRhZyBmb3VuZCBvbiB0aGUgZnJhbWUgd2lsbCBiZSAKKgkJZXh0cmFjdGVkIGFuZCByZW1vdmVkLiBJdHMgZXh0cmFjdGVkIGRhdGEgd2lsbCBiZSB1c2VkIGZvciBzd2l0Y2hpbmcuCioJCVdoZW4gaXQncyBkaXNhYmxlZCBhbmQgYSBwb3J0IGlzIGNvbmZpZ3VyZWQgYXMgYSBQcm92aWRlciBQb3J0LCByZWN1cnNpdmUgCioJCVByb3ZpZGVyIFRhZyBzdHJpcHBpbmcgd2lsbCBiZSBwZXJmb3JtZWQuIFRoZSBmaXJzdCBQcm92aWRlciBUYWcncyBkYXRhIAoqCQl3aWxsIGJlIGV4dHJhY3RlZCBhbmQgdXNlZCBmb3Igc3dpdGNoaW5nLCBhbmQgdGhlbiBhbGwgc3Vic2VxdWVudCBQcm92aWRlciAKKgkJVGFncyBmb3VuZCBpbiB0aGUgZnJhbWUgd2lsbCBhbHNvIGJlIHJlbW92ZWQuIFRoaXMgd2lsbCBvbmx5IG9jY3VyIGlmIHRoZSAKKgkJcG9ydCdzIFBvcnRFVHlwZSAoc2VlIGdwcnRTZXRQb3J0RVR5cGUgQVBJKSBpcyBub3QgMHg4MTAwLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW4gLSBHVF9UUlVFIGlmIFJlbW92ZSBPbmUgUHJvdmlkZXIgVGFnIGlzIGVuYWJsZWQsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFJlbW92ZTFQVGFnCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9CT09MCQkqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFRhZ0Zsb3dDb250cm9sCioKKiBERVNDUklQVElPTjoKKgkJVXNlIGFuZCBnZW5lcmF0ZSBzb3VyY2UgcG9ydCBGbG93IENvbnRyb2wgc3RhdHVzIGZvciBDcm9zcy1DaGlwIEZsb3cgCioJCUNvbnRyb2wuCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIGJpdCAxNyBvZiB0aGUgRFNBIFRhZyBGb3J3YXJkIGZyYW1lcyBpcyAKKgkJZGVmaW5lZCB0byBiZSBTcmNfRkMgYW5kIGl0IGlzIGFkZGVkIHRvIHRoZXNlIGZyYW1lcyB3aGVuIGdlbmVyYXRlZCBhbmQgCioJCWl0IGlzIGluc3BlY3RlZCBvbiB0aGVzZSBmcmFtZXMgd2hlbiByZWNlaXZlZC4gVGhlIFFDIHdpbGwgdXNlIHRoZSBTcmNfRkMgCioJCWJpdCBvbiBEU0EgcG9ydHMgaW5zdGVhZCBvZiB0aGUgRFNBIHBvcnQncyBGbG93IENvbnRyb2wgbW9kZSBiaXQgZm9yIHRoZSAKKgkJUUMgRmxvdyBDb250cm9sIGFsZ29yaXRobS4KKgkJV2hlbiBpdCBpcyBkaXNhYmxlZCwgYml0IDE3IG9mIHRoZSBEU0EgVGFnIEZvcndhcmQgZnJhbWVzIGlzIGRlZmluZWQgdG8gCioJCWJlIFJlc2VydmVkIGFuZCBpdCB3aWxsIGJlIHplcm8gb24gdGhlc2UgZnJhbWVzIHdoZW4gZ2VuZXJhdGVkIGFuZCBpdCAKKgkJd2lsbCBub3QgYmUgdXNlZCBvbiB0aGVzZSBmcmFtZXMgd2hlbiByZWNlaXZlZCAodGhpcyBpcyBhIGJhY2t3YXJkcyAKKgkJY29tcGF0aWJpbGl0eSBtb2RlKS4KKgoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIGVuYWJsZSBUYWcgRmxvdyBDb250cm9sLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0VGFnRmxvd0NvbnRyb2wKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9CT09MCQllbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0VGFnRmxvd0NvbnRyb2wKKgoqIERFU0NSSVBUSU9OOgoqCQlVc2UgYW5kIGdlbmVyYXRlIHNvdXJjZSBwb3J0IEZsb3cgQ29udHJvbCBzdGF0dXMgZm9yIENyb3NzLUNoaXAgRmxvdyAKKgkJQ29udHJvbC4KKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgYml0IDE3IG9mIHRoZSBEU0EgVGFnIEZvcndhcmQgZnJhbWVzIGlzIAoqCQlkZWZpbmVkIHRvIGJlIFNyY19GQyBhbmQgaXQgaXMgYWRkZWQgdG8gdGhlc2UgZnJhbWVzIHdoZW4gZ2VuZXJhdGVkIGFuZCAKKgkJaXQgaXMgaW5zcGVjdGVkIG9uIHRoZXNlIGZyYW1lcyB3aGVuIHJlY2VpdmVkLiBUaGUgUUMgd2lsbCB1c2UgdGhlIFNyY19GQyAKKgkJYml0IG9uIERTQSBwb3J0cyBpbnN0ZWFkIG9mIHRoZSBEU0EgcG9ydCdzIEZsb3cgQ29udHJvbCBtb2RlIGJpdCBmb3IgdGhlIAoqCQlRQyBGbG93IENvbnRyb2wgYWxnb3JpdGhtLgoqCQlXaGVuIGl0IGlzIGRpc2FibGVkLCBiaXQgMTcgb2YgdGhlIERTQSBUYWcgRm9yd2FyZCBmcmFtZXMgaXMgZGVmaW5lZCB0byAKKgkJYmUgUmVzZXJ2ZWQgYW5kIGl0IHdpbGwgYmUgemVybyBvbiB0aGVzZSBmcmFtZXMgd2hlbiBnZW5lcmF0ZWQgYW5kIGl0IAoqCQl3aWxsIG5vdCBiZSB1c2VkIG9uIHRoZXNlIGZyYW1lcyB3aGVuIHJlY2VpdmVkICh0aGlzIGlzIGEgYmFja3dhcmRzIAoqCQljb21wYXRpYmlsaXR5IG1vZGUpLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW4gLSBHVF9UUlVFIGlmIFRhZyBGbG93IENvbnRyb2wgaXMgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0VGFnRmxvd0NvbnRyb2wKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0JPT0wgIAkqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEFsd2F5c1VzZVZUVQoqCiogREVTQ1JJUFRJT046CioJCUFsd2F5cyB1c2UgVlRVLiAKKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZW5hYmxlZCwgVlRVIGhpdCBkYXRhIHdpbGwgYmUgdXNlZCB0byBtYXAgZnJhbWVzIAoqCQlldmVuIGlmIDgwMi4xUSBpcyBEaXNhYmxlZCBvbiB0aGUgcG9ydC4gCioJCVdoZW4gaXQncyBkaXNhYmxlZCwgZGF0YSB3aWxsIGJlIGlnbm9yZWQgd2hlbiBtYXBwaW5nIGZyYW1lcyBvbiBwb3J0cyAKKgkJd2hlcmUgODAyLjFRIGlzIERpc2FibGVkLgoqCiogSU5QVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gdXNlIFZUVSBhbHdheXMsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRBbHdheXNVc2VWVFUKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9CT09MCQllbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0QWx3YXlzVXNlVlRVCioKKiBERVNDUklQVElPTjoKKgkJQWx3YXlzIHVzZSBWVFUuIAoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCBWVFUgaGl0IGRhdGEgd2lsbCBiZSB1c2VkIHRvIG1hcCBmcmFtZXMgCioJCWV2ZW4gaWYgODAyLjFRIGlzIERpc2FibGVkIG9uIHRoZSBwb3J0LiAKKgkJV2hlbiBpdCdzIGRpc2FibGVkLCBkYXRhIHdpbGwgYmUgaWdub3JlZCB3aGVuIG1hcHBpbmcgZnJhbWVzIG9uIHBvcnRzIAoqCQl3aGVyZSA4MDIuMVEgaXMgRGlzYWJsZWQuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgaWYgVlRVIGlzIGFsd2F5cyB1c2VkLCBHVF9GQUxTRSBvdGhlcndpc2UuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRBbHdheXNVc2VWVFUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0JPT0wgIAkqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFFWbGFuc09ubHkKKgoqIERFU0NSSVBUSU9OOgoqCQk4MDIuMVEgVkxBTnMgT25seS4KKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQsIHRoZSBlZ3Jlc3MgbWFwcGluZyBvZiB0aGUgZnJhbWUgaXMgCioJCWxpbWl0ZWQgYnkgdGhlIGZyYW1lJ3MgVklEICh1c2luZyB0aGUgTWVtYmVyVGFnIGRhdGEgZm91bmQgaW4gdGhlIFZUVSkgCioJCXRvZ2V0aGVyIHdpdGggdGhlIHBvcnQgYmFzZWQgVkxBTnMgKHVzaW5nIHRoZSBzb3VyY2UgcG9ydCdzIFBvcnRWTEFOVGFibGUsIAoqCQlndmxuU2V0UG9ydFZsYW5Qb3J0cyBBUEkpLiBUaGUgdHdvIG1ldGhvZHMgYXJlIGFsd2F5cyB1c2VkIHRvZ2V0aGVyIGluIAoqCQl0aGlzIG1vZGUuCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIHRoZSBlZ3Jlc3MgbWFwcGluZyBvZiB0aGUgZnJhbWUgaXMgbGltaXRpZWQKKgkJYnkgdGhlIGZyYW1lJ3MgVklEIG9ubHksIGlmIHRoZSBWSUQgd2FzIGZvdW5kIGluIHRoZSBWVFUuIElmIHRoZSBmcmFtZSdzCioJCVZJRCB3YXMgbm90IGZvdW5kIGluIHRoZSBWVFUgdGhlIGVncmVzcyBtYXBwaW5nIG9mIHRoZSBmcmFtZSBpcyBsaW1pdGVkCioJCWJ5IHRoZSBzb3VyY2UgcG9ydCdzIFBvcnRWTEFOVGFibGUgb25seS4gVGhlIHR3byBtZXRob2RzIGFyZSBuZXZlcgoqCQl1c2VkIHRvZ2V0aGVyIGluIHRoaXMgbW9kZS4KKgoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIHVzZSA4MDIuMVEgVmxhbiBPbmx5IGZlYXR1cmUsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRRVmxhbnNPbmx5CigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfQk9PTAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFFWbGFuc09ubHkKKgoqIERFU0NSSVBUSU9OOgoqCQk4MDIuMVEgVkxBTnMgT25seS4KKgkJV2hlbiB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQsIHRoZSBlZ3Jlc3MgbWFwcGluZyBvZiB0aGUgZnJhbWUgaXMgCioJCWxpbWl0ZWQgYnkgdGhlIGZyYW1lJ3MgVklEICh1c2luZyB0aGUgTWVtYmVyVGFnIGRhdGEgZm91bmQgaW4gdGhlIFZUVSkgCioJCXRvZ2V0aGVyIHdpdGggdGhlIHBvcnQgYmFzZWQgVkxBTnMgKHVzaW5nIHRoZSBzb3VyY2UgcG9ydCdzIFBvcnRWTEFOVGFibGUsIAoqCQlndmxuU2V0UG9ydFZsYW5Qb3J0cyBBUEkpLiBUaGUgdHdvIG1ldGhvZHMgYXJlIGFsd2F5cyB1c2VkIHRvZ2V0aGVyIGluIAoqCQl0aGlzIG1vZGUuCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIHRoZSBlZ3Jlc3MgbWFwcGluZyBvZiB0aGUgZnJhbWUgaXMgbGltaXRpZWQKKgkJYnkgdGhlIGZyYW1lJ3MgVklEIG9ubHksIGlmIHRoZSBWSUQgd2FzIGZvdW5kIGluIHRoZSBWVFUuIElmIHRoZSBmcmFtZSdzCioJCVZJRCB3YXMgbm90IGZvdW5kIGluIHRoZSBWVFUgdGhlIGVncmVzcyBtYXBwaW5nIG9mIHRoZSBmcmFtZSBpcyBsaW1pdGVkCioJCWJ5IHRoZSBzb3VyY2UgcG9ydCdzIFBvcnRWTEFOVGFibGUgb25seS4gVGhlIHR3byBtZXRob2RzIGFyZSBuZXZlcgoqCQl1c2VkIHRvZ2V0aGVyIGluIHRoaXMgbW9kZS4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWVuIC0gR1RfVFJVRSBpZiA4MDIuMVEgVmxhbiBPbmx5IGZlYXR1cmUgaXMgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UVZsYW5zT25seQooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfQk9PTCAgCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0NUJpdFBvcnQKKgoqIERFU0NSSVBUSU9OOgoqCQlVc2UgNSBiaXRzIGZvciBQb3J0IGRhdGEgaW4gdGhlIFBvcnQgVkxBTiBUYWJsZSAoUFZUKS4gCioJCVdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIHRoZSA5IGJpdHMgdXNlZCB0byBhY2Nlc3MgdGhlIFBWVCBtZW1vcnkgaXM6CioJCQlBZGRyWzg6NV0gPSBTb3VyY2UgRGV2aWNlWzM6MF0gb3IgRGV2aWNlIE51bWJlclszOjBdCioJCQlBZGRyWzQ6MF0gPSBTb3VyY2UgUG9ydC9UcnVua1s0OjBdCioJCVdoZW4gaXQncyBkaXNhYmxlZCwgdGhlIDkgYml0cyB1c2VkIHRvIGFjY2VzcyB0aGUgUFZUIG1lbW9yeSBpczoKKgkJCUFkZHJbODo0XSA9IFNvdXJjZSBEZXZpY2VbNDowXSBvciBEZXZpY2UgTnVtYmVyWzQ6MF0KKgkJCUFkZHJbMzowXSA9IFNvdXJjZSBQb3J0L1RydW5rWzM6MF0KKgoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIHVzZSA1IGJpdCBhcyBhIFNvdXJjZSBwb3J0IGluIFBWVCwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldDVCaXRQb3J0CigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfQk9PTAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldDVCaXRQb3J0CioKKiBERVNDUklQVElPTjoKKgkJVXNlIDUgYml0cyBmb3IgUG9ydCBkYXRhIGluIHRoZSBQb3J0IFZMQU4gVGFibGUgKFBWVCkuIAoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCB0aGUgOSBiaXRzIHVzZWQgdG8gYWNjZXNzIHRoZSBQVlQgbWVtb3J5IGlzOgoqCQkJQWRkcls4OjVdID0gU291cmNlIERldmljZVszOjBdIG9yIERldmljZSBOdW1iZXJbMzowXQoqCQkJQWRkcls0OjBdID0gU291cmNlIFBvcnQvVHJ1bmtbNDowXQoqCQlXaGVuIGl0J3MgZGlzYWJsZWQsIHRoZSA5IGJpdHMgdXNlZCB0byBhY2Nlc3MgdGhlIFBWVCBtZW1vcnkgaXM6CioJCQlBZGRyWzg6NF0gPSBTb3VyY2UgRGV2aWNlWzQ6MF0gb3IgRGV2aWNlIE51bWJlcls0OjBdCioJCQlBZGRyWzM6MF0gPSBTb3VyY2UgUG9ydC9UcnVua1szOjBdCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgaWYgNSBiaXQgaXMgdXNlZCBhcyBhIFNvdXJjZSBQb3J0IGluIFBWVCwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0NUJpdFBvcnQKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX0JPT0wgIAkqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFNERVRQb2xhcml0eQoqCiogREVTQ1JJUFRJT046CioJCVNERVQgKFNpZ25hbCBEZXRlY3QpIFBvbGFyaXR5IHNlbGVjdCBiaXRzIGZvciBlYWNoIHBvcnQuIAoqCQlCaXQgMTAgaXMgZm9yIFBvcnQgMTAsIGJpdCA5IGlzIGZvciBQb3J0IDksIGV0Yy4gU0RFVCBpcyB1c2VkIHRvIGhlbHAgCioJCWRldGVybWluZSBsaW5rIG9uIGZpYmVyIHBvcnRzLiBUaGlzIGJpdCBhZmZlY3RzIHRoZSBhY3RpdmUgbGV2ZWwgb2YgYSAKKgkJcG9ydCdzIFNERVQgcGlucyBhcyBmb2xsb3dzOgoqCQkJMCA9IFNERVQgaXMgYWN0aXZlIGxvdy4gQSBsb3cgbGV2ZWwgb24gdGhlIHBvcnQncyBTREVUIHBpbiBpcyAKKgkJCQlyZXF1aXJlZCBmb3IgbGluayB0byBvY2N1ci4KKgkJCTEgPSBTREVUIGlzIGFjdGl2ZSBoaWdoLiBBIGhpZ2ggbGV2ZWwgb24gdGhlIHBvcnSScyBTREVUIHBpbiBpcyAKKgkJCQlyZXF1aXJlZCBmb3IgbGluayB0byBvY2N1ci4KKgkJU0RFVCBpcyB1c2VkIHdoZW4gdGhlIHBvcnQgaXMgY29uZmlndXJlZCBhcyBhIGZpYmVyIHBvcnQuIEluIGFsbCBvdGhlciAKKgkJcG9ydCBtb2RlcyB0aGUgU0RFVCBwaW5zIGFyZSBpZ25vcmVkIGFuZCB0aGVzZSBiaXRzIGhhdmUgbm8gZWZmZWN0LgoqCiogSU5QVVRTOgoqCQlzZGV0VmVjIC0gU0RFVCBQb2xhcml0eSBmb3IgZWFjaCBwb3J0IGluIFZlY3RvciBmb3JtYXQKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgc2RldFZlYyBpcyBpbnZhbGlkCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0U0RFVFBvbGFyaXR5CigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfVTMyICAJCXNkZXRWZWMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFNERVRQb2xhcml0eQoqCiogREVTQ1JJUFRJT046CioJCVNERVQgKFNpZ25hbCBEZXRlY3QpIFBvbGFyaXR5IHNlbGVjdCBiaXRzIGZvciBlYWNoIHBvcnQuIAoqCQlCaXQgMTAgaXMgZm9yIFBvcnQgMTAsIGJpdCA5IGlzIGZvciBQb3J0IDksIGV0Yy4gU0RFVCBpcyB1c2VkIHRvIGhlbHAgCioJCWRldGVybWluZSBsaW5rIG9uIGZpYmVyIHBvcnRzLiBUaGlzIGJpdCBhZmZlY3RzIHRoZSBhY3RpdmUgbGV2ZWwgb2YgYSAKKgkJcG9ydCdzIFNERVQgcGlucyBhcyBmb2xsb3dzOgoqCQkJMCA9IFNERVQgaXMgYWN0aXZlIGxvdy4gQSBsb3cgbGV2ZWwgb24gdGhlIHBvcnQncyBTREVUIHBpbiBpcyAKKgkJCQlyZXF1aXJlZCBmb3IgbGluayB0byBvY2N1ci4KKgkJCTEgPSBTREVUIGlzIGFjdGl2ZSBoaWdoLiBBIGhpZ2ggbGV2ZWwgb24gdGhlIHBvcnSScyBTREVUIHBpbiBpcyAKKgkJCQlyZXF1aXJlZCBmb3IgbGluayB0byBvY2N1ci4KKgkJU0RFVCBpcyB1c2VkIHdoZW4gdGhlIHBvcnQgaXMgY29uZmlndXJlZCBhcyBhIGZpYmVyIHBvcnQuIEluIGFsbCBvdGhlciAKKgkJcG9ydCBtb2RlcyB0aGUgU0RFVCBwaW5zIGFyZSBpZ25vcmVkIGFuZCB0aGVzZSBiaXRzIGhhdmUgbm8gZWZmZWN0LgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJc2RldFZlYyAtIFNERVQgUG9sYXJpdHkgZm9yIGVhY2ggcG9ydCBpbiBWZWN0b3IgZm9ybWF0CioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRTREVUUG9sYXJpdHkKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJT1VUIEdUX1UzMiAgCSpzZGV0VmVjCik7CgoKLyogZ3RCcmdWbGFuLmMgZm9yIDIuNiByZWxlYXNlICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2bG5TZXROb0VnclBvbGljeQoqCiogREVTQ1JJUFRJT046CioJCU5vIEVncmVzcyBQb2xpY3kuIFdoZW4gdGhpcyBiaXQgaXMgc2V0IHRvIGEgb25lIEVncmVzcyA4MDIuMVEgU2VjdXJlIGFuZAoqCQlDaGVjayBkaXNjYXJkcyBhcmUgbm90IHBlcmZvcm1lZC4gVGhpcyBtb2RlIGFsbG93c2Egbm9uLTgwMi4xUSBlbmFibGVkIAoqCQlwb3J0IHRvIHNlbmQgYSBmcmFtZSB0byBhbiA4MDIuMVEgZW5hYmxlZCBwb3J0IHRoYXQgaXMgY29uZmlndXJlZCBpbiB0aGUKKgkJU2VjdXJlIG9yIENoZWNrIDgwMi4xUSBtb2RlLiBJbiB0aGlzIHNpdHVhdGlvbiB0aGUgZnJhbWVzIHdpbGwgZWdyZXNzIAoqCQlldmVuIGlmIHRoZSBWSUQgYXNzaWduZWQgdG8gdGhlIGZyYW1lIGlzIG5vdCBmb3VuZCBpbiB0aGUgVlRVLgoqCiogSU5QVVRTOgoqCQltb2RlIC0gbm8gZWdyZXNzIHBvbGljeSBtb2RlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndmxuU2V0Tm9FZ3JQb2xpY3kKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9CT09MCQltb2RlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndmxuR2V0Tm9FZ3JQb2xpY3kKKgoqIERFU0NSSVBUSU9OOgoqCQlObyBFZ3Jlc3MgUG9saWN5LiBXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSBFZ3Jlc3MgODAyLjFRIFNlY3VyZSBhbmQKKgkJQ2hlY2sgZGlzY2FyZHMgYXJlIG5vdCBwZXJmb3JtZWQuIFRoaXMgbW9kZSBhbGxvd3NhIG5vbi04MDIuMVEgZW5hYmxlZCAKKgkJcG9ydCB0byBzZW5kIGEgZnJhbWUgdG8gYW4gODAyLjFRIGVuYWJsZWQgcG9ydCB0aGF0IGlzIGNvbmZpZ3VyZWQgaW4gdGhlCioJCVNlY3VyZSBvciBDaGVjayA4MDIuMVEgbW9kZS4gSW4gdGhpcyBzaXR1YXRpb24gdGhlIGZyYW1lcyB3aWxsIGVncmVzcyAKKgkJZXZlbiBpZiB0aGUgVklEIGFzc2lnbmVkIHRvIHRoZSBmcmFtZSBpcyBub3QgZm91bmQgaW4gdGhlIFZUVS4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBubyBlZ3Jlc3MgcG9saWN5IG1vZGUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3ZsbkdldE5vRWdyUG9saWN5CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9CT09MCQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnd2RTZXRSTVVUaW1lT3V0CioKKiBERVNDUklQVElPTjoKKgkJUmVtb3RlIE1hbmFnZW1lbnQgVGltZW91dC4gV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gYSBvbmUgdGhlIFJlbW90ZQoqCQlNYW5hZ2VtZW50IFVuaXQoUk1VKSB3aWxsIHRpbWVvdXQgb24gV2FpdCBvbiBCaXQgY29tbWFuZHMuIElmIHRoZSBiaXQgdGhhdAoqCQlpcyBiZWluZyB0ZXN0ZWQgaGFzIG5vdCBnb25lIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUgYWZ0ZXIgMSBzZWMuIGhhcyBlbGFwc2VkCioJCXRoZSBXYWl0IG9uIEJpdCBjb21tYW5kIHdpbGwgYmUgdGVybWluYXRlZCBhbmQgdGhlIFJlc3BvbnNlIGZyYW1lIHdpbGwgYmUKKgkJc2VudCB3aXRob3V0IGFueSBmdXJ0aGVyIHByb2Nlc3NpbmcuCioKKgkJV2hlbiB0aGlzIGJpdCBpcyBjbGVhcmVkIHRvIGEgemVybyB0aGUgV2FpdCBvbiBCaXQgY29tbWFuZCB3aWxsIHdhaXQgCioJCXVudGlsIHRoZSBiaXQgdGhhdCBpcyBiZWluZyB0ZXN0ZWQgaGFzIGNoYW5nZWQgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS4KKgoqIElOUFVUUzoKKgkJZW4gICAtIEdUX1RSVUUgdG8gZW5hYmxlIFJNVSBUaW1lb3V0CioJCQkgICBHVF9GQUxVU0UgdG8gZGlzYWJsZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd3ZFNldFJNVVRpbWVPdXQKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0JPT0wJICAgIGVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd3ZEdldFJNVVRpbWVPdXQKKgoqIERFU0NSSVBUSU9OOgoqCQlSZW1vdGUgTWFuYWdlbWVudCBUaW1lb3V0LiBXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSB0aGUgUmVtb3RlCioJCU1hbmFnZW1lbnQgVW5pdChSTVUpIHdpbGwgdGltZW91dCBvbiBXYWl0IG9uIEJpdCBjb21tYW5kcy4gSWYgdGhlIGJpdCB0aGF0CioJCWlzIGJlaW5nIHRlc3RlZCBoYXMgbm90IGdvbmUgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBhZnRlciAxIHNlYy4gaGFzIGVsYXBzZWQKKgkJdGhlIFdhaXQgb24gQml0IGNvbW1hbmQgd2lsbCBiZSB0ZXJtaW5hdGVkIGFuZCB0aGUgUmVzcG9uc2UgZnJhbWUgd2lsbCBiZQoqCQlzZW50IHdpdGhvdXQgYW55IGZ1cnRoZXIgcHJvY2Vzc2luZy4KKgoqCQlXaGVuIHRoaXMgYml0IGlzIGNsZWFyZWQgdG8gYSB6ZXJvIHRoZSBXYWl0IG9uIEJpdCBjb21tYW5kIHdpbGwgd2FpdCAKKgkJdW50aWwgdGhlIGJpdCB0aGF0IGlzIGJlaW5nIHRlc3RlZCBoYXMgY2hhbmdlZCB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW4gICAtIEdUX1RSVUUgdG8gZW5hYmxlIFJNVSBUaW1lb3V0CioJCQkgICBHVF9GQUxVU0UsIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3dkR2V0Uk1VVGltZU91dAooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfQk9PTAkgICAgKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd3ZEdldEVncmVzc1dERXZlbnQKKgoqIERFU0NSSVBUSU9OOgoqCQlJZiBhbnkgcG9ydCdzIGVncmVzcyBsb2dpYyBkZXRlY3RzIGFuIGVncmVzcyB3YXRjaCBkb2cgaXNzdWUsIHRoaXMgYml0CioJCXdpbGwgYmUgc2V0IHRvIGEgb25lLCByZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5nIG9mIHRoZSBHVF9XRF9FR1JFU1MgaW4KKgkJZ3dkU2V0RXZlbnQgZnVuY3Rpb24uCioJCQoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWV2ZW50IC0gR1RfVFJVRSwgaWYgZWdyZXNzIGxvZ2ljIGhhcyBkZXRlY3RlZCBhbnkgZWdyZXNzIHdhdGNoIGRvZyBpc3N1ZQoqCQkJICAgIEdUX0ZBTFVTRSwgb3RoZXJ3aXNlCioKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd3ZEdldEVncmVzc1dERXZlbnQKKAoJSU4gIEdUX1FEX0RFVgkJKmRldiwKCU9VVCBHVF9CT09MCQkJKmV2ZW50Cik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UW9TV2VpZ2h0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBQcm9ncmFtbWFibGUgUm91bmQgUm9iaW4gV2VpZ2h0cy4KKgkJRWFjaCBwb3J0IGhhcyA0IG91dHB1dCBRdWV1ZXMuIFF1ZXVlIDMgaGFzIHRoZSBoaWdoZXN0IHByaW9yaXR5IGFuZCAKKgkJUXVldWUgMCBoYXMgdGhlIGxvd2VzdCBwcmlvcml0eS4gV2hlbiBhIHNjaGVkdWxpbmcgbW9kZSBvZiBwb3J0IGlzIAoqCQljb25maWd1cmVkIGFzIFdlaWdodGVkIFJvdW5kIFJvYmluIHF1ZXVpbmcgbW9kZSwgdGhlIGFjY2VzcyBzZXF1ZWNlIG9mIHRoZSAKKgkJUXVldWUgaXMgMywyLDMsMSwzLDIsMywwLDMsMiwzLDEsMywyLDMgYnkgZGVmYXVsdC4KKgkJVGhpcyBzZXF1ZW5jZSBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHRoaXMgQVBJLgoqCiogSU5QVVRTOgoqICAgICAgIHdlaWdodCAtIGFjY2VzcyBzZXF1ZW5jZSBvZiB0aGUgcXVldWUKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0UW9TV2VpZ2h0CigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgSU4gIEdUX1FvU19XRUlHSFQJKndlaWdodAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0UW9TV2VpZ2h0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBQcm9ncmFtbWFibGUgUm91bmQgUm9iaW4gV2VpZ2h0cy4KKgkJRWFjaCBwb3J0IGhhcyA0IG91dHB1dCBRdWV1ZXMuIFF1ZXVlIDMgaGFzIHRoZSBoaWdoZXN0IHByaW9yaXR5IGFuZCAKKgkJUXVldWUgMCBoYXMgdGhlIGxvd2VzdCBwcmlvcml0eS4gV2hlbiBhIHNjaGVkdWxpbmcgbW9kZSBvZiBwb3J0IGlzIAoqCQljb25maWd1cmVkIGFzIFdlaWdodGVkIFJvdW5kIFJvYmluIHF1ZXVpbmcgbW9kZSwgdGhlIGFjY2VzcyBzZXF1ZWNlIG9mIHRoZSAKKgkJUXVldWUgaXMgMywyLDMsMSwzLDIsMywwLDMsMiwzLDEsMywyLDMgYnkgZGVmYXVsdC4KKgkJVGhpcyByb3V0aW5lIHJldHJpZXZlcyB0aGUgYWNjZXNzIHNlcXVlbmNlIG9mIHRoZSBRdWV1ZS4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKiAgICAgICB3ZWlnaHQgLSBhY2Nlc3Mgc2VxdWVuY2Ugb2YgdGhlIHF1ZXVlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFFvU1dlaWdodAooCiAgICBJTiAgR1RfUURfREVWIAkJKmRldiwKICAgIE9VVCBHVF9Rb1NfV0VJR0hUCSp3ZWlnaHQKKTsKCgovKgogKglndFBvcnRDdHJsLmMKKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEp1bWJvTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIFNldCB0aGUgbWF4IGZyYW1lIHNpemUgYWxsb3dlZCB0byBiZSByZWNlaXZlZCBhbmQgdHJhbnNtaXR0ZWQKKgkJZnJvbSBvciB0byBhIGdpdmVuIHBvcnQuCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqICAgICAgIG1vZGUgLSBHVF9KVU1CT19NT0RFICgxNTIyLCAyMDQ4LCBvciAxMDI0MCkKKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRKdW1ib01vZGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglJTiAgR1RfSlVNQk9fTU9ERSAgIG1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEp1bWJvTW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgdGhlIG1heCBmcmFtZSBzaXplIGFsbG93ZWQgdG8gYmUgcmVjZWl2ZWQgYW5kIHRyYW5zbWl0dGVkCioJCWZyb20gb3IgdG8gYSBnaXZlbiBwb3J0LgoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBtb2RlIC0gR1RfSlVNQk9fTU9ERSAoMTUyMiwgMjA0OCwgb3IgMTAyNDApCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRKdW1ib01vZGUKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglPVVQgR1RfSlVNQk9fTU9ERSAgICptb2RlCik7CgovKgogKiAgZ3RQaHlDdHJsLmMKKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0RW5lcmd5RGV0ZWN0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBFbmVyZ3kgRGV0ZWN0IHBvd2VyIGRvd24gbW9kZSBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBQSFkgdG8gd2FrZSB1cCBvbgoqCQlpdHMgb3duIGJ5IGRldGVjdGluZyBhY3Rpdml0eSBvbiB0aGUgQ0FUIDUgY2FibGUuIAoqCiogSU5QVVRTOgoqIAkJcG9ydCAtIFRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqICAgICAgIG1vZGUgLSBHVF9FREVURUNUX01PREUgdHlwZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0R2V0RW5lcmd5RGV0ZWN0CigKCUlOICBHVF9RRF9ERVYgKmRldiwKCUlOICBHVF9MUE9SVCAgcG9ydCwKCU9VVCBHVF9FREVURUNUX01PREUgICAqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0RW5lcmd5RGV0ZWN0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBFbmVyZ3kgRGV0ZWN0IHBvd2VyIGRvd24gbW9kZSBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSBQSFkgdG8gd2FrZSB1cCBvbgoqCQlpdHMgb3duIGJ5IGRldGVjdGluZyBhY3Rpdml0eSBvbiB0aGUgQ0FUIDUgY2FibGUuIAoqCiogSU5QVVRTOgoqIAkJcG9ydCAtIFRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgbW9kZSAtIEdUX0VERVRFQ1RfTU9ERSB0eXBlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpHVF9TVEFUVVMgZ3BydFNldEVuZXJneURldGVjdAooCglJTiAgR1RfUURfREVWICpkZXYsCglJTiAgR1RfTFBPUlQgIHBvcnQsCglJTiAgR1RfRURFVEVDVF9NT0RFICAgbW9kZQopOwoKCi8qCiAqCWd0U3lzQ3RybC5jCiovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRSTVVNb2RlCioKKiBERVNDUklQVElPTjoKKgkJU2V0IFJtb3RlIE1hbmFnZW1lbnQgVW5pdCBNb2RlOiBkaXNhYmxlLCBlbmFibGUgb24gcG9ydCA0IG9yIDUsIG9yIGVuYWJsZQoqCQlvbiBwb3J0IDkgb3IgMTAuIERldmljZXMsIHN1Y2ggYXMgODhFNjA5Nywgc3VwcG9ydCBSTVUgb24gcG9ydCA5IGFuZCAxMCwgCioJCXdoaWxlIG90aGVyIGRldmljZXMsIHN1Y2ggYXMgODhFNjE2NSwgc3VwcG9ydCBSTVUgb24gcG9ydCA0IGFuZCA1LiBTbywKKgkJcGxlYXNlIHJlZmVyIHRvIHRoZSBkZXZpY2UgZGF0YXNoZWV0IGZvciBkZXRhaWwuCioJCVdoZW4gUk1VIGlzIGVuYWJsZWQgYW5kIHRoaXMgZGV2aWNlIHJlY2VpdmVzIGEgUmVtb3RlIE1hbmFnZW1lbnQgUmVxdWVzdAoqCQlmcmFtZSBkaXJlY3RlZCB0byB0aGlzIGRldmljZSwgdGhlIGZyYW1lIHdpbGwgYmUgcHJvY2Vzc2VkIGFuZCBhIFJlbW90ZSAKKgkJTWFuYWdlbWVudCBSZXNwb25zZSBmcmFtZSB3aWxsIGJlIGdlbmVyYXRlZCBhbmQgc2VudCBvdXQuCioJCQoqCQlOb3RlOiBlbmFibGluZyBSTVUgaGFzIG5vIGVmZmVjdCBpZiB0aGUgUmVtb3RlIE1hbmFnZW1lbnQgcG9ydCBpcyBpbiBoYWxmCioJCWR1cGxleCBtb2RlLiBUaGUgcG9ydCdzIEZyYW1lTW9kZSBtdXN0IGJlIERTQSBvciBFdGhlclR5cGUgRFNBIGFzIHdlbGwuCioJCQoqIElOUFVUUzoKKgkJcm11IC0gR1RfUk1VIHN0cnVjdHVyZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gICAgIC0gb24gYmFkIHBhcmFtZXRlcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFJNVU1vZGUKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9STVUJCSpybXUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFJNVU1vZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlHZXQgUm1vdGUgTWFuYWdlbWVudCBVbml0IE1vZGU6IGRpc2FibGUsIGVuYWJsZSBvbiBwb3J0IDQgb3IgNSwgb3IgZW5hYmxlCioJCW9uIHBvcnQgOSBvciAxMC4gRGV2aWNlcywgc3VjaCBhcyA4OEU2MDk3LCBzdXBwb3J0IFJNVSBvbiBwb3J0IDkgYW5kIDEwLCAKKgkJd2hpbGUgb3RoZXIgZGV2aWNlcywgc3VjaCBhcyA4OEU2MTY1LCBzdXBwb3J0IFJNVSBvbiBwb3J0IDQgYW5kIDUuIFNvLAoqCQlwbGVhc2UgcmVmZXIgdG8gdGhlIGRldmljZSBkYXRhc2hlZXQgZm9yIGRldGFpbC4KKgkJV2hlbiBSTVUgaXMgZW5hYmxlZCBhbmQgdGhpcyBkZXZpY2UgcmVjZWl2ZXMgYSBSZW1vdGUgTWFuYWdlbWVudCBSZXF1ZXN0CioJCWZyYW1lIGRpcmVjdGVkIHRvIHRoaXMgZGV2aWNlLCB0aGUgZnJhbWUgd2lsbCBiZSBwcm9jZXNzZWQgYW5kIGEgUmVtb3RlIAoqCQlNYW5hZ2VtZW50IFJlc3BvbnNlIGZyYW1lIHdpbGwgYmUgZ2VuZXJhdGVkIGFuZCBzZW50IG91dC4KKgkJCioJCU5vdGU6IGVuYWJsaW5nIFJNVSBoYXMgbm8gZWZmZWN0IGlmIHRoZSBSZW1vdGUgTWFuYWdlbWVudCBwb3J0IGlzIGluIGhhbGYKKgkJZHVwbGV4IG1vZGUuIFRoZSBwb3J0J3MgRnJhbWVNb2RlIG11c3QgYmUgRFNBIG9yIEV0aGVyVHlwZSBEU0EgYXMgd2VsbC4KKgkJCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJcm11IC0gR1RfUk1VIHN0cnVjdHVyZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0Uk1VTW9kZQooCglJTiAgR1RfUURfREVWCSpkZXYsCglPVVQgR1RfUk1VCQkqcm11Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNQb3J0Mkxwb3J0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGNvbnZlcnRzIHBoeXNpY2FsIHBvcnQgbnVtYmVyIHRvIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBJTlBVVFM6CioJCXBvcnQgLSBwaHlzaWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKgkJbHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMIC0gb24gZXJyb3IKKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzUG9ydDJMcG9ydAooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfVTMyIAkJcG9ydCwKCU9VVCBHVF9MUE9SVAkqbHBvcnQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0xwb3J0MlBvcnQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgY29udmVydHMgbG9naWNhbCBwb3J0IG51bWJlciB0byBwaHlzaWNhbCBwb3J0IG51bWJlci4KKgoqIElOUFVUUzoKKgkJbHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQlwb3J0IC0gcGh5c2ljYWwgcG9ydCBudW1iZXIKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNMcG9ydDJQb3J0CigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVAlscG9ydCwKCU9VVCBHVF9VMzIgCQkqcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzUG9ydHZlYzJMcG9ydHZlYwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBjb252ZXJ0cyBwaHlzaWNhbCBwb3J0IHZlY3RvciB0byBsb2dpY2FsIHBvcnQgdmVjdG9yLgoqCiogSU5QVVRTOgoqCQlwb3J0dmVjIC0gcGh5c2ljYWwgcG9ydCB2ZWN0b3IKKgoqIE9VVFBVVFM6CioJCWxwb3J0dmVjIC0gbG9naWNhbCBwb3J0IHZlY3RvcgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1BvcnR2ZWMyTHBvcnR2ZWMKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX1UzMgkJcG9ydHZlYywKCU9VVCBHVF9VMzIgCQkqbHBvcnR2ZWMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0xwb3J0dmVjMlBvcnR2ZWMKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgY29udmVydHMgbG9naWNhbCBwb3J0IHZlY3RvciB0byBwaHlzaWNhbCBwb3J0IHZlY3Rvci4KKgoqIElOUFVUUzoKKgkJbHBvcnR2ZWMgLSBsb2dpY2FsIHBvcnQgdmVjdG9yCioKKiBPVVRQVVRTOgoqCQlwb3J0dmVjIC0gcGh5c2ljYWwgcG9ydCB2ZWN0b3IKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNMcG9ydHZlYzJQb3J0dmVjCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9VMzIJCWxwb3J0dmVjLAoJT1VUIEdUX1UzMiAJCSpwb3J0dmVjCik7CgoKLyoKICogZ3RQSVJMLmMKICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwaXJsU2V0Q3VyVGltZVVwSW50CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGN1cnJlbnQgdGltZSB1cGRhdGUgaW50ZXJ2YWwuCioJCVBsZWFzZSBjb250YWN0IEZBRSBmb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24uCioKKiBJTlBVVFM6CiogICAgICAgdXBJbnQgLSB1cGRhdGEgaW50ZXJ2YWwgKDAgfiA3KQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGlybFNldEN1clRpbWVVcEludAooCiAgICBJTiAgR1RfUURfREVWICAJCQkqZGV2LAoJSU4JR1RfVTMyCQkJCXVwSW50Cik7CgoKLyoKICogZ3RQSVJMMi5jCiAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncGlybDJTZXRDdXJUaW1lVXBJbnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgY3VycmVudCB0aW1lIHVwZGF0ZSBpbnRlcnZhbC4KKgkJUGxlYXNlIGNvbnRhY3QgRkFFIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbi4KKgoqIElOUFVUUzoKKiAgICAgICB1cEludCAtIHVwZGF0YSBpbnRlcnZhbCAoMCB+IDcpCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwaXJsMlNldEN1clRpbWVVcEludAooCiAgICBJTiAgR1RfUURfREVWICAJCQkqZGV2LAoJSU4JR1RfVTMyCQkJCXVwSW50Cik7CgoKLyoKICogZ3RQVFAuYwogKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFNldENvbmZpZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHdyaXRlcyBQVFAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogSU5QVVRTOgoqCQlwdHBEYXRhICAtIFBUUCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwU2V0Q29uZmlnCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfUFRQX0NPTkZJRwkqcHRwRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwR2V0Q29uZmlnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmVhZHMgUFRQIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKgkJcHRwRGF0YSAgLSBQVFAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cEdldENvbmZpZwooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX1BUUF9DT05GSUcJKnB0cERhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFNldEdsb2JhbENvbmZpZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHdyaXRlcyBQVFAgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKgoqIElOUFVUUzoKKgkJcHRwRGF0YSAgLSBQVFAgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRHbG9iYWxDb25maWcKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9QVFBfR0xPQkFMX0NPTkZJRwkqcHRwRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwR2V0R2xvYmFsQ29uZmlnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcmVhZHMgUFRQIGdsb2JhbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CioJCXB0cERhdGEgIC0gUFRQIGdsb2JhbCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwR2V0R2xvYmFsQ29uZmlnCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfUFRQX0dMT0JBTF9DT05GSUcJKnB0cERhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFNldFBvcnRDb25maWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSB3cml0ZXMgUFRQIHBvcnQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogSU5QVVRTOgoqCQlwdHBEYXRhICAtIFBUUCBwb3J0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRQb3J0Q29uZmlnCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTglHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX1BUUF9QT1JUX0NPTkZJRwkqcHRwRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwR2V0UG9ydENvbmZpZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHJlYWRzIFBUUCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIGEgcG9ydC4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKgkJcHRwRGF0YSAgLSBQVFAgcG9ydCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwR2V0UG9ydENvbmZpZwooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4JR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9QVFBfUE9SVF9DT05GSUcJKnB0cERhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFNldFBUUEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZW5hYmxlcyBvciBkaXNhYmxlcyBQVFAuCioKKiBJTlBVVFM6CioJCWVuIC0gR1RfVFJVRSB0byBlbmFibGUgUFRQLCBHVF9GQUxTRSB0byBkaXNhYmxlIFBUUAoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cFNldFBUUEVuCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfQk9PTAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cEdldFBUUEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgY2hlY2tzIGlmIFBUUCBpcyBlbmFibGVkLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgaWYgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwR2V0UFRQRW4KKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9CT09MCQkqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFNldFBvcnRQVFBFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGVuYWJsZXMgb3IgZGlzYWJsZXMgUFRQIG9uIGEgcG9ydC4KKgoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIGVuYWJsZSBQVFAsIEdUX0ZBTFNFIHRvIGRpc2FibGUgUFRQCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwU2V0UG9ydFBUUEVuCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTglHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX0JPT0wJCWVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRQb3J0UFRQRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBjaGVja3MgaWYgUFRQIGlzIGVuYWJsZWQgb24gYSBwb3J0LgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgaWYgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwR2V0UG9ydFBUUEVuCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTglHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSplbgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cEdldFBUUEludAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgUFRQIGludGVycnVwdCBzdGF0dXMgZm9yIGVhY2ggcG9ydC4KKgkJVGhlIFBUUCBJbnRlcnJ1cHQgYml0IGdldHMgc2V0IGZvciBhIGdpdmVuIHBvcnQgd2hlbiBhbiBpbmNvbWluZyBQVFAgCioJCWZyYW1lIGlzIHRpbWUgc3RhbXBlZCBhbmQgUFRQQXJySW50RW4gZm9yIHRoYXQgcG9ydCBpcyBzZXQgdG8gMHgxLgoqCQlTaW1pbGFyeSBQVFAgSW50ZXJydXB0IGJpdCBnZXRzIHNldCBmb3IgYSBnaXZlbiBwb3J0IHdoZW4gYW4gb3V0Z29pbmcKKgkJUFRQIGZyYW1lIGlzIHRpbWUgc3RhbXBlZCBhbmQgUFRQRGVwSW50RW4gZm9yIHRoYXQgcG9ydCBpcyBzZXQgdG8gMHgxLgoqCQlUaGlzIGJpdCBnZXRzIGNsZWFyZWQgdXBvbiBzb2Z0d2FyZSByZWFkaW5nIGFuZCBjbGVhcmluZyB0aGUgY29ycmVzcG9uZGluZwoqCQl0aW1lIGNvdW50ZXIgdmFsaWQgYml0cyB0aGF0IGFyZSB2YWxpZCBmb3IgdGhhdCBwb3J0LgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqCQlwdHBJbnQgCS0gaW50ZXJydXB0IHN0YXR1cyBmb3IgZWFjaCBwb3J0IChiaXQgMCBmb3IgcG9ydCAwLCBiaXQgMSBmb3IgcG9ydCAxLCBldGMuKQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cEdldFBUUEludAooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX1UzMgkJKnB0cEludAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwR2V0UFRQR2xvYmFsVGltZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgdGhlIGdsb2JhbCB0aW1lciB2YWx1ZSB0aGF0IGlzIHJ1bm5pbmcgb2ZmIG9mIHRoZSBmcmVlCioJCXJ1bm5pbmcgc3dpdGNoIGNvcmUgY2xvY2suCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CioJCXB0cFRpbWUJLSBQVFAgZ2xvYmFsIHRpbWUKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRQVFBHbG9iYWxUaW1lCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfVTMyCQkqcHRwVGltZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwR2V0VGltZVN0YW1wZWQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgcmV0cmlldmVzIHRoZSBQVFAgcG9ydCBzdGF0dXMgdGhhdCBpbmNsdWRlcyB0aW1lIHN0YW1wIHZhbHVlIAoqCQlhbmQgc2VxdWNlIElkIHRoYXQgYXJlIGNhcHR1cmVkIGJ5IFBUUCBsb2dpYyBmb3IgYSBQVFAgZnJhbWUgdGhhdCBuZWVkcyAKKgkJdG8gYmUgdGltZSBzdGFtcGVkLgoqCiogSU5QVVRTOgoqICAgICAgIHBvcnQgCQktIGxvZ2ljYWwgcG9ydCBudW1iZXIuCiogICAgICAgdGltZVRvUmVhZAktIEFycjAsIEFycjEsIG9yIERlcCB0aW1lIChHVF9QVFBfVElNRSBlbnVtIHR5cGUpCioKKiBPVVRQVVRTOgoqCQlwdHBTdGF0dXMJLSBQVFAgcG9ydCBzdGF0dXMKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgCQktIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMIAktIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGludmFsaWQgcGFyYW1ldGVyIGlzIGdpdmVuCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwR2V0VGltZVN0YW1wZWQKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJSU4JR1RfUFRQX1RJTUUJdGltZVRvUmVhZCwKCU9VVCBHVF9QVFBfVFNfU1RBVFVTCSpwdHBTdGF0dXMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFJlc2V0VGltZVN0YW1wCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHJlc2V0cyBQVFAgVGltZSB2YWxpZCBiaXQgc28gdGhhdCBQVFAgbG9naWMgY2FuIHRpbWUgc3RhbXAKKgkJYSBuZXh0IFBUUCBmcmFtZSB0aGF0IG5lZWRzIHRvIGJlIHRpbWUgc3RhbXBlZC4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IAkJLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqICAgICAgIHRpbWVUb1Jlc2V0CS0gQXJyMCwgQXJyMSwgb3IgRGVwIHRpbWUgKEdUX1BUUF9USU1FIGVudW0gdHlwZSkKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LIAkJLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAJLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cFJlc2V0VGltZVN0YW1wCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOCUdUX1BUUF9USU1FCXRpbWVUb1Jlc2V0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRSZWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSByZWFkcyBQVFAgcmVnaXN0ZXIuCioKKiBJTlBVVFM6CiogICAgICAgcG9ydCAJCS0gbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICByZWdPZmZzZXQJLSByZWdpc3RlciB0byByZWFkCioKKiBPVVRQVVRTOgoqCQlkYXRhCQktIHJlZ2lzdGVyIGRhdGEKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRSZWcKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX1UzMgkJcmVnT2Zmc2V0LAoJT1VUIEdUX1UzMgkJKmRhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFNldFJlZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHdyaXRlcyBkYXRhIHRvIFBUUCByZWdpc3Rlci4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IAkJLSBsb2dpY2FsIHBvcnQgbnVtYmVyCiogICAgICAgcmVnT2Zmc2V0CS0gcmVnaXN0ZXIgdG8gYmUgd3JpdHRlbgoqCQlkYXRhCQktIGRhdGEgdG8gYmUgd3JpdHRlbgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRSZWcKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX1UzMgkJcmVnT2Zmc2V0LAoJSU4gIEdUX1UzMgkJZGF0YQopOwoKCiNpZmRlZiBDT05GSUdfQVZCX0ZQR0EKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFNldEZQR0FJbnRTdGF0dXMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXRzIGludGVycnVwdCBzdGF0dXMgb2YgUFRQIGxvZ2ljLgoqCiogSU5QVVRTOgoqCQlpbnRTdGF0dXMJLSBQVFAgSW50IFN0YXR1cwoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cFNldEZQR0FJbnRTdGF0dXMKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9VMzIJaW50U3RhdHVzCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwR2V0RlBHQUludFN0YXR1cwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgaW50ZXJydXB0IHN0YXR1cyBvZiBQVFAgbG9naWMuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CioJCWludFN0YXR1cwktIFBUUCBJbnQgU3RhdHVzCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwR2V0RlBHQUludFN0YXR1cwooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1UzMgkqaW50U3RhdHVzCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0RlBHQUludEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZW5hYmxlcyBQVFAgaW50ZXJydXB0LgoqCiogSU5QVVRTOgoqCQlpbnRFbgktIGVuYWJsZS9kaXNhYmxlIFBUUCBpbnRlcnJ1cHQgKDEgdG8gZW5hYmxlLCAwIHRvIGRpc2FibGUpCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwU2V0RlBHQUludEVuCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVTMyCWludEVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBHZXRDbG9ja1NvdXJjZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgUFRQIENsb2NrIHNvdXJjZSBtb2RlLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqCQljbGtTcmMJLSBQVFAgY2xvY2sgc291cmNlIChBL0QgRGV2aWNlIG9yIEZQR0EpCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwR2V0Q2xvY2tTb3VyY2UKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9QVFBfQ0xPQ0tfU1JDIAkqY2xrU3JjCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBTZXRDbG9ja1NvdXJjZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgUFRQIENsb2NrIHNvdXJjZSBtb2RlLgoqCiogSU5QVVRTOgoqCQljbGtTcmMJLSBQVFAgY2xvY2sgc291cmNlIChBL0QgRGV2aWNlIG9yIEZQR0EpCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwU2V0Q2xvY2tTb3VyY2UKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9QVFBfQ0xPQ0tfU1JDIAljbGtTcmMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cEdldFA5TW9kZQoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgUG9ydCA5IE1vZGUuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CioJCW1vZGUgLSBQb3J0IDkgbW9kZSAoR1RfUFRQX1A5X01PREUgZW51bSB0eXBlKQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cEdldFA5TW9kZQooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX1BUUF9QOV9NT0RFIAkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0UDlNb2RlCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBQb3J0IDkgTW9kZS4KKgoqIElOUFVUUzoKKgkJbW9kZSAtIFBvcnQgOSBtb2RlIChHVF9QVFBfUDlfTU9ERSBlbnVtIHR5cGUpCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwU2V0UDlNb2RlCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfUFRQX1A5X01PREUgCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFJlc2V0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgcGVyZm9ybXMgc29mdHdhcmUgcmVzZXQgZm9yIFBUUCBsb2dpYy4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgTm9uZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBSZXNldAooCglJTiAgR1RfUURfREVWIAkqZGV2Cik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwR2V0Q3ljbGVBZGp1c3RFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGNoZWNrcyBpZiBQVFAgRHV0eSBDeWNsZSBBZGp1c3RtZW50IGlzIGVuYWJsZWQuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CioJCWFkakVuCS0gR1RfVFJVRSBpZiBlbmFibGVkLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRDeWNsZUFkanVzdEVuCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfQk9PTAkJKmFkakVuCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwU2V0Q3ljbGVBZGp1c3RFbgoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGVuYWJsZXMvZGlzYWJsZXMgUFRQIER1dHkgQ3ljbGUgQWRqdXN0bWVudC4KKgoqIElOUFVUUzoKKgkJYWRqRW4JLSBHVF9UUlVFIHRvIGVuYWJsZSwgR1RfRkFMU0UgdG8gZGlzYWJsZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cFNldEN5Y2xlQWRqdXN0RW4KKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9CT09MCQlhZGpFbgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cEdldEN5Y2xlQWRqdXN0CioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZ2V0cyBjbG9jayBkdXR5IGN5Y2xlIGFkanVzdG1lbnQgdmFsdWUuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CioJCWFkagktIGFkanVzdG1lbnQgdmFsdWUgKEdUX1BUUF9DTE9DS19BREpVU1RNRU5UIHN0cnVjdHVyZSkKKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBHZXRDeWNsZUFkanVzdAooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX1BUUF9DTE9DS19BREpVU1RNRU5UCQkqYWRqCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwdHBTZXRDeWNsZUFkanVzdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgY2xvY2sgZHV0eSBjeWNsZSBhZGp1c3RtZW50IHZhbHVlLgoqCiogSU5QVVRTOgoqCQlhZGoJLSBhZGp1c3RtZW50IHZhbHVlIChHVF9QVFBfQ0xPQ0tfQURKVVNUTUVOVCBzdHJ1Y3R1cmUpCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHRwU2V0Q3ljbGVBZGp1c3QKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9QVFBfQ0xPQ0tfQURKVVNUTUVOVAkJKmFkagopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHRwR2V0UExMRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBjaGVja3MgaWYgUExMIGlzIGVuYWJsZWQuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CioJCWVuCQktIEdUX1RSVUUgaWYgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioJCWZyZXFTZWwJLSBQTEwgRnJlcXVlbmN5IFNlbGVjdGlvbiAoZGVmYXVsdCAweDMgLSAyMi4zNjhNSHopCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgUExMIEZyZXF1ZW5jZSBzZWxlY3Rpb24gaXMgYmFzZWQgb24gdGhlIENsb2NrIFJlY292ZXJ5IFBMTCBkZXZpY2UuCioJCUlEVCBNSzE1NzUtMDEgaXMgdGhlIGRlZmF1bHQgUExMIGRldmljZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3B0cEdldFBMTEVuCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfQk9PTAkJKmVuLAoJT1VUIEdUX1UzMgkJKmZyZXFTZWwKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3B0cFNldFBMTEVuCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgZW5hYmxlcy9kaXNhYmxlcyBQTEwgZGV2aWNlLgoqCiogSU5QVVRTOgoqCQllbgkJLSBHVF9UUlVFIHRvIGVuYWJsZSwgR1RfRkFMU0UgdG8gZGlzYWJsZQoqCQlmcmVxU2VsCS0gUExMIEZyZXF1ZW5jeSBTZWxlY3Rpb24gKGRlZmF1bHQgMHgzIC0gMjIuMzY4TUh6KQoqCQkJCSAgTWVhbmluZ2Z1bCBvbmx5IHdoZW4gZW5hYmxpbmcgUExMIGRldmljZQoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIFBMTCBGcmVxdWVuY2Ugc2VsZWN0aW9uIGlzIGJhc2VkIG9uIHRoZSBDbG9jayBSZWNvdmVyeSBQTEwgZGV2aWNlLgoqCQlJRFQgTUsxNTc1LTAxIGlzIHRoZSBkZWZhdWx0IFBMTCBkZXZpY2UuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwdHBTZXRQTExFbgooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX0JPT0wJCWVuLAoJSU4gIEdUX1UzMgkJZnJlcVNlbAopOwojZW5kaWYKCi8qIEFtYmVyIEFQSXMgKi8KCi8qIGd0QnJnRmRiLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2ZkYkdldE1hY0F2YgoqCiogREVTQ1JJUFRJT046CioJCUFUVSBNQUMgZW50cnkgaW4gQVZCIG1vZGUuCioJCVdoZW4gZW5hYmxlZCwgQVRVIGVudHJpZXMgb3BlcmF0ZSBpbiBBVkIgbW9kZToKKgoqCQlHVF9BVFVfVUNfU1RBVEUgLSBzdXBwb3J0CioJCQlHVF9VQ19OT19QUklfU1RBVElDX0FWQl9FTlRSWSwgYW5kIAoqCQkJR1RfVUNfU1RBVElDX0FWQl9FTlRSWQoqCioJCUdUX0FUVV9NQ19TVEFURSAtIHN1cHBvcnQKKgkJCUdUX01DX1NUQVRJQ19BVkJfRU5UUlksIGFuZAoqCQkJR1RfTUNfUFJJT19TVEFUSUNfQVZCX0VOVFJZCioKKgkJV2hlbiBkaXNhYmxlZCwgQVRVIGVudHJpZXMgb3BlcmF0ZSBpbiBub24tQVZCIG1vZGU6CioKKgkJR1RfQVRVX1VDX1NUQVRFIC0gc3VwcG9ydAoqCQkJR1RfVUNfTk9fUFJJX1NUQVRJQ19OUkwsIGFuZCAKKgkJCUdUX1VDX1NUQVRJQ19OUkwKKgoqCQlHVF9BVFVfTUNfU1RBVEUgLSBzdXBwb3J0CioJCQlHVF9NQ19TVEFUSUNfVU5MSU1JVEVEX1JBVEUsIGFuZAoqCQkJR1RfTUNfUFJJT19TVEFUSUNfVU5MSU1JVEVEX1JBVEUKKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCW1vZGUgIC0gR1RfVFJVRSBpZiBNYWNBdmIgaXMgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgICAgICAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJHZXRNYWNBdmIKKAoJSU4gIEdUX1FEX0RFViAgICAqZGV2LAoJT1VUIEdUX0JPT0wgCSptb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJTZXRNYWNBdmIKKgoqIERFU0NSSVBUSU9OOgoqCQlBVFUgTUFDIGVudHJ5IGluIEFWQiBtb2RlLgoqCQlXaGVuIGVuYWJsZWQsIEFUVSBlbnRyaWVzIG9wZXJhdGUgaW4gQVZCIG1vZGU6CioKKgkJR1RfQVRVX1VDX1NUQVRFIC0gc3VwcG9ydAoqCQkJR1RfVUNfTk9fUFJJX1NUQVRJQ19BVkJfRU5UUlksIGFuZCAKKgkJCUdUX1VDX1NUQVRJQ19BVkJfRU5UUlkKKgoqCQlHVF9BVFVfTUNfU1RBVEUgLSBzdXBwb3J0CioJCQlHVF9NQ19TVEFUSUNfQVZCX0VOVFJZLCBhbmQKKgkJCUdUX01DX1BSSU9fU1RBVElDX0FWQl9FTlRSWQoqCioJCVdoZW4gZGlzYWJsZWQsIEFUVSBlbnRyaWVzIG9wZXJhdGUgaW4gbm9uLUFWQiBtb2RlOgoqCioJCUdUX0FUVV9VQ19TVEFURSAtIHN1cHBvcnQKKgkJCUdUX1VDX05PX1BSSV9TVEFUSUNfTlJMLCBhbmQgCioJCQlHVF9VQ19TVEFUSUNfTlJMCioKKgkJR1RfQVRVX01DX1NUQVRFIC0gc3VwcG9ydAoqCQkJR1RfTUNfU1RBVElDX1VOTElNSVRFRF9SQVRFLCBhbmQKKgkJCUdUX01DX1BSSU9fU1RBVElDX1VOTElNSVRFRF9SQVRFCioKKiBJTlBVVFM6CioJCW1vZGUgLSBHVF9UUlVFIHRvIGVuYWJsZSBNYWNBdmIsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzogCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdmZGJTZXRNYWNBdmIKKAoJSU4gR1RfUURfREVWCSpkZXYsCglJTiBHVF9CT09MCQltb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdmZGJHZXRQb3J0QXR1TGVhcm5MaW1pdAoqCiogREVTQ1JJUFRJT046CiogICAgICBQb3J0J3MgYXV0byBsZWFybmluZyBsaW1pdC4gV2hlbiB0aGUgbGltaXQgaXMgbm9uLXplcm8gdmFsdWUsIHRoZSBudW1iZXIKKgkJb2YgTUFDIGFkZHJlc3NlcyB0aGF0IGNhbiBiZSBsZWFybmVkIG9uIHRoaXMgcG9ydCBhcmUgbGltaXRlZCB0byB0aGUgdmFsdWUKKgkJc3BlY2lmaWVkIGluIHRoaXMgQVBJLiBXaGVuIHRoZSBsZWFybiBsaW1pdCBoYXMgYmVlbiByZWFjaGVkIGFueSBmcmFtZSAKKgkJdGhhdCBpbmdyZXNzZXMgdGhpcyBwb3J0IHdpdGggYSBzb3VyY2UgTUFDIGFkZHJlc3Mgbm90IGFscmVhZHkgaW4gdGhlIAoqCQlhZGRyZXNzIGRhdGFiYXNlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcG9ydCB3aWxsIGJlIGRpc2NhcmRlZC4gCioJCU5vcm1hbCBhdXRvLWxlYXJuaW5nIHdpbGwgcmVzdW1lIG9uIHRoZSBwb3J0IGFzIHNvb24gYXMgdGhlIG51bWJlciBvZiAKKgkJYWN0aXZlIHVuaWNhc3QgTUFDIGFkZHJlc3NlcyBhc3NvY2lhdGVkIHRvIHRoaXMgcG9ydCBpcyBsZXNzIHRoYW4gdGhlIAoqCQlsZWFybiBsaW1pdC4KKgkJQ1BVIGRpcmVjdGVkIEFUVSBMb2FkLCBQdXJnZSwgb3IgTW92ZSB3aWxsIG5vdCBoYXZlIGFueSBlZmZlY3Qgb24gdGhlIAoqCQlsZWFybiBsaW1pdC4KKgkJVGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIHdoZW4gdGhlIGxpbWl0IGlzIHplcm8uCioJCVRoZSBmb2xsb3dpbmcgY2FyZSBpcyBuZWVkZWQgd2hlbiBlbmFibGluZyB0aGlzIGZlYXR1cmU6CioJCQkxKSBkc2FibGUgbGVhcm5pbmcgb24gdGhlIHBvcnRzCioJCQkyKSBmbHVzaCBhbGwgbm9uLXN0YXRpYyBhZGRyZXNzZXMgaW4gdGhlIEFUVQoqCQkJMykgZGVmaW5lIHRoZSBkZXNpcmVkIGxpbWl0IGZvciB0aGUgcG9ydHMKKgkJCTQpIHJlLWVuYWJsZSBsZWFyaW5nIG9uIHRoZSBwb3J0cwoqCiogSU5QVVRTOgoqCQlwb3J0ICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJCQkJCQkJCQkJICAKKiBPVVRQVVRTOgoqCQlsaW1pdCAtIGF1dG8gbGVhcm5pbmcgbGltaXQgKCAwIH4gMjU1ICkKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBsaW1pdCA+IDB4RkYKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2ZkYkdldFBvcnRBdHVMZWFybkxpbWl0CigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfTFBPUlQgIAlwb3J0LAoJT1VUIEdUX1UzMiAgIAkqbGltaXQKKTsKCi8qIGd0UENTQ3RybC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NHZXRSR01JSVRpbWluZ0RlbGF5CioKKiBERVNDUklQVElPTjoKKgkJUkdNSUkgcmVjZWl2ZS90cmFuc21pdCBUaW1pbmcgQ29udHJvbC4gVGhpcyBhcGkgYWRkcyBkZWxheSB0byBSWENMSyBmb3IKKgkJSU5EIGlucHV0cyBhbmQgR1RYQ0xLIGZvciBPVVREIG91dHB1dHMgd2hlbiBwb3J0IGlzIGluIFJHTUlJIG1vZGUuCioJCUNoYW5nZSB0byB0aGlzIGJpdCBhcmUgZGlzcnVwdGl2ZSB0byBub3JtYWwgb3BlcmF0aW9uLiBIZW5jZSBhbnkgY2hhbmdlcwoqCQl0byB0aGlzIHJlZ2lzdGVyIG11c3QgYmUgZG9uZSBvbmx5IHdoaWxlIHRoZSBwb3J0J3MgbGluayBpcyBkb3duLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQlyeG1vZGUgLSBHVF9GQUxTRSBmb3IgZGVmYXVsdCBzZXR1cCwgR1RfVFJVRSBmb3IgYWRkaW5nIGRlbGF5IHRvIHJ4Y2xrCioJCXR4bW9kZSAtIEdUX0ZBTFNFIGZvciBkZWZhdWx0IHNldHVwLCBHVF9UUlVFIGZvciBhZGRpbmcgZGVsYXkgdG8gdHhjbGsKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3Bjc0dldFJHTUlJVGltaW5nRGVsYXkKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX0JPT0wgIAkqcnhtb2RlLAoJT1VUIEdUX0JPT0wgIAkqdHhtb2RlCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwY3NTZXRSR01JSVRpbWluZ0RlbGF5CioKKiBERVNDUklQVElPTjoKKgkJUkdNSUkgcmVjZWl2ZS90cmFuc21pdCBUaW1pbmcgQ29udHJvbC4gVGhpcyBhcGkgYWRkcyBkZWxheSB0byBSWENMSyBmb3IKKgkJSU5EIGlucHV0cyBhbmQgR1RYQ0xLIGZvciBPVVREIG91dHB1dHMgd2hlbiBwb3J0IGlzIGluIFJHTUlJIG1vZGUuCioJCUNoYW5nZSB0byB0aGlzIGJpdCBhcmUgZGlzcnVwdGl2ZSB0byBub3JtYWwgb3BlcmF0aW9uLiBIZW5jZSBhbnkgY2hhbmdlcwoqCQl0byB0aGlzIHJlZ2lzdGVyIG11c3QgYmUgZG9uZSBvbmx5IHdoaWxlIHRoZSBwb3J0J3MgbGluayBpcyBkb3duLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCXJ4bW9kZSAtIEdUX0ZBTFNFIGZvciBkZWZhdWx0IHNldHVwLCBHVF9UUlVFIGZvciBhZGRpbmcgZGVsYXkgdG8gcnhjbGsKKgkJdHhtb2RlIC0gR1RfRkFMU0UgZm9yIGRlZmF1bHQgc2V0dXAsIEdUX1RSVUUgZm9yIGFkZGluZyBkZWxheSB0byB0eGNsawoqCiogT1VUUFVUUzoKKgkJTm9uZQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGNzU2V0UkdNSUlUaW1pbmdEZWxheQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQgCXBvcnQsCglJTiAgR1RfQk9PTCAgCXJ4bW9kZSwKCUlOICBHVF9CT09MICAJdHhtb2RlCik7CgoKLyogZ3RQb3J0TGVkLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3BydFNldExFRAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgQVBJIGFsbG93cyB0byBjb25maWd1cmUgNCBMRUQgc2VjdGlvbnMsIFB1bHNlIHN0cmV0Y2gsIEJsaW5rIHJhdGUsCioJCWFuZCBzcGVjaWFsIGNvbnRyb2xzLgoqCiogSU5QVVRTOgoqCQlwb3J0CS0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJY2ZnIAktIEdUX0xFRF9DRkcgdmFsdWUKKgkJdmFsdWUgCS0gdmFsdWUgdG8gYmUgY29uZmlndXJlZAoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncHJ0U2V0TEVECigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9MRURfQ0ZHCWNmZywKCUlOICBHVF9VMzIJCXZhbHVlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0TEVECioKKiBERVNDUklQVElPTjoKKgkJVGhpcyBBUEkgYWxsb3dzIHRvIHJldHJpZXZlIDQgTEVEIHNlY3Rpb25zLCBQdWxzZSBzdHJldGNoLCBCbGluayByYXRlLAoqCQlhbmQgc3BlY2lhbCBjb250cm9scy4KKgoqIElOUFVUUzoKKgkJcG9ydAktIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCWNmZyAJLSBHVF9MRURfQ0ZHIHZhbHVlCioKKiBPVVRQVVRTOgoqCQl2YWx1ZSAJLSBjb25maWd1cmVkIHZhbHVlCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldExFRAooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX0xQT1JUCXBvcnQsCglJTiAgR1RfTEVEX0NGRwljZmcsCglPVVQgR1RfVTMyCQkqdmFsdWUKKTsKCgoKCgovKiBndFBvcnRTdGF0dXMuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0UVNpemVQZXJRUHJpCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldHMgZWdyZXNzIHF1ZXVlIHNpemUgZm9yIHBvcnQncyBlYWNoIFFQcmkgKDAgfiAzKS4KKgoqIElOUFVUUzoKKgkJcG9ydCAtIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQljb3VudHMgLSBlZ3Jlc3MgcXVldWUgc2l6ZSBwZXIgUVByaSAoc2hvdWxkIGJlIDQgKiAxNmJ5dGVzKQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOiAKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldFFTaXplUGVyUVByaQooCglJTiAgR1RfUURfREVWCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9VMTYJCSpjb3VudHMKKTsKCgovKiBndFN5c0N0cmwuYyAqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEFSUHdvQkMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEFSUCBkZXRlY3Rpb24gd2l0aG91dCBCcm9hZGNhc3QgY2hlY2tpbmcuIFdoZW4gZW5hYmxlZCB0aGUgc3dpdGNoIGNvcmUKKiAgICAgICBkb2VzIG5vdCBjaGVjayBmb3IgYSBCdG9hZGNhc3QgTUFDIGFkZHJlc3MgYXMgcGFydCBvZiB0aGUgQVJQIGZyYW1lCiogICAgICAgZGV0ZWN0aW9uLiBJdCBvbmx5IGNoZWNrZXMgdGhlIEV0aGVyIFR5cGUgKDB4MDgwNikuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgZW4gLSBHVF9UUlVFIGlmIGVuYWJsZWQsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0JBRF9QQVJBTSAgICAtIG9uIGJhZCBwYXJhbWV0ZXIKKiAgICAgICBHVF9GQUlMICAgICAgICAgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEFSUHdvQkMKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9CT09MCQkqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEFSUHdvQkMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIEFSUCBkZXRlY3Rpb24gd2l0aG91dCBCcm9hZGNhc3QgY2hlY2tpbmcuIFdoZW4gZW5hYmxlZCB0aGUgc3dpdGNoIGNvcmUKKiAgICAgICBkb2VzIG5vdCBjaGVjayBmb3IgYSBCdG9hZGNhc3QgTUFDIGFkZHJlc3MgYXMgcGFydCBvZiB0aGUgQVJQIGZyYW1lCiogICAgICAgZGV0ZWN0aW9uLiBJdCBvbmx5IGNoZWNrZXMgdGhlIEV0aGVyIFR5cGUgKDB4MDgwNikuCioKKiBJTlBVVFM6CiogICAgICAgZW4gLSBHVF9UUlVFIHRvIGVuYWJsZSwgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgLSBvbiBlcnJvcgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEFSUHdvQkMKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0JPT0wgCWVuCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0Q0xLMTI1RW4KKgoqIERFU0NSSVBUSU9OOgoqCQlDbG9jayAxMjVNSHogRW5hYmxlLgoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCB0aGUgQ0xLMTI1IHBpbiBoYXMgYSBmcmVlIHJ1bm5pbmcgMTI1IE1IegoqCQljbG9jayBvdXRwdXQuCioJCVdoZW4gaXQncyBkaXNhYmxlZCwgdGhlIENMSzEyNSBwaW4gd2lsbCBiZSBpbiB0cmktc3RhdGUuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgaWYgMTI1TUh6IGNsb2NrIGlzIGVuYWJsZWQsIEdUX0ZBTFNFIG90aGVyd2lzZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldENMSzEyNUVuCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCU9VVCBHVF9CT09MICAJKmVuCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0Q0xLMTI1RW4KKgoqIERFU0NSSVBUSU9OOgoqCQlDbG9jayAxMjVNSHogRW5hYmxlLgoqCQlXaGVuIHRoaXMgZmVhdHVyZSBpcyBlbmFibGVkLCB0aGUgQ0xLMTI1IHBpbiBoYXMgYSBmcmVlIHJ1bm5pbmcgMTI1IE1IegoqCQljbG9jayBvdXRwdXQuCioJCVdoZW4gaXQncyBkaXNhYmxlZCwgdGhlIENMSzEyNSBwaW4gd2lsbCBiZSBpbiB0cmktc3RhdGUuCioKKiBJTlBVVFM6CioJCWVuIC0gR1RfVFJVRSB0byBlbmFibGUgMTI1IE1IeiBjbG9jaywgR1RfRkFMU0Ugb3RoZXJ3aXNlLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldENMSzEyNUVuCigKCUlOIEdUX1FEX0RFVgkqZGV2LAoJSU4gR1RfQk9PTAkJZW4KKTsKCgovKiBndFByaVRhYmxlLmMgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldEZQcmlPdmVycmlkZVRhYmxlCioKKiBERVNDUklQVElPTjoKKiAJCUZyYW1lIFByaW9yaXR5IE92ZXJyaWRlLgoqCQlXaGVuIGEgZnJhbWUgZW50ZXJzIGEgcG9ydCwgaXRzIHR5cGUgaXMgZGV0ZXJtaW5lZCBhbmQgdGhlIHR5cGUgaXMgdXNlZCAKKgkJdG8gYWNjZXNzIHRoZSBGcmFtZSBQcmlvcml0eSBUYWJsZS4gSWYgdGhlIHR5cGUncyBmUHJpRW4gKGluIEdUX0ZQUklfVEJMX0VOVFJZCioJCXN0cnVjdHVyZSkgaXMgZW5hYmxlZCwgdGhlbiB0aGUgZnJhbWUncyBGcmFtZSBQcmlvcml0eSB3aWxsIGJlIG92ZXJyaWRkZW4KKgkJd2l0aCB0aGUgdmFsdWUgd3JpdHRlbiBpbiBmUHJpb3JpdHkgKGluIEdUX0ZQUklfVEJMX0VOVFJZIHN0cnVjdHVyZSkuCioJCUZyYW1lIFR5cGVzIHN1cHBvcnRlZCBhcmU6CioJCQlGVFlQRV9EU0FfVE9fQ1BVX0JQRFUgLQoqCQkJCVVzZWQgb24gbXVsdGljYXN0IERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MCAoQlBEVS9NR01UKS4KKgkJCQlOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9GMlIgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgxIChGcmFtZSB0byBSZWdpc3RlcgoqCQkJCVJlcGx5KS4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9UT19DUFVfSUdNUCAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDIgKElHTVAvTUxEIFRyYXApCioJCQkJYW5kIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgSUdNUCBvciBNTEQgdHJhcHBlZAoqCQkJRlRZUEVfRFNBX1RPX0NQVV9UUkFQIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MyAoUG9saWN5IFRyYXApIGFuZAoqCQkJCW9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgUG9saWN5IFRyYXBwZWQKKgkJCUZUWVBFX0RTQV9UT19DUFVfQVJQIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4NCAoQVJQIE1pcnJvcikgYW5kCioJCQkJb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBBUlAgTWlycm9yZWQgKHNlZSBncHJ0U2V0QVJQdG9DUFUgQVBJKS4KKgkJCUZUWVBFX0RTQV9UT19DUFVfTUlSUk9SIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4NSAoUG9saWN5IE1pcnJvcikgYW5kCioJCQkJb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBQb2xpY3kgTWlycm9yZWQgKHNlZSBncHJ0U2V0UG9saWN5IEFQSSkuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX1JFU0VSVkVEIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4NiAoUmVzZXJ2ZWQpLiBOb3QKKgkJCQl1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX1VDQVNUX01HTVQgLQoqCQkJCVVzZWQgb24gdW5pY2FzdCBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDAgKHVuaWNhc3QKKgkJCQlNR01UKS4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9GUk9NX0NQVSAtCioJCQkJVXNlZCBvbiBEU0EgRnJvbV9DUFUgZnJhbWVzLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWUKKgkJCUZUWVBFX0RTQV9DUk9TU19DSElQX0ZDIC0KKgkJCQlVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEZsb3cgQ29udHJvbCBmcmFtZXMgKFRvX1NuaWZmZXIgRmxvdwoqCQkJCUNvbnRyb2wpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX0NST1NTX0NISVBfRUdSRVNTX01PTiAtCioJCQkJVXNlZCBvbiBEU0EgQ3Jvc3MgQ2hpcCBFZ3Jlc3MgTW9uaXRvciBmcmFtZXMgKFRvX1NuaWZmZXIgVHgpLgoqCQkJCU5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfQ1JPU1NfQ0hJUF9JTkdSRVNTX01PTiAtCioJCQkJVXNlZCBvbiBEU0EgQ3Jvc3MgQ2hpcCBJbmdyZXNzIE1vbml0b3IgZnJhbWVzIChUb19TbmlmZmVyIFJ4KS4KKgkJCQlOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfUE9SVF9FVFlQRV9NQVRDSCAtCioJCQkJVXNlZCBvbiBub3JtYWwgbmV0d29yayBwb3J0cyAoc2VlIGdwcnRTZXRGcmFtZU1vZGUgQVBJKQoqCQkJCW9uIGZyYW1lcyB3aG9zZSBFdGhlcnR5cGUgbWF0Y2hlcyB0aGUgcG9ydCdzIFBvcnRFVHlwZSByZWdpc3Rlci4KKgkJCQlOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfQkNBU1RfTk9OX0RTQV9DT05UUk9MIC0KKgkJCQlVc2VkIG9uIE5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBjb250YWluIGEgQnJvYWRjYXN0CioJCQkJZGVzdGluYXRpb24gYWRkcmVzcy4gTm90IHVzZWQgb24gRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfUFBQb0VfTk9OX0RTQV9DT05UUk9MIC0KKgkJCQlVc2VkIG9uIE5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBjb250YWluIGFuIEV0aGVyIFR5cGUgMHg4ODYzCioJCQkJKGkuZS4sIFBQUG9FIGZyYW1lcykuIE5vdCB1c2VkIG9uIERTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0lQX05PTl9EU0FfQ09OVFJPTCAtCioJCQkJVXNlZCBvbiBOb24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgY29udGFpbiBhbiBJUHY0IG9yIElQdjYgRXRoZXIKKgkJCQlUeXBlLiBOb3QgdXNlZCBvbiBEU0EgQ29udHJvbCBmcmFtZXMuCioKKiBJTlBVVFM6CiogICAgICAgZlR5cGUgLSBmcmFtZSB0eXBlIChHVF9QUklfT1ZFUlJJREVfRlRZUEUpCiogICAgICAgZW50cnkgLSBGcmFtZSBQcmlvcml0eSBPdmVycmlkZSBUYWJsZSBlbnRyeSAoR1RfRlBSSV9UQkxfRU5UUlkpCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAgICAgLSBvbiB1bmtub3duIGZyYW1lIHR5cGUKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogICAgICAgTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0RlByaU92ZXJyaWRlVGFibGUKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9QUklfT1ZFUlJJREVfRlRZUEUJZlR5cGUsCglJTiAgR1RfRlBSSV9UQkxfRU5UUlkJKmVudHJ5Cik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0RlByaU92ZXJyaWRlVGFibGUKKgoqIERFU0NSSVBUSU9OOgoqIAkJRnJhbWUgUHJpb3JpdHkgT3ZlcnJpZGUuCioJCVdoZW4gYSBmcmFtZSBlbnRlcnMgYSBwb3J0LCBpdHMgdHlwZSBpcyBkZXRlcm1pbmVkIGFuZCB0aGUgdHlwZSBpcyB1c2VkIAoqCQl0byBhY2Nlc3MgdGhlIEZyYW1lIFByaW9yaXR5IFRhYmxlLiBJZiB0aGUgdHlwZSdzIGZQcmlFbiAoaW4gR1RfRlBSSV9UQkxfRU5UUlkKKgkJc3RydWN0dXJlKSBpcyBlbmFibGVkLCB0aGVuIHRoZSBmcmFtZSdzIEZyYW1lIFByaW9yaXR5IHdpbGwgYmUgb3ZlcnJpZGRlbgoqCQl3aXRoIHRoZSB2YWx1ZSB3cml0dGVuIGluIGZQcmlvcml0eSAoaW4gR1RfRlBSSV9UQkxfRU5UUlkgc3RydWN0dXJlKS4KKgkJRnJhbWUgVHlwZXMgc3VwcG9ydGVkIGFyZToKKgkJCUZUWVBFX0RTQV9UT19DUFVfQlBEVSAtCioJCQkJVXNlZCBvbiBtdWx0aWNhc3QgRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgwIChCUERVL01HTVQpLgoqCQkJCU5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX0YyUiAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDEgKEZyYW1lIHRvIFJlZ2lzdGVyCioJCQkJUmVwbHkpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9JR01QIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MiAoSUdNUC9NTEQgVHJhcCkKKgkJCQlhbmQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBJR01QIG9yIE1MRCB0cmFwcGVkCioJCQlGVFlQRV9EU0FfVE9fQ1BVX1RSQVAgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgzIChQb2xpY3kgVHJhcCkgYW5kCioJCQkJb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBQb2xpY3kgVHJhcHBlZAoqCQkJRlRZUEVfRFNBX1RPX0NQVV9BUlAgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg0IChBUlAgTWlycm9yKSBhbmQKKgkJCQlvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIEFSUCBNaXJyb3JlZCAoc2VlIGdwcnRTZXRBUlB0b0NQVSBBUEkpLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9NSVJST1IgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg1IChQb2xpY3kgTWlycm9yKSBhbmQKKgkJCQlvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIFBvbGljeSBNaXJyb3JlZCAoc2VlIGdwcnRTZXRQb2xpY3kgQVBJKS4KKgkJCUZUWVBFX0RTQV9UT19DUFVfUkVTRVJWRUQgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg2IChSZXNlcnZlZCkuIE5vdAoqCQkJCXVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9UT19DUFVfVUNBU1RfTUdNVCAtCioJCQkJVXNlZCBvbiB1bmljYXN0IERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MCAodW5pY2FzdAoqCQkJCU1HTVQpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX0ZST01fQ1BVIC0KKgkJCQlVc2VkIG9uIERTQSBGcm9tX0NQVSBmcmFtZXMuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZQoqCQkJRlRZUEVfRFNBX0NST1NTX0NISVBfRkMgLQoqCQkJCVVzZWQgb24gRFNBIENyb3NzIENoaXAgRmxvdyBDb250cm9sIGZyYW1lcyAoVG9fU25pZmZlciBGbG93CioJCQkJQ29udHJvbCkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfQ1JPU1NfQ0hJUF9FR1JFU1NfTU9OIC0KKgkJCQlVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEVncmVzcyBNb25pdG9yIGZyYW1lcyAoVG9fU25pZmZlciBUeCkuCioJCQkJTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9DUk9TU19DSElQX0lOR1JFU1NfTU9OIC0KKgkJCQlVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEluZ3Jlc3MgTW9uaXRvciBmcmFtZXMgKFRvX1NuaWZmZXIgUngpLgoqCQkJCU5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9QT1JUX0VUWVBFX01BVENIIC0KKgkJCQlVc2VkIG9uIG5vcm1hbCBuZXR3b3JrIHBvcnRzIChzZWUgZ3BydFNldEZyYW1lTW9kZSBBUEkpCioJCQkJb24gZnJhbWVzIHdob3NlIEV0aGVydHlwZSBtYXRjaGVzIHRoZSBwb3J0J3MgUG9ydEVUeXBlIHJlZ2lzdGVyLgoqCQkJCU5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9CQ0FTVF9OT05fRFNBX0NPTlRST0wgLQoqCQkJCVVzZWQgb24gTm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGNvbnRhaW4gYSBCcm9hZGNhc3QKKgkJCQlkZXN0aW5hdGlvbiBhZGRyZXNzLiBOb3QgdXNlZCBvbiBEU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9QUFBvRV9OT05fRFNBX0NPTlRST0wgLQoqCQkJCVVzZWQgb24gTm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGNvbnRhaW4gYW4gRXRoZXIgVHlwZSAweDg4NjMKKgkJCQkoaS5lLiwgUFBQb0UgZnJhbWVzKS4gTm90IHVzZWQgb24gRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfSVBfTk9OX0RTQV9DT05UUk9MIC0KKgkJCQlVc2VkIG9uIE5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBjb250YWluIGFuIElQdjQgb3IgSVB2NiBFdGhlcgoqCQkJCVR5cGUuIE5vdCB1c2VkIG9uIERTQSBDb250cm9sIGZyYW1lcy4KKgoqIElOUFVUUzoKKiAgICAgICBmVHlwZSAtIGZyYW1lIHR5cGUgKEdUX1BSSV9PVkVSUklERV9GVFlQRSkKKgoqIE9VVFBVVFM6CiogICAgICAgZW50cnkgLSBGcmFtZSBQcmlvcml0eSBPdmVycmlkZSBUYWJsZSBlbnRyeSAoR1RfRlBSSV9UQkxfRU5UUlkpCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAgICAtIG9uIGVycm9yCiogICAgICAgR1RfQkFEX1BBUkFNICAgICAtIG9uIHVua25vd24gZnJhbWUgdHlwZQoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldEZQcmlPdmVycmlkZVRhYmxlCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfUFJJX09WRVJSSURFX0ZUWVBFCWZUeXBlLAoJT1VUIEdUX0ZQUklfVEJMX0VOVFJZCSplbnRyeQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1NldFFQcmlBdmJPdmVycmlkZVRhYmxlCioKKiBERVNDUklQVElPTjoKKiAJCVF1ZXVlIFByaW9yaXR5IE92ZXJyaWRlIGZvciBBVkIgZW5hYmxlZCBwb3J0cyBvciBBdmJPdmVycmlkZSBlbmFibGVkIHBvcnRzLgoqCQlXaGVuIGEgZnJhbWUgZW50ZXJzIGEgQVZCIHBvcnQsIGl0cyB0eXBlIGlzIGRldGVybWluZWQgYW5kIHRoZSB0eXBlIGlzIHVzZWQgCioJCXRvIGFjY2VzcyB0aGUgUXVldWUgUHJpb3JpdHkgVGFibGUuIElmIHRoZSB0eXBlJ3MgcVByaUVuIChpbiBHVF9RUFJJX1RCTF9FTlRSWQoqCQlzdHJ1Y3R1cmUpIGlzIGVuYWJsZWQsIHRoZW4gdGhlIGZyYW1lJ3MgUXVldWUgUHJpb3JpdHkgd2lsbCBiZSBvdmVycmlkZGVuCioJCXdpdGggdGhlIHZhbHVlIHdyaXR0ZW4gaW4gcVByaW9yaXR5IChpbiBHVF9RUFJJX1RCTF9FTlRSWSBzdHJ1Y3R1cmUpLgoqCQlGcmFtZSBUeXBlcyBzdXBwb3J0ZWQgYXJlOgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9CUERVIC0KKgkJCQlVc2VkIG9uIG11bHRpY2FzdCBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDAgKEJQRFUvTUdNVCkuCioJCQkJTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9UT19DUFVfRjJSIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MSAoRnJhbWUgdG8gUmVnaXN0ZXIKKgkJCQlSZXBseSkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX0lHTVAgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgyIChJR01QL01MRCBUcmFwKQoqCQkJCWFuZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIElHTVAgb3IgTUxEIHRyYXBwZWQKKgkJCUZUWVBFX0RTQV9UT19DUFVfVFJBUCAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDMgKFBvbGljeSBUcmFwKSBhbmQKKgkJCQlvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIFBvbGljeSBUcmFwcGVkCioJCQlGVFlQRV9EU0FfVE9fQ1BVX0FSUCAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDQgKEFSUCBNaXJyb3IpIGFuZAoqCQkJCW9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgQVJQIE1pcnJvcmVkIChzZWUgZ3BydFNldEFSUHRvQ1BVIEFQSSkuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX01JUlJPUiAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDUgKFBvbGljeSBNaXJyb3IpIGFuZAoqCQkJCW9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBhcmUgUG9saWN5IE1pcnJvcmVkIChzZWUgZ3BydFNldFBvbGljeSBBUEkpLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9SRVNFUlZFRCAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDYgKFJlc2VydmVkKS4gTm90CioJCQkJdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9VQ0FTVF9NR01UIC0KKgkJCQlVc2VkIG9uIHVuaWNhc3QgRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgwICh1bmljYXN0CioJCQkJTUdNVCkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfRlJPTV9DUFUgLQoqCQkJCVVzZWQgb24gRFNBIEZyb21fQ1BVIGZyYW1lcy4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lCioJCQlGVFlQRV9EU0FfQ1JPU1NfQ0hJUF9GQyAtCioJCQkJVXNlZCBvbiBEU0EgQ3Jvc3MgQ2hpcCBGbG93IENvbnRyb2wgZnJhbWVzIChUb19TbmlmZmVyIEZsb3cKKgkJCQlDb250cm9sKS4gTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9DUk9TU19DSElQX0VHUkVTU19NT04gLQoqCQkJCVVzZWQgb24gRFNBIENyb3NzIENoaXAgRWdyZXNzIE1vbml0b3IgZnJhbWVzIChUb19TbmlmZmVyIFR4KS4KKgkJCQlOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX0NST1NTX0NISVBfSU5HUkVTU19NT04gLQoqCQkJCVVzZWQgb24gRFNBIENyb3NzIENoaXAgSW5ncmVzcyBNb25pdG9yIGZyYW1lcyAoVG9fU25pZmZlciBSeCkuCioJCQkJTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX1BPUlRfRVRZUEVfTUFUQ0ggLQoqCQkJCVVzZWQgb24gbm9ybWFsIG5ldHdvcmsgcG9ydHMgKHNlZSBncHJ0U2V0RnJhbWVNb2RlIEFQSSkKKgkJCQlvbiBmcmFtZXMgd2hvc2UgRXRoZXJ0eXBlIG1hdGNoZXMgdGhlIHBvcnQncyBQb3J0RVR5cGUgcmVnaXN0ZXIuCioJCQkJTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0JDQVNUX05PTl9EU0FfQ09OVFJPTCAtCioJCQkJVXNlZCBvbiBOb24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgY29udGFpbiBhIEJyb2FkY2FzdAoqCQkJCWRlc3RpbmF0aW9uIGFkZHJlc3MuIE5vdCB1c2VkIG9uIERTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX1BQUG9FX05PTl9EU0FfQ09OVFJPTCAtCioJCQkJVXNlZCBvbiBOb24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgY29udGFpbiBhbiBFdGhlciBUeXBlIDB4ODg2MwoqCQkJCShpLmUuLCBQUFBvRSBmcmFtZXMpLiBOb3QgdXNlZCBvbiBEU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9JUF9OT05fRFNBX0NPTlRST0wgLQoqCQkJCVVzZWQgb24gTm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGNvbnRhaW4gYW4gSVB2NCBvciBJUHY2IEV0aGVyCioJCQkJVHlwZS4gTm90IHVzZWQgb24gRFNBIENvbnRyb2wgZnJhbWVzLgoqCiogSU5QVVRTOgoqICAgICAgIGZUeXBlIC0gZnJhbWUgdHlwZSAoR1RfUFJJX09WRVJSSURFX0ZUWVBFKQoqICAgICAgIGVudHJ5IC0gUSBQcmlvcml0eSBPdmVycmlkZSBUYWJsZSBlbnRyeSAoR1RfUVBSSV9UQkxfRU5UUlkpCioKKiBPVVRQVVRTOgoqICAgICAgIE5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNICAgICAtIG9uIHVua25vd24gZnJhbWUgdHlwZQoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRRUHJpQXZiT3ZlcnJpZGVUYWJsZQooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1BSSV9PVkVSUklERV9GVFlQRQlmVHlwZSwKCUlOICBHVF9RUFJJX1RCTF9FTlRSWQkqZW50cnkKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRRUHJpQXZiT3ZlcnJpZGVUYWJsZQoqCiogREVTQ1JJUFRJT046CiogCQlRdWV1ZSBQcmlvcml0eSBPdmVycmlkZSBmb3IgQVZCIGVuYWJsZWQgcG9ydHMgb3IgQXZiT3ZlcnJpZGUgZW5hYmxlZCBwb3J0cy4KKgkJV2hlbiBhIGZyYW1lIGVudGVycyBhIEFWQiBwb3J0LCBpdHMgdHlwZSBpcyBkZXRlcm1pbmVkIGFuZCB0aGUgdHlwZSBpcyB1c2VkIAoqCQl0byBhY2Nlc3MgdGhlIFF1ZXVlIFByaW9yaXR5IFRhYmxlLiBJZiB0aGUgdHlwZSdzIHFQcmlFbiAoaW4gR1RfUVBSSV9UQkxfRU5UUlkKKgkJc3RydWN0dXJlKSBpcyBlbmFibGVkLCB0aGVuIHRoZSBmcmFtZSdzIFF1ZXVlIFByaW9yaXR5IHdpbGwgYmUgb3ZlcnJpZGRlbgoqCQl3aXRoIHRoZSB2YWx1ZSB3cml0dGVuIGluIHFQcmlvcml0eSAoaW4gR1RfUVBSSV9UQkxfRU5UUlkgc3RydWN0dXJlKS4KKgkJRnJhbWUgVHlwZXMgc3VwcG9ydGVkIGFyZToKKgkJCUZUWVBFX0RTQV9UT19DUFVfQlBEVSAtCioJCQkJVXNlZCBvbiBtdWx0aWNhc3QgRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgwIChCUERVL01HTVQpLgoqCQkJCU5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfVE9fQ1BVX0YyUiAtCioJCQkJVXNlZCBvbiBEU0EgVG9fQ1BVIGZyYW1lcyB3aXRoIGEgQ29kZSBvZiAweDEgKEZyYW1lIHRvIFJlZ2lzdGVyCioJCQkJUmVwbHkpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9JR01QIC0KKgkJCQlVc2VkIG9uIERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MiAoSUdNUC9NTEQgVHJhcCkKKgkJCQlhbmQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBJR01QIG9yIE1MRCB0cmFwcGVkCioJCQlGVFlQRV9EU0FfVE9fQ1BVX1RSQVAgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHgzIChQb2xpY3kgVHJhcCkgYW5kCioJCQkJb24gbm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGFyZSBQb2xpY3kgVHJhcHBlZAoqCQkJRlRZUEVfRFNBX1RPX0NQVV9BUlAgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg0IChBUlAgTWlycm9yKSBhbmQKKgkJCQlvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIEFSUCBNaXJyb3JlZCAoc2VlIGdwcnRTZXRBUlB0b0NQVSBBUEkpLgoqCQkJRlRZUEVfRFNBX1RPX0NQVV9NSVJST1IgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg1IChQb2xpY3kgTWlycm9yKSBhbmQKKgkJCQlvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIFBvbGljeSBNaXJyb3JlZCAoc2VlIGdwcnRTZXRQb2xpY3kgQVBJKS4KKgkJCUZUWVBFX0RTQV9UT19DUFVfUkVTRVJWRUQgLQoqCQkJCVVzZWQgb24gRFNBIFRvX0NQVSBmcmFtZXMgd2l0aCBhIENvZGUgb2YgMHg2IChSZXNlcnZlZCkuIE5vdAoqCQkJCXVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9UT19DUFVfVUNBU1RfTUdNVCAtCioJCQkJVXNlZCBvbiB1bmljYXN0IERTQSBUb19DUFUgZnJhbWVzIHdpdGggYSBDb2RlIG9mIDB4MCAodW5pY2FzdAoqCQkJCU1HTVQpLiBOb3QgdXNlZCBvbiBub24tRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfRFNBX0ZST01fQ1BVIC0KKgkJCQlVc2VkIG9uIERTQSBGcm9tX0NQVSBmcmFtZXMuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZQoqCQkJRlRZUEVfRFNBX0NST1NTX0NISVBfRkMgLQoqCQkJCVVzZWQgb24gRFNBIENyb3NzIENoaXAgRmxvdyBDb250cm9sIGZyYW1lcyAoVG9fU25pZmZlciBGbG93CioJCQkJQ29udHJvbCkuIE5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9EU0FfQ1JPU1NfQ0hJUF9FR1JFU1NfTU9OIC0KKgkJCQlVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEVncmVzcyBNb25pdG9yIGZyYW1lcyAoVG9fU25pZmZlciBUeCkuCioJCQkJTm90IHVzZWQgb24gbm9uLURTQSBDb250cm9sIGZyYW1lcy4KKgkJCUZUWVBFX0RTQV9DUk9TU19DSElQX0lOR1JFU1NfTU9OIC0KKgkJCQlVc2VkIG9uIERTQSBDcm9zcyBDaGlwIEluZ3Jlc3MgTW9uaXRvciBmcmFtZXMgKFRvX1NuaWZmZXIgUngpLgoqCQkJCU5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9QT1JUX0VUWVBFX01BVENIIC0KKgkJCQlVc2VkIG9uIG5vcm1hbCBuZXR3b3JrIHBvcnRzIChzZWUgZ3BydFNldEZyYW1lTW9kZSBBUEkpCioJCQkJb24gZnJhbWVzIHdob3NlIEV0aGVydHlwZSBtYXRjaGVzIHRoZSBwb3J0J3MgUG9ydEVUeXBlIHJlZ2lzdGVyLgoqCQkJCU5vdCB1c2VkIG9uIG5vbi1EU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9CQ0FTVF9OT05fRFNBX0NPTlRST0wgLQoqCQkJCVVzZWQgb24gTm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGNvbnRhaW4gYSBCcm9hZGNhc3QKKgkJCQlkZXN0aW5hdGlvbiBhZGRyZXNzLiBOb3QgdXNlZCBvbiBEU0EgQ29udHJvbCBmcmFtZXMuCioJCQlGVFlQRV9QUFBvRV9OT05fRFNBX0NPTlRST0wgLQoqCQkJCVVzZWQgb24gTm9uLURTQSBDb250cm9sIGZyYW1lcyB0aGF0IGNvbnRhaW4gYW4gRXRoZXIgVHlwZSAweDg4NjMKKgkJCQkoaS5lLiwgUFBQb0UgZnJhbWVzKS4gTm90IHVzZWQgb24gRFNBIENvbnRyb2wgZnJhbWVzLgoqCQkJRlRZUEVfSVBfTk9OX0RTQV9DT05UUk9MIC0KKgkJCQlVc2VkIG9uIE5vbi1EU0EgQ29udHJvbCBmcmFtZXMgdGhhdCBjb250YWluIGFuIElQdjQgb3IgSVB2NiBFdGhlcgoqCQkJCVR5cGUuIE5vdCB1c2VkIG9uIERTQSBDb250cm9sIGZyYW1lcy4KKgoqIElOUFVUUzoKKiAgICAgICBmVHlwZSAtIGZyYW1lIHR5cGUgKEdUX1BSSV9PVkVSUklERV9GVFlQRSkKKgoqIE9VVFBVVFM6CiogICAgICAgZW50cnkgLSBRIFByaW9yaXR5IE92ZXJyaWRlIFRhYmxlIGVudHJ5IChHVF9RUFJJX1RCTF9FTlRSWSkKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gICAgIC0gb24gdW5rbm93biBmcmFtZSB0eXBlCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFFQcmlBdmJPdmVycmlkZVRhYmxlCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfUFJJX09WRVJSSURFX0ZUWVBFCWZUeXBlLAoJT1VUIEdUX1FQUklfVEJMX0VOVFJZCSplbnRyeQopOwoKCi8qIGd0UG9ydEN0cmwuYyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0R2V0MjAwQmFzZQoqCiogREVTQ1JJUFRJT046CioJCTIwMCBCYXNlIG1vZGUuIFRoaXMgYml0IGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgcG9ydCdzIFB4X0dUWENMSwoqCQlmcmVxdWVuY3kgdG8gNTBNSHogdG8gc3VwcG9ydCAyMDAgQkFTRSBtb2RlIGFzIGZvbGxvd3M6CioJCTAgPSAyNU1IeiBQeF9HVFhDTEsKKgkJMSA9IDUwTUh6IFB4X0dUWENMSwoqCiogSU5QVVRTOgoqCQlwb3J0IC0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gMCBmb3IgMTAwTWJwcywgMSBmb3IgMjAwTWJwcwoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAtIG9uIGVycm9yCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlDX01vZGUgc2hvdWxkIGJlIHNldCB0byAweDIgaW4gb3JkZXIgZm9yIHRoaXMgQVBJIHRvIHdvcmsKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BydEdldDIwMEJhc2UKKAoJSU4gIEdUX1FEX0RFVgkqZGV2LAoJSU4gIEdUX0xQT1JUIAlwb3J0LAoJT1VUIEdUX1UzMiAgCSptb2RlCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncHJ0U2V0MjAwQmFzZQoqCiogREVTQ1JJUFRJT046CioJCTIwMCBCYXNlIG1vZGUuIFRoaXMgYml0IGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgcG9ydCdzIFB4X0dUWENMSwoqCQlmcmVxdWVuY3kgdG8gNTBNSHogdG8gc3VwcG9ydCAyMDAgQkFTRSBtb2RlIGFzIGZvbGxvd3M6CioJCQkwID0gMjVNSHogUHhfR1RYQ0xLCioJCQkxID0gNTBNSHogUHhfR1RYQ0xLCioKKiBJTlBVVFM6CioJCXBvcnQgLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlci4KKgkJbW9kZSAtIDAgZm9yIDEwME1icHMsIDEgZm9yIDIwME1icHMKKgoqIE9VVFBVVFM6CioJCU5vbmUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgLSBvbiBlcnJvcgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJQ19Nb2RlIHNob3VsZCBiZSBzZXQgdG8gMHgyIGluIG9yZGVyIGZvciB0aGlzIEFQSSB0byB3b3JrCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdwcnRTZXQyMDBCYXNlCigKCUlOICBHVF9RRF9ERVYJKmRldiwKCUlOICBHVF9MUE9SVCAJcG9ydCwKCUlOICBHVF9VMzIgIAltb2RlCik7CgoKLyogZ3RQSVJMMi5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwaXJsMldyaXRlVFNNUmVzb3VyY2UKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgd3JpdGVzIHJhdGUgcmVzb3VyY2UgYnVja2V0IHBhcmFtZXRlcnMgaW4gVGltZSBTbG90IE1ldGVyaW5nCioJCW1vZGUgdG8gdGhlIGdpdmVuIHJlc291cmNlIG9mIHRoZSBwb3J0LgoqCiogSU5QVVRTOgoqCQlwb3J0ICAgICAtIGxvZ2ljYWwgcG9ydCBudW1iZXIuCioJCWlybFJlcyAgIC0gYnVja2V0IHRvIGJlIHVzZWQgKDAgfiAxKS4KKgkJcGlybERhdGEgLSBQSVJMIFRTTSByZXNvdXJjZSBwYXJhbWV0ZXJzLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJT25seSBSZXNvdXJjZSAwIGFuZCAxIGNhbiBiZSBzdXBwb3J0ZWQgZm9yIFRTTSBNb2RlLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncGlybDJXcml0ZVRTTVJlc291cmNlCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9VMzIJCWlybFJlcywKCUlOICBHVF9QSVJMMl9UU01fREFUQQkqcGlybERhdGEKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdwaXJsMlJlYWRUU01SZXNvdXJjZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaWV2ZXMgSVJMIFBhcmFtZXRlci4KKgkJUmV0dXJuZWQgaW5ncmVzc1JhdGUgd291bGQgYmUgcm91Z2ggbnVtYmVyLiBJbnN0ZWFkLCBjdXN0b21TZXR1cCB3aWxsCioJCWhhdmUgdGhlIGV4YWN0IGNvbmZpZ3VyZWQgdmFsdWUuCioKKiBJTlBVVFM6CioJCXBvcnQgICAgIC0gbG9naWNhbCBwb3J0IG51bWJlci4KKgkJaXJsUmVzICAgLSBidWNrZXQgdG8gYmUgdXNlZCAoMCB+IDEpLgoqCiogT1VUUFVUUzoKKgkJcGlybERhdGEgLSBQSVJMIHJlc291cmNlIHBhcmFtZXRlcnMuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU9ubHkgUmVzb3VyY2UgMCBhbmQgMSBjYW4gYmUgc3VwcG9ydGVkIGZvciBUU00gTW9kZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3BpcmwyUmVhZFRTTVJlc291cmNlCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9VMzIJCWlybFJlcywKCU9VVCBHVF9QSVJMMl9UU01fREFUQQkqcGlybERhdGEKKTsKCgovKiBndFBUUC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0YWlTZXRFdmVudENvbmZpZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIHNldHMgVEFJIEV2ZW50IENhcHR1cmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogSU5QVVRTOgoqCQlldmVudERhdGEgIC0gVEFJIEV2ZW50IENhcHR1cmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RhaVNldEV2ZW50Q29uZmlnCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVEFJX0VWRU5UX0NPTkZJRwkqZXZlbnREYXRhCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndGFpR2V0RXZlbnRDb25maWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIFRBSSBFdmVudCBDYXB0dXJlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKgkJZXZlbnREYXRhICAtIFRBSSBFdmVudCBDYXB0dXJlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd0YWlHZXRFdmVudENvbmZpZwooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX1RBSV9FVkVOVF9DT05GSUcJKmV2ZW50RGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndGFpR2V0RXZlbnRTdGF0dXMKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIFRBSSBFdmVudCBDYXB0dXJlIHN0YXR1cy4KKgoqIElOUFVUUzoKKiAgICAgICBOb25lLgoqCiogT1VUUFVUUzoKKgkJZXZlbnREYXRhICAtIFRBSSBFdmVudCBDYXB0dXJlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd0YWlHZXRFdmVudFN0YXR1cwooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX1RBSV9FVkVOVF9TVEFUVVMJKnN0YXR1cwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndGFpR2V0RXZlbnRJbnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIFRBSSBFdmVudCBDYXB0dXJlIEludGVycnVwdCBzdGF0dXMuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CioJCWludFN0YXR1cyAJLSBpbnRlcnJ1cHQgc3RhdHVzIGZvciBUQUkgRXZlbnQgY2FwdHVyZQoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RhaUdldEV2ZW50SW50CigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfQk9PTAkJKmludFN0YXR1cwopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RhaUdldFRyaWdJbnQKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBnZXRzIFRBSSBUcmlnZ2VyIEludGVycnVwdCBzdGF0dXMuCioKKiBJTlBVVFM6CiogICAgICAgTm9uZS4KKgoqIE9VVFBVVFM6CioJCWludFN0YXR1cyAJLSBpbnRlcnJ1cHQgc3RhdHVzIGZvciBUQUkgVHJpZ2dlcgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RhaUdldFRyaWdJbnQKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9CT09MCQkqaW50U3RhdHVzCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0YWlTZXRUcmlnQ29uZmlnCioKKiBERVNDUklQVElPTjoKKiAgICAgICBUaGlzIHJvdXRpbmUgc2V0cyBUQUkgVHJpZ2dlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCioKKiBJTlBVVFM6CioJCXRyaWdFbiAgICAtIGVuYWJsZS9kaXNhYmxlIFRBSSBUcmlnZ2VyLgoqCQl0cmlnRGF0YSAgLSBUQUkgVHJpZ2dlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKHZhbGlkIG9ubHkgaWYgdHJpZ0VuIGlzIEdUX1RSVUUpLgoqCiogT1VUUFVUUzoKKiAgICAgICBOb25lLgoqCiogUkVUVVJOUzoKKiAgICAgICBHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqICAgICAgIEdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnZhbGlkIHBhcmFtZXRlciBpcyBnaXZlbgoqICAgICAgIEdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqICAgICAgIE5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RhaVNldFRyaWdDb25maWcKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9CT09MIAl0cmlnRW4sCglJTiAgR1RfVEFJX1RSSUdHRVJfQ09ORklHCSp0cmlnRGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndGFpR2V0VHJpZ0NvbmZpZwoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldHMgVEFJIFRyaWdnZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoqCiogSU5QVVRTOgoqICAgICAgIE5vbmUuCioKKiBPVVRQVVRTOgoqCQl0cmlnRW4gICAgLSBlbmFibGUvZGlzYWJsZSBUQUkgVHJpZ2dlci4KKgkJdHJpZ0RhdGEgIC0gVEFJIFRyaWdnZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICh2YWxpZCBvbmx5IGlmIHRyaWdFbiBpcyBHVF9UUlVFKS4KKgoqIFJFVFVSTlM6CiogICAgICAgR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAgICAgICBHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKiAgICAgICBHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAgICAgICBOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd0YWlHZXRUcmlnQ29uZmlnCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfQk9PTCAJKnRyaWdFbiwKCU9VVCBHVF9UQUlfVFJJR0dFUl9DT05GSUcJKnRyaWdEYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd0YWlHZXRUU0Nsa1BlcgoqCiogREVTQ1JJUFRJT046CiogCQlUaW1lIFN0YW1waW5nIENsb2NrIFBlcmlvZCBpbiBwaWNvIHNlY29uZHMuCioJCVRoaXMgcm91dGluZSBzcGVjaWZpZXMgdGhlIGNsb2NrIHBlcmlvZCBmb3IgdGhlIHRpbWUgc3RhbXBpbmcgY2xvY2sgc3VwcGxpZWQgCioJCXRvIHRoZSBQVFAgaGFyZHdhcmUgbG9naWMuCioJCVRoaXMgaXMgdGhlIGNsb2NrIHRoYXQgaXMgdXNlZCBieSB0aGUgaGFyZHdhcmUgbG9naWMgdG8gdXBkYXRlIHRoZSBQVFAgCioJCUdsb2JhbCBUaW1lIENvdW50ZXIuCioKKiBJTlBVVFM6CiogCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJY2xrCQktIHRpbWUgc3RhbXBpbmcgY2xvY2sgcGVyaW9kCioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd0YWlHZXRUU0Nsa1BlcgooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX1UzMgkJKmNsawopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RhaVNldFRTQ2xrUGVyCioKKiBERVNDUklQVElPTjoKKiAJCVRpbWUgU3RhbXBpbmcgQ2xvY2sgUGVyaW9kIGluIHBpY28gc2Vjb25kcy4KKgkJVGhpcyByb3V0aW5lIHNwZWNpZmllcyB0aGUgY2xvY2sgcGVyaW9kIGZvciB0aGUgdGltZSBzdGFtcGluZyBjbG9jayBzdXBwbGllZCAKKgkJdG8gdGhlIFBUUCBoYXJkd2FyZSBsb2dpYy4KKgkJVGhpcyBpcyB0aGUgY2xvY2sgdGhhdCBpcyB1c2VkIGJ5IHRoZSBoYXJkd2FyZSBsb2dpYyB0byB1cGRhdGUgdGhlIFBUUCAKKgkJR2xvYmFsIFRpbWUgQ291bnRlci4KKgoqIElOUFVUUzoKKgkJY2xrCQktIHRpbWUgc3RhbXBpbmcgY2xvY2sgcGVyaW9kCioKKiBPVVRQVVRTOgoqIAkJTm9uZS4KKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAtIG9uIGVycm9yCiogCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RhaVNldFRTQ2xrUGVyCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVTMyCQljbGsKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RhaVNldE11bHRpUFRQU3luYwoqCiogREVTQ1JJUFRJT046CiogCQlUaGlzIHJvdXRpbmUgc2V0cyBNdWx0aXBsZSBQVFAgZGV2aWNlIHN5bmMgbW9kZSBhbmQgc3luYyB0aW1lIChUcmlnR2VuQW10KS4KKgkJV2hlbiBlbmFibGVkLCB0aGUgaGFyZHdhcmUgbG9naWMgZGV0ZWN0cyBhIGxvdyB0byBoaWdoIHRyYW5zaXRpb24gb24gdGhlIAoqCQlFdmVudFJlcXVlc3QoR1BJTykgYW5kIHRyYW5zZmVycyB0aGUgc3luYyB0aW1lIGludG8gdGhlIFBUUCBHbG9iYWwgVGltZQoqCQlyZWdpc3Rlci4gVGhlIEV2ZW50Q2FwVGltZSBpcyBhbHNvIHVwZGF0ZWQgYXQgdGhhdCBpbnN0YW50LgoqCiogSU5QVVRTOgoqCQltdWx0aUVuCQktIGVuYWJsZS9kaXNhYmxlIE11bHRpcGxlIFBUUCBkZXZpY2Ugc3luYyBtb2RlCioJCXN5bmNUaW1lCS0gc3luYyB0aW1lICh2YWxpZCBvbmx5IGlmIG11bHRpRW4gaXMgR1RfVFJVRSkKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlXaGVuIGVuYWJsZWQsIGd0YWlTZXRUcmlnQ29uZmlnLCBndGFpU2V0RXZlbnRDb25maWcsIGd0YWlTZXRUaW1lSW5jLAoqCQlhbmQgZ3RhaVNldFRpbWVEZWMgQVBJcyBhcmUgbm90IG9wZXJhdGlvbmFsLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndGFpU2V0TXVsdGlQVFBTeW5jCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfQk9PTCAJbXVsdGlFbiwKCUlOICBHVF8zMgkJc3luY1RpbWUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3RhaUdldE11bHRpUFRQU3luYwoqCiogREVTQ1JJUFRJT046CiogCQlUaGlzIHJvdXRpbmUgZ2V0cyBNdWx0aXBsZSBQVFAgZGV2aWNlIHN5bmMgbW9kZSBhbmQgc3luYyB0aW1lIChUcmlnR2VuQW10KS4KKgkJV2hlbiBlbmFibGVkLCB0aGUgaGFyZHdhcmUgbG9naWMgZGV0ZWN0cyBhIGxvdyB0byBoaWdoIHRyYW5zaXRpb24gb24gdGhlIAoqCQlFdmVudFJlcXVlc3QoR1BJTykgYW5kIHRyYW5zZmVycyB0aGUgc3luYyB0aW1lIGludG8gdGhlIFBUUCBHbG9iYWwgVGltZQoqCQlyZWdpc3Rlci4gVGhlIEV2ZW50Q2FwVGltZSBpcyBhbHNvIHVwZGF0ZWQgYXQgdGhhdCBpbnN0YW50LgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJbXVsdGlFbgkJLSBlbmFibGUvZGlzYWJsZSBNdWx0aXBsZSBQVFAgZGV2aWNlIHN5bmMgbW9kZQoqCQlzeW5jVGltZQktIHN5bmMgdGltZSAodmFsaWQgb25seSBpZiBtdWx0aUVuIGlzIEdUX1RSVUUpCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW52YWxpZCBwYXJhbWV0ZXIgaXMgZ2l2ZW4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlXaGVuIGVuYWJsZWQsIGd0YWlTZXRUcmlnQ29uZmlnLCBndGFpU2V0RXZlbnRDb25maWcsIGd0YWlTZXRUaW1lSW5jLAoqCQlhbmQgZ3RhaVNldFRpbWVEZWMgQVBJcyBhcmUgbm90IG9wZXJhdGlvbmFsLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndGFpR2V0TXVsdGlQVFBTeW5jCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfQk9PTCAJKm11bHRpRW4sCglPVVQgR1RfMzIJCSpzeW5jVGltZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndGFpR2V0VGltZUluY0RlYwoqCiogREVTQ1JJUFRJT046CiogCQlUaGlzIHJvdXRpbmUgcmV0cmlldmVzIFRpbWUgaW5jcmVtZW50L2RlY3JlbWVudCBzZXR1cC4KKgkJVGhpcyBhbW91bnQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdW5pdHMgb2YgUFRQIEdsb2JhbCBUaW1lIHRoYXQgbmVlZCB0byBiZSAKKgkJaW5jcmVtZW50ZWQgb3IgZGVjcmVtZW50ZWQuIFRoaXMgaXMgdXNlZCBmb3IgYWRqdXN0aW5nIHRoZSBQVFAgR2xvYmFsIFRpbWUgCioJCWNvdW50ZXIgdmFsdWUgYnkgYSBjZXJ0YWluIGFtb3VudC4KKgoqIElOUFVUUzoKKiAJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbgkJLSBHVF9UUlVFIGlmIGVuYWJsZWQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCQlpbmMJCS0gR1RfVFJVRSBpZiBpbmNyZW1lbnQsIEdUX0ZBTFNFIGlmIGRlY3JlbWVudAoqCQlhbW91bnQJLSBpbmNyZW1lbnQvZGVjcmVtZW50IGFtb3VudAoqCiogUkVUVVJOUzoKKiAJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqIAkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBndGFpR2V0VGltZUluY0RlYwooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX0JPT0wJCSplbiwKCU9VVCBHVF9CT09MCQkqaW5jLAoJT1VUIEdUX1UzMgkJKmFtb3VudAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndGFpU2V0VGltZUluYwoqCiogREVTQ1JJUFRJT046CiogCQlUaGlzIHJvdXRpbmUgZW5hYmxlcyB0aW1lIGluY3JlbWVudCBieSB0aGUgc3BlY2lmZWQgdGltZSBpbmNyZW1lbnQgYW1vdW50LgoqCQlUaGUgYW1vdW50IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHVuaXRzIG9mIFBUUCBHbG9iYWwgVGltZSB0aGF0IG5lZWQgdG8gYmUgCioJCWluY3JlbWVudGVkLiBUaGlzIGlzIHVzZWQgZm9yIGFkanVzdGluZyB0aGUgUFRQIEdsb2JhbCBUaW1lIGNvdW50ZXIgdmFsdWUgYnkKKgkJYSBjZXJ0YWluIGFtb3VudC4KKgkJSW5jcmVtZW50IG9jY3VycyBqdXN0IG9uY2UuCioKKiBJTlBVVFM6CioJCWFtb3VudAktIHRpbWUgaW5jcmVtZW50IGFtb3VudCAoMCB+IDB4RkYpCioKKiBPVVRQVVRTOgoqIAkJTm9uZS4KKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAtIG9uIGVycm9yCiogCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3RhaVNldFRpbWVJbmMKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9VMzIJCWFtb3VudAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBndGFpU2V0VGltZURlYwoqCiogREVTQ1JJUFRJT046CiogCQlUaGlzIHJvdXRpbmUgZW5hYmxlcyB0aW1lIGRlY3JlbWVudCBieSB0aGUgc3BlY2lmZWQgdGltZSBkZWNyZW1lbnQgYW1vdW50LgoqCQlUaGUgYW1vdW50IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHVuaXRzIG9mIFBUUCBHbG9iYWwgVGltZSB0aGF0IG5lZWQgdG8gYmUgCioJCWRlY3JlbWVudGVkLiBUaGlzIGlzIHVzZWQgZm9yIGFkanVzdGluZyB0aGUgUFRQIEdsb2JhbCBUaW1lIGNvdW50ZXIgdmFsdWUgYnkKKgkJYSBjZXJ0YWluIGFtb3VudC4KKgkJRGVjcmVtZW50IG9jY3VycyBqdXN0IG9uY2UuCioKKiBJTlBVVFM6CioJCWFtb3VudAktIHRpbWUgZGVjcmVtZW50IGFtb3VudCAoMCB+IDB4N0ZGKQoqCiogT1VUUFVUUzoKKiAJCU5vbmUuCioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd0YWlTZXRUaW1lRGVjCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVTMyCQlhbW91bnQKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJHZXRQcmlvcml0eQoqCiogREVTQ1JJUFRJT046CioJCVByaW9yaXR5IG92ZXJ3cml0ZS4KKgkJU3VwcG9ydGVkIHByaW9yaXR5IHR5cGUgaXMgZGVmaW5lZCBhcyBHVF9BVkJfUFJJX1RZUEUuCioJCVByaW9yaXR5IGlzIGVpdGhlciAzIGJpdHMgb3IgMiBiaXRzIGRlcGVuZGluZyBvbiBwcmlvcml0eSB0eXBlLgoqCQkJR1RfQVZCX0hJX0ZQUkkJCS0gcHJpb3JpdHkgaXMgMCB+IDcKKgkJCUdUX0FWQl9ISV9RUFJJCQktIHByaW9yaXR5IGlzIDAgfiAzCioJCQlHVF9BVkJfTE9fRlBSSQkJLSBwcmlvcml0eSBpcyAwIH4gNwoqCQkJR1RfQVZCX0xPX1FQUkkJCS0gcHJpb3JpdHkgaXMgMCB+IDMKKgkJCUdUX0xFR0FDWV9ISV9GUFJJCS0gcHJpb3JpdHkgaXMgMCB+IDcKKgkJCUdUX0xFR0FDWV9ISV9RUFJJCS0gcHJpb3JpdHkgaXMgMCB+IDMKKgkJCUdUX0xFR0FDWV9MT19GUFJJCS0gcHJpb3JpdHkgaXMgMCB+IDcKKgkJCUdUX0xFR0FDWV9MT19RUFJJCS0gcHJpb3JpdHkgaXMgMCB+IDMKKgoqIElOUFVUUzoKKiAJCXByaVR5cGUJLSBHVF9BVkJfUFJJX1RZUEUKKgoqIE9VVFBVVFM6CioJCXByaQktIHByaW9yaXR5CioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJHZXRQcmlvcml0eQooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX0FWQl9QUklfVFlQRQkJcHJpVHlwZSwKCU9VVCBHVF9VMzIJCSpwcmkKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YlNldFByaW9yaXR5CioKKiBERVNDUklQVElPTjoKKgkJUHJpb3JpdHkgb3ZlcndyaXRlLgoqCQlTdXBwb3J0ZWQgcHJpb3JpdHkgdHlwZSBpcyBkZWZpbmVkIGFzIEdUX0FWQl9QUklfVFlQRS4KKgkJUHJpb3JpdHkgaXMgZWl0aGVyIDMgYml0cyBvciAyIGJpdHMgZGVwZW5kaW5nIG9uIHByaW9yaXR5IHR5cGUuCioJCQlHVF9BVkJfSElfRlBSSQkJLSBwcmlvcml0eSBpcyAwIH4gNwoqCQkJR1RfQVZCX0hJX1FQUkkJCS0gcHJpb3JpdHkgaXMgMCB+IDMKKgkJCUdUX0FWQl9MT19GUFJJCQktIHByaW9yaXR5IGlzIDAgfiA3CioJCQlHVF9BVkJfTE9fUVBSSQkJLSBwcmlvcml0eSBpcyAwIH4gMwoqCQkJR1RfTEVHQUNZX0hJX0ZQUkkJLSBwcmlvcml0eSBpcyAwIH4gNwoqCQkJR1RfTEVHQUNZX0hJX1FQUkkJLSBwcmlvcml0eSBpcyAwIH4gMwoqCQkJR1RfTEVHQUNZX0xPX0ZQUkkJLSBwcmlvcml0eSBpcyAwIH4gNwoqCQkJR1RfTEVHQUNZX0xPX1FQUkkJLSBwcmlvcml0eSBpcyAwIH4gMwoqCiogSU5QVVRTOgoqIAkJcHJpVHlwZQktIEdUX0FWQl9QUklfVFlQRQoqCQlwcmkJLSBwcmlvcml0eQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAtIG9uIGVycm9yCiogCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YlNldFByaW9yaXR5CigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfQVZCX1BSSV9UWVBFCQlwcmlUeXBlLAoJSU4gIEdUX1UzMgkJcHJpCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJHZXRBVkJIaUxpbWl0CioKKiBERVNDUklQVElPTjoKKgkJQVZCIEhpIEZyYW1lIExpbWl0LgoqCQlXaGVuIHRoZXNlIGJpdHMgYXJlIHplcm8sIG5vcm1hbCBmcmFtZSBwcm9jZXNzaW5nIG9jY3Vycy4gCioJCVdoZW4gaXQncyBub24temVybywgdGhleSBhcmUgdXNlZCB0byBkZWZpbmUgdGhlIG1heGltdW0gZnJhbWUgc2l6ZSBhbGxvd2VkCioJCWZvciBBVkIgZnJhbWVzIHRoYXQgY2FuIGJlIHBsYWNlZCBpbnRvIHRoZSBHVF9BVkJfSElfUVBSSSBxdWV1ZS4gRnJhbWVzCioJCXRoYXQgYXJlIG92ZXIgdGhpcyBzaXplIGxpbWl0IGFyZSBmaWx0ZXJlZC4gVGhlIG9ubHkgZXhjZXB0aW9uIHRvIHRoaXMgCioJCWlzIG5vbi1BVkIgZnJhbWVzIHRoYXQgZ2V0IHRoZWlyIFFQcmlBdmIgYXNzaWduZWQgYnkgdGhlIFByaW9yaXR5IE92ZXJyaWRlIAoqCQlUYWJsZQoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJbGltaXQJLSBIaSBGcmFtZSBMaW1pdAoqCiogUkVUVVJOUzoKKiAJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqIAkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiR2V0QVZCSGlMaW1pdAooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX1UzMgkJKmxpbWl0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJTZXRBVkJIaUxpbWl0CioKKiBERVNDUklQVElPTjoKKgkJQVZCIEhpIEZyYW1lIExpbWl0LgoqCQlXaGVuIHRoZXNlIGJpdHMgYXJlIHplcm8sIG5vcm1hbCBmcmFtZSBwcm9jZXNzaW5nIG9jY3Vycy4gCioJCVdoZW4gaXQncyBub24temVybywgdGhleSBhcmUgdXNlZCB0byBkZWZpbmUgdGhlIG1heGltdW0gZnJhbWUgc2l6ZSBhbGxvd2VkCioJCWZvciBBVkIgZnJhbWVzIHRoYXQgY2FuIGJlIHBsYWNlZCBpbnRvIHRoZSBHVF9BVkJfSElfUVBSSSBxdWV1ZS4gRnJhbWVzCioJCXRoYXQgYXJlIG92ZXIgdGhpcyBzaXplIGxpbWl0IGFyZSBmaWx0ZXJlZC4gVGhlIG9ubHkgZXhjZXB0aW9uIHRvIHRoaXMgCioJCWlzIG5vbi1BVkIgZnJhbWVzIHRoYXQgZ2V0IHRoZWlyIFFQcmlBdmIgYXNzaWduZWQgYnkgdGhlIFByaW9yaXR5IE92ZXJyaWRlIAoqCQlUYWJsZQoqCiogSU5QVVRTOgoqCQlsaW1pdAktIEhpIEZyYW1lIExpbWl0CioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKiAJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqIAkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiU2V0QVZCSGlMaW1pdAooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1UzMgkJbGltaXQKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YkdldFB0cEV4dENsawoqCiogREVTQ1JJUFRJT046CioJCVBUUCBleHRlcm5hbCBjbG9jayBzZWxlY3QuCioJCVdoZW4gdGhpcyBiaXQgaXMgY2xlYXJlZCB0byBhIHplcm8sIHRoZSBQVFAgY29yZSBnZXRzIGl0cyBjbG9jayBmcm9tIAoqCQlhbiBpbnRlcm5hbCAxMjVNSHogY2xvY2sgYmFzZWQgb24gdGhlIGRldmljZSdzIFhUQUxfSU4gaW5wdXQuIAoqCQlXaGVuIHRoaXMgYml0IGlzIHNldCB0byBhIG9uZSwgdGhlIFBUUCBjb3JlIGdldHMgaXRzIGNsb2NrIGZyb20gdGhlIGRldmljZSdzCioJCVBUUF9FWFRDTEsgcGluLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZXh0Q2xrCS0gR1RfVFJVRSBpZiBleHRlcm5hbCBjbG9jayBpcyBzZWxlY3RlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJHZXRQdHBFeHRDbGsKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9CT09MCQkqZXh0Q2xrCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJTZXRQdHBFeHRDbGsKKgoqIERFU0NSSVBUSU9OOgoqCQlQVFAgZXh0ZXJuYWwgY2xvY2sgc2VsZWN0LgoqCQlXaGVuIHRoaXMgYml0IGlzIGNsZWFyZWQgdG8gYSB6ZXJvLCB0aGUgUFRQIGNvcmUgZ2V0cyBpdHMgY2xvY2sgZnJvbSAKKgkJYW4gaW50ZXJuYWwgMTI1TUh6IGNsb2NrIGJhc2VkIG9uIHRoZSBkZXZpY2UncyBYVEFMX0lOIGlucHV0LiAKKgkJV2hlbiB0aGlzIGJpdCBpcyBzZXQgdG8gYSBvbmUsIHRoZSBQVFAgY29yZSBnZXRzIGl0cyBjbG9jayBmcm9tIHRoZSBkZXZpY2UncwoqCQlQVFBfRVhUQ0xLIHBpbi4KKgoqIElOUFVUUzoKKgkJZXh0Q2xrCS0gR1RfVFJVRSBpZiBleHRlcm5hbCBjbG9jayBpcyBzZWxlY3RlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKiAJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqIAkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiU2V0UHRwRXh0Q2xrCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfQk9PTAkJZXh0Q2xrCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJHZXRSZWNDbGtTZWwKKgoqIERFU0NSSVBUSU9OOgoqCQlTeW5jaHJvbm91cyBFdGhlcm5ldCBSZWNvdmVyZWQgQ2xvY2sgU2VsZWN0LgoqCQlUaGlzIGZpZWxkIGluZGljYXRlIHRoZSBpbnRlcm5hbCBQSFkgbnVtYmVyIHdob3NlIHJlY292ZXJlZCBjbG9jayB3aWxsCioJCWJlIHByZXNlbnRlZCBvbiB0aGUgU0VfUkNMSzAgb3IgU0VfUkNMSzEgcGluIGRlcGVuZGluZyBvbiB0aGUgcmVjQ2xrIHNlbGVjdGlvbi4KKgoqIElOUFVUUzoKKgkJcmVjQ2xrCS0gR1RfQVZCX1JFQ09WRVJFRF9DTE9DSyB0eXBlCioKKiBPVVRQVVRTOgoqCQljbGtTZWwJLSByZWNvdmVyZWQgY2xvY2sgc2VsZWN0aW9uCioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJHZXRSZWNDbGtTZWwKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9BVkJfUkVDT1ZFUkVEX0NMT0NLCXJlY0NsaywKCU9VVCBHVF9VMzIJCSpjbGtTZWwKKTsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJTZXRSZWNDbGtTZWwKKgoqIERFU0NSSVBUSU9OOgoqCQlTeW5jaHJvbm91cyBFdGhlcm5ldCBSZWNvdmVyZWQgQ2xvY2sgU2VsZWN0LgoqCQlUaGlzIGZpZWxkIGluZGljYXRlIHRoZSBpbnRlcm5hbCBQSFkgbnVtYmVyIHdob3NlIHJlY292ZXJlZCBjbG9jayB3aWxsCioJCWJlIHByZXNlbnRlZCBvbiB0aGUgU0VfUkNMSzAgb3IgU0VfUkNMSzEgcGluIGRlcGVuZGluZyBvbiB0aGUgcmVjQ2xrIHNlbGVjdGlvbi4KKgoqIElOUFVUUzoKKgkJcmVjQ2xrCS0gR1RfQVZCX1JFQ09WRVJFRF9DTE9DSyB0eXBlCioJCWNsa1NlbAktIHJlY292ZXJlZCBjbG9jayBzZWxlY3Rpb24gKHNob3VsZCBiZSBsZXNzIHRoYW4gOCkKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJTZXRSZWNDbGtTZWwKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOICBHVF9BVkJfUkVDT1ZFUkVEX0NMT0NLCXJlY0NsaywKCUlOICBHVF9VMzIJCWNsa1NlbAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiR2V0QXZiT3VpQnl0ZXMKKgoqIERFU0NSSVBUSU9OOgoqCQlBVkIgT1VJIExpbWl0IEZpbHRlciBieXRlcygwIH4gMikuCioJCVdoZW4gYWxsIHRocmVlIG9mIHRoZSBBdmJPdWkgQnl0ZXMgYXJlIHplcm8sIG5vcm1hbCBmcmFtZSBwcm9jZXNzaW5nIG9jY3Vycy4KKgkJV2hlbiBhbnkgb2YgdGhlIHRocmVlIEF2Yk91aSBCeXRlcyBhcmUgbm9uLXplcm8sIGFsbCBBVkIgZnJhbWVzIG11c3QgaGF2ZSBhCioJCWRlc3RpbmF0aW9uIGFkZHJlc3Mgd2hvc2UgMXN0IHRocmVlIGJ5dGVzIG9mIHRoZSBEQSBtYXRjaCB0aGVzZSB0aHJlZSAKKgkJQXZiT3VpIEJ5dGVzIG9yIHRoZSBmcmFtZSB3aWxsIGJlIGZpbHRlcmVkLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJb3VpQnl0ZXMJLSAzIGJ5dGVzIG9mIE9VSSBmaWVsZCBpbiBFdGhlcm5ldCBhZGRyZXNzIGZvcm1hdAoqCiogUkVUVVJOUzoKKiAJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqIAkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiR2V0QXZiT3VpQnl0ZXMKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9VOAkJKm9iaUJ5dGVzCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdhdmJTZXRBdmJPdWlCeXRlcwoqCiogREVTQ1JJUFRJT046CioJCUFWQiBPVUkgTGltaXQgRmlsdGVyIGJ5dGVzKDAgfiAyKS4KKgkJV2hlbiBhbGwgdGhyZWUgb2YgdGhlIEF2Yk91aSBCeXRlcyBhcmUgemVybywgbm9ybWFsIGZyYW1lIHByb2Nlc3Npbmcgb2NjdXJzLgoqCQlXaGVuIGFueSBvZiB0aGUgdGhyZWUgQXZiT3VpIEJ5dGVzIGFyZSBub24temVybywgYWxsIEFWQiBmcmFtZXMgbXVzdCBoYXZlIGEKKgkJZGVzdGluYXRpb24gYWRkcmVzcyB3aG9zZSAxc3QgdGhyZWUgYnl0ZXMgb2YgdGhlIERBIG1hdGNoIHRoZXNlIHRocmVlIAoqCQlBdmJPdWkgQnl0ZXMgb3IgdGhlIGZyYW1lIHdpbGwgYmUgZmlsdGVyZWQuCioKKiBJTlBVVFM6CioJCW91aUJ5dGVzCS0gMyBieXRlcyBvZiBPVUkgZmllbGQgaW4gRXRoZXJuZXQgYWRkcmVzcyBmb3JtYXQKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJTZXRBdmJPdWlCeXRlcwooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1U4CQkqb2JpQnl0ZXMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YkdldEF2Yk1vZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlQb3J0J3MgQVZCIE1vZGUuCioKKiBJTlBVVFM6CioJCXBvcnQJLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCiogT1VUUFVUUzoKKgkJbW9kZQktIEdUX0FWQl9NT0RFIHR5cGUKKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAtIG9uIGVycm9yCiogCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YkdldEF2Yk1vZGUKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOCUdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQVZCX01PREUJKm1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YlNldEF2Yk1vZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlQb3J0J3MgQVZCIE1vZGUuCioKKiBJTlBVVFM6CioJCXBvcnQJLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCQltb2RlCS0gR1RfQVZCX01PREUgdHlwZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAtIG9uIGVycm9yCiogCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YlNldEF2Yk1vZGUKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOCUdUX0xQT1JUCXBvcnQsCglJTiAgR1RfQVZCX01PREUJbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiR2V0QXZiT3ZlcnJpZGUKKgoqIERFU0NSSVBUSU9OOgoqCQlBVkIgT3ZlcnJpZGUuCioJCVdoZW4gZGlzYWJsZWQsIG5vcm1hbCBmcmFtZSBwcm9jZXNzaW5nIG9jY3Vycy4KKgkJV2hlbiBlbmFibGVkLCB0aGUgZWdyZXNzIHBvcnRpb24gb2YgdGhpcyBwb3J0IGlzIGNvbnNpZGVyZWQgQVZCIGV2ZW4gaWYgCioJCXRoZSBpbmdyZXNzIHBvcnRpb24gaXMgbm90LgoqCiogSU5QVVRTOgoqCQlwb3J0CS0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCWVuCQktIEdUX1RSVUUgaWYgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJHZXRBdmJPdmVycmlkZQooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4JR1RfTFBPUlQJcG9ydCwKCU9VVCBHVF9CT09MCQkqZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YlNldEF2Yk92ZXJyaWRlCioKKiBERVNDUklQVElPTjoKKgkJQVZCIE92ZXJyaWRlLgoqCQlXaGVuIGRpc2FibGVkLCBub3JtYWwgZnJhbWUgcHJvY2Vzc2luZyBvY2N1cnMuCioJCVdoZW4gZW5hYmxlZCwgdGhlIGVncmVzcyBwb3J0aW9uIG9mIHRoaXMgcG9ydCBpcyBjb25zaWRlcmVkIEFWQiBldmVuIGlmIAoqCQl0aGUgaW5ncmVzcyBwb3J0aW9uIGlzIG5vdC4KKgoqIElOUFVUUzoKKgkJcG9ydAktIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCWVuCQktIEdUX1RSVUUgdG8gZW5hYmxlLCBHVF9GQUxTRSBvdGhlcndpc2UKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJTZXRBdmJPdmVycmlkZQooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4JR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9CT09MCQllbgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YkdldEZpbHRlckJhZEF2YgoqCiogREVTQ1JJUFRJT046CioJCUZpbHRlciBCYWQgQVZCIGZyYW1lcy4KKgkJV2hlbiBkaXNhYmxlZCwgbm9ybWFsIGZyYW1lIHByb2Nlc3Npbmcgb2NjdXJzLgoqCQlXaGVuIGVuYWJsZWQsIGZyYW1lcyB0aGF0IGFyZSBjb25zaWRlcmVkIEJhZCBBVkIgZnJhbWVzIGFyZSBmaWx0ZXJlZC4KKgoqIElOUFVUUzoKKgkJcG9ydAktIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQllbgkJLSBHVF9UUlVFIGlmIGVuYWJsZWQsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogUkVUVVJOUzoKKiAJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqIAkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiR2V0RmlsdGVyQmFkQXZiCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTglHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiU2V0RmlsdGVyQmFkQXZiCioKKiBERVNDUklQVElPTjoKKgkJRmlsdGVyIEJhZCBBVkIgZnJhbWVzLgoqCQlXaGVuIGRpc2FibGVkLCBub3JtYWwgZnJhbWUgcHJvY2Vzc2luZyBvY2N1cnMuCioJCVdoZW4gZW5hYmxlZCwgZnJhbWVzIHRoYXQgYXJlIGNvbnNpZGVyZWQgQmFkIEFWQiBmcmFtZXMgYXJlIGZpbHRlcmVkLgoqCiogSU5QVVRTOgoqCQlwb3J0CS0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJZW4JCS0gR1RfVFJVRSB0byBlbmFibGUsIEdUX0ZBTFNFIG90aGVyd2lzZQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAtIG9uIGVycm9yCiogCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YlNldEZpbHRlckJhZEF2YgooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4JR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9CT09MCQllbgopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YkdldEF2YlR1bm5lbAoqCiogREVTQ1JJUFRJT046CioJCUFWQiBUdW5uZWwuCioJCVdoZW4gZGlzYWJsZWQsIG5vcm1hbCBmcmFtZSBwcm9jZXNzaW5nIG9jY3Vycy4KKgkJV2hlbiBlbmFibGVkLCB0aGUgcG9ydCBiYXNlZCBWTEFOIFRhYmxlIG1hc2tpbmcsIDgwMi4xUSBWTEFOIG1lbWJlcnNoaXAgCioJCW1hc2tpbmcgYW5kIHRoZSBUcnVuayBNYXNraW5nIGlzIGJ5cGFzc2VkIGZvciBhbnkgZnJhbWUgZW50ZXJpbmcgdGhpcyBwb3J0CioJCXRoYXQgaXMgY29uc2lkZXJlZCBBVkIgYnkgREEuIFRoaXMgaW5jbHVkZXMgdW5pY2FzdCBhcyB3ZWxsIGFzIG11bHRpY2FzdAoqCQlmcmFtZQoqCiogSU5QVVRTOgoqCQlwb3J0CS0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgoqIE9VVFBVVFM6CioJCWVuCQktIEdUX1RSVUUgaWYgZW5hYmxlZCwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJHZXRBdmJUdW5uZWwKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOCUdUX0xQT1JUCXBvcnQsCglPVVQgR1RfQk9PTAkJKmVuCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiU2V0QXZiVHVubmVsCioKKiBERVNDUklQVElPTjoKKgkJQVZCIFR1bm5lbC4KKgkJV2hlbiBkaXNhYmxlZCwgbm9ybWFsIGZyYW1lIHByb2Nlc3Npbmcgb2NjdXJzLgoqCQlXaGVuIGVuYWJsZWQsIHRoZSBwb3J0IGJhc2VkIFZMQU4gVGFibGUgbWFza2luZywgODAyLjFRIFZMQU4gbWVtYmVyc2hpcCAKKgkJbWFza2luZyBhbmQgdGhlIFRydW5rIE1hc2tpbmcgaXMgYnlwYXNzZWQgZm9yIGFueSBmcmFtZSBlbnRlcmluZyB0aGlzIHBvcnQKKgkJdGhhdCBpcyBjb25zaWRlcmVkIEFWQiBieSBEQS4gVGhpcyBpbmNsdWRlcyB1bmljYXN0IGFzIHdlbGwgYXMgbXVsdGljYXN0CioJCWZyYW1lCioKKiBJTlBVVFM6CioJCXBvcnQJLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCQllbgkJLSBHVF9UUlVFIHRvIGVuYWJsZSwgR1RfRkFMU0Ugb3RoZXJ3aXNlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKiAJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCiogCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKiAJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqIAkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnYXZiU2V0QXZiVHVubmVsCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTglHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX0JPT0wJCWVuCik7CgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnYXZiR2V0QXZiRnJhbWVQb2xpY3kKKgoqIERFU0NSSVBUSU9OOgoqCQlBVkIgSGkgb3IgTG8gZnJhbWUgcG9saWN5IG1hcHBpbmcuCioJCVN1cHBvcnRlZCBwb2xpY2llcyBhcmUgZGVmaW5lZCBpbiBHVF9BVkJfRlJBTUVfUE9MSUNZLgoqCQkJCiogSU5QVVRTOgoqCQlwb3J0CS0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJZlR5cGUJLSBHVF9BVkJfRlJBTUVfVFlQRSAKKgoqIE9VVFBVVFM6CioJCXBvbGljeQktIEdUX0FWQl9GUkFNRV9QT0xJQ1kKKgoqIFJFVFVSTlM6CiogCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqIAkJR1RfRkFJTCAgICAtIG9uIGVycm9yCiogCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKiAJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ2F2YkdldEF2YkZyYW1lUG9saWN5CigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTglHVF9MUE9SVAlwb3J0LAoJSU4JR1RfQVZCX0ZSQU1FX1RZUEUJZlR5cGUsCglPVVQgR1RfQVZCX0ZSQU1FX1BPTElDWQkJKnBvbGljeQopOwoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ2F2YlNldEF2YkZyYW1lUG9saWN5CioKKiBERVNDUklQVElPTjoKKgkJQVZCIEhpIG9yIExvIGZyYW1lIHBvbGljeSBtYXBwaW5nLgoqCQlTdXBwb3J0ZWQgcG9saWNpZXMgYXJlIGRlZmluZWQgaW4gR1RfQVZCX0ZSQU1FX1BPTElDWS4KKgoqIElOUFVUUzoKKgkJcG9ydAktIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCWZUeXBlCS0gR1RfQVZCX0ZSQU1FX1RZUEUgCioJCXBvbGljeQktIEdUX0FWQl9GUkFNRV9QT0xJQ1kKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqIAkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKiAJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqIAkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CiogCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdhdmJTZXRBdmJGcmFtZVBvbGljeQooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4JR1RfTFBPUlQJcG9ydCwKCUlOCUdUX0FWQl9GUkFNRV9UWVBFCWZUeXBlLAoJSU4gIEdUX0FWQl9GUkFNRV9QT0xJQ1kJCXBvbGljeQopOwoKLyogQW1iZXIgUUFWIEFQSSAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyogQW1iZXIgUUFWIEFQSSAqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZTZXRQb3J0UXByaVhRVFNUb2tlbgoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXQgUHJpb3JpdHkgUXVldWUgMC0zIHRpbWUgc2xvdCB0b2tlbnMgb24gYSBwb3J0LgoqCQlUaGUgc2V0dGluZyB2YWx1ZSBpcyBudW1iZXIgb2YgdG9rZW5zIHRoYXQgbmVlZCB0byBiZSBzdWJ0cmFjdGVkIGF0IGVhY2ggCioJCVFUUyBpbnRlcnZhbCBib3VuZGFyeS4KKgoqIElOUFVUUzoKKgkJcG9ydAktIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCXF1ZXVlCSAtIDAgLSAzCioJCXF0c1Rva2VuIC0gbnVtYmVyIG9mIHRva2Vucy4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZS4KKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdlNldFBvcnRRcHJpWFFUU1Rva2VuCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTglHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX1U4CQlxdWV1ZSwKCUlOICBHVF9VMTYJCXF0c1Rva2VuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZHZXRQb3J0UXByaVhRVFNUb2tlbgoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXQgUHJpb3JpdHkgUXVldWUgMC0zIHRpbWUgc2xvdCB0b2tlbnMgb24gYSBwb3J0LgoqCQlUaGUgc2V0dGluZyB2YWx1ZSBpcyBudW1iZXIgb2YgdG9rZW5zIHRoYXQgbmVlZCB0byBiZSBzdWJ0cmFjdGVkIGF0IGVhY2ggCioJCVFUUyBpbnRlcnZhbCBib3VuZGFyeS4KKgoqIElOUFVUUzoKKgkJcG9ydAktIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioJCXF1ZXVlIC0gMCAtIDMKKgoqIE9VVFBVVFM6CioJCXF0c1Rva2VuIC0gbnVtYmVyIG9mIHRva2VucwoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZHZXRQb3J0UXByaVhRVFNUb2tlbgooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4JR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9VOAkJcXVldWUsCglPVVQgR1RfVTE2CQkqcXRzVG9rZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdlNldFBvcnRRcHJpWEJ1cnN0Qnl0ZXMKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0IFByaW9yaXR5IFF1ZXVlIDAtMyBCdXJzdCBCeXRlcyBvbiBhIHBvcnQuCioJCVRoaXMgdmFsdWUgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgY3JlZGl0cyBpbiBieXRlcyB0aGF0IGNhbiBiZSAKKgkJYWNjdW11bGF0ZWQgd2hlbiB0aGUgcXVldWUgaXMgYmxvY2tlZCBmcm9tIHNlbmRpbmcgb3V0IGEgZnJhbWUgZHVlIHRvIAoqCQloaWdoZXIgcHJpb3JpdHkgcXVldWUgZnJhbWVzIGJlaW5nIHNlbnQgb3V0LgoqCiogSU5QVVRTOgoqCQlwb3J0CS0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJcXVldWUgLSAwIC0gMwoqCQlidXJzdCAtIG51bWJlciBvZiBjcmVkaXRzIGluIGJ5dGVzIC4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2U2V0UG9ydFFwcmlYQnVyc3RCeXRlcwooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4JR1RfTFBPUlQJcG9ydCwKCUlOICBHVF9VOAkJcXVldWUsCglJTiAgR1RfVTE2CQlidXJzdAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2R2V0UG9ydFFwcmlYQnVyc3RCeXRlcwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXQgUHJpb3JpdHkgUXVldWUgMC0zIEJ1cnN0IEJ5dGVzIG9uIGEgcG9ydC4KKgkJVGhpcyB2YWx1ZSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBjcmVkaXRzIGluIGJ5dGVzIHRoYXQgY2FuIGJlIAoqCQlhY2N1bXVsYXRlZCB3aGVuIHRoZSBxdWV1ZSBpcyBibG9ja2VkIGZyb20gc2VuZGluZyBvdXQgYSBmcmFtZSBkdWUgdG8gCioJCWhpZ2hlciBwcmlvcml0eSBxdWV1ZSBmcmFtZXMgYmVpbmcgc2VudCBvdXQuCioKKiBJTlBVVFM6CioJCXBvcnQJLSB0aGUgbG9naWNhbCBwb3J0IG51bWJlcgoqCQlxdWV1ZQktIDAgLSAzCioKKiBPVVRQVVRTOgoqCQlidXJzdCAtIG51bWJlciBvZiBjcmVkaXRzIGluIGJ5dGVzIC4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZHZXRQb3J0UXByaVhCdXJzdEJ5dGVzCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTglHVF9MUE9SVAlwb3J0LAoJSU4gIEdUX1U4CQlxdWV1ZSwKCU9VVCBHVF9VMTYJCSpidXJzdAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2U2V0UG9ydFFhdkVuYWJsZQoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXQgUUFWIGVuYWJsZSBzdGF0dXMgb24gYSBwb3J0LgoqCiogSU5QVVRTOgoqCQlwb3J0CS0gdGhlIGxvZ2ljYWwgcG9ydCBudW1iZXIKKgkJZW4JCS0gR1RfVFJVRTogUUFWIGVuYWJsZSwgR1RfRkFMU0U6IFFBViBkaXNhYmxlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdlNldFBvcnRRYXZFbmFibGUKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCUlOCUdUX0xQT1JUCXBvcnQsCglJTiAgR1RfQk9PTAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdkdldFBvcnRRYXZFbmFibGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0IFFBViBlbmFibGUgc3RhdHVzIG9uIGEgcG9ydC4KKgoqIElOUFVUUzoKKgkJcG9ydAktIHRoZSBsb2dpY2FsIHBvcnQgbnVtYmVyCioKKiBPVVRQVVRTOgoqCQllbgkJLSBHVF9UUlVFOiBRQVYgZW5hYmxlLCBHVF9GQUxTRTogUUFWIGRpc2FibGUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZHZXRQb3J0UWF2RW5hYmxlCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTglHVF9MUE9SVAlwb3J0LAoJT1VUIEdUX0JPT0wJCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qIFFBViBHbG9iYWwgcmVnaXN0ZXJzIHByb2Nlc3NpbmcgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2U2V0R2xvYmFsQWRtaW5NR01UCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldCB0byBhY2NlcHQgQWRtaXQgTWFuYWdlbWVudCBGcmFtZXMgYWx3YXlzLgoqCiogSU5QVVRTOgoqCQllbiAtIEdUX1RSVUUgdG8gc2V0IE1HTVQgZnJhbWUgYWNjZXB0ZWQgYWx3YXlzLCAKKgkJCSBHVF9GQUxTRSBkbyBub3Qgc2V0IE1HTVQgZnJhbWUgYWNjZXB0ZWQgYWx3YXlzCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdlNldEdsb2JhbEFkbWluTUdNVAooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX0JPT0wJCWVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZHZXRHbG9iYWxBZG1pbk1HTVQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgZ2V0IHNldHRpbmcgb2YgQWRtaXQgTWFuYWdlbWVudCBGcmFtZXMgYWx3YXlzLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW4gLSBHVF9UUlVFIHRvIHNldCBNR01UIGZyYW1lIGFjY2VwdGVkIGFsd2F5cywgCioJCQkgR1RfRkFMU0UgZG8gbm90IHNldCBNR01UIGZyYW1lIGFjY2VwdGVkIGFsd2F5cwoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdkdldEdsb2JhbEFkbWluTUdNVAooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX0JPT0wJCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2U2V0R2xvYmFsSXNvUHRyVGhyZXNob2xkCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldCBHbG9iYWwgSXNvY2hyb25vdXMgUXVldWUgUG9pbnRlciBUaHJlc2hvbGQuCioJCVRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSB0b3RhbCBudW1iZXIgb2YgaXNvY2hyb25vdXMgcG9pbnRlcnMgCioJCXRoYXQgYXJlIHJlc2VydmVkIGZvciBpc29jaHJvbm91cyBzdHJlYW1zLiBUaGUgdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgCioJCWNvbXB1dGVkIGluIFNSUCBzb2Z0d2FyZSBhbmQgcHJvZ3JhbW1lZCBpbnRvIGhhcmR3YXJlIGJhc2VkIG9uIHRoZSB0b3RhbCAKKgkJYWdncmVnYXRlIGlzb2Nocm9ub3VzIHN0cmVhbXMgY29uZmlndXJlZCB0byBnbyB0aHJvdWdoIHRoaXMgZGV2aWNlLi4KKgoqIElOUFVUUzoKKgkJaXNvUHRycyAtICB0b3RhbCBudW1iZXIgb2YgaXNvY2hyb25vdXMgcG9pbnRlcnMgCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdlNldEdsb2JhbElzb1B0clRocmVzaG9sZAooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1UxNgkJaXNvUHRycwopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2R2V0R2xvYmFsSXNvUHRyVGhyZXNob2xkCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldCBHbG9iYWwgSXNvY2hyb25vdXMgUXVldWUgUG9pbnRlciBUaHJlc2hvbGQuCioJCVRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSB0b3RhbCBudW1iZXIgb2YgaXNvY2hyb25vdXMgcG9pbnRlcnMgCioJCXRoYXQgYXJlIHJlc2VydmVkIGZvciBpc29jaHJvbm91cyBzdHJlYW1zLiBUaGUgdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgCioJCWNvbXB1dGVkIGluIFNSUCBzb2Z0d2FyZSBhbmQgcHJvZ3JhbW1lZCBpbnRvIGhhcmR3YXJlIGJhc2VkIG9uIHRoZSB0b3RhbCAKKgkJYWdncmVnYXRlIGlzb2Nocm9ub3VzIHN0cmVhbXMgY29uZmlndXJlZCB0byBnbyB0aHJvdWdoIHRoaXMgZGV2aWNlLi4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWlzb1B0cnMgLSAgdG90YWwgbnVtYmVyIG9mIGlzb2Nocm9ub3VzIHBvaW50ZXJzIAoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdkdldEdsb2JhbElzb1B0clRocmVzaG9sZAooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX1UxNgkJKmlzb1B0cnMKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdlNldEdsb2JhbERpc1FTRDRNR01UCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldCBEaXNhYmxlIFF1ZXVlIFNjaGVkdWxlciBEZWxheXMgZm9yIE1hbmFnZW1lbnQgZnJhbWVzLi4KKgoqIElOUFVUUzoKKgkJZW4gLSBHVF9UUlVFLCBpdCBpbmRpY2F0ZXMgdG8gdGhlIFF1ZXVlIENvbnRyb2xsZXIgdG8gZGlzYWJsZSBhcHBseWluZyBRdWV1ZQoqCQkJU2NoZWR1bGVyIERlbGF5cyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgcmF0ZSByZWd1bGF0b3IgZG9lcyBub3QgYWNjb3VudAoqCQkJZm9yIE1HTVQgZnJhbWVzIHRocm91Z2ggdGhpcyBxdWV1ZS4KKgkJCUdUX0ZBTFNFLCB0aGUgTUdNVCBmcmFtZXMgZm9sbG93IHNpbWlsYXIgcmF0ZSByZWd1bGF0aW9uIGFuZCBkZWxheQoqCQkJcmVndWxhdGlvbiBlbnZlbG9wZSBhcyBzcGVjaWZpZWQgZm9yIHRoZSBpc29jaHJvbm91cyBxdWV1ZSB0aGF0IHRoZQoqCQkJTUdNVCBmcmFtZXMgYXJlIHNoYXJpbmcgd2l0aC4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdlNldEdsb2JhbERpc1FTRDRNR01UCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfQk9PTAkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdkdldEdsb2JhbERpc1FTRDRNR01UCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIEdldCBEaXNhYmxlIFF1ZXVlIFNjaGVkdWxlciBEZWxheXMgZm9yIE1hbmFnZW1lbnQgZnJhbWVzLi4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWVuIC0gR1RfVFJVRSwgaXQgaW5kaWNhdGVzIHRvIHRoZSBRdWV1ZSBDb250cm9sbGVyIHRvIGRpc2FibGUgYXBwbHlpbmcgUXVldWUKKgkJCVNjaGVkdWxlciBEZWxheXMgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHJhdGUgcmVndWxhdG9yIGRvZXMgbm90IGFjY291bnQKKgkJCWZvciBNR01UIGZyYW1lcyB0aHJvdWdoIHRoaXMgcXVldWUuCioJCQlHVF9GQUxTRSwgdGhlIE1HTVQgZnJhbWVzIGZvbGxvdyBzaW1pbGFyIHJhdGUgcmVndWxhdGlvbiBhbmQgZGVsYXkKKgkJCXJlZ3VsYXRpb24gZW52ZWxvcGUgYXMgc3BlY2lmaWVkIGZvciB0aGUgaXNvY2hyb25vdXMgcXVldWUgdGhhdCB0aGUKKgkJCU1HTVQgZnJhbWVzIGFyZSBzaGFyaW5nIHdpdGguCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdkdldEdsb2JhbERpc1FTRDRNR01UCigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfQk9PTAkJKmVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZTZXRHbG9iYWxJbnRlcnJ1cHQKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0IFFBViBpbnRlcnJ1cHQgZW5hYmxlLCAKKgkJVGhlIFFBViBpbnRlcnJ5cHRzIGluY2x1ZGU6CioJCVtHVF9RQVZfSU5UX0VOQUJMRV9FTlFfTE1UX0JJVF0gICAgICAjIEVuUSBMaW1pdCBJbnRlcnJ1cHQgRW5hYmxlIAoqCQlbR1RfUUFWX0lOVF9FTkFCTEVfSVNPX0RFTF9CSVRdICAgICAgIyBJc28gRGVsYXkgSW50ZXJydXB0IEVuYWJsZSAgIAoqCQlbR1RfUUFWX0lOVF9FTkFCTEVfSVNPX0RJU19CSVRdICAgICAgIyBJc28gRGlzY2FyZCBJbnRlcnJ1cHQgRW5hYmxlIAoqCQlbR1RfUUFWX0lOVF9FTkFCTEVfSVNPX0xJTUlUX0VYX0JJVF0gIyBJc28gUGFja2V0IE1lbW9yeSBFeGNlZWRlZCAKKgkJCQkJCQkJCQkJICBJbnRlcnJ1cHQgRW5hYmxlIAoqCiogSU5QVVRTOgoqCQlpbnRFbiAtIFtHVF9RQVZfSU5UX0VOQUJMRV9FTlFfTE1UX0JJVF0gT1IgIAoqCQkJCVtHVF9RQVZfSU5UX0VOQUJMRV9JU09fREVMX0JJVF0gT1IgICAgCioJCQkJW0dUX1FBVl9JTlRfRU5BQkxFX0lTT19ESVNfQklUXSBPUiAgCioJCQkJW0dUX1FBVl9JTlRfRU5BQkxFX0lTT19MSU1JVF9FWF9CSVRdICAgCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdlNldEdsb2JhbEludGVycnVwdAooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1UxNgkJaW50RW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdkdldEdsb2JhbEludGVycnVwdAoqCiogREVTQ1JJUFRJT046CiogICAgICAgVGhpcyByb3V0aW5lIGdldCBRQVYgaW50ZXJydXB0IHN0YXR1cyBhbmQgZW5hYmxlIHN0YXR1cywgCioJCVRoZSBRQVYgaW50ZXJyeXB0IHN0YXR1cyBpbmNsdWRlOgoqCQkgW0dUX1FBVl9JTlRfU1RBVFVTX0VOUV9MTVRfQklUXSAgICAgICMgRW5xdWV1ZSBEZWxheSBMaW1pdCBleGNlZWRlZCAgCioJCSBbR1RfUUFWX0lOVF9TVEFUVVNfSVNPX0RFTF9CSVRdICAgICAgIyBJc28gRGVsYXkgSW50ZXJydXB0IFN0YXR1cyAgIAoqCQkgW0dUX1FBVl9JTlRfU1RBVFVTX0lTT19ESVNfQklUXSAgICAgICMgSXNvIERpc2NhcmQgSW50ZXJydXB0IFN0YXR1cyAKKgkJIFtHVF9RQVZfSU5UX1NUQVRVU19JU09fTElNSVRfRVhfQklUXSAjIElzbyBQYWNrZXQgTWVtb3J5IEV4Y2VlZGVkIAoqCQkJCQkJCQkJCQkgICAgSW50ZXJydXB0IFN0YXR1cyAKKgkJVGhlIFFBViBpbnRlcnJ5cHQgZW5hYmxlIHN0YXR1cyBpbmNsdWRlOgoqCQkgW0dUX1FBVl9JTlRfRU5BQkxFX0VOUV9MTVRfQklUXSAgICAgICMgRW5RIExpbWl0IEludGVycnVwdCBFbmFibGUgCioJCSBbR1RfUUFWX0lOVF9FTkFCTEVfSVNPX0RFTF9CSVRdICAgICAgIyBJc28gRGVsYXkgSW50ZXJydXB0IEVuYWJsZSAgIAoqCQkgW0dUX1FBVl9JTlRfRU5BQkxFX0lTT19ESVNfQklUXSAgICAgICMgSXNvIERpc2NhcmQgSW50ZXJydXB0IEVuYWJsZSAKKgkJIFtHVF9RQVZfSU5UX0VOQUJMRV9JU09fTElNSVRfRVhfQklUXSAjIElzbyBQYWNrZXQgTWVtb3J5IEV4Y2VlZGVkIAoqCQkJCQkJCQkJCQkJICBJbnRlcnJ1cHQgRW5hYmxlIAoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJaW50RW5TdCAtIFtHVF9RQVZfSU5UX1NUQVRVU19FTlFfTE1UX0JJVF0gT1IgICAgIAoqCQkJCVtHVF9RQVZfSU5UX1NUQVRVU19JU09fREVMX0JJVF0gT1IgICAKKgkJCQlbR1RfUUFWX0lOVF9TVEFUVVNfSVNPX0RJU19CSVRdIE9SICAgCioJCQkJW0dUX1FBVl9JTlRfU1RBVFVTX0lTT19MSU1JVF9FWF9CSVRdIE9SCioJCQkJW0dUX1FBVl9JTlRfRU5BQkxFX0VOUV9MTVRfQklUXSBPUiAgCioJCQkJW0dUX1FBVl9JTlRfRU5BQkxFX0lTT19ERUxfQklUXSBPUiAgICAKKgkJCQlbR1RfUUFWX0lOVF9FTkFCTEVfSVNPX0RJU19CSVRdIE9SICAKKgkJCQlbR1RfUUFWX0lOVF9FTkFCTEVfSVNPX0xJTUlUX0VYX0JJVF0gICAKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZHZXRHbG9iYWxJbnRlcnJ1cHQKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9VMTYJCSppbnRFblN0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZHZXRHbG9iYWxJc29JbnRlcnJ1cHRQb3J0CioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldCBJc29jaHJvbm91cyBpbnRlcnJ1cHQgcG9ydC4KKgkJVGhpcyBmaWVsZCBpbmRpY2F0ZXMgdGhlIHBvcnQgbnVtYmVyIGZvciBJc29EaXNJbnQgb3IgSXNvTGltaXRFeEludCAKKgkJYml0cy4gT25seSBvbmUgc3VjaCBpbnRlcnJ1cHQgY29uZGl0aW9uIGNhbiBiZSBkZXRlY3RlZCBieSBoYXJkd2FyZSBhdCBvbmUgCioJCXRpbWUuIE9uY2UgYW4gaW50ZXJydXB0IGJpdCBoYXMgYmVlbiBzZXQgYWxvbmcgd2l0aCB0aGUgSXNvSW50UG9ydCwgdGhlIAoqCQlzb2Z0d2FyZSB3b3VsZCBoYXZlIHRvIGNvbWUgYW5kIGNsZWFyIHRoZSBiaXRzIGJlZm9yZSBoYXJkd2FyZSByZWNvcmRzIAoqCQlhbm90aGVyIGludGVycnVwdCBldmVudC4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCXBvcnQgLSBwb3J0IG51bWJlciBmb3IgSXNvRGlzSW50IG9yIElzb0xpbWl0RXhJbnQgYml0cy4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZHZXRHbG9iYWxJc29JbnRlcnJ1cHRQb3J0CigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfVTgJCSpwb3J0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZTZXRHbG9iYWxJc29EZWxheUxtdAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXQgSXNvY2hyb25vdXMgcXVldWUgZGVsYXkgTGltaXQKKgkJVGhpcyBmaWVsZCByZXByZXNlbnRzIGEgcGVyLXBvcnQgaXNvY2hyb25vdXMgZGVsYXkgbGltaXQgdGhhdCAKKgkJd2lsbCBiZSBjaGVja2VkIGJ5IHRoZSBxdWV1ZSBjb250cm9sbGVyIGxvZ2ljIHRvIGVuc3VyZSBubyBpc29jaHJvbm91cyAKKgkJcGFja2V0cyBzdWZmZXIgbW9yZSB0aGFuIHRoaXMgZGVsYXkgdy5yLnQgdG8gdGhlaXIgZWxpZ2liaWxpdHkgdGltZSBzbG90LgoqCQlUaGlzIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBRdWV1ZSBUaW1lIFNsb3RzLiBUaGUgaW50ZXJ2YWwgZm9yIHRoZSBRVFMgCioJCWNhbiBiZSBjb25maWd1cmVkIHVzaW5nIHRoZSByZWdpc3RlciBpbiBRYXYgR2xvYmFsIENvbmZpZ3VyYXRpb24sIE9mZnNldCAweDIuCioKKiBJTlBVVFM6CioJCWxpbWl0IC0gcGVyLXBvcnQgaXNvY2hyb25vdXMgZGVsYXkgbGltaXQuCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdlNldEdsb2JhbElzb0RlbGF5TG10CigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglJTiAgR1RfVTgJCWxpbWl0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZHZXRHbG9iYWxJc29EZWxheUxtdAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXQgSXNvY2hyb25vdXMgcXVldWUgZGVsYXkgTGltaXQKKgkJVGhpcyBmaWVsZCByZXByZXNlbnRzIGEgcGVyLXBvcnQgaXNvY2hyb25vdXMgZGVsYXkgbGltaXQgdGhhdCAKKgkJd2lsbCBiZSBjaGVja2VkIGJ5IHRoZSBxdWV1ZSBjb250cm9sbGVyIGxvZ2ljIHRvIGVuc3VyZSBubyBpc29jaHJvbm91cyAKKgkJcGFja2V0cyBzdWZmZXIgbW9yZSB0aGFuIHRoaXMgZGVsYXkgdy5yLnQgdG8gdGhlaXIgZWxpZ2liaWxpdHkgdGltZSBzbG90LgoqCQlUaGlzIHJlcHJlc2VudHMgdGhlIG51bWJlciBvZiBRdWV1ZSBUaW1lIFNsb3RzLiBUaGUgaW50ZXJ2YWwgZm9yIHRoZSBRVFMgCioJCWNhbiBiZSBjb25maWd1cmVkIHVzaW5nIHRoZSByZWdpc3RlciBpbiBRYXYgR2xvYmFsIENvbmZpZ3VyYXRpb24sIE9mZnNldCAweDIuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlsaW1pdCAtIHBlci1wb3J0IGlzb2Nocm9ub3VzIGRlbGF5IGxpbWl0LgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3FhdkdldEdsb2JhbElzb0RlbGF5TG10CigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfVTgJCSpsaW1pdAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2U2V0R2xvYmFsSXNvTW9uRW4KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBzZXQgSXNvY2hyb25vdXMgbW9uaXRvciBlbmFibGUKKgkJU2V0IEdUX1RSVUU6IHRoaXMgYml0IGVuYWJsZXMgdGhlIHN0YXRpc3RpY3MgZ2F0aGVyaW5nIGNhcGFiaWxpdGllcyBzdGF0ZWQKKgkJaW4gUFRQIEdsb2JhbCBTdGF0dXMgUmVnaXN0ZXJzIE9mZnNldCAweEQsIDB4RSBhbmQgMHhGLiBPbmNlIGVuYWJsZWQsIHRoZQoqCQlzb2Z0d2FyZSBpcyBleHBlY3RlZCB0byBwcm9ncmFtIHRoZSBJc29Nb25Qb3J0IChQVFAgR2xvYmFsIFN0YXR1cyBPZmZzZXQKKgkJMHhEKSBpbmRpY2F0aW5nIHdoaWNoIHBvcnQgb2YgdGhlIGRldmljZSBkb2VzIHRoZSBzb2Z0d2FyZSB3YW50cyB0byBtb25pdG9yLgoqCQlVcG9uIHNldHRpbmcgdGhpcyBiaXQsIHRoZSBoYXJkd2FyZSBjb2xsZWN0cyBJc29IaURpc0N0ciwgSXNvTG9EaXNDdHIgYW5kCioJCUlzb1NjaE1pc3NDdHIgdmFsdWVzIGZvciB0aGUgcG9ydCBpbmRpY2F0ZWQgYnkgSXNvTW9uUG9ydCB0aWxsIHRoaXMgYml0IGlzIAoqCQlzZXQgdG8gYSB6ZXJvLgoqCQlTZXQgR1RfRkFMU0U6IHRoaXMgYml0IGRpc2FibGVzIHRoZSBzdGF0aXN0aWNzIGdhdGhlcmluZyBjYXBhYmlsaXRpZXMuCioKKiBJTlBVVFM6CioJCWVuIC0gR1RfVFJVRSAvIEdUX0ZBTFNFLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZTZXRHbG9iYWxJc29Nb25FbgooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX0JPT0wJCWVuCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdxYXZHZXRHbG9iYWxJc29Nb25FbgoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXQgSXNvY2hyb25vdXMgbW9uaXRvciBlbmFibGUKKgkJU2V0IEdUX1RSVUU6IHRoaXMgYml0IGVuYWJsZXMgdGhlIHN0YXRpc3RpY3MgZ2F0aGVyaW5nIGNhcGFiaWxpdGllcyBzdGF0ZWQKKgkJaW4gUFRQIEdsb2JhbCBTdGF0dXMgUmVnaXN0ZXJzIE9mZnNldCAweEQsIDB4RSBhbmQgMHhGLiBPbmNlIGVuYWJsZWQsIHRoZQoqCQlzb2Z0d2FyZSBpcyBleHBlY3RlZCB0byBwcm9ncmFtIHRoZSBJc29Nb25Qb3J0IChQVFAgR2xvYmFsIFN0YXR1cyBPZmZzZXQKKgkJMHhEKSBpbmRpY2F0aW5nIHdoaWNoIHBvcnQgb2YgdGhlIGRldmljZSBkb2VzIHRoZSBzb2Z0d2FyZSB3YW50cyB0byBtb25pdG9yLgoqCQlVcG9uIHNldHRpbmcgdGhpcyBiaXQsIHRoZSBoYXJkd2FyZSBjb2xsZWN0cyBJc29IaURpc0N0ciwgSXNvTG9EaXNDdHIgYW5kCioJCUlzb1NjaE1pc3NDdHIgdmFsdWVzIGZvciB0aGUgcG9ydCBpbmRpY2F0ZWQgYnkgSXNvTW9uUG9ydCB0aWxsIHRoaXMgYml0IGlzIAoqCQlzZXQgdG8gYSB6ZXJvLgoqCQlTZXQgR1RfRkFMU0U6IHRoaXMgYml0IGRpc2FibGVzIHRoZSBzdGF0aXN0aWNzIGdhdGhlcmluZyBjYXBhYmlsaXRpZXMuCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQllbiAtIEdUX1RSVUUgLyBHVF9GQUxTRS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZHZXRHbG9iYWxJc29Nb25FbgooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJT1VUIEdUX0JPT0wJCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2U2V0R2xvYmFsSXNvTW9uUG9ydAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBzZXQgSXNvY2hyb25vdXMgbW9uaXRvcmluZyBwb3J0LgoqCQlUaGlzIGZpZWxkIGlzIHVwZGF0ZWQgYnkgc29mdHdhcmUgYWxvbmcgd2l0aCBJc28gTW9uIEVuIGJpdCAKKgkJKFFhdiBHbG9iYWwgU3RhdHVzLCBvZmZzZXQgMHhEKSBhbmQgaXQgaW5kaWNhdGVzIHRoZSBwb3J0IG51bWJlciB0aGF0IAoqCQl0aGUgc29mdHdhcmUgd2FudHMgdGhlIGhhcmR3YXJlIHRvIHN0YXJ0IG1vbml0b3JpbmcgaS5lLiwgc3RhcnQgdXBkYXRpbmcgCioJCUlzb0hpRGlzQ3RyLCBJc29Mb0Rpc0N0ciBhbmQgSXNvU2NoTWlzc0N0ci4gVGhlIHF1ZXVlIGNvbnRyb2xsZXIgY2xlYXJzIAoqCQl0aGUgYWJvdmUgc3RhdHMgd2hlbiBJc29Nb25Qb3J0IGlzIGNoYW5nZWQuLgoqCiogSU5QVVRTOgoqCQlwb3J0IC0gIHBvcnQgbnVtYmVyIC4KKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2U2V0R2xvYmFsSXNvTW9uUG9ydAooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1UxNgkJcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2R2V0R2xvYmFsSXNvTW9uUG9ydAoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSBnZXQgSXNvY2hyb25vdXMgbW9uaXRvcmluZyBwb3J0LgoqCQlUaGlzIGZpZWxkIGlzIHVwZGF0ZWQgYnkgc29mdHdhcmUgYWxvbmcgd2l0aCBJc28gTW9uIEVuIGJpdCAKKgkJKFFhdiBHbG9iYWwgU3RhdHVzLCBvZmZzZXQgMHhEKSBhbmQgaXQgaW5kaWNhdGVzIHRoZSBwb3J0IG51bWJlciB0aGF0IAoqCQl0aGUgc29mdHdhcmUgd2FudHMgdGhlIGhhcmR3YXJlIHRvIHN0YXJ0IG1vbml0b3JpbmcgaS5lLiwgc3RhcnQgdXBkYXRpbmcgCioJCUlzb0hpRGlzQ3RyLCBJc29Mb0Rpc0N0ciBhbmQgSXNvU2NoTWlzc0N0ci4gVGhlIHF1ZXVlIGNvbnRyb2xsZXIgY2xlYXJzIAoqCQl0aGUgYWJvdmUgc3RhdHMgd2hlbiBJc29Nb25Qb3J0IGlzIGNoYW5nZWQuLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJcG9ydCAtICBwb3J0IG51bWJlci4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZHZXRHbG9iYWxJc29Nb25Qb3J0CigKCUlOICBHVF9RRF9ERVYgCSpkZXYsCglPVVQgR1RfVTE2CQkqcG9ydAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2U2V0R2xvYmFsSXNvSGlEaXNDdHIKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0IElzb2Nocm9ub3VzIGhpIHF1ZXVlIGRpc2NhcmQgY291bnRlci4KKgkJVGhpcyBmaWVsZCBpcyB1cGRhdGVkIGJ5IGhhcmR3YXJlIHdoZW4gaW5zdHJ1Y3RlZCB0byBkbyBzbyBieSAKKgkJZW5hYmxpbmcgdGhlIElzb01vbkVuIGJpdCBpbiBRYXYgR2xvYmFsIFN0YXR1cyBSZWdpc3RlciBPZmZzZXQgMHhELiAKKgkJVGhpcyBpcyBhbiB1cGNvdW50ZXIgb2YgbnVtYmVyIG9mIGlzb2Nocm9ub3VzIGhpIHBhY2tldHMgZGlzY2FyZGVkIAoqCQlieSBRdWV1ZSBDb250cm9sbGVyLgoqCiogSU5QVVRTOgoqCQlkaXNDdHIgLSB1cGNvdW50ZXIgb2YgbnVtYmVyIG9mIGlzb2Nocm9ub3VzIGhpIHBhY2tldHMgZGlzY2FyZGVkIAoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZTZXRHbG9iYWxJc29IaURpc0N0cgooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1U4CQlkaXNDdHIKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdkdldEdsb2JhbElzb0hpRGlzQ3RyCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIGdldCBJc29jaHJvbm91cyBoaSBxdWV1ZSBkaXNjYXJkIGNvdW50ZXIuCioJCVRoaXMgZmllbGQgaXMgdXBkYXRlZCBieSBoYXJkd2FyZSB3aGVuIGluc3RydWN0ZWQgdG8gZG8gc28gYnkgCioJCWVuYWJsaW5nIHRoZSBJc29Nb25FbiBiaXQgaW4gUWF2IEdsb2JhbCBTdGF0dXMgUmVnaXN0ZXIgT2Zmc2V0IDB4RC4gCioJCVRoaXMgaXMgYW4gdXBjb3VudGVyIG9mIG51bWJlciBvZiBpc29jaHJvbm91cyBoaSBwYWNrZXRzIGRpc2NhcmRlZCAKKgkJYnkgUXVldWUgQ29udHJvbGxlci4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWRpc0N0ciAtIHVwY291bnRlciBvZiBudW1iZXIgb2YgaXNvY2hyb25vdXMgaGkgcGFja2V0cyBkaXNjYXJkZWQgCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2R2V0R2xvYmFsSXNvSGlEaXNDdHIKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9VOAkJKmRpc0N0cgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBncWF2U2V0R2xvYmFsSXNvTG9EaXNDdHIKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIHJvdXRpbmUgc2V0IElzb2Nocm9ub3VzIExvIHF1ZXVlIGRpc2NhcmQgY291bnRlci4KKgkJVGhpcyBmaWVsZCBpcyB1cGRhdGVkIGJ5IGhhcmR3YXJlIHdoZW4gaW5zdHJ1Y3RlZCB0byBkbyBzbyBieSAKKgkJZW5hYmxpbmcgdGhlIElzb01vbkVuIGJpdCBpbiBRYXYgR2xvYmFsIFN0YXR1cyBSZWdpc3RlciBPZmZzZXQgMHhELiAKKgkJVGhpcyBpcyBhbiB1cGNvdW50ZXIgb2YgbnVtYmVyIG9mIGlzb2Nocm9ub3VzIGxvIHBhY2tldHMgZGlzY2FyZGVkIAoqCQlieSBRdWV1ZSBDb250cm9sbGVyLgoqCiogSU5QVVRTOgoqCQlkaXNDdHIgLSB1cGNvdW50ZXIgb2YgbnVtYmVyIG9mIGlzb2Nocm9ub3VzIGxvIHBhY2tldHMgZGlzY2FyZGVkIAoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdxYXZTZXRHbG9iYWxJc29Mb0Rpc0N0cgooCglJTiAgR1RfUURfREVWIAkqZGV2LAoJSU4gIEdUX1U4CQlkaXNDdHIKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3FhdkdldEdsb2JhbElzb0xvRGlzQ3RyCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyByb3V0aW5lIHNldCBJc29jaHJvbm91cyBMbyBxdWV1ZSBkaXNjYXJkIGNvdW50ZXIuCioJCVRoaXMgZmllbGQgaXMgdXBkYXRlZCBieSBoYXJkd2FyZSB3aGVuIGluc3RydWN0ZWQgdG8gZG8gc28gYnkgCioJCWVuYWJsaW5nIHRoZSBJc29Nb25FbiBiaXQgaW4gUWF2IEdsb2JhbCBTdGF0dXMgUmVnaXN0ZXIgT2Zmc2V0IDB4RC4gCioJCVRoaXMgaXMgYW4gdXBjb3VudGVyIG9mIG51bWJlciBvZiBpc29jaHJvbm91cyBsbyBwYWNrZXRzIGRpc2NhcmRlZCAKKgkJYnkgUXVldWUgQ29udHJvbGxlci4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCWRpc0N0ciAtIHVwY291bnRlciBvZiBudW1iZXIgb2YgaXNvY2hyb25vdXMgbG8gcGFja2V0cyBkaXNjYXJkZWQgCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBncWF2R2V0R2xvYmFsSXNvTG9EaXNDdHIKKAoJSU4gIEdUX1FEX0RFViAJKmRldiwKCU9VVCBHVF9VOAkJKmRpc0N0cgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0VXNlSXBNYXBwaW5nVGFibGUKKgoqIERFU0NSSVBUSU9OOgoqCQlUaGlzIEFQSSBzZXQgdG8gdXNlIElQIEZyYW1lIFByaW9yaXRpZXMgZnJvbSB0aGlzIHRhYmxlLiAKKgkJU2V0IEdUX1RSVUU6ICBUaGUgSVBfRlBSSSBkYXRhIGluIHRoaXMgdGFibGUgaXMgdXNlZCBhcyB0aGUgZnJhbWWScyAKKgkJCWluaXRpYWwgSVBfRlBSSSB1c2UgSXAgTWFwcGluZ2cgdGFibGUgcHJpb3JpdGllcy4KKgkJU2V0IEdUX0ZBTFNFOiBUaGUgSVBfRlBSSSBkYXRhIGluIHRoaXMgdGFibGUgaXMgaWdub3JlZC4gSW5zdGVhZCB0aGUgCioJCQlmcmFtZZJzIGluaXRpYWwgSVBfRlBSSSBpcyBnZW5lcmF0ZWQgYnkgdXNpbmcgdGhlIGZyYW1lknMgSVBfUVBSSQoqCQkJYXMgdGhlIElQX0ZQUkmScyB1cHBlciB0d28gYml0cywgYW5kIHRoZSBJUF9GUFJJknMgbG93ZXN0IGJpdCBjb21lcyAKKgkJCWZyb20gYml0IDAgb2YgdGhlIGZyYW1lknMgc291cmNlIHBvcnSScyBEZWZhdWx0IFBSSSAoUG9ydCBvZmZzZXQgMHgwNykuCioKKiBJTlBVVFM6CioJCWVuCS0gW0dUX1RSVUVdIC8gW0dUX0ZBTFNFXQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRVc2VJcE1hcHBpbmdUYWJsZQooCiAgICBJTiAgR1RfUURfREVWIAkJKmRldiwKICAgIElOICBHVF9CT09MCQkJZW4KKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFVzZUlwTWFwcGluZ1RhYmxlCioKKiBERVNDUklQVElPTjoKKgkJVGhpcyBBUEkgZ2V0IHRvIHVzZSBJUCBGcmFtZSBQcmlvcml0aWVzIGZyb20gdGhpcyB0YWJsZS4gCioJCVNldCBHVF9UUlVFOiAgVGhlIElQX0ZQUkkgZGF0YSBpbiB0aGlzIHRhYmxlIGlzIHVzZWQgYXMgdGhlIGZyYW1lknMgCioJCQlpbml0aWFsIElQX0ZQUkkgdXNlIElwIE1hcHBpbmdnIHRhYmxlIHByaW9yaXRpZXMuCioJCVNldCBHVF9GQUxTRTogVGhlIElQX0ZQUkkgZGF0YSBpbiB0aGlzIHRhYmxlIGlzIGlnbm9yZWQuIEluc3RlYWQgdGhlIAoqCQkJZnJhbWWScyBpbml0aWFsIElQX0ZQUkkgaXMgZ2VuZXJhdGVkIGJ5IHVzaW5nIHRoZSBmcmFtZZJzIElQX1FQUkkKKgkJCWFzIHRoZSBJUF9GUFJJknMgdXBwZXIgdHdvIGJpdHMsIGFuZCB0aGUgSVBfRlBSSZJzIGxvd2VzdCBiaXQgY29tZXMgCioJCQlmcm9tIGJpdCAwIG9mIHRoZSBmcmFtZZJzIHNvdXJjZSBwb3J0knMgRGVmYXVsdCBQUkkgKFBvcnQgb2Zmc2V0IDB4MDcpLgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZW4JLSBbR1RfVFJVRV0gLyBbR1RfRkFMU0VdCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0VXNlSXBNYXBwaW5nVGFibGUKKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBJTiAgR1RfQk9PTAkJCSplbgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0SXBNYXBwaW5nUHJpbwoqCiogREVTQ1JJUFRJT046CioJCVNldCBJUHY0IGFuZCBJUHY2IEZyYW1lIFByaW9yaXR5IE1hcHBpbmcsIGFuZCAKKgkJSVB2NCBhbmQgSVB2NiBRdWV1ZSBQcmlvcml0eSBNYXBwaW5nLgoqICAgICAgIFRoZSBpcEZwcmkgdmFsdWUgaXMgdXNlZCBhcyB0aGUgZnJhbWVzIGluaXRpYWwgRlBSSSB3aGVuIHRoZSBmcmFtZSBpcyAKKgkJYW4gSVB2NCBvciBhbiBJUHY2IGZyYW1lLCBhbmQgdGhlIHBvcnSScyBJbml0aWFsUHJpIChQb3J0IG9mZnNldCAweDA0KSAKKgkJaXMgY29uZmlndXJlZCB0byB1c2UgSVAgRlByaZJzLgoqICAgICAgIFRoZSBpcFFwcmkgdmFsdWUgaXMgdXNlZCBhcyB0aGUgZnJhbWWScyBpbml0aWFsIFFQUkkgd2hlbiB0aGUgZnJhbWUgaXMgCioJCWFuIElQdjQgb3IgYW4gSVB2NiBmcmFtZSwgYW5kIHRoZSBwb3J0knMgSW5pdGlhbFByaSBhbmQgVGFnSWZCb3RoIAoqCQlyZWdpc3RlcnMgKFBvcnQgb2Zmc2V0IDB4MDQpIGFyZSBjb25maWd1cmVkIHRvIHVzZSBJUCBRUHJpknMuCioKKiBJTlBVVFM6CioJCXBvaW50IC0gUG9pbnRlciB0byB0aGUgSXAgTWFwcGluZyBUYWJsZS4KKgkJCQkwIC0gMHgzZjsKKgkJaXBGcHJpIC0gIFRoZSB2YWx1ZSBpcyAwIC0gNwoqCQlpcFFwcmkgLSAgVGhlIHZhbHVlIGlzIDAgLSAzLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRJcE1hcHBpbmdQcmlvCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgSU4gIEdUX1UzMgkJCXBvaW50LAogICAgSU4gIEdUX1U4CQkJaXBGcHJpLAogICAgSU4gIEdUX1U4CQkJaXBRcHJpCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRJcE1hcHBpbmdQcmlvCioKKiBERVNDUklQVElPTjoKKgkJR2V0IElQdjQgYW5kIElQdjYgRnJhbWUgUHJpb3JpdHkgTWFwcGluZywgYW5kIAoqCQlJUHY0IGFuZCBJUHY2IFF1ZXVlIFByaW9yaXR5IE1hcHBpbmcuCiogICAgICAgVGhlIGlwRnByaSB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBmcmFtZXMgaW5pdGlhbCBGUFJJIHdoZW4gdGhlIGZyYW1lIGlzIAoqCQlhbiBJUHY0IG9yIGFuIElQdjYgZnJhbWUsIGFuZCB0aGUgcG9ydJJzIEluaXRpYWxQcmkgKFBvcnQgb2Zmc2V0IDB4MDQpIAoqCQlpcyBjb25maWd1cmVkIHRvIHVzZSBJUCBGUHJpknMuCioJCVRoZSBpcFFwcmkgdmFsdWUgaXMgdXNlZCBhcyB0aGUgZnJhbWWScyBpbml0aWFsIFFQUkkgd2hlbiB0aGUgZnJhbWUgaXMgCioJCWFuIElQdjQgb3IgYW4gSVB2NiBmcmFtZSwgYW5kIHRoZSBwb3J0knMgSW5pdGlhbFByaSBhbmQgVGFnSWZCb3RoIAoqCQlyZWdpc3RlcnMgKFBvcnQgb2Zmc2V0IDB4MDQpIGFyZSBjb25maWd1cmVkIHRvIHVzZSBJUCBRUHJpknMuCioKKiBJTlBVVFM6CioJCXBvaW50IC0gUG9pbnRlciB0byB0aGUgSXAgTWFwcGluZyBUYWJsZS4KKgkJCQkwIC0gMHgzZjsKKgoqIE9VVFBVVFM6CioJCWlwRnByaSAtICBUaGUgdmFsdWUgaXMgMCAtIDcKKgkJaXBRcHJpIC0gIFRoZSB2YWx1ZSBpcyAwIC0gMy4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lLgoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0SXBNYXBwaW5nUHJpbwooCiAgICBJTiAgR1RfUURfREVWIAkJKmRldiwKICAgIElOICBHVF9VMzIJCQlwb2ludCwKICAgIE9VVCAgR1RfVTgJCQkqaXBGcHJpLAogICAgT1VUICBHVF9VOAkJCSppcFFwcmkKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c1JlYWRFZXByb20KKgoqIERFU0NSSVBUSU9OOgoqCQlSZWFkIEVFUFJPTSBmcm9tIEVFUFJPTZJzIGFkZHJlc3Mgd2hlcmUgdGhlIEVFT3AgaXMgcGVyZm9ybWVkLgoqCiogSU5QVVRTOgoqCQlhZGRyIC0gRUVQUk9NIEFkZHJlc3MuIAoqCiogT1VUUFVUUzoKKgkJZGF0YSAtICBEYXRhIHRoYXQgd2FzIHJlYWQgYmFjayBmcm9tIHRoZSBFRVBST00uCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzUmVhZEVlcHJvbQooCiAgICBJTiAgR1RfUURfREVWIAkJKmRldiwKICAgIElOICBHVF9VMzIJCQlhZGRyLAogICAgT1VUICBHVF9VOAkJCSpkYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNXcml0ZUVlcHJvbQoqCiogREVTQ1JJUFRJT046CioJCVdyaXRlIEVFUFJPTSBhdCB0aGUgRUVQUk9NknMgYWRkcmVzcyB3aGVyZSB0aGUgRUVPcCBpcyBwZXJmb3JtZWQuCioKKiBJTlBVVFM6CioJCWFkZHIgLSBFRVBST00gQWRkcmVzcy4gCioJCWRhdGEgLSBEYXRhIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIEVFUFJPTQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNXcml0ZUVlcHJvbQooCiAgICBJTiAgR1RfUURfREVWIAkJKmRldiwKICAgIElOICBHVF9VMzIJCQlhZGRyLAogICAgSU4gIEdUX1U4CQkJZGF0YQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzUmVzdGFydEVlcHJvbQoqCiogREVTQ1JJUFRJT046CioJCVJlc3RhcnQgUmVnaXN0ZXIgTG9hZGVyIGV4ZWN1dGlvbiBhdCB0aGUgRUVQUk9NknMgYWRkcmVzcyB3aGVyZSB0aGUgRUVPcCAKKgkJaXMgcGVyZm9ybWVkCioKKiBJTlBVVFM6CioJCWFkZHIgLSBFRVBST00gQWRkcmVzcy4gLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNSZXN0YXJ0RWVwcm9tCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgSU4gIEdUX1UzMgkJCWFkZHIKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0hhbHRFZXByb20KKgoqIERFU0NSSVBUSU9OOgoqCQlIYWx0IChzdG9wIGV4ZWN1dGluZyB0aGUgRUVQUk9NIGlmIGl0cyBub3QgYWxyZWFkeSBzdG9wcGVkKQoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNIYWx0RWVwcm9tCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRTdEVlcHJvbQoqCiogREVTQ1JJUFRJT046CioJCUdldCBFRVBST00gc3RhdHVzLiBUaGV5IGFyZSBSZWdpc3RlciBMb2FkZXIgUnVubmluZyBzdGF0dXMgYW5kIEVFUFJPTSAKKgkJV3JpdGUgRW5hYmxlIHN0YXR1cwoqCQlydW5TdCBpcyBHVF9UUlVFOiBSZWdpc3RlciBMb2FkZXIgUnVubmluZywgd2hlbmV2ZXIgdGhlIHJlZ2lzdGVyIGxvYWRlciAKKgkJCWlzIGJ1c3kgZXhlY3V0aW5nIHRoZSBpbnN0cnVjdGlvbnMgY29udGFpbmVkIGluIHRoZSBFRVBST00uCioJCXdyaXRlRW4gaXMgR1RfVFJVRTogRUVQUk9NIFdyaXRlIEVuYWJsZSwgdGhhdCBpbmRpY2F0ZXMgdGhhdCB3cml0aW5nIHRvIAoqCQkJdGhlIEVFUFJPTSBpcyBwb3NzaWJsZS4gCioJCXdyaXRlRW4gaXMgR1RfRkFMU0U6IHRoZSBXcml0ZSBFRVBST00gRUVPcCBhYm92ZSB3aWxsIG5vdCBkbyBhbnl0aGluZy4KKgkJCVRoaXMgcmVmbGVjdHMgdGhlIHZhbHVlIG9mIHRoZSBFRV9XRSBjb25maWd1cmF0aW9uIHBpbiBhZnRlciBSZXNldC4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCXJ1blN0ICAgLSAgIFtHVF9UUlVFXSAvIFtHVF9GQUxTRSkKKgkJd3JpdGVFbiAtICAgW0dUX1RSVUVdIC8gW0dUX0ZBTFNFKQoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFN0RWVwcm9tCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAoJT1VUIEdUX0JPT0wJCQkqd3JpdGVFbiwKCU9VVCBHVF9CT09MCQkJKnJ1blN0Cik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRTY3JhdGNoTWlzY0N0cmwKKgoqIERFU0NSSVBUSU9OOgoqCQlTZXQgU2NyYXRjaCBhbmQgTWlzYyBjb250cm9sIGRhdGEgdG8gdGhlIFNjcmF0Y2ggYW5kIE1pc2MgQ29udHJvbCByZWdpc3Rlci4gCioJCVRoZSByZWdpc3RlciBvZiBTY3JhdGNoIGFuZCBNaXNjIGNvbnRyb2wgYXJlLgoqCQkJCVNjcmF0Y2ggQnl0ZSAwCioJCQkJU2NyYXRjaCBCeXRlIDEKKgkJCQlHUElPIENvbmZpZ3VyYXRpb24KKgkJCQlSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQoqCQkJCUdQSU8gRGlyZWN0aW9uCioJCQkJR1BJTyBEYXRhCioJCQkJQ09ORklHIERhdGEgMAoqCQkJCUNPTkZJRyBEYXRhIDEKKgkJCQlDT05GSUcgRGF0YSAyCioJCQkJQ09ORklHIERhdGEgMwoqCQkJCVN5bmNFICYgVEFJQ0xLMTI1knMgRHJpdmUKKgkJCQlQNZJzICYgQ0xLMTI1knMgQ2xvY2sgRHJpdmUKKgkJCQlQNpJzIENsb2NrIERyaXZlCioJCQkJRUVQUk9NIFBhZCBkcml2ZQoqCiogSU5QVVRTOgoqCQlwb2ludCAtIFBvaW50ZXIgdG8gdGhlIFNjcmF0Y2ggYW5kIE1pc2MuIENvbnRyb2wgcmVnaXN0ZXIuCioJCWRhdGEgIC0gU2NyYXRjaCBhbmQgTWlzYy4gQ29udHJvbCBkYXRhIHdyaXR0ZW4gdG8gdGhlIHJlZ2lzdGVyIAoqCQkJCXBvaW50ZWQgdG8gYnkgdGhlIHBvaW50IGFib3ZlLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRTY3JhdGNoTWlzY0N0cmwKKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBJTiAgR1RfVTMyCQkJcG9pbnQsCiAgICBJTiAgR1RfVTgJCQlkYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRTY3JhdGNoTWlzY0N0cmwKKgoqIERFU0NSSVBUSU9OOgoqCQlHZXQgU2NyYXRjaCBhbmQgTWlzYyBjb250cm9sIGRhdGEgZnJvbSB0aGUgU2NyYXRjaCBhbmQgTWlzYyBDb250cm9sIHJlZ2lzdGVyLiAKKgkJVGhlIHJlZ2lzdGVyIG9mIFNjcmF0Y2ggYW5kIE1pc2MgY29udHJvbCBhcmUuCioJCQkJU2NyYXRjaCBCeXRlIDAKKgkJCQlTY3JhdGNoIEJ5dGUgMQoqCQkJCUdQSU8gQ29uZmlndXJhdGlvbgoqCQkJCVJlc2VydmVkIGZvciBmdXR1cmUgdXNlCioJCQkJR1BJTyBEaXJlY3Rpb24KKgkJCQlHUElPIERhdGEKKgkJCQlDT05GSUcgRGF0YSAwCioJCQkJQ09ORklHIERhdGEgMQoqCQkJCUNPTkZJRyBEYXRhIDIKKgkJCQlDT05GSUcgRGF0YSAzCioJCQkJU3luY0UgJiBUQUlDTEsxMjWScyBEcml2ZQoqCQkJCVA1knMgJiBDTEsxMjWScyBDbG9jayBEcml2ZQoqCQkJCVA2knMgQ2xvY2sgRHJpdmUKKgkJCQlFRVBST00gUGFkIGRyaXZlCgoqCiogSU5QVVRTOgoqCQlwb2ludCAtIFBvaW50ZXIgdG8gdGhlIFNjcmF0Y2ggYW5kIE1pc2MuIENvbnRyb2wgcmVnaXN0ZXIuCioKKiBPVVRQVVRTOgoqCQlkYXRhIC0gU2NyYXRjaCBhbmQgTWlzYy4gQ29udHJvbCBkYXRhIHJlYWQgZnJvbSB0aGUgcmVnaXN0ZXIgCioJCQkJcG9pbnRlZCB0byBieSB0aGUgcG9pbnQgYWJvdmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0U2NyYXRjaE1pc2NDdHJsCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgSU4gIEdUX1UzMgkJCXBvaW50LAogICAgT1VUICBHVF9VOAkJCSpkYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRTY3JhdGNoQml0cwoqCiogREVTQ1JJUFRJT046CioJCVNldCBiaXRzIHRvIHRoZSBTY3JhdGNoIGFuZCBNaXNjIENvbnRyb2wgcmVnaXN0ZXIgPHNjcmF0Y2ggYnl0ZSAwIGFuZCAxPi4KKgkJVGhlc2UgYml0cyBhcmUgMTAwJSBhdmFpbGFibGUgdG8gc29mdHdhcmUgZm9yIHdoYXRldmVyIHB1cnBvc2UgZGVzaXJlZC4gCioJCVRoZXNlIGJpdHMgZG8gbm90IGNvbm5lY3QgdG8gYW55IGhhcmR3YXJlIGZ1bmN0aW9uLgoqCiogSU5QVVRTOgoqCQlzY3JpdGNoIC0gd3JpdHRlbiBiaXRzLgoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRTY3JhdGNoQml0cwooCiAgICBJTiAgR1RfUURfREVWIAkJKmRldiwKICAgIElOICBHVF9VMTYJCQlzY3JhdGNoCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRTY3JhdGNoQml0cwoqCiogREVTQ1JJUFRJT046CioJCUdldCBiaXRzIGZyb20gdGhlIFNjcmF0Y2ggYW5kIE1pc2MgQ29udHJvbCByZWdpc3RlciA8c2NyYXRjaCBieXRlIDAgYW5kIDE+LgoqCQlUaGVzZSBiaXRzIGFyZSAxMDAlIGF2YWlsYWJsZSB0byBzb2Z0d2FyZSBmb3Igd2hhdGV2ZXIgcHVycG9zZSBkZXNpcmVkLiAKKgkJVGhlc2UgYml0cyBkbyBub3QgY29ubmVjdCB0byBhbnkgaGFyZHdhcmUgZnVuY3Rpb24uCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlzY3JpdGNoIC0gcmVhZCBiaXRzLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFNjcmF0Y2hCaXRzCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgT1VUICBHVF9VMTYJCQkqc2NyYXRjaAopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0R3Bpb0NvbmZpZ01vZAoqCiogREVTQ1JJUFRJT046CioJCVNldCBiaXRzIHRvIHRoZSBTY3JhdGNoIGFuZCBNaXNjIENvbnRyb2wgcmVnaXN0ZXIgPEdQSU8gQ29uZmlndXJhdGlvbj4KKgkJdG8gY29uZmlndXJlIEdQSU8gbW9kZS4KKgkJVGhlIGJpdHMgYXJlIHNoYXJlZCBHZW5lcmFsIFB1cnBvc2UgSW5wdXQgT3V0cHV0IG1vZGUgQml0czoKKgkJQml0IDYgLSBHVF9HUElPX0JJVF82OgkxOkdQSU9bNl0JMDpTRV9SQ0xLMQoqCQlCaXQgNSAtIEdUX0dQSU9fQklUXzU6CTE6R1BJT1s1XQkwOlNFX1JDTEswCioJCU5vdywgZm9sbG9pbmcgYml0cyBhcmUgcmVhZCBvbmx5LiAKKgkJQml0IDQgLSBHVF9HUElPX0JJVF80OgkxOkdQSU9bNF0JMDoKKgkJQml0IDMgLSBHVF9HUElPX0JJVF8zOgkxOkdQSU9bM10JMDoKKgkJQml0IDIgLSBHVF9HUElPX0JJVF8yOgkxOkdQSU9bMl0JMDoKKgkJQml0IDEgLSBHVF9HUElPX0JJVF8xOgkxOkdQSU9bMV0JMDpQNl9DT0wKKgkJQml0IDAgLSBHVF9HUElPX0JJVF8wOgkxOkdQSU9bMF0JMDpQNl9DUlMKKgoqIElOUFVUUzoKKgkJbW9kZSAtIE9SIFtHVF9HUElPX0JJVF94XQoqCiogT1VUUFVUUzoKKgkJTm9uZS4KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNTZXRHcGlvQ29uZmlnTW9kCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgSU4gIEdUX1UzMgkJCW1vZGUKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEdwaW9Db25maWdNb2QKKgoqIERFU0NSSVBUSU9OOgoqCQlHZXQgbW9kZSBmcm9tIHRoZSBTY3JhdGNoIGFuZCBNaXNjIENvbnRyb2wgcmVnaXN0ZXIgPEdQSU8gQ29uZmlndXJhdGlvbj4uCioJCVRoZSBiaXRzIGFyZSBzaGFyZWQgR2VuZXJhbCBQdXJwb3NlIElucHV0IE91dHB1dCBtb2RlIEJpdHM6CioJCUJpdCA2IC0gR1RfR1BJT19CSVRfNjoJMTpHUElPWzZdCTA6U0VfUkNMSzEKKgkJQml0IDUgLSBHVF9HUElPX0JJVF81OgkxOkdQSU9bNV0JMDpTRV9SQ0xLMAoqCQlOb3csIGZvbGxvaW5nIGJpdHMgYXJlIHJlYWQgb25seS4gCioJCUJpdCA0IC0gR1RfR1BJT19CSVRfNDoJMTpHUElPWzRdCTA6CioJCUJpdCAzIC0gR1RfR1BJT19CSVRfMzoJMTpHUElPWzNdCTA6CioJCUJpdCAyIC0gR1RfR1BJT19CSVRfMjoJMTpHUElPWzJdCTA6CioJCUJpdCAxIC0gR1RfR1BJT19CSVRfMToJMTpHUElPWzFdCTA6UDZfQ09MCioJCUJpdCAwIC0gR1RfR1BJT19CSVRfMDoJMTpHUElPWzBdCTA6UDZfQ1JTCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQltb2RlIC0gT1IgW0dUX0dQSU9fQklUX3hdCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0R3Bpb0NvbmZpZ01vZAooCiAgICBJTiAgR1RfUURfREVWIAkJKmRldiwKICAgIElOICBHVF9VMzIJCQkqbW9kZQopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0R3Bpb0RpcmVjdGlvbgoqCiogREVTQ1JJUFRJT046CioJCVNldCBHcGlvIGRpcmVjdGlvbiB0byB0aGUgU2NyYXRjaCBhbmQgTWlzYyBDb250cm9sIHJlZ2lzdGVyIDxHUElPIERpcmVjdGlvbj4uCioJCVRoZSBiaXRzIGFyZSB1c2VkIHRvIGNvbnRyb2wgdGhlIGRpcmVjdGlvbiBvZiBHUElPWzY6MF0uIAoqCQlXaGVuIGEgR1BJT5JzIGJpdCBpcyBzZXQgdG8gYSBvbmUgdGhhdCBHUElPIHdpbGwgYmVjb21lIGFuIGlucHV0LiBXaGVuIGEKKgkJR1BJT5JzIGJpdCBpcyBjbGVhcmVkIHRvIGEgemVybyB0aGF0IEdQSU8gd2lsbCBiZWNvbWUgYW4gb3V0cHV0CioJCUdlbmVyYWwgUHVycG9zZSBJbnB1dCBPdXRwdXQgZGlyZWN0aW9uIGJpdHMgYXJlOgoqCQlCaXQgNiAtIEdUX0dQSU9fQklUXzYKKgkJQml0IDUgLSBHVF9HUElPX0JJVF81CioJCUJpdCA0IC0gR1RfR1BJT19CSVRfNAoqCQlCaXQgMyAtIEdUX0dQSU9fQklUXzMKKgkJQml0IDIgLSBHVF9HUElPX0JJVF8yCioJCUJpdCAxIC0gR1RfR1BJT19CSVRfMQoqCQlCaXQgMCAtIEdUX0dQSU9fQklUXzAKKgoqIElOUFVUUzoKKgkJZGlyIC0gT1IgW0dUX0dQSU9fQklUX3hdCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEdwaW9EaXJlY3Rpb24KKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBJTiAgR1RfVTMyCQkJZGlyCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRHcGlvRGlyZWN0aW9uCioKKiBERVNDUklQVElPTjoKKgkJZ2V0IEdwaW8gZGlyZWN0aW9uIGZyb20gdGhlIFNjcmF0Y2ggYW5kIE1pc2MgQ29udHJvbCByZWdpc3RlciA8R1BJTyBEaXJlY3Rpb24+LgoqCQlUaGUgYml0cyBhcmUgdXNlZCB0byBjb250cm9sIHRoZSBkaXJlY3Rpb24gb2YgR1BJT1s2OjBdLiAKKgkJV2hlbiBhIEdQSU+ScyBiaXQgaXMgc2V0IHRvIGEgb25lIHRoYXQgR1BJTyB3aWxsIGJlY29tZSBhbiBpbnB1dC4gV2hlbiBhCioJCUdQSU+ScyBiaXQgaXMgY2xlYXJlZCB0byBhIHplcm8gdGhhdCBHUElPIHdpbGwgYmVjb21lIGFuIG91dHB1dAoqCQlHZW5lcmFsIFB1cnBvc2UgSW5wdXQgT3V0cHV0IGRpcmVjdGlvbiBiaXRzIGFyZToKKgkJQml0IDYgLSBHVF9HUElPX0JJVF82CioJCUJpdCA1IC0gR1RfR1BJT19CSVRfNQoqCQlCaXQgNCAtIEdUX0dQSU9fQklUXzQKKgkJQml0IDMgLSBHVF9HUElPX0JJVF8zCioJCUJpdCAyIC0gR1RfR1BJT19CSVRfMgoqCQlCaXQgMSAtIEdUX0dQSU9fQklUXzEKKgkJQml0IDAgLSBHVF9HUElPX0JJVF8wCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlkaXIgLSBPUiBbR1RfR1BJT19CSVRfeF0KKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRHcGlvRGlyZWN0aW9uCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgT1VUICBHVF9VMzIJCQkqZGlyCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRHcGlvRGF0YQoqCiogREVTQ1JJUFRJT046CioJCVNldCBHcGlvIGRhdGEgdG8gdGhlIFNjcmF0Y2ggYW5kIE1pc2MgQ29udHJvbCByZWdpc3RlciA8R1BJTyBkYXRhPi4KKgkJV2hlbiBhIEdQSU+ScyBiaXQgaXMgc2V0IHRvIGJlIGFuIGlucHV0LCBkYXRhIHdyaXR0ZW4gdG8gdGhpcyBiaXQgd2lsbCBnbyAKKgkJdG8gYSBob2xkaW5nIHJlZ2lzdGVyIGJ1dCB3aWxsIG5vdCBhcHBlYXIgb24gdGhlIHBpbiBub3IgaW4gdGhpcyByZWdpc3Rlci4gCioJCVJlYWRzIG9mIHRoaXMgcmVnaXN0ZXIgd2lsbCByZXR1cm4gdGhlIGFjdHVhbCwgcmVhbC10aW1lLCBkYXRhIHRoYXQgaXMgCioJCWFwcGVhcmluZyBvbiB0aGUgR1BJT5JzIHBpbi4KKgkJV2hlbiBhIEdQSU+ScyBiaXQgaXMgc2V0IHRvIGJlIGFuIG91dHB1dCwgZGF0YSB3cml0dGVuIHRvIHRoaXMgYml0IHdpbGwgZ28gCioJCXRvIGEgaG9sZGluZyByZWdpc3RlciBhbmQgd2lsbCBhcHBlYXIgb24gdGhlIEdQSU+ScyBwaW4uIFJlYWRzIG9mIHRoaXMgcmVnaXN0ZXIgCioJCXdpbGwgcmV0dXJuIHRoZSBhY3R1YWwsIHJlYWwtdGltZSwgZGF0YSB0aGF0IGlzIGFwcGVhcmluZyBvbiB0aGUgR1BJT5JzIHBpbiAKKgkJKHdoaWNoIGluIHRoaXMgY2FzZSBzaG91bGQgYmUgdGhlIGRhdGEgd3JpdHRlbiwgYnV0IGlmIGl0cyBpc26SdCB0aGF0IHdvdWxkIAoqCQliZSBhbiBpbmRpY2F0aW9uIG9mIGEgY29uZmxpY3QpLgoqCQlXaGVuIGEgcGluknMgZGlyZWN0aW9uIGNoYW5nZXMgZnJvbSBpbnB1dCB0byBvdXRwdXQsIHRoZSBkYXRhIGxhc3Qgd3JpdHRlbiAKKgkJdG8gdGhlIGhvbGRpbmcgcmVnaXN0ZXIgYXBwZWFycyBvbiB0aGUgR1BJT5JzIHBpbgoqCQlHZW5lcmFsIFB1cnBvc2UgSW5wdXQgT3V0cHV0IGRhdGEgYml0cyBhcmU6CioJCUJpdCA2IC0gR1RfR1BJT19CSVRfNgoqCQlCaXQgNSAtIEdUX0dQSU9fQklUXzUKKgkJQml0IDQgLSBHVF9HUElPX0JJVF80CioJCUJpdCAzIC0gR1RfR1BJT19CSVRfMwoqCQlCaXQgMiAtIEdUX0dQSU9fQklUXzIKKgkJQml0IDEgLSBHVF9HUElPX0JJVF8xCioJCUJpdCAwIC0gR1RfR1BJT19CSVRfMAoqCiogSU5QVVRTOgoqCQlkYXRhIC0gT1IgW0dUX0dQSU9fQklUX3hdCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEdwaW9EYXRhCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgSU4gIEdUX1UzMgkJCWRhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldEdwaW9EYXRhCioKKiBERVNDUklQVElPTjoKKgkJZ2V0IEdwaW8gZGF0YSB0byB0aGUgU2NyYXRjaCBhbmQgTWlzYyBDb250cm9sIHJlZ2lzdGVyIDxHUElPIGRhdGE+LgoqCQlXaGVuIGEgR1BJT5JzIGJpdCBpcyBzZXQgdG8gYmUgYW4gaW5wdXQsIGRhdGEgd3JpdHRlbiB0byB0aGlzIGJpdCB3aWxsIGdvIAoqCQl0byBhIGhvbGRpbmcgcmVnaXN0ZXIgYnV0IHdpbGwgbm90IGFwcGVhciBvbiB0aGUgcGluIG5vciBpbiB0aGlzIHJlZ2lzdGVyLiAKKgkJUmVhZHMgb2YgdGhpcyByZWdpc3RlciB3aWxsIHJldHVybiB0aGUgYWN0dWFsLCByZWFsLXRpbWUsIGRhdGEgdGhhdCBpcyAKKgkJYXBwZWFyaW5nIG9uIHRoZSBHUElPknMgcGluLgoqCQlXaGVuIGEgR1BJT5JzIGJpdCBpcyBzZXQgdG8gYmUgYW4gb3V0cHV0LCBkYXRhIHdyaXR0ZW4gdG8gdGhpcyBiaXQgd2lsbCBnbyAKKgkJdG8gYSBob2xkaW5nIHJlZ2lzdGVyIGFuZCB3aWxsIGFwcGVhciBvbiB0aGUgR1BJT5JzIHBpbi4gUmVhZHMgb2YgdGhpcyByZWdpc3RlciAKKgkJd2lsbCByZXR1cm4gdGhlIGFjdHVhbCwgcmVhbC10aW1lLCBkYXRhIHRoYXQgaXMgYXBwZWFyaW5nIG9uIHRoZSBHUElPknMgcGluIAoqCQkod2hpY2ggaW4gdGhpcyBjYXNlIHNob3VsZCBiZSB0aGUgZGF0YSB3cml0dGVuLCBidXQgaWYgaXRzIGlzbpJ0IHRoYXQgd291bGQgCioJCWJlIGFuIGluZGljYXRpb24gb2YgYSBjb25mbGljdCkuCioJCVdoZW4gYSBwaW6ScyBkaXJlY3Rpb24gY2hhbmdlcyBmcm9tIGlucHV0IHRvIG91dHB1dCwgdGhlIGRhdGEgbGFzdCB3cml0dGVuIAoqCQl0byB0aGUgaG9sZGluZyByZWdpc3RlciBhcHBlYXJzIG9uIHRoZSBHUElPknMgcGluCioJCUdlbmVyYWwgUHVycG9zZSBJbnB1dCBPdXRwdXQgZGF0YSBiaXRzIGFyZToKKgkJQml0IDYgLSBHVF9HUElPX0JJVF82CioJCUJpdCA1IC0gR1RfR1BJT19CSVRfNQoqCQlCaXQgNCAtIEdUX0dQSU9fQklUXzQKKgkJQml0IDMgLSBHVF9HUElPX0JJVF8zCioJCUJpdCAyIC0gR1RfR1BJT19CSVRfMgoqCQlCaXQgMSAtIEdUX0dQSU9fQklUXzEKKgkJQml0IDAgLSBHVF9HUElPX0JJVF8wCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQlkYXRhIC0gT1IgW0dUX0dQSU9fQklUX3hdCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0R3Bpb0RhdGEKKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBJTiAgR1RfVTMyCQkJKmRhdGEKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldENvbmZpZ0RhdGEKKgoqIERFU0NSSVBUSU9OOgoqCQlHZXQgUmVzZXQgQ29uZmlndXJhdGlvbiBQaW4gRGF0YSAwLTMuIAoqCQlUaGVzZSByZWdpc3RlcnMgcmV0dXJuIHRoZSB2YWx1ZXMgb2JzZXJ2ZWQgYWZ0ZXIgYSBoYXJkd2FyZSBSZXNldCBvbiB0aGUgCioJCWxpc3RlZCBDT05GSUcgZGF0YSBsaXN0ZWQgYmVsb3cuCioJCQlDb25maWcgZGF0YSAwOgoqCQkJICBCaXQJQ29uZmlnCVBpbidzIFByaW1hcnkgTmFtZQoqCQkJCTAJVVNFUlswXQkJUDZfT1VURFs1XQoqCQkJCTEJVVNFUlsxXQkJUDZfT1VURFs2XQoqCQkJCTIJVVNFUlsyXQkJUDZfT1VURFs3XQoqCQkJCTMJQUREUlswXQkJUDVfT1VURFswXQoqCQkJCTQJQUREUlsxXQkJUDVfT1VURFs1XQoqCQkJCTUJQUREUlsyXQkJUDVfT1VURFs2XQoqCQkJCTYJQUREUl0zXQkJUDVfT1VURFs3XQoqCQkJCTcJQUREUls0XQkJUDVfT1VURFsxXQoqCQkJQ29uZmlnIGRhdGEgMToKKgkJCQkwCUxFRF9TRUxbMF0JUDFfTEVECioJCQkJMQlMRURfU0VMWzFdCVAyX0xFRAoqCQkJCTIJNENPTCBQM19MRUQKKgkJCQkzCU5vcm1DeAkJUDRfTEVECioJCQkJNAlKdW1ibwkJUDBfTEVECioJCQkJNQlFRV9XRQkJRUVfQ1MvQzJfTEVECioJCQkJNglGRF9GTE9XCQlFRV9DTEsvQzFfTEVECioJCQkJNwlIRF9GTE9XCQlFRV9ESU4vQzBfTEVECioJCQlDb25maWcgZGF0YSAyOgoqCQkJCTAJUDVfTU9ERVswXQlQNV9PVVREWzJdCioJCQkJMQlQNV9NT0RFWzFdCVA1X09VVERbM10KKgkJCQkyCVA1X01PREVbMl0JUDVfT1VURFs0XQoqCQkJCTMJUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKKgkJCQk0CVA2X01PREVbMF0JUDZfT1VURFsyXQoqCQkJCTUJUDZfTU9ERVsxXQlQNl9PVVREWzNdCioJCQkJNglQNl9NT0RFWzJdCVA2X09VVERbNF0KKgkJCQk3CVJlc2VydmVkIGZvciBmdXR1cmUgdXNlCioJCQlDb25maWcgZGF0YSAzOgoqCQkJCTAJUk1VX01PREVbMF0gUDZfT1VURFswXQoqCQkJCTEJUk1VX01PREVbMV0gUDZfT1VURFsxXQoqCQkJCTIJU19WRERPU1swXQlQVFBfVFJJRyAKKgkJCQkzCUNMSzEyNUVOCUNMSzEyNQoqCQkJCTQJUDVfVkRET1NbMF0gUDVfR1RYQ0xLCioJCQkJNQlQNV9WRERPU1sxXSBQNV9PVVRFTgoqCQkJCTYJUDZfVkRET1NbMF0gUDVfR1RYQ0xLCioJCQkJNwlQNl9WRERPU1sxXSBQNl9PVVRFTgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CiogICAgICAgY2ZnRGF0IC0gR1RfQ09ORklHX0RUVEEKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRDb25maWdEYXRhCigKICAgIElOICBHVF9RRF9ERVYgCQkJKmRldiwKICAgIE9VVCAgR1RfQ09ORklHX0RBVEEJCSpjZmdEYXRhCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRTeW5jRVRhaQoqCiogREVTQ1JJUFRJT046CioJCVNldCBTeW5jRSBhbmQgVGFpIHRvIHRoZSBTY3JhdGNoIGFuZCBNaXNjLiBDb250cm9sIHJlZ2lzdGVyIDxTeW5jRSBhbmQgVEFJIHBhZD4uCioKKiBJTlBVVFM6CioJCXpwciAtIFpQUiBmb3IgU3luY0UgYW5kIFRBSQoqCQl6bnIgLSBaTlIgZm9yIFN5bmNFIGFuZCBUQUkKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0U3luY0VUYWkKKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBJTiAgR1RfVTgJCQl6cHIsCiAgICBJTiAgR1RfVTgJCQl6bnIKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFN5bmNFVGFpCioKKiBERVNDUklQVElPTjoKKgkJR2V0IFN5bmNFIGFuZCBUYWkgZnJvbSB0aGUgU2NyYXRjaCBhbmQgTWlzYyBDb250cm9sIHJlZ2lzdGVyIDxTeW5jRSBhbmQgVEFJIHBhZD4uCioKKiBJTlBVVFM6CioJCU5vbmUuCioKKiBPVVRQVVRTOgoqCQl6cHIgLSBaUFIgZm9yIFN5bmNFIGFuZCBUQUkKKgkJem5yIC0gWk5SIGZvciBTeW5jRSBhbmQgVEFJKgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFN5bmNFVGFpCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgT1VUICBHVF9VOAkJCSp6cHIsCiAgICBPVVQgIEdUX1U4CQkJKnpucgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UDZfQ2xvY2sKKgoqIERFU0NSSVBUSU9OOgoqCQlTZXQgUDZfY2xvY2sgdG8gdGhlIFNjcmF0Y2ggYW5kIE1pc2MgQ29udHJvbCByZWdpc3RlciA8UDZfQ2xvY2sgcGFkPi4KKgoqIElOUFVUUzoKKgkJenByIC0gWlBSIGZvciBQNl9DbG9jawoqCQl6bnIgLSBaTlIgZm9yIFA2X0Nsb2NrCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldFA2X0Nsb2NrCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgSU4gIEdUX1U4CQkJenByLAogICAgSU4gIEdUX1U4CQkJem5yCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNHZXRQNl9DbG9jawoqCiogREVTQ1JJUFRJT046CiogICAgICAgR2V0IFA2X2Nsb2NrIGZyb20gdGhlIFNjcmF0Y2ggYW5kIE1pc2MgQ29udHJvbCByZWdpc3RlciA8UDZfQ2xvY2sgcGFkPi4KKgoqIElOUFVUUzoKKgkJTm9uZS4KKgoqIE9VVFBVVFM6CioJCXpwciAtIFpQUiBmb3IgUDZfQ2xvY2sKKgkJem5yIC0gWk5SIGZvciBQNl9DbG9jawoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c0dldFA2X0Nsb2NrCigKICAgIElOICBHVF9RRF9ERVYgCQkqZGV2LAogICAgT1VUICBHVF9VOAkJCSp6cHIsCiAgICBPVVQgIEdUX1U4CQkJKnpucgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzU2V0UDVfQ2xvY2sKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFNldCBQNV9jbG9jayB0byB0aGUgU2NyYXRjaCBhbmQgTWlzYyBDb250cm9sIHJlZ2lzdGVyIDxQNV9DbG9jayBwYWQ+LgoqCiogSU5QVVRTOgoqCQl6cHIgLSBaUFIgZm9yIFA1X0Nsb2NrCioJCXpuciAtIFpOUiBmb3IgUDVfQ2xvY2sKKgoqIE9VVFBVVFM6CioJCU5vbmUuCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzU2V0UDVfQ2xvY2sKKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBJTiAgR1RfVTgJCQl6cHIsCiAgICBJTiAgR1RfVTgJCQl6bnIKKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogZ3N5c0dldFA1X0Nsb2NrCioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXQgUDVfY2xvY2sgZnJvbSB0aGUgU2NyYXRjaCBhbmQgTWlzYyBDb250cm9sIHJlZ2lzdGVyIDxQNV9DbG9jayBwYWQ+LgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJenByIC0gWlBSIGZvciBQNV9DbG9jawoqCQl6bnIgLSBaTlIgZm9yIFA1X0Nsb2NrCioKKiBSRVRVUk5TOgoqCQlHVF9PSyAgICAgIC0gb24gc3VjY2VzcwoqCQlHVF9GQUlMICAgIC0gb24gZXJyb3IKKgkJR1RfQkFEX1BBUkFNIC0gaWYgaW5wdXQgcGFyYW1ldGVycyBhcmUgYmV5b25kIHJhbmdlLgoqCQlHVF9OT1RfU1VQUE9SVEVEIC0gaWYgY3VycmVudCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGZlYXR1cmUuCioKKiBDT01NRU5UUzoKKgkJTm9uZQoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkdUX1NUQVRVUyBnc3lzR2V0UDVfQ2xvY2sKKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBPVVQgIEdUX1U4CQkJKnpwciwKICAgIE9VVCAgR1RfVTgJCQkqem5yCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGdzeXNTZXRFRVBST00KKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFNldCBFRVBST00gY3ljbGUgdG8gdGhlIFNjcmF0Y2ggYW5kIE1pc2MgQ29udHJvbCByZWdpc3RlciA8RUVQUk9NIHBhZD4uCioKKiBJTlBVVFM6CioJCWRzbSAtIERTTSBmb3IgRUVQUk9NIGN5Y2xlCioJCXpwciAtIFpQUiBmb3IgRUVQUk9NIGN5Y2xlCioJCXpuciAtIFpOUiBmb3IgRUVQUk9NIGN5Y2xlCioKKiBPVVRQVVRTOgoqCQlOb25lLgoqCiogUkVUVVJOUzoKKgkJR1RfT0sgICAgICAtIG9uIHN1Y2Nlc3MKKgkJR1RfRkFJTCAgICAtIG9uIGVycm9yCioJCUdUX0JBRF9QQVJBTSAtIGlmIGlucHV0IHBhcmFtZXRlcnMgYXJlIGJleW9uZCByYW5nZS4KKgkJR1RfTk9UX1NVUFBPUlRFRCAtIGlmIGN1cnJlbnQgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgoqCiogQ09NTUVOVFM6CioJCU5vbmUKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3N5c1NldEVFUFJPTQooCiAgICBJTiAgR1RfUURfREVWIAkJKmRldiwKICAgIElOICBHVF9VOAkJCWRzbSwKICAgIElOICBHVF9VOAkJCXpwciwKICAgIElOICBHVF9VOAkJCXpucgopOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBnc3lzR2V0RUVQUk9NCioKKiBERVNDUklQVElPTjoKKiAgICAgICBHZXQgRUVQUk9NIGN5Y2xlIHRvIHRoZSBTY3JhdGNoIGFuZCBNaXNjIENvbnRyb2wgcmVnaXN0ZXIgPEVFUFJPTSBwYWQ+LgoqCiogSU5QVVRTOgoqCQlOb25lLgoqCiogT1VUUFVUUzoKKgkJZHNtIC0gRFNNIGZvciBFRVBST00gY3ljbGUKKgkJenByIC0gWlBSIGZvciBFRVBST00gY3ljbGUKKgkJem5yIC0gWk5SIGZvciBFRVBST00gY3ljbGUKKgoqIFJFVFVSTlM6CioJCUdUX09LICAgICAgLSBvbiBzdWNjZXNzCioJCUdUX0ZBSUwgICAgLSBvbiBlcnJvcgoqCQlHVF9CQURfUEFSQU0gLSBpZiBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBiZXlvbmQgcmFuZ2UuCioJCUdUX05PVF9TVVBQT1JURUQgLSBpZiBjdXJyZW50IGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZmVhdHVyZS4KKgoqIENPTU1FTlRTOgoqCQlOb25lCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGdzeXNHZXRFRVBST00KKAogICAgSU4gIEdUX1FEX0RFViAJCSpkZXYsCiAgICBPVVQgIEdUX1U4CQkJKmRzbSwKICAgIE9VVCAgR1RfVTgJCQkqenByLAogICAgT1VUICBHVF9VOAkJCSp6bnIKKTsKCgovKiBndEFkdlZjdC5jICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2Y3RHZXRBZHZDYWJsZURpYWcKKgoqIERFU0NSSVBUSU9OOgoqICAgICAgIFRoaXMgcm91dGluZSBwZXJmb3JtIHRoZSBhZHZhbmNlZCB2aXJ0dWFsIGNhYmxlIHRlc3QgZm9yIHRoZSByZXF1ZXN0ZWQKKiAgICAgICBwb3J0IGFuZCByZXR1cm5zIHRoZSB0aGUgc3RhdHVzIHBlciBNREkgcGFpci4KKgoqIElOUFVUUzoKKiAgICAgICBwb3J0IC0gbG9naWNhbCBwb3J0IG51bWJlci4KKiAgICAgICBtb2RlIC0gYWR2YW5jZSBWQ1QgbW9kZSAoZWl0aGVyIEZpcnN0IFBlYWsgb3IgTWF4aW11bSBQZWFrKQoqCiogT1VUUFVUUzoKKiAgICAgICBjYWJsZVN0YXR1cyAtIHRoZSBwb3J0IGNvcHBlciBjYWJsZSBzdGF0dXMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKiAgICAgICBJbnRlcm5hbCBHaWdhYml0IFBoeXMgaW4gODhFNjE2NSBmYW1pbHkgYW5kIDg4RTYzNTEgZmFtaWx5IGRldmljZXMKKgkJYXJlIHN1cHBvcnRpbmcgdGhpcyBBUEkuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KR1RfU1RBVFVTIGd2Y3RHZXRBZHZDYWJsZURpYWcKKAogICAgSU4gIEdUX1FEX0RFViAqZGV2LAogICAgSU4gIEdUX0xQT1JUICAgICAgICBwb3J0LAogICAgSU4gIEdUX0FEVl9WQ1RfTU9ERSBtb2RlLAogICAgT1VUIEdUX0FEVl9DQUJMRV9TVEFUVVMgKmNhYmxlU3RhdHVzCik7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIGd2Y3RHZXRBZHZFeHRlbmRlZFN0YXR1cwoqCiogREVTQ1JJUFRJT046CioJCVRoaXMgcm91dGluZSByZXRyaWV2ZXMgZXh0ZW5kZWQgY2FibGUgc3RhdHVzLCBzdWNoIGFzIFBhaXIgUG9sb2FyaXR5LAoqCQlQYWlyIFN3YXAsIGFuZCBQYWlyIFNrZXcuIE5vdGUgdGhhdCB0aGlzIHJvdXRpbmUgd2lsbCBiZSBzdWNjZXNzIG9ubHkKKgkJaWYgMTAwMEJhc2UtVCBMaW5rIGlzIHVwLgoqCQlEU1AgYmFzZWQgY2FibGUgbGVuZ3RoIGlzIGFsc28gcHJvdmlkZWQuCioKKiBJTlBVVFM6CiogICAgICAgZGV2ICAtIHBvaW50ZXIgdG8gR1QgZHJpdmVyIHN0cnVjdHVyZSByZXR1cm5lZCBmcm9tIG1kTG9hZERyaXZlcgoqICAgICAgIHBvcnQgLSBsb2dpY2FsIHBvcnQgbnVtYmVyLgoqCiogT1VUUFVUUzoKKiAgICAgICBleHRlbmRlZFN0YXR1cyAtIHRoZSBleHRlbmRlZCBjYWJsZSBzdGF0dXMuCioKKiBSRVRVUk5TOgoqICAgICAgIEdUX09LICAgLSBvbiBzdWNjZXNzCiogICAgICAgR1RfRkFJTCAtIG9uIGVycm9yCioKKiBDT01NRU5UUzoKKgkJU3VwcG9ydGluZyBEZXZpY2UgbGlzdDoKKiAgICAgICAJODhFMTExMSwgODhFMTExMiwgODhFMTE0MX42LCA4OEUxMTQ5LCBhbmQgSW50ZXJuYWwgR2lnYWJpdCBQaHlzIAoqCQkJaW4gODhFNjE2NSBmYW1pbHkgYW5kIDg4RTYzNTEgZmFtaWx5IGRldmljZXMKKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpHVF9TVEFUVVMgZ3ZjdEdldEFkdkV4dGVuZGVkU3RhdHVzCigKICAgIElOICBHVF9RRF9ERVYgICAgICpkZXYsCiAgICBJTiAgR1RfTFBPUlQgICBwb3J0LAogICAgT1VUIEdUX0FEVl9FWFRFTkRFRF9TVEFUVVMgKmV4dGVuZGVkU3RhdHVzCik7CgojaWZkZWYgX19jcGx1c3BsdXMKfQojZW5kaWYKCiNlbmRpZiAvKiBfX21zQXBpX2ggKi8K