# Name: msd_google_map v2.0.1 # Type: Admin only plugin # Associate location information for an article. # Author: Matt Davis # URL: http://photographdaddy.com # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMDp7czo0OiJuYW1lIjtzOjE0OiJtc2RfZ29vZ2xlX21hcCI7czo2OiJhdXRob3IiO3M6 MTA6Ik1hdHQgRGF2aXMiO3M6MTA6ImF1dGhvcl91cmkiO3M6MjY6Imh0dHA6Ly9waG90b2dy YXBoZGFkZHkuY29tIjtzOjc6InZlcnNpb24iO3M6NToiMi4wLjEiO3M6MTE6ImRlc2NyaXB0 aW9uIjtzOjQ2OiJBc3NvY2lhdGUgbG9jYXRpb24gaW5mb3JtYXRpb24gZm9yIGFuIGFydGlj bGUuIjtzOjQ6ImNvZGUiO3M6MjI0NzA6IiMjIyMjIyMjIyMjIyMjIw0KIw0KIwltc2RfZ29v Z2xlX21hcCBmb3IgVGV4dHBhdHRlcm4NCiMJdmVyc2lvbiAyLjAuMQ0KIwlieSBNYXR0IERh dmlzDQojCWh0dHA6Ly9waG90b2dyYXBoZGFkZHkuY29tDQojDQojIAlDaGFuZ2UgTG9nDQoj CXYwLjIgLSBhZGRlZCBnZW9jb2RlciB0byBsb29rdXAgYWRkcmVzc2VzDQojCXYwLjMgLSBh ZGRlZCB2YXJpYWJsZXMgZm9yIGN1c3RvbSBmaWVsZHMgdG8gYWxsb3cgdGhlbSB0byBlYXNp bHkgYmUgY2hhbmdlZC4NCiMJdjAuNCAtIGFkZGVkIFsrXSBhbmQgWy1dIGJ1dHRvbnMgdG8g bGFiZWwgcGVyIHJlcXVlc3QgZnJvbSBjYW5keW1hbiANCiMJdjEuMCAtIGFkZGVkIHByZWZl cmVuY2VzIHRhYiB0byBhbGxvdyBlYXN5IHVwZGF0ZS4NCiMJCWFkZGVkIGFiaWxpdHkgdG8g c2VsZWN0IGxhcmdlIGNlbnRlciBjb2x1bW4gbWFwIG9yIHNtYWxsIGxlZnQgY29sdW1uIG1h cC4NCiMJCWFkZGVkIHZhcmlvdXMgbWFwIGNvbnRyb2wgYW5kIHR5cGUgb3B0aW9ucy4NCiMJ djEuMSAtIGFkZGVkIGN1c3RvbWl6YWJsZSBNYXJrZXIgdXNpbmcgbWFwaWNvbm1ha2VyLmpz IA0KIwl2MS4yIC0gYWRkZWQgY29tcGF0aWJpbGl0eSB3aXRoIFRleHRwYXR0ZXJuIDQuMC42 DQojCXYxLjMgLSBhZGRlZCBHVW5sb2FkKCkgdG8gcHJldmVudCBicm93c2VyIG1lbW9yeSBs ZWFrcyBwZXIgR29vZ2xlIERvY3VtZW50YXRpb24uDQojCXYxLjQgLSB1cGRhdGVkIGhlbHAu DQojCXYxLjUgLSBmaXhlZCBtYXAgem9vbSBzZXR0aW5nLg0KIwl2MS42IC0gYWRkZWQgaW5p dGlhbCB6b29tIHNldHRpbmcuDQojCXYxLjcgLSBhZGRlZCBNTFAgUGFjayBjb2RlIGZyb20g aHR0cDovL3R4cC1wbHVnaW5zLm5ldGNhcnZpbmcuY29tL3BsdWdpbnMvd3JpdGluZy1tbHAt cmVhZHktcGx1Z2lucw0KIwl2MS44IC0gYWRkZWQgY29sb3JwaWNrZXIgdG8gcHJlZmVyZW5j ZXMgdGFiIGlmIG1zZF9hZG1pbl9jb2xvcnBpY2tlciBpcyBhbHNvIGluc3RhbGxlZC4NCiMJ djIuMCAtIHJlZmFjdG9yZWQgamF2YXNjcmlwdCBpbmplY3Rpb24gdG8gd29yayB3aXRoIGZ1 dHVyZSB2ZXJzaW9ucyBvZiBUZXh0cGF0dGVybg0KIwkJcGx1Z2luIHR5cGUgaXMgbm93IEFk bWluIE9ubHkuDQojCXYyLjAuMSAtIGF0dGVtcHQgdG8gZml4IGdlb2NvZGVyIGJ1Zw0KIw0K IyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5DQojICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCiMgICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBv cg0KIyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQojDQojICAgVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsDQojICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YNCiMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQojICAgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMNCiMjIyMjIyMjIyMjIyMjIyMjIyMN CmFkZF9wcml2cygncGx1Z2luX3ByZWZzLm1zZF9nb29nbGVfbWFwJywnMSwyJyk7DQpyZWdp c3Rlcl9jYWxsYmFjaygnbXNkX2dvb2dsZV9tYXBfc2V0dXAnLCdwbHVnaW5fcHJlZnMubXNk X2dvb2dsZV9tYXAnKTsNCg0KLy9NTFAgUGFjayBkZWZpbml0aW9ucyANCg0KZGVmaW5lKCdN U0RfR09PR0xFX01BUF9QUkVGSVgnLCAnbXNkX2dnbCcpOw0KZ2xvYmFsICRtc2RfZ29vZ2xl X21hcF9zdHJpbmdzOyANCg0KCSRtc2RfZ29vZ2xlX21hcF9zdHJpbmdzID0gYXJyYXkoCQ0K CSdhcnRpY2xlX2xvY2F0aW9uJwk9PgknQXJ0aWNsZSBMb2NhdGlvbicsDQoJJ21hcCcJCQkJ PT4JJ01hcCcsDQoJJ2FkZHJlc3MnCQkJPT4JJ0FkZHJlc3MgTG9va3VwJywNCgkncHJlZmVy ZW5jZXMnCQk9PgknQXJ0aWNsZSBMb2NhdGlvbiBQcmVmZXJlbmNlcycsDQoJJ2luc3RydWN0 aW9ucycJCT0+CSdTZXQgQVBJIEtleSwgSUQgb2YgY3VzdG9tIGZpZWxkcyB1c2VkIGZvciBh c3NvY2lhdGluZyBsYXQvbG5nIHdpdGggYXJ0aWNsZXMgYW5kIG90aGVyIG1hcCBzZXR0aW5n cy4nLA0KCSdkaXNwbGF5X2xhcmdlX21hcCcJPT4JJ0Rpc3BsYXkgTGFyZ2UgTWFwPycsDQoJ J21hcF9hcGlfa2V5JwkJPT4JJ0dvb2dsZSBNYXAgQVBJIEtleScsDQoJJ2xhdF9jdXN0b21f ZmllbGQnCT0+CSdJRCBvZiBMYXRpdHVkZSBDdXN0b20gRmllbGQnLA0KCSdsb25nX2N1c3Rv bV9maWVsZCcJPT4JJ0lEIG9mIExvbmdpdHVkZSBDdXN0b20gRmllbGQnLA0KCSdzdGFydF9j b29yZCcJCT0+CSdTdGFydGluZyBDb29yZGluYXRlcycsDQoJJ21hcF90eXBlJwkJCT0+CSdN YXAgVHlwZScsDQoJJ25vcm1hbCcJCQk9PgknTm9ybWFsJywNCgknc2F0ZWxpdHRlJwkJCT0+ CSdTYXRlbGl0dGUnLA0KCSdoeWJyaWQnCQkJPT4JJ0h5YnJpZCcsDQoJJ2NvbnRyb2xfdHlw ZScJCT0+CSdDb250cm9sIFR5cGUnLA0KCSd6b29tX3BhbicJCQk9PgknWm9vbSBhbmQgUGFu JywNCgknYmFzaWNfem9vbScJCT0+CSdCYXNpYyBab29tJywNCgknM2Rfem9vbScJCQk9Pgkn M0Qtc3R5bGUgWm9vbScsDQoJJ3pvb21fbGV2ZWwnCQk9PgknWm9vbSBMZXZlbCcsDQoJJ3N0 YXJ0X3pvb21fbGV2ZWwnCT0+CSdTdGFydGluZyBab29tIExldmVsJywNCgknbWFya2VyX3dp ZHRoJwkJPT4JJ01hcmtlciBXaWR0aCcsDQoJJ21hcmtlcl9oZWlnaHQnCQk9PgknTWFya2Vy IEhlaWdodCcsDQoJJ21hcmtlcl9wcmltYXJ5X2NvbG9yJwk9PgknTWFya2VyIFByaW1hcnkg Q29sb3InLA0KCSdtYXJrZXJfc3Ryb2tlX2NvbG9yJwk9PgknTWFya2VyIFN0cm9rZSBDb2xv cicsDQoJJ21hcmtlcl9jb3JuZXJfY29sb3InCT0+CSdNYXJrZXIgQ29ybmVyIENvbG9yJywN Cgknbm90X2ZvdW5kJwkJCT0+CSdub3QgZm91bmQnLA0KCSdub3Rfc2V0JwkJCT0+CSdtc2Rf Z29vZ2xlX21hcDogR29vZ2xlIE1hcHMgQVBJIEtleSBpcyBub3Qgc2V0LicNCgkpOw0KDQpy ZWdpc3Rlcl9jYWxsYmFjayggJ21zZF9nb29nbGVfbWFwX2VudW1lcmF0ZV9zdHJpbmdzJyAs ICdsMTBuLmVudW1lcmF0ZV9zdHJpbmdzJyApOw0KDQpmdW5jdGlvbiBtc2RfZ29vZ2xlX21h cF9lbnVtZXJhdGVfc3RyaW5ncygkZXZlbnQgLCAkc3RlcD0nJyAsICRwcmU9MCkNCgl7DQoJ Z2xvYmFsICRtc2RfZ29vZ2xlX21hcF9zdHJpbmdzOw0KCSRyID0gYXJyYXkJKA0KCQkJCSdv d25lcicJPT4gJ21zZF9nb29nbGVfbWFwJywJCSMJQ2hhbmdlIHRvIHlvdXIgcGx1Z2luIG5h bWUNCgkJCQkncHJlZml4Jwk9PiBNU0RfR09PR0xFX01BUF9QUkVGSVgsCSMJSXRzIHVuaXF1 ZSBzdHJpbmcgcHJlZml4DQoJCQkJJ2xhbmcnCT0+ICdlbi11cycsCQkJCSMJVGhlIGxhbmd1 YWdlIG9mIHRoZSBpbml0aWFsIHN0cmluZ3MuDQoJCQkJJ2V2ZW50Jwk9PiAnYWRtaW4nLAkJ CQkjCXB1YmxpYy9hZG1pbi9jb21tb24gPSB3aGljaCBpbnRlcmZhY2UgdGhlIHN0cmluZ3Mg d2lsbCBiZSBsb2FkZWQgaW50bw0KCQkJCSdzdHJpbmdzJwk9PiAkbXNkX2dvb2dsZV9tYXBf c3RyaW5ncywJIwlUaGUgc3RyaW5ncyB0aGVtc2VsdmVzLg0KCQkJCSk7DQoJcmV0dXJuICRy Ow0KCX0NCg0KZnVuY3Rpb24gbXNkX2dvb2dsZV9tYXBfZ1R4dCggJHdoYXQgLCAkYXJncyA9 IGFycmF5KCkgKQ0KCXsNCglnbG9iYWwgJHRleHRhcnJheTsNCglnbG9iYWwgJG1zZF9nb29n bGVfbWFwX3N0cmluZ3M7DQoNCgkjDQoJIwlQcmVwYXJlIHRoZSBwcmVmaXhlZCBrZXkgZm9y IHVzZS4uLg0KCSMNCgkka2V5ID0gTVNEX0dPT0dMRV9NQVBfUFJFRklYIC4gJy0nIC4gJHdo YXQ7DQoJJGtleSA9IHN0cnRvbG93ZXIoJGtleSk7DQoNCgkjDQoJIwlHcmFiIGZyb20gdGhl IGdsb2JhbCB0ZXh0YXJyYXkgKHBvc3NpYmx5IGVkaXRlZCBieSBNTFApIGlmIHdlIGNhbi4u Lg0KCSMNCglpZihpc3NldCgkdGV4dGFycmF5WyRrZXldKSkNCgkJew0KCQkkc3RyID0gJHRl eHRhcnJheVska2V5XTsNCgkJfQ0KCWVsc2UNCgkJew0KCQkjDQoJCSMJVGhlIHN0cmluZyBp cyBub3QgaW4gdGhlIGxvY2FsaXNlZCAkdGV4dGFycmF5IHNvIGZhbGxiYWNrIHRvIHVzaW5n IA0KCQkjIHRoZSBzdHJpbmcgYXJyYXkgaW4gdGhlIHBsdWdpbiAod2hpY2ggaXMgbm90IHBy ZWZpeGVkLikNCgkJIw0KCQkka2V5ID0gc3RydG9sb3dlcigkd2hhdCk7DQoNCgkJaWYoIGlz c2V0KCAkbXNkX2dvb2dsZV9tYXBfc3RyaW5nc1ska2V5XSApICkNCgkJCSRzdHIgPSAkbXNk X2dvb2dsZV9tYXBfc3RyaW5nc1ska2V5XTsNCgkJZWxzZQ0KCQkJIw0KCQkJIwlGYWxsYmFj ayB0byByZXR1cm5pbmcgdGhlIGtleSBpZiB0aGUgc3RyaW5nIGlzIG5vdCBwcmVzZW50Li4u DQoJCQkjDQoJCQkkc3RyID0gJHdoYXQ7DQoJCX0NCg0KCSMNCgkjCUlmIG5lZWRlZCwgcGVy Zm9ybSBzdWJzdGl0dXRpb25zLi4uDQoJIw0KCWlmKCAhZW1wdHkoJGFyZ3MpICkNCgkJJHN0 ciA9IHN0cnRyKCAkc3RyICwgJGFyZ3MgKTsNCg0KCXJldHVybiAkc3RyOw0KCX0NCg0KaWYg KEB0eHBpbnRlcmZhY2UgPT0gJ2FkbWluJykNCnsNCiAgZ2xvYmFsICRtc2RfZ29vZ2xlbWFw c2FwaWtleSwgJG1zZF9jb29yZDEsICRtc2RfY29vcmQyLCAkbXNkX3N0YXJ0LCANCiAgICAg ICAgICAgICRtc2RfbWFwcGxhY2VtZW50LCAkbXNkX21hcFR5cGUsICRtc2RfY29udHJvbCwg JG1zZF96b29tLA0KICAgICAgICAgICAgJG1zZF9pbml0aWFsX3pvb20sICRtc2RfbWFya2Vy X3R5cGUsICRtc2RfbWFya2VyX3dpZHRoLCAkbXNkX21hcmtlcl9oZWlnaHQsDQogICAgICAg ICAgICAkbXNkX21hcmtlcl9wcmltYXJ5X2NvbG9yLCAkbXNkX21hcmtlcl9zdHJva2VfY29s b3IsDQogICAgICAgICAgICAkbXNkX21hcmtlcl9jb3JuZXJfY29sb3I7DQoNCg0KCS8vJ21z ZF9nb29nbGVfbWFwX3NldHVwJyB3aWxsIGJlIGNhbGxlZCB0byBoYW5kbGUgdGhlICdtc2Rf Z29vZ2xlX21hcCcgZXZlbnQNCglyZWdpc3Rlcl9jYWxsYmFjaygibXNkX2dvb2dsZV9tYXBf c2V0dXAiLCAibXNkX2dvb2dsZV9tYXAiKTsNCgkvL3JlZ2lzdGVyX2NhbGxiYWNrKCdtc2Rf Z29vZ2xlX21hcF9hZG1pbicsICdhcnRpY2xlJyk7DQoJcmVnaXN0ZXJfY2FsbGJhY2soIm1z ZF9nb29nbGVfbWFwX2hlYWQiLCAiYXJ0aWNsZSIpOw0KCW9iX3N0YXJ0KCdtc2RfZ29vZ2xl X21hcF9hZG1pbicpOw0KCWFkZF9wcml2cygnbXNkX2dvb2dsZV9tYXAnLCAxKTsNCglyZWdp c3Rlcl90YWIoImV4dGVuc2lvbnMiLCAibXNkX2dvb2dsZV9tYXAiLCBtc2RfZ29vZ2xlX21h cF9nVHh0KCdhcnRpY2xlX2xvY2F0aW9uJykpOw0KICAgICAgICAvL3JlZ2lzdGVyX2NhbGxi YWNrKCdtc2RfZ29vZ2xlX21hcCcsICdwbHVnaW5fcHJlZnMubXNkX2dvb2dsZV9tYXAnKTsN Cg0KCWlmICghaXNzZXQoJG1zZF9nb29nbGVtYXBzYXBpa2V5KSkgew0KCQkkbXNkX2dvb2ds ZW1hcHNhcGlrZXkgPSAiQVBJLUtFWSI7DQoJCSRtc2QgPSBzYWZlX2luc2VydCgndHhwX3By ZWZzJywgIm5hbWU9J21zZF9nb29nbGVtYXBzYXBpa2V5JywgdmFsPSckbXNkX2dvb2dsZW1h cHNhcGlrZXknLCBwcmVmc19pZD0nMSciKTsNCgl9DQoNCglpZiAoIWlzc2V0KCRtc2RfY29v cmQxKSkgew0KCQkkbXNkX2Nvb3JkMSA9ICJjdXN0b20tMSI7DQoJCSRtc2QgPSBzYWZlX2lu c2VydCgndHhwX3ByZWZzJywgIm5hbWU9J21zZF9jb29yZDEnLCB2YWw9JyRtc2RfY29vcmQx JywgcHJlZnNfaWQ9JzEnIik7DQoJfQ0KDQoJaWYgKCFpc3NldCgkbXNkX2Nvb3JkMikpIHsN CgkJJG1zZF9jb29yZDIgPSAiY3VzdG9tLTIiOw0KCQkkbXNkID0gc2FmZV9pbnNlcnQoJ3R4 cF9wcmVmcycsICJuYW1lPSdtc2RfY29vcmQyJywgdmFsPSckbXNkX2Nvb3JkMicsIHByZWZz X2lkPScxJyIpOw0KCX0NCglpZiAoIWlzc2V0KCRtc2Rfc3RhcnQpKSB7DQoJCSRtc2Rfc3Rh cnQgPSAiMzYuNTQ0OTQ5NDQxNDgzMjIsLTEyMS44NjU4NDQ3MjY1NjI1IjsNCgkJJG1zZCA9 IHNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCAibmFtZT0nbXNkX3N0YXJ0JywgdmFsPSckbXNk X3N0YXJ0JywgcHJlZnNfaWQ9JzEnIik7DQoJfQ0KCQ0KCQlpZiAoIWlzc2V0KCRtc2RfbWFw cGxhY2VtZW50KSkgew0KCQkkbXNkX21hcHBsYWNlbWVudCA9IDE7DQoJCSRtc2QgPSBzYWZl X2luc2VydCgndHhwX3ByZWZzJywgIm5hbWU9J21zZF9tYXBwbGFjZW1lbnQnLCB2YWw9JyRt c2RfbWFwcGxhY2VtZW50JywgcHJlZnNfaWQ9JzEnIik7DQoJfQ0KCWlmICghaXNzZXQoJG1z ZF9tYXBUeXBlKSkgew0KCQkkbXNkX21hcFR5cGUgPSAwOw0KCQkkbXNkID0gc2FmZV9pbnNl cnQoJ3R4cF9wcmVmcycsICJuYW1lPSdtc2RfbWFwVHlwZScsIHZhbD0nJG1zZF9tYXBUeXBl JywgcHJlZnNfaWQ9JzEnIik7DQoJfQ0KCWlmICghaXNzZXQoJG1zZF9jb250cm9sKSkgew0K CQkkbXNkX2NvbnRyb2w9IDA7DQoJCSRtc2QgPSBzYWZlX2luc2VydCgndHhwX3ByZWZzJywg Im5hbWU9J21zZF9jb250cm9sJywgdmFsPSckbXNkX2NvbnRyb2wnLCBwcmVmc19pZD0nMSci KTsNCgl9DQogIAlpZiAoIWlzc2V0KCRtc2Rfem9vbSkpIHsNCgkJJG1zZF96b29tPSAxMzsN CgkJJG1zZCA9IHNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCAibmFtZT0nbXNkX3pvb20nLCB2 YWw9JyRtc2Rfem9vbScsIHByZWZzX2lkPScxJyIpOw0KCX0NCglpZiAoIWlzc2V0KCRtc2Rf aW5pdGlhbF96b29tKSkgew0KCQkkbXNkX2luaXRpYWxfem9vbT0gMTM7DQoJCSRtc2QgPSBz YWZlX2luc2VydCgndHhwX3ByZWZzJywgIm5hbWU9J21zZF9pbml0aWFsX3pvb20nLCB2YWw9 JyRtc2RfaW5pdGlhbF96b29tJywgcHJlZnNfaWQ9JzEnIik7DQoJfQ0KICANCiAgICAJaWYg KCFpc3NldCgkbXNkX21hcmtlcl90eXBlKSkgew0KCQkkbXNkX21hcmtlcl90eXBlPSAwOw0K CQkkbXNkID0gc2FmZV9pbnNlcnQoJ3R4cF9wcmVmcycsICJuYW1lPSdtc2RfbWFya2VyX3R5 cGUnLCB2YWw9JyRtc2RfbWFya2VyX3R5cGUnLCBwcmVmc19pZD0nMSciKTsNCgl9ICAJDQog ICAgICBpZiAoIWlzc2V0KCRtc2RfbWFya2VyX3dpZHRoKSkgew0KCQkkbXNkX21hcmtlcl93 aWR0aD0gMzI7DQoJCSRtc2QgPSBzYWZlX2luc2VydCgndHhwX3ByZWZzJywgIm5hbWU9J21z ZF9tYXJrZXJfd2lkdGgnLCB2YWw9JyRtc2RfbWFya2VyX3dpZHRoJywgcHJlZnNfaWQ9JzEn Iik7DQoJfSAgCQ0KICAgICAgaWYgKCFpc3NldCgkbXNkX21hcmtlcl9oZWlnaHQpKSB7DQoJ CSRtc2RfbWFya2VyX2hlaWdodD0gMzI7DQoJCSRtc2QgPSBzYWZlX2luc2VydCgndHhwX3By ZWZzJywgIm5hbWU9J21zZF9tYXJrZXJfaGVpZ2h0JywgdmFsPSckbXNkX21hcmtlcl9oZWln aHQnLCBwcmVmc19pZD0nMSciKTsNCgl9ICAJDQogICAgICBpZiAoIWlzc2V0KCRtc2RfbWFy a2VyX3ByaW1hcnlfY29sb3IpKSB7DQoJCSRtc2RfbWFya2VyX3ByaW1hcnlfY29sb3I9ICcj RkYwMDAwJzsNCgkJJG1zZCA9IHNhZmVfaW5zZXJ0KCd0eHBfcHJlZnMnLCAibmFtZT0nbXNk X21hcmtlcl9wcmltYXJ5X2NvbG9yJywgdmFsPSckbXNkX21hcmtlcl9wcmltYXJ5X2NvbG9y JywgcHJlZnNfaWQ9JzEnIik7DQoJfSAgCQ0KICAgICAgaWYgKCFpc3NldCgkbXNkX21hcmtl cl9zdHJva2VfY29sb3IpKSB7DQoJCSRtc2RfbWFya2VyX3N0cm9rZV9jb2xvcj0gJyMwMDAw MDAnOw0KCQkkbXNkID0gc2FmZV9pbnNlcnQoJ3R4cF9wcmVmcycsICJuYW1lPSdtc2RfbWFy a2VyX3N0cm9rZV9jb2xvcicsIHZhbD0nJG1zZF9tYXJrZXJfc3Ryb2tlX2NvbG9yJywgcHJl ZnNfaWQ9JzEnIik7DQoJfSAgCQ0KICAgICAgaWYgKCFpc3NldCgkbXNkX21hcmtlcl9jb3Ju ZXJfY29sb3IpKSB7DQoJCSRtc2RfbWFya2VyX2Nvcm5lcl9jb2xvcj0gJyNGRkZGRkYnOw0K CQkkbXNkID0gc2FmZV9pbnNlcnQoJ3R4cF9wcmVmcycsICJuYW1lPSdtc2RfbWFya2VyX2Nv cm5lcl9jb2xvcicsIHZhbD0nJG1zZF9tYXJrZXJfY29ybmVyX2NvbG9yJywgcHJlZnNfaWQ9 JzEnIik7DQoJfQ0KDQpzd2l0Y2goZ3BzKCdtc2RfZ29vZ2xlX21hcF9qcycpKSB7DQoJY2Fz ZSAnbWFwaWNvbm1ha2VyX3BhY2tlZGpzJzoNCgkJbXNkX2dvb2dsZV9tYXBfanMoKTsNCgkJ YnJlYWs7DQoJY2FzZSAnbXNkX2dvb2dsZV9tYXBqcyc6DQoJCW1zZF9nb29nbGVfbWFwanMo KTsNCgkJYnJlYWs7DQoJZGVmYXVsdDoNCgkJYnJlYWs7DQp9DQppZihncHMoJ21zZF9nb29n bGVfbWFwX2pzJykpIG1zZF9nb29nbGVfbWFwX2pzKGdwcygnbXNkX2dvb2dsZV9tYXBfanMn KSk7DQp9DQoNCglmdW5jdGlvbiBtc2RfZ29vZ2xlX21hcF9oZWFkKCRldmVudCwgJHN0ZXAp DQp7DQpnbG9iYWwgJG1zZF9nb29nbGVtYXBzYXBpa2V5LCAkbXNkX2Nvb3JkMSwgJG1zZF9j b29yZDIsICRtc2Rfc3RhcnQsIA0KICAgICAgICAgICAgJG1zZF9tYXBwbGFjZW1lbnQsICRt c2RfbWFwVHlwZSwgJG1zZF9jb250cm9sLCAkbXNkX3pvb20sDQogICAgICAgICAgICAkbXNk X2luaXRpYWxfem9vbSwgJG1zZF9tYXJrZXJfdHlwZSwgJG1zZF9tYXJrZXJfd2lkdGgsICRt c2RfbWFya2VyX2hlaWdodCwNCiAgICAgICAgICAgICRtc2RfbWFya2VyX3ByaW1hcnlfY29s b3IsICRtc2RfbWFya2VyX3N0cm9rZV9jb2xvciwNCiAgICAgICAgICAgICRtc2RfbWFya2Vy X2Nvcm5lcl9jb2xvcjsNCiAgICAgICAgJG1zZF9tYXBfdHh0ID0gbXNkX2dvb2dsZV9tYXBf Z1R4dCgibWFwIik7DQogICAgICAgICRtc2RfYWRkcmVzc190eHQgPSBtc2RfZ29vZ2xlX21h cF9nVHh0KCJhZGRyZXNzIik7DQogICAgICAgICRtc2Rfbm90Zm91bmRfdHh0ID0gbXNkX2dv b2dsZV9tYXBfZ1R4dCgibm90X2ZvdW5kIik7DQovKg0KICAgICAgICAkbXNkX3N0YXJ0X25v ZGUxID0gInAuYm9keSI7IC8vd29ya3MgaW4gcjMzNzIgYnV0IG5vdCByMzI3NQ0KICAgICAg ICAkbXNkX3N0YXJ0X25vZGUyID0gInAua2V5d29yZHMiOw0KKi8NCiAgICAgICAgJG1zZF9z dGFydF9ub2RlMSA9ICJsYWJlbFtmb3I9J2JvZHknXTpwYXJlbnQiOw0KICAgICAgICAkbXNk X3N0YXJ0X25vZGUyID0gImxhYmVsW2Zvcj0na2V5d29yZHMnXTpwYXJlbnQiOw0KDQplY2hv ICc8c2NyaXB0IHR5cGU9InRleHQvSmF2YVNjcmlwdCIgc3JjPSInLmh1Lid0ZXh0cGF0dGVy bi9pbmRleC5waHA/bXNkX2dvb2dsZV9tYXBfanM9bWFwaWNvbm1ha2VyX3BhY2tlZGpzIj48 L3NjcmlwdD4nOw0KZWNobyA8PDxtc2RfZ29vZ2xlX21hcF9oZWFkDQo8c2NyaXB0IHR5cGU9 InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vbWFwcy5nb29nbGUuY29tL21hcHM/Zmls ZT1hcGkmdj0yJmtleT0kbXNkX2dvb2dsZW1hcHNhcGlrZXkiPjwvc2NyaXB0Pg0KPHNjcmlw dCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KdmFyIGRlYnVnPWZhbHNlOw0KdmFyIG1zZF9t YXBfb2JqZWN0Ow0KdmFyIG15cG9pbnQ7DQp2YXIgbXlNYXJrZXI7DQpmdW5jdGlvbiBtc2RT aG93QWRkcmVzcygpIHsNCnZhciBhZGRyZXNzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdt c2RfYWRkcmVzcycpLnZhbHVlOw0KbXNkTG9nKCdhZGRyZXNzPScrYWRkcmVzcyk7DQp2YXIg Z2VvY29kZXIgPSBuZXcgR0NsaWVudEdlb2NvZGVyKCk7DQppZiAoZ2VvY29kZXIpIHsNCm1z ZExvZygnZ2VvY29kZXIgaXMgdGhlcmUnKTsNCmdlb2NvZGVyLmdldExhdExuZygNCmFkZHJl c3MsDQpmdW5jdGlvbihwb2ludCkgew0KbXNkTG9nKCdnZW9jb2RlciByZXR1cm5lZCcpOw0K aWYgKCFwb2ludCkgew0KbXNkTG9nKCdwb2ludCBpcyBudWxsJyk7DQphbGVydChhZGRyZXNz ICsgIiAkbXNkX25vdGZvdW5kX3R4dCIpOw0KfSBlbHNlIHsNCm1zZExvZygncG9pbnQgaXMg bm90IG51bGwnKTsNCm1zZF9tYXBfb2JqZWN0LnNldENlbnRlcihwb2ludCwgJG1zZF96b29t KTsNCm1zZExvZygnc2V0IGNlbnRlciBkb25lJyk7DQovL3ZhciBtYXJrZXIgPSBuZXcgR01h cmtlcihwb2ludCk7DQpteW1hcmtlci5zZXRMYXRMbmcocG9pbnQpOw0KbXNkTG9nKCdteW1h cmtlciBzZXQnKTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIkbXNkX2Nvb3JkMSIpLnZh bHVlPXBvaW50LmxhdCgpOw0KbXNkTG9nKCdjdXN0b20xIHNldCcpOw0KZG9jdW1lbnQuZ2V0 RWxlbWVudEJ5SWQoIiRtc2RfY29vcmQyIikudmFsdWU9cG9pbnQubG5nKCk7DQptc2RMb2co J2N1c3RvbTIgc2V0Jyk7DQp9DQp9DQopOw0KfQ0KfQ0KZnVuY3Rpb24gbXNkTG9nKG1lc3Nh Z2Upew0KaWYgKGRlYnVnKXsNCmNvbnNvbGUubG9nKG1lc3NhZ2UpOw0KfQ0KfQ0KJChkb2N1 bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7DQp2YXIgbXNkX3N0YXJ0X25vZGU7DQppZiAoJG1z ZF9tYXBwbGFjZW1lbnQgPT0gMSl7DQptc2Rfc3RhcnRfbm9kZSA9ICIkbXNkX3N0YXJ0X25v ZGUxIjsNCn1lbHNlew0KbXNkX3N0YXJ0X25vZGUgPSAiJG1zZF9zdGFydF9ub2RlMiI7DQp9 DQokKG1zZF9zdGFydF9ub2RlKS5iZWZvcmUoJzxwIGlkPSJtc2RfZ29vZ2xlX21hcCI+PGxh YmVsIGZvcj0ibWFwIj4kbXNkX21hcF90eHQgWytdPC9sYWJlbD48YnIgLz48ZGl2IGlkPSJt c2RfbWFwX2NvbnRhaW5lciI+PGRpdiBpZD0ibXNkX21hcCIgc3R5bGU9IndpZHRoOjUwMHB4 O2hlaWdodDoyMzBweDsiPjwvZGl2PjwvcD48cD48bGFiZWw+JG1zZF9hZGRyZXNzX3R4dDwv bGFiZWw+PGJyIC8+PGlucHV0IGlkPSJtc2RfYWRkcmVzcyIgdHlwZT0idGV4dCIgc2l6ZT0i NjAiIG5hbWU9ImFkZHJlc3MiIGNsYXNzPSJlZGl0Ii8+PGlucHV0IHR5cGU9ImJ1dHRvbiIg dmFsdWU9Ikxvb2t1cCIgaWQ9Im1zZF9sb29rdXAiIG9uY2xpY2s9Im1zZFNob3dBZGRyZXNz KCk7Ii8+PC9wPjwvZGl2PicpOw0KJCgnI21zZF9sb29rdXAnKS5jbGljayhmdW5jdGlvbigp IHsNCiAgbXNkU2hvd0FkZHJlc3MoKTsNCn0pOw0KJCh3aW5kb3cpLnVubG9hZChHVW5sb2Fk KCkpOw0KJCgiI21zZF9nb29nbGVfbWFwIikuY2xpY2soZnVuY3Rpb24gKCkgew0KJCgiI21z ZF9tYXBfY29udGFpbmVyIikudG9nZ2xlKCk7DQppZiAoJCgiI21zZF9nb29nbGVfbWFwIiku dGV4dCgpPT0iJG1zZF9tYXBfdHh0IFsrXSIpew0KJCgiI21zZF9nb29nbGVfbWFwIikudGV4 dCgiJG1zZF9tYXBfdHh0IFstXSIpOw0KfWVsc2V7DQokKCIjbXNkX2dvb2dsZV9tYXAiKS50 ZXh0KCIkbXNkX21hcF90eHQgWytdIik7DQp9DQp9KTsNCiQoIiNtc2RfbWFwX2NvbnRhaW5l ciIpLmhpZGUoKTsNCmlmICgkbXNkX21hcHBsYWNlbWVudCA9PSAxKXsNCm1zZF9tYXBfb2Jq ZWN0ID0gbmV3IEdNYXAyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtc2RfbWFwIiksICB7 IHNpemU6IG5ldyBHU2l6ZSg1MDAsMjMwKSB9ICk7DQp9ZWxzZXsNCm1zZF9tYXBfb2JqZWN0 ID0gbmV3IEdNYXAyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtc2RfbWFwIiksICB7IHNp emU6IG5ldyBHU2l6ZSgxNjAsMTMwKSB9ICk7DQp9DQppZiAoJG1zZF9tYXBUeXBlPT0xKXsN Cm1zZF9tYXBfb2JqZWN0LnNldE1hcFR5cGUoR19TQVRFTExJVEVfTUFQKTsNCn1lbHNlIGlm ICgkbXNkX21hcFR5cGU9PTIpew0KbXNkX21hcF9vYmplY3Quc2V0TWFwVHlwZShHX0hZQlJJ RF9NQVApOw0KfWVsc2V7DQptc2RfbWFwX29iamVjdC5zZXRNYXBUeXBlKEdfTk9STUFMX01B UCk7DQp9DQovL0lDT04NCnZhciBpY29uT3B0aW9ucyA9IHsNCndpZHRoOiAiMzIiLA0KaGVp Z2h0OiAiMzIiLA0KcHJpbWFyeUNvbG9yOiAiZmYwMDAwIiwNCmNvcm5lckNvbG9yOiAiZmZm ZmZmIiwNCnN0cm9rZUNvbG9yOiAiMDAwMDAwIg0KfTsNCmljb25PcHRpb25zLndpZHRoID0g JG1zZF9tYXJrZXJfd2lkdGg7DQppY29uT3B0aW9ucy5oZWlnaHQgPSAkbXNkX21hcmtlcl9o ZWlnaHQ7DQppY29uT3B0aW9ucy5wcmltYXJ5Q29sb3IgPSAiJG1zZF9tYXJrZXJfcHJpbWFy eV9jb2xvciI7DQppY29uT3B0aW9ucy5jb3JuZXJDb2xvciA9ICIkbXNkX21hcmtlcl9jb3Ju ZXJfY29sb3IiOw0KaWNvbk9wdGlvbnMuc3Ryb2tlQ29sb3IgPSAiJG1zZF9tYXJrZXJfc3Ry b2tlX2NvbG9yIjsNCnZhciBpY29uID0gTWFwSWNvbk1ha2VyLmNyZWF0ZU1hcmtlckljb24o aWNvbk9wdGlvbnMpOw0KDQoNCmlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiJG1zZF9j b29yZDEiKS52YWx1ZSE9PSIiICAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiJG1zZF9j b29yZDIiKS52YWx1ZSE9PSIiICl7DQp4ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIiRt c2RfY29vcmQxIikudmFsdWU7DQp5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIiRtc2Rf Y29vcmQyIikudmFsdWU7DQptc2RfbWFwX29iamVjdC5zZXRDZW50ZXIobmV3IEdMYXRMbmco eCx5KSwgJG1zZF96b29tKTsNCm15cG9pbnQ9IG5ldyBHTGF0TG5nKHgseSk7DQp9ZWxzZXsN Cm15cG9pbnQgPSBuZXcgR0xhdExuZygkbXNkX3N0YXJ0KTsNCm1zZF9tYXBfb2JqZWN0LnNl dENlbnRlcihteXBvaW50LCRtc2RfaW5pdGlhbF96b29tKTsNCn0NCm15bWFya2VyID0gbmV3 IEdNYXJrZXIobXlwb2ludCwge2ljb246IGljb259KTsNCm1zZF9tYXBfb2JqZWN0LmFkZE92 ZXJsYXkobXltYXJrZXIpOw0KaWYgKCRtc2RfY29udHJvbD09MSl7Ly8iR1NtYWxsTWFwQ29u dHJvbCIsIkdTbWFsbFpvb21Db250cm9sIiwiR1NtYWxsWm9vbUNvbnRyb2wzRCINCm1zZF9t YXBfb2JqZWN0LmFkZENvbnRyb2wobmV3IEdTbWFsbFpvb21Db250cm9sKCkpOw0KfWVsc2Ug aWYgKCRtc2RfY29udHJvbD09Mil7DQptc2RfbWFwX29iamVjdC5hZGRDb250cm9sKG5ldyBH U21hbGxab29tQ29udHJvbDNEKCkpOw0KfWVsc2V7DQptc2RfbWFwX29iamVjdC5hZGRDb250 cm9sKG5ldyBHU21hbGxNYXBDb250cm9sKCkpOw0KfQ0KR0V2ZW50LmFkZExpc3RlbmVyKG1z ZF9tYXBfb2JqZWN0LCJjbGljayIsIGZ1bmN0aW9uKG92ZXJsYXksIHBvaW50KSB7DQppZiAo b3ZlcmxheSkgew0KbXNkX21hcF9vYmplY3QucmVtb3ZlT3ZlcmxheShvdmVybGF5KTsNCn0g ZWxzZSBpZiAocG9pbnQpIHsNCm1zZF9tYXBfb2JqZWN0LnBhblRvKHBvaW50KTsNCm15bWFy a2VyLnNldExhdExuZyhwb2ludCk7DQptc2RfbWFwX29iamVjdC5hZGRPdmVybGF5KG15bWFy a2VyKTsNCn0NCn0pOw0KR0V2ZW50LmFkZExpc3RlbmVyKG1zZF9tYXBfb2JqZWN0LCJjbGlj ayIsIGZ1bmN0aW9uKG92ZXJsYXksIGxhdGxuZykgew0KaWYgKGxhdGxuZykgew0KZG9jdW1l bnQuZ2V0RWxlbWVudEJ5SWQoIiRtc2RfY29vcmQxIikudmFsdWU9bGF0bG5nLmxhdCgpOw0K ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIiRtc2RfY29vcmQyIikudmFsdWU9bGF0bG5nLmxu ZygpOw0KfQ0KfSk7DQp9KTsNCjwvc2NyaXB0Pg0KbXNkX2dvb2dsZV9tYXBfaGVhZDsNCn0N CgkJCQ0KZnVuY3Rpb24gbXNkX2dvb2dsZV9tYXBfc2V0dXAoJGV2ZW50LCAkc3RlcCkgew0K ICAgIGdsb2JhbCAkbXNkX2dvb2dsZW1hcHNhcGlrZXksICRtc2RfY29vcmQxLCAkbXNkX2Nv b3JkMiwgJG1zZF9zdGFydCwgDQogICAgICAgICAgICAkbXNkX21hcHBsYWNlbWVudCwgJG1z ZF9tYXBUeXBlLCAkbXNkX2NvbnRyb2wsICRtc2Rfem9vbSwNCiAgICAgICAgICAgICRtc2Rf aW5pdGlhbF96b29tLCAkbXNkX21hcmtlcl90eXBlLCAkbXNkX21hcmtlcl93aWR0aCwgJG1z ZF9tYXJrZXJfaGVpZ2h0LA0KICAgICAgICAgICAgJG1zZF9tYXJrZXJfcHJpbWFyeV9jb2xv ciwgJG1zZF9tYXJrZXJfc3Ryb2tlX2NvbG9yLA0KICAgICAgICAgICAgJG1zZF9tYXJrZXJf Y29ybmVyX2NvbG9yOw0KICAgIGdsb2JhbCAkcHJlZnM7DQoNCglpbmNsdWRlX29uY2UodHhw YXRoIC4gJy9pbmNsdWRlL3R4cF9wcmVmcy5waHAnKTsNCg0KICBpZiAocHMoInNhdmUiKSkg ew0KCXByZWZzX3NhdmUoKTsNCgloZWFkZXIoIkxvY2F0aW9uOiBpbmRleC5waHA/ZXZlbnQ9 bXNkX2dvb2dsZV9tYXAiKTsNCiAgfQ0KDQogIHBhZ2V0b3AobXNkX2dvb2dsZV9tYXBfZ1R4 dCgncHJlZmVyZW5jZXMnKSk7DQokbXNkX21hcFR5cGVzID0gYXJyYXkobXNkX2dvb2dsZV9t YXBfZ1R4dCgibm9ybWFsIiksbXNkX2dvb2dsZV9tYXBfZ1R4dCgic2F0ZWxpdHRlIiksbXNk X2dvb2dsZV9tYXBfZ1R4dCgiaHlicmlkIikpOw0KJG1zZF9jb250cm9scyA9IGFycmF5KG1z ZF9nb29nbGVfbWFwX2dUeHQoInpvb21fcGFuIiksbXNkX2dvb2dsZV9tYXBfZ1R4dCgiYmFz aWNfem9vbSIpLG1zZF9nb29nbGVfbWFwX2dUeHQoIjNkX3pvb20iKSk7DQokbXNkX3pvb21z ID0gYXJyYXkoMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywx OCwxOSk7DQogICAJCWlmIChpc3NldCgkcHJlZnNbJ21zZF9jb2xvcnBpY2tlcl9jdXN0b21m aWVsZCddKSkNCgkJew0KICAJZWNobyAiPHNjcmlwdCBzcmM9JyIuaHUuInRleHRwYXR0ZXJu L2luZGV4LnBocD9tc2RfY2xycGtyPWZhcmJ0YXN0aWNfanMnIHR5cGU9J3RleHQvamF2YXNj cmlwdCc+PC9zY3JpcHQ+IjsNCiAgICB9DQogIGVjaG8gZm9ybShzdGFydFRhYmxlKCJsaXN0 IikuDQogIHRyKHRkY3MoaGVkKG1zZF9nb29nbGVfbWFwX2dUeHQoInByZWZlcmVuY2VzIiks MSksMikpLg0KICB0cih0ZGNzKGhlZChtc2RfZ29vZ2xlX21hcF9nVHh0KCJpbnN0cnVjdGlv bnMiKSw0KSwyKSkuDQogIHRyKHRkYShtc2RfZ29vZ2xlX21hcF9nVHh0KCJkaXNwbGF5X2xh cmdlX21hcCIpLCAnIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O3ZlcnRpY2FsLWFsaWduOm1p ZGRsZSInKS50ZCh5ZXNub3JhZGlvKCJtc2RfbWFwcGxhY2VtZW50IiwkbXNkX21hcHBsYWNl bWVudCkpKS4NCiAgdHIodGRhKGhyZWYobXNkX2dvb2dsZV9tYXBfZ1R4dCgibWFwX2FwaV9r ZXkiKSwgImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vYXBpcy9tYXBzL3NpZ251cC5odG1sIiks ICcgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7dmVydGljYWwtYWxpZ246bWlkZGxlIicpLnRk KHRleHRfaW5wdXQoIm1zZF9nb29nbGVtYXBzYXBpa2V5IiwkbXNkX2dvb2dsZW1hcHNhcGlr ZXkpKSkuDQogIHRyKHRkYShtc2RfZ29vZ2xlX21hcF9nVHh0KCJsYXRfY3VzdG9tX2ZpZWxk IiksICcgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7dmVydGljYWwtYWxpZ246bWlkZGxlIicp LnRkKHRleHRfaW5wdXQoIm1zZF9jb29yZDEiLCRtc2RfY29vcmQxLCcyMCcpKSkuDQogIHRy KHRkYShtc2RfZ29vZ2xlX21hcF9nVHh0KCJsb25nX2N1c3RvbV9maWVsZCIpLCAnIHN0eWxl PSJ0ZXh0LWFsaWduOnJpZ2h0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZSInKS50ZCh0ZXh0X2lu cHV0KCJtc2RfY29vcmQyIiwkbXNkX2Nvb3JkMiwnMjAnKSkpLg0KICB0cih0ZGEobXNkX2dv b2dsZV9tYXBfZ1R4dCgic3RhcnRfY29vcmQiKSwgJyBzdHlsZT0idGV4dC1hbGlnbjpyaWdo dDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiJykudGQodGV4dF9pbnB1dCgibXNkX3N0YXJ0Iiwk bXNkX3N0YXJ0LCcyMCcpKSkuDQogIHRyKHRkYShocmVmKG1zZF9nb29nbGVfbWFwX2dUeHQo Im1hcF90eXBlIiksImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vYXBpcy9tYXBzL2RvY3VtZW50 YXRpb24vcmVmZXJlbmNlLmh0bWwjR01hcFR5cGUuR19OT1JNQUxfTUFQIiksICcgc3R5bGU9 InRleHQtYWxpZ246cmlnaHQ7dmVydGljYWwtYWxpZ246bWlkZGxlIicpLnRkKHNlbGVjdElu cHV0KCJtc2RfbWFwVHlwZSIsJG1zZF9tYXBUeXBlcywkbXNkX21hcFR5cGUpKSkuICANCiAg dHIodGRhKGhyZWYobXNkX2dvb2dsZV9tYXBfZ1R4dCgiY29udHJvbF90eXBlIiksImh0dHA6 Ly9jb2RlLmdvb2dsZS5jb20vYXBpcy9tYXBzL2RvY3VtZW50YXRpb24vcmVmZXJlbmNlLmh0 bWwjR0NvbnRyb2xJbXBsLkdTbWFsbE1hcENvbnRyb2wiKSwgJyBzdHlsZT0idGV4dC1hbGln bjpyaWdodDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiJykudGQoc2VsZWN0SW5wdXQoIm1zZF9j b250cm9sIiwkbXNkX2NvbnRyb2xzLCRtc2RfY29udHJvbCkpKS4gICAgDQogIHRyKHRkYSht c2RfZ29vZ2xlX21hcF9nVHh0KCJ6b29tX2xldmVsIiksICcgc3R5bGU9InRleHQtYWxpZ246 cmlnaHQ7dmVydGljYWwtYWxpZ246bWlkZGxlIicpLnRkKHNlbGVjdElucHV0KCJtc2Rfem9v bSIsJG1zZF96b29tcywkbXNkX3pvb20pKSkuICAgIA0KICB0cih0ZGEobXNkX2dvb2dsZV9t YXBfZ1R4dCgic3RhcnRfem9vbV9sZXZlbCIpLCAnIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0 O3ZlcnRpY2FsLWFsaWduOm1pZGRsZSInKS50ZChzZWxlY3RJbnB1dCgibXNkX2luaXRpYWxf em9vbSIsJG1zZF96b29tcywkbXNkX2luaXRpYWxfem9vbSkpKS4gDQogIHRyKHRkYShtc2Rf Z29vZ2xlX21hcF9nVHh0KCJtYXJrZXJfd2lkdGgiKSwgJyBzdHlsZT0idGV4dC1hbGlnbjpy aWdodDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiJykudGQodGV4dF9pbnB1dCgibXNkX21hcmtl cl93aWR0aCIsJG1zZF9tYXJrZXJfd2lkdGgsMykpKS4gICAgDQogIHRyKHRkYShtc2RfZ29v Z2xlX21hcF9nVHh0KCJtYXJrZXJfaGVpZ2h0IiksICcgc3R5bGU9InRleHQtYWxpZ246cmln aHQ7dmVydGljYWwtYWxpZ246bWlkZGxlIicpLnRkKHRleHRfaW5wdXQoIm1zZF9tYXJrZXJf aGVpZ2h0IiwkbXNkX21hcmtlcl9oZWlnaHQsMykpKS4gICAgDQogIHRyKHRkYShtc2RfZ29v Z2xlX21hcF9nVHh0KCJtYXJrZXJfcHJpbWFyeV9jb2xvciIpLCAnIHN0eWxlPSJ0ZXh0LWFs aWduOnJpZ2h0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZSInKS50ZCh0ZXh0X2lucHV0KCJtc2Rf bWFya2VyX3ByaW1hcnlfY29sb3IiLCRtc2RfbWFya2VyX3ByaW1hcnlfY29sb3IsNykpKS4g ICAgDQogIHRyKHRkYShtc2RfZ29vZ2xlX21hcF9nVHh0KCJtYXJrZXJfc3Ryb2tlX2NvbG9y IiksICcgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7dmVydGljYWwtYWxpZ246bWlkZGxlIicp LnRkKHRleHRfaW5wdXQoIm1zZF9tYXJrZXJfc3Ryb2tlX2NvbG9yIiwkbXNkX21hcmtlcl9z dHJva2VfY29sb3IsNykpKS4gICAgDQogIHRyKHRkYShtc2RfZ29vZ2xlX21hcF9nVHh0KCJt YXJrZXJfY29ybmVyX2NvbG9yIiksICcgc3R5bGU9InRleHQtYWxpZ246cmlnaHQ7dmVydGlj YWwtYWxpZ246bWlkZGxlIicpLnRkKHRleHRfaW5wdXQoIm1zZF9tYXJrZXJfY29ybmVyX2Nv bG9yIiwkbXNkX21hcmtlcl9jb3JuZXJfY29sb3IsNykpKS4gICAgDQogIA0KCQ0KICB0cih0 ZGEoZklucHV0KCJzdWJtaXQiLCJzYXZlIixnVHh0KCJzYXZlX2J1dHRvbiIpLCJwdWJsaXNo IikuZUlucHV0KCJtc2RfZ29vZ2xlX21hcCIpLnNJbnB1dCgnc2F2ZXByZWZzJyksICIgY29s c3Bhbj1cIjJcIiBjbGFzcz1cIm5vbGluZVwiIikpLg0KICBlbmRUYWJsZSgpKTsNCiAgZWNo byAnPGRpdiBpZD0icGlja2VyIiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7bGVmdDo4MDBw eDt0b3A6LTIwMHB4Ij48L2Rpdj4nOw0KICAgCQlpZiAoaXNzZXQoJHByZWZzWydtc2RfY29s b3JwaWNrZXJfY3VzdG9tZmllbGQnXSkpDQoJCXsNCg0KICAJZWNobyA8PDxFT0YNCjxzY3Jp cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCiAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rp b24oKSB7DQogICQoJyNtc2RfbWFya2VyX3ByaW1hcnlfY29sb3IsICNtc2RfbWFya2VyX3N0 cm9rZV9jb2xvciwgI21zZF9tYXJrZXJfY29ybmVyX2NvbG9yJykuYWRkQ2xhc3MoJ2NvbG9y d2VsbCcpOw0KICAgIHZhciBmID0gJC5mYXJidGFzdGljKCcjcGlja2VyJyk7DQogICAgdmFy IHAgPSAkKCcjcGlja2VyJykuY3NzKCdvcGFjaXR5JywgMC4yNSk7DQogICAgdmFyIHNlbGVj dGVkOw0KICAgICQoJy5jb2xvcndlbGwnKQ0KICAgICAgLmVhY2goZnVuY3Rpb24gKCkgeyBm LmxpbmtUbyh0aGlzKTsgJCh0aGlzKS5jc3MoJ29wYWNpdHknLCAwLjc1KTsgfSkNCiAgICAg IC5mb2N1cyhmdW5jdGlvbigpIHsNCiAgICAgICAgaWYgKHNlbGVjdGVkKSB7DQogICAgICAg ICAgJChzZWxlY3RlZCkuY3NzKCdvcGFjaXR5JywgMC43NSkucmVtb3ZlQ2xhc3MoJ2NvbG9y d2VsbC1zZWxlY3RlZCcpOw0KICAgICAgICB9DQogICAgICAgIGYubGlua1RvKHRoaXMpOw0K ICAgICAgICBwLmNzcygnb3BhY2l0eScsIDEpOw0KICAgICAgICAkKHNlbGVjdGVkID0gdGhp cykuY3NzKCdvcGFjaXR5JywgMSkuYWRkQ2xhc3MoJ2NvbG9yd2VsbC1zZWxlY3RlZCcpOw0K ICAgICAgfSk7DQogIH0pOw0KPC9zY3JpcHQ+DQpFT0Y7DQogIH0vL2NvbG9ycGlja2VyDQp9 DQovL1NlcnZlIHRoZSBtYXBpY29ubWFrZXJfcGFja2VkLmpzIGZpbGUNCmZ1bmN0aW9uIG1z ZF9nb29nbGVfbWFwX2pzKCl7DQoJCW9iX3N0YXJ0KCk7DQoJCW9iX2VuZF9jbGVhbigpOw0K ICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtdHlwZTogdGV4dC9KYXZhU2NyaXB0Jyk7DQoJCQkJ JGNvZGUgPSAnWlhaaGJDaG1kVzVqZEdsdmJpaHdMR0VzWXl4ckxHVXNjaWw3WlQxbWRXNWpk R2x2YmloaktYdHlaWFIxY200b1l6eGhQeWNuT21Vbw0KY0dGeWMyVkpiblFvWXk5aEtTa3BL eWdvWXoxakpXRXBQak0xUDFOMGNtbHVaeTVtY205dFEyaGhja052WkdVb1l5c3lPU2s2WXk1 MA0KYjFOMGNtbHVaeWd6TmlrcGZUdHBaaWdoSnljdWNtVndiR0ZqWlNndlhpOHNVM1J5YVc1 bktTbDdkMmhwYkdVb1l5MHRLWEpiWlNoag0KS1YwOWExdGpYWHg4WlNoaktUdHJQVnRtZFc1 amRHbHZiaWhsS1h0eVpYUjFjbTRnY2x0bFhYMWRPMlU5Wm5WdVkzUnBiMjRvS1h0eQ0KWlhS MWNtNG5YRngzS3lkOU8yTTlNWDA3ZDJocGJHVW9ZeTB0S1dsbUtHdGJZMTBwY0Qxd0xuSmxj R3hoWTJVb2JtVjNJRkpsWjBWNA0KY0NnblhGeGlKeXRsS0dNcEt5ZGNYR0luTENkbkp5a3Nh MXRqWFNrN2NtVjBkWEp1SUhCOUtDY3pJSGM5ZTMwN2R5NHhTejFMS0dncA0KZXpNZ1pqMW9M akZoZkh4Qk96TWdZajFvTGpGbmZIeEJPek1nWlQxb0xsQjhmQ0lqTVRVaU96TWdZVDFvTGpF emZId2lJMGNpT3pNZw0KWnoxb0xqSXdmSHdpSXpGWElqc3pJR1E5SWs0Nkx5OTZMa3d1VVM1 UEwzby9VajB4UWlJN015QnFQV1FySWlaVlBTSXJaaXNpZUNJcg0KWWlzaUpsUTlJaXRuTGpR b0lpTWlMQ0lpS1NzaUxDSXJaUzQwS0NJaklpd2lJaWtySWl3aUsyRXVOQ2dpSXlJc0lpSXBL eUltUmowdQ0KUlNJN015QmpQWFVnTVRBb1dTazdZeTVZUFdvN1l5NVdQWFVnUWlobUxHSXBP Mk11TVRrOWRTQkNLSGt1TVdVb1ppb3hMallwTEdJcA0KTzJNdU1UUTlkU0JJS0dZdk1peGlL VHRqTGpFM1BYVWdTQ2htTHpJc2VTNHhaU2hpTHpFeUtTazdZeTR4T0QxcUt5SW1TajFKSWp0 ag0KTGpGdFBXb3JJaVpFUFZNc2N5d3hhQ0lySWlaS1BVa2lPMm85WkNzaUpsVTlJaXRtS3lK NElpdGlLeUltVkQwaUsyY3VOQ2dpSXlJcw0KSWlJcEt5SXNJaXRsTGpRb0lpTWlMQ0lpS1Nz aUxDSXJZUzQwS0NJaklpd2lJaWs3WXk0eGJEMXFLeUltUkQxaExITXNNWEFtUmowdQ0KUlNJ N1l5NTJQVnRtTHpJc1lpd29OeTh4TmlrcVppd29OUzg0S1NwaUxDZzFMekUyS1NwbUxDZzNM ekUyS1NwaUxDZzNMMEVwS21Zcw0KS0RVdk1UWXBLbUlzS0RVdk1UWXBLbVlzS0RFdk9Da3FZ aXdvTVM4eUtTcG1MREFzS0RFeEx6RTJLU3BtTENneEx6Z3BLbUlzS0RJMQ0KTDBFcEttWXNL RFV2TVRZcEttSXNLREV4THpFMktTcG1MQ2czTHpFMktTcGlMQ2c1THpFMktTcG1MQ2cxTHpn cEttSmRPekZyS0RNZw0KYVQwd08yazhZeTUyTGpGYU8ya3JLeWw3WXk1MlcybGRQVm9vWXk1 MlcybGRLWDFESUdOOU8zY3VNVlk5U3locktYc3pJR2c5YXk0eA0KWVh4OFFUc3pJR285YXk0 eFozeDhRVHN6SUdROWF5NVFmSHdpSXpFMUlqc3pJR2s5YXk0eFZIeDhJaU5ISWpzeklHMDlk eTVYS0dzdQ0KTVdvcGZId2lJanN6SUdNOWF5NHhhWHg4SWlOSElqc3pJR3c5YXk0eFUzeDhN RHN6SUhNOWF5NHhVbng4SWpGbUlqc3pJR1k5S0hNOQ0KUFQwaU1XWWlLVDhpTVZFaU9pSXha Q0k3TXlCMFBTSk9PaTh2ZWk1TUxsRXVUeTk2UDFJOUlpdG1Pek1nYmoxMEt5SW1WVDBpSzJn cg0KSW5naUsyb3JJaVpVUFNJclpDNDBLQ0lqSWl3aUlpa3JJaXdpSzJrdU5DZ2lJeUlzSWlJ cEt5SXhVQ3d4WXlJcklpWXhZajBpSzIwcg0KSWlZeFR6MGlLMk11TkNnaUl5SXNJaUlwS3lJ c0lpdHNPek1nWlQxMUlERXdLRmtwTzJVdVdEMXVLeUltUkQxVExITXNNVTBpS3lJbQ0KUmow dVJTSTdaUzVXUFhVZ1FpaG9MR29wTzJVdU1UazlkU0JDS0RBc01DazdaUzR4TkQxMUlFZ29h Qzh5TEdvdk1pazdaUzR4TnoxMQ0KSUVnb2FDOHlMR292TWlrN1pTNHhPRDF1S3lJbVNqMUpJ anRsTGpGdFBXNHJJaVpFUFZNc2N5d3hhQ0lySWlaS1BVa2lPMlV1TVd3OQ0KYmlzaUprUTlZ U3h6TERGakprWTlMa1VpTzJVdWRqMWJYVHROS0dZOVBUMGlNV1FpS1h0bExuWTlXekFzTUN4 b0xEQXNhQ3hxTERBcw0KYWwxOU1VcDdNeUJ2UFRnN015QnlQVEZKTDI4N015QmlQWGt1TVVn b2FDeHFLUzh5T3pGcktETWdZVDB3TzJFOEtHOHJNU2s3WVNzcg0KS1hzeklHYzljaXBoS2lo NUxqRkhMekZHS1RzeklIQTlZaXRpS25rdU1VVW9aeWs3TXlCeFBXSXJZaXA1TGpGRUtHY3BP MlV1ZGk0eA0KUVNoYUtIQXBMRm9vY1NrcGZYMURJR1Y5TzNjdU1VdzlTeWhyS1hzeklHbzlh eTVRZkh3aUl6RjZJanN6SUdJOWF5NHhNM3g4SWlOSA0KSWpzeklHWTlheTR4VG54OElpTXhl U0k3TXlCaFBXc3VNWGg4ZkNJak1YY2lPek1nWlQxM0xsY29heTR4YWlsOGZDSWlPek1nWkQx cg0KTGpGcGZId2lJMGNpT3pNZ2FUMXJMakYyZkh3eGRUc3pJR005S0drcFB5SXhkQ0k2SWpG eklqc3pJR2c5SWs0Nkx5OTZMa3d1VVM1UA0KTDNvL1VqMWtKakZWUFRGeUpqRmlQU0k3TXlC c1BXZ3JZeXNpWENkcFhGeGNYQ0lySWx3bld5SXJaU3NpWENjdE1sd25abHhjWEZ3aQ0KS3lJ eGNWd25ZVnhjWEZ4ZElpc2lhRnhjWEZ4ZGIxeGNYRndpSzJvdU5DZ2lJeUlzSWlJcEt5SmNK ekZZWEZ4Y1hDSXJaQzQwS0NJag0KSWl3aUlpa3JJbHduTVZsY1hGeGNJaXRpTGpRb0lpTWlM Q0lpS1NzaVhDY3hiMXhjWEZ3aU8wMG9hU2w3YkNzOVppNDBLQ0lqSWl3aQ0KSWlrcklsd25N VU5jWEZ4Y0lpdGhMalFvSWlNaUxDSWlLU3NpWENjeGJseGNYRndpZld3clBTSXlNbHduWmx4 Y1hGd2lPek1nWnoxMQ0KSURFd0tGa3BPMmN1V0Qxc0t5SW1SajB1UlNJN1p5NVdQU2hwS1Q5 MUlFSW9Nak1zTWprcE9uVWdRaWd5TVN3eU9DazdReUJuZlR0Mw0KTGxjOVN5aGhLWHROS0dF OVBUMHlOeWw3UXlBeU5uMWhQV0V1TkNndlFDOHNJa0JBSWlrN1lUMWhMalFvTDF4Y1hGd3ZM Q0pBWEZ4Yw0KWENJcE8yRTlZUzQwS0M5Y0p5OHNJa0JjSnlJcE8yRTlZUzQwS0M5Y1hGc3ZM Q0pBV3lJcE8yRTlZUzQwS0M5Y1hGMHZMQ0pBWFNJcA0KTzBNZ01qUW9ZU2w5T3ljc05qSXNN VE0wTENkOGZIeDJZWEo4Y21Wd2JHRmpaWHg4Zkh4OGZIeDhmSHg4Zkh4OGZIeDhmSHg4Zkh4 OA0KZkh4OGJtVjNmR2x0WVdkbFRXRndmRTFoY0VsamIyNU5ZV3RsY254OFRXRjBhSHhqYUdG eWRId3pNbnhIVTJsNlpYeHlaWFIxY201OA0KWTJobWZIQnVaM3hsZUhSOE1EQXdNREF3ZkVk UWIybHVkSHhuYVdaOFkyaHZabnhtZFc1amRHbHZibnhoY0dsemZHbG1mR2gwZEhCOA0KWTI5 dGZIQnlhVzFoY25sRGIyeHZjbnhuYjI5bmJHVjhZMmgwZkdKbmZHTm9ZMjk4WTJoemZHbGpi MjVUYVhwbGZHVnpZMkZ3WlZWeg0KWlhKVVpYaDBYM3hwYldGblpYeEhYMFJGUmtGVlRGUmZT VU5QVG54d1lYSnpaVWx1ZEh4SFNXTnZibng4ZkhOMGNtOXJaVU52Ykc5eQ0KZkdsamIyNUJi bU5vYjNKOFptWXdNREF3Zkh4cGJtWnZWMmx1Wkc5M1FXNWphRzl5ZkhCeWFXNTBTVzFoWjJW OGMyaGhaRzkzVTJsNg0KWlh4M2FXUjBhSHhqYUd4OFptWm1abVptTURGOGFYUnlmR1pzYjI5 eWZHTnBjbU5zWlh4b1pXbG5hSFI4UlVORlEwUTRmR3hoWW1Wcw0KUTI5c2IzSjhiR0ZpWld4 OFptOXlmSFJ5WVc1emNHRnlaVzUwZkcxdmVsQnlhVzUwU1cxaFoyVjhNRU44WlVOOFptWm1a bVptTVRGOA0KYUhaOGJXRndjMkZ3YVh4d2FXNThjR2x1WDNOMFlYSjhabUZzYzJWOFlXUmtV M1JoY253d01EQXdSa1o4YzNSaGNsTjBjbTlyWlVOdg0KYkc5eWZFWkdSa1l3TUh4RVFUY3hP RGQ4Y0hWemFIeHRiWHg4YzJsdWZHTnZjM3d4T0RCOFVFbDhiV2x1ZkRNMk1IeGxiSE5sZkdO eQ0KWldGMFpVMWhjbXRsY2tsamIyNThZM0psWVhSbFRHRmlaV3hsWkUxaGNtdGxja2xqYjI1 OE1EQXdNREF3TURCOGMzUmhjbEJ5YVcxaA0KY25sRGIyeHZjbnhqYUhoOFptWjhhWFI4YzJo aGNHVjhiR0ZpWld4VGFYcGxmSE5vWVdSdmQwTnZiRzl5ZkdOb1pIQjhZM0psWVhSbA0KUm14 aGRFbGpiMjU4Wm1abVptWm1mR1pEZkhSRGZHeGxibWQwYUh4amIzSnVaWEpEYjJ4dmNueDhU R0YxZEc5OGZHVnVZMjlrWlZWUw0KU1VOdmJYQnZibVZ1ZEh4OGJuVnNiSHgxYm1SbFptbHVa V1I4TXpSOE16a25Mbk53YkdsMEtDZDhKeWtzTUN4N2ZTa3AnOw0KCQllY2hvIGJhc2U2NF9k ZWNvZGUoJGNvZGUpOw0KCQlleGl0KCk7DQoJCX0NCiI7czo0OiJ0eXBlIjtzOjE6IjMiO3M6 NDoiaGVscCI7czo1MjE6Igk8aDEgY2xhc3M9InRpdGxlIj5tc2RfZ29vZ2xlX21hcDwvaDE+ CgoJPGgyIGNsYXNzPSJzZWN0aW9uIj5GZWF0dXJlczwvaDI+CgoJPHA+QWRkcyBhIEdvb2ds ZSBNYXAgdG8gdGhlIEFydGljbGUgV3JpdGUgcGFnZSBhbGxvd2luZyBhdXRob3JzIHRvIGVh c2lseSBhc3NvY2lhdGUgPHNwYW4gY2xhc3M9ImNhcHMiPkdQUzwvc3Bhbj4gQ29vcmRpbmF0 ZXMgd2l0aCBlYWNoIGFydGljbGUuPC9wPgoKCTxoMiBjbGFzcz0ic2VjdGlvbiI+U2V0dXA8 L2gyPgoKCTxwPlNldCB0aGUgPGEgaHJlZj0iL3RleHRwYXR0ZXJuL2luZGV4LnBocD9ldmVu dD1tc2RfZ29vZ2xlX21hcCI+cGx1Z2luIHByZWZlcmVuY2VzPC9hPiB0byBjb25maWd1cmUg aG93IHlvdXIgbWFwIHdpbGwgYmUgZGlzcGxheWVkIGFuZCB0byBwcm92aWRlIHlvdXIgPGEg aHJlZj0iaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9hcGlzL21hcHMvc2lnbnVwLmh0bWwiPkdv b2dsZSBNYXBzIDxzcGFuIGNsYXNzPSJjYXBzIj5BUEk8L3NwYW4+IEtleTwvYT48L3A+Ijtz OjU6Im9yZGVyIjtzOjE6IjUiO3M6MzoibWQ1IjtzOjMyOiIxMmEyYmI5N2UxODNlMjM0NDcw YjhmZjkxZjE2MTA4OSI7fQ==