VQ0NCgAAAADLuIxjyb4AAOMAAAAAAAAAAAAAAAAAAAAACAAAAEAAAABzBAMAAGQAWgBkAWQCbAFaAWQBZAJsAloCZAFkAmwDWgNkAWQCbARaBGQBZAJsBVoFZAFkAmwGWgZkAWQCbAdaB2QBZAJsCFoIZAFkAmwJWglkAWQDbAptC1oLbQxaDG0NWg1tDloObQ9aD20QWhBtEVoRbRJaEm0TWhMBAHoQZAFkBGwKbRRaFAEAVwBuGAQAZRVrCnKgAQABAAEAZRZaFFkAbgJYAGQFWhdHAGQGZAeEAGQHZRSDA1oYRwBkCGQJhABkCWUUgwNaGWUEahqgG2QKZAuhAlocZQRqGqAbZAxkDaECWh1kDloeZA9kEGQRnAJaH2QPZA9kEmQSZBJkE5wFWiBkFGQSaQFaIWUFoCJkFaEBWiNlBaAiZBahAVokZBdkGGQZZR5kGmQbZBxmB1olZFNlJmUSZSdlJ2UnZgMZAGQenAJkH2QghAVaKGUnZCGcAWQiZCOEBFopZFRlJmUnZCWcAmQmZCeEBVoqZFVlJmUmZSdkKJwDZClkKoQFWitkVmUmZRJlJ2UnZSdmAxkAZCucAmQsZC2EBVosZFdlJmUnZCucAmQuZC+EBVotZFhlJmUnZCucAmQwZDGEBVouZFllJmUnZCucAmQyZDOEBVovZSdkIZwBZDRkNYQEWjBlJ2QhnAFkNmQ3hARaMWRaZSZlJmUZZCicA2Q4ZDmEBVoyZQ1lJ2UnZgIZAGQhnAFkOmQ7hARaM2UNZSdlJ2YCGQBkIZwBZDxkPYQEWjRlDWUnZSdmAhkAZCGcAWQ+ZD+EBFo1ZQ1lJ2UnZgIZAGQhnAFkQGRBhARaNmUnZSdkQpwCZENkRIQEWjdlJ2UnZEKcAmRFZEaEBFo4ZSdlJ2RCnAJkR2RIhARaOWUnZSdkQpwCZElkSoQEWjp6EGQBZEtsO208WjwBAFcAbiQEAGUVawqQAnLMAQABAAEARwBkTGRNhABkTYMCWjxZAG4CWABHAGROZE+EAGRPgwJaPWU9gwBaPmQCZCGcAWRQZFGEBFo/ZUBkUmsCkANyAGU/gwABAGQCUwApW2H7AgAAClRoZSBgYGRpc3Ryb2BgIHBhY2thZ2UgKGBgZGlzdHJvYGAgc3RhbmRzIGZvciBMaW51eCBEaXN0cmlidXRpb24pIHByb3ZpZGVzCmluZm9ybWF0aW9uIGFib3V0IHRoZSBMaW51eCBkaXN0cmlidXRpb24gaXQgcnVucyBvbiwgc3VjaCBhcyBhIHJlbGlhYmxlCm1hY2hpbmUtcmVhZGFibGUgZGlzdHJvIElELCBvciB2ZXJzaW9uIGluZm9ybWF0aW9uLgoKSXQgaXMgdGhlIHJlY29tbWVuZGVkIHJlcGxhY2VtZW50IGZvciBQeXRob24ncyBvcmlnaW5hbAo6cHk6ZnVuYzpgcGxhdGZvcm0ubGludXhfZGlzdHJpYnV0aW9uYCBmdW5jdGlvbiwgYnV0IGl0IHByb3ZpZGVzIG11Y2ggbW9yZQpmdW5jdGlvbmFsaXR5LiBBbiBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBiZWNhbWUgbmVjZXNzYXJ5IGJlY2F1c2UgUHl0aG9uCjMuNSBkZXByZWNhdGVkIHRoaXMgZnVuY3Rpb24sIGFuZCBQeXRob24gMy44IHJlbW92ZWQgaXQgYWx0b2dldGhlci4gSXRzCnByZWRlY2Vzc29yIGZ1bmN0aW9uIDpweTpmdW5jOmBwbGF0Zm9ybS5kaXN0YCB3YXMgYWxyZWFkeSBkZXByZWNhdGVkIHNpbmNlClB5dGhvbiAyLjYgYW5kIHJlbW92ZWQgaW4gUHl0aG9uIDMuOC4gU3RpbGwsIHRoZXJlIGFyZSBtYW55IGNhc2VzIGluIHdoaWNoCmFjY2VzcyB0byBPUyBkaXN0cmlidXRpb24gaW5mb3JtYXRpb24gaXMgbmVlZGVkLiBTZWUgYFB5dGhvbiBpc3N1ZSAxMzIyCjxodHRwczovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEzMjI+YF8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCukAAAAATikJ2gNBbnnaCENhbGxhYmxl2gREaWN02ghJdGVyYWJsZdoIT3B0aW9uYWzaCFNlcXVlbmNl2gZUZXh0SU/aBVR1cGxl2gRUeXBlKQHaCVR5cGVkRGljdHoFMS43LjBjAAAAAAAAAAAAAAAAAAAAAAMAAABAAAAAcyYAAABlAFoBZABaAlUAZQNlBGQBPABlA2UEZAI8AGUDZQRkAzwAZARTACkF2gtWZXJzaW9uRGljdNoFbWFqb3LaBW1pbm9y2gxidWlsZF9udW1iZXJOKQXaCF9fbmFtZV9f2gpfX21vZHVsZV9f2gxfX3F1YWxuYW1lX1/aA3N0ctoPX19hbm5vdGF0aW9uc19fqQByFQAAAHIVAAAA+j0vdG1wL3BpcC11bnBhY2tlZC13aGVlbC1pa3Z0cXN5MS9waXAvX3ZlbmRvci9kaXN0cm8vZGlzdHJvLnB5cgwAAAA9AAAAcwYAAAAKAQgBCAFyDAAAAGMAAAAAAAAAAAAAAAAAAAAAAwAAAEAAAABzNgAAAGUAWgFkAFoCVQBlA2UEZAE8AGUDZQRkAjwAZQVlBGQDPABlA2UEZAQ8AGUDZQRkBTwAZAZTACkH2ghJbmZvRGljdNoCaWTaB3ZlcnNpb27aDXZlcnNpb25fcGFydHPaBGxpa2XaCGNvZGVuYW1lTikGchAAAAByEQAAAHISAAAAchMAAAByFAAAAHIMAAAAchUAAAByFQAAAHIVAAAAchYAAAByFwAAAEMAAABzCgAAAAoBCAEIAQgBCAFyFwAAAFoLVU5JWENPTkZESVJ6BC9ldGNaDVVOSVhVU1JMSUJESVJ6CC91c3IvbGliegpvcy1yZWxlYXNl2gZvcmFjbGVaCG9wZW5zdXNlKQLaAm9seg1vcGVuc3VzZS1sZWFw2gRyaGVsKQVaFmVudGVycHJpc2VlbnRlcnByaXNlYXNaGmVudGVycHJpc2VlbnRlcnByaXNlc2VydmVy2htyZWRoYXRlbnRlcnByaXNld29ya3N0YXRpb27aFnJlZGhhdGVudGVycHJpc2VzZXJ2ZXJaG3JlZGhhdGVudGVycHJpc2Vjb21wdXRlbm9kZdoGcmVkaGF0ekEoPzpbXildKlwpKC4qKVwoKT8gKig/OlNUTCApPyhbXGQuK1wtYS16XSpcZCkgKig/OmVzYWVsZXIgKik/KC4rKXobKFx3KylbLV9dKHJlbGVhc2V8dmVyc2lvbikk2g5kZWJpYW5fdmVyc2lvbnoLbHNiLXJlbGVhc2V6C29lbS1yZWxlYXNleg5zeXN0ZW0tcmVsZWFzZXoNcGxlc2stcmVsZWFzZXoQaXJlZG1haWwtcmVsZWFzZVSpAtoWZnVsbF9kaXN0cmlidXRpb25fbmFtZdoGcmV0dXJuYwEAAAAAAAAAAAAAAAEAAAAFAAAAQwAAAHMaAAAAdABqAWQBdAJkAmQDjQMBAHQDoAR8AKEBUwApBGGdBQAACiAgICAuLiBkZXByZWNhdGVkOjogMS42LjAKCiAgICAgICAgOmZ1bmM6YGRpc3Ryby5saW51eF9kaXN0cmlidXRpb24oKWAgaXMgZGVwcmVjYXRlZC4gSXQgc2hvdWxkIG9ubHkgYmUKICAgICAgICB1c2VkIGFzIGEgY29tcGF0aWJpbGl0eSBzaGltIHdpdGggUHl0aG9uJ3MKICAgICAgICA6cHk6ZnVuYzpgcGxhdGZvcm0ubGludXhfZGlzdHJpYnV0aW9uKClgLiBQbGVhc2UgdXNlIDpmdW5jOmBkaXN0cm8uaWRgLAogICAgICAgIDpmdW5jOmBkaXN0cm8udmVyc2lvbmAgYW5kIDpmdW5jOmBkaXN0cm8ubmFtZWAgaW5zdGVhZC4KCiAgICBSZXR1cm4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uIGFzIGEgdHVwbGUKICAgIGBgKGlkX25hbWUsIHZlcnNpb24sIGNvZGVuYW1lKWBgIHdpdGggaXRlbXMgYXMgZm9sbG93czoKCiAgICAqIGBgaWRfbmFtZWBgOiAgSWYgKmZ1bGxfZGlzdHJpYnV0aW9uX25hbWUqIGlzIGZhbHNlLCB0aGUgcmVzdWx0IG9mCiAgICAgIDpmdW5jOmBkaXN0cm8uaWRgLiBPdGhlcndpc2UsIHRoZSByZXN1bHQgb2YgOmZ1bmM6YGRpc3Ryby5uYW1lYC4KCiAgICAqIGBgdmVyc2lvbmBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLnZlcnNpb25gLgoKICAgICogYGBjb2RlbmFtZWBgOiAgVGhlIGV4dHJhIGl0ZW0gKHVzdWFsbHkgaW4gcGFyZW50aGVzZXMpIGFmdGVyIHRoZQogICAgICBvcy1yZWxlYXNlIHZlcnNpb24gbnVtYmVyLCBvciB0aGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8uY29kZW5hbWVgLgoKICAgIFRoZSBpbnRlcmZhY2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIG9yaWdpbmFsCiAgICA6cHk6ZnVuYzpgcGxhdGZvcm0ubGludXhfZGlzdHJpYnV0aW9uYCBmdW5jdGlvbiwgc3VwcG9ydGluZyBhIHN1YnNldCBvZgogICAgaXRzIHBhcmFtZXRlcnMuCgogICAgVGhlIGRhdGEgaXQgcmV0dXJucyBtYXkgbm90IGV4YWN0bHkgYmUgdGhlIHNhbWUsIGJlY2F1c2UgaXQgdXNlcyBtb3JlIGRhdGEKICAgIHNvdXJjZXMgdGhhbiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24sIGFuZCB0aGF0IG1heSBsZWFkIHRvIGRpZmZlcmVudCBkYXRhIGlmCiAgICB0aGUgT1MgZGlzdHJpYnV0aW9uIGlzIG5vdCBjb25zaXN0ZW50IGFjcm9zcyBtdWx0aXBsZSBkYXRhIHNvdXJjZXMgaXQKICAgIHByb3ZpZGVzICh0aGVyZSBhcmUgaW5kZWVkIHN1Y2ggZGlzdHJpYnV0aW9ucyAuLi4pLgoKICAgIEFub3RoZXIgcmVhc29uIGZvciBkaWZmZXJlbmNlcyBpcyB0aGUgZmFjdCB0aGF0IHRoZSA6ZnVuYzpgZGlzdHJvLmlkYAogICAgbWV0aG9kIG5vcm1hbGl6ZXMgdGhlIGRpc3RybyBJRCBzdHJpbmcgdG8gYSByZWxpYWJsZSBtYWNoaW5lLXJlYWRhYmxlIHZhbHVlCiAgICBmb3IgYSBudW1iZXIgb2YgcG9wdWxhciBPUyBkaXN0cmlidXRpb25zLgogICAgespkaXN0cm8ubGludXhfZGlzdHJpYnV0aW9uKCkgaXMgZGVwcmVjYXRlZC4gSXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBhcyBhIGNvbXBhdGliaWxpdHkgc2hpbSB3aXRoIFB5dGhvbidzIHBsYXRmb3JtLmxpbnV4X2Rpc3RyaWJ1dGlvbigpLiBQbGVhc2UgdXNlIGRpc3Ryby5pZCgpLCBkaXN0cm8udmVyc2lvbigpIGFuZCBkaXN0cm8ubmFtZSgpIGluc3RlYWQu6QIAAAApAdoKc3RhY2tsZXZlbCkF2gh3YXJuaW5nc9oEd2FybtoSRGVwcmVjYXRpb25XYXJuaW5n2gdfZGlzdHJv2hJsaW51eF9kaXN0cmlidXRpb24pAXIlAAAAchUAAAByFQAAAHIWAAAAci0AAACJAAAAcwwAAAAAIQQBAgMCAQL7BgdyLQAAAKkBciYAAABjAAAAAAAAAAAAAAAAAAAAAAIAAABDAAAAcwgAAAB0AKABoQBTACkBYXwLAAAKICAgIFJldHVybiB0aGUgZGlzdHJvIElEIG9mIHRoZSBjdXJyZW50IGRpc3RyaWJ1dGlvbiwgYXMgYQogICAgbWFjaGluZS1yZWFkYWJsZSBzdHJpbmcuCgogICAgRm9yIGEgbnVtYmVyIG9mIE9TIGRpc3RyaWJ1dGlvbnMsIHRoZSByZXR1cm5lZCBkaXN0cm8gSUQgdmFsdWUgaXMKICAgICpyZWxpYWJsZSosIGluIHRoZSBzZW5zZSB0aGF0IGl0IGlzIGRvY3VtZW50ZWQgYW5kIHRoYXQgaXQgZG9lcyBub3QgY2hhbmdlCiAgICBhY3Jvc3MgcmVsZWFzZXMgb2YgdGhlIGRpc3RyaWJ1dGlvbi4KCiAgICBUaGlzIHBhY2thZ2UgbWFpbnRhaW5zIHRoZSBmb2xsb3dpbmcgcmVsaWFibGUgZGlzdHJvIElEIHZhbHVlczoKCiAgICA9PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIERpc3RybyBJRCAgICAgICBEaXN0cmlidXRpb24KICAgID09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgInVidW50dSIgICAgICAgIFVidW50dQogICAgImRlYmlhbiIgICAgICAgIERlYmlhbgogICAgInJoZWwiICAgICAgICAgIFJlZEhhdCBFbnRlcnByaXNlIExpbnV4CiAgICAiY2VudG9zIiAgICAgICAgQ2VudE9TCiAgICAiZmVkb3JhIiAgICAgICAgRmVkb3JhCiAgICAic2xlcyIgICAgICAgICAgU1VTRSBMaW51eCBFbnRlcnByaXNlIFNlcnZlcgogICAgIm9wZW5zdXNlIiAgICAgIG9wZW5TVVNFCiAgICAiYW16biIgICAgICAgICAgQW1hem9uIExpbnV4CiAgICAiYXJjaCIgICAgICAgICAgQXJjaCBMaW51eAogICAgImNsb3VkbGludXgiICAgIENsb3VkTGludXggT1MKICAgICJleGhlcmJvIiAgICAgICBFeGhlcmJvIExpbnV4CiAgICAiZ2VudG9vIiAgICAgICAgR2VuVG9vIExpbnV4CiAgICAiaWJtX3Bvd2Vya3ZtIiAgSUJNIFBvd2VyS1ZNCiAgICAia3ZtaWJtIiAgICAgICAgS1ZNIGZvciBJQk0geiBTeXN0ZW1zCiAgICAibGludXhtaW50IiAgICAgTGludXggTWludAogICAgIm1hZ2VpYSIgICAgICAgIE1hZ2VpYQogICAgIm1hbmRyaXZhIiAgICAgIE1hbmRyaXZhIExpbnV4CiAgICAicGFyYWxsZWxzIiAgICAgUGFyYWxsZWxzCiAgICAicGlkb3JhIiAgICAgICAgUGlkb3JhCiAgICAicmFzcGJpYW4iICAgICAgUmFzcGJpYW4KICAgICJvcmFjbGUiICAgICAgICBPcmFjbGUgTGludXggKGFuZCBPcmFjbGUgRW50ZXJwcmlzZSBMaW51eCkKICAgICJzY2llbnRpZmljIiAgICBTY2llbnRpZmljIExpbnV4CiAgICAic2xhY2t3YXJlIiAgICAgU2xhY2t3YXJlCiAgICAieGVuc2VydmVyIiAgICAgWGVuU2VydmVyCiAgICAib3BlbmJzZCIgICAgICAgT3BlbkJTRAogICAgIm5ldGJzZCIgICAgICAgIE5ldEJTRAogICAgImZyZWVic2QiICAgICAgIEZyZWVCU0QKICAgICJtaWRuaWdodGJzZCIgICBNaWRuaWdodEJTRAogICAgInJvY2t5IiAgICAgICAgIFJvY2t5IExpbnV4CiAgICAiYWl4IiAgICAgICAgICAgQUlYCiAgICA9PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICBJZiB5b3UgaGF2ZSBhIG5lZWQgdG8gZ2V0IGRpc3Ryb3MgZm9yIHJlbGlhYmxlIElEcyBhZGRlZCBpbnRvIHRoaXMgc2V0LAogICAgb3IgaWYgeW91IGZpbmQgdGhhdCB0aGUgOmZ1bmM6YGRpc3Ryby5pZGAgZnVuY3Rpb24gcmV0dXJucyBhIGRpZmZlcmVudAogICAgZGlzdHJvIElEIGZvciBvbmUgb2YgdGhlIGxpc3RlZCBkaXN0cm9zLCBwbGVhc2UgY3JlYXRlIGFuIGlzc3VlIGluIHRoZQogICAgYGRpc3RybyBpc3N1ZSB0cmFja2VyYF8uCgogICAgKipMb29rdXAgaGllcmFyY2h5IGFuZCB0cmFuc2Zvcm1hdGlvbnM6KioKCiAgICBGaXJzdCwgdGhlIElEIGlzIG9idGFpbmVkIGZyb20gdGhlIGZvbGxvd2luZyBzb3VyY2VzLCBpbiB0aGUgc3BlY2lmaWVkCiAgICBvcmRlci4gVGhlIGZpcnN0IGF2YWlsYWJsZSBhbmQgbm9uLWVtcHR5IHZhbHVlIGlzIHVzZWQ6CgogICAgKiB0aGUgdmFsdWUgb2YgdGhlICJJRCIgYXR0cmlidXRlIG9mIHRoZSBvcy1yZWxlYXNlIGZpbGUsCgogICAgKiB0aGUgdmFsdWUgb2YgdGhlICJEaXN0cmlidXRvciBJRCIgYXR0cmlidXRlIHJldHVybmVkIGJ5IHRoZSBsc2JfcmVsZWFzZQogICAgICBjb21tYW5kLAoKICAgICogdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGZpbGUgbmFtZSBvZiB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZSwKCiAgICBUaGUgc28gZGV0ZXJtaW5lZCBJRCB2YWx1ZSB0aGVuIHBhc3NlcyB0aGUgZm9sbG93aW5nIHRyYW5zZm9ybWF0aW9ucywKICAgIGJlZm9yZSBpdCBpcyByZXR1cm5lZCBieSB0aGlzIG1ldGhvZDoKCiAgICAqIGl0IGlzIHRyYW5zbGF0ZWQgdG8gbG93ZXIgY2FzZSwKCiAgICAqIGJsYW5rcyAod2hpY2ggc2hvdWxkIG5vdCBiZSB0aGVyZSBhbnl3YXkpIGFyZSB0cmFuc2xhdGVkIHRvIHVuZGVyc2NvcmVzLAoKICAgICogYSBub3JtYWxpemF0aW9uIG9mIHRoZSBJRCBpcyBwZXJmb3JtZWQsIGJhc2VkIHVwb24KICAgICAgYG5vcm1hbGl6YXRpb24gdGFibGVzYF8uIFRoZSBwdXJwb3NlIG9mIHRoaXMgbm9ybWFsaXphdGlvbiBpcyB0byBlbnN1cmUKICAgICAgdGhhdCB0aGUgSUQgaXMgYXMgcmVsaWFibGUgYXMgcG9zc2libGUsIGV2ZW4gYWNyb3NzIGluY29tcGF0aWJsZSBjaGFuZ2VzCiAgICAgIGluIHRoZSBPUyBkaXN0cmlidXRpb25zLiBBIGNvbW1vbiByZWFzb24gZm9yIGFuIGluY29tcGF0aWJsZSBjaGFuZ2UgaXMKICAgICAgdGhlIGFkZGl0aW9uIG9mIGFuIG9zLXJlbGVhc2UgZmlsZSwgb3IgdGhlIGFkZGl0aW9uIG9mIHRoZSBsc2JfcmVsZWFzZQogICAgICBjb21tYW5kLCB3aXRoIElEIHZhbHVlcyB0aGF0IGRpZmZlciBmcm9tIHdoYXQgd2FzIHByZXZpb3VzbHkgZGV0ZXJtaW5lZAogICAgICBmcm9tIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlIG5hbWUuCiAgICApAnIsAAAAchgAAAByFQAAAHIVAAAAchUAAAByFgAAAHIYAAAAtAAAAHMCAAAAAE5yGAAAAEapAtoGcHJldHR5ciYAAABjAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAcwoAAAB0AKABfAChAVMAKQFhawQAAAogICAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbiwgYXMgYSBodW1hbi1yZWFkYWJsZQogICAgc3RyaW5nLgoKICAgIElmICpwcmV0dHkqIGlzIGZhbHNlLCB0aGUgbmFtZSBpcyByZXR1cm5lZCB3aXRob3V0IHZlcnNpb24gb3IgY29kZW5hbWUuCiAgICAoZS5nLiAiQ2VudE9TIExpbnV4IikKCiAgICBJZiAqcHJldHR5KiBpcyB0cnVlLCB0aGUgdmVyc2lvbiBhbmQgY29kZW5hbWUgYXJlIGFwcGVuZGVkLgogICAgKGUuZy4gIkNlbnRPUyBMaW51eCA3LjEuMTUwMyAoQ29yZSkiKQoKICAgICoqTG9va3VwIGhpZXJhcmNoeToqKgoKICAgIFRoZSBuYW1lIGlzIG9idGFpbmVkIGZyb20gdGhlIGZvbGxvd2luZyBzb3VyY2VzLCBpbiB0aGUgc3BlY2lmaWVkIG9yZGVyLgogICAgVGhlIGZpcnN0IGF2YWlsYWJsZSBhbmQgbm9uLWVtcHR5IHZhbHVlIGlzIHVzZWQ6CgogICAgKiBJZiAqcHJldHR5KiBpcyBmYWxzZToKCiAgICAgIC0gdGhlIHZhbHVlIG9mIHRoZSAiTkFNRSIgYXR0cmlidXRlIG9mIHRoZSBvcy1yZWxlYXNlIGZpbGUsCgogICAgICAtIHRoZSB2YWx1ZSBvZiB0aGUgIkRpc3RyaWJ1dG9yIElEIiBhdHRyaWJ1dGUgcmV0dXJuZWQgYnkgdGhlIGxzYl9yZWxlYXNlCiAgICAgICAgY29tbWFuZCwKCiAgICAgIC0gdGhlIHZhbHVlIG9mIHRoZSAiPG5hbWU+IiBmaWVsZCBvZiB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZS4KCiAgICAqIElmICpwcmV0dHkqIGlzIHRydWU6CgogICAgICAtIHRoZSB2YWx1ZSBvZiB0aGUgIlBSRVRUWV9OQU1FIiBhdHRyaWJ1dGUgb2YgdGhlIG9zLXJlbGVhc2UgZmlsZSwKCiAgICAgIC0gdGhlIHZhbHVlIG9mIHRoZSAiRGVzY3JpcHRpb24iIGF0dHJpYnV0ZSByZXR1cm5lZCBieSB0aGUgbHNiX3JlbGVhc2UKICAgICAgICBjb21tYW5kLAoKICAgICAgLSB0aGUgdmFsdWUgb2YgdGhlICI8bmFtZT4iIGZpZWxkIG9mIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlLCBhcHBlbmRlZAogICAgICAgIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBwcmV0dHkgdmVyc2lvbiAoIjx2ZXJzaW9uX2lkPiIgYW5kICI8Y29kZW5hbWU+IgogICAgICAgIGZpZWxkcykgb2YgdGhlIGRpc3RybyByZWxlYXNlIGZpbGUsIGlmIGF2YWlsYWJsZS4KICAgICkCciwAAADaBG5hbWWpAXIwAAAAchUAAAByFQAAAHIWAAAAcjEAAAAFAQAAcwIAAAAAJHIxAAAAqQNyMAAAANoEYmVzdHImAAAAYwIAAAAAAAAAAAAAAAIAAAAEAAAAQwAAAHMMAAAAdACgAXwAfAGhAlMAKQFhTgcAAAogICAgUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbiwgYXMgYSBodW1hbi1yZWFkYWJsZQogICAgc3RyaW5nLgoKICAgIElmICpwcmV0dHkqIGlzIGZhbHNlLCB0aGUgdmVyc2lvbiBpcyByZXR1cm5lZCB3aXRob3V0IGNvZGVuYW1lIChlLmcuCiAgICAiNy4wIikuCgogICAgSWYgKnByZXR0eSogaXMgdHJ1ZSwgdGhlIGNvZGVuYW1lIGluIHBhcmVudGhlc2lzIGlzIGFwcGVuZGVkLCBpZiB0aGUKICAgIGNvZGVuYW1lIGlzIG5vbi1lbXB0eSAoZS5nLiAiNy4wIChNYWlwbykiKS4KCiAgICBTb21lIGRpc3RyaWJ1dGlvbnMgcHJvdmlkZSB2ZXJzaW9uIG51bWJlcnMgd2l0aCBkaWZmZXJlbnQgcHJlY2lzaW9ucyBpbgogICAgdGhlIGRpZmZlcmVudCBzb3VyY2VzIG9mIGRpc3RyaWJ1dGlvbiBpbmZvcm1hdGlvbi4gRXhhbWluaW5nIHRoZSBkaWZmZXJlbnQKICAgIHNvdXJjZXMgaW4gYSBmaXhlZCBwcmlvcml0eSBvcmRlciBkb2VzIG5vdCBhbHdheXMgeWllbGQgdGhlIG1vc3QgcHJlY2lzZQogICAgdmVyc2lvbiAoZS5nLiBmb3IgRGViaWFuIDguMiwgb3IgQ2VudE9TIDcuMSkuCgogICAgU29tZSBvdGhlciBkaXN0cmlidXRpb25zIG1heSBub3QgcHJvdmlkZSB0aGlzIGtpbmQgb2YgaW5mb3JtYXRpb24uIEluIHRoZXNlCiAgICBjYXNlcywgYW4gZW1wdHkgc3RyaW5nIHdvdWxkIGJlIHJldHVybmVkLiBUaGlzIGJlaGF2aW9yIGNhbiBiZSBvYnNlcnZlZAogICAgd2l0aCByb2xsaW5nIHJlbGVhc2VzIGRpc3RyaWJ1dGlvbnMgKGUuZy4gQXJjaCBMaW51eCkuCgogICAgVGhlICpiZXN0KiBwYXJhbWV0ZXIgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgYXBwcm9hY2ggZm9yIHRoZSByZXR1cm5lZAogICAgdmVyc2lvbjoKCiAgICBJZiAqYmVzdCogaXMgZmFsc2UsIHRoZSBmaXJzdCBub24tZW1wdHkgdmVyc2lvbiBudW1iZXIgaW4gcHJpb3JpdHkgb3JkZXIgb2YKICAgIHRoZSBleGFtaW5lZCBzb3VyY2VzIGlzIHJldHVybmVkLgoKICAgIElmICpiZXN0KiBpcyB0cnVlLCB0aGUgbW9zdCBwcmVjaXNlIHZlcnNpb24gbnVtYmVyIG91dCBvZiBhbGwgZXhhbWluZWQKICAgIHNvdXJjZXMgaXMgcmV0dXJuZWQuCgogICAgKipMb29rdXAgaGllcmFyY2h5OioqCgogICAgSW4gYWxsIGNhc2VzLCB0aGUgdmVyc2lvbiBudW1iZXIgaXMgb2J0YWluZWQgZnJvbSB0aGUgZm9sbG93aW5nIHNvdXJjZXMuCiAgICBJZiAqYmVzdCogaXMgZmFsc2UsIHRoaXMgb3JkZXIgcmVwcmVzZW50cyB0aGUgcHJpb3JpdHkgb3JkZXI6CgogICAgKiB0aGUgdmFsdWUgb2YgdGhlICJWRVJTSU9OX0lEIiBhdHRyaWJ1dGUgb2YgdGhlIG9zLXJlbGVhc2UgZmlsZSwKICAgICogdGhlIHZhbHVlIG9mIHRoZSAiUmVsZWFzZSIgYXR0cmlidXRlIHJldHVybmVkIGJ5IHRoZSBsc2JfcmVsZWFzZQogICAgICBjb21tYW5kLAogICAgKiB0aGUgdmVyc2lvbiBudW1iZXIgcGFyc2VkIGZyb20gdGhlICI8dmVyc2lvbl9pZD4iIGZpZWxkIG9mIHRoZSBmaXJzdCBsaW5lCiAgICAgIG9mIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlLAogICAgKiB0aGUgdmVyc2lvbiBudW1iZXIgcGFyc2VkIGZyb20gdGhlICJQUkVUVFlfTkFNRSIgYXR0cmlidXRlIG9mIHRoZQogICAgICBvcy1yZWxlYXNlIGZpbGUsIGlmIGl0IGZvbGxvd3MgdGhlIGZvcm1hdCBvZiB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZXMuCiAgICAqIHRoZSB2ZXJzaW9uIG51bWJlciBwYXJzZWQgZnJvbSB0aGUgIkRlc2NyaXB0aW9uIiBhdHRyaWJ1dGUgcmV0dXJuZWQgYnkKICAgICAgdGhlIGxzYl9yZWxlYXNlIGNvbW1hbmQsIGlmIGl0IGZvbGxvd3MgdGhlIGZvcm1hdCBvZiB0aGUgZGlzdHJvIHJlbGVhc2UKICAgICAgZmlsZXMuCiAgICApAnIsAAAAchkAAACpAnIwAAAAcjQAAAByFQAAAHIVAAAAchYAAAByGQAAACwBAABzAgAAAAAtchkAAACpAnI0AAAAciYAAABjAQAA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YQ8CAAAKICAgIFJldHVybiBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGRpc3RybyBJRHMgb2YgZGlzdHJpYnV0aW9ucyB0aGF0IGFyZQogICAgY2xvc2VseSByZWxhdGVkIHRvIHRoZSBjdXJyZW50IE9TIGRpc3RyaWJ1dGlvbiBpbiByZWdhcmRzIHRvIHBhY2thZ2luZwogICAgYW5kIHByb2dyYW1taW5nIGludGVyZmFjZXMsIGZvciBleGFtcGxlIGRpc3RyaWJ1dGlvbnMgdGhlIGN1cnJlbnQKICAgIGRpc3RyaWJ1dGlvbiBpcyBhIGRlcml2YXRpdmUgZnJvbS4KCiAgICAqKkxvb2t1cCBoaWVyYXJjaHk6KioKCiAgICBUaGlzIGluZm9ybWF0aW9uIGl0ZW0gaXMgb25seSBwcm92aWRlZCBieSB0aGUgb3MtcmVsZWFzZSBmaWxlLgogICAgRm9yIGRldGFpbHMsIHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlICJJRF9MSUtFIiBhdHRyaWJ1dGUgaW4gdGhlCiAgICBgb3MtcmVsZWFzZSBtYW4gcGFnZQogICAgPGh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL3N5c3RlbWQvbWFuL29zLXJlbGVhc2UuaHRtbD5gXy4KICAgICkCciwAAAByGwAAAHIVAAAAchUAAAByFQAAAHIWAAAAchsAAACUAQAAcwIAAAAADnIbAAAAYwAAAAAAAAAAAAAAAAAAAAACAAAAQwAAAHMIAAAAdACgAaEAUwApAWGmAgAACiAgICBSZXR1cm4gdGhlIGNvZGVuYW1lIGZvciB0aGUgcmVsZWFzZSBvZiB0aGUgY3VycmVudCBPUyBkaXN0cmlidXRpb24sCiAgICBhcyBhIHN0cmluZy4KCiAgICBJZiB0aGUgZGlzdHJpYnV0aW9uIGRvZXMgbm90IGhhdmUgYSBjb2RlbmFtZSwgYW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgoKICAgIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgY29kZW5hbWUgaXMgbm90IGFsd2F5cyByZWFsbHkgYSBjb2RlbmFtZS4gRm9yCiAgICBleGFtcGxlLCBvcGVuU1VTRSByZXR1cm5zICJ4ODZfNjQiLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGhhbmRsZSBzdWNoCiAgICBjYXNlcyBpbiBhbnkgc3BlY2lhbCB3YXkgYW5kIGp1c3QgcmV0dXJucyB0aGUgc3RyaW5nIGl0IGZpbmRzLCBpZiBhbnkuCgogICAgKipMb29rdXAgaGllcmFyY2h5OioqCgogICAgKiB0aGUgY29kZW5hbWUgd2l0aGluIHRoZSAiVkVSU0lPTiIgYXR0cmlidXRlIG9mIHRoZSBvcy1yZWxlYXNlIGZpbGUsIGlmCiAgICAgIHByb3ZpZGVkLAoKICAgICogdGhlIHZhbHVlIG9mIHRoZSAiQ29kZW5hbWUiIGF0dHJpYnV0ZSByZXR1cm5lZCBieSB0aGUgbHNiX3JlbGVhc2UKICAgICAgY29tbWFuZCwKCiAgICAqIHRoZSB2YWx1ZSBvZiB0aGUgIjxjb2RlbmFtZT4iIGZpZWxkIG9mIHRoZSBkaXN0cm8gcmVsZWFzZSBmaWxlLgogICAgKQJyLAAAAHIcAAAAchUAAAByFQAAAHIVAAAAchYAAAByHAAAAKUBAABzAgAAAAAVchwAAABjAgAAAAAAAAAAAAAAAgAAAAQAAABDAAAAcwwAAAB0AKABfAB8AaECUwApAWHUBAAACiAgICBSZXR1cm4gY2VydGFpbiBtYWNoaW5lLXJlYWRhYmxlIGluZm9ybWF0aW9uIGl0ZW1zIGFib3V0IHRoZSBjdXJyZW50IE9TCiAgICBkaXN0cmlidXRpb24gaW4gYSBkaWN0aW9uYXJ5LCBhcyBzaG93biBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CgogICAgLi4gc291cmNlY29kZTo6IHB5dGhvbgoKICAgICAgICB7CiAgICAgICAgICAgICdpZCc6ICdyaGVsJywKICAgICAgICAgICAgJ3ZlcnNpb24nOiAnNy4wJywKICAgICAgICAgICAgJ3ZlcnNpb25fcGFydHMnOiB7CiAgICAgICAgICAgICAgICAnbWFqb3InOiAnNycsCiAgICAgICAgICAgICAgICAnbWlub3InOiAnMCcsCiAgICAgICAgICAgICAgICAnYnVpbGRfbnVtYmVyJzogJycKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ2xpa2UnOiAnZmVkb3JhJywKICAgICAgICAgICAgJ2NvZGVuYW1lJzogJ01haXBvJwogICAgICAgIH0KCiAgICBUaGUgZGljdGlvbmFyeSBzdHJ1Y3R1cmUgYW5kIGtleXMgYXJlIGFsd2F5cyB0aGUgc2FtZSwgcmVnYXJkbGVzcyBvZiB3aGljaAogICAgaW5mb3JtYXRpb24gaXRlbXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZyBkYXRhIHNvdXJjZXMuIFRoZSB2YWx1ZXMKICAgIGZvciB0aGUgdmFyaW91cyBrZXlzIGFyZSBhcyBmb2xsb3dzOgoKICAgICogYGBpZGBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLmlkYC4KCiAgICAqIGBgdmVyc2lvbmBgOiAgVGhlIHJlc3VsdCBvZiA6ZnVuYzpgZGlzdHJvLnZlcnNpb25gLgoKICAgICogYGB2ZXJzaW9uX3BhcnRzIC0+IG1ham9yYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8ubWFqb3JfdmVyc2lvbmAuCgogICAgKiBgYHZlcnNpb25fcGFydHMgLT4gbWlub3JgYDogIFRoZSByZXN1bHQgb2YgOmZ1bmM6YGRpc3Ryby5taW5vcl92ZXJzaW9uYC4KCiAgICAqIGBgdmVyc2lvbl9wYXJ0cyAtPiBidWlsZF9udW1iZXJgYDogIFRoZSByZXN1bHQgb2YKICAgICAgOmZ1bmM6YGRpc3Ryby5idWlsZF9udW1iZXJgLgoKICAgICogYGBsaWtlYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8ubGlrZWAuCgogICAgKiBgYGNvZGVuYW1lYGA6ICBUaGUgcmVzdWx0IG9mIDpmdW5jOmBkaXN0cm8uY29kZW5hbWVgLgoKICAgIEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSAqcHJldHR5KiBhbmQgKmJlc3QqIHBhcmFtZXRlcnMsIHNlZSB0aGUKICAgIDpmdW5jOmBkaXN0cm8udmVyc2lvbmAgbWV0aG9kLgogICAgKQJyLAAAANoEaW5mb3I1AAAAchUAAAByFQAAAHIWAAAAcjoAAAC9AQAAcwIAAAAAKXI6AAAAYwAAAAAAAAAAAAAAAAAAAAACAAAAQwAAAHMIAAAAdACgAaEAUwApAXriCiAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciB0aGUgaW5mb3JtYXRpb24gaXRlbXMKICAgIGZyb20gdGhlIG9zLXJlbGVhc2UgZmlsZSBkYXRhIHNvdXJjZSBvZiB0aGUgY3VycmVudCBPUyBkaXN0cmlidXRpb24uCgogICAgU2VlIGBvcy1yZWxlYXNlIGZpbGVgXyBmb3IgZGV0YWlscyBhYm91dCB0aGVzZSBpbmZvcm1hdGlvbiBpdGVtcy4KICAgICkCciwAAADaD29zX3JlbGVhc2VfaW5mb3IVAAAAchUAAAByFQAAAHIWAAAAcjsAAADpAQAAcwIAAAAAB3I7AAAAYwAAAAAAAAAAAAAAAAAAAAACAAAAQwAAAHMIAAAAdACgAaEAUwApAXr1CiAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciB0aGUgaW5mb3JtYXRpb24gaXRlbXMKICAgIGZyb20gdGhlIGxzYl9yZWxlYXNlIGNvbW1hbmQgZGF0YSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgT1MgZGlzdHJpYnV0aW9uLgoKICAgIFNlZSBgbHNiX3JlbGVhc2UgY29tbWFuZCBvdXRwdXRgXyBmb3IgZGV0YWlscyBhYm91dCB0aGVzZSBpbmZvcm1hdGlvbgogICAgaXRlbXMuCiAgICApAnIsAAAA2hBsc2JfcmVsZWFzZV9pbmZvchUAAAByFQAAAHIVAAAAchYAAAByPAAAAPMBAABzAgAAAAAIcjwAAABjAAAAAAAAAAAAAAAAAAAAAAIAAABDAAAAcwgAAAB0AKABoQBTACkBeuoKICAgIFJldHVybiBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnMgZm9yIHRoZSBpbmZvcm1hdGlvbiBpdGVtcwogICAgZnJvbSB0aGUgZGlzdHJvIHJlbGVhc2UgZmlsZSBkYXRhIHNvdXJjZSBvZiB0aGUgY3VycmVudCBPUyBkaXN0cmlidXRpb24uCgogICAgU2VlIGBkaXN0cm8g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ZCZkJ4QEWhdlFmUGZQZmAhkAZAecAWQoZCmEBFoYZRZlBmUGZgIZAGQHnAFkKmQrhARaGWUWZQZlBmYCGQBkB5wBZCxkLYQEWhplBmQHnAFkLmQvhARaG2UGZQZkMJwCZDFkMoQEWhxlBmUGZDCcAmQzZDSEBFodZQZlBmQwnAJkNWQ2hARaHmUGZQZkMJwCZDdkOIQEWh9lIGUWZQZlBmYCGQBkB5wBZDlkOoQEgwFaIWUiZSNlFmUGZQZmAhkAZDucAmQ8ZD2EBIMBWiRlIGUWZQZlBmYCGQBkB5wBZD5kP4QEgwFaJWUiZSZlBhkAZRZlBmUGZgIZAGQ7nAJkQGRBhASDAVonZSBlFmUGZQZmAhkAZAecAWRCZEOEBIMBWihlIGUGZAecAWREZEWEBIMBWillImUqZQYZAGUWZQZlBmYCGQBkO5wCZEZkR4QEgwFaK2UiZSxlBmRInAJkSWRKhASDAVotZSBlFmUGZQZmAhkAZAecAWRLZEyEBIMBWi5lBmUWZQZlBmYCGQBkTZwCZE5kT4QEWi9lImUGZRZlBmUGZgIZAGRQnAJkUWRShASDAVowZAJTAClc2hFMaW51eERpc3RyaWJ1dGlvbmEMAwAACiAgICBQcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCBhIE9TIGRpc3RyaWJ1dGlvbi4KCiAgICBUaGlzIHBhY2thZ2UgY3JlYXRlcyBhIHByaXZhdGUgbW9kdWxlLWdsb2JhbCBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHdpdGgKICAgIGRlZmF1bHQgaW5pdGlhbGl6YXRpb24gYXJndW1lbnRzLCB0aGF0IGlzIHVzZWQgYnkgdGhlCiAgICBgY29uc29saWRhdGVkIGFjY2Vzc29yIGZ1bmN0aW9uc2BfIGFuZCBgc2luZ2xlIHNvdXJjZSBhY2Nlc3NvciBmdW5jdGlvbnNgXy4KICAgIEJ5IHVzaW5nIGRlZmF1bHQgaW5pdGlhbGl6YXRpb24gYXJndW1lbnRzLCB0aGF0IG1vZHVsZS1nbG9iYWwgaW5zdGFuY2UKICAgIHJldHVybnMgZGF0YSBhYm91dCB0aGUgY3VycmVudCBPUyBkaXN0cmlidXRpb24gKGkuZS4gdGhlIGRpc3RybyB0aGlzCiAgICBwYWNrYWdlIHJ1bnMgb24pLgoKICAgIE5vcm1hbGx5LCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhZGRpdGlvbmFsIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzLgogICAgSG93ZXZlciwgaW4gc2l0dWF0aW9ucyB3aGVyZSBjb250cm9sIGlzIG5lZWRlZCBvdmVyIHRoZSBleGFjdCBkYXRhIHNvdXJjZXMKICAgIHRoYXQgYXJlIHVzZWQsIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGNhbiBiZSBjcmVhdGVkIHdpdGggYSBzcGVjaWZpYwogICAgZGlzdHJvIHJlbGVhc2UgZmlsZSwgb3IgYSBzcGVjaWZpYyBvcy1yZWxlYXNlIGZpbGUsIG9yIHdpdGhvdXQgaW52b2tpbmcgdGhlCiAgICBsc2JfcmVsZWFzZSBjb21tYW5kLgogICAgTtoAKQfaC2luY2x1ZGVfbHNi2g9vc19yZWxlYXNlX2ZpbGXaE2Rpc3Ryb19yZWxlYXNlX2ZpbGXaDWluY2x1ZGVfdW5hbWXaCHJvb3RfZGly2g9pbmNsdWRlX29zbGV2ZWxyJgAAAGMHAAAAAAAAAAAAAAAKAAAABAAAAEMAAABz8gAAAHwFfABfAHwFchh0AWoCoAN8BWQBoQJuAnQEfABfBXwFcjB0AWoCoAN8BWQCoQJuAnQGfABfB3wCckJ8AnwAXwhuRnQBagKgA3wAagV0CaECfQd0AWoCoAN8AGoHdAmhAn0IdAFqAqAKfAehAXN6dAFqAqAKfAihAXOCfAd8AF8IbgZ8CHwAXwh8A3COZAN8AF8LfAVkBGsJfQl8CXKyfAFzqnwEc6p8BnKydAxkBYMBggF8AWQEawlyvnwBbgR8CQwAfABfDXwEZARrCXLSfARuBHwJDAB8AF8OfAZkBGsJcuZ8Bm4EfAkMAHwAXw9kBFMAKQZhaA4AAAogICAgICAgIFRoZSBpbml0aWFsaXphdGlvbiBtZXRob2Qgb2YgdGhpcyBjbGFzcyBnYXRoZXJzIGluZm9ybWF0aW9uIGZyb20gdGhlCiAgICAgICAgYXZhaWxhYmxlIGRhdGEgc291cmNlcywgYW5kIHN0b3JlcyB0aGF0IGluIHByaXZhdGUgaW5zdGFuY2UgYXR0cmlidXRlcy4KICAgICAgICBTdWJzZXF1ZW50IGFjY2VzcyB0byB0aGUgaW5mb3JtYXRpb24gaXRlbXMgdXNlcyB0aGVzZSBwcml2YXRlIGluc3RhbmNlCiAgICAgICAgYXR0cmlidXRlcywgc28gdGhhdCB0aGUgZGF0YSBzb3VyY2VzIGFyZSByZWFkIG9ubHkgb25jZS4KCiAgICAgICAgUGFyYW1ldGVyczoKCiAgICAgICAgKiBgYGluY2x1ZGVfbHNiYGAgKGJvb2wpOiBDb250cm9scyB3aGV0aGVyIHRoZQogICAgICAgICAgYGxzYl9yZWxlYXNlIGNvbW1hbmQgb3V0cHV0YF8gaXMgaW5jbHVkZWQgYXMgYSBkYXRhIHNvdXJjZS4KCiAgICAgICAgICBJZiB0aGUgbHNiX3JlbGVhc2UgY29tbWFuZCBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBwcm9ncmFtIGV4ZWN1dGlvbgogICAgICAgICAgcGF0aCwgdGhlIGRhdGEgc291cmNlIGZvciB0aGUgbHNiX3JlbGVhc2UgY29tbWFuZCB3aWxsIGJlIGVtcHR5LgoKICAgICAgICAqIGBgb3NfcmVsZWFzZV9maWxlYGAgKHN0cmluZyk6IFRoZSBwYXRoIG5hbWUgb2YgdGhlCiAgICAgICAgICBgb3MtcmVsZWFzZSBmaWxlYF8gdGhhdCBpcyB0byBiZSB1c2VkIGFzIGEgZGF0YSBzb3VyY2UuCgogICAgICAgICAgQW4gZW1wdHkgc3RyaW5nICh0aGUgZGVmYXVsdCkgd2lsbCBjYXVzZSB0aGUgZGVmYXVsdCBwYXRoIG5hbWUgdG8KICAgICAgICAgIGJlIHVzZWQgKHNlZSBgb3MtcmVsZWFzZSBmaWxlYF8gZm9yIGRldGFpbHMpLgoKICAgICAgICAgIElmIHRoZSBzcGVjaWZpZWQgb3IgZGVmYXVsdGVkIG9zLXJlbGVhc2UgZmlsZSBkb2VzIG5vdCBleGlzdCwgdGhlCiAgICAgICAgICBkYXRhIHNvdXJjZSBmb3IgdGhlIG9zLXJlbGVhc2UgZmlsZSB3aWxsIGJlIGVtcHR5LgoKICAgICAgICAqIGBgZGlzdHJvX3JlbGVhc2VfZmlsZWBgIChzdHJpbmcpOiBUaGUgcGF0aCBuYW1lIG9mIHRoZQogICAgICAgICAgYGRpc3RybyByZWxlYXNlIGZpbGVgXyB0aGF0IGlzIHRvIGJlIHVzZWQgYXMgYSBkYXRhIHNvdXJjZS4KCiAgICAgICAgICBBbiBlbXB0eSBzdHJpbmcgKHRoZSBkZWZhdWx0KSB3aWxsIGNhdXNlIGEgZGVmYXVsdCBzZWFyY2ggYWxnb3JpdGhtCiAgICAgICAgICB0byBiZSB1c2VkIChzZWUgYGRpc3RybyByZWxlYXNlIGZpbGVgXyBmb3IgZGV0YWlscykuCgogICAgICAgICAgSWYgdGhlIHNwZWNpZmllZCBkaXN0cm8gcmVsZWFzZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBvciBpZiBubyBkZWZhdWx0CiAgICAgICAgICBkaXN0cm8gcmVsZWFzZSBmaWxlIGNhbiBiZSBmb3VuZCwgdGhlIGRhdGEgc291cmNlIGZvciB0aGUgZGlzdHJvCiAgICAgICAgICByZWxlYXNlIGZpbGUgd2lsbCBiZSBlbXB0eS4KCiAgICAgICAgKiBgYGluY2x1ZGVfdW5hbWVgYCAoYm9vbCk6IENvbnRyb2xzIHdoZXRoZXIgdW5hbWUgY29tbWFuZCBvdXRwdXQgaXMKICAgICAgICAgIGluY2x1ZGVkIGFzIGEgZGF0YSBzb3VyY2UuIElmIHRoZSB1bmFtZSBjb21tYW5kIGlzIG5vdCBhdmFpbGFibGUgaW4KICAgICAgICAgIHRoZSBwcm9ncmFtIGV4ZWN1dGlvbiBwYXRoIHRoZSBkYXRhIHNvdXJjZSBmb3IgdGhlIHVuYW1lIGNvbW1hbmQgd2lsbAogICAgICAgICAgYmUgZW1wdHkuCgogICAgICAgICogYGByb290X2RpcmBgIChzdHJpbmcpOiBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gdXNlCiAgICAgICAgICB0byBmaW5kIGRpc3Ryby1yZWxhdGVkIGluZm9ybWF0aW9uIGZpbGVzLiBOb3RlIHRoYXQgYGBpbmNsdWRlXypgYAogICAgICAgICAgcGFyYW1ldGVycyBtdXN0IG5vdCBiZSBlbmFibGVkIGluIGNvbWJpbmF0aW9uIHdpdGggYGByb290X2RpcmBgLgoKICAgICAgICAqIGBgaW5jbHVkZV9vc2xldmVsYGAgKGJvb2wpOiBDb250cm9scyB3aGV0aGVyIChBSVgpIG9zbGV2ZWwgY29tbWFuZAogICAgICAgICAgb3V0cHV0IGlzIGluY2x1ZGVkIGFzIGEgZGF0YSBzb3VyY2UuIElmIHRoZSBvc2xldmVsIGNvbW1hbmQgaXMgbm90CiAgICAgICAgICBhdmFpbGFibGUgaW4gdGhlIHByb2dyYW0gZXhlY3V0aW9uIHBhdGggdGhlIGRhdGEgc291cmNlIHdpbGwgYmUKICAgICAgICAgIGVtcHR5LgoKICAgICAgICBQdWJsaWMgaW5zdGFuY2UgYXR0cmlidXRlczoKCiAgICAgICAgKiBgYG9zX3JlbGVhc2VfZmlsZWBgIChzdHJpbmcpOiBUaGUgcGF0aCBuYW1lIG9mIHRoZQogICAgICAgICAgYG9zLXJlbGVhc2UgZmlsZWBfIHRoYXQgaXMgYWN0dWFsbHkgdXNlZCBhcyBhIGRhdGEgc291cmNlLiBUaGUKICAgICAgICAgIGVtcHR5IHN0cmluZyBpZiBubyBkaXN0cm8gcmVsZWFzZSBmaWxlIGlzIHVzZWQgYXMgYSBkYXRhIHNvdXJjZS4KCiAgICAgICAgKiBgYGRpc3Ryb19yZWxlYXNlX2ZpbGVgYCAoc3RyaW5nKTogVGhlIHBhdGggbmFtZSBvZiB0aGUKICAgICAgICAgIGBkaXN0cm8gcmVsZWFzZSBmaWxlYF8gdGhhdCBpcyBhY3R1YWxseSB1c2VkIGFzIGEgZGF0YSBzb3VyY2UuIFRoZQogICAgICAgICAgZW1wdHkgc3RyaW5nIGlmIG5vIGRpc3RybyByZWxlYXNlIGZpbGUgaXMgdXNlZCBhcyBhIGRhdGEgc291cmNlLgoKICAgICAgICAqIGBgaW5jbHVkZV9sc2JgYCAoYm9vbCk6IFRoZSByZXN1bHQgb2YgdGhlIGBgaW5jbHVkZV9sc2JgYCBwYXJhbWV0ZXIuCiAgICAgICAgICBUaGlzIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGxzYiBpbmZvcm1hdGlvbiB3aWxsIGJlIGxvYWRlZC4KCiAgICAgICAgKiBgYGluY2x1ZGVfdW5hbWVgYCAoYm9vbCk6IFRoZSByZXN1bHQgb2YgdGhlIGBgaW5jbHVkZV91bmFtZWBgCiAgICAgICAgICBwYXJhbWV0ZXIuIFRoaXMgY29udHJvbHMgd2hldGhlciB0aGUgdW5hbWUgaW5mb3JtYXRpb24gd2lsbAogICAgICAgICAgYmUgbG9hZGVkLgoKICAgICAgICAqIGBgaW5jbHVkZV9vc2xldmVsYGAgKGJvb2wpOiBUaGUgcmVzdWx0IG9mIHRoZSBgYGluY2x1ZGVfb3NsZXZlbGBgCiAgICAgICAgICBwYXJhbWV0ZXIuIFRoaXMgY29udHJvbHMgd2hldGhlciAoQUlYKSBvc2xldmVsIGluZm9ybWF0aW9uIHdpbGwgYmUKICAgICAgICAgIGxvYWRlZC4KCiAgICAgICAgKiBgYHJvb3RfZGlyYGAgKHN0cmluZyk6IFRoZSByZXN1bHQgb2YgdGhlIGBgcm9vdF9kaXJgYCBwYXJhbWV0ZXIuCiAgICAgICAgICBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gdXNlIHRvIGZpbmQgZGlzdHJvLXJlbGF0ZWQKICAgICAgICAgIGluZm9ybWF0aW9uIGZpbGVzLgoKICAgICAgICBSYWlzZXM6CgogICAgICAgICogOnB5OmV4YzpgVmFsdWVFcnJvcmA6IEluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMgY29tYmluYXRpb24gaXMgbm90CiAgICAgICAgICAgc3VwcG9ydGVkLgoKICAgICAgICAqIDpweTpleGM6YE9TRXJyb3JgOiBTb21lIEkvTyBpc3N1ZSB3aXRoIGFuIG9zLXJlbGVhc2UgZmlsZSBvciBkaXN0cm8KICAgICAgICAgIHJlbGVhc2UgZmlsZS4KCiAgICAgICAgKiA6cHk6ZXhjOmBVbmljb2RlRXJyb3JgOiBBIGRhdGEgc291cmNlIGhhcyB1bmV4cGVjdGVkIGNoYXJhY3RlcnMgb3IKICAgICAgICAgIHVzZXMgYW4gdW5leHBlY3RlZCBlbmNvZGluZy4KICAgICAgICDaA2V0Y3oHdXNyL2xpYnJVAAAATnpjSW5jbHVkaW5nIHN1YnByb2Nlc3MgZGF0YSBzb3VyY2VzIGZyb20gc3BlY2lmaWMgcm9vdF9kaXIgaXMgZGlzYWxsb3dlZCB0byBwcmV2ZW50IGZhbHNlIGluZm9ybWF0aW9uKRByWgAAANoCb3PaBHBhdGjaBGpvaW7aDF9VTklYQ09ORkRJUtoHZXRjX2RpctoOX1VOSVhVU1JMSUJESVJaC3Vzcl9saWJfZGlyclcAAADaFF9PU19SRUxFQVNFX0JBU0VOQU1F2gZpc2ZpbGVyWAAAANoKVmFsdWVFcnJvcnJWAAAAclkAAAByWwAAACkKcksAAAByVgAAAHJXAAAAclgAAAByWQAAAHJaAAAAclsAAABaF2V0Y19kaXJfb3NfcmVsZWFzZV9maWxlWhd1c3JfbGliX29zX3JlbGVhc2VfZmlsZVoTaXNfcm9vdF9kaXJfZGVmaW5lZHIVAAAAchUAAAByFgAAAHJMAAAAgQIAAHM4AAAAAFwGARgCFP8EBAQBCAIQAQYBBAAC/wQGEgEC/wQDCAIGAgoCCAEQAQIBAv8EBRD/BAQQ/wQEEP96GkxpbnV4RGlzdHJpYnV0aW9uLl9faW5pdF9fci4AAABjAQAAAAAAAAAAAAAAAQAAAAMAAABDAAAAcwwAAABkAWoAfABkAo0BUwApA3oXUmV0dXJuIHJlcHIgb2YgYWxsIGluZm9h0QEAAExpbnV4RGlzdHJpYnV0aW9uKG9zX3JlbGVhc2VfZmlsZT17c2VsZi5vc19yZWxlYXNlX2ZpbGUhcn0sIGRpc3Ryb19yZWxlYXNlX2ZpbGU9e3NlbGYuZGlzdHJvX3JlbGVhc2VfZmlsZSFyfSwgaW5jbHVkZV9sc2I9e3NlbGYuaW5jbHVkZV9sc2Ihcn0sIGluY2x1ZGVfdW5hbWU9e3NlbGYuaW5jbHVkZV91bmFtZSFyfSwgaW5jbHVkZV9vc2xldmVsPXtzZWxmLmluY2x1ZGVfb3NsZXZlbCFyfSwgcm9vdF9kaXI9e3NlbGYucm9vdF9kaXIhcn0sIF9vc19yZWxlYXNlX2luZm89e3NlbGYuX29zX3JlbGVhc2VfaW5mbyFyfSwgX2xzYl9yZWxlYXNlX2luZm89e3NlbGYuX2xzYl9yZWxlYXNlX2luZm8hcn0sIF9kaXN0cm9fcmVsZWFzZV9pbmZvPXtzZWxmLl9kaXN0cm9fcmVsZWFzZV9pbmZvIXJ9LCBfdW5hbWVfaW5mbz17c2VsZi5fdW5hbWVf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MQAAANoKY2xvdWRsaW51eHIYAAAAco4AAAB6DFN1U0UtcmVsZWFzZXoMYXJjaC1yZWxlYXNlegxiYXNlLXJlbGVhc2V6DmNlbnRvcy1yZWxlYXNleg5mZWRvcmEtcmVsZWFzZXoOZ2VudG9vLXJlbGVhc2V6Dm1hZ2VpYS1yZWxlYXNlehBtYW5kcmFrZS1yZWxlYXNlehBtYW5kcml2YS1yZWxlYXNlehVtYW5kcml2YWxpbnV4LXJlbGVhc2V6D21hbmphcm8tcmVsZWFzZXoOb3JhY2xlLXJlbGVhc2V6DnJlZGhhdC1yZWxlYXNleg1yb2NreS1yZWxlYXNlegpzbC1yZWxlYXNlehFzbGFja3dhcmUtdmVyc2lvbk4pD3JYAAAA2hpfcGFyc2VfZGlzdHJvX3JlbGVhc2VfZmlsZXJdAAAAcl4AAADaCGJhc2VuYW1l2iBfRElTVFJPX1JFTEVBU0VfQkFTRU5BTUVfUEFUVEVSTnKHAAAAcnAAAABypwAAANoHbGlzdGRpcnJhAAAA2gRzb3J0crMAAADaIF9ESVNUUk9fUkVMRUFTRV9JR05PUkVfQkFTRU5BTUVTcl8AAAApBnJLAAAA2gtkaXN0cm9faW5mb3LMAAAAcocAAADaCWJhc2VuYW1lc9oIZmlsZXBhdGhyFQAAAHIVAAAAchYAAABykwAAAL0EAABzWAAAAAAIBgMMAQ4FCgEYAQoBBAEOAQQCAgEMBAwBDgYCAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgEC8AoSCAEIAQIBCgEEARABCgEIAgYBDgESAQgBCgF6JkxpbnV4RGlzdHJpYnV0aW9uLl9kaXN0cm9fcmVsZWFzZV9pbmZvKQJy0wAAAHImAAAAYwIAAAAAAAAAAAAAAAMAAAAKAAAAQwAAAHNSAAAAejR0AHwBZAFkAo0Cjx59AnwAoAF8AqACoQChAVcAAgA1AFEAUgCjAFcAUwBRAFIAWABXAG4YBAB0A2sKckwBAAEAAQBpAAYAWQBTAFgAZANTACkEessKICAgICAgICBQYXJzZSBhIGRpc3RybyByZWxlYXNlIGZpbGUuCgogICAgICAgIFBhcmFtZXRlcnM6CgogICAgICAgICogZmlsZXBhdGg6IFBhdGggbmFtZSBvZiB0aGUgZGlzdHJvIHJlbGVh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