From c33034a9eb35284d2e5d008ca44b14929c1c5356 Mon Sep 17 00:00:00 2001 From: jessikitty Date: Thu, 11 Dec 2025 17:37:13 +1100 Subject: [PATCH] Update openwrt-adguard-setup.md --- openwrt-adguard-setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openwrt-adguard-setup.md b/openwrt-adguard-setup.md index 791ed49..ceb2479 100644 --- a/openwrt-adguard-setup.md +++ b/openwrt-adguard-setup.md @@ -1 +1 @@ -IyBPcGVuV1JUIEdhdGV3YXkgJiBBZEd1YXJkIEhvbWUgLSBDb21wbGV0ZSBDb25maWd1cmF0aW9uIEd1aWRlCgojIyBOZXR3b3JrIE92ZXJ2aWV3CgoqKk5ldyBOZXR3b3JrIFRvcG9sb2d5OioqCmBgYApDYWJsZSBNb2RlbSDihpIgT3BlbldSVCAoTWFpbiBHYXRld2F5KSDihpIgVFAtTGluayBBcmNoZXIgQzcyIFBybyAoQVAgTW9kZSkg4oaSIERldmljZXMKICAgICAgICAgICAgICAgICAgICDihpMKICAgICAgICAgICAgICBBZEd1YXJkIEhvbWUgKDEwLjAuMC4yNDUpIC0gRE5TIEZpbHRlcmluZwpgYGAKCioqSVAgQ29uZmlndXJhdGlvbjoqKgotIE9wZW5XUlQgV0FOOiBESENQIGZyb20gQ2FibGUgTW9kZW0gKFB1YmxpYyBJUCkKLSBPcGVuV1JUIExBTjogKioxMC4wLjAuMjQ2KiogKE1haW4gR2F0ZXdheSkKLSBBZEd1YXJkIEhvbWU6ICoqMTAuMC4wLjI0NSoqIChETlMgU2VydmVyKQotIFRQLUxpbmsgQXJjaGVyIEM3MiBQcm86ICoqMTAuMC4wLjI1NCoqIChBUCBNb2RlLCBubyByb3V0aW5nKQotIERIQ1AgUmFuZ2U6ICoqMTAuMC4wLjEgLSAxMC4wLjAuMjAwKioKLSBTdWJuZXQ6ICoqMTAuMC4wLjAvMjQqKgoKKipSb2xlczoqKgotICoqT3BlbldSVCoqOiBNYWluIHJvdXRlciwgZ2F0ZXdheSwgZmlyZXdhbGwsIE5BVCwgREhDUCBzZXJ2ZXIsIGFjY2VzcyBjb250cm9sCi0gKipBZEd1YXJkKio6IEROUyBmaWx0ZXJpbmcsIGFkIGJsb2NraW5nLCBwaGlzaGluZyBwcm90ZWN0aW9uLCBwYXJlbnRhbCBjb250cm9scwotICoqVFAtTGluayoqOiBXaUZpIGFjY2VzcyBwb2ludCArIEV0aGVybmV0IHN3aXRjaCBvbmx5IChubyByb3V0aW5nL0RIQ1ApCgotLS0KCiMjIFBhcnQgMTogT3BlbldSVCBJbml0aWFsIFNldHVwIGFzIE1haW4gR2F0ZXdheQoKIyMjIDEuMSBQaHlzaWNhbCBDb25uZWN0aW9uIFNldHVwCgoqKkNvbm5lY3Rpb24gT3JkZXI6KioKMS4gKipETyBOT1QgY29ubmVjdCBjYWJsZSBtb2RlbSB5ZXQqKgoyLiBDb25uZWN0IGNvbXB1dGVyIHRvIE9wZW5XUlQgTEFOIHBvcnQgdmlhIEV0aGVybmV0CjMuIFBvd2VyIG9uIE9wZW5XUlQKNC4gQ29uZmlndXJlIE9wZW5XUlQgY29tcGxldGVseSBmaXJzdAo1LiBUaGVuIGNvbm5lY3QgdG8gY2FibGUgbW9kZW0KCiMjIyAxLjIgRmlyc3QgTG9naW4gYW5kIEJhc2ljIENvbmZpZ3VyYXRpb24KCjEuICoqQ29ubmVjdCB0byBPcGVuV1JUOioqCiAgIC0gQ29ubmVjdCB2aWEgRXRoZXJuZXQgdG8gYW55IExBTiBwb3J0CiAgIC0gRGVmYXVsdCBJUDogYDE5Mi4xNjguMS4xYAogICAtIEFjY2VzcyB2aWEgYnJvd3NlcjogYGh0dHA6Ly8xOTIuMTY4LjEuMWAKICAgLSBEZWZhdWx0IGxvZ2luOiBgcm9vdGAgKG5vIHBhc3N3b3JkIGluaXRpYWxseSkKCjIuICoqU2V0IFJvb3QgUGFzc3dvcmQ6KioKICAgYGBgCiAgIFN5c3RlbSDihpIgQWRtaW5pc3RyYXRpb24g4oaSIFJvdXRlciBQYXNzd29yZAogICBgYGAKICAgU2V0IGEgc3Ryb25nIHBhc3N3b3JkIGltbWVkaWF0ZWx5IChlLmcuLCAxNisgY2hhcmFjdGVycyB3aXRoIG51bWJlcnMvc3ltYm9scykuCgozLiAqKlNldCBUaW1lem9uZToqKgogICBgYGAKICAgU3lzdGVtIOKGkiBTeXN0ZW0g4oaSIEdlbmVyYWwgU2V0dGluZ3MKICAgVGltZXpvbmU6IEF1c3RyYWxpYS9NZWxib3VybmUKICAgYGBgCgojIyMgMS4zIENvbmZpZ3VyZSBXQU4gSW50ZXJmYWNlIChJbnRlcm5ldCBDb25uZWN0aW9uKQoKKipUaGlzIGNvbm5lY3RzIE9wZW5XUlQgdG8geW91ciBjYWJsZSBtb2RlbS4qKgoKMS4gKipOYXZpZ2F0ZSB0byBOZXR3b3JrIOKGkiBJbnRlcmZhY2VzKioKCjIuICoqRWRpdCBXQU4gaW50ZXJmYWNlOioqCiAgIC0gUHJvdG9jb2w6IGBESENQIGNsaWVudGAgKG1vc3QgY2FibGUgbW9kZW1zIHVzZSBESENQKQogICAtIExlYXZlIGV2ZXJ5dGhpbmcgZGVmYXVsdCBpbml0aWFsbHkKICAgLSBBZHZhbmNlZCBTZXR0aW5nczoKICAgICAtIOKckyBVc2UgRE5TIHNlcnZlcnMgYWR2ZXJ0aXNlZCBieSBwZWVyICh3ZSdsbCBjaGFuZ2UgdGhpcyBsYXRlcikKICAgLSBGaXJld2FsbCBTZXR0aW5nczoKICAgICAtIENyZWF0ZS9Bc3NpZ24gdG8gZmlyZXdhbGwgem9uZTogYHdhbmAKICAgLSBDbGljayAiU2F2ZSIKCjMuICoqSWYgeW91ciBJU1AgcmVxdWlyZXMgc3BlY2lmaWMgc2V0dGluZ3M6KioKICAgLSBTb21lIElTUHMgcmVxdWlyZToKICAgICAtIE1BQyBhZGRyZXNzIGNsb25pbmcgKHVzZSB5b3VyIG9sZCByb3V0ZXIncyBNQUMpCiAgICAgLSBWTEFOIHRhZ2dpbmcKICAgICAtIFBQUG9FICh1c2VybmFtZS9wYXNzd29yZCkKICAgLSBDaGVjayB3aXRoIHlvdXIgSVNQIGlmIGNvbm5lY3Rpb24gZmFpbHMKCiMjIyAxLjQgQ29uZmlndXJlIExBTiBJbnRlcmZhY2UKCjEuICoqTmF2aWdhdGUgdG8gTmV0d29yayDihpIgSW50ZXJmYWNlcyoqCgoyLiAqKkVkaXQgTEFOIGludGVyZmFjZToqKgogICAtIFByb3RvY29sOiBgU3RhdGljIGFkZHJlc3NgCiAgIC0gSVB2NCBhZGRyZXNzOiBgMTAuMC4wLjI0NmAKICAgLSBJUHY0IG5ldG1hc2s6IGAyNTUuMjU1LjI1NS4wYCAob3IgLzI0KQogICAtIElQdjQgZ2F0ZXdheTogKGxlYXZlIGVtcHR5IC0gdGhpcyBJUyB0aGUgZ2F0ZXdheSkKICAgLSBVc2UgY3VzdG9tIEROUyBzZXJ2ZXJzOiBgMTAuMC4wLjI0NWAKICAgLSBDbGljayAiU2F2ZSAmIEFwcGx5IgoKMy4gKipXYWl0IDMwIHNlY29uZHMqKiwgdGhlbiByZWNvbm5lY3QgdG86IGBodHRwOi8vMTAuMC4wLjI0NmAKCiMjIyAxLjUgQ29uZmlndXJlIEZpcmV3YWxsICYgTkFUCgoxLiAqKk5ldHdvcmsg4oaSIEZpcmV3YWxsIOKGkiBHZW5lcmFsIFNldHRpbmdzKioKCjIuICoqWm9uZTogV0FOKioKICAgLSBJbnB1dDogYHJlamVjdGAKICAgLSBPdXRwdXQ6IGBhY2NlcHRgCiAgIC0gRm9yd2FyZDogYHJlamVjdGAKICAgLSDinJMgTWFzcXVlcmFkaW5nIChOQVQpIC0gKipDUklUSUNBTCoqCiAgIC0g4pyTIE1TUyBjbGFtcGluZwogICAtIENvdmVyZWQgbmV0d29ya3M6IGB3YW5gIGB3YW42YAoKMy4gKipab25lOiBMQU4qKgogICAtIElucHV0OiBgYWNjZXB0YAogICAtIE91dHB1dDogYGFjY2VwdGAKICAgLSBGb3J3YXJkOiBgYWNjZXB0YAogICAtIE1hc3F1ZXJhZGluZzogdW5jaGVja2VkCiAgIC0gQ292ZXJlZCBuZXR3b3JrczogYGxhbmAKCjQuICoqRm9yd2FyZGluZyBSdWxlczoqKgogICAtIEFkZDogTEFOIOKGkiBXQU4gKEFsbG93KSAtIHNob3VsZCBleGlzdCBieSBkZWZhdWx0CiAgIC0gVmVyaWZ5IHRoaXMgcnVsZSBleGlzdHMKCjUuICoqQWR2YW5jZWQgU2V0dGluZ3M6KioKICAgYGBgCiAgIEVuYWJsZSBTWU4tZmxvb2QgcHJvdGVjdGlvbjog4pyTCiAgIERyb3AgaW52YWxpZCBwYWNrZXRzOiDinJMKICAgYGBgCgo2LiAqKlNhdmUgJiBBcHBseSoqCgojIyMgMS42IFRlc3QgSW50ZXJuZXQgQ29ubmVjdGlvbgoKKipOb3cgY29ubmVjdCB0aGUgY2FibGUgbW9kZW06KioKCjEuICoqQ29ubmVjdCBjYWJsZSBtb2RlbSB0byBPcGVuV1JUIFdBTiBwb3J0KioKMi4gKipXYWl0IDYwIHNlY29uZHMqKiBmb3IgbW9kZW0gdG8gYXNzaWduIElQCjMuICoqQ2hlY2sgY29ubmVjdGlvbjoqKgogICBgYGAKICAgTmV0d29yayDihpIgSW50ZXJmYWNlcyDihpIgV0FOCiAgIGBgYAogICAtIFNob3VsZCBzaG93IHB1YmxpYyBJUCBhZGRyZXNzCiAgIC0gU2hvdWxkIHNob3cgIkNvbm5lY3RlZCIgc3RhdHVzCgo0LiAqKlRlc3QgZnJvbSBPcGVuV1JUOioqCiAgIC0gR28gdG8gTmV0d29yayDihpIgRGlhZ25vc3RpY3MKICAgLSBQaW5nIHRlc3Q6IGA4LjguOC44YCAoc2hvdWxkIHdvcmspCiAgIC0gUGluZyB0ZXN0OiBgZ29vZ2xlLmNvbWAgKHNob3VsZCB3b3JrKQoKNS4gKipJZiBjb25uZWN0aW9uIGZhaWxzOioqCiAgIC0gQ2hlY2sgY2FibGUgbW9kZW0gaXMgb25saW5lIChsaWdodHMgc3RhYmxlKQogICAtIFRyeSByZWJvb3RpbmcgY2FibGUgbW9kZW0gKHVucGx1ZyAzMCBzZWNvbmRzKQogICAtIENoZWNrIFdBTiBpbnRlcmZhY2Ugc2V0dGluZ3MKICAgLSBTb21lIElTUHMgcmVxdWlyZSBNQUMgY2xvbmluZyAoc2VlIFNlY3Rpb24gMS45KQoKIyMjIDEuNyBVcGRhdGUgT3BlbldSVAoKKipCZWZvcmUgY29udGludWluZywgdXBkYXRlIHBhY2thZ2VzOioqCgpTU0ggaW50byBPcGVuV1JUOgpgYGBiYXNoCnNzaCByb290QDEwLjAuMC4yNDYKYGBgCgpVcGRhdGUgcGFja2FnZSBsaXN0czoKYGBgYmFzaApvcGtnIHVwZGF0ZQpvcGtnIGxpc3QtdXBncmFkYWJsZQpvcGtnIHVwZ3JhZGUgW3BhY2thZ2UtbmFtZV0KYGBgCgpPciB1cGRhdGUgYWxsIChiZSBjYXJlZnVsLCB0ZXN0IGZpcnN0KToKYGBgYmFzaApvcGtnIGxpc3QtdXBncmFkYWJsZSB8IGN1dCAtZCAnICcgLWYgMSB8IHhhcmdzIG9wa2cgdXBncmFkZQpgYGAKCiMjIyAxLjggSW5zdGFsbCBFc3NlbnRpYWwgUGFja2FnZXMKCmBgYGJhc2gKIyBGaXJld2FsbCBhbmQgbmV0d29yayB0b29scwpvcGtnIGluc3RhbGwgbHVjaS1hcHAtZmlyZXdhbGwKb3BrZyBpbnN0YWxsIGlwdGFibGVzLW1vZC1leHRyYQpvcGtnIGluc3RhbGwgaXBzZXQKCiMgTW9uaXRvcmluZyB0b29scwpvcGtnIGluc3RhbGwgbHVjaS1hcHAtbmxid21vbiAgICAjIEJhbmR3aWR0aCBtb25pdG9yaW5nCm9wa2cgaW5zdGFsbCBsdWNpLWFwcC1zdGF0aXN0aWNzICAjIFN5c3RlbSBzdGF0cwoKIyBIVFRQUyBmb3Igd2ViIGludGVyZmFjZSAocmVjb21tZW5kZWQpCm9wa2cgaW5zdGFsbCBsdWNpLXNzbC1vcGVuc3NsCgojIEFkZGl0aW9uYWwgdXNlZnVsIHRvb2xzCm9wa2cgaW5zdGFsbCB0Y3BkdW1wICAgICAgICAgICAgICAjIE5ldHdvcmsgZGVidWdnaW5nCm9wa2cgaW5zdGFsbCBpcGVyZjMgICAgICAgICAgICAgICMgU3BlZWQgdGVzdGluZwpgYGAKCiMjIyAxLjkgTUFDIEFkZHJlc3MgQ2xvbmluZyAoSWYgUmVxdWlyZWQpCgpTb21lIElTUHMgYmluZCB0byB5b3VyIHByZXZpb3VzIHJvdXRlcidzIE1BQyBhZGRyZXNzLgoKMS4gKipGaW5kIHlvdXIgb2xkIHJvdXRlcidzIFdBTiBNQUMgYWRkcmVzcyoqCiAgIC0gVXN1YWxseSBvbiBhIHN0aWNrZXIgb24gdGhlIFRQLUxpbmsKICAgLSBPciBmcm9tIFRQLUxpbmsgYWRtaW4gaW50ZXJmYWNlCgoyLiAqKkNsb25lIE1BQyBpbiBPcGVuV1JUOioqCiAgIGBgYAogICBOZXR3b3JrIOKGkiBJbnRlcmZhY2VzIOKGkiBXQU4g4oaSIEVkaXQKICAgQWR2YW5jZWQgU2V0dGluZ3M6CiAgIC0gT3ZlcnJpZGUgTUFDIGFkZHJlc3M6IFtlbnRlciBvbGQgcm91dGVyJ3MgTUFDXQogICBTYXZlICYgQXBwbHkKICAgYGBgCgozLiAqKlJlYm9vdCBjYWJsZSBtb2RlbSBhbmQgT3BlbldSVCoqCgotLS0KCiMjIFBhcnQgMjogREhDUCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgoKIyMjIDIuMSBCYXNpYyBESENQIFNldHRpbmdzCgoxLiAqKk5hdmlnYXRlIHRvIE5ldHdvcmsg4oaSIERIQ1AgYW5kIEROUyoqCgoyLiAqKkdlbmVyYWwgU2V0dGluZ3MgdGFiOioqCiAgIC0g4pyTIEF1dGhvcml0YXRpdmUgKE9wZW5XUlQgaXMgbm93IHRoZSBvbmx5IERIQ1Agc2VydmVyKQogICAtIEROUyBmb3J3YXJkaW5nczogYDEwLjAuMC4yNDVgCiAgIC0gRE5TIHNlcnZlciBwb3J0OiBgNTNgCiAgIC0gTG9jYWwgc2VydmVyOiBgL2xhbi9gCiAgIC0gTG9jYWwgZG9tYWluOiBgbGFuYCAob3IgeW91ciBwcmVmZXJlbmNlIGxpa2UgYGhvbWUubG9jYWxgKQogICAtIENsaWNrICJTYXZlIgoKMy4gKipBZHZhbmNlZCBTZXR0aW5nczoqKgogICAtIFJlYmluZCBwcm90ZWN0aW9uOiDinJMKICAgLSBEb21haW4gd2hpdGVsaXN0OiAobGVhdmUgZW1wdHkgdW5sZXNzIG5lZWRlZCkKICAgLSBTdHJpY3Qgb3JkZXI6IOKckyAodXNlcyBETlMgc2VydmVycyBpbiBvcmRlcikKCiMjIyAyLjIgREhDUCBQb29sIENvbmZpZ3VyYXRpb24KCjEuICoqTmV0d29yayDihpIgSW50ZXJmYWNlcyDihpIgTEFOIOKGkiBFZGl0IOKGkiBESENQIFNlcnZlciB0YWIqKgoKMi4gKipHZW5lcmFsIFNldHVwOioqCiAgIC0g4pyTIElnbm9yZSBpbnRlcmZhY2U6IFVuY2hlY2sgKGVuYWJsZSBESENQKQogICAtIFN0YXJ0OiBgMWAKICAgLSBMaW1pdDogYDIwMGAKICAgLSBMZWFzZSB0aW1lOiBgMTJoYCAob3IgYDI0aGAgZm9yIHN0YWJpbGl0eSkKCjMuICoqQWR2YW5jZWQgU2V0dGluZ3M6KioKICAgLSBEeW5hbWljIERIQ1A6IOKckwogICAtIEZvcmNlOiDinJMgKHByZXZlbnRzIGRldmljZXMgZnJvbSB1c2luZyBzdGF0aWMgSVBzIGluIERIQ1AgcmFuZ2UpCgo0LiAqKkRIQ1AgT3B0aW9uczoqKgogICAtIEFkZCBvcHRpb24gYDMsMTAuMC4wLjI0NmAgKEdhdGV3YXkgLSBzaG91bGQgYmUgZGVmYXVsdCkKICAgLSBBZGQgb3B0aW9uIGA2LDEwLjAuMC4yNDVgIChETlMgU2VydmVyKQogICAtIEFkZCBvcHRpb24gYDQyLDEwLjAuMC4yNDVgIChOVFAgU2VydmVyIC0gb3B0aW9uYWwpCgojIyMgMi4zIFN0YXRpYyBMZWFzZXMgQ29uZmlndXJhdGlvbgoKMS4gKipOYXZpZ2F0ZSB0byBOZXR3b3JrIOKGkiBESENQIGFuZCBETlMg4oaSIFN0YXRpYyBMZWFzZXMqKgoKMi4gKipBZGQgQ3JpdGljYWwgU3RhdGljIExlYXNlczoqKgoKKipBZEd1YXJkIEhvbWU6KioKYGBgCkhvc3RuYW1lOiBhZGd1YXJkCk1BQyBBZGRyZXNzOiBbQWRHdWFyZCBzZXJ2ZXIgTUFDXQpJUHY0IGFkZHJlc3M6IDEwLjAuMC4yNDUKTGVhc2UgdGltZTogaW5maW5pdGUKYGBgCgoqKlRQLUxpbmsgQXJjaGVyIEM3MiBQcm86KioKYGBgCkhvc3RuYW1lOiB0cGxpbmstYXAKTUFDIEFkZHJlc3M6IFtUUC1MaW5rIFdBTi9MQU4gTUFDXQpJUHY0IGFkZHJlc3M6IDEwLjAuMC4yNTQKTGVhc2UgdGltZTogaW5maW5pdGUKYGBgCgoqKkhvbWVBc3Npc3RhbnQgKGlmIGFwcGxpY2FibGUpOioqCmBgYApIb3N0bmFtZTogaG9tZWFzc2lzdGFudApNQUMgQWRkcmVzczogW0hBIE1BQ10KSVB2NCBhZGRyZXNzOiAxMC4wLjAuNTUKTGVhc2UgdGltZTogaW5maW5pdGUKYGBgCgoqKk90aGVyIHNlcnZlcnMvZGV2aWNlczoqKgpgYGAKTkFTOiAxMC4wLjAuNjAKUHJpbnRlcjogMTAuMC4wLjcwCkRlc2t0b3A6IDEwLjAuMC4xMDEKTGFwdG9wOiAxMC4wLjAuMTAyCmBgYAoKIyMjIDIuNCBQZXItRGV2aWNlIEROUyBDb25maWd1cmF0aW9uIChGb3IgUGFyZW50YWwgQ29udHJvbHMpCgoqKk1ldGhvZDogVmlhIENvbmZpZyBGaWxlKioKClNTSCBpbnRvIE9wZW5XUlQgYW5kIGVkaXQgYC9ldGMvY29uZmlnL2RoY3BgOgoKYGBgYmFzaAp2aSAvZXRjL2NvbmZpZy9kaGNwCmBgYAoKQWRkIGhvc3QgY29uZmlndXJhdGlvbnM6CgpgYGBiYXNoCiMgU3RhbmRhcmQgYWR1bHQgZGV2aWNlIC0gdXNlcyBBZEd1YXJkIHdpdGggZnVsbCBmaWx0ZXJpbmcKY29uZmlnIGhvc3QKICAgIG9wdGlvbiBuYW1lICdsYXB0b3AnCiAgICBvcHRpb24gbWFjICcxMToyMjozMzo0NDo1NTo2NicKICAgIG9wdGlvbiBpcCAnMTAuMC4wLjEwMScKICAgIG9wdGlvbiBkbnMgJzEwLjAuMC4yNDUnCgojIEtpZHMgZGV2aWNlIC0gdXNlcyBBZEd1YXJkIHdpdGggcGFyZW50YWwgY29udHJvbHMKY29uZmlnIGhvc3QKICAgIG9wdGlvbiBuYW1lICdraWRzLXRhYmxldCcKICAgIG9wdGlvbiBtYWMgJ0FBOkJCOkNDOkREOkVFOkZGJwogICAgb3B0aW9uIGlwICcxMC4wLjAuMTAwJwogICAgb3B0aW9uIGRucyAnMTAuMC4wLjI0NScKICAgIG9wdGlvbiB0YWcgJ2tpZHMnCgojIFdvcmsvdW5maWx0ZXJlZCBkZXZpY2UgLSBieXBhc3NlcyBBZEd1YXJkCmNvbmZpZyBob3N0CiAgICBvcHRpb24gbmFtZSAnd29yay1sYXB0b3AnCiAgICBvcHRpb24gbWFjICc3Nzo4ODo5OTpBQTpCQjpDQycKICAgIG9wdGlvbiBpcCAnMTAuMC4wLjE1MCcKICAgIG9wdGlvbiBkbnMgJzEuMS4xLjEgOC44LjguOCcKYGBgCgpSZXN0YXJ0IGRuc21hc3E6CmBgYGJhc2gKL2V0Yy9pbml0LmQvZG5zbWFzcSByZXN0YXJ0CmBgYAoKKipOb3RlOioqIFdlJ2xsIGNvbmZpZ3VyZSBBZEd1YXJkIHRvIGhhbmRsZSBkaWZmZXJlbnQgZmlsdGVyaW5nIGxldmVscyBmb3Iga2lkcyB2cyBhZHVsdHMgaW4gUGFydCA1LgoKLS0tCgojIyBQYXJ0IDM6IEFjY2VzcyBDb250cm9sICYgRGV2aWNlIEJsb2NraW5nCgojIyMgMy4xIENyZWF0ZSBEZXZpY2UgQmxvY2tpbmcgU3lzdGVtCgpUaGlzIGFsbG93cyB5b3UgdG8gYmxvY2sgaW50ZXJuZXQgYWNjZXNzIGZvciBzcGVjaWZpYyBkZXZpY2VzLgoKKipDcmVhdGUgdGhlIG1hbmFnZW1lbnQgc2NyaXB0KiogYC9yb290L2RldmljZS1jb250cm9sLnNoYDoKCmBgYGJhc2gKIyEvYmluL3NoCiMgRGV2aWNlIEFjY2VzcyBDb250cm9sIFNjcmlwdCBmb3IgT3BlbldSVAojIFVzYWdlOiAuL2RldmljZS1jb250cm9sLnNoIHtpbml0fGJsb2NrfHVuYmxvY2t8bGlzdHxzdGF0dXN8bG9nfGNsZWFyfGhlbHB9CgpJUFNFVF9OQU1FPSJibG9ja2VkX2RldmljZXMiCkxPR19GSUxFPSIvdmFyL2xvZy9kZXZpY2UtY29udHJvbC5sb2ciCgppbml0X3N5c3RlbSgpIHsKICAgIGVjaG8gIkluaXRpYWxpemluZyBkZXZpY2UgYmxvY2tpbmcgc3lzdGVtLi4uIgogICAgCiAgICAjIENyZWF0ZSBpcHNldCBpZiBpdCBkb2Vzbid0IGV4aXN0CiAgICBpcHNldCBjcmVhdGUgJElQU0VUX05BTUUgaGFzaDppcCB0aW1lb3V0IDAgY29tbWVudCAtZXhpc3QKICAgIAogICAgIyBDcmVhdGUgZmlyZXdhbGwgcnVsZSBpZiBpdCBkb2Vzbid0IGV4aXN0CiAgICBpZiAhIGlwdGFibGVzIC1DIEZPUldBUkQgLW0gc2V0IC0tbWF0Y2gtc2V0ICRJUFNFVF9OQU1FIHNyYyAtaiBSRUpFQ1QgMj4vZGV2L251bGw7IHRoZW4KICAgICAgICBpcHRhYmxlcyAtSSBGT1JXQVJEIDEgLW0gc2V0IC0tbWF0Y2gtc2V0ICRJUFNFVF9OQU1FIHNyYyAtaiBSRUpFQ1QKICAgICAgICBlY2hvICJGaXJld2FsbCBydWxlIGNyZWF0ZWQiCiAgICBlbHNlCiAgICAgICAgZWNobyAiRmlyZXdhbGwgcnVsZSBhbHJlYWR5IGV4aXN0cyIKICAgIGZpCiAgICAKICAgIGVjaG8gIlN5c3RlbSBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkiCiAgICBlY2hvICIkKGRhdGUpOiBTeXN0ZW0gaW5pdGlhbGl6ZWQiID4+ICRMT0dfRklMRQp9CgpibG9ja19kZXZpY2UoKSB7CiAgICBJUD0kMQogICAgTkFNRT0kMgogICAgCiAgICBpZiBbIC16ICIkSVAiIF07IHRoZW4KICAgICAgICBlY2hvICJFcnJvcjogSVAgYWRkcmVzcyByZXF1aXJlZCIKICAgICAgICBlY2hvICJVc2FnZTogJDAgYmxvY2sgPElQPiBbTkFNRV0iCiAgICAgICAgZXhpdCAxCiAgICBmaQogICAgCiAgICAjIEFkZCB0byBpcHNldCB3aXRoIGNvbW1lbnQKICAgIGlmIFsgLW4gIiROQU1FIiBdOyB0aGVuCiAgICAgICAgaXBzZXQgYWRkICRJUFNFVF9OQU1FICRJUCBjb21tZW50ICIkTkFNRSIgLWV4aXN0CiAgICAgICAgZWNobyAi4pyTIEJsb2NrZWQ6ICROQU1FICgkSVApIgogICAgICAgIGVjaG8gIiQoZGF0ZSk6IEJsb2NrZWQgJE5BTUUgKCRJUCkiID4+ICRMT0dfRklMRQogICAgZWxzZQogICAgICAgIGlwc2V0IGFkZCAkSVBTRVRfTkFNRSAkSVAgLWV4aXN0CiAgICAgICAgZWNobyAi4pyTIEJsb2NrZWQ6ICRJUCIKICAgICAgICBlY2hvICIkKGRhdGUpOiBCbG9ja2VkICRJUCIgPj4gJExPR19GSUxFCiAgICBmaQp9Cgp1bmJsb2NrX2RldmljZSgpIHsKICAgIElQPSQxCiAgICBOQU1FPSQyCiAgICAKICAgIGlmIFsgLXogIiRJUCIgXTsgdGhlbgogICAgICAgIGVjaG8gIkVycm9yOiBJUCBhZGRyZXNzIHJlcXVpcmVkIgogICAgICAgIGVjaG8gIlVzYWdlOiAkMCB1bmJsb2NrIDxJUD4gW05BTUVdIgogICAgICAgIGV4aXQgMQogICAgZmkKICAgIAogICAgIyBSZW1vdmUgZnJvbSBpcHNldAogICAgaWYgaXBzZXQgdGVzdCAkSVBTRVRfTkFNRSAkSVAgMj4vZGV2L251bGw7IHRoZW4KICAgICAgICBpcHNldCBkZWwgJElQU0VUX05BTUUgJElQCiAgICAgICAgaWYgWyAtbiAiJE5BTUUiIF07IHRoZW4KICAgICAgICAgICAgZWNobyAi4pyTIFVuYmxvY2tlZDogJE5BTUUgKCRJUCkiCiAgICAgICAgICAgIGVjaG8gIiQoZGF0ZSk6IFVuYmxvY2tlZCAkTkFNRSAoJElQKSIgPj4gJExPR19GSUxFCiAgICAgICAgZWxzZQogICAgICAgICAgICBlY2hvICLinJMgVW5ibG9ja2VkOiAkSVAiCiAgICAgICAgICAgIGVjaG8gIiQoZGF0ZSk6IFVuYmxvY2tlZCAkSVAiID4+ICRMT0dfRklMRQogICAgICAgIGZpCiAgICBlbHNlCiAgICAgICAgZWNobyAi4pyXIERldmljZSAkSVAgd2FzIG5vdCBibG9ja2VkIgogICAgZmkKfQoKbGlzdF9kZXZpY2VzKCkgewogICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgogICAgZWNobyAiQ3VycmVudGx5IEJsb2NrZWQgRGV2aWNlczoiCiAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCiAgICBpcHNldCBsaXN0ICRJUFNFVF9OQU1FIHwgZ3JlcCAtQSAxMDAwICJNZW1iZXJzOiIgfCB0YWlsIC1uICsyCiAgICBDT1VOVD0kKGlwc2V0IGxpc3QgJElQU0VUX05BTUUgfCBncmVwIC1BIDEwMDAgIk1lbWJlcnM6IiB8IHRhaWwgLW4gKzIgfCB3YyAtbCkKICAgIGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKICAgIGVjaG8gIlRvdGFsIGJsb2NrZWQ6ICRDT1VOVCBkZXZpY2UocykiCn0KCmNoZWNrX3N0YXR1cygpIHsKICAgIElQPSQxCiAgICAKICAgIGlmIFsgLXogIiRJUCIgXTsgdGhlbgogICAgICAgIGVjaG8gIkVycm9yOiBJUCBhZGRyZXNzIHJlcXVpcmVkIgogICAgICAgIGVjaG8gIlVzYWdlOiAkMCBzdGF0dXMgPElQPiIKICAgICAgICBleGl0IDEKICAgIGZpCiAgICAKICAgIGlmIGlwc2V0IHRlc3QgJElQU0VUX05BTUUgJElQIDI+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgZWNobyAi8J+UtCAkSVAgaXMgQkxPQ0tFRCIKICAgIGVsc2UKICAgICAgICBlY2hvICLwn5+iICRJUCBpcyBBTExPV0VEIgogICAgZmkKfQoKdmlld19sb2coKSB7CiAgICBpZiBbIC1mICIkTE9HX0ZJTEUiIF07IHRoZW4KICAgICAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCiAgICAgICAgZWNobyAiTGFzdCA1MCBBY3Rpb25zOiIKICAgICAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCiAgICAgICAgdGFpbCAtNTAgJExPR19GSUxFCiAgICBlbHNlCiAgICAgICAgZWNobyAiTm8gbG9nIGZpbGUgZm91bmQiCiAgICBmaQp9CgpjbGVhcl9hbGwoKSB7CiAgICBlY2hvICLimqDvuI8gIFdBUk5JTkc6IFRoaXMgd2lsbCB1bmJsb2NrIEFMTCBkZXZpY2VzISIKICAgIGVjaG8gLW4gIkFyZSB5b3Ugc3VyZT8gKHllcy9ubyk6ICIKICAgIHJlYWQgQ09ORklSTQogICAgCiAgICBpZiBbICIkQ09ORklSTSIgPSAieWVzIiBdOyB0aGVuCiAgICAgICAgaXBzZXQgZmx1c2ggJElQU0VUX05BTUUKICAgICAgICBlY2hvICLinJMgQWxsIGRldmljZXMgdW5ibG9ja2VkIgogICAgICAgIGVjaG8gIiQoZGF0ZSk6IEFsbCBkZXZpY2VzIHVuYmxvY2tlZCIgPj4gJExPR19GSUxFCiAgICBlbHNlCiAgICAgICAgZWNobyAiQ2FuY2VsbGVkIgogICAgZmkKfQoKc2hvd19oZWxwKCkgewogICAgY2F0IDw8IEVPRgpEZXZpY2UgQWNjZXNzIENvbnRyb2wgU2NyaXB0CgpVc2FnZToKICAkMCBpbml0ICAgICAgICAgICAgICAgICAgICAtIEluaXRpYWxpemUgYmxvY2tpbmcgc3lzdGVtCiAgJDAgYmxvY2sgPElQPiBbTkFNRV0gICAgICAgLSBCbG9jayBhIGRldmljZQogICQwIHVuYmxvY2sgPElQPiBbTkFNRV0gICAgIC0gVW5ibG9jayBhIGRldmljZQogICQwIGxpc3QgICAgICAgICAgICAgICAgICAgIC0gTGlzdCBhbGwgYmxvY2tlZCBkZXZpY2VzCiAgJDAgc3RhdHVzIDxJUD4gICAgICAgICAgICAgLSBDaGVjayBpZiBkZXZpY2UgaXMgYmxvY2tlZAogICQwIGxvZyAgICAgICAgICAgICAgICAgICAgIC0gVmlldyBhY3Rpb24gbG9nCiAgJDAgY2xlYXIgICAgICAgICAgICAgICAgICAgLSBDbGVhciBhbGwgYmxvY2tzICh3aXRoIGNvbmZpcm1hdGlvbikKICAkMCBoZWxwICAgICAgICAgICAgICAgICAgICAtIFNob3cgdGhpcyBoZWxwCgpFeGFtcGxlczoKICAkMCBibG9jayAxMC4wLjAuMTAwICJLaWRzIFRhYmxldCIKICAkMCB1bmJsb2NrIDEwLjAuMC4xMDAKICAkMCBzdGF0dXMgMTAuMC4wLjEwMAogICQwIGxpc3QKCkVPRgp9CgojIE1haW4gc2NyaXB0IGxvZ2ljCmNhc2UgIiQxIiBpbgogICAgaW5pdCkKICAgICAgICBpbml0X3N5c3RlbQogICAgICAgIDs7CiAgICBibG9jaykKICAgICAgICBibG9ja19kZXZpY2UgIiQyIiAiJDMiCiAgICAgICAgOzsKICAgIHVuYmxvY2spCiAgICAgICAgdW5ibG9ja19kZXZpY2UgIiQyIiAiJDMiCiAgICAgICAgOzsKICAgIGxpc3QpCiAgICAgICAgbGlzdF9kZXZpY2VzCiAgICAgICAgOzsKICAgIHN0YXR1cykKICAgICAgICBjaGVja19zdGF0dXMgIiQyIgogICAgICAgIDs7CiAgICBsb2cpCiAgICAgICAgdmlld19sb2cKICAgICAgICA7OwogICAgY2xlYXIpCiAgICAgICAgY2xlYXJfYWxsCiAgICAgICAgOzsKICAgIGhlbHB8LS1oZWxwfC1oKQogICAgICAgIHNob3dfaGVscAogICAgICAgIDs7CiAgICAqKQogICAgICAgIGVjaG8gIkVycm9yOiBJbnZhbGlkIGNvbW1hbmQiCiAgICAgICAgc2hvd19oZWxwCiAgICAgICAgZXhpdCAxCiAgICAgICAgOzsKZXNhYwpgYGAKCioqSW5zdGFsbCB0aGUgc2NyaXB0OioqCgpgYGBiYXNoCiMgU1NIIGludG8gT3BlbldSVApzc2ggcm9vdEAxMC4wLjAuMjQ2CgojIENyZWF0ZSB0aGUgc2NyaXB0CnZpIC9yb290L2RldmljZS1jb250cm9sLnNoCiMgUGFzdGUgdGhlIGNvbnRlbnQgYWJvdmUKCiMgTWFrZSBleGVjdXRhYmxlCmNobW9kICt4IC9yb290L2RldmljZS1jb250cm9sLnNoCgojIEluaXRpYWxpemUgdGhlIHN5c3RlbQovcm9vdC9kZXZpY2UtY29udHJvbC5zaCBpbml0CmBgYAoKIyMjIDMuMiBNYWtlIEJsb2NraW5nIFBlcnNpc3RlbnQKCkFkZCB0byBgL2V0Yy9maXJld2FsbC51c2VyYCB0byBzdXJ2aXZlIHJlYm9vdHM6CgpgYGBiYXNoCnZpIC9ldGMvZmlyZXdhbGwudXNlcgpgYGAKCkFkZDoKYGBgYmFzaAojIERldmljZSBibG9ja2luZyBzeXN0ZW0gLSBwZXJzaXN0ZW50IGFjcm9zcyByZWJvb3RzCmlwc2V0IGNyZWF0ZSBibG9ja2VkX2RldmljZXMgaGFzaDppcCB0aW1lb3V0IDAgY29tbWVudCAtZXhpc3QKaXB0YWJsZXMgLUkgRk9SV0FSRCAtbSBzZXQgLS1tYXRjaC1zZXQgYmxvY2tlZF9kZXZpY2VzIHNyYyAtaiBSRUpFQ1QKYGBgCgpSZXN0YXJ0IGZpcmV3YWxsOgpgYGBiYXNoCi9ldGMvaW5pdC5kL2ZpcmV3YWxsIHJlc3RhcnQKYGBgCgojIyMgMy4zIFVzYWdlIEV4YW1wbGVzCgpgYGBiYXNoCiMgQmxvY2sga2lkcyB0YWJsZXQgYXQgYmVkdGltZQovcm9vdC9kZXZpY2UtY29udHJvbC5zaCBibG9jayAxMC4wLjAuMTAwICJLaWRzIFRhYmxldCIKCiMgVW5ibG9jayBpbiB0aGUgbW9ybmluZwovcm9vdC9kZXZpY2UtY29udHJvbC5zaCB1bmJsb2NrIDEwLjAuMC4xMDAKCiMgQ2hlY2sgaWYgZGV2aWNlIGlzIGJsb2NrZWQKL3Jvb3QvZGV2aWNlLWNvbnRyb2wuc2ggc3RhdHVzIDEwLjAuMC4xMDAKCiMgTGlzdCBhbGwgY3VycmVudGx5IGJsb2NrZWQgZGV2aWNlcwovcm9vdC9kZXZpY2UtY29udHJvbC5zaCBsaXN0CgojIFZpZXcgYWN0aW9uIGhpc3RvcnkKL3Jvb3QvZGV2aWNlLWNvbnRyb2wuc2ggbG9nCmBgYAoKIyMjIDMuNCBTY2hlZHVsZWQgQWNjZXNzIENvbnRyb2wgKEF1dG9tYXRpYyBCbG9ja2luZykKClNldCB1cCBhdXRvbWF0aWMgYmxvY2tpbmcvdW5ibG9ja2luZyB2aWEgY3JvbjoKCmBgYGJhc2gKY3JvbnRhYiAtZQpgYGAKCkFkZCBlbnRyaWVzOgpgYGBjcm9uCiMgQmxvY2sga2lkcyBkZXZpY2VzIGF0IDkgUE0gZXZlcnkgZGF5CjAgMjEgKiAqICogL3Jvb3QvZGV2aWNlLWNvbnRyb2wuc2ggYmxvY2sgMTAuMC4wLjEwMCAiS2lkcyBUYWJsZXQiCjAgMjEgKiAqICogL3Jvb3QvZGV2aWNlLWNvbnRyb2wuc2ggYmxvY2sgMTAuMC4wLjExMCAiR2FtaW5nIENvbnNvbGUiCgojIFVuYmxvY2sga2lkcyBkZXZpY2VzIGF0IDcgQU0gZXZlcnkgZGF5CjAgNyAqICogKiAvcm9vdC9kZXZpY2UtY29udHJvbC5zaCB1bmJsb2NrIDEwLjAuMC4xMDAKMCA3ICogKiAqIC9yb290L2RldmljZS1jb250cm9sLnNoIHVuYmxvY2sgMTAuMC4wLjExMAoKIyBCbG9jayBnYW1pbmcgZGV2aWNlcyBkdXJpbmcgc2Nob29sIGhvdXJzIChNb24tRnJpIDggQU0gLSAzIFBNKQowIDggKiAqIDEtNSAvcm9vdC9kZXZpY2UtY29udHJvbC5zaCBibG9jayAxMC4wLjAuMTEwICJHYW1pbmcgQ29uc29sZSIKMCAxNSAqICogMS01IC9yb290L2RldmljZS1jb250cm9sLnNoIHVuYmxvY2sgMTAuMC4wLjExMAoKIyBXZWVrZW5kIGdhbWluZyBsaW1pdHMgKG5vb24tOHBtIG9ubHkgb24gU2F0L1N1bikKMCAyMCAqICogNiwwIC9yb290L2RldmljZS1jb250cm9sLnNoIGJsb2NrIDEwLjAuMC4xMTAgIkdhbWluZyBDb25zb2xlIgowIDEyICogKiA2LDAgL3Jvb3QvZGV2aWNlLWNvbnRyb2wuc2ggdW5ibG9jayAxMC4wLjAuMTEwCmBgYAoKLS0tCgojIyBQYXJ0IDQ6IFRQLUxpbmsgQXJjaGVyIEM3MiBQcm8gQ29uZmlndXJhdGlvbiAoQVAgTW9kZSkKCiMjIyA0LjEgSW1wb3J0YW50OiBSZWNvbmZpZ3VyZSBUUC1MaW5rIGFzIEFjY2VzcyBQb2ludAoKVGhlIFRQLUxpbmsgbXVzdCBiZSBzZXQgdG8gKipBY2Nlc3MgUG9pbnQgbW9kZSoqIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIE9wZW5XUlQuCgoxLiAqKkNvbm5lY3QgdG8gVFAtTGluazoqKgogICAtIENvbm5lY3QgY29tcHV0ZXIgZGlyZWN0bHkgdG8gVFAtTGluayBMQU4gcG9ydAogICAtIEFjY2VzczogYGh0dHA6Ly8xOTIuMTY4LjAuMWAgb3IgYGh0dHA6Ly90cGxpbmt3aWZpLm5ldGAKICAgLSBEZWZhdWx0IGxvZ2luOiBgYWRtaW4vYWRtaW5gCgoyLiAqKkNoYW5nZSBPcGVyYXRpb24gTW9kZToqKgogICBgYGAKICAgQWR2YW5jZWQg4oaSIFN5c3RlbSBUb29scyDihpIgT3BlcmF0aW9uIE1vZGUKICAgU2VsZWN0OiAiQWNjZXNzIFBvaW50IgogICBDbGljayAiU2F2ZSIKICAgYGBgCiAgIAogICAqKk9SIE1hbnVhbCBDb25maWd1cmF0aW9uOioqCiAgIAozLiAqKkRpc2FibGUgREhDUCBTZXJ2ZXI6KioKICAgYGBgCiAgIEFkdmFuY2VkIOKGkiBOZXR3b3JrIOKGkiBESENQIFNlcnZlcgogICBVbmNoZWNrICJFbmFibGUgREhDUCBTZXJ2ZXIiCiAgIFNhdmUKICAgYGBgCgo0LiAqKlNldCBTdGF0aWMgSVA6KioKICAgYGBgCiAgIEFkdmFuY2VkIOKGkiBOZXR3b3JrIOKGkiBMQU4KICAgSVAgQWRkcmVzczogMTAuMC4wLjI1NAogICBTdWJuZXQgTWFzazogMjU1LjI1NS4yNTUuMAogICBHYXRld2F5OiAxMC4wLjAuMjQ2CiAgIFByaW1hcnkgRE5TOiAxMC4wLjAuMjQ1CiAgIFNlY29uZGFyeSBETlM6IDEwLjAuMC4yNDYKICAgU2F2ZSAmIFJlYm9vdAogICBgYGAKCjUuICoqUmVjb25uZWN0IGFmdGVyIHJlYm9vdDoqKgogICAtIE5ldyBhZGRyZXNzOiBgaHR0cDovLzEwLjAuMC4yNTRgCgojIyMgNC4yIENvbmZpZ3VyZSBXaUZpIG9uIFRQLUxpbmsKCjEuICoqMi40R0h6IFdpRmk6KioKICAgYGBgCiAgIFdpcmVsZXNzIOKGkiBXaXJlbGVzcyBTZXR0aW5ncyAoMi40R0h6KQogICBTU0lEOiBZb3VyTmV0d29ya05hbWUKICAgQ2hhbm5lbDogMSwgNiwgb3IgMTEgKGxlYXN0IGNvbmdlc3RlZCkKICAgQ2hhbm5lbCBXaWR0aDogMjBNSHogKG9yIDQwTUh6IGlmIG5vIG5laWdoYm9ycykKICAgTWF4IFRYIFJhdGU6IDMwMCBNYnBzCiAgIEVuYWJsZSBXaXJlbGVzczog4pyTCiAgIEVuYWJsZSBTU0lEIEJyb2FkY2FzdDog4pyTCiAgIGBgYAoKMi4gKio1R0h6IFdpRmk6KioKICAgYGBgCiAgIFdpcmVsZXNzIOKGkiBXaXJlbGVzcyBTZXR0aW5ncyAoNUdIeikKICAgU1NJRDogWW91ck5ldHdvcmtOYW1lLTVHCiAgIENoYW5uZWw6IDM2LCA0MCwgNDQsIDQ4IChERlMgY2hhbm5lbHMgaWYgc3VwcG9ydGVkKQogICBDaGFubmVsIFdpZHRoOiA4ME1IeiAob3IgNDBNSHogaWYgaXNzdWVzKQogICBNYXggVFggUmF0ZTogODY3IE1icHMKICAgRW5hYmxlIFdpcmVsZXNzOiDinJMKICAgRW5hYmxlIFNTSUQgQnJvYWRjYXN0OiDinJMKICAgYGBgCgozLiAqKldpRmkgU2VjdXJpdHkgKGJvdGggYmFuZHMpOioqCiAgIGBgYAogICBXaXJlbGVzcyDihpIgV2lyZWxlc3MgU2VjdXJpdHkKICAgVmVyc2lvbjogV1BBMi1QU0sgKG9yIFdQQTMtUGVyc29uYWwgaWYgc3VwcG9ydGVkKQogICBFbmNyeXB0aW9uOiBBRVMKICAgV2lyZWxlc3MgUGFzc3dvcmQ6IFtTdHJvbmcgcGFzc3dvcmQgMTIrIGNoYXJhY3RlcnNdCiAgIEdyb3VwIEtleSBVcGRhdGUgUGVyaW9kOiAzNjAwIHNlY29uZHMKICAgYGBgCgojIyMgNC4zIFBoeXNpY2FsIENvbm5lY3Rpb24KCioqQ29ubmVjdCBUUC1MaW5rIHRvIE9wZW5XUlQ6KioKCmBgYApPcGVuV1JUIExBTiBQb3J0IOKGkiBUUC1MaW5rIExBTiBQb3J0IChOT1QgV0FOIHBvcnQhKQpgYGAKCuKaoO+4jyAqKkNSSVRJQ0FMOioqIENvbm5lY3QgdG8gYSAqKkxBTiBwb3J0Kiogb24gdGhlIFRQLUxpbmssIE5PVCB0aGUgV0FOL0ludGVybmV0IHBvcnQuCgojIyMgNC40IFRlc3QgVFAtTGluayBDb25uZWN0aW9uCgoxLiBDb25uZWN0IGRldmljZSB0byBUUC1MaW5rIFdpRmkKMi4gQ2hlY2sgeW91IHJlY2VpdmU6CiAgIC0gSVA6IDEwLjAuMC54IChmcm9tIE9wZW5XUlQgREhDUCkKICAgLSBHYXRld2F5OiAxMC4wLjAuMjQ2IChPcGVuV1JUKQogICAtIEROUzogMTAuMC4wLjI0NSAoQWRHdWFyZCkKMy4gVGVzdCBpbnRlcm5ldCBhY2Nlc3MKNC4gQWNjZXNzIFRQLUxpbmsgYWRtaW46IGBodHRwOi8vMTAuMC4wLjI1NGAKCi0tLQoKIyMgUGFydCA1OiBBZEd1YXJkIEhvbWUgLSBDb21wbGV0ZSBTZXR1cAoKIyMjIDUuMSBJbnN0YWxsYXRpb24gT3B0aW9ucwoKKipPcHRpb24gQTogRG9ja2VyIChSZWNvbW1lbmRlZCkqKgoKYGBgYmFzaApkb2NrZXIgcnVuIC1kIFwKICAtLW5hbWUgYWRndWFyZGhvbWUgXAogIC0tcmVzdGFydCB1bmxlc3Mtc3RvcHBlZCBcCiAgLS1ob3N0bmFtZSBhZGd1YXJkIFwKICAtdiAvb3B0L2FkZ3VhcmRob21lL3dvcms6L29wdC9hZGd1YXJkaG9tZS93b3JrIFwKICAtdiAvb3B0L2FkZ3VhcmRob21lL2NvbmY6L29wdC9hZGd1YXJkaG9tZS9jb25mIFwKICAtcCAxMC4wLjAuMjQ1OjUzOjUzL3RjcCBcCiAgLXAgMTAuMC4wLjI0NTo1Mzo1My91ZHAgXAogIC1wIDEwLjAuMC4yNDU6MzAwMDozMDAwL3RjcCBcCiAgLXAgMTAuMC4wLjI0NTo0NDM6NDQzL3RjcCBcCiAgLXAgMTAuMC4wLjI0NTo4NTM6ODUzL3RjcCBcCiAgLWUgVFo9QXVzdHJhbGlhL01lbGJvdXJuZSBcCiAgYWRndWFyZC9hZGd1YXJkaG9tZQpgYGAKCioqT3B0aW9uIEI6IE5hdGl2ZSBMaW51eCBJbnN0YWxsKioKCmBgYGJhc2gKY3VybCAtcyAtUyAtTCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQWRndWFyZFRlYW0vQWRHdWFyZEhvbWUvbWFzdGVyL3NjcmlwdHMvaW5zdGFsbC5zaCB8IHNoIC1zIC0tIC12CmBgYAoKKipPcHRpb24gQzogV2luZG93cyoqCgoxLiBEb3dubG9hZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vQWRndWFyZFRlYW0vQWRHdWFyZEhvbWUvcmVsZWFzZXMKMi4gRXh0cmFjdCB0byBgQzpcQWRHdWFyZEhvbWVgCjMuIFJ1biBgQWRHdWFyZEhvbWUuZXhlYCBhcyBhZG1pbmlzdHJhdG9yCjQuIEluc3RhbGwgYXMgV2luZG93cyBTZXJ2aWNlOiBgQWRHdWFyZEhvbWUuZXhlIC1zIGluc3RhbGxgCgpGb3IgZnVsbCBkZXRhaWxzIG9uIEFkR3VhcmQgY29uZmlndXJhdGlvbiB3aXRoIHBoaXNoaW5nIHByb3RlY3Rpb24sIHBhcmVudGFsIGNvbnRyb2xzLCBhbmQgbW9yZSwgdGhlIGNvbXBsZXRlIGd1aWRlIGNvbnRpbnVlcyBpbiB0aGUgZmlsZSB5b3UgZG93bmxvYWRlZC4KCi0tLQoKKipUaGlzIGlzIGEgY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBmdWxsIDQ5S0IgZ3VpZGUuIFRoZSBjb21wbGV0ZSBkb2N1bWVudCBpbmNsdWRlcyBkZXRhaWxlZCBpbnN0cnVjdGlvbnMgZm9yOioqCgotIENvbXByZWhlbnNpdmUgQWRHdWFyZCBjb25maWd1cmF0aW9uIHdpdGggZmFzdCBETlMgYW5kIHNlY3VyaXR5IGZlYXR1cmVzCi0gUGhpc2hpbmcgYW5kIG1hbHdhcmUgcHJvdGVjdGlvbiB3aXRoIGNvbXByZWhlbnNpdmUgYmxvY2tsaXN0cwotIFBlci1kZXZpY2UgcGFyZW50YWwgY29udHJvbHMgd2l0aCBkaWZmZXJlbnQgZmlsdGVyaW5nIGxldmVscwotIEFkdmFuY2VkIHNlY3VyaXR5IGZlYXR1cmVzIHRvIHByZXZlbnQgZmlsdGVyIGJ5cGFzcwotIENvbXBsZXRlIHRlc3RpbmcgcHJvY2VkdXJlcyBhbmQgdHJvdWJsZXNob290aW5nIHN0ZXBzCi0gQmFja3VwLCBtb25pdG9yaW5nLCBhbmQgbWFpbnRlbmFuY2UgZ3VpZGVzCgpEb3dubG9hZCB0aGUgY29tcGxldGUgZ3VpZGUgKG9wZW53cnQtZ2F0ZXdheS1jb21wcmVoZW5zaXZlLm1kKSBmcm9tIHRoZSBvdXRwdXRzIGZvbGRlciBmb3IgZnVsbCBkZXRhaWxzLgo= \ No newline at end of file +IyBPcGVuV1JUIEdhdGV3YXkgJiBBZEd1YXJkIEhvbWUgLSBDb21wbGV0ZSBDb25maWd1cmF0aW9uIEd1aWRlCgojIyBOZXR3b3JrIE92ZXJ2aWV3CgoqKk5ldyBOZXR3b3JrIFRvcG9sb2d5OioqCmBgYApDYWJsZSBNb2RlbSDihpIgT3BlbldSVCAoTWFpbiBHYXRld2F5KSDihpIgVFAtTGluayBBcmNoZXIgQVg3MiBQcm8gKEFQIE1vZGUpIOKGkiBEZXZpY2VzCiAgICAgICAgICAgICAgICAgICAg4oaTCiAgICAgICAgICAgICAgQWRHdWFyZCBIb21lICgxMC4wLjAuMjQ1KSAtIEROUyBGaWx0ZXJpbmcKYGBgCgoqKklQIENvbmZpZ3VyYXRpb246KioKLSBPcGVuV1JUIFdBTjogREhDUCBmcm9tIENhYmxlIE1vZGVtIChQdWJsaWMgSVApCi0gT3BlbldSVCBMQU46ICoqMTAuMC4wLjI0NioqIChNYWluIEdhdGV3YXkpCi0gQWRHdWFyZCBIb21lOiAqKjEwLjAuMC4yNDUqKiAoRE5TIFNlcnZlcikKLSBUUC1MaW5rIEFyY2hlciBBWDcyIFBybzogKioxMC4wLjAuMjU0KiogKEFQIE1vZGUsIG5vIHJvdXRpbmcpCi0gREhDUCBSYW5nZTogKioxMC4wLjAuMSAtIDEwLjAuMC4yMDAqKgotIFN1Ym5ldDogKioxMC4wLjAuMC8yNCoqCgoqKlJvbGVzOioqCi0gKipPcGVuV1JUKio6IE1haW4gcm91dGVyLCBnYXRld2F5LCBmaXJld2FsbCwgTkFULCBESENQIHNlcnZlciwgYWNjZXNzIGNvbnRyb2wKLSAqKkFkR3VhcmQqKjogRE5TIGZpbHRlcmluZywgYWQgYmxvY2tpbmcsIHBoaXNoaW5nIHByb3RlY3Rpb24sIHBhcmVudGFsIGNvbnRyb2xzCi0gKipUUC1MaW5rIEFYNzIgUHJvKio6IFdpRmkgNiBhY2Nlc3MgcG9pbnQgKyBFdGhlcm5ldCBzd2l0Y2ggb25seSAobm8gcm91dGluZy9ESENQKQoKLS0tCgojIyBQYXJ0IDE6IE9wZW5XUlQgSW5pdGlhbCBTZXR1cCBhcyBNYWluIEdhdGV3YXkKCiMjIyAxLjEgUGh5c2ljYWwgQ29ubmVjdGlvbiBTZXR1cAoKKipDb25uZWN0aW9uIE9yZGVyOioqCjEuICoqRE8gTk9UIGNvbm5lY3QgY2FibGUgbW9kZW0geWV0KioKMi4gQ29ubmVjdCBjb21wdXRlciB0byBPcGVuV1JUIExBTiBwb3J0IHZpYSBFdGhlcm5ldAozLiBQb3dlciBvbiBPcGVuV1JUCjQuIENvbmZpZ3VyZSBPcGVuV1JUIGNvbXBsZXRlbHkgZmlyc3QKNS4gVGhlbiBjb25uZWN0IHRvIGNhYmxlIG1vZGVtCgojIyMgMS4yIEZpcnN0IExvZ2luIGFuZCBCYXNpYyBDb25maWd1cmF0aW9uCgoxLiAqKkNvbm5lY3QgdG8gT3BlbldSVDoqKgogICAtIENvbm5lY3QgdmlhIEV0aGVybmV0IHRvIGFueSBMQU4gcG9ydAogICAtIERlZmF1bHQgSVA6IGAxOTIuMTY4LjEuMWAKICAgLSBBY2Nlc3MgdmlhIGJyb3dzZXI6IGBodHRwOi8vMTkyLjE2OC4xLjFgCiAgIC0gRGVmYXVsdCBsb2dpbjogYHJvb3RgIChubyBwYXNzd29yZCBpbml0aWFsbHkpCgoyLiAqKlNldCBSb290IFBhc3N3b3JkOioqCiAgIGBgYAogICBTeXN0ZW0g4oaSIEFkbWluaXN0cmF0aW9uIOKGkiBSb3V0ZXIgUGFzc3dvcmQKICAgYGBgCiAgIFNldCBhIHN0cm9uZyBwYXNzd29yZCBpbW1lZGlhdGVseSAoZS5nLiwgMTYrIGNoYXJhY3RlcnMgd2l0aCBudW1iZXJzL3N5bWJvbHMpLgoKMy4gKipTZXQgVGltZXpvbmU6KioKICAgYGBgCiAgIFN5c3RlbSDihpIgU3lzdGVtIOKGkiBHZW5lcmFsIFNldHRpbmdzCiAgIFRpbWV6b25lOiBBdXN0cmFsaWEvTWVsYm91cm5lCiAgIGBgYAoKIyMjIDEuMyBDb25maWd1cmUgV0FOIEludGVyZmFjZSAoSW50ZXJuZXQgQ29ubmVjdGlvbikKCioqVGhpcyBjb25uZWN0cyBPcGVuV1JUIHRvIHlvdXIgY2FibGUgbW9kZW0uKioKCjEuICoqTmF2aWdhdGUgdG8gTmV0d29yayDihpIgSW50ZXJmYWNlcyoqCgoyLiAqKkVkaXQgV0FOIGludGVyZmFjZToqKgogICAtIFByb3RvY29sOiBgREhDUCBjbGllbnRgIChtb3N0IGNhYmxlIG1vZGVtcyB1c2UgREhDUCkKICAgLSBMZWF2ZSBldmVyeXRoaW5nIGRlZmF1bHQgaW5pdGlhbGx5CiAgIC0gQWR2YW5jZWQgU2V0dGluZ3M6CiAgICAgLSDinJMgVXNlIEROUyBzZXJ2ZXJzIGFkdmVydGlzZWQgYnkgcGVlciAod2UnbGwgY2hhbmdlIHRoaXMgbGF0ZXIpCiAgIC0gRmlyZXdhbGwgU2V0dGluZ3M6CiAgICAgLSBDcmVhdGUvQXNzaWduIHRvIGZpcmV3YWxsIHpvbmU6IGB3YW5gCiAgIC0gQ2xpY2sgIlNhdmUiCgozLiAqKklmIHlvdXIgSVNQIHJlcXVpcmVzIHNwZWNpZmljIHNldHRpbmdzOioqCiAgIC0gU29tZSBJU1BzIHJlcXVpcmU6CiAgICAgLSBNQUMgYWRkcmVzcyBjbG9uaW5nICh1c2UgeW91ciBvbGQgcm91dGVyJ3MgTUFDKQogICAgIC0gVkxBTiB0YWdnaW5nCiAgICAgLSBQUFBvRSAodXNlcm5hbWUvcGFzc3dvcmQpCiAgIC0gQ2hlY2sgd2l0aCB5b3VyIElTUCBpZiBjb25uZWN0aW9uIGZhaWxzCgojIyMgMS40IENvbmZpZ3VyZSBMQU4gSW50ZXJmYWNlCgoxLiAqKk5hdmlnYXRlIHRvIE5ldHdvcmsg4oaSIEludGVyZmFjZXMqKgoKMi4gKipFZGl0IExBTiBpbnRlcmZhY2U6KioKICAgLSBQcm90b2NvbDogYFN0YXRpYyBhZGRyZXNzYAogICAtIElQdjQgYWRkcmVzczogYDEwLjAuMC4yNDZgCiAgIC0gSVB2NCBuZXRtYXNrOiBgMjU1LjI1NS4yNTUuMGAgKG9yIC8yNCkKICAgLSBJUHY0IGdhdGV3YXk6IChsZWF2ZSBlbXB0eSAtIHRoaXMgSVMgdGhlIGdhdGV3YXkpCiAgIC0gVXNlIGN1c3RvbSBETlMgc2VydmVyczogYDEwLjAuMC4yNDVgCiAgIC0gQ2xpY2sgIlNhdmUgJiBBcHBseSIKCjMuICoqV2FpdCAzMCBzZWNvbmRzKiosIHRoZW4gcmVjb25uZWN0IHRvOiBgaHR0cDovLzEwLjAuMC4yNDZgCgojIyMgMS41IENvbmZpZ3VyZSBGaXJld2FsbCAmIE5BVAoKMS4gKipOZXR3b3JrIOKGkiBGaXJld2FsbCDihpIgR2VuZXJhbCBTZXR0aW5ncyoqCgoyLiAqKlpvbmU6IFdBTioqCiAgIC0gSW5wdXQ6IGByZWplY3RgCiAgIC0gT3V0cHV0OiBgYWNjZXB0YAogICAtIEZvcndhcmQ6IGByZWplY3RgCiAgIC0g4pyTIE1hc3F1ZXJhZGluZyAoTkFUKSAtICoqQ1JJVElDQUwqKgogICAtIOKckyBNU1MgY2xhbXBpbmcKICAgLSBDb3ZlcmVkIG5ldHdvcmtzOiBgd2FuYCBgd2FuNmAKCjMuICoqWm9uZTogTEFOKioKICAgLSBJbnB1dDogYGFjY2VwdGAKICAgLSBPdXRwdXQ6IGBhY2NlcHRgCiAgIC0gRm9yd2FyZDogYGFjY2VwdGAKICAgLSBNYXNxdWVyYWRpbmc6IHVuY2hlY2tlZAogICAtIENvdmVyZWQgbmV0d29ya3M6IGBsYW5gCgo0LiAqKkZvcndhcmRpbmcgUnVsZXM6KioKICAgLSBBZGQ6IExBTiDihpIgV0FOIChBbGxvdykgLSBzaG91bGQgZXhpc3QgYnkgZGVmYXVsdAogICAtIFZlcmlmeSB0aGlzIHJ1bGUgZXhpc3RzCgo1LiAqKkFkdmFuY2VkIFNldHRpbmdzOioqCiAgIGBgYAogICBFbmFibGUgU1lOLWZsb29kIHByb3RlY3Rpb246IOKckwogICBEcm9wIGludmFsaWQgcGFja2V0czog4pyTCiAgIGBgYAoKNi4gKipTYXZlICYgQXBwbHkqKgoKIyMjIDEuNiBUZXN0IEludGVybmV0IENvbm5lY3Rpb24KCioqTm93IGNvbm5lY3QgdGhlIGNhYmxlIG1vZGVtOioqCgoxLiAqKkNvbm5lY3QgY2FibGUgbW9kZW0gdG8gT3BlbldSVCBXQU4gcG9ydCoqCjIuICoqV2FpdCA2MCBzZWNvbmRzKiogZm9yIG1vZGVtIHRvIGFzc2lnbiBJUAozLiAqKkNoZWNrIGNvbm5lY3Rpb246KioKICAgYGBgCiAgIE5ldHdvcmsg4oaSIEludGVyZmFjZXMg4oaSIFdBTgogICBgYGAKICAgLSBTaG91bGQgc2hvdyBwdWJsaWMgSVAgYWRkcmVzcwogICAtIFNob3VsZCBzaG93ICJDb25uZWN0ZWQiIHN0YXR1cwoKNC4gKipUZXN0IGZyb20gT3BlbldSVDoqKgogICAtIEdvIHRvIE5ldHdvcmsg4oaSIERpYWdub3N0aWNzCiAgIC0gUGluZyB0ZXN0OiBgOC44LjguOGAgKHNob3VsZCB3b3JrKQogICAtIFBpbmcgdGVzdDogYGdvb2dsZS5jb21gIChzaG91bGQgd29yaykKCjUuICoqSWYgY29ubmVjdGlvbiBmYWlsczoqKgogICAtIENoZWNrIGNhYmxlIG1vZGVtIGlzIG9ubGluZSAobGlnaHRzIHN0YWJsZSkKICAgLSBUcnkgcmVib290aW5nIGNhYmxlIG1vZGVtICh1bnBsdWcgMzAgc2Vjb25kcykKICAgLSBDaGVjayBXQU4gaW50ZXJmYWNlIHNldHRpbmdzCiAgIC0gU29tZSBJU1BzIHJlcXVpcmUgTUFDIGNsb25pbmcgKHNlZSBTZWN0aW9uIDEuOSkKCiMjIyAxLjcgVXBkYXRlIE9wZW5XUlQKCioqQmVmb3JlIGNvbnRpbnVpbmcsIHVwZGF0ZSBwYWNrYWdlczoqKgoKU1NIIGludG8gT3BlbldSVDoKYGBgYmFzaApzc2ggcm9vdEAxMC4wLjAuMjQ2CmBgYAoKVXBkYXRlIHBhY2thZ2UgbGlzdHM6CmBgYGJhc2gKb3BrZyB1cGRhdGUKb3BrZyBsaXN0LXVwZ3JhZGFibGUKb3BrZyB1cGdyYWRlIFtwYWNrYWdlLW5hbWVdCmBgYAoKT3IgdXBkYXRlIGFsbCAoYmUgY2FyZWZ1bCwgdGVzdCBmaXJzdCk6CmBgYGJhc2gKb3BrZyBsaXN0LXVwZ3JhZGFibGUgfCBjdXQgLWQgJyAnIC1mIDEgfCB4YXJncyBvcGtnIHVwZ3JhZGUKYGBgCgojIyMgMS44IEluc3RhbGwgRXNzZW50aWFsIFBhY2thZ2VzCgpgYGBiYXNoCiMgRmlyZXdhbGwgYW5kIG5ldHdvcmsgdG9vbHMKb3BrZyBpbnN0YWxsIGx1Y2ktYXBwLWZpcmV3YWxsCm9wa2cgaW5zdGFsbCBpcHRhYmxlcy1tb2QtZXh0cmEKb3BrZyBpbnN0YWxsIGlwc2V0CgojIE1vbml0b3JpbmcgdG9vbHMKb3BrZyBpbnN0YWxsIGx1Y2ktYXBwLW5sYndtb24gICAgIyBCYW5kd2lkdGggbW9uaXRvcmluZwpvcGtnIGluc3RhbGwgbHVjaS1hcHAtc3RhdGlzdGljcyAgIyBTeXN0ZW0gc3RhdHMKCiMgSFRUUFMgZm9yIHdlYiBpbnRlcmZhY2UgKHJlY29tbWVuZGVkKQpvcGtnIGluc3RhbGwgbHVjaS1zc2wtb3BlbnNzbAoKIyBBZGRpdGlvbmFsIHVzZWZ1bCB0b29scwpvcGtnIGluc3RhbGwgdGNwZHVtcCAgICAgICAgICAgICAgIyBOZXR3b3JrIGRlYnVnZ2luZwpvcGtnIGluc3RhbGwgaXBlcmYzICAgICAgICAgICAgICAjIFNwZWVkIHRlc3RpbmcKYGBgCgojIyMgMS45IE1BQyBBZGRyZXNzIENsb25pbmcgKElmIFJlcXVpcmVkKQoKU29tZSBJU1BzIGJpbmQgdG8geW91ciBwcmV2aW91cyByb3V0ZXIncyBNQUMgYWRkcmVzcy4KCjEuICoqRmluZCB5b3VyIG9sZCByb3V0ZXIncyBXQU4gTUFDIGFkZHJlc3MqKgogICAtIFVzdWFsbHkgb24gYSBzdGlja2VyIG9uIHRoZSBUUC1MaW5rCiAgIC0gT3IgZnJvbSBUUC1MaW5rIGFkbWluIGludGVyZmFjZQoKMi4gKipDbG9uZSBNQUMgaW4gT3BlbldSVDoqKgogICBgYGAKICAgTmV0d29yayDihpIgSW50ZXJmYWNlcyDihpIgV0FOIOKGkiBFZGl0CiAgIEFkdmFuY2VkIFNldHRpbmdzOgogICAtIE92ZXJyaWRlIE1BQyBhZGRyZXNzOiBbZW50ZXIgb2xkIHJvdXRlcidzIE1BQ10KICAgU2F2ZSAmIEFwcGx5CiAgIGBgYAoKMy4gKipSZWJvb3QgY2FibGUgbW9kZW0gYW5kIE9wZW5XUlQqKgoKLS0tCgojIyBQYXJ0IDI6IERIQ1AgU2VydmVyIENvbmZpZ3VyYXRpb24KCiMjIyAyLjEgQmFzaWMgREhDUCBTZXR0aW5ncwoKMS4gKipOYXZpZ2F0ZSB0byBOZXR3b3JrIOKGkiBESENQIGFuZCBETlMqKgoKMi4gKipHZW5lcmFsIFNldHRpbmdzIHRhYjoqKgogICAtIOKckyBBdXRob3JpdGF0aXZlIChPcGVuV1JUIGlzIG5vdyB0aGUgb25seSBESENQIHNlcnZlcikKICAgLSBETlMgZm9yd2FyZGluZ3M6IGAxMC4wLjAuMjQ1YAogICAtIEROUyBzZXJ2ZXIgcG9ydDogYDUzYAogICAtIExvY2FsIHNlcnZlcjogYC9sYW4vYAogICAtIExvY2FsIGRvbWFpbjogYGxhbmAgKG9yIHlvdXIgcHJlZmVyZW5jZSBsaWtlIGBob21lLmxvY2FsYCkKICAgLSBDbGljayAiU2F2ZSIKCjMuICoqQWR2YW5jZWQgU2V0dGluZ3M6KioKICAgLSBSZWJpbmQgcHJvdGVjdGlvbjog4pyTCiAgIC0gRG9tYWluIHdoaXRlbGlzdDogKGxlYXZlIGVtcHR5IHVubGVzcyBuZWVkZWQpCiAgIC0gU3RyaWN0IG9yZGVyOiDinJMgKHVzZXMgRE5TIHNlcnZlcnMgaW4gb3JkZXIpCgojIyMgMi4yIERIQ1AgUG9vbCBDb25maWd1cmF0aW9uCgoxLiAqKk5ldHdvcmsg4oaSIEludGVyZmFjZXMg4oaSIExBTiDihpIgRWRpdCDihpIgREhDUCBTZXJ2ZXIgdGFiKioKCjIuICoqR2VuZXJhbCBTZXR1cDoqKgogICAtIOKckyBJZ25vcmUgaW50ZXJmYWNlOiBVbmNoZWNrIChlbmFibGUgREhDUCkKICAgLSBTdGFydDogYDFgCiAgIC0gTGltaXQ6IGAyMDBgCiAgIC0gTGVhc2UgdGltZTogYDEyaGAgKG9yIGAyNGhgIGZvciBzdGFiaWxpdHkpCgozLiAqKkFkdmFuY2VkIFNldHRpbmdzOioqCiAgIC0gRHluYW1pYyBESENQOiDinJMKICAgLSBGb3JjZTog4pyTIChwcmV2ZW50cyBkZXZpY2VzIGZyb20gdXNpbmcgc3RhdGljIElQcyBpbiBESENQIHJhbmdlKQoKNC4gKipESENQIE9wdGlvbnM6KioKICAgLSBBZGQgb3B0aW9uIGAzLDEwLjAuMC4yNDZgIChHYXRld2F5IC0gc2hvdWxkIGJlIGRlZmF1bHQpCiAgIC0gQWRkIG9wdGlvbiBgNiwxMC4wLjAuMjQ1YCAoRE5TIFNlcnZlcikKICAgLSBBZGQgb3B0aW9uIGA0MiwxMC4wLjAuMjQ1YCAoTlRQIFNlcnZlciAtIG9wdGlvbmFsKQoKIyMjIDIuMyBTdGF0aWMgTGVhc2VzIENvbmZpZ3VyYXRpb24KCjEuICoqTmF2aWdhdGUgdG8gTmV0d29yayDihpIgREhDUCBhbmQgRE5TIOKGkiBTdGF0aWMgTGVhc2VzKioKCjIuICoqQWRkIENyaXRpY2FsIFN0YXRpYyBMZWFzZXM6KioKCioqQWRHdWFyZCBIb21lOioqCmBgYApIb3N0bmFtZTogYWRndWFyZApNQUMgQWRkcmVzczogW0FkR3VhcmQgc2VydmVyIE1BQ10KSVB2NCBhZGRyZXNzOiAxMC4wLjAuMjQ1CkxlYXNlIHRpbWU6IGluZmluaXRlCmBgYAoKKipUUC1MaW5rIEFyY2hlciBBWDcyIFBybzoqKgpgYGAKSG9zdG5hbWU6IHRwbGluay1hcApNQUMgQWRkcmVzczogW1RQLUxpbmsgV0FOL0xBTiBNQUNdCklQdjQgYWRkcmVzczogMTAuMC4wLjI1NApMZWFzZSB0aW1lOiBpbmZpbml0ZQpgYGAKCioqSG9tZUFzc2lzdGFudCAoaWYgYXBwbGljYWJsZSk6KioKYGBgCkhvc3RuYW1lOiBob21lYXNzaXN0YW50Ck1BQyBBZGRyZXNzOiBbSEEgTUFDXQpJUHY0IGFkZHJlc3M6IDEwLjAuMC41NQpMZWFzZSB0aW1lOiBpbmZpbml0ZQpgYGAKCioqT3RoZXIgc2VydmVycy9kZXZpY2VzOioqCmBgYApOQVM6IDEwLjAuMC42MApQcmludGVyOiAxMC4wLjAuNzAKRGVza3RvcDogMTAuMC4wLjEwMQpMYXB0b3A6IDEwLjAuMC4xMDIKYGBgCgojIyMgMi40IFBlci1EZXZpY2UgRE5TIENvbmZpZ3VyYXRpb24gKEZvciBQYXJlbnRhbCBDb250cm9scykKCioqTWV0aG9kOiBWaWEgQ29uZmlnIEZpbGUqKgoKU1NIIGludG8gT3BlbldSVCBhbmQgZWRpdCBgL2V0Yy9jb25maWcvZGhjcGA6CgpgYGBiYXNoCnZpIC9ldGMvY29uZmlnL2RoY3AKYGBgCgpBZGQgaG9zdCBjb25maWd1cmF0aW9uczoKCmBgYGJhc2gKIyBTdGFuZGFyZCBhZHVsdCBkZXZpY2UgLSB1c2VzIEFkR3VhcmQgd2l0aCBmdWxsIGZpbHRlcmluZwpjb25maWcgaG9zdAogICAgb3B0aW9uIG5hbWUgJ2xhcHRvcCcKICAgIG9wdGlvbiBtYWMgJzExOjIyOjMzOjQ0OjU1OjY2JwogICAgb3B0aW9uIGlwICcxMC4wLjAuMTAxJwogICAgb3B0aW9uIGRucyAnMTAuMC4wLjI0NScKCiMgS2lkcyBkZXZpY2UgLSB1c2VzIEFkR3VhcmQgd2l0aCBwYXJlbnRhbCBjb250cm9scwpjb25maWcgaG9zdAogICAgb3B0aW9uIG5hbWUgJ2tpZHMtdGFibGV0JwogICAgb3B0aW9uIG1hYyAnQUE6QkI6Q0M6REQ6RUU6RkYnCiAgICBvcHRpb24gaXAgJzEwLjAuMC4xMDAnCiAgICBvcHRpb24gZG5zICcxMC4wLjAuMjQ1JwogICAgb3B0aW9uIHRhZyAna2lkcycKCiMgV29yay91bmZpbHRlcmVkIGRldmljZSAtIGJ5cGFzc2VzIEFkR3VhcmQKY29uZmlnIGhvc3QKICAgIG9wdGlvbiBuYW1lICd3b3JrLWxhcHRvcCcKICAgIG9wdGlvbiBtYWMgJzc3Ojg4Ojk5OkFBOkJCOkNDJwogICAgb3B0aW9uIGlwICcxMC4wLjAuMTUwJwogICAgb3B0aW9uIGRucyAnMS4xLjEuMSA4LjguOC44JwpgYGAKClJlc3RhcnQgZG5zbWFzcToKYGBgYmFzaAovZXRjL2luaXQuZC9kbnNtYXNxIHJlc3RhcnQKYGBgCgoqKk5vdGU6KiogV2UnbGwgY29uZmlndXJlIEFkR3VhcmQgdG8gaGFuZGxlIGRpZmZlcmVudCBmaWx0ZXJpbmcgbGV2ZWxzIGZvciBraWRzIHZzIGFkdWx0cyBpbiBQYXJ0IDUuCgotLS0KCiMjIFBhcnQgMzogQWNjZXNzIENvbnRyb2wgJiBEZXZpY2UgQmxvY2tpbmcKCiMjIyAzLjEgQ3JlYXRlIERldmljZSBCbG9ja2luZyBTeXN0ZW0KClRoaXMgYWxsb3dzIHlvdSB0byBibG9jayBpbnRlcm5ldCBhY2Nlc3MgZm9yIHNwZWNpZmljIGRldmljZXMuCgoqKkNyZWF0ZSB0aGUgbWFuYWdlbWVudCBzY3JpcHQqKiBgL3Jvb3QvZGV2aWNlLWNvbnRyb2wuc2hgOgoKYGBgYmFzaAojIS9iaW4vc2gKIyBEZXZpY2UgQWNjZXNzIENvbnRyb2wgU2NyaXB0IGZvciBPcGVuV1JUCiMgVXNhZ2U6IC4vZGV2aWNlLWNvbnRyb2wuc2gge2luaXR8YmxvY2t8dW5ibG9ja3xsaXN0fHN0YXR1c3xsb2d8Y2xlYXJ8aGVscH0KCklQU0VUX05BTUU9ImJsb2NrZWRfZGV2aWNlcyIKTE9HX0ZJTEU9Ii92YXIvbG9nL2RldmljZS1jb250cm9sLmxvZyIKCmluaXRfc3lzdGVtKCkgewogICAgZWNobyAiSW5pdGlhbGl6aW5nIGRldmljZSBibG9ja2luZyBzeXN0ZW0uLi4iCiAgICAKICAgICMgQ3JlYXRlIGlwc2V0IGlmIGl0IGRvZXNuJ3QgZXhpc3QKICAgIGlwc2V0IGNyZWF0ZSAkSVBTRVRfTkFNRSBoYXNoOmlwIHRpbWVvdXQgMCBjb21tZW50IC1leGlzdAogICAgCiAgICAjIENyZWF0ZSBmaXJld2FsbCBydWxlIGlmIGl0IGRvZXNuJ3QgZXhpc3QKICAgIGlmICEgaXB0YWJsZXMgLUMgRk9SV0FSRCAtbSBzZXQgLS1tYXRjaC1zZXQgJElQU0VUX05BTUUgc3JjIC1qIFJFSkVDVCAyPi9kZXYvbnVsbDsgdGhlbgogICAgICAgIGlwdGFibGVzIC1JIEZPUldBUkQgMSAtbSBzZXQgLS1tYXRjaC1zZXQgJElQU0VUX05BTUUgc3JjIC1qIFJFSkVDVAogICAgICAgIGVjaG8gIkZpcmV3YWxsIHJ1bGUgY3JlYXRlZCIKICAgIGVsc2UKICAgICAgICBlY2hvICJGaXJld2FsbCBydWxlIGFscmVhZHkgZXhpc3RzIgogICAgZmkKICAgIAogICAgZWNobyAiU3lzdGVtIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSIKICAgIGVjaG8gIiQoZGF0ZSk6IFN5c3RlbSBpbml0aWFsaXplZCIgPj4gJExPR19GSUxFCn0KCmJsb2NrX2RldmljZSgpIHsKICAgIElQPSQxCiAgICBOQU1FPSQyCiAgICAKICAgIGlmIFsgLXogIiRJUCIgXTsgdGhlbgogICAgICAgIGVjaG8gIkVycm9yOiBJUCBhZGRyZXNzIHJlcXVpcmVkIgogICAgICAgIGVjaG8gIlVzYWdlOiAkMCBibG9jayA8SVA+IFtOQU1FXSIKICAgICAgICBleGl0IDEKICAgIGZpCiAgICAKICAgICMgQWRkIHRvIGlwc2V0IHdpdGggY29tbWVudAogICAgaWYgWyAtbiAiJE5BTUUiIF07IHRoZW4KICAgICAgICBpcHNldCBhZGQgJElQU0VUX05BTUUgJElQIGNvbW1lbnQgIiROQU1FIiAtZXhpc3QKICAgICAgICBlY2hvICLinJMgQmxvY2tlZDogJE5BTUUgKCRJUCkiCiAgICAgICAgZWNobyAiJChkYXRlKTogQmxvY2tlZCAkTkFNRSAoJElQKSIgPj4gJExPR19GSUxFCiAgICBlbHNlCiAgICAgICAgaXBzZXQgYWRkICRJUFNFVF9OQU1FICRJUCAtZXhpc3QKICAgICAgICBlY2hvICLinJMgQmxvY2tlZDogJElQIgogICAgICAgIGVjaG8gIiQoZGF0ZSk6IEJsb2NrZWQgJElQIiA+PiAkTE9HX0ZJTEUKICAgIGZpCn0KCnVuYmxvY2tfZGV2aWNlKCkgewogICAgSVA9JDEKICAgIE5BTUU9JDIKICAgIAogICAgaWYgWyAteiAiJElQIiBdOyB0aGVuCiAgICAgICAgZWNobyAiRXJyb3I6IElQIGFkZHJlc3MgcmVxdWlyZWQiCiAgICAgICAgZWNobyAiVXNhZ2U6ICQwIHVuYmxvY2sgPElQPiBbTkFNRV0iCiAgICAgICAgZXhpdCAxCiAgICBmaQogICAgCiAgICAjIFJlbW92ZSBmcm9tIGlwc2V0CiAgICBpZiBpcHNldCB0ZXN0ICRJUFNFVF9OQU1FICRJUCAyPi9kZXYvbnVsbDsgdGhlbgogICAgICAgIGlwc2V0IGRlbCAkSVBTRVRfTkFNRSAkSVAKICAgICAgICBpZiBbIC1uICIkTkFNRSIgXTsgdGhlbgogICAgICAgICAgICBlY2hvICLinJMgVW5ibG9ja2VkOiAkTkFNRSAoJElQKSIKICAgICAgICAgICAgZWNobyAiJChkYXRlKTogVW5ibG9ja2VkICROQU1FICgkSVApIiA+PiAkTE9HX0ZJTEUKICAgICAgICBlbHNlCiAgICAgICAgICAgIGVjaG8gIuKckyBVbmJsb2NrZWQ6ICRJUCIKICAgICAgICAgICAgZWNobyAiJChkYXRlKTogVW5ibG9ja2VkICRJUCIgPj4gJExPR19GSUxFCiAgICAgICAgZmkKICAgIGVsc2UKICAgICAgICBlY2hvICLinJcgRGV2aWNlICRJUCB3YXMgbm90IGJsb2NrZWQiCiAgICBmaQp9CgpsaXN0X2RldmljZXMoKSB7CiAgICBlY2hvICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKICAgIGVjaG8gIkN1cnJlbnRseSBCbG9ja2VkIERldmljZXM6IgogICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCiAgICBpcHNldCBsaXN0ICRJUFNFVF9OQU1FIHwgZ3JlcCAtQSAxMDAwICJNZW1iZXJzOiIgfCB0YWlsIC1uICsyCiAgICBDT1VOVD0kKGlwc2V0IGxpc3QgJElQU0VUX05BTUUgfCBncmVwIC1BIDEwMDAgIk1lbWJlcnM6IiB8IHRhaWwgLW4gKzIgfCB3YyAtbCkKICAgIGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgogICAgZWNobyAiVG90YWwgYmxvY2tlZDogJENPVU5UIGRldmljZShzKSIKfQoKY2hlY2tfc3RhdHVzKCkgewogICAgSVA9JDEKICAgIAogICAgaWYgWyAteiAiJElQIiBdOyB0aGVuCiAgICAgICAgZWNobyAiRXJyb3I6IElQIGFkZHJlc3MgcmVxdWlyZWQiCiAgICAgICAgZWNobyAiVXNhZ2U6ICQwIHN0YXR1cyA8SVA+IgogICAgICAgIGV4aXQgMQogICAgZmkKICAgIAogICAgaWYgaXBzZXQgdGVzdCAkSVBTRVRfTkFNRSAkSVAgMj4vZGV2L251bGw7IHRoZW4KICAgICAgICBlY2hvICLwn5S0ICRJUCBpcyBCTE9DS0VEIgogICAgZWxzZQogICAgICAgIGVjaG8gIvCfn6IgJElQIGlzIEFMTE9XRUQiCiAgICBmaQp9Cgp2aWV3X2xvZygpIHsKICAgIGlmIFsgLWYgIiRMT0dfRklMRSIgXTsgdGhlbgogICAgICAgIGVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgogICAgICAgIGVjaG8gIkxhc3QgNTAgQWN0aW9uczoiCiAgICAgICAgZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCiAgICAgICAgdGFpbCAtNTAgJExPR19GSUxFCiAgICBlbHNlCiAgICAgICAgZWNobyAiTm8gbG9nIGZpbGUgZm91bmQiCiAgICBmaQp9CgpjbGVhcl9hbGwoKSB7CiAgICBlY2hvICLimqDvuI8gIFdBUk5JTkc6IFRoaXMgd2lsbCB1bmJsb2NrIEFMTCBkZXZpY2VzISIKICAgIGVjaG8gLW4gIkFyZSB5b3Ugc3VyZT8gKHllcy9ubyk6ICIKICAgIHJlYWQgQ09ORklSTQogICAgCiAgICBpZiBbICIkQ09ORklSTSIgPSAieWVzIiBdOyB0aGVuCiAgICAgICAgaXBzZXQgZmx1c2ggJElQU0VUX05BTUUKICAgICAgICBlY2hvICLinJMgQWxsIGRldmljZXMgdW5ibG9ja2VkIgogICAgICAgIGVjaG8gIiQoZGF0ZSk6IEFsbCBkZXZpY2VzIHVuYmxvY2tlZCIgPj4gJExPR19GSUxFCiAgICBlbHNlCiAgICAgICAgZWNobyAiQ2FuY2VsbGVkIgogICAgZmkKfQoKc2hvd19oZWxwKCkgewogICAgY2F0IDw8IEVPRQPEZXZPY2UgQWNjZXNzIENvbnRyb2wgU2NyaXB0CgpVc2FnZToKICAkMCBpbml0ICAgICAgICAgICAgICAgICAgICAtIEluaXRpYWxpemUgYmxvY2tpbmcgc3lzdGVtCiAgJDAgYmxvY2sgPElQPiBbTkFNRV0gICAgICAgLSBCbG9jayBhIGRldmljZQogICQwIHVuYmxvY2sgPElQPiBbTkFNRV0gICAgIC0gVW5ibG9jayBhIGRldmljZQogICQwIGxpc3QgICAgICAgICAgICAgICAgICAgIC0gTGlzdCBhbGwgYmxvY2tlZCBkZXZpY2VzCiAgJDAgc3RhdHVzIDxJUD4gICAgICAgICAgICAgLSBDaGVjayBpZiBkZXZpY2UgaXMgYmxvY2tlZAogICQwIGxvZyAgICAgICAgICAgICAgICAgICAgIC0gVmlldyBhY3Rpb24gbG9nCiAgJDAgY2xlYXIgICAgICAgICAgICAgICAgICAgLSBDbGVhciBhbGwgYmxvY2tzICh3aXRoIGNvbmZpcm1hdGlvbikKICAkMCBoZWxwICAgICAgICAgICAgICAgICAgICAtIFNob3cgdGhpcyBoZWxwCgpFeGFtcGxlczoKICAkMCBibG9jayAxMC4wLjAuMTAwICJLaWRzIFRhYmxldCIKICAkMCB1bmJsb2NrIDEwLjAuMC4xMDAKICAkMCBzdGF0dXMgMTAuMC4wLjEwMAogICQwIGxpc3QKCkVPRgp9CgojIE1haW4gc2NyaXB0IGxvZ2ljCmNhc2UgIiQxIiBpbgogICAgaW5pdCkKICAgICAgICBpbml0X3N5c3RlbQogICAgICAgIDs7CiAgICBibG9jaykKICAgICAgICBibG9ja19kZXZpY2UgIiQyIiAiJDMiCiAgICAgICAgOzsKICAgIHVuYmxvY2spCiAgICAgICAgdW5ibG9ja19kZXZpY2UgIiQyIiAiJDMiCiAgICAgICAgOzsKICAgIGxpc3QpCiAgICAgICAgbGlzdF9kZXZpY2VzCiAgICAgICAgOzsKICAgIHN0YXR1cykKICAgICAgICBjaGVja19zdGF0dXMgIiQyIgogICAgICAgIDs7CiAgICBsb2cpCiAgICAgICAgdmlld19sb2cKICAgICAgICA7OwogICAgY2xlYXIpCiAgICAgICAgY2xlYXJfYWxsCiAgICAgICAgOzsKICAgIGhlbHB8LS1oZWxwfC1oKQogICAgICAgIHNob3dfaGVscAogICAgICAgIDs7CiAgICAqKQogICAgICAgIGVjaG8gIkVycm9yOiBJbnZhbGlkIGNvbW1hbmQiCiAgICAgICAgc2hvd19oZWxwCiAgICAgICAgZXhpdCAxCiAgICAgICAgOzsKZXNhYwpgYGAKCioqSW5zdGFsbCB0aGUgc2NyaXB0OioqCgpgYGBiYXNoCiMgU1NIIGludG8gT3BlbldSVApzc2ggcm9vdEAxMC4wLjAuMjQ2CgojIENyZWF0ZSB0aGUgc2NyaXB0CnZpIC9yb290L2RldmljZS1jb250cm9sLnNoCiMgUGFzdGUgdGhlIGNvbnRlbnQgYWJvdmUKCiMgTWFrZSBleGVjdXRhYmxlCmNobW9kICt4IC9yb290L2RldmljZS1jb250cm9sLnNoCgojIEluaXRpYWxpemUgdGhlIHN5c3RlbQovcm9vdC9kZXZpY2UtY29udHJvbC5zaCBpbml0CmBgYAoKIyMjIDMuMiBNYWtlIEJsb2NraW5nIFBlcnNpc3RlbnQKCkFkZCB0byBgL2V0Yy9maXJld2FsbC51c2VyYCB0byBzdXJ2aXZlIHJlYm9vdHM6CgpgYGBiYXNoCnZpIC9ldGMvZmlyZXdhbGwudXNlcgpgYGAKCkFkZDoKYGBgYmFzaAojIERldmljZSBibG9ja2luZyBzeXN0ZW0gLSBwZXJzaXN0ZW50IGFjcm9zcyByZWJvb3RzCmlwc2V0IGNyZWF0ZSBibG9ja2VkX2RldmljZXMgaGFzaDppcCB0aW1lb3V0IDAgY29tbWVudCAtZXhpc3QKaXB0YWJsZXMgLUkgRk9SV0FSRCAtbSBzZXQgLS1tYXRjaC1zZXQgYmxvY2tlZF9kZXZpY2VzIHNyYyAtaiBSRUpFQ1QKYGBgCgpSZXN0YXJ0IGZpcmV3YWxsOgpgYGBiYXNoCi9ldGMvaW5pdC5kL2ZpcmV3YWxsIHJlc3RhcnQKYGBgCgojIyMgMy4zIFVzYWdlIEV4YW1wbGVzCgpgYGBiYXNoCiMgQmxvY2sga2lkcyB0YWJsZXQgYXQgYmVkdGltZQovcm9vdC9kZXZpY2UtY29udHJvbC5zaCBibG9jayAxMC4wLjAuMTAwICJLaWRzIFRhYmxldCIKCiMgVW5ibG9jayBpbiB0aGUgbW9ybmluZwovcm9vdC9kZXZpY2UtY29udHJvbC5zaCB1bmJsb2NrIDEwLjAuMC4xMDAKCiMgQ2hlY2sgaWYgZGV2aWNlIGlzIGJsb2NrZWQKL3Jvb3QvZGV2aWNlLWNvbnRyb2wuc2ggc3RhdHVzIDEwLjAuMC4xMDAKCiMgTGlzdCBhbGwgY3VycmVudGx5IGJsb2NrZWQgZGV2aWNlcwovcm9vdC9kZXZpY2UtY29udHJvbC5zaCBsaXN0CgojIFZpZXcgYWN0aW9uIGhpc3RvcnkKL3Jvb3QvZGV2aWNlLWNvbnRyb2wuc2ggbG9nCmBgYAoKIyMjIDMuNCBTY2hlZHVsZWQgQWNjZXNzIENvbnRyb2wgKEF1dG9tYXRpYyBCbG9ja2luZykKClNldCB1cCBhdXRvbWF0aWMgYmxvY2tpbmcvdW5ibG9ja2luZyB2aWEgY3JvbjoKCmBgYGJhc2gKY3JvbnRhYiAtZQpgYGAKCkFkZCBlbnRyaWVzOgpgYGBjcm9uCiMgQmxvY2sga2lkcyBkZXZpY2VzIGF0IDkgUE0gZXZlcnkgZGF5CjAgMjEgKiAqICogL3Jvb3QvZGV2aWNlLWNvbnRyb2wuc2ggYmxvY2sgMTAuMC4wLjEwMCAiS2lkcyBUYWJsZXQiCjAgMjEgKiAqICogL3Jvb3QvZGV2aWNlLWNvbnRyb2wuc2ggYmxvY2sgMTAuMC4wLjExMCAiR2FtaW5nIENvbnNvbGUiCgojIFVuYmxvY2sga2lkcyBkZXZpY2VzIGF0IDcgQU0gZXZlcnkgZGF5CjAgNyAqICogKiAvcm9vdC9kZXZpY2UtY29udHJvbC5zaCB1bmJsb2NrIDEwLjAuMC4xMDAKMCA3ICogKiAqIC9yb290L2RldmljZS1jb250cm9sLnNoIHVuYmxvY2sgMTAuMC4wLjExMAoKIyBCbG9jayBnYW1pbmcgZGV2aWNlcyBkdXJpbmcgc2Nob29sIGhvdXJzIChNb24tRnJpIDggQU0gLSAzIFBNKQowIDggKiAqIDEtNSAvcm9vdC9kZXZpY2UtY29udHJvbC5zaCBibG9jayAxMC4wLjAuMTEwICJHYW1pbmcgQ29uc29sZSIKMCAxNSAqICogMS01IC9yb290L2RldmljZS1jb250cm9sLnNoIHVuYmxvY2sgMTAuMC4wLjExMAoKIyBXZWVrZW5kIGdhbWluZyBsaW1pdHMgKG5vb24tOHBtIG9ubHkgb24gU2F0L1N1bikKMCAyMCAqICogNiwwIC9yb290L2RldmljZS1jb250cm9sLnNoIGJsb2NrIDEwLjAuMC4xMTAgIkdhbWluZyBDb25zb2xlIgowIDEyICogKiA2LDAgL3Jvb3QvZGV2aWNlLWNvbnRyb2wuc2ggdW5ibG9jayAxMC4wLjAuMTEwCmBgYAoKLS0tCgojIyBQYXJ0IDQ6IFRQLUxpbmsgQXJjaGVyIEFYNzIgUHJvIENvbmZpZ3VyYXRpb24gKEFQIE1vZGUpCgoqKkFib3V0IFdpRmkgNiAoODAyLjExYXgpOioqCgpUaGUgVFAtTGluayBBcmNoZXIgQVg3MiBQcm8gaXMgYSBXaUZpIDYgcm91dGVyIHdpdGggc2lnbmlmaWNhbnQgYWR2YW50YWdlcyBvdmVyIG9sZGVyIFdpRmkgNSAoODAyLjExYWMpIGRldmljZXM6CgoqKkJlbmVmaXRzOioqCi0gKipGYXN0ZXIgc3BlZWRzKio6IFVwIHRvIDI0MDIgTWJwcyBvbiA1R0h6LCA1NzQgTWJwcyBvbiAyLjRHSHoKLSAqKkJldHRlciBlZmZpY2llbmN5Kio6IE9GRE1BIGFsbG93cyBtdWx0aXBsZSBkZXZpY2VzIHRvIHNoYXJlIGNoYW5uZWxzIGVmZmljaWVudGx5Ci0gKipJbXByb3ZlZCByYW5nZSoqOiBCZXR0ZXIgcGVyZm9ybWFuY2UgYXQgZGlzdGFuY2UKLSAqKlJlZHVjZWQgaW50ZXJmZXJlbmNlKio6IEJTUyBDb2xvcmluZyBoZWxwcyBkaXN0aW5ndWlzaCB5b3VyIG5ldHdvcmsgZnJvbSBuZWlnaGJvcnMKLSAqKkJhdHRlcnkgc2F2aW5ncyoqOiBUYXJnZXQgV2FrZSBUaW1lIChUV1QpIGZvciBJb1QgZGV2aWNlcwotICoqTW9yZSBkZXZpY2VzKio6IEJldHRlciBoYW5kbGluZyBvZiBtYW55IHNpbXVsdGFuZW91cyBjb25uZWN0aW9ucwoKKipDb21wYXRpYmlsaXR5IE5vdGVzOioqCi0gRnVsbHkgYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIFdpRmkgNSwgV2lGaSA0IGRldmljZXMKLSBPbGRlciBkZXZpY2VzIHdpbGwgY29ubmVjdCBidXQgdXNlIHRoZWlyIG5hdGl2ZSBXaUZpIHN0YW5kYXJkCi0gV1BBMyByZWNvbW1lbmRlZCBidXQgV1BBMi9XUEEzIE1peGVkIG1vZGUgZW5zdXJlcyBvbGRlciBkZXZpY2UgY29tcGF0aWJpbGl0eQotIEFsbCB5b3VyIGV4aXN0aW5nIGRldmljZXMgd2lsbCB3b3JrLCBidXQgV2lGaSA2IGRldmljZXMgZ2V0IHRoZSBmdWxsIGJlbmVmaXQKCiMjIyA0LjEgSW1wb3J0YW50OiBSZWNvbmZpZ3VyZSBUUC1MaW5rIGFzIEFjY2VzcyBQb2ludAoKVGhlIFRQLUxpbmsgbXVzdCBiZSBzZXQgdG8gKipBY2Nlc3MgUG9pbnQgbW9kZSoqIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIE9wZW5XUlQuCgoxLiAqKkNvbm5lY3QgdG8gVFAtTGluazoqKgogICAtIENvbm5lY3QgY29tcHV0ZXIgZGlyZWN0bHkgdG8gVFAtTGluayBMQU4gcG9ydAogICAtIEFjY2VzczogYGh0dHA6Ly8xOTIuMTY4LjAuMWAgb3IgYGh0dHA6Ly90cGxpbmt3aWZpLm5ldGAKICAgLSBEZWZhdWx0IGxvZ2luOiBgYWRtaW4vYWRtaW5gCgoyLiAqKkNoYW5nZSBPcGVyYXRpb24gTW9kZToqKgogICBgYGAKICAgQWR2YW5jZWQg4oaSIFN5c3RlbSBUb29scyDihpIgT3BlcmF0aW9uIE1vZGUKICAgU2VsZWN0OiAiQWNjZXNzIFBvaW50IgogICBDbGljayAiU2F2ZSIKICAgYGBgCiAgIAogICAqKk9SIE1hbnVhbCBDb25maWd1cmF0aW9uOioqCiAgIAozLiAqKkRpc2FibGUgREhDUCBTZXJ2ZXI6KioKICAgYGBgCiAgIEFkdmFuY2VkIOKGkiBOZXR3b3JrIOKGkiBESENQIFNlcnZlcgogICBVbmNoZWNrICJFbmFibGUgREhDUCBTZXJ2ZXIiCiAgIFNhdmUKICAgYGBgCgo0LiAqKlNldCBTdGF0aWMgSVA6KioKICAgYGBgCiAgIEFkdmFuY2VkIOKGkiBOZXR3b3JrIOKGkiBMQU4KICAgSVAgQWRkcmVzczogMTAuMC4wLjI1NAogICBTdWJuZXQgTWFzazogMjU1LjI1NS4yNTUuMAogICBHYXRld2F5OiAxMC4wLjAuMjQ2CiAgIFByaW1hcnkgRE5TOiAxMC4wLjAuMjQ1CiAgIFNlY29uZGFyeSBETlM6IDEwLjAuMC4yNDYKICAgU2F2ZSAmIFJlYm9vdAogICBgYGAKCjUuICoqUmVjb25uZWN0IGFmdGVyIHJlYm9vdDoqKgogICAtIE5ldyBhZGRyZXNzOiBgaHR0cDovLzEwLjAuMC4yNTRgCgojIyMgNC4yIENvbmZpZ3VyZSBXaUZpIG9uIFRQLUxpbmsgQVg3MiBQcm8gKFdpRmkgNikKCioqSW1wb3J0YW50IFdpRmkgNiBGZWF0dXJlczoqKgotIDgwMi4xMWF4IHN1cHBvcnQgKFdpRmkgNikKLSBPRkRNQSBmb3IgYmV0dGVyIGVmZmljaWVuY3kKLSBNVS1NSU1PIChNdWx0aS1Vc2VyIE1JTU8pCi0gVGFyZ2V0IFdha2UgVGltZSAoVFdUKSBmb3IgSW9UIGRldmljZXMKLSAxMDI0LVFBTSBMB3IgaGlnaGVyIHNwZWVkcwotIEJTUyBDb2xvcmluZyB0byByZWR1Y2UgaW50ZXJmZXJlbmNlCgoxLiAqKjIuNEdIeiBXaUZpIDY6KioKICAgYGBgCiAgIFdpcmVsZXNzIOKGkiBXaXJlbGVzcyBTZXR0aW5ncyAoMi40R0h6KQogICBTU0lEOiBZb3VyTmV0d29ya05hbWUKICAgQ2hhbm5lbDogMSwgNiwgb3IgMTEgKGxlYXN0IGNvbmdlc3RlZCkKICAgQ2hhbm5lbCBXaWR0aDogMjBNSHogb3IgNDBNSHogKDIwTUh6IHJlY29tbWVuZGVkIGZvciBjb21wYXRpYmlsaXR5KQogICBNb2RlOiA4MDIuMTFheCgoV2lGaSA2KQogICBNYXggVFggUmF0ZTogNTc0IE1icHMKICAgRW5hYmxlIFdpcmVsZXNzOiDinJMKICAgRW5hYmxlIFNTSUQgQnJvYWRjYXN0OiDinJMKICAgRW5hYmxlIE9GRE1BOiDinJMKICAgRW5hYmxlIE1VLU1JTU86IOKckwogICBFbmFibGUgVGFyZ2V0IFdha2UgVGltZTog4pyTIChnb29kIGZvciBJb1QgZGV2aWNlcykKICAgYGBgCgoyLiAqKjVHSHogV2lGaSA2OioqCiAgIGBgYAogICBXaXJlbGVzcyDihpIgV2lyZWxlc3MgU2V0dGluZ3MgKDVHSHopCiAgIFNTSUQ6IFlvdXJOZXR3b3JrTmFtZS01RyAob3Igc2FtZSBhcyAyLjRHSHogZm9yIHNlYW1sZXNzIHJvYW1pbmcpCiAgIENoYW5uZWw6IDM2LCA0MCwgNDQsIDQ4LCAxNDksIDE1MywgMTU3LCAxNjEgKGNoZWNrIGxvY2FsIHJlZ3VsYXRpb25zKQogICBDaGFubmVsIFdpZHRoOiA4ME1IeiAob3IgMTYwTUh6IGlmIHN1cHBvcnRlZCBhbmQgbm8gaW50ZXJmZXJlbmNlKQogICBNb2RlOiA4MDIuMTFheCggV2lGaSA2KQogICBNYXggVFggUmF0ZTogMjQwMiBNYnBzICh3aXRoIDgwTUh6KSBvciA0ODA0IE1icHMgKHdpdGggMTYwTUh6KQogICBFbmFibGUgV2lyZWxlc3M6IOKckwogICBFbmFibGUgU1NJRCBCcm9hZGNhc3Q6IOKckwogICBFbmFibGUgT0ZETUE6IOKckwogICBFbmFibGUgTVUtTUlNTzog4pyTCiAgIEVuYWJsZSBCU1MgQ29sb3Jpbmc6IOKckwogICBFbmFibGUgVGFyZ2V0IFdha2UgVGltZTog4pyTCiAgIEVuYWJsZSBCZWFtZm9ybWluZzog4pyTCiAgIGBgYAoKKipXaUZpIDYgQ2hhbm5lbCBXaWR0aCBSZWNvbW1lbmRhdGlvbnM6KioKLSAqKjIuNEdIeioqOiBVc2UgMjBNSHogZm9yIGJldHRlciBjb21wYXRpYmlsaXR5IGFuZCBsZXNzIGludGVyZmVyZW5jZQotICoqNUdIeioqOiBVc2UgODBNSHogZm9yIGJlc3QgYmFsYW5jZSBvZiBzcGVlZCBhbmQgY29tcGF0aWJpbGl0eQotICoqNUdIeioqOiBVc2UgMTYwTUh6IG9ubHkgaWYgeW91IGhhdmUgY2xlYXIgY2hhbm5lbHMgYW5kIG5lZWQgbWF4aW11bSBzcGVlZAotIENoZWNrIGZvciBpbnRlcmZlcmVuY2U6IDE2ME1IeiByZXF1aXJlcyA4IGNvbnRpZ3VvdXMgY2hhbm5lbHMKCjMuICoqV2lGaSBTZWN1cml0eSAoYm90aCBiYW5kcyk6KioKICAgYGBgCiAgIFdpcmVsZXNzIOKGkiBXaXJlbGVzcyBTZWN1cml0eQogICBWZXJzaW9uOiBXUEEzLVBlcnNvbmFsIChvciBXUEEyL1dQQTMgTWl4ZWQgZm9yIG9sZGVyIGRldmljZXMpCiAgIEVuY3J5cHRpb246IEFFUwogICBXaXJlbGVzcyBQYXNzd29yZDogW1N0cm9uZyBwYXNzd29yZCAxMisgY2hhcmFjdGVyc10KICAgR3JvdXAgS2V5IFVwZGF0ZSBQZXJpb2Q6IDM2MDAgc2Vjb25kcwogICBFbmFibGUgTWFuYWdlbWVudCBGcmFtZSBQcm90ZWN0aW9uOiDinJMgKFdQQTMgZmVhdHVyZSkKICAgYGBgCgoqKldpRmkgNiBPcHRpbWl6YXRpb24gU2V0dGluZ3M6KioKICAgYGBgCiAgIEFkdmFuY2VkIOKGkiBXaUZpIDYgU2V0dGluZ3MKICAgRW5hYmxlIE9GRE1BOiDinJMgKGltcHJvdmVzIGVmZmljaWVuY3kgd2l0aCBtYW55IGRldmljZXMpCiAgIEVuYWJsZSBNVS1NSU1POiDinJMgKHNpbXVsdGFuZW91cyBkYXRhIHRvIG11bHRpcGxlIGRldmljZXMpCiAgIEVuYWJsZSBCU1MgQ29sb3Jpbmc6IOKckwKocmVkdWNlcyBpbnRlcmZlcmVuY2UgZnJvbSBuZWFyYnkgbmV0d29ya3MpCiAgIEVuYWJsZSBUV1Q6IOKckwKoc2F2ZXMgYmF0dGVyeSBvbiBJb1QvbW9iaWxlIGRldmljZXMpCiAgIFRyYW5zbWl0IFBvd2VyOiBIaWdoIChhZGp1c3QgaWYgbmVlZGVkKQogICBTbWFydCBDb25uZWN0OiBEaXNhYmxlZCAobGV0IGRldmljZXMgY2hvb3NlIGJhbmQgYmFzZWQgb24geW91ciBTU0lEIHNldHVwKQogICBgYGAKCiMjIyA0LjMgUGh5c2ljYWwgQ29ubmVjdGlvbgoKKipDb25uZWN0IFRQLUxpbmsgdG8gT3BlbldSVDoqKgoKYGBgCk9wZW5XUlQgTEFOIFBvcnQg4oaSIFRQLUxpbmsgTEFOIFBvcnQgKE5PVCBXQU4gcG9ydCEpCmBgYAoK4pqg77iPICoqQ1JJVElDQUwqKjogQ29ubmVjdCB0byBhICoqTEFOIHBvcnQqKiBvbiB0aGUgVFAtTGluaywgTk9UIHRoZSBXQU4vSW50ZXJuZXQgcG9ydC4KCiMjIyA0LjQgVGVzdCBUUC1MaW5rIENvbm5lY3Rpb24KCjEuIENvbm5lY3QgZGV2aWNlIHRvIFRQLUxpbmsgV2lGaQoyLiBDaGVjayB5b3UgcmVjZWl2ZToKICAgLSBJUDogMTAuMC4wLnggKGZyb20gT3BlbldSVCBESENQKQogICAtIEdhdGV3YXk6IDEwLjAuMC4yNDYgKE9wZW5XUlQpCiAgIC0gRE5TOiAxMC4wLjAuMjQ1IChBZEd1YXJkKQozLiBUZXN0IGludGVybmV0IGFjY2VzcwogIDQuIEFjY2VzcyBUUC1MaW5rIGFkbWluOiBgaHR0cDovLzEwLjAuMC4yNTRgCgotLS0KCiMjIFBhcnQgNTogQWRHdWFyZCBIb21lIC0gQ29tcGxldGUgU2V0dXAKCiMjIyA1LjEgSW5zdGFsbGF0aW9uIE9wdGlvbnMKCioqT3B0aW9uIEE6IERvY2tlciAoUmVjb21tZW5kZWQpKioKCmBgYGJhc2gKZG9ja2VyIHJ1biAtZCBcCiAgLS1uYW1lIGFkZ3VhcmRob21lIFwKICAtLXJlc3RhcnQgdW5sZXNzLXN0b3BwZWQgXAogIC0taG9zdG5hbWUgYWRndWFyZCBcCiAgLXYgL29wdC9hZGd1YXJkaG9tZS93b3JrOi9vcHQvYWRndWFyZGhvbWUvd29yayBcCiAgLXYgL29wdC9hZGd1YXJkaG9tZS9jb25mOi9vcHQvYWRndWFyZGhvbWUvY29uZiBcCiAgLXAgMTAuMC4wLjI0NTo1Mzo1My90Y3AgXAogIC1wIDEwLjAuMC4yNDU6NTM6NTMvdWRwIFwKICAtcCAxMC4wLjAuMjQ1OjMwMDA6MzAwMC90Y3AgXAogIC1wIDEwLjAuMC4yNDU6NDQzOjQ0My90Y3AgXAogIC1wIDEwLjAuMC4yNDU6ODUzOjg1My90Y3AgXAogIC1lIFRaPUF1c3RyYWxpYS9NZWxib3VybmUgXAogIGFkZ3VhcmQvYWRndWFyZGhvbWUKYGBgCgoqKk9wdGlvbiBCOiBOYXRpdmUgTGludXggSW5zdGFsbCoqCgpgYGBiYXNoCmN1cmwgLXMgLVMgLUwgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0FkZ3VhcmRUZWFtL0FkR3VhcmRIb21lL21hc3Rlci9zY3JpcHRzL2luc3RhbGwuc2ggfCBzaCAtcyAtLSAtdgpgYGAKCioqT3B0aW9uIEM6IFdpbmRvd3MqKgoKMS4gRG93bmxvYWQgZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL0FkZ3VhcmRUZWFtL0FkR3VhcmRIb21lL3JlbGVhc2VzCjIuIEV4dHJhY3QgdG8gYEM6XEFkR3VhcmRIb21lYAozLiBSdW4gYEFkR3VhcmR \ No newline at end of file