# spf_codemirror v1.0 # CodeMirror syntax-highlighting + Emmet code-completion (HTML & CSS) # Simon Finch # https://github.com/spiffin/spf_codemirror # ...................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ...................................................................... YToxMjp7czo0OiJuYW1lIjtzOjE0OiJzcGZfY29kZW1pcnJvciI7czo3OiJ2ZXJzaW9uIjtz OjM6IjEuMCI7czo2OiJhdXRob3IiO3M6MTE6IlNpbW9uIEZpbmNoIjtzOjEwOiJhdXRob3Jf dXJpIjtzOjQxOiJodHRwczovL2dpdGh1Yi5jb20vc3BpZmZpbi9zcGZfY29kZW1pcnJvciI7 czoxMToiZGVzY3JpcHRpb24iO3M6Njc6IkNvZGVNaXJyb3Igc3ludGF4LWhpZ2hsaWdodGlu ZyArIEVtbWV0IGNvZGUtY29tcGxldGlvbiAoSFRNTCAmIENTUykiO3M6NToib3JkZXIiO3M6 MToiOSI7czo0OiJ0eXBlIjtzOjE6IjMiO3M6NToiZmxhZ3MiO3M6MToiMiI7czo4OiJ0ZXh0 cGFjayI7czozNDI6IiNAYWRtaW4KI0BzcGZfY29kZW1pcnJvcgojQGxhbmd1YWdlIGVuLWdi CnNwZl9jb2RlbWlycm9yX2VtbWV0ID0+IENvZGVNaXJyb3IgZW5hYmxlIEVtbWV0CnNwZl9j b2RlbWlycm9yX2VudGVyX2ZzID0+IENvZGVNaXJyb3IgZW50ZXIgZnVsbC1zY3JlZW4gaG90 LWtleQpzcGZfY29kZW1pcnJvcl9leGl0X2ZzID0+IENvZGVNaXJyb3IgZXhpdCBmdWxsLXNj cmVlbiBob3Qta2V5CnNwZl9jb2RlbWlycm9yX2ZvbnRfc2l6ZSA9PiBDb2RlTWlycm9yIGZv bnQgc2l6ZQpzcGZfY29kZW1pcnJvcl90aGVtZSA9PiBDb2RlTWlycm9yIHRoZW1lCnNwZl9j b2RlbWlycm9yX3VybCA9PiBDb2RlTWlycm9yIFVSTCI7czo0OiJoZWxwIjtzOjQyOTg6Imgx LiBzcGZfY29kZW1pcnJvcgoKcC4gIkNvZGVNaXJyb3IiOmh0dHA6Ly9jb2RlbWlycm9yLm5l dCBzeW50YXgtaGlnaGxpZ2h0aW5nIGFuZCAiRW1tZXQiOmh0dHA6Ly9kb2NzLmVtbWV0Lmlv IGNvZGUtY29tcGxldGlvbiBwbHVnaW4gZm9yIFRleHRwYXR0ZXJuIGFkbWluLgoKcC4gRWRp dCBwYWdlcywgZm9ybXMsIGNzcywgamF2YXNjcmlwdCAoYW5kIG1vcmUpIGZ1bGwtc2NyZWVu LCBpbiB5b3VyIGJyb3dzZXIsIHdpdGggYSBjaG9pY2Ugb2Ygc3ludGF4LWhpZ2hsaWdodGlu ZyBhbmQgY29kZS1jb21wbGV0aW9uLgoKcC4gQ3VzdG9taXNhYmxlIHZpYSBwcmVmZXJlbmNl czogY2hvb3NlIGEgdGhlbWUsIGZvbnQtc2l6ZSBhbmQgZnVsbC1zY3JlZW4gaG90LWtleXMu Cgo8aHIgPgoKaDIuIEZlYXR1cmVzCgojIEFkZHMgIkNvZGVNaXJyb3IiOmh0dHA6Ly9jb2Rl bWlycm9yLm5ldCBzeW50YXgtaGlnaGxpZ2h0aW5nIHRvIHRleHRhcmVhcyBpbiBUZXh0cGF0 dGVybidzIEZvcm1zLCBQYWdlcyBhbmQgU3R5bGUgdGFiczsKIyBBbHNvIHRvIEphdmFTY3Jp cHQgdGFiICgic3BmX2pzIjpodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3Bp Yy5waHA/aWQ9Mzc4NDkgcmVxdWlyZWQpLCBFeHRlcm5hbCBGaWxlcyB0YWIgKCJzcGZfZXh0 IjpodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/aWQ9MzgwMzIg cmVxdWlyZWQpLCBhbmQgUGx1Z2luIGNvbXBvc2VyICgiaWVkX3BsdWdpbl9jb21wb3NlciI6 aHR0cDovL2ZvcnVtLnRleHRwYXR0ZXJuLmNvbS92aWV3dG9waWMucGhwP2lkPTE0ODk4IHJl cXVpcmVkKTsKIyBDb25maWd1cmFibGUgcHJlZmVyZW5jZXMgdmlhIEFkbWluID4gUHJlZmVy ZW5jZXMgPiBBZHZhbmNlZDsKIyBDb2RlLWNvbXBsZXRpb24gYWRkZWQgdG8gSFRNTCAmIENT UyAgY291cnRlc3kgb2YgIkVtbWV0IjpodHRwOi8vZG9jcy5lbW1ldC5pby4KCjxociAvPgoK aDIuIFVwZ3JhZGluZyBmcm9tIHByZXZpb3VzIHZlcnNpb25zCgojIFRoaXMgdmVyc2lvbiBv ZiB0aGUgcGx1Z2luICgxLjApIHJlcXVpcmVzIHZlcnNpb24gNS4wIG9mIENvZGVNaXJyb3Iu IElmIHlvdSBoYXZlIGFuIG9sZGVyIGluc3RhbGxhdGlvbiwgdHJhc2ggaXQuCgo8aHIgLz4K CmgyLiBDb2RlTWlycm9yIGluc3RhbGxhdGlvbgoKIyAiRG93bmxvYWQgdGhlIGxhdGVzdCBy ZWxlYXNlIjpodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci56aXAgb2YgQ29kZU1p cnJvciwgdW56aXAsIGFuZCB1cGxvYWQgdGhlIGVudGlyZSBkaXJlY3RvcnkgKHBlcmhhcHMg cmVuYW1pbmcgaXQgdG8gJ2NvZGVtaXJyb3InKSB0byB5b3VyIHdlYiBzZXJ2ZXIuCiMgVGhl IGRlZmF1bHQgbG9jYXRpb24gaXMgeW91ci13ZWItcm9vdC9jb2RlbWlycm9yIC0gYWNjZXNz aWJsZSB2aWEgaHR0cDovL3lvdXIuc2VydmVyL2NvZGVtaXJyb3IuCiMgSWYgeW91IGNob3Nl IGFuIGFsdGVybmF0aXZlIGxvY2F0aW9uIChlLmcuIGEgJ3ZlbmRvcicgZGlyZWN0b3J5KSB5 b3UgbmVlZCB0byBzZXQgaXQgaW4gdGhlIFByZWZzLgojIEluc3RhbGwgdGhlIHBsdWdpbjog c3BmX2NvZGVtaXJyb3IudHh0IGZyb20gdGhlICJzcGZfY29kZW1pcnJvciByZXBvIjpodHRw czovL2dpdGh1Yi5jb20vc3BpZmZpbi9zcGZfY29kZW1pcnJvci4KIyBDaGVjayB0aGUgUHJl ZnMgKEFkbWluID4gUHJlZmVyZW5jZXMgPiBBZHZhbmNlZCksIGxlYXZlIEVtbWV0IGRpc2Fi bGVkIChzZWUgbmV4dCBzdGVwKSwgYW5kIGFjdGl2YXRlLgoKPGhyIC8+CgpoMi4gRW1tZXQg aW5zdGFsbGF0aW9uCgojIERvd25sb2FkIGVtbWV0Lm1pbi5qcyBmcm9tIHRoZSAic3BmX2Nv ZGVtaXJyb3IgcmVwbyI6aHR0cHM6Ly9naXRodWIuY29tL3NwaWZmaW4vc3BmX2NvZGVtaXJy b3IgLSBvciAiYnVpbGQgeW91ciBvd24gd2l0aCBucG0gYW5kIGd1bHAiOmh0dHBzOi8vZ2l0 aHViLmNvbS9lbW1ldGlvL2NvZGVtaXJyb3IKIyBQdXQgZW1tZXQubWluLmpzIGluc2lkZSB5 b3VyIGNvZGVtaXJyb3IgZGlyZWN0b3J5LiBUaGF0J3MgaXQuCiMgRW1tZXQgaXMgZGlzYWJs ZWQgYnkgZGVmYXVsdCAoZm9yIHNwZWVkKS4KIyBZb3UgY2FuIGVuYWJsZS9kaXNhYmxlIGl0 IGluIHRoZSBQcmVmcyAoQWRtaW4gPiBQcmVmZXJlbmNlcyA+IEFkdmFuY2VkKS4KCgo8aHIg Lz4KCmgyLiBDb2RlTWlycm9yL0VtbWV0IHVwZ3JhZGUKCiMgWW91IGNhbiBub3cgZWFzaWx5 IHVwZ3JhZGUgQ29kZU1pcnJvciAoNS4wIGFzIG9mIE1hcmNoIDIwMTUpLgojICJEb3dubG9h ZCB0aGUgbGF0ZXN0IHJlbGVhc2UiOmh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9y LnppcCwgdW56aXAsIGFuZCByZXBsYWNlIHlvdXIgb2xkIGNvZGVtaXJyb3IgZGlyZWN0b3J5 LgojIFRvIHVwZ3JhZGUgRW1tZXQsIGdvIHRvIHRoZSAiQ29kZU1pcnJvciBwbHVnaW4gcmVw byI6aHR0cHM6Ly9naXRodWIuY29tL2VtbWV0aW8vY29kZW1pcnJvciwgYW5kIGZvbGxvdyB0 aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zLiBNYWtlIHN1cmUgdGhlIGpzIGZpbGUgaW4gbWluaWZp ZWQgYW5kIG5hbWVkIGVtbWV0Lm1pbi5qcy4KIyBVcGxvYWQgZW1tZXQubWluLmpzIHRvIHRo ZSBjb2RlbWlycm9yIGRpcmVjdG9yeSBvbiB5b3VyIHNlcnZlciAtIHJlcGxhY2luZyB5b3Vy IHByZXZpb3VzIHZlcnNpb24uCgo8aHIgLz4KCmgyLiBFbW1ldCBub3RlcwoKIyBJbml0aWF0 ZSBjb21wbGV0aW9uIGJ5IGhpdHRpbmcgVEFCIChvciBDbWQrRSkuCiMgVHJ5IHR5cGluZyB0 aGlzOiBAZGl2I3BhZ2U+ZGl2LmxvZ28rdWwjbmF2aWdhdGlvbj5saSo1PmFAIGFuZCB0aGVu IFRBQi4KIyBXb3JrcyB3aXRoIG9wZW5pbmcgYW5kIGNsb3NpbmcgVGV4dHBhdHRlcm4gdGFn cyAodHJ5IHR5cGluZyBAdHhwOmlmX3NlY3Rpb25AIGFuZCB0aGVuIFRBQikuCiMgQ1NTIHNo b3J0Y3V0cyB3b3JrIGV2ZW4gYmV0dGVyIHdpdGggRW1tZXQqIC0gdHJ5IHR5cGluZyBtIGFu ZCB0aGVuIFRBQiBpbiBTdHlsZXMuCiMgIkVtbWV0IGRvY3VtZW50YXRpb24iOmh0dHA6Ly9k b2NzLmVtbWV0LmlvLgoKPGhyIC8+Cgo8ZGl2IGNsYXNzPSJoaXN0b3J5Ij4KCmgyLiBWZXJz aW9uIGhpc3RvcnkKCjEuMCAtIE1hcmNoIDIwMTUKKiBDaGFuZ2VzIGZvciBDb2RlTWlycm9y IDUuMAoqIEFkZGVkIHN1cHBvcnQgZm9yIFBsdWdpbiBDb21wb3NlciAoYWRkIGEgY29tbWVu dGVkIFBIUCB0YWc6IEAvLzw/cGhwQCBhdCBzdGFydCB0byBlbmFibGUpCiogUmVtb3ZlZCBN aW5pZnkgc3VwcG9ydAoqIEVuYWJsZSBvciBkaXNhYmxlIEVtbWV0IChmb3Igc3BlZWQpCgow LjkgLSBPY3RvYmVyIDIwMTQKKiBDaGFuZ2VzIGZvciBDb2RlTWlycm9yIDQuNgoKMC44IC0g SmFudWFyeSAyMDEzCiogQ2hhbmdlcyBmb3IgQ29kZU1pcnJvciAzLjEgJiBFbW1ldCAxLjMu MwoqIEFkZGVkIG1hdGNoLWhpZ2hsaWdodGVyIGZlYXR1cmUgZm9yIFBhZ2VzLCBGb3JtcyAm IEphdmFzY3JpcHQuCiogRml4ZWQgc2VhcmNoIGluIGZ1bGwtc2NyZWVuIG1vZGUuCgowLjcg LSBOb3ZlbWJlciAyMDEyCiogQ29kZSBjbGVhbi11cCwgQ1NTIHR3ZWFrcyAmICJFbW1ldCBk b2N1bWVudGF0aW9uIjpodHRwOi8vZG9jcy5lbW1ldC5pby4KCjAuNiAtIE5vdmVtYmVyIDIw MTIKKiBSZS13cml0dGVuIGZvciBUZXh0cGF0dGVybiA0LjUuMS4KKiBVcGdyYWRlZCB0byBD b2RlTWlycm9yIDIuMzUgYW5kIEVtbWV0LgoqIEZ1bGwtc2NyZWVuIHN1cHBvcnQgLSBoaXQg RjUgKGFuZCBFc2MgdG8gZXhpdCkuCiogQmFzaWMgcHJlZmVyZW5jZXMgdmlhIEFkbWluID4g UHJlZmVyZW5jZXMgPiBBZHZhbmNlZC4KKiBDb2RlTWlycm9yIGZvbGRlciBzdHJ1Y3R1cmUg bm93IG1pcnJvcnMgc3RhbmRhcmQgQ29kZU1pcnJvciBmb3IgZWFzeSB1cGdyYWRlcy4KKiBB dXRvbWF0aWMgTWluaWZ5IHN1cHBvcnQuCgowLjUgLSBNYXkgMjAxMgoqIENTUyBzdXBwb3J0 IGZvciBaZW4gQ29kaW5nIHdpdGhpbiBzdHlsZSB0YWdzLgoKMC40IC0gTWF5IDIwMTIKKiBB ZGRlZCBjb2RlIGJsb2NrIGluZGljYXRvcnM6IEBzcGZfY29kZW1pcnJvciBTVEFSVC9FTkRA LgoqIENvZGUgY2xlYW51cC4KCjAuMyAtIE1heSAyMDEyCiogQWRkZWQgWmVuIENvZGluZyBj b2RlIGNvbXBsZXRpb24gdG8gUGFnZXMgYW5kIEZvcm1zIChIVE1MKS4KKiBVcGdyYWRlZCB0 byBDb2RlTWlycm9yIDIuMjUuCgowLjIgLSBNYXkgMjAxMgoqIENoYW5nZWQgbG9hZCBvcmRl ciAodG8gYWxsb3cgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBwbHVnaW5zKS4KCjAuMSAtIE1h eSAyMDEyCiogZmlyc3QgcmVsZWFzZS4KPC9kaXY+IjtzOjQ6ImNvZGUiO3M6MTI1NzA6Ii8q KiA8P3BocAogKgogKiBzcGZfY29kZW1pcnJvciAtIENvZGVNaXJyb3Igc3ludGF4LWhpZ2hs aWdodGluZyBmb3IgVGV4dHBhdHRlcm4KICoKICogwqkgMjAxNSBTaW1vbiBGaW5jaCAtIGh0 dHBzOi8vZ2l0aHViLmNvbS9zcGlmZmluL3NwZl9jb2RlbWlycm9yCiAqCiAqIExpY2Vuc2Vk IHVuZGVyIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgogKiBodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sCiAqCiAqIFRoYW5rcyB0byBNYXJp am4gKENvZGVNaXJyb3IpLCBTZXJnZXkgKEVtbWV0KSwgRGFsZSAobXJkX2NvZGVNaXJyb3Ip CiAqCiAqIFZlcnNpb24gMS4wIC0tIE1hcmNoIDIwMTUKICovCgppZiAoQHR4cGludGVyZmFj ZSA9PSAnYWRtaW4nKSB7CiAgICBhZGRfcHJpdnMoJ3NwZl9jb2RlbWlycm9yJywnMSwyJyk7 CiAgICByZWdpc3Rlcl9jYWxsYmFjaygnc3BmX2NvZGVtaXJyb3JfaW5zdGFsbHByZWZzJywg J3BsdWdpbl9saWZlY3ljbGUuc3BmX2NvZGVtaXJyb3InLCAnaW5zdGFsbGVkJyk7CiAgICBy ZWdpc3Rlcl9jYWxsYmFjaygnc3BmX2NvZGVtaXJyb3JfcmVtb3ZlcHJlZnMnLCAncGx1Z2lu X2xpZmVjeWNsZS5zcGZfY29kZW1pcnJvcicsICdkZWxldGVkJyk7CiAgICByZWdpc3Rlcl9j YWxsYmFjaygnc3BmX2NtX3ByZWZzJywgJ3BsdWdpbl9saWZlY3ljbGUuc3BmX2NvZGVtaXJy b3InLCAnZW5hYmxlZCcpOwogICAgcmVnaXN0ZXJfY2FsbGJhY2soJ3NwZl90ZXh0YXJlYV9o dG1sJywgJ3BhZ2UnKTsKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCdzcGZfdGV4dGFyZWFfcGhw JywgJ2Zvcm0nKTsKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCdzcGZfdGV4dGFyZWFfY3NzJywg J2NzcycpOwogICAgcmVnaXN0ZXJfY2FsbGJhY2soJ3NwZl90ZXh0YXJlYV9qcycsICdzcGZf anMnKTsKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCdzcGZfdGV4dGFyZWFfcGhwJywgJ3NwZl9l eHQnKTsKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKCdzcGZfdGV4dGFyZWFfcGhwJywgJ2llZF9w bHVnaW5fY29tcG9zZXInKTsKCn0KLyogUHJlZnMgYXJyYXkgKi8KZ2xvYmFsICRwcmVmcywg JHNwZl9jbV9wcmVmczsKaWYoaXNzZXQoJHByZWZzWydzcGZfY29kZW1pcnJvcl91cmwnXSkp IHsKCWlmIChzdHJwb3MoJHByZWZzWydzcGZfY29kZW1pcnJvcl90aGVtZSddLCdzb2xhcml6 ZWQtJykgIT09IGZhbHNlKSB7CgkJJHNwZl9jbV9wcmVmcyA9IGFycmF5KAoJCQknY21fdXJs JyA9PiAkcHJlZnNbJ3NwZl9jb2RlbWlycm9yX3VybCddLAoJCQknY21fdGhlbWVfY2xhc3Mn ID0+IHN0cl9yZXBsYWNlKCItIiwgIiAiLCAkcHJlZnNbJ3NwZl9jb2RlbWlycm9yX3RoZW1l J10pLAoJCQknY21fdGhlbWVfY3NzJyA9PiBzdWJzdHIoJHByZWZzWydzcGZfY29kZW1pcnJv cl90aGVtZSddLCAwLCA5KSwKCQkJJ2NtX2ZzaXplJyA9PiAkcHJlZnNbJ3NwZl9jb2RlbWly cm9yX2ZvbnRfc2l6ZSddLAoJCQknY21fZW50ZXJmcycgPT4gJHByZWZzWydzcGZfY29kZW1p cnJvcl9lbnRlcl9mcyddLAoJCQknY21fZXhpdGZzJyA9PiAkcHJlZnNbJ3NwZl9jb2RlbWly cm9yX2V4aXRfZnMnXSwKCQkJJ2NtX2VtbWV0JyA9PiAkcHJlZnNbJ3NwZl9jb2RlbWlycm9y X2VtbWV0J10sCgkJKTsKCX0gZWxzZSB7CgkJJHNwZl9jbV9wcmVmcyA9IGFycmF5KAoJCQkn Y21fdXJsJyA9PiAkcHJlZnNbJ3NwZl9jb2RlbWlycm9yX3VybCddLAoJCQknY21fdGhlbWVf Y2xhc3MnID0+ICRwcmVmc1snc3BmX2NvZGVtaXJyb3JfdGhlbWUnXSwKCQkJJ2NtX3RoZW1l X2NzcycgPT4gJHByZWZzWydzcGZfY29kZW1pcnJvcl90aGVtZSddLAoJCQknY21fZnNpemUn ID0+ICRwcmVmc1snc3BmX2NvZGVtaXJyb3JfZm9udF9zaXplJ10sCgkJCSdjbV9lbnRlcmZz JyA9PiAkcHJlZnNbJ3NwZl9jb2RlbWlycm9yX2VudGVyX2ZzJ10sCgkJCSdjbV9leGl0ZnMn ID0+ICRwcmVmc1snc3BmX2NvZGVtaXJyb3JfZXhpdF9mcyddLAoJCQknY21fZW1tZXQnID0+ ICRwcmVmc1snc3BmX2NvZGVtaXJyb3JfZW1tZXQnXSwKCQkpOwoJfQp9Ci8qIFNldCBkZWZh dWx0IHByZWZzIG9uIGluc3RhbGwgKi8KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzcGZfY29kZW1p cnJvcl9pbnN0YWxscHJlZnMoJGV2ZW50LCAkc3RlcCkgewpnbG9iYWwgJHByZWZzLCAkc3Rl cDsKJGRlZmF1bHRfdXJsID0gaWh1IC4gImNvZGVtaXJyb3IiOwoKICAgIGlmKCFpc3NldCgk cHJlZnNbJ3NwZl9jb2RlbWlycm9yX3VybCddKSkgewogICAgICAgIHNhZmVfaW5zZXJ0KAog ICAgICAgICAgICAndHhwX3ByZWZzJywKICAgICAgICAgICAgInByZWZzX2lkPTEsCiAgICAg ICAgICAgIG5hbWU9J3NwZl9jb2RlbWlycm9yX3VybCcsCiAgICAgICAgICAgIHZhbD0nJGRl ZmF1bHRfdXJsJywKICAgICAgICAgICAgdHlwZT0xLAogICAgICAgICAgICBldmVudD0nYWRt aW4nLAogICAgICAgICAgICBodG1sPSd0ZXh0X2lucHV0JywKICAgICAgICAgICAgcG9zaXRp b249MjIiCiAgICAgICAgKTsKICAgIH0KICAgIGlmKCFpc3NldCgkcHJlZnNbJ3NwZl9jb2Rl bWlycm9yX3RoZW1lJ10pKSB7CiAgICAgICAgc2FmZV9pbnNlcnQoCiAgICAgICAgICAgICd0 eHBfcHJlZnMnLAogICAgICAgICAgICAicHJlZnNfaWQ9MSwKICAgICAgICAgICAgbmFtZT0n c3BmX2NvZGVtaXJyb3JfdGhlbWUnLAogICAgICAgICAgICB2YWw9J3NvbGFyaXplZC1saWdo dCcsCiAgICAgICAgICAgIHR5cGU9MSwKICAgICAgICAgICAgZXZlbnQ9J2FkbWluJywKICAg ICAgICAgICAgaHRtbD0ndGV4dF9pbnB1dCcsCiAgICAgICAgICAgIHBvc2l0aW9uPTIzIgog ICAgICAgICk7CiAgICB9CiAgICBpZighaXNzZXQoJHByZWZzWydzcGZfY29kZW1pcnJvcl9m b250X3NpemUnXSkpIHsKICAgICAgICBzYWZlX2luc2VydCgKICAgICAgICAgICAgJ3R4cF9w cmVmcycsCiAgICAgICAgICAgICJwcmVmc19pZD0xLAogICAgICAgICAgICBuYW1lPSdzcGZf Y29kZW1pcnJvcl9mb250X3NpemUnLAogICAgICAgICAgICB2YWw9JzEuMWVtJywKICAgICAg ICAgICAgdHlwZT0xLAogICAgICAgICAgICBldmVudD0nYWRtaW4nLAogICAgICAgICAgICBo dG1sPSd0ZXh0X2lucHV0JywKICAgICAgICAgICAgcG9zaXRpb249MjQiCiAgICAgICAgKTsK ICAgIH0KICAgIGlmKCFpc3NldCgkcHJlZnNbJ3NwZl9jb2RlbWlycm9yX2VudGVyX2ZzJ10p KSB7CiAgICAgICAgc2FmZV9pbnNlcnQoCiAgICAgICAgICAgICd0eHBfcHJlZnMnLAogICAg ICAgICAgICAicHJlZnNfaWQ9MSwKICAgICAgICAgICAgbmFtZT0nc3BmX2NvZGVtaXJyb3Jf ZW50ZXJfZnMnLAogICAgICAgICAgICB2YWw9J0Y1JywKICAgICAgICAgICAgdHlwZT0xLAog ICAgICAgICAgICBldmVudD0nYWRtaW4nLAogICAgICAgICAgICBodG1sPSd0ZXh0X2lucHV0 JywKICAgICAgICAgICAgcG9zaXRpb249MjUiCiAgICAgICAgKTsKICAgIH0KICAgIGlmKCFp c3NldCgkcHJlZnNbJ3NwZl9jb2RlbWlycm9yX2V4aXRfZnMnXSkpIHsKICAgICAgICBzYWZl X2luc2VydCgKICAgICAgICAgICAgJ3R4cF9wcmVmcycsCiAgICAgICAgICAgICJwcmVmc19p ZD0xLAogICAgICAgICAgICBuYW1lPSdzcGZfY29kZW1pcnJvcl9leGl0X2ZzJywKICAgICAg ICAgICAgdmFsPSdFc2MnLAogICAgICAgICAgICB0eXBlPTEsCiAgICAgICAgICAgIGV2ZW50 PSdhZG1pbicsCiAgICAgICAgICAgIGh0bWw9J3RleHRfaW5wdXQnLAogICAgICAgICAgICBw b3NpdGlvbj0yNiIKICAgICAgICApOwogICAgfQogICAgaWYoIWlzc2V0KCRwcmVmc1snc3Bm X2NvZGVtaXJyb3JfZW1tZXQnXSkpIHsKICAgICAgICBzYWZlX2luc2VydCgKICAgICAgICAg ICAgJ3R4cF9wcmVmcycsCiAgICAgICAgICAgICJwcmVmc19pZD0xLAogICAgICAgICAgICBu YW1lPSdzcGZfY29kZW1pcnJvcl9lbW1ldCcsCiAgICAgICAgICAgIHZhbD0nMCcsCiAgICAg ICAgICAgIHR5cGU9MSwKICAgICAgICAgICAgZXZlbnQ9J2FkbWluJywKICAgICAgICAgICAg aHRtbD0neWVzbm9yYWRpbycsCiAgICAgICAgICAgIHBvc2l0aW9uPTI3IgogICAgICAgICk7 CiAgICB9Cgp9CgovKiBSZW1vdmUgcHJlZnMgYW5kIHRleHRwYWNrIG9uIGRlbGV0ZSAqLwov LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCmZ1bmN0aW9uIHNwZl9jb2RlbWlycm9yX3JlbW92ZXByZWZzKCRldmVudCwg JHN0ZXApIHsKZ2xvYmFsICRwcmVmcywgJHN0ZXA7CgogICAgaWYoaXNzZXQoJHByZWZzWydz cGZfY29kZW1pcnJvcl91cmwnXSkpIHsKICAgICAgICBzYWZlX2RlbGV0ZSgKICAgICAgICAg ICAgJ3R4cF9wcmVmcycsCiAgICAgICAgICAgICJuYW1lID0gJ3NwZl9jb2RlbWlycm9yX3Vy bCciCiAgICAgICAgKTsKICAgIH0KICAgIGlmKGlzc2V0KCRwcmVmc1snc3BmX2NvZGVtaXJy b3JfdGhlbWUnXSkpIHsKICAgICAgICBzYWZlX2RlbGV0ZSgKICAgICAgICAgICAgJ3R4cF9w cmVmcycsCiAgICAgICAgICAgICJuYW1lID0gJ3NwZl9jb2RlbWlycm9yX3RoZW1lJyIKICAg ICAgICApOwogICAgfQogICAgaWYoaXNzZXQoJHByZWZzWydzcGZfY29kZW1pcnJvcl9mb250 X3NpemUnXSkpIHsKICAgICAgICBzYWZlX2RlbGV0ZSgKICAgICAgICAgICAgJ3R4cF9wcmVm cycsCiAgICAgICAgICAgICJuYW1lID0gJ3NwZl9jb2RlbWlycm9yX2ZvbnRfc2l6ZSciCiAg ICAgICAgKTsKICAgIH0KICAgIGlmKGlzc2V0KCRwcmVmc1snc3BmX2NvZGVtaXJyb3JfZW50 ZXJfZnMnXSkpIHsKICAgICAgICBzYWZlX2RlbGV0ZSgKICAgICAgICAgICAgJ3R4cF9wcmVm cycsCiAgICAgICAgICAgICJuYW1lID0gJ3NwZl9jb2RlbWlycm9yX2VudGVyX2ZzJyIKICAg ICAgICApOwogICAgfQogICAgaWYoaXNzZXQoJHByZWZzWydzcGZfY29kZW1pcnJvcl9leGl0 X2ZzJ10pKSB7CiAgICAgICAgc2FmZV9kZWxldGUoCiAgICAgICAgICAgICd0eHBfcHJlZnMn LAogICAgICAgICAgICAibmFtZSA9ICdzcGZfY29kZW1pcnJvcl9leGl0X2ZzJyIKICAgICAg ICApOwogICAgfQogICAgaWYoaXNzZXQoJHByZWZzWydzcGZfY29kZW1pcnJvcl9lbW1ldCdd KSkgewogICAgICAgIHNhZmVfZGVsZXRlKAogICAgICAgICAgICAndHhwX3ByZWZzJywKICAg ICAgICAgICAgIm5hbWUgPSAnc3BmX2NvZGVtaXJyb3JfZW1tZXQnIgogICAgICAgICk7CiAg ICB9CgogICAgICAgIC8vIGRlbGV0ZSB0aGUgVGV4dHBhY2sKCiAgICAgICAgc2FmZV9kZWxl dGUoCiAgICAgICAgICAgICd0eHBfbGFuZycsCiAgICAgICAgICAgICJldmVudCA9ICdzcGZf Y29kZW1pcnJvciciCiAgICAgICAgKTsKCn0KCi8qIEhUTUwgc2V0dGluZ3MgKFByZXNlbnRh dGlvbiA+IFBhZ2VzIGFuZCBGb3JtcykgKi8KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzcGZfdGV4 dGFyZWFfaHRtbCgkZXZlbnQpIHsKZ2xvYmFsICRwcmVmcywgJHNwZl9jbV9wcmVmczsKZXh0 cmFjdCgkc3BmX2NtX3ByZWZzKTsKc3BmX3RleHRhcmVhX2NvbW1vbigpOwpzcGZfZW1tZXRq cygpOyBzcGZfZWRpdG9yKCk7CiRlbW1ldGpzID0gc3BmX2VtbWV0anMoKTsKJGVkaXRvciA9 IHNwZl9lZGl0b3IoKTsKCiRpZCA9ICcnOwpzd2l0Y2ggKCRldmVudCkgewoJY2FzZSAncGFn ZSc6CgkJJGlkID0gJ2h0bWwnOwoJCWJyZWFrOwoJY2FzZSAnZm9ybSc6CgkJJGlkID0gJ2Zv cm0nOwoJCWJyZWFrOwp9CgokY21maWxlcyA9IDw8PEVPRgpcbjxzY3JpcHQgdHlwZT0idGV4 dC9qYXZhc2NyaXB0IiBzcmM9IiRjbV91cmwvbW9kZS94bWwveG1sLmpzIj48L3NjcmlwdD4K PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJGNtX3VybC9tb2RlL2phdmFz Y3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZh c2NyaXB0IiBzcmM9IiRjbV91cmwvbW9kZS9jc3MvY3NzLmpzIj48L3NjcmlwdD4KPHNjcmlw dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJGNtX3VybC9tb2RlL2h0bWxtaXhlZC9o dG1sbWl4ZWQuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIg c3JjPSIkY21fdXJsL2FkZG9uL3NlYXJjaC9zZWFyY2hjdXJzb3IuanMiPjwvc2NyaXB0Pgo8 c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIkY21fdXJsL2FkZG9uL3NlYXJj aC9tYXRjaC1oaWdobGlnaHRlci5qcyI+PC9zY3JpcHQ+CiRlbW1ldGpzCkVPRjsKCiRjbV9o dG1sID0gPDw8RU9GClxuPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgp2YXIgZWRp dG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo IiRpZCIpLCB7CiAgICBtb2RlOiAndGV4dC9odG1sJywKICAgIHRhYk1vZGU6ICdpbmRlbnQn LAogICAgbGluZVdyYXBwaW5nOiB0cnVlLAogICAgbGluZU51bWJlcnM6IHRydWUsCiAgICB2 aWV3cG9ydE1hcmdpbjogSW5maW5pdHksCiAgICB0aGVtZTogJyRjbV90aGVtZV9jbGFzcycs CiAgICBleHRyYUtleXM6IHsKICAgICAgJyRjbV9lbnRlcmZzJzogZnVuY3Rpb24oY20pIHsK ICAgICAgICBjbS5zZXRPcHRpb24oImZ1bGxTY3JlZW4iLCAhY20uZ2V0T3B0aW9uKCJmdWxs U2NyZWVuIikpOwogICAgICB9LAogICAgICAnJGNtX2V4aXRmcyc6IGZ1bmN0aW9uKGNtKSB7 CiAgICAgICAgaWYgKGNtLmdldE9wdGlvbigiZnVsbFNjcmVlbiIpKSBjbS5zZXRPcHRpb24o ImZ1bGxTY3JlZW4iLCBmYWxzZSk7CiAgICAgIH0KICAgIH0KfSk7CiRlZGl0b3IKPC9zY3Jp cHQ+CjwhLS0gc3BmX2NvZGVtaXJyb3IgRU5EIC0tPlxuCkVPRjsKCmVjaG8gJGNtZmlsZXM7 CmVjaG8gJGNtX2h0bWw7Cn0KCgovKiBDU1Mgc2V0dGluZ3MgKFByZXNlbnRhdGlvbiA+IFN0 eWxlcykgKi8KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQpmdW5jdGlvbiBzcGZfdGV4dGFyZWFfY3NzKCkgewpnbG9i YWwgJHByZWZzLCAkc3BmX2NtX3ByZWZzOwpleHRyYWN0KCRzcGZfY21fcHJlZnMpOwpzcGZf dGV4dGFyZWFfY29tbW9uKCk7CnNwZl9lbW1ldGpzKCk7IHNwZl9lZGl0b3IoKTsKJGVtbWV0 anMgPSBzcGZfZW1tZXRqcygpOwokZWRpdG9yID0gc3BmX2VkaXRvcigpOwoKJGNtZmlsZXMg PSA8PDxFT0YKXG48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIkY21fdXJs L21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny aXB0IiBzcmM9IiRjbV91cmwvYWRkb24vZWRpdC9tYXRjaGJyYWNrZXRzLmpzIj48L3Njcmlw dD4KJGVtbWV0anMKRU9GOwoKJGNtX2NzcyA9IDw8PEVPRgpcbjxzY3JpcHQgdHlwZT0idGV4 dC9qYXZhc2NyaXB0Ij4KdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjc3MiKSwgewogICAgbW9kZTogJ3RleHQvY3NzJywK ICAgIGxpbmVXcmFwcGluZzogdHJ1ZSwKICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgbWF0 Y2hCcmFja2V0cyA6IHRydWUsCiAgICB0aGVtZTogJyRjbV90aGVtZV9jbGFzcycsCiAgICB2 aWV3cG9ydE1hcmdpbjogSW5maW5pdHksCiAgICBleHRyYUtleXM6IHsKICAgICAgJyRjbV9l bnRlcmZzJzogZnVuY3Rpb24oY20pIHsKICAgICAgICBjbS5zZXRPcHRpb24oImZ1bGxTY3Jl ZW4iLCAhY20uZ2V0T3B0aW9uKCJmdWxsU2NyZWVuIikpOwogICAgICB9LAogICAgICAnJGNt X2V4aXRmcyc6IGZ1bmN0aW9uKGNtKSB7CiAgICAgICAgaWYgKGNtLmdldE9wdGlvbigiZnVs bFNjcmVlbiIpKSBjbS5zZXRPcHRpb24oImZ1bGxTY3JlZW4iLCBmYWxzZSk7CiAgICAgIH0K ICAgIH0sCiAgICAvLyBkZWZpbmUgRW1tZXQgb3V0cHV0IHByb2ZpbGUKICAgIHByb2ZpbGU6 ICdodG1sJywKICB9KTsKJGVkaXRvcgo8L3NjcmlwdD4KPCEtLSBzcGZfY29kZW1pcnJvciBF TkQgLS0+XG4KRU9GOwoKZWNobyAkY21maWxlczsKZWNobyAkY21fY3NzOwp9CgovKiBKYXZh U2NyaXB0IHNldHRpbmdzIChQcmVzZW50YXRpb24gPiBKYXZhU2NyaXB0IC1yZXF1aXJlcyBz cGZfanMpICovCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc3BmX3RleHRhcmVhX2pzKCkgewpnbG9i YWwgJHByZWZzLCAkc3BmX2NtX3ByZWZzOwpleHRyYWN0KCRzcGZfY21fcHJlZnMpOwpzcGZf dGV4dGFyZWFfY29tbW9uKCk7CgokY21maWxlcyA9IDw8PEVPRgpcbjxzY3JpcHQgdHlwZT0i dGV4dC9qYXZhc2NyaXB0IiBzcmM9IiRjbV91cmwvbW9kZS9qYXZhc2NyaXB0L2phdmFzY3Jp cHQuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIk Y21fdXJsL2FkZG9uL2VkaXQvbWF0Y2hicmFja2V0cy5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQg dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IiRjbV91cmwvYWRkb24vc2VhcmNoL3NlYXJj aGN1cnNvci5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz cmM9IiRjbV91cmwvYWRkb24vc2VhcmNoL21hdGNoLWhpZ2hsaWdodGVyLmpzIj48L3Njcmlw dD4KRU9GOwoKJGNtX2pzID0gPDw8RU9GClxuPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp cHQiPgp2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoInNwZl9qcyIpLCB7CiAgICBsaW5lV3JhcHBpbmc6IHRydWUsCiAgICBs aW5lTnVtYmVyczogdHJ1ZSwKICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICB0aGVtZTog JyRjbV90aGVtZV9jbGFzcycsCiAgICB2aWV3cG9ydE1hcmdpbjogSW5maW5pdHksCiAgICBl eHRyYUtleXM6IHsKICAgICAgJyRjbV9lbnRlcmZzJzogZnVuY3Rpb24oY20pIHsKICAgICAg ICBjbS5zZXRPcHRpb24oImZ1bGxTY3JlZW4iLCAhY20uZ2V0T3B0aW9uKCJmdWxsU2NyZWVu IikpOwogICAgICB9LAogICAgICAnJGNtX2V4aXRmcyc6IGZ1bmN0aW9uKGNtKSB7CiAgICAg ICAgaWYgKGNtLmdldE9wdGlvbigiZnVsbFNjcmVlbiIpKSBjbS5zZXRPcHRpb24oImZ1bGxT Y3JlZW4iLCBmYWxzZSk7CiAgICAgIH0KICAgIH0KfSk7Cjwvc2NyaXB0Pgo8IS0tIHNwZl9j b2RlbWlycm9yIEVORCAtLT5cbgpFT0Y7CgplY2hvICRjbWZpbGVzOwplY2hvICRjbV9qczsK fQoKLyogUEhQIHNldHRpbmdzIChFeHRlbnNpb25zID4gRXh0ZXJuYWwgRmlsZXMgJiBQbHVn aW4gQ29tcG9zZXIpICovCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZnVuY3Rpb24gc3BmX3RleHRhcmVhX3BocCgk ZXZlbnQpIHsKZ2xvYmFsICRwcmVmcywgJHNwZl9jbV9wcmVmczsKZXh0cmFjdCgkc3BmX2Nt X3ByZWZzKTsKc3BmX3RleHRhcmVhX2NvbW1vbigpOwpzcGZfZW1tZXRqcygpOyBzcGZfZWRp dG9yKCk7CiRlbW1ldGpzID0gc3BmX2VtbWV0anMoKTsKJGVkaXRvciA9IHNwZl9lZGl0b3Io KTsKCiRpZCA9ICcnOwpzd2l0Y2ggKCRldmVudCkgewoJY2FzZSAnZm9ybSc6CgkJJGlkID0g J2Zvcm0nOwoJCWJyZWFrOwoJY2FzZSAnc3BmX2V4dCc6CgkJJGlkID0gJ3NwZl9leHQnOwoJ CWJyZWFrOwoJY2FzZSAnaWVkX3BsdWdpbl9jb21wb3Nlcic6CgkJJGlkID0gJ3BsdWdpbl9l ZGl0b3InOwoJCWJyZWFrOwp9CgokY21maWxlcyA9IDw8PEVPRgpcbjxzY3JpcHQgdHlwZT0i dGV4dC9qYXZhc2NyaXB0IiBzcmM9IiRjbV91cmwvbW9kZS94bWwveG1sLmpzIj48L3Njcmlw dD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJGNtX3VybC9tb2RlL2ph dmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9q YXZhc2NyaXB0IiBzcmM9IiRjbV91cmwvbW9kZS9jc3MvY3NzLmpzIj48L3NjcmlwdD4KPHNj cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJGNtX3VybC9tb2RlL2NsaWtlL2Ns aWtlLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0i JGNtX3VybC9tb2RlL3BocC9waHAuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQv amF2YXNjcmlwdCIgc3JjPSIkY21fdXJsL2FkZG9uL2VkaXQvbWF0Y2hicmFja2V0cy5qcyI+ PC9zY3JpcHQ+CiRlbW1ldGpzCkVPRjsKCiRjbV9waHAgPSA8PDxFT0YKXG48c2NyaXB0IHR5 cGU9InRleHQvamF2YXNjcmlwdCI+CnZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0 QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiJGlkIiksIHsKICAgIGxpbmVXcmFwcGlu ZzogdHJ1ZSwKICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgbWF0Y2hCcmFja2V0czogdHJ1 ZSwKICAgIG1vZGU6ICdhcHBsaWNhdGlvbi94LWh0dHBkLXBocCcsCiAgICBpbmRlbnRVbml0 OiA0LAogICAgaW5kZW50V2l0aFRhYnM6IHRydWUsCiAgICBlbnRlck1vZGU6ICdrZWVwJywK ICAgIHRhYk1vZGU6ICdzaGlmdCcsCiAgICB0aGVtZTogJyRjbV90aGVtZV9jbGFzcycsCiAg ICBleHRyYUtleXM6IHsKICAgICAgJyRjbV9lbnRlcmZzJzogZnVuY3Rpb24oY20pIHsKICAg ICAgICBjbS5zZXRPcHRpb24oImZ1bGxTY3JlZW4iLCAhY20uZ2V0T3B0aW9uKCJmdWxsU2Ny ZWVuIikpOwogICAgICB9LAogICAgICAnJGNtX2V4aXRmcyc6IGZ1bmN0aW9uKGNtKSB7CiAg ICAgICAgaWYgKGNtLmdldE9wdGlvbigiZnVsbFNjcmVlbiIpKSBjbS5zZXRPcHRpb24oImZ1 bGxTY3JlZW4iLCBmYWxzZSk7CiAgICAgIH0KICAgIH0sCiAgICAvLyBkZWZpbmUgRW1tZXQg b3V0cHV0IHByb2ZpbGUKICAgIHByb2ZpbGU6ICdodG1sJywKICB9KTsKJGVkaXRvcgo8L3Nj cmlwdD4KPCEtLSBzcGZfY29kZW1pcnJvciBFTkQgLS0+XG4KRU9GOwoKZWNobyAkY21maWxl czsKZWNobyAkY21fcGhwOwp9CgovKiBDb21tb24gc2V0dGluZ3MgKi8KLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpm dW5jdGlvbiBzcGZfdGV4dGFyZWFfY29tbW9uKCkgewpnbG9iYWwgJHByZWZzLCAkc3BmX2Nt X3ByZWZzOwpleHRyYWN0KCRzcGZfY21fcHJlZnMpOwoKJGNtZmlsZXMgPSA8PDxFT0YKXG48 IS0tIHNwZl9jb2RlbWlycm9yIFNUQVJUIC0tPgo8bGluayBocmVmPSIkY21fdXJsL2xpYi9j b2RlbWlycm9yLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz4KPGxp bmsgaHJlZj0iJGNtX3VybC90aGVtZS8kY21fdGhlbWVfY3NzLmNzcyIgcmVsPSJzdHlsZXNo ZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgLz4KPGxpbmsgaHJlZj0iJGNtX3VybC9hZGRvbi9kaXNw bGF5L2Z1bGxzY3JlZW4uY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiAv Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIkY21fdXJsL2xpYi9jb2Rl bWlycm9yLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNy Yz0iJGNtX3VybC9hZGRvbi9kaXNwbGF5L2Z1bGxzY3JlZW4uanMiPjwvc2NyaXB0PgpFT0Y7 CgovLyBUZXh0cGF0dGVybi1zcGVjaWZpYyBjc3MgYW5kIGpzCiRjbV90eHAgPSA8PDxFT0YK XG48c3R5bGU+Ci8qIEFkZGl0aW9uYWwgc3R5bGVzIGZvciBUZXh0cGF0dGVybiAqLwouQ29k ZU1pcnJvciB7IGZvbnQtZmFtaWx5OiBNZW5sbywgQ29uc29sYXMsICJMaWJlcmF0aW9uIE1v bm8iLCBtb25vc3BhY2U7IGZvbnQtc2l6ZTogJGNtX2ZzaXplOyBoZWlnaHQ6IDM5LjI1NmVt OyBtaW4td2lkdGg6IDU0Ljg3NmVtOyBtYXgtd2lkdGg6IDc4LjI2NGVtOyBib3JkZXI6IDFw eCBzb2xpZDsgYm9yZGVyLWNvbG9yOiAjYmJiICNkZGQgI2RkZCAjYmJiOyB9Ci5Db2RlTWly cm9yLWZ1bGxzY3JlZW4geyB6LWluZGV4OiAxMjsgfQo8L3N0eWxlPgpFT0Y7CgplY2hvICRj bWZpbGVzOwplY2hvICRjbV90eHA7Cn0KCmZ1bmN0aW9uIHNwZl9lbW1ldGpzKCkgewpnbG9i YWwgJHByZWZzLCAkc3BmX2NtX3ByZWZzOwpleHRyYWN0KCRzcGZfY21fcHJlZnMpOwoKICBp Zihpc3NldCgkcHJlZnNbJ3NwZl9jb2RlbWlycm9yX2VtbWV0J10pKSB7CiAgICBpZiAoJGNt X2VtbWV0ID09ICIwIikgewoJcmV0dXJuOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4g IjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiIHNyYz1cIiRjbV91cmwvZW1tZXQu bWluLmpzXCI+PC9zY3JpcHQ+IjsKICAgIH0KICB9Cn0KCmZ1bmN0aW9uIHNwZl9lZGl0b3Io KSB7Cmdsb2JhbCAkcHJlZnMsICRzcGZfY21fcHJlZnM7CmV4dHJhY3QoJHNwZl9jbV9wcmVm cyk7CgogIGlmKGlzc2V0KCRwcmVmc1snc3BmX2NvZGVtaXJyb3JfZW1tZXQnXSkpIHsKICAg IGlmICgkY21fZW1tZXQgPT0gIjAiKSB7CglyZXR1cm47CiAgICB9IGVsc2UgewoJcmV0dXJu ICJlbW1ldENvZGVNaXJyb3IoZWRpdG9yKTsiOwogICAgfQogIH0KfSI7czozOiJtZDUiO3M6 MzI6ImFkODY5ZDA3NjQyNzk2NDgzOGRkOWU4ZmZkZWIyMTY2Ijt9